From 164f16c85b73176a6f2baf1e70e8ee8c575eb835 Mon Sep 17 00:00:00 2001 From: Sergeanur Date: Wed, 25 Nov 2020 19:39:57 +0200 Subject: [PATCH] Some TODOs done in Peds code --- src/control/Pickups.cpp | 14 ++++---------- src/peds/Ped.cpp | 4 +--- src/peds/PedFight.cpp | 18 ++++++++++++++---- src/weapons/WeaponInfo.h | 1 + 4 files changed, 20 insertions(+), 17 deletions(-) diff --git a/src/control/Pickups.cpp b/src/control/Pickups.cpp index 336ad83c..4d325101 100644 --- a/src/control/Pickups.cpp +++ b/src/control/Pickups.cpp @@ -140,18 +140,12 @@ ModifyStringLabelForControlSetting(char *str) } } -inline bool -IsWeaponSlotAmmoMergeable(uint32 slot) -{ - return slot == WEAPONSLOT_SHOTGUN || slot == WEAPONSLOT_SUBMACHINEGUN || slot == WEAPONSLOT_RIFLE; -} - void CPickup::ExtractAmmoFromPickup(CPlayerPed *player) { eWeaponType weaponType = CPickups::WeaponForModel(m_pObject->GetModelIndex()); - if (m_eType == PICKUP_IN_SHOP || !IsWeaponSlotAmmoMergeable(CWeaponInfo::GetWeaponInfo(weaponType)->m_nWeaponSlot)) + if (m_eType == PICKUP_IN_SHOP || !CWeaponInfo::IsWeaponSlotAmmoMergeable(CWeaponInfo::GetWeaponInfo(weaponType)->m_nWeaponSlot)) return; uint32 ammo = m_nQuantity; @@ -374,14 +368,14 @@ CPickup::Update(CPlayerPed *player, CVehicle *vehicle, int playerId) eWeaponType plrWeaponSlot = FindPlayerPed()->GetWeapon(slot).m_eWeaponType; if (plrWeaponSlot != weaponType) { if (CStreaming::ms_aInfoForModel[m_pObject->GetModelIndex()].m_loadState == STREAMSTATE_LOADED) { - if (plrWeaponSlot == WEAPONTYPE_UNARMED || (FindPlayerPed()->GetWeapon(slot).m_nAmmoTotal == 0 && !IsWeaponSlotAmmoMergeable(slot))) { + if (plrWeaponSlot == WEAPONTYPE_UNARMED || (FindPlayerPed()->GetWeapon(slot).m_nAmmoTotal == 0 && !CWeaponInfo::IsWeaponSlotAmmoMergeable(slot))) { if (CTimer::GetTimeInMilliseconds() - FindPlayerPed()->m_nPadDownPressedInMilliseconds < 1500) { CPickups::PlayerOnWeaponPickup = 6; isPickupTouched = false; } } else { CPickups::PlayerOnWeaponPickup = 6; - if (IsWeaponSlotAmmoMergeable(slot)) { + if (CWeaponInfo::IsWeaponSlotAmmoMergeable(slot)) { if (m_eType == PICKUP_ONCE_TIMEOUT || m_eType == PICKUP_ONCE || m_eType == PICKUP_ON_STREET) { ExtractAmmoFromPickup(player); FindPlayerPed()->GetWeapon(slot).Reload(); @@ -1384,7 +1378,7 @@ void CPickups::RemoveAllPickupsOfACertainWeaponGroupWithNoAmmo(eWeaponType weaponType) { uint32 weaponSlot = CWeaponInfo::GetWeaponInfo(weaponType)->m_nWeaponSlot; - if (IsWeaponSlotAmmoMergeable(weaponSlot)) { + if (CWeaponInfo::IsWeaponSlotAmmoMergeable(weaponSlot)) { for (int slot = 0; slot < NUMPICKUPS; slot++) { if (aPickUps[slot].m_eType == PICKUP_ONCE || aPickUps[slot].m_eType == PICKUP_ONCE_TIMEOUT || aPickUps[slot].m_eType == PICKUP_ONCE_TIMEOUT_SLOW) { if (aPickUps[slot].m_pObject) { diff --git a/src/peds/Ped.cpp b/src/peds/Ped.cpp index 0c8e0416..acf219b4 100644 --- a/src/peds/Ped.cpp +++ b/src/peds/Ped.cpp @@ -4712,9 +4712,7 @@ CPed::GiveWeapon(eWeaponType weaponType, uint32 ammo, bool unused) GetWeapon(slot).m_eWeaponState = WEAPONSTATE_READY; } else { if (HasWeaponSlot(slot)) { - - // TODO(Miami): Make an enum for that - if (slot == 4 || slot == 5 || slot == 6) + if (CWeaponInfo::IsWeaponSlotAmmoMergeable(slot)) ammo += GetWeapon(slot).m_nAmmoTotal; RemoveWeaponModel(CWeaponInfo::GetWeaponInfo(GetWeapon(slot).m_eWeaponType)->m_nModelId); diff --git a/src/peds/PedFight.cpp b/src/peds/PedFight.cpp index 43ef9b3d..4d4850e7 100644 --- a/src/peds/PedFight.cpp +++ b/src/peds/PedFight.cpp @@ -24,6 +24,7 @@ #include "World.h" #include "Bike.h" #include "Glass.h" +#include "SpecialFX.h" //--MIAMI: file done except TODOs @@ -952,7 +953,18 @@ CPed::Attack(void) } } - // TODO(Miami): CSpecialFX::AddWeaponStreak + if (IsPlayer()) { + eWeaponType weaponType = GetWeapon()->m_eWeaponType; + if (weaponType == WEAPONTYPE_BASEBALLBAT || weaponType == WEAPONTYPE_GOLFCLUB || weaponType == WEAPONTYPE_KATANA) { + float loopEndWithDelay = animLoopEnd; + if (loopEndWithDelay >= 98.0f) + loopEndWithDelay = (14.0f / 30.0f) + delayBetweenAnimAndFire; + if (weaponAnimAssoc->flags & ASSOC_RUNNING) { + if (weaponAnimAssoc->currentTime >= animLoopStart && weaponAnimAssoc->currentTime <= loopEndWithDelay) + CSpecialFX::AddWeaponStreak(weaponType); + } + } + } // Anim breakout on running if (IsPlayer()) { @@ -1447,9 +1459,7 @@ CPed::Fight(void) if (tFightMoves[m_curFightMove].startFireTime - streakDelay < currentAssoc->currentTime && streakDelay + tFightMoves[m_curFightMove].endFireTime > currentAssoc->currentTime) { - - // TODO(Miami): AddWeaponStreak - // CSpecialFX::AddWeaponStreak(v2->m_weapons[(char)v2->m_currentWeapon].nWeaponId); + CSpecialFX::AddWeaponStreak(GetWeapon()->m_eWeaponType); } } } diff --git a/src/weapons/WeaponInfo.h b/src/weapons/WeaponInfo.h index 7ce3d861..6e09e9f2 100644 --- a/src/weapons/WeaponInfo.h +++ b/src/weapons/WeaponInfo.h @@ -68,6 +68,7 @@ public: static eWeaponFire FindWeaponFireType(char *name); static eWeaponType FindWeaponType(char *name); static void Shutdown(void); + static bool IsWeaponSlotAmmoMergeable(uint32 slot) { return slot == WEAPONSLOT_SHOTGUN || slot == WEAPONSLOT_SUBMACHINEGUN || slot == WEAPONSLOT_RIFLE; } }; VALIDATE_SIZE(CWeaponInfo, 0x64);