@@ -74,7 +74,6 @@ CVector g_vecBulletFireEndPosition;
7474#define DOUBLECLICK_MOVE_THRESHOLD 10 .0f
7575
7676static constexpr long long TIME_DISCORD_UPDATE_RATE = 15000 ;
77- static constexpr int CANCEL_DAMAGE_EVENT_INTERVAL = 1000 ;
7877
7978CClientGame::CClientGame (bool bLocalPlay) : m_ServerInfo(new CServerInfo())
8079{
@@ -4430,30 +4429,65 @@ bool CClientGame::ApplyPedDamageFromGame(eWeaponType weaponUsed, float fDamage,
44304429 pDamagedPed->GetGamePlayer ()->SetHealth (fPreviousHealth );
44314430 pDamagedPed->GetGamePlayer ()->SetArmor (fPreviousArmor );
44324431
4433- if (GetTickCount64_ () - m_lastCancelDamageEventTime_Ped >= CANCEL_DAMAGE_EVENT_INTERVAL && weaponUsed != eWeaponType::WEAPONTYPE_DROWNING )
4432+ if (GetTickCount64_ () - pDamagedPed-> m_lastEventDamageCancelledTime >= g_TickRateSettings. cancelledDamageInterval )
44344433 {
4435- NetBitStreamInterface* bitStream = g_pNet->AllocateNetBitStream ();
4434+ bool sendPacket = true ;
4435+
4436+ if (!m_triggerEventDamageCancelledForDamageEveryFrame)
4437+ {
4438+ switch (weaponUsed)
4439+ {
4440+ case WEAPONTYPE_TEARGAS:
4441+ case WEAPONTYPE_SPRAYCAN:
4442+ case WEAPONTYPE_EXTINGUISHER:
4443+ case WEAPONTYPE_FLAMETHROWER:
4444+ case WEAPONTYPE_MOLOTOV:
4445+ case WEAPONTYPE_DROWNING:
4446+ case WEAPONTYPE_MINIGUN:
4447+ case WEAPONTYPE_RUNOVERBYCAR:
4448+ {
4449+ sendPacket = false ;
4450+ break ;
4451+ }
4452+ case WEAPONTYPE_CHAINSAW:
4453+ {
4454+ if (pInflictingEntity && pInflictingEntity->GetType () == eClientEntityType::CCLIENTPED || pInflictingEntity->GetType () == eClientEntityType::CCLIENTPLAYER)
4455+ {
4456+ CClientPed* attackerPed = static_cast <CClientPed*>(pInflictingEntity);
4457+ if (!attackerPed->m_pPlayerPed || !attackerPed->m_pPlayerPed ->IsPedCuttingWithChainsaw ())
4458+ sendPacket = false ;
4459+ }
4460+
4461+ break ;
4462+ }
4463+ }
4464+ }
44364465
4437- bitStream->Write (pDamagedPed->GetID ());
4466+ if (sendPacket)
4467+ {
4468+ NetBitStreamInterface* bitStream = g_pNet->AllocateNetBitStream ();
44384469
4439- bitStream->WriteBit (pInflictingEntity != nullptr );
4440- if (pInflictingEntity)
4441- bitStream->Write (pInflictingEntity->GetID ());
4470+ bitStream->Write (pDamagedPed->GetID ());
44424471
4443- SWeaponTypeSync weapon ;
4444- weapon. data . ucWeaponType = weaponUsed;
4445- bitStream->Write (&weapon );
4472+ bitStream-> WriteBit (pInflictingEntity != nullptr ) ;
4473+ if (pInflictingEntity)
4474+ bitStream->Write (pInflictingEntity-> GetID () );
44464475
4447- SFloatSync< 8 , 10 > damage ;
4448- damage .data .fValue = fDamage ;
4449- bitStream->Write (&damage );
4476+ SWeaponTypeSync weapon ;
4477+ weapon .data .ucWeaponType = weaponUsed ;
4478+ bitStream->Write (&weapon );
44504479
4451- bitStream->WriteString (m_pLuaManager->GetEvents ()->GetEventCancellingResourceName ());
4480+ SFloatSync<8 , 10 > damage;
4481+ damage.data .fValue = fDamage ;
4482+ bitStream->Write (&damage);
44524483
4453- g_pNet->SendPacket (PACKET_ID_CANCEL_DAMAGE_EVENT, bitStream, PACKET_PRIORITY_HIGH, PACKET_RELIABILITY_RELIABLE_ORDERED);
4454- g_pNet->DeallocateNetBitStream (bitStream);
4484+ bitStream->WriteString (m_pLuaManager->GetEvents ()->GetEventCancellingResourceName ());
44554485
4456- m_lastCancelDamageEventTime_Ped = GetTickCount64_ ();
4486+ g_pNet->SendPacket (PACKET_ID_CANCEL_DAMAGE_EVENT, bitStream, PACKET_PRIORITY_HIGH, PACKET_RELIABILITY_RELIABLE_ORDERED);
4487+ g_pNet->DeallocateNetBitStream (bitStream);
4488+
4489+ pDamagedPed->m_lastEventDamageCancelledTime = GetTickCount64_ ();
4490+ }
44574491 }
44584492
44594493 return false ;
@@ -4816,12 +4850,16 @@ bool CClientGame::VehicleDamageHandler(CEntitySAInterface* pVehicleInterface, fl
48164850 {
48174851 bAllowDamage = false ;
48184852
4819- if (GetTickCount64_ () - m_lastCancelDamageEventTime_Vehicle >= CANCEL_DAMAGE_EVENT_INTERVAL )
4853+ if (m_triggerEventDamageCancelledForVehicles && GetTickCount64_ () - pClientVehicle-> m_lastEventDamageCancelledTime >= g_TickRateSettings. cancelledDamageInterval )
48204854 {
48214855 NetBitStreamInterface* bitStream = g_pNet->AllocateNetBitStream ();
48224856
48234857 bitStream->Write (pClientVehicle->GetID ());
48244858
4859+ bitStream->WriteBit (pClientAttacker != nullptr );
4860+ if (pClientAttacker)
4861+ bitStream->Write (pClientAttacker->GetID ());
4862+
48254863 SWeaponTypeSync weapon;
48264864 weapon.data .ucWeaponType = weaponType;
48274865 bitStream->Write (&weapon);
@@ -4835,7 +4873,7 @@ bool CClientGame::VehicleDamageHandler(CEntitySAInterface* pVehicleInterface, fl
48354873 g_pNet->SendPacket (PACKET_ID_CANCEL_DAMAGE_EVENT, bitStream, PACKET_PRIORITY_HIGH, PACKET_RELIABILITY_RELIABLE_ORDERED);
48364874 g_pNet->DeallocateNetBitStream (bitStream);
48374875
4838- m_lastCancelDamageEventTime_Vehicle = GetTickCount64_ ();
4876+ pClientVehicle-> m_lastEventDamageCancelledTime = GetTickCount64_ ();
48394877 }
48404878 }
48414879 }
0 commit comments