mirror of
https://github.com/dashr9230/SA-MP.git
synced 2026-10-10 11:43:04 +08:00
[saco] Implement/match FUNC_100158D0, the unoccupied vehicle sync; the 0.05 lerp gate is a double literal here, unlike the trailer path
This commit is contained in:
@@ -61,6 +61,7 @@ DWORD unnamed_100B6100(char *szString, int nMaxLen);
|
||||
int FUNC_100B61D0(int a1); // .text:100B61D0
|
||||
|
||||
bool FUNC_100B4B50(VECTOR *vecPos);
|
||||
bool FUNC_100B4AE0(VECTOR *vec); // .text:100B4AE0
|
||||
void FUNC_100B4D10(VECTOR *vecOut, MATRIX4X4 *pMatrix, VECTOR *vecOffset);
|
||||
int FUNC_100B4BE0(int a1, int a2, int a3); // .text:100B4BE0
|
||||
int FUNC_100B4C00(int a1, int a2, int a3); // .text:100B4C00
|
||||
|
||||
+5
-1
@@ -35,7 +35,9 @@ public:
|
||||
BYTE m_byteColor2;
|
||||
BOOL m_bHasNewColor;
|
||||
|
||||
char _gap7F[57];
|
||||
char _gap7F[4];
|
||||
int field_83;
|
||||
char _gap87[49];
|
||||
|
||||
CVehicle( int iType, float fPosX, float fPosY, float fPosZ, float fRotation = 0.0f, BOOL bKeepModelLoaded = FALSE, int a8 = 0);
|
||||
|
||||
@@ -97,6 +99,8 @@ public:
|
||||
CVehicle *FUNC_100B7C90(); // .text:100B7C90
|
||||
BOOL FUNC_100B7D70(); // .text:100B7D70
|
||||
BOOL FUNC_100B7DD0(); // .text:100B7DD0
|
||||
BOOL FUNC_100B70E0(); // .text:100B70E0
|
||||
BOOL FUNC_100B7CF0(); // .text:100B7CF0
|
||||
|
||||
BOOL FUNC_100B7460(); // .text:100B7460
|
||||
BOOL FUNC_100B7E00(); // .text:100B7E00
|
||||
|
||||
@@ -44,6 +44,8 @@ typedef char BULLET_SYNC_offsets[(offsetof(BULLET_SYNC_DATA, byteWeaponID) == 0x
|
||||
sizeof(BULLET_SYNC_DATA) == 0x28) ? 1 : -1];
|
||||
typedef char TRAILER_SYNC_offsets[(offsetof(TRAILER_SYNC_DATA, vecTurnSpeed) == 0x2A &&
|
||||
sizeof(TRAILER_SYNC_DATA) == 0x36) ? 1 : -1];
|
||||
typedef char UNOCCUPIED_SYNC_offsets[(offsetof(UNOCCUPIED_SYNC_DATA, vecTurnSpeed) == 0x33 &&
|
||||
offsetof(CVehiclePool, field_8E34) == 0x8E34 && offsetof(CVehicle, field_83) == 0x83) ? 1 : -1];
|
||||
typedef char struc_41_offsets[(offsetof(struc_41, field_30) == 0x30) ? 1 : -1];
|
||||
typedef char WEAPON_SLOT_offsets[(offsetof(WEAPON_SLOT_TYPE, field_8) == 8 &&
|
||||
sizeof(WEAPON_SLOT_TYPE) == 28) ? 1 : -1];
|
||||
@@ -478,6 +480,76 @@ void CRemotePlayer::FUNC_10016370(BULLET_SYNC_DATA *pSync)
|
||||
|
||||
//----------------------------------------------------
|
||||
|
||||
void CRemotePlayer::FUNC_100158D0(UNOCCUPIED_SYNC_DATA *pSync)
|
||||
{
|
||||
if(!pSync->VehicleID) return;
|
||||
if(pSync->VehicleID == INVALID_VEHICLE_ID) return;
|
||||
|
||||
MATRIX4X4 mat;
|
||||
VECTOR vecMove;
|
||||
|
||||
CVehiclePool *pVehiclePool = pNetGame->GetVehiclePool();
|
||||
if(!pVehiclePool) return;
|
||||
|
||||
CVehicle *pVehicle = (CVehicle *)pVehiclePool->GetAt(pSync->VehicleID);
|
||||
pVehiclePool->field_8E34[pSync->VehicleID] = m_PlayerID;
|
||||
if(!pVehicle) return;
|
||||
|
||||
if(pVehicle->FUNC_100B70E0()) return;
|
||||
if(pVehicle->FUNC_100B7CF0()) return;
|
||||
if(!FUNC_100B4A70(&pSync->vecDirection)) return;
|
||||
if(!FUNC_100B4A70(&pSync->vecRoll)) return;
|
||||
if(!FUNC_100B4B50(&pSync->vecPos)) return;
|
||||
if(!FUNC_100B4AE0(&pSync->vecMoveSpeed)) return;
|
||||
if(!FUNC_100B4AE0(&pSync->vecTurnSpeed)) return;
|
||||
|
||||
pVehicle->GetMatrix(&mat);
|
||||
|
||||
mat.up.X = pSync->vecDirection.X;
|
||||
mat.up.Y = pSync->vecDirection.Y;
|
||||
mat.up.Z = pSync->vecDirection.Z;
|
||||
mat.right.X = pSync->vecRoll.X;
|
||||
mat.right.Y = pSync->vecRoll.Y;
|
||||
mat.right.Z = pSync->vecRoll.Z;
|
||||
|
||||
if(FloatOffset(pSync->vecPos.X, mat.pos.X) <= 0.1f &&
|
||||
FloatOffset(pSync->vecPos.Y, mat.pos.Y) <= 0.1f &&
|
||||
FloatOffset(pSync->vecPos.Z, mat.pos.Z) <= 0.1f) return;
|
||||
|
||||
if(FloatOffset(pSync->vecPos.X, mat.pos.X) > 6.0f ||
|
||||
FloatOffset(pSync->vecPos.Y, mat.pos.Y) > 6.0f ||
|
||||
FloatOffset(pSync->vecPos.Z, mat.pos.Z) > 3.0f) {
|
||||
mat.pos.X = pSync->vecPos.X;
|
||||
mat.pos.Y = pSync->vecPos.Y;
|
||||
mat.pos.Z = pSync->vecPos.Z;
|
||||
pVehicle->SetMatrix(mat);
|
||||
pVehicle->SetMoveSpeedVector(pSync->vecMoveSpeed);
|
||||
pVehicle->SetTurnSpeedVector(pSync->vecTurnSpeed);
|
||||
return;
|
||||
}
|
||||
|
||||
pVehicle->SetMatrix(mat);
|
||||
pVehicle->SetMoveSpeedVector(pSync->vecMoveSpeed);
|
||||
pVehicle->SetTurnSpeedVector(pSync->vecTurnSpeed);
|
||||
|
||||
vecMove.X = 0.0f;
|
||||
vecMove.Y = 0.0f;
|
||||
vecMove.Z = 0.0f;
|
||||
pVehicle->GetMoveSpeedVector(&vecMove);
|
||||
|
||||
if(FloatOffset(pSync->vecPos.X, mat.pos.X) > 0.05)
|
||||
vecMove.X = (pSync->vecPos.X - mat.pos.X) * fVehLerp + vecMove.X;
|
||||
if(FloatOffset(pSync->vecPos.Y, mat.pos.Y) > 0.05)
|
||||
vecMove.Y = (pSync->vecPos.Y - mat.pos.Y) * fVehLerp + vecMove.Y;
|
||||
if(FloatOffset(pSync->vecPos.Z, mat.pos.Z) > 0.05)
|
||||
vecMove.Z = (pSync->vecPos.Z - mat.pos.Z) * fVehLerp + vecMove.Z;
|
||||
|
||||
pVehicle->SetMoveSpeedVector(vecMove);
|
||||
pVehicle->field_83 = 1;
|
||||
}
|
||||
|
||||
//----------------------------------------------------
|
||||
|
||||
void CRemotePlayer::FUNC_10015140()
|
||||
{
|
||||
MATRIX4X4 mat;
|
||||
|
||||
@@ -3,6 +3,17 @@
|
||||
|
||||
//----------------------------------------------------
|
||||
|
||||
struct UNOCCUPIED_SYNC_DATA
|
||||
{
|
||||
VEHICLEID VehicleID;
|
||||
BYTE byteSeatID;
|
||||
VECTOR vecRoll;
|
||||
VECTOR vecDirection;
|
||||
VECTOR vecPos;
|
||||
VECTOR vecMoveSpeed;
|
||||
VECTOR vecTurnSpeed;
|
||||
};
|
||||
|
||||
struct TRAILER_SYNC_DATA
|
||||
{
|
||||
VEHICLEID TrailerID;
|
||||
@@ -118,6 +129,7 @@ public:
|
||||
void FUNC_10016370(BULLET_SYNC_DATA *pSync); // .text:10016370
|
||||
void FUNC_10014950(); // .text:10014950
|
||||
void FUNC_10015140(); // .text:10015140
|
||||
void FUNC_100158D0(UNOCCUPIED_SYNC_DATA *pSync); // .text:100158D0
|
||||
void FUNC_10015C90(TRAILER_SYNC_DATA *pTrailer); // .text:10015C90
|
||||
void FUNC_10014E60(); // .text:10014E60
|
||||
void FUNC_10015460(); // .text:10015460
|
||||
|
||||
@@ -26,7 +26,8 @@ public:
|
||||
int field_3074[MAX_VEHICLES];
|
||||
int field_4FB4[MAX_VEHICLES];
|
||||
|
||||
char _gap6EF4[12000];
|
||||
char _gap6EF4[8000];
|
||||
WORD field_8E34[MAX_VEHICLES];
|
||||
|
||||
DWORD field_9DD4[MAX_VEHICLES];
|
||||
|
||||
|
||||
Reference in New Issue
Block a user