prevent crash from empty list

This commit is contained in:
Infi
2024-05-25 21:47:31 +02:00
parent a6d2f9597c
commit 34ef2ef584
+7 -4
View File
@@ -37,7 +37,7 @@ internal class MessageManager : IAsyncDisposable
private readonly CancellationTokenSource PendingThreadCancellationToken = new(); private readonly CancellationTokenSource PendingThreadCancellationToken = new();
// TODO: replace with CS version // TODO: replace with CS version
private unsafe delegate void ContentIdResolverDelegate(RaptureLogModule* param1, ulong param2, int param3, short param4, short param5); private unsafe delegate void ContentIdResolverDelegate(RaptureLogModule* agent, ulong contentId, int messageIndex, ushort worldId, ushort chatType);
[Signature("4C 8B D1 48 8B 89 ?? ?? ?? ?? 48 85 C9", DetourName = nameof(ContentIdResolver))] [Signature("4C 8B D1 48 8B 89 ?? ?? ?? ?? 48 85 C9", DetourName = nameof(ContentIdResolver))]
private Hook<ContentIdResolverDelegate>? ContentIdResolverHook { get; init; } private Hook<ContentIdResolverDelegate>? ContentIdResolverHook { get; init; }
@@ -222,10 +222,13 @@ internal class MessageManager : IAsyncDisposable
// message's content ID. If multiple messages are received in the same tick, // message's content ID. If multiple messages are received in the same tick,
// this will be called for each message immediately after ChatMessage is // this will be called for each message immediately after ChatMessage is
// called for each message. // called for each message.
private unsafe void ContentIdResolver(RaptureLogModule* param1, ulong param2, int param3, short param4, short param5) private unsafe void ContentIdResolver(RaptureLogModule* agent, ulong contentId, int messageIndex, ushort worldId, ushort chatType)
{ {
PendingSync.Last().ContentId = param2; ContentIdResolverHook?.Original(agent, contentId, messageIndex, worldId, chatType);
ContentIdResolverHook?.Original(param1, param2, param3, param4, param5); if (PendingSync.Count == 0)
return;
PendingSync.Last().ContentId = contentId;
} }
private void ProcessMessage(PendingMessage pendingMessage) private void ProcessMessage(PendingMessage pendingMessage)