mirror of
https://github.com/misternebula/quantum-space-buddies.git
synced 2025-02-21 00:39:53 +00:00
include count in hash message
This commit is contained in:
parent
65b7ea9f04
commit
c3c8e6a375
@ -23,7 +23,7 @@ public static class QSBWorldSync
|
||||
public static WorldObjectManager[] Managers;
|
||||
|
||||
private static readonly Dictionary<string, List<IWorldObject>> _managerToBuiltObjects = new();
|
||||
public static readonly Dictionary<string, string> ManagerHashes = new();
|
||||
public static readonly Dictionary<string, (string hash, int count)> ManagerHashes = new();
|
||||
|
||||
/// <summary>
|
||||
/// Set when all WorldObjectManagers have called Init() on all their objects (AKA all the objects are created)
|
||||
@ -91,15 +91,16 @@ public static class QSBWorldSync
|
||||
foreach (var item in _managerToBuiltObjects)
|
||||
{
|
||||
var worldObjects = item.Value;
|
||||
var hash = worldObjects.Select(x => x.GetType().Name).GetMD5Hash();
|
||||
ManagerHashes[item.Key] = hash;
|
||||
var objects = worldObjects.Select(x => x.GetType().Name);
|
||||
var hash = objects.GetMD5Hash();
|
||||
ManagerHashes[item.Key] = (hash, objects.Count());
|
||||
}
|
||||
|
||||
if (!QSBCore.IsHost)
|
||||
{
|
||||
foreach (var item in ManagerHashes)
|
||||
{
|
||||
new WorldObjectsHashMessage(item.Key, item.Value).Send();
|
||||
new WorldObjectsHashMessage(item.Key, item.Value.hash, item.Value.count).Send();
|
||||
}
|
||||
|
||||
new RequestLinksMessage().Send();
|
||||
|
@ -8,21 +8,21 @@ namespace QSB.WorldSync;
|
||||
/// <summary>
|
||||
/// sends QSBWorldSync.WorldObjectsHash to the server for sanity checking
|
||||
/// </summary>
|
||||
internal class WorldObjectsHashMessage : QSBMessage<(string managerName, string hash)>
|
||||
internal class WorldObjectsHashMessage : QSBMessage<(string managerName, string hash, int count)>
|
||||
{
|
||||
public WorldObjectsHashMessage(string managerName, string hash) : base((managerName, hash)) => To = 0;
|
||||
public WorldObjectsHashMessage(string managerName, string hash, int count) : base((managerName, hash, count)) => To = 0;
|
||||
|
||||
public override void OnReceiveRemote()
|
||||
{
|
||||
Delay.RunWhen(() => QSBWorldSync.AllObjectsAdded, () =>
|
||||
{
|
||||
var serverHash = QSBWorldSync.ManagerHashes[Data.managerName];
|
||||
var (hash, count) = QSBWorldSync.ManagerHashes[Data.managerName];
|
||||
|
||||
if (serverHash != Data.hash)
|
||||
if (hash != Data.hash)
|
||||
{
|
||||
// oh fuck oh no oh god
|
||||
DebugLog.ToConsole($"Kicking {From} because their WorldObjects hash for {Data.managerName} is wrong. (server:{serverHash}, client:{Data.hash})", MessageType.Error);
|
||||
new PlayerKickMessage(From, $"WorldObject hash error for {Data.managerName}. (Server:{serverHash}, Client:{Data.hash})").Send();
|
||||
DebugLog.ToConsole($"Kicking {From} because their WorldObjects hash for {Data.managerName} is wrong. (Server:{hash} count:{count}, Client:{Data.hash} count:{Data.count})", MessageType.Error);
|
||||
new PlayerKickMessage(From, $"WorldObject hash error for {Data.managerName}. (Server:{hash} count:{count}, Client:{Data.hash}, count:{Data.count})").Send();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user