Skip to content

Commit 16b261d

Browse files
committed
mtaserver.conf settings
1 parent cc37301 commit 16b261d

File tree

16 files changed

+269
-156
lines changed

16 files changed

+269
-156
lines changed

Client/game_sa/CPedSA.cpp

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
#include "CProjectileInfoSA.h"
2121
#include "CWeaponStatManagerSA.h"
2222
#include "CFireManagerSA.h"
23+
#include "CAnimManagerSA.h"
2324

2425
extern CGameSA* pGame;
2526

@@ -576,6 +577,25 @@ void CPedSA::GetAttachedSatchels(std::vector<SSatchelsData>& satchelsList) const
576577
}
577578
}
578579

580+
bool CPedSA::IsPedCuttingWithChainsaw() const
581+
{
582+
if (GetPedIntelligence()->GetTaskManager()->GetActiveTask()->GetTaskType() == TASK_SIMPLE_FIGHT)
583+
{
584+
CPedSAInterface* gamePed = GetPedInterface();
585+
586+
if (gamePed->weaponAudioEntity.m_chainsawState == eChainsawState::CUTTING)
587+
{
588+
auto cuttingAnim = pGame->GetAnimManager()->RpAnimBlendClumpGetAssociation(gamePed->m_pRwObject, "csaw_g");
589+
if (!cuttingAnim)
590+
cuttingAnim = pGame->GetAnimManager()->RpAnimBlendClumpGetAssociation(gamePed->m_pRwObject, "csaw_part");
591+
592+
return cuttingAnim != nullptr;
593+
}
594+
}
595+
596+
return false;
597+
}
598+
579599
////////////////////////////////////////////////////////////////
580600
//
581601
// CPed_PreRenderAfterTest

Client/game_sa/CPedSA.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -475,6 +475,8 @@ class CPedSA : public virtual CPed, public virtual CPhysicalSA
475475

476476
void GetAttachedSatchels(std::vector<SSatchelsData> &satchelsList) const override;
477477

478+
bool IsPedCuttingWithChainsaw() const override;
479+
478480
static void StaticSetHooks();
479481

480482
private:

Client/mods/deathmatch/logic/CClientGame.cpp

Lines changed: 57 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,6 @@ CVector g_vecBulletFireEndPosition;
7474
#define DOUBLECLICK_MOVE_THRESHOLD 10.0f
7575

7676
static constexpr long long TIME_DISCORD_UPDATE_RATE = 15000;
77-
static constexpr int CANCEL_DAMAGE_EVENT_INTERVAL = 1000;
7877

7978
CClientGame::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
}

Client/mods/deathmatch/logic/CClientGame.h

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -664,6 +664,12 @@ class CClientGame
664664
void PedStepHandler(CPedSAInterface* pPed, bool bFoot);
665665
void VehicleWeaponHitHandler(SVehicleWeaponHitEvent& event);
666666

667+
void SetEventDamageCancelledSettings(bool calledForVehicles, bool calledForDmgEveryFrame) noexcept
668+
{
669+
m_triggerEventDamageCancelledForVehicles = calledForVehicles;
670+
m_triggerEventDamageCancelledForDamageEveryFrame = calledForDmgEveryFrame;
671+
}
672+
667673
private:
668674
eStatus m_Status;
669675
eServerType m_ServerType;
@@ -874,8 +880,9 @@ class CClientGame
874880
RunNamedAnimTask_type m_mapOfRunNamedAnimTasks;
875881

876882
long long m_timeLastDiscordStateUpdate;
877-
std::int64_t m_lastCancelDamageEventTime_Ped;
878-
std::int64_t m_lastCancelDamageEventTime_Vehicle;
883+
884+
bool m_triggerEventDamageCancelledForVehicles;
885+
bool m_triggerEventDamageCancelledForDamageEveryFrame;
879886
};
880887

881888
extern CClientGame* g_pClientGame;

Client/mods/deathmatch/logic/CClientPed.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -740,6 +740,7 @@ class CClientPed : public CClientStreamElement, public CAntiCheatModule
740740
uint m_uiFrameLastRebuildPlayer;
741741
bool m_bIsSyncing;
742742
bool m_shouldRecreate{false};
743+
std::int64_t m_lastEventDamageCancelledTime{0};
743744

744745
bool m_bBulletImpactData;
745746
CClientEntityPtr m_pBulletImpactEntity;

Client/mods/deathmatch/logic/CClientVehicle.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -760,4 +760,6 @@ class CClientVehicle : public CClientStreamElement
760760

761761
std::array<CVector, static_cast<std::size_t>(VehicleDummies::VEHICLE_DUMMY_COUNT)> m_dummyPositions;
762762
bool m_copyDummyPositions = true;
763+
764+
std::int64_t m_lastEventDamageCancelledTime{0};
763765
};

Client/mods/deathmatch/logic/CPacketHandler.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5482,6 +5482,14 @@ void CPacketHandler::Packet_SyncSettings(NetBitStreamInterface& bitStream)
54825482
uchar ucAllowShotgunDamageFix = 0;
54835483
bitStream.Read(ucAllowShotgunDamageFix);
54845484

5485+
bool triggerEventDamageCancelledForVehicles;
5486+
bitStream.ReadBit(triggerEventDamageCancelledForVehicles);
5487+
5488+
bool triggerEventDamageCancelledForDamageEveryFrame;
5489+
bitStream.ReadBit(triggerEventDamageCancelledForDamageEveryFrame);
5490+
5491+
g_pClientGame->SetEventDamageCancelledSettings(triggerEventDamageCancelledForVehicles, triggerEventDamageCancelledForDamageEveryFrame);
5492+
54855493
SMiscGameSettings miscGameSettings;
54865494
miscGameSettings.bUseAltPulseOrder = (ucUseAltPulseOrder != 0);
54875495
miscGameSettings.bAllowFastSprintFix = (ucAllowFastSprintFix != 0);

Client/mods/deathmatch/logic/rpc/CWorldRPCs.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -603,6 +603,7 @@ void CWorldRPCs::SetSyncIntervals(NetBitStreamInterface& bitStream)
603603
bitStream.Read(g_TickRateSettings.iKeySyncAnalogMove);
604604
bitStream.Read(g_TickRateSettings.iPedSyncerDistance);
605605
bitStream.Read(g_TickRateSettings.iUnoccupiedVehicleSyncerDistance);
606+
bitStream.Read(g_TickRateSettings.cancelledDamageInterval);
606607
}
607608

608609
void CWorldRPCs::SetMoonSize(NetBitStreamInterface& bitStream)

Client/sdk/game/CPed.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -307,4 +307,6 @@ class CPed : public virtual CPhysical
307307
virtual void GetAttachedSatchels(std::vector<SSatchelsData> &satchelsList) const = 0;
308308

309309
virtual void Say(const ePedSpeechContext& speechId, float probability) = 0;
310+
311+
virtual bool IsPedCuttingWithChainsaw() const = 0;
310312
};

Server/mods/deathmatch/logic/CGame.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4757,8 +4757,10 @@ void CGame::SendSyncSettings(CPlayer* pPlayer)
47574757
uchar ucAllowDrivebyAnimFix = true;
47584758
uchar ucAllowShotgunDamageFix = true;
47594759

4760+
const SEVentDamageCancelledSettings& damageCancelledSettings = m_pMainConfig->GetEventDamageCancelledSettings();
4761+
47604762
CSyncSettingsPacket packet(weaponTypesUsingBulletSync, ucVehExtrapolateEnabled, sVehExtrapolateBaseMs, sVehExtrapolatePercent, sVehExtrapolateMaxMs,
4761-
ucUseAltPulseOrder, ucAllowFastSprintFix, ucAllowDrivebyAnimFix, ucAllowShotgunDamageFix);
4763+
ucUseAltPulseOrder, ucAllowFastSprintFix, ucAllowDrivebyAnimFix, ucAllowShotgunDamageFix, damageCancelledSettings.triggerOnVehicleDamage == 1, damageCancelledSettings.triggerForDamageCalledEveryFrame == 1);
47624764
if (pPlayer)
47634765
pPlayer->Send(packet);
47644766
else

0 commit comments

Comments
 (0)