diff --git a/saco/net/localplayer.h b/saco/net/localplayer.h index 4077821..c155cde 100644 --- a/saco/net/localplayer.h +++ b/saco/net/localplayer.h @@ -6,7 +6,7 @@ #pragma pack(1) class CLocalPlayer { -private: +public: BYTE field_0[63]; //BYTE field_3C[3]; @@ -109,6 +109,7 @@ public: void FUNC_10005BF0(WORD a1); // .text:10005BF0 void FUNC_10003570(); // .text:10003570 + void sub_10003C20(); // .text:10003C20 DWORD GetField_F0() { return field_F0; }; }; diff --git a/saco/net/netrpc.cpp b/saco/net/netrpc.cpp index 40e9608..f763c78 100644 --- a/saco/net/netrpc.cpp +++ b/saco/net/netrpc.cpp @@ -287,7 +287,24 @@ void ServerQuit(RPCParameters *rpcParams) void InitGame(RPCParameters *rpcParams) {} void Chat(RPCParameters *rpcParams) {} void RequestClass(RPCParameters *rpcParams) {} -void RequestSpawn(RPCParameters *rpcParams) {} +// MATCH +void RequestSpawn(RPCParameters *rpcParams) +{ + PCHAR Data = reinterpret_cast(rpcParams->input); + int iBitLength = rpcParams->numberOfBitsOfData; + + BYTE byteRequestOutcome = 0; + + RakNet::BitStream bsData(Data,(iBitLength/8)+1,false); + bsData.Read(byteRequestOutcome); + + CLocalPlayer *pLocalPlayer = pNetGame->GetPlayerPool()->GetLocalPlayer(); + + if(byteRequestOutcome == 2 || (byteRequestOutcome && pLocalPlayer->field_302)) + pLocalPlayer->sub_10003C20(); + else + pLocalPlayer->field_302 = 0; +} void EditAttachedObject(RPCParameters *rpcParams) {} void EditObject(RPCParameters *rpcParams) {} void SelectObject(RPCParameters *rpcParams) {}