diff --git a/saco/net/localplayer.h b/saco/net/localplayer.h index 5bb6bff..e28abcd 100644 --- a/saco/net/localplayer.h +++ b/saco/net/localplayer.h @@ -135,6 +135,8 @@ public: void sub_10003C20(); // .text:10003C20 void sub_10003BE0(SPAWN_INFO *pSpawnInfo); // .text:10003BE0 void sub_100040E0(BOOL bSpawn); // .text:100040E0 + void sub_100041C0(int a1); // .text:100041C0 + void sub_100030F0(BYTE a1); // .text:100030F0 void sub_10003710(int a1, int a2); // .text:10003710 DWORD GetField_F0() { return field_F0; }; diff --git a/saco/net/objectpool.h b/saco/net/objectpool.h index 89f8efb..bc23d0b 100644 --- a/saco/net/objectpool.h +++ b/saco/net/objectpool.h @@ -7,7 +7,8 @@ class CObject public: char _gap0[68]; int field_44; - char _gap48[12]; + char _gap48[11]; + BYTE field_53; float field_54; char _gap58[4403]; int field_118B; @@ -19,6 +20,7 @@ public: void FUNC_100A9E30(); void FUNC_100A9E70(); void FUNC_100A80A0(VECTOR *pPos); // .text:100A80A0 + void FUNC_100A8030(); // .text:100A8030 }; class CObjectPool diff --git a/saco/net/scriptrpc.cpp b/saco/net/scriptrpc.cpp index 0f06358..0471d06 100644 --- a/saco/net/scriptrpc.cpp +++ b/saco/net/scriptrpc.cpp @@ -256,7 +256,26 @@ void ScrUnk50(RPCParameters *rpcParams) } } void ScrUnk63(RPCParameters *rpcParams) {} -void ScrUnk7A(RPCParameters *rpcParams) {} +void ScrUnk7A(RPCParameters *rpcParams) +{ + PCHAR Data = reinterpret_cast(rpcParams->input); + int iBitLength = rpcParams->numberOfBitsOfData; + PlayerID sender = rpcParams->sender; + + WORD objectId; + + RakNet::BitStream bsData(Data,(iBitLength/8)+1,false); + + bsData.Read(objectId); + + CObjectPool *pObjectPool = pNetGame->GetObjectPool(); + if(objectId <= MAX_OBJECTS) { + if(pObjectPool->field_4[objectId]) { + CObject *pObject = (CObject *)pObjectPool->field_FA4[objectId]; + if(pObject) pObject->FUNC_100A8030(); + } + } +} void ScrUnk7B(RPCParameters *rpcParams) { PCHAR Data = reinterpret_cast(rpcParams->input); @@ -287,7 +306,22 @@ void ScrUnk7B(RPCParameters *rpcParams) } } } -void ScrUnk7C(RPCParameters *rpcParams) {} +void ScrUnk7C(RPCParameters *rpcParams) +{ + PCHAR Data = reinterpret_cast(rpcParams->input); + int iBitLength = rpcParams->numberOfBitsOfData; + PlayerID sender = rpcParams->sender; + + int iUnk; + + CPlayerPool *pPlayerPool = pNetGame->GetPlayerPool(); + + RakNet::BitStream bsData(Data,(iBitLength/8)+1,false); + + bsData.Read(iUnk); + + pPlayerPool->GetLocalPlayer()->sub_100041C0(iUnk); +} void ScrUnk7D(RPCParameters *rpcParams) { @@ -592,7 +626,21 @@ void ScrUnk57(RPCParameters *rpcParams) done: ; } -void ScrUnk58(RPCParameters *rpcParams) {} +void ScrUnk58(RPCParameters *rpcParams) +{ + PCHAR Data = reinterpret_cast(rpcParams->input); + int iBitLength = rpcParams->numberOfBitsOfData; + PlayerID sender = rpcParams->sender; + + BYTE byteUnk; + + RakNet::BitStream bsData(Data,(iBitLength/8)+1,false); + + bsData.Read(byteUnk); + + CPlayerPool *pPlayerPool = pNetGame->GetPlayerPool(); + if(pPlayerPool) pPlayerPool->GetLocalPlayer()->sub_100030F0(byteUnk); +} void ScrUnk59(RPCParameters *rpcParams) {} void ScrUnk5A(RPCParameters *rpcParams) {} void ScrUnk5B(RPCParameters *rpcParams) @@ -988,7 +1036,22 @@ void ScrUnk40(RPCParameters *rpcParams) RakNet::BitStream bsData(Data,(iBitLength/8)+1,false); bsData.Read(playerId); } -void ScrUnk41(RPCParameters *rpcParams) {} +void ScrUnk41(RPCParameters *rpcParams) +{ + PCHAR Data = reinterpret_cast(rpcParams->input); + int iBitLength = rpcParams->numberOfBitsOfData; + PlayerID sender = rpcParams->sender; + + VEHICLEID vehicleId; + BYTE byteUnk; + + RakNet::BitStream bsData(Data,(iBitLength/8)+1,false); + + bsData.Read(vehicleId); + bsData.Read(byteUnk); + + pNetGame->GetVehiclePool()->FUNC_1001EB00(vehicleId, byteUnk); +} void ScrUnk42(RPCParameters *rpcParams) { PCHAR Data = reinterpret_cast(rpcParams->input); @@ -1197,7 +1260,26 @@ void ScrUnk52(RPCParameters *rpcParams) } void ScrUnk53(RPCParameters *rpcParams) {} void ScrUnk54(RPCParameters *rpcParams) {} -void ScrUnkA9(RPCParameters *rpcParams) {} +void ScrUnkA9(RPCParameters *rpcParams) +{ + PCHAR Data = reinterpret_cast(rpcParams->input); + int iBitLength = rpcParams->numberOfBitsOfData; + PlayerID sender = rpcParams->sender; + + WORD objectId; + + RakNet::BitStream bsData(Data,(iBitLength/8)+1,false); + + bsData.Read(objectId); + + CObjectPool *pObjectPool = pNetGame->GetObjectPool(); + if(objectId <= MAX_OBJECTS) { + if(pObjectPool->field_4[objectId]) { + CObject *pObject = (CObject *)pObjectPool->field_FA4[objectId]; + if(pObject) pObject->field_53 = 1; + } + } +} void ScrUnkAD(RPCParameters *rpcParams) {} void ScrUnkAE(RPCParameters *rpcParams) {} void ScrUnkAF(RPCParameters *rpcParams) {}