From 12544bb75e5d6e34663f47fbc725d58f047a9c14 Mon Sep 17 00:00:00 2001
From: RD42 <42702181+dashr9230@users.noreply.github.com>
Date: Thu, 4 Jan 2024 23:40:00 +0800
Subject: [PATCH] [server] Implement RegisterRPCs and UnRegisterRPCs
---
raknet/NetworkTypes.h | 21 ++++++++
raknet/SAMPRPC.h | 34 ++++++++++++
server/main.h | 2 +
server/netrpc.cpp | 118 ++++++++++++++++++++++++++++++++++++++++++
server/netrpc.h | 12 +++++
server/server.vcproj | 51 ++++++++++++++++++
6 files changed, 238 insertions(+)
create mode 100644 raknet/SAMPRPC.h
create mode 100644 server/netrpc.cpp
create mode 100644 server/netrpc.h
diff --git a/raknet/NetworkTypes.h b/raknet/NetworkTypes.h
index c5ae444..9a9b8e9 100644
--- a/raknet/NetworkTypes.h
+++ b/raknet/NetworkTypes.h
@@ -18,4 +18,25 @@ struct RPCParameters
char _gap0; // TODO: RPCParameters
};
+/// \def REGISTER_STATIC_RPC
+/// \ingroup RAKNET_RPC
+/// Register a C function as a Remote procedure.
+/// \param[in] networkObject Your instance of RakPeer, RakServer, or RakClient
+/// \param[in] functionName The name of the C function to call
+/// \attention 12/01/05 REGISTER_AS_REMOTE_PROCEDURE_CALL renamed to REGISTER_STATIC_RPC. Delete the old name sometime in the future
+//#pragma deprecated(REGISTER_AS_REMOTE_PROCEDURE_CALL)
+//#define REGISTER_AS_REMOTE_PROCEDURE_CALL(networkObject, functionName) REGISTER_STATIC_RPC(networkObject, functionName)
+#define REGISTER_STATIC_RPC(networkObject, functionName) (networkObject)->RegisterAsRemoteProcedureCall((RPC_##functionName),(functionName))
+
+/// \def UNREGISTER_STATIC_RPC
+/// \ingroup RAKNET_RPC
+/// Unregisters a remote procedure call
+/// RPC member Functions MUST be marked __cdecl! See the ObjectMemberRPC example.
+/// \param[in] networkObject The object that manages the function
+/// \param[in] functionName The function name
+// 12/01/05 UNREGISTER_AS_REMOTE_PROCEDURE_CALL Renamed to UNREGISTER_STATIC_RPC. Delete the old name sometime in the future
+//#pragma deprecated(UNREGISTER_AS_REMOTE_PROCEDURE_CALL)
+//#define UNREGISTER_AS_REMOTE_PROCEDURE_CALL(networkObject,functionName) UNREGISTER_STATIC_RPC(networkObject,functionName)
+#define UNREGISTER_STATIC_RPC(networkObject,functionName) (networkObject)->UnregisterAsRemoteProcedureCall((RPC_##functionName))
+
#endif
diff --git a/raknet/SAMPRPC.h b/raknet/SAMPRPC.h
new file mode 100644
index 0000000..9e4dfc5
--- /dev/null
+++ b/raknet/SAMPRPC.h
@@ -0,0 +1,34 @@
+// TODO: Implement SAMPRPC.h
+
+#define RPC_Unk73 "\x73"
+#define RPC_Unk66 "\x66"
+#define RPC_Unk76 "\x76"
+#define RPC_Unk60 "\x60"
+#define RPC_Unk1F "\x1F"
+#define RPC_Unk77 "\x77"
+#define RPC_Unk88 "\x88"
+#define RPC_Unk61 "\x61"
+#define RPC_Unk83 "\x83"
+#define RPC_Unk84 "\x84"
+#define RPC_Unk8C "\x8C"
+#define RPC_Unk3E "\x3E"
+#define RPC_Unk17 "\x17"
+#define RPC_Unk19 "\x19"
+#define RPC_Unk36 "\x36"
+#define RPC_Unk65 "\x65"
+#define RPC_Unk80 "\x80"
+#define RPC_Unk81 "\x81"
+#define RPC_Unk34 "\x34"
+#define RPC_Unk35 "\x35"
+#define RPC_Unk6A "\x6A"
+#define RPC_Unk1A "\x1A"
+#define RPC_Unk9A "\x9A"
+#define RPC_Unk32 "\x32"
+#define RPC_Unk9B "\x9B"
+#define RPC_Unk74 "\x74"
+#define RPC_Unk75 "\x75"
+#define RPC_Unk1B "\x1B"
+#define RPC_Unk53 "\x53"
+#define RPC_Unk67 "\x67"
+#define RPC_UnkA8 "\xA8"
+#define RPC_UnkB1 "\xB1"
diff --git a/server/main.h b/server/main.h
index 2f79e53..a75d51f 100644
--- a/server/main.h
+++ b/server/main.h
@@ -59,6 +59,7 @@
// Raknet
#include "../raknet/RakServer.h"
#include "../raknet/RakNetworkFactory.h"
+#include "../raknet/SAMPRPC.h"
#include "../raknet/GetTime.h"
// amx
@@ -75,6 +76,7 @@ typedef unsigned short VEHICLEID;
#include "scrtimers.h"
#include "gamemodes.h"
#include "filterscripts.h"
+#include "netrpc.h"
#include "playerpool.h"
#include "vehiclepool.h"
#include "pickuppool.h"
diff --git a/server/netrpc.cpp b/server/netrpc.cpp
new file mode 100644
index 0000000..680a12b
--- /dev/null
+++ b/server/netrpc.cpp
@@ -0,0 +1,118 @@
+
+#include "main.h"
+
+RakServerInterface *pRak=0;
+
+void Unk66(RPCParameters *rpcParams) {} // TODO: Unk66
+void Unk76(RPCParameters *rpcParams) {} // TODO: Unk76
+void Unk60(RPCParameters *rpcParams) {} // TODO: Unk60
+void Unk1F(RPCParameters *rpcParams) {} // TODO: Unk1F
+void Unk77(RPCParameters *rpcParams) {} // TODO: Unk77
+void Unk88(RPCParameters *rpcParams) {} // TODO: Unk88
+void Unk61(RPCParameters *rpcParams) {} // TODO: Unk61
+void Unk83(RPCParameters *rpcParams) {} // TODO: Unk83
+void Unk84(RPCParameters *rpcParams) {} // TODO: Unk84
+void Unk8C(RPCParameters *rpcParams) {} // TODO: Unk8C
+void Unk3E(RPCParameters *rpcParams) {} // TODO: Unk3E
+void Unk17(RPCParameters *rpcParams) {} // TODO: Unk17
+void Unk19(RPCParameters *rpcParams) {} // TODO: Unk19
+void Unk36(RPCParameters *rpcParams) {} // TODO: Unk36
+void Unk65(RPCParameters *rpcParams) {} // TODO: Unk65
+void Unk80(RPCParameters *rpcParams) {} // TODO: Unk80
+void Unk81(RPCParameters *rpcParams) {} // TODO: Unk81
+void Unk34(RPCParameters *rpcParams) {} // TODO: Unk34
+void Unk35(RPCParameters *rpcParams) {} // TODO: Unk35
+void Unk6A(RPCParameters *rpcParams) {} // TODO: Unk6A
+void Unk1A(RPCParameters *rpcParams) {} // TODO: Unk1A
+void Unk9A(RPCParameters *rpcParams) {} // TODO: Unk9A
+void Unk32(RPCParameters *rpcParams) {} // TODO: Unk32
+void Unk9B(RPCParameters *rpcParams) {} // TODO: Unk9B
+void Unk74(RPCParameters *rpcParams) {} // TODO: Unk74
+void Unk75(RPCParameters *rpcParams) {} // TODO: Unk75
+void Unk1B(RPCParameters *rpcParams) {} // TODO: Unk1B
+void Unk53(RPCParameters *rpcParams) {} // TODO: Unk53
+void Unk67(RPCParameters *rpcParams) {} // TODO: Unk67
+void UnkA8(RPCParameters *rpcParams) {} // TODO: UnkA8
+void Unk73(RPCParameters *rpcParams) {} // TODO: Unk73
+void UnkB1(RPCParameters *rpcParams) {} // TODO: UnkB1
+
+//----------------------------------------------------
+
+void RegisterRPCs(RakServerInterface * pRakServer)
+{
+ pRak = pRakServer;
+
+ REGISTER_STATIC_RPC(pRakServer, Unk66);
+ REGISTER_STATIC_RPC(pRakServer, Unk76);
+ REGISTER_STATIC_RPC(pRakServer, Unk60);
+ REGISTER_STATIC_RPC(pRakServer, Unk1F);
+ REGISTER_STATIC_RPC(pRakServer, Unk77);
+ REGISTER_STATIC_RPC(pRakServer, Unk88);
+ REGISTER_STATIC_RPC(pRakServer, Unk61);
+ REGISTER_STATIC_RPC(pRakServer, Unk83);
+ REGISTER_STATIC_RPC(pRakServer, Unk84);
+ REGISTER_STATIC_RPC(pRakServer, Unk8C);
+ REGISTER_STATIC_RPC(pRakServer, Unk3E);
+ REGISTER_STATIC_RPC(pRakServer, Unk17);
+ REGISTER_STATIC_RPC(pRakServer, Unk19);
+ REGISTER_STATIC_RPC(pRakServer, Unk36);
+ REGISTER_STATIC_RPC(pRakServer, Unk65);
+ REGISTER_STATIC_RPC(pRakServer, Unk80);
+ REGISTER_STATIC_RPC(pRakServer, Unk81);
+ REGISTER_STATIC_RPC(pRakServer, Unk34);
+ REGISTER_STATIC_RPC(pRakServer, Unk35);
+ REGISTER_STATIC_RPC(pRakServer, Unk6A);
+ REGISTER_STATIC_RPC(pRakServer, Unk1A);
+ REGISTER_STATIC_RPC(pRakServer, Unk9A);
+ REGISTER_STATIC_RPC(pRakServer, Unk32);
+ REGISTER_STATIC_RPC(pRakServer, Unk9B);
+ REGISTER_STATIC_RPC(pRakServer, Unk74);
+ REGISTER_STATIC_RPC(pRakServer, Unk75);
+ REGISTER_STATIC_RPC(pRakServer, Unk1B);
+ REGISTER_STATIC_RPC(pRakServer, Unk53);
+ REGISTER_STATIC_RPC(pRakServer, Unk67);
+ REGISTER_STATIC_RPC(pRakServer, UnkA8);
+ REGISTER_STATIC_RPC(pRakServer, Unk73);
+ REGISTER_STATIC_RPC(pRakServer, UnkB1);
+}
+
+//----------------------------------------------------
+
+void UnRegisterRPCs(RakServerInterface * pRakServer)
+{
+ UNREGISTER_STATIC_RPC(pRakServer, Unk73);
+ UNREGISTER_STATIC_RPC(pRakServer, Unk66);
+ UNREGISTER_STATIC_RPC(pRakServer, Unk76);
+ UNREGISTER_STATIC_RPC(pRakServer, Unk60);
+ UNREGISTER_STATIC_RPC(pRakServer, Unk1F);
+ UNREGISTER_STATIC_RPC(pRakServer, Unk77);
+ UNREGISTER_STATIC_RPC(pRakServer, Unk88);
+ UNREGISTER_STATIC_RPC(pRakServer, Unk61);
+ UNREGISTER_STATIC_RPC(pRakServer, Unk83);
+ UNREGISTER_STATIC_RPC(pRakServer, Unk84);
+ UNREGISTER_STATIC_RPC(pRakServer, Unk8C);
+ UNREGISTER_STATIC_RPC(pRakServer, Unk3E);
+ UNREGISTER_STATIC_RPC(pRakServer, Unk17);
+ UNREGISTER_STATIC_RPC(pRakServer, Unk19);
+ UNREGISTER_STATIC_RPC(pRakServer, Unk36);
+ UNREGISTER_STATIC_RPC(pRakServer, Unk65);
+ UNREGISTER_STATIC_RPC(pRakServer, Unk80);
+ UNREGISTER_STATIC_RPC(pRakServer, Unk81);
+ UNREGISTER_STATIC_RPC(pRakServer, Unk34);
+ UNREGISTER_STATIC_RPC(pRakServer, Unk35);
+ UNREGISTER_STATIC_RPC(pRakServer, Unk6A);
+ UNREGISTER_STATIC_RPC(pRakServer, Unk1A);
+ UNREGISTER_STATIC_RPC(pRakServer, Unk9A);
+ UNREGISTER_STATIC_RPC(pRakServer, Unk32);
+ UNREGISTER_STATIC_RPC(pRakServer, Unk9B);
+ UNREGISTER_STATIC_RPC(pRakServer, Unk74);
+ UNREGISTER_STATIC_RPC(pRakServer, Unk75);
+ UNREGISTER_STATIC_RPC(pRakServer, Unk1B);
+ UNREGISTER_STATIC_RPC(pRakServer, Unk53);
+ UNREGISTER_STATIC_RPC(pRakServer, Unk67);
+ UNREGISTER_STATIC_RPC(pRakServer, UnkA8);
+
+ pRak = 0;
+}
+
+//----------------------------------------------------
diff --git a/server/netrpc.h b/server/netrpc.h
new file mode 100644
index 0000000..8b78030
--- /dev/null
+++ b/server/netrpc.h
@@ -0,0 +1,12 @@
+
+#ifndef SAMPSRV_NETRPC_H
+#define SAMPSRV_NETRPC_H
+
+//----------------------------------------------------
+
+void RegisterRPCs(RakServerInterface *);
+void UnRegisterRPCs(RakServerInterface *);
+
+//----------------------------------------------------
+
+#endif
diff --git a/server/server.vcproj b/server/server.vcproj
index 0a023cf..152891b 100644
--- a/server/server.vcproj
+++ b/server/server.vcproj
@@ -129,6 +129,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -153,6 +177,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -220,6 +265,12 @@
+
+
+
+