From c82d3764fdfbdeb5af192d071481ae2d1b62bf5a Mon Sep 17 00:00:00 2001 From: RD42 <42702181+dashr9230@users.noreply.github.com> Date: Mon, 3 Jun 2024 22:53:22 +0800 Subject: [PATCH] [bot] Implement `RequestSpawn(...)` --- bot/net/netgame.cpp | 2 ++ bot/net/netrpc.cpp | 18 +++++++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/bot/net/netgame.cpp b/bot/net/netgame.cpp index 56d6b19..d0ac3ad 100644 --- a/bot/net/netgame.cpp +++ b/bot/net/netgame.cpp @@ -42,6 +42,8 @@ BYTE unnamed_8[MAX_PLAYERS]; BOOL unnamed_7[MAX_VEHICLES]; char unnamed_4[1000][63]; +bool bSpawned = false; + //---------------------------------------------------- // TODO: length assert has to be at line 397 diff --git a/bot/net/netrpc.cpp b/bot/net/netrpc.cpp index 6694b13..97144fe 100644 --- a/bot/net/netrpc.cpp +++ b/bot/net/netrpc.cpp @@ -7,6 +7,8 @@ extern CNetGame* pNetGame; #define REJECT_REASON_BAD_NICKNAME 2 #define REJECT_REASON_BAD_MOD 3 +extern bool bSpawned; + void EnterVehicle(RPCParameters *rpcParams) {} void ExitVehicle(RPCParameters *rpcParams) {} void Unk6B(RPCParameters *rpcParams) {} @@ -200,7 +202,21 @@ void RequestClass(RPCParameters *rpcParams) void RequestSpawn(RPCParameters *rpcParams) { - // TODO: RequestSpawn + PCHAR Data = reinterpret_cast(rpcParams->input); + int iBitLength = rpcParams->numberOfBitsOfData; + PlayerID sender = rpcParams->sender; + + BYTE byteRequestOutcome=0; + RakNet::BitStream bsData(Data,(iBitLength/8)+1,false); + bsData.Read(byteRequestOutcome); + + if(byteRequestOutcome) { + // Let the rest of the network know we're spawning. + if(pNetGame->GetBotMode()) pNetGame->GetBotMode()->OnNPCSpawn(); + bSpawned = true; + RakNet::BitStream bsSendSpawn; + pNetGame->GetRakClient()->RPC(RPC_Spawn,&bsSendSpawn,HIGH_PRIORITY,RELIABLE_SEQUENCED,0,false); + } } void Unk20(RPCParameters *rpcParams)