diff --git a/saco/net/localplayer.h b/saco/net/localplayer.h index 90e032e..623bac4 100644 --- a/saco/net/localplayer.h +++ b/saco/net/localplayer.h @@ -113,6 +113,7 @@ public: DWORD GetPlayerColorAsRGBA(); DWORD GetPlayerColorAsARGB(); BOOL IsSpectating() { return m_bIsSpectating; }; + void SetTeam(BYTE byteTeam) { m_byteTeam = byteTeam; }; void ReturnToClassSelection() { m_bWantsAnotherClass = TRUE; }; diff --git a/saco/net/scriptrpc.cpp b/saco/net/scriptrpc.cpp index e0c9714..a33304f 100644 --- a/saco/net/scriptrpc.cpp +++ b/saco/net/scriptrpc.cpp @@ -408,7 +408,29 @@ void ScrSetSpawnInfo(RPCParameters *rpcParams) pPlayerPool->GetLocalPlayer()->sub_10003BE0(&SpawnInfo); } -void ScrUnk45(RPCParameters *rpcParams) {} +void ScrUnk45(RPCParameters *rpcParams) +{ + PCHAR Data = reinterpret_cast(rpcParams->input); + int iBitLength = rpcParams->numberOfBitsOfData; + PlayerID sender = rpcParams->sender; + + PLAYERID playerId; + BYTE byteTeam; + + RakNet::BitStream bsData(Data,(iBitLength/8)+1,false); + + CPlayerPool *pPlayerPool = pNetGame->GetPlayerPool(); + + bsData.Read(playerId); + bsData.Read(byteTeam); + + if(playerId == pPlayerPool->GetLocalPlayerID()) { + pPlayerPool->GetLocalPlayer()->SetTeam(byteTeam); + } else { + CRemotePlayer *pRemotePlayer = pPlayerPool->GetAt(playerId); + if(pRemotePlayer) pRemotePlayer->field_109 = byteTeam; + } +} void ScrUnk99(RPCParameters *rpcParams) { PCHAR Data = reinterpret_cast(rpcParams->input);