From e243477e2bf4d90c8d8629448e8bc4c6c2671a3c Mon Sep 17 00:00:00 2001 From: RD42 <42702181+dashr9230@users.noreply.github.com> Date: Wed, 16 Oct 2024 17:31:30 +0800 Subject: [PATCH] [saco] Implement/match `ScrForceSpawnSelection(...)` --- raknet/SAMPRPC.h | 2 +- saco/net/localplayer.cpp | 2 +- saco/net/localplayer.h | 4 +++- saco/net/scriptrpc.cpp | 12 +++++++++--- 4 files changed, 14 insertions(+), 6 deletions(-) diff --git a/raknet/SAMPRPC.h b/raknet/SAMPRPC.h index 4c00ba1..abf50b5 100644 --- a/raknet/SAMPRPC.h +++ b/raknet/SAMPRPC.h @@ -101,7 +101,7 @@ #define RPC_ScrUnk7E "\x7E" #define RPC_ScrUnk7F "\x7F" #define RPC_ScrUnk39 "\x39" -#define RPC_ScrUnk4A "\x4A" +#define RPC_ScrForceSpawnSelection "\x4A" #define RPC_ScrUnk4B "\x4B" #define RPC_ScrUnk85 "\x85" #define RPC_ScrUnk86 "\x86" diff --git a/saco/net/localplayer.cpp b/saco/net/localplayer.cpp index c5b38ec..dc0efb4 100644 --- a/saco/net/localplayer.cpp +++ b/saco/net/localplayer.cpp @@ -46,7 +46,7 @@ CLocalPlayer::CLocalPlayer() void CLocalPlayer::ResetAllSyncAttributes() { field_17D = 0; - field_2FA = 0; + m_bWantsAnotherClass = FALSE; field_302 = 0; field_2FE = 0; field_1CF = 0; diff --git a/saco/net/localplayer.h b/saco/net/localplayer.h index f2fd620..607fc9b 100644 --- a/saco/net/localplayer.h +++ b/saco/net/localplayer.h @@ -71,7 +71,7 @@ public: char _gap2E6[16]; int field_2F6; - int field_2FA; + BOOL m_bWantsAnotherClass; int field_2FE; int field_302; int field_306; @@ -96,6 +96,8 @@ public: BOOL IsSpectating() { return m_bIsSpectating; }; + void ReturnToClassSelection() { m_bWantsAnotherClass = TRUE; }; + BOOL IsInRCMode() { return m_bInRCMode; }; }; diff --git a/saco/net/scriptrpc.cpp b/saco/net/scriptrpc.cpp index dce234d..f751381 100644 --- a/saco/net/scriptrpc.cpp +++ b/saco/net/scriptrpc.cpp @@ -35,7 +35,6 @@ void ScrUnk7D(RPCParameters *rpcParams) void ScrUnk7E(RPCParameters *rpcParams) {} void ScrUnk7F(RPCParameters *rpcParams) {} void ScrUnk39(RPCParameters *rpcParams) {} -void ScrUnk4A(RPCParameters *rpcParams) {} void ScrUnk4B(RPCParameters *rpcParams) {} void ScrUnk85(RPCParameters *rpcParams) {} void ScrUnk86(RPCParameters *rpcParams) {} @@ -189,6 +188,13 @@ void ScrSetCameraBehindPlayer(RPCParameters *rpcParams) //---------------------------------------------------- +void ScrForceSpawnSelection(RPCParameters *rpcParams) +{ + pNetGame->GetPlayerPool()->GetLocalPlayer()->ReturnToClassSelection(); +} + +//---------------------------------------------------- + void RegisterScriptRPCs(RakClientInterface* pRakClient) { REGISTER_STATIC_RPC(pRakClient, ScrUnkA7); @@ -213,7 +219,7 @@ void RegisterScriptRPCs(RakClientInterface* pRakClient) REGISTER_STATIC_RPC(pRakClient, ScrUnk7E); REGISTER_STATIC_RPC(pRakClient, ScrUnk7F); REGISTER_STATIC_RPC(pRakClient, ScrUnk39); - REGISTER_STATIC_RPC(pRakClient, ScrUnk4A); + REGISTER_STATIC_RPC(pRakClient, ScrForceSpawnSelection); REGISTER_STATIC_RPC(pRakClient, ScrUnk4B); REGISTER_STATIC_RPC(pRakClient, ScrUnk85); REGISTER_STATIC_RPC(pRakClient, ScrUnk86); @@ -293,7 +299,7 @@ void RegisterScriptRPCs(RakClientInterface* pRakClient) void UnRegisterScriptRPCs(RakClientInterface* pRakClient) { UNREGISTER_STATIC_RPC(pRakClient, ScrUnkA7); - UNREGISTER_STATIC_RPC(pRakClient, ScrUnk4A); + UNREGISTER_STATIC_RPC(pRakClient, ScrForceSpawnSelection); UNREGISTER_STATIC_RPC(pRakClient, ScrUnk4B); UNREGISTER_STATIC_RPC(pRakClient, ScrUnk85); UNREGISTER_STATIC_RPC(pRakClient, ScrUnk86);