mirror of
https://github.com/Gurge44/EndlessHostRoles.git
synced 2026-10-20 01:46:25 +00:00
fix immediate send
This commit is contained in:
1 parent
bfea38cfbf
commit
bba8cb5b83
1 file changed
+84
-3
@@ -57,16 +57,68 @@ public sealed class PlayerGameOptionsSender(PlayerControl player) : GameOptionsS
|
||||
{
|
||||
ForceWaitFrame = true;
|
||||
|
||||
if (PackedWriterMessages > 0 && PackedWriter != null)
|
||||
{
|
||||
PackedWriter.EndMessage();
|
||||
var capturedWriter = PackedWriter;
|
||||
DataFlagRateLimiter.Enqueue(() =>
|
||||
{
|
||||
AmongUsClient.Instance.SendOrDisconnect(capturedWriter);
|
||||
capturedWriter.Recycle();
|
||||
}, cleanup: capturedWriter.Recycle);
|
||||
}
|
||||
|
||||
PackedWriter = MessageWriter.Get(SendOption.Reliable);
|
||||
PackedWriter.StartMessage(26);
|
||||
PackedWriter.WritePacked(AmongUsClient.Instance.GameId);
|
||||
PackedWriterMessages = 0;
|
||||
|
||||
for (var index = 0; index < AllSenders.Count; index++)
|
||||
{
|
||||
GameOptionsSender allSender = AllSenders[index];
|
||||
|
||||
if (allSender is PlayerGameOptionsSender { IsDirty: true } sender)
|
||||
{
|
||||
if (PackedWriter != null && (PackedWriter.Length > 500 || PackedWriterMessages >= AmongUsClient.Instance.GetMaxMessagePackingLimit()))
|
||||
{
|
||||
PackedWriter.EndMessage();
|
||||
var capturedWriter = PackedWriter;
|
||||
DataFlagRateLimiter.Enqueue(() =>
|
||||
{
|
||||
AmongUsClient.Instance.SendOrDisconnect(capturedWriter);
|
||||
capturedWriter.Recycle();
|
||||
}, cleanup: capturedWriter.Recycle);
|
||||
PackedWriterMessages = 0;
|
||||
PackedWriter = MessageWriter.Get(SendOption.Reliable);
|
||||
PackedWriter.StartMessage(26);
|
||||
PackedWriter.WritePacked(AmongUsClient.Instance.GameId);
|
||||
}
|
||||
|
||||
sender.SendGameOptions();
|
||||
sender.IsDirty = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (PackedWriter != null)
|
||||
{
|
||||
if (PackedWriterMessages > 0)
|
||||
{
|
||||
PackedWriter.EndMessage();
|
||||
var capturedWriter = PackedWriter;
|
||||
DataFlagRateLimiter.Enqueue(() =>
|
||||
{
|
||||
AmongUsClient.Instance.SendOrDisconnect(capturedWriter);
|
||||
capturedWriter.Recycle();
|
||||
}, cleanup: capturedWriter.Recycle);
|
||||
}
|
||||
else
|
||||
{
|
||||
PackedWriter.Recycle();
|
||||
}
|
||||
}
|
||||
|
||||
PackedWriter = null;
|
||||
PackedWriterMessages = 0;
|
||||
}
|
||||
|
||||
public static void SetDirtyToAll()
|
||||
@@ -167,11 +219,40 @@ public sealed class PlayerGameOptionsSender(PlayerControl player) : GameOptionsS
|
||||
|
||||
protected override void SendOptionsArray(Il2CppStructArray<byte> optionArray, byte logicOptionsIndex)
|
||||
{
|
||||
if (PackedWriter == null) return;
|
||||
|
||||
if (PackedWriter == null)
|
||||
{
|
||||
DataFlagRateLimiter.Enqueue(() =>
|
||||
{
|
||||
MessageWriter writer = MessageWriter.Get(SendOption.Reliable);
|
||||
|
||||
writer.StartMessage(6);
|
||||
{
|
||||
writer.Write(AmongUsClient.Instance.GameId);
|
||||
writer.WritePacked(player.OwnerId);
|
||||
|
||||
writer.StartMessage(1);
|
||||
{
|
||||
writer.WritePacked(GameManager.Instance.NetId);
|
||||
writer.StartMessage(logicOptionsIndex);
|
||||
{
|
||||
writer.WriteBytesAndSize(optionArray);
|
||||
}
|
||||
writer.EndMessage();
|
||||
}
|
||||
writer.EndMessage();
|
||||
}
|
||||
|
||||
writer.EndMessage();
|
||||
|
||||
AmongUsClient.Instance.SendOrDisconnect(writer);
|
||||
writer.Recycle();
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
PackedWriterMessages++;
|
||||
|
||||
PackedWriter.StartMessage(Tags.GameDataTo);
|
||||
PackedWriter.StartMessage(6);
|
||||
{
|
||||
PackedWriter.Write(AmongUsClient.Instance.GameId);
|
||||
PackedWriter.WritePacked(player.OwnerId);
|
||||
|
||||
Reference in new issue
Block a user