diff --git a/saco/net/localplayer.h b/saco/net/localplayer.h index 337e4e7..5bb6bff 100644 --- a/saco/net/localplayer.h +++ b/saco/net/localplayer.h @@ -94,7 +94,7 @@ public: BYTE field_30F; DWORD field_310; - BYTE _pad314[4]; + DWORD field_314; WORD field_318; diff --git a/saco/net/scriptrpc.cpp b/saco/net/scriptrpc.cpp index a7dad98..4c4c24e 100644 --- a/saco/net/scriptrpc.cpp +++ b/saco/net/scriptrpc.cpp @@ -1095,7 +1095,38 @@ void ScrUnk2B(RPCParameters *rpcParams) FUNC_1009D3D0(iModel, fX, fY, fZ, fRadius); } void ScrUnk51(RPCParameters *rpcParams) {} -void ScrUnk52(RPCParameters *rpcParams) {} +void ScrUnk52(RPCParameters *rpcParams) +{ + PCHAR Data = reinterpret_cast(rpcParams->input); + int iBitLength = rpcParams->numberOfBitsOfData; + PlayerID sender = rpcParams->sender; + + bool bPosition; + BYTE byteCut; + int iTime; + VECTOR vecFrom, vecTo; + + RakNet::BitStream bsData(Data,(iBitLength/8)+1,false); + + bPosition = true; + bsData.Read(bPosition); + bsData.Read(vecFrom.X); + bsData.Read(vecFrom.Y); + bsData.Read(vecFrom.Z); + bsData.Read(vecTo.X); + bsData.Read(vecTo.Y); + bsData.Read(vecTo.Z); + bsData.Read(iTime); + bsData.Read(byteCut); + + if(byteCut < 1 || byteCut > 2) byteCut = 2; + + if(iTime > 0) { + pNetGame->GetPlayerPool()->GetLocalPlayer()->field_314 = 1; + if(bPosition) pGame->GetCamera()->InterpolatePosition(&vecFrom, &vecTo, iTime, byteCut); + else pGame->GetCamera()->InterpolateLookAt(&vecFrom, &vecTo, iTime, byteCut); + } +} void ScrUnk53(RPCParameters *rpcParams) {} void ScrUnk54(RPCParameters *rpcParams) {} void ScrUnkA9(RPCParameters *rpcParams) {}