diff --git a/saco/net/labelpool.h b/saco/net/labelpool.h index b06dc9c..6712700 100644 --- a/saco/net/labelpool.h +++ b/saco/net/labelpool.h @@ -9,7 +9,7 @@ typedef struct _LABEL class CLabelPool { -private: +public: LABEL m_Labels[MAX_LABELS]; BOOL m_bLabelSlotState[MAX_LABELS]; public: diff --git a/saco/net/netgame.h b/saco/net/netgame.h index f20fb58..6e316f4 100644 --- a/saco/net/netgame.h +++ b/saco/net/netgame.h @@ -24,8 +24,8 @@ struct struc_41 int field_23; float field_27; char _gap2B; - char field_2C; - char field_2D; + BYTE field_2C; + BYTE field_2D; char field_2E; char field_2F; char _gap30[10]; diff --git a/saco/net/netrpc.cpp b/saco/net/netrpc.cpp index 98a2baa..9138920 100644 --- a/saco/net/netrpc.cpp +++ b/saco/net/netrpc.cpp @@ -7,7 +7,23 @@ extern CGame * pGame; // TODO: these RPCs void Unk22(RPCParameters *rpcParams) {} void Unk24(RPCParameters *rpcParams) {} -void Unk3A(RPCParameters *rpcParams) {} +void Unk3A(RPCParameters *rpcParams) +{ + PCHAR Data = reinterpret_cast(rpcParams->input); + int iBitLength = rpcParams->numberOfBitsOfData; + + WORD wLabelID; + + RakNet::BitStream bsData(Data,(iBitLength/8)+1,false); + + CLabelPool *pLabelPool = pNetGame->GetLabelPool(); + if(!pLabelPool) return; + + bsData.Read(wLabelID); + + if(wLabelID < MAX_LABELS && pLabelPool->m_bLabelSlotState[wLabelID]) + pLabelPool->Delete(wLabelID); +} void Unk3B(RPCParameters *rpcParams) {} void Unk3D(RPCParameters *rpcParams) {} void SetCheckpoint(RPCParameters *rpcParams) {}