From 67c7c34fc075b96a2e0bf8f26f72c0461445b23c Mon Sep 17 00:00:00 2001 From: ricardoofnl Date: Sat, 5 Sep 2026 09:27:59 +0700 Subject: [PATCH] [saco] Implement/match `FUNC_10014950`, the special-action driver; every pair is two sequential `if`s with `&&`, not an `if`/`else` --- saco/game/playerped.h | 4 +++ saco/net/remoteplayer.cpp | 61 +++++++++++++++++++++++++++++++++++++++ saco/net/remoteplayer.h | 1 + 3 files changed, 66 insertions(+) diff --git a/saco/game/playerped.h b/saco/game/playerped.h index 1d480c2..7f10274 100644 --- a/saco/game/playerped.h +++ b/saco/game/playerped.h @@ -205,6 +205,10 @@ public: void FUNC_100AFFD0(); // .text:100AFFD0 int FUNC_100AE260(); // .text:100AE260 + void FUNC_100AE100(); // .text:100AE100 + void FUNC_100AD440(); // .text:100AD440 + void FUNC_100ADCA0(); // .text:100ADCA0 + void FUNC_100B02D0(int a1); // .text:100B02D0 BOOL FUNC_100ACE40(); // .text:100ACE40 void FUNC_100ACF00(int a1); // .text:100ACF00 BOOL FUNC_100AD860(); // .text:100AD860 diff --git a/saco/net/remoteplayer.cpp b/saco/net/remoteplayer.cpp index c9a75a6..c595f9d 100644 --- a/saco/net/remoteplayer.cpp +++ b/saco/net/remoteplayer.cpp @@ -475,6 +475,67 @@ void CRemotePlayer::FUNC_10016370(BULLET_SYNC_DATA *pSync) //---------------------------------------------------- +void CRemotePlayer::FUNC_10014950() +{ + if(!m_pPlayerPed) return; + if(!m_pPlayerPed->IsAdded()) return; + + if(field_C == 1 && !m_pPlayerPed->FUNC_100AC690()) { + m_pPlayerPed->FUNC_100AC6C0(); + return; + } + if(field_C != 1 && m_pPlayerPed->FUNC_100AC690()) m_pPlayerPed->FUNC_100AC720(); + + if(field_C == 11 && !m_pPlayerPed->IsCellphoneEnabled()) { + m_pPlayerPed->ToggleCellphone(1); + return; + } + if(field_C != 11 && m_pPlayerPed->IsCellphoneEnabled()) { + m_pPlayerPed->ToggleCellphone(0); + return; + } + + if(field_C == 2 && !m_pPlayerPed->IsInJetpackMode()) { + field_8 = 1; + m_pPlayerPed->StartJetpack(); + return; + } + if(field_C != 2 && m_pPlayerPed->IsInJetpackMode()) { + field_8 = 0; + m_pPlayerPed->StopJetpack(); + return; + } + + if(field_C == 10 && !m_pPlayerPed->HasHandsUp()) m_pPlayerPed->HandsUp(); + if(field_C != 10 && m_pPlayerPed->HasHandsUp()) m_pPlayerPed->StopDancing(); + + if(!m_pPlayerPed->FUNC_100AE260() && field_C == 68) m_pPlayerPed->FUNC_100AE100(); + if(m_pPlayerPed->FUNC_100AE260() && field_C != 68) m_pPlayerPed->FUNC_100AE1E0(); + + if(field_C == 20 && m_pPlayerPed->FUNC_100ADC90() != 1) m_pPlayerPed->FUNC_100B02D0(1); + if(field_C == 22 && m_pPlayerPed->FUNC_100ADC90() != 2) m_pPlayerPed->FUNC_100B02D0(2); + if(field_C == 23 && m_pPlayerPed->FUNC_100ADC90() != 3) m_pPlayerPed->FUNC_100B02D0(3); + if(field_C == 21 && m_pPlayerPed->FUNC_100ADC90() != 4) m_pPlayerPed->FUNC_100B02D0(4); + + if(m_pPlayerPed->FUNC_100ADC90()) { + if(field_C == 20 || field_C == 22 || field_C == 23 || field_C == 21) + m_pPlayerPed->FUNC_100ADCA0(); + else m_pPlayerPed->StopCarrying(); + } + + if(!m_pPlayerPed->FUNC_100ACEF0() && field_C == 24) m_pPlayerPed->FUNC_100ACF00(1); + if(m_pPlayerPed->FUNC_100ACEF0() && field_C != 24 && field_C != 3 && field_C != 4) + m_pPlayerPed->FUNC_100ACF00(0); + + if(!m_pPlayerPed->FUNC_100ACE40() && field_C == 25) m_pPlayerPed->FUNC_100ACE50(1); + if(m_pPlayerPed->FUNC_100ACE40() && field_C != 25 && field_C != 3 && field_C != 4) + m_pPlayerPed->FUNC_100ACE50(0); + + m_pPlayerPed->FUNC_100AD440(); +} + +//---------------------------------------------------- + void CRemotePlayer::FUNC_10014C40() { if(!m_pPlayerPed) return; diff --git a/saco/net/remoteplayer.h b/saco/net/remoteplayer.h index fd1d131..f283163 100644 --- a/saco/net/remoteplayer.h +++ b/saco/net/remoteplayer.h @@ -107,6 +107,7 @@ public: void FUNC_10017260(BYTE *pSync, int iTime); // .text:10017260 void FUNC_10014C40(); // .text:10014C40 void FUNC_10016370(BULLET_SYNC_DATA *pSync); // .text:10016370 + void FUNC_10014950(); // .text:10014950 void FUNC_10014E60(); // .text:10014E60 void FUNC_10015460(); // .text:10015460 void FUNC_10015760(BYTE *pAim); // .text:10015760