Skip to content

Commit ff9a9a4

Browse files
committed
fix(server): Async Answer crash in OnScriptRpc
1 parent efa4b17 commit ff9a9a4

File tree

3 files changed

+53
-2
lines changed

3 files changed

+53
-2
lines changed

api/AltV.Net.Async/AsyncCore.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -976,7 +976,7 @@ public override void OnScriptRPCEvent(IntPtr eventpointer, IPlayer target, strin
976976
Task.Run(async () =>
977977
{
978978
var mValues = MValueConst.CreateFrom(this, args);
979-
var clientScriptRPCEvent = new ScriptRpcEvent(this, eventpointer);
979+
var clientScriptRPCEvent = new AsyncScriptRpcEvent(eventpointer);
980980
await ScriptRpcAsyncEventHandler.CallAsync(@delegate => @delegate(clientScriptRPCEvent, target, name, mValues.Select(x => x.ToObject()).ToArray(), answerId));
981981
});
982982
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
using System;
2+
using System.Runtime.InteropServices;
3+
using AltV.Net.Elements.Args;
4+
using AltV.Net.Shared.Elements.Entities;
5+
using AltV.Net.Shared.Utils;
6+
7+
namespace AltV.Net.Async;
8+
9+
public class AsyncScriptRpcEvent : IScriptRPCEvent
10+
{
11+
public AsyncScriptRpcEvent(IntPtr clientScriptRPCNativePointer)
12+
{
13+
ScriptRPCNativePointer = clientScriptRPCNativePointer;
14+
}
15+
16+
public IntPtr ScriptRPCNativePointer { get; }
17+
18+
public bool WillAnswer()
19+
{
20+
unsafe
21+
{
22+
return Alt.Core.Library.Shared.Event_ScriptRPCEvent_WillAnswer(ScriptRPCNativePointer) == 1;
23+
}
24+
}
25+
26+
public bool Answer(object answer)
27+
{
28+
MValueConstLockedNoRefs.CreateFromObjectLocked(answer, out MValueConst mValue);
29+
bool result;
30+
unsafe
31+
{
32+
result = Alt.Core.Library.Shared.Event_ScriptRPCEvent_Answer(ScriptRPCNativePointer, mValue.nativePointer) == 1;
33+
}
34+
mValue.Dispose();
35+
36+
return result;
37+
}
38+
39+
public bool AnswerWithError(string error)
40+
{
41+
var errorPtr = MemoryUtils.StringToHGlobalUtf8(error);
42+
43+
bool result;
44+
unsafe
45+
{
46+
result = Alt.Core.Library.Shared.Event_ScriptRPCEvent_AnswerWithError(ScriptRPCNativePointer, errorPtr) == 1;
47+
}
48+
Marshal.FreeHGlobal(errorPtr);
49+
50+
return result;
51+
}
52+
}

api/AltV.Net.Shared/Elements/Entities/IScriptRPCEvent.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
public interface IScriptRPCEvent
44
{
55
IntPtr ScriptRPCNativePointer { get; }
6-
ISharedCore Core { get; }
76
bool WillAnswer();
87
bool Answer(object answer);
98
bool AnswerWithError(string error);

0 commit comments

Comments
 (0)