From c859373b8e2fc1c293fe752bb1b788b585238d55 Mon Sep 17 00:00:00 2001 From: ricardoofnl Date: Thu, 3 Sep 2026 22:09:57 +0700 Subject: [PATCH] [saco] Match `CRemotePlayer::FUNC_10014800`; `field_10B` is unsigned and the vehicle lookup is its own statement --- saco/game/playerped.h | 1 + saco/net/remoteplayer.cpp | 29 +++++++++++++++++++++++++++++ saco/net/remoteplayer.h | 3 ++- 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/saco/game/playerped.h b/saco/game/playerped.h index 61d048b..e3d477e 100644 --- a/saco/game/playerped.h +++ b/saco/game/playerped.h @@ -80,6 +80,7 @@ public: void GiveWeapon(int iWeaponID, int iAmmo); void SetArmedWeapon(int iWeaponType, bool bUnk); + void FUNC_100AC290(int iGtaVehicleID, int iSeat); // .text:100AC290 void ClearAllWeapons(); void RemoveWeaponWhenEnteringVehicle(); WEAPON_SLOT_TYPE * GetCurrentWeaponSlot(); diff --git a/saco/net/remoteplayer.cpp b/saco/net/remoteplayer.cpp index 3f4e5db..f5ca84b 100644 --- a/saco/net/remoteplayer.cpp +++ b/saco/net/remoteplayer.cpp @@ -299,6 +299,35 @@ void CRemotePlayer::FUNC_10014650() //---------------------------------------------------- +void CRemotePlayer::FUNC_10014800() +{ + CVehiclePool *pVehiclePool = pNetGame->GetVehiclePool(); + + if(!m_pPlayerPed) return; + if(m_pPlayerPed->IsInVehicle()) return; + if(field_1E7 >= MAX_VEHICLES) return; + if(!pVehiclePool->field_3074[field_1E7]) return; + if(!pVehiclePool->field_1134[field_1E7]) return; + + BYTE byteWeapon; + if(field_10B) byteWeapon = field_AD[3]; + else byteWeapon = field_19[54]; + byteWeapon &= 0x3F; + + if(m_pPlayerPed->GetCurrentWeapon() != byteWeapon) { + m_pPlayerPed->SetArmedWeapon(byteWeapon, false); + if(m_pPlayerPed->GetCurrentWeapon() != byteWeapon) { + m_pPlayerPed->GiveWeapon(byteWeapon, 9999); + m_pPlayerPed->SetArmedWeapon(byteWeapon, false); + } + } + + int iGtaVehicleID = pVehiclePool->FindGtaIDFromID(field_1E7); + m_pPlayerPed->FUNC_100AC290(iGtaVehicleID, field_10B); +} + +//---------------------------------------------------- + void CRemotePlayer::FUNC_10014500(int a1) { if(!a1) { diff --git a/saco/net/remoteplayer.h b/saco/net/remoteplayer.h index e529eb7..a59eb3d 100644 --- a/saco/net/remoteplayer.h +++ b/saco/net/remoteplayer.h @@ -30,7 +30,7 @@ public: } field_C5; char field_109; BYTE field_10A; - char field_10B; + BYTE field_10B; int field_10C; int field_110; @@ -81,6 +81,7 @@ public: void FUNC_10014500(int a1); // .text:10014500 void FUNC_10014540(short a1, short a2, short a3); // .text:10014540 void FUNC_10014650(); // .text:10014650 + void FUNC_10014800(); // .text:10014800 void FUNC_10017610(char *szText); // .text:10017610 void FUNC_100150D0(VECTOR *pPos, VECTOR *pMoveSpeed); // .text:100150D0 void FUNC_100155E0(int a1, VECTOR *pPos, VECTOR *pMoveSpeed); // .text:100155E0