From b1c34872bf5f6ec81e65d5b4bb2ff0008fe1ce38 Mon Sep 17 00:00:00 2001 From: RD42 <42702181+dashr9230@users.noreply.github.com> Date: Fri, 17 May 2024 22:48:32 +0800 Subject: [PATCH] [bot] Implement `CNetGame::Packet_ConnectionSucceeded(...)` --- bot/net/netgame.cpp | 42 ++++++++++++++++++++++++++++++++++++++++++ bot/net/netgame.h | 3 +++ 2 files changed, 45 insertions(+) diff --git a/bot/net/netgame.cpp b/bot/net/netgame.cpp index 4738bf1..18e905c 100644 --- a/bot/net/netgame.cpp +++ b/bot/net/netgame.cpp @@ -2,6 +2,8 @@ #include "../main.h" #include "../../raknet/SocketDataEncryptor.h" +#define NETGAME_VERSION 4057 + char szGameModeFile[256]; #define PLAYER_STATE_NONE 0 @@ -269,6 +271,9 @@ void CNetGame::UpdateNetwork() Packet_ModifiedPacket(pkt); break; + case ID_CONNECTION_REQUEST_ACCEPTED: + Packet_ConnectionSucceeded(pkt); + break; case ID_PASSENGER_SYNC: Packet_PassengerSync(pkt); break; @@ -361,6 +366,43 @@ void CNetGame::Packet_ModifiedPacket(Packet* packet) { } +//---------------------------------------------------- +// Connection Success + +void CNetGame::Packet_ConnectionSucceeded(Packet *p) +{ + m_iGameState = GAMESTATE_AWAIT_JOIN; + + RakNet::BitStream bsReturnParams((PCHAR)p->data, p->length, true); + + BYTE bytePacketID=0; + unsigned int binaryAddr=0; + unsigned short port=0; + unsigned short playerId=0; + unsigned int uiChallenge=0; + + bsReturnParams.Read(bytePacketID); + bsReturnParams.Read(binaryAddr); + bsReturnParams.Read(port); + bsReturnParams.Read(playerId); + bsReturnParams.Read(uiChallenge); + + uiChallenge ^= NETGAME_VERSION; + + int iVersion = NETGAME_VERSION; + BYTE byteMod = 1; + BYTE byteNameLen = (BYTE)strlen(m_pPlayerPool->GetLocalPlayerName()); + + RakNet::BitStream bsSend; + bsSend.Write(iVersion); + bsSend.Write(byteMod); + bsSend.Write(byteNameLen); + bsSend.Write(m_pPlayerPool->GetLocalPlayerName(),byteNameLen); + bsSend.Write(uiChallenge); + + m_pRakClient->RPC(RPC_NPCJoin,&bsSend,HIGH_PRIORITY,RELIABLE,0,FALSE); +} + //---------------------------------------------------- void CNetGame::sub_415EA0(PLAYERID playerId, BOOL a2) diff --git a/bot/net/netgame.h b/bot/net/netgame.h index 803a81b..f93e00a 100644 --- a/bot/net/netgame.h +++ b/bot/net/netgame.h @@ -1,8 +1,10 @@ #pragma once +#define GAMESTATE_NONE 0 // used for debugging modes and such #define GAMESTATE_CONNECTING 1 #define GAMESTATE_CONNECTED 2 +#define GAMESTATE_AWAIT_JOIN 3 //---------------------------------------------------- @@ -20,6 +22,7 @@ private: // Packet handlers void Packet_AimSync(Packet *p); void Packet_PassengerSync(Packet *p); + void Packet_ConnectionSucceeded(Packet *p); void Packet_ConnectionBanned(Packet* packet); void Packet_DisconnectionNotification(Packet* packet); void Packet_ModifiedPacket(Packet* packet);