diff --git a/Client/Entities/EntitiesThread.cs b/Client/Entities/EntitiesThread.cs index b0a8265..42b02f7 100644 --- a/Client/Entities/EntitiesThread.cs +++ b/Client/Entities/EntitiesThread.cs @@ -21,16 +21,16 @@ namespace CoopClient.Entities return; } - Dictionary localNpcs = null; + Dictionary localNpcs = null; lock (Main.Npcs) { - localNpcs = new Dictionary(Main.Npcs); + localNpcs = new Dictionary(Main.Npcs); } int tickCount = Environment.TickCount; for (int i = localNpcs.Count - 1; i >= 0; i--) { - string key = localNpcs.ElementAt(i).Key; + long key = localNpcs.ElementAt(i).Key; if ((tickCount - localNpcs[key].LastUpdateReceived) > 3500) { @@ -51,7 +51,7 @@ namespace CoopClient.Entities lock (Main.Npcs) { - foreach (KeyValuePair npc in new Dictionary(Main.Npcs)) + foreach (KeyValuePair npc in new Dictionary(Main.Npcs)) { if (!localNpcs.ContainsKey(npc.Key)) { diff --git a/Client/Main.cs b/Client/Main.cs index 21edec6..79af491 100644 --- a/Client/Main.cs +++ b/Client/Main.cs @@ -30,9 +30,9 @@ namespace CoopClient public static Networking MainNetworking = new Networking(); - public static string LocalPlayerID = null; - public static readonly Dictionary Players = new Dictionary(); - public static readonly Dictionary Npcs = new Dictionary(); + public static long LocalPlayerID = 0; + public static readonly Dictionary Players = new Dictionary(); + public static readonly Dictionary Npcs = new Dictionary(); public Main() { @@ -76,7 +76,7 @@ namespace CoopClient MainChat.Tick(); // Display all players - foreach (KeyValuePair player in Players) + foreach (KeyValuePair player in Players) { player.Value.DisplayLocally(player.Value.Username); } @@ -156,7 +156,7 @@ namespace CoopClient private void OnAbort(object sender, EventArgs e) { - foreach (KeyValuePair player in Players) + foreach (KeyValuePair player in Players) { player.Value.Character?.AttachedBlip?.Delete(); player.Value.Character?.CurrentVehicle?.Delete(); @@ -165,7 +165,7 @@ namespace CoopClient player.Value.PedBlip?.Delete(); } - foreach (KeyValuePair Npc in Npcs) + foreach (KeyValuePair Npc in Npcs) { Npc.Value.Character?.CurrentVehicle?.Delete(); Npc.Value.Character?.Kill(); @@ -175,7 +175,7 @@ namespace CoopClient public static void CleanUp() { - foreach (KeyValuePair player in Players) + foreach (KeyValuePair player in Players) { player.Value.Character?.AttachedBlip?.Delete(); player.Value.Character?.CurrentVehicle?.Delete(); @@ -185,7 +185,7 @@ namespace CoopClient } Players.Clear(); - foreach (KeyValuePair Npc in Npcs) + foreach (KeyValuePair Npc in Npcs) { Npc.Value.Character?.CurrentVehicle?.Delete(); Npc.Value.Character?.Kill(); @@ -231,10 +231,10 @@ namespace CoopClient private void Debug() { Ped player = Game.Player.Character; - if (!Players.ContainsKey("DebugKey")) + if (!Players.ContainsKey(0)) { - Players.Add("DebugKey", new EntitiesPlayer() { SocialClubName = "DEBUG", Username = "DebugPlayer" }); - DebugSyncPed = Players["DebugKey"]; + Players.Add(0, new EntitiesPlayer() { SocialClubName = "DEBUG", Username = "DebugPlayer" }); + DebugSyncPed = Players[0]; } if ((Environment.TickCount - ArtificialLagCounter) < 37) diff --git a/Client/Menus/Sub/Settings.cs b/Client/Menus/Sub/Settings.cs index 959307f..80f8a3b 100644 --- a/Client/Menus/Sub/Settings.cs +++ b/Client/Menus/Sub/Settings.cs @@ -62,7 +62,7 @@ namespace CoopClient.Menus.Sub Main.DebugSyncPed = null; Main.LastFullDebugSync = 0; - Main.Players.Remove("DebugKey"); + Main.Players.Remove(0); } } } diff --git a/Client/Networking.cs b/Client/Networking.cs index 2b0ab28..2c4ea97 100644 --- a/Client/Networking.cs +++ b/Client/Networking.cs @@ -45,7 +45,7 @@ namespace CoopClient NetOutgoingMessage outgoingMessage = Client.CreateMessage(); new HandshakePacket() { - ID = string.Empty, + ID = 0, SocialClubName = Game.Player.Name, Username = Main.MainSettings.Username, ModVersion = Main.CurrentModVersion, @@ -259,6 +259,39 @@ namespace CoopClient Main.Players.Remove(packet.Player); } + + //if (!Main.NpcsAllowed) + //{ + // return; + //} + // + //lock (Main.Npcs) + //{ + // for (int i = 0; i < Main.Npcs.Count; i++) + // { + // long key = Main.Npcs.ElementAt(i).Key; + // + // if (!key.ToString().StartsWith(packet.Player.ToString())) + // { + // return; + // } + // + // EntitiesNpc npcData = Main.Npcs[key]; + // + // if (npcData.Character != null && npcData.Character.Exists() && npcData.Health > 0) + // { + // npcData.Character.Kill(); + // npcData.Character.Delete(); + // } + // + // if (npcData.MainVehicle != null && npcData.MainVehicle.Exists() && npcData.MainVehicle.PassengerCount == 0) + // { + // npcData.MainVehicle.Delete(); + // } + // + // Main.Npcs.Remove(key); + // } + //} } private void FullSyncPlayer(FullSyncPlayerPacket packet) diff --git a/Client/Packets.cs b/Client/Packets.cs index fe6157c..e7e36d2 100644 --- a/Client/Packets.cs +++ b/Client/Packets.cs @@ -199,7 +199,7 @@ namespace CoopClient class HandshakePacket : Packet { [ProtoMember(1)] - public string ID { get; set; } + public long ID { get; set; } [ProtoMember(2)] public string SocialClubName { get; set; } @@ -241,7 +241,7 @@ namespace CoopClient class PlayerConnectPacket : Packet { [ProtoMember(1)] - public string Player { get; set; } + public long Player { get; set; } [ProtoMember(2)] public string SocialClubName { get; set; } @@ -275,7 +275,7 @@ namespace CoopClient class PlayerDisconnectPacket : Packet { [ProtoMember(1)] - public string Player { get; set; } + public long Player { get; set; } public override void PacketToNetOutGoingMessage(NetOutgoingMessage message) { @@ -301,7 +301,7 @@ namespace CoopClient struct PlayerPacket { [ProtoMember(1)] - public string Player { get; set; } + public long Player { get; set; } [ProtoMember(2)] public int Health { get; set; } @@ -589,7 +589,7 @@ namespace CoopClient class FullSyncNpcPacket : Packet { [ProtoMember(1)] - public string ID { get; set; } + public long ID { get; set; } [ProtoMember(2)] public int ModelHash { get; set; } @@ -655,7 +655,7 @@ namespace CoopClient class FullSyncNpcVehPacket : Packet { [ProtoMember(1)] - public string ID { get; set; } + public long ID { get; set; } [ProtoMember(2)] public int ModelHash { get; set; } diff --git a/Client/PlayerList.cs b/Client/PlayerList.cs index 79a586a..42a0cdc 100644 --- a/Client/PlayerList.cs +++ b/Client/PlayerList.cs @@ -47,7 +47,7 @@ namespace CoopClient MainScaleform.CallFunction("DISPLAY_VIEW"); } - private void Update(Dictionary players, string localUsername) + private void Update(Dictionary players, string localUsername) { LastUpdate = Environment.TickCount; @@ -56,7 +56,7 @@ namespace CoopClient int i = 1; - foreach (KeyValuePair player in players) + foreach (KeyValuePair player in players) { MainScaleform.CallFunction("SET_DATA_SLOT", i++, $"{player.Value.Latency * 1000:N0}ms", player.Value.Username, 116, 0, i - 1, "", "", 2, "", "", ' '); } diff --git a/Server/Packets.cs b/Server/Packets.cs index ad6ed43..4d6692d 100644 --- a/Server/Packets.cs +++ b/Server/Packets.cs @@ -131,7 +131,7 @@ namespace CoopServer class HandshakePacket : Packet { [ProtoMember(1)] - public string ID { get; set; } + public long ID { get; set; } [ProtoMember(2)] public string SocialClubName { get; set; } @@ -173,7 +173,7 @@ namespace CoopServer class PlayerConnectPacket : Packet { [ProtoMember(1)] - public string Player { get; set; } + public long Player { get; set; } [ProtoMember(2)] public string SocialClubName { get; set; } @@ -207,7 +207,7 @@ namespace CoopServer class PlayerDisconnectPacket : Packet { [ProtoMember(1)] - public string Player { get; set; } + public long Player { get; set; } public override void PacketToNetOutGoingMessage(NetOutgoingMessage message) { @@ -233,7 +233,7 @@ namespace CoopServer struct PlayerPacket { [ProtoMember(1)] - public string Player { get; set; } + public long Player { get; set; } [ProtoMember(2)] public int Health { get; set; } @@ -521,7 +521,7 @@ namespace CoopServer class FullSyncNpcPacket : Packet { [ProtoMember(1)] - public string ID { get; set; } + public long ID { get; set; } [ProtoMember(2)] public int ModelHash { get; set; } @@ -587,7 +587,7 @@ namespace CoopServer class FullSyncNpcVehPacket : Packet { [ProtoMember(1)] - public string ID { get; set; } + public long ID { get; set; } [ProtoMember(2)] public int ModelHash { get; set; } diff --git a/Server/Server.cs b/Server/Server.cs index 2178bb7..e60fb2e 100644 --- a/Server/Server.cs +++ b/Server/Server.cs @@ -29,7 +29,7 @@ namespace CoopServer public static NetServer MainNetServer; - public static readonly Dictionary Players = new(); + public static readonly Dictionary Players = new(); private static ServerScript GameMode; @@ -182,7 +182,7 @@ namespace CoopServer while ((message = MainNetServer.ReadMessage()) != null) { - string player; + long player; switch (message.MessageType) { @@ -212,7 +212,7 @@ namespace CoopServer case NetIncomingMessageType.StatusChanged: NetConnectionStatus status = (NetConnectionStatus)message.ReadByte(); - player = NetUtility.ToHexString(message.SenderConnection.RemoteUniqueIdentifier); + player = message.SenderConnection.RemoteUniqueIdentifier; if (status == NetConnectionStatus.Disconnected && Players.ContainsKey(player)) { @@ -356,7 +356,7 @@ namespace CoopServer } break; case NetIncomingMessageType.ConnectionLatencyUpdated: - Players[NetUtility.ToHexString(message.SenderConnection.RemoteUniqueIdentifier)].Latency = message.ReadFloat(); + Players[message.SenderConnection.RemoteUniqueIdentifier].Latency = message.ReadFloat(); break; case NetIncomingMessageType.ErrorMessage: Logging.Error(message.ReadString()); @@ -383,20 +383,20 @@ namespace CoopServer { return new(MainNetServer.Connections.Where(e => e != local)); } - private static List FilterAllLocal(string local) + private static List FilterAllLocal(long local) { - return new(MainNetServer.Connections.Where(e => NetUtility.ToHexString(e.RemoteUniqueIdentifier) != local)); + return new(MainNetServer.Connections.Where(e => e.RemoteUniqueIdentifier != local)); } // Return a list of players within range of ... private static List GetAllInRange(LVector3 position, float range) { - return new(MainNetServer.Connections.FindAll(e => Players[NetUtility.ToHexString(e.RemoteUniqueIdentifier)].Ped.IsInRangeOf(position, range))); + return new(MainNetServer.Connections.FindAll(e => Players[e.RemoteUniqueIdentifier].Ped.IsInRangeOf(position, range))); } // Return a list of players within range of ... but not the local one private static List GetAllInRange(LVector3 position, float range, NetConnection local) { - return new(MainNetServer.Connections.Where(e => e != local && Players[NetUtility.ToHexString(e.RemoteUniqueIdentifier)].Ped.IsInRangeOf(position, range))); + return new(MainNetServer.Connections.Where(e => e != local && Players[e.RemoteUniqueIdentifier].Ped.IsInRangeOf(position, range))); } #region -- PLAYER -- @@ -447,7 +447,7 @@ namespace CoopServer return; } - foreach (KeyValuePair player in Players) + foreach (KeyValuePair player in Players) { if (player.Value.SocialClubName == packet.SocialClubName) { @@ -461,7 +461,7 @@ namespace CoopServer } } - string localPlayerID = NetUtility.ToHexString(local.RemoteUniqueIdentifier); + long localPlayerID = local.RemoteUniqueIdentifier; // Add the player to Players Players.Add(localPlayerID, @@ -510,7 +510,7 @@ namespace CoopServer // Send all players to local playerList.ForEach(targetPlayer => { - string targetPlayerID = NetUtility.ToHexString(targetPlayer.RemoteUniqueIdentifier); + long targetPlayerID = targetPlayer.RemoteUniqueIdentifier; EntitiesPlayer targetEntity = Players[targetPlayerID]; diff --git a/Server/ServerScript.cs b/Server/ServerScript.cs index a733676..0ed0bde 100644 --- a/Server/ServerScript.cs +++ b/Server/ServerScript.cs @@ -125,17 +125,17 @@ namespace CoopServer } protected static int GetAllPlayersCount() { lock (Server.Players) return Server.Players.Count; } - protected static Dictionary GetAllPlayers() { lock (Server.Players) return Server.Players; } + protected static Dictionary GetAllPlayers() { lock (Server.Players) return Server.Players; } protected static void KickPlayerByUsername(string username, string reason) { lock (Server.Players) { - foreach (KeyValuePair player in Server.Players) + foreach (KeyValuePair player in Server.Players) { if (player.Value.Username == username) { - Server.MainNetServer.Connections.Find(e => NetUtility.ToHexString(e.RemoteUniqueIdentifier) == player.Key).Disconnect(reason); + Server.MainNetServer.Connections.Find(e => e.RemoteUniqueIdentifier == player.Key).Disconnect(reason); return; } } @@ -163,7 +163,7 @@ namespace CoopServer { lock (Server.Players) { - foreach (KeyValuePair player in Server.Players) + foreach (KeyValuePair player in Server.Players) { if (player.Value.Username == username) { @@ -177,7 +177,7 @@ namespace CoopServer NetOutgoingMessage outgoingMessage = Server.MainNetServer.CreateMessage(); packet.PacketToNetOutGoingMessage(outgoingMessage); - Server.MainNetServer.SendMessage(outgoingMessage, Server.MainNetServer.Connections.Find(con => NetUtility.ToHexString(con.RemoteUniqueIdentifier) == player.Key), NetDeliveryMethod.ReliableOrdered, 0); + Server.MainNetServer.SendMessage(outgoingMessage, Server.MainNetServer.Connections.Find(con => con.RemoteUniqueIdentifier == player.Key), NetDeliveryMethod.ReliableOrdered, 0); return; } }