summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/control/Pickups.cpp14
-rw-r--r--src/peds/Ped.cpp4
-rw-r--r--src/peds/PedFight.cpp18
-rw-r--r--src/weapons/WeaponInfo.h1
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);