From 078c7381999f808c109b6bbd837c836bde92fd91 Mon Sep 17 00:00:00 2001 From: Proxy-99 <77501848+Proxy-99@users.noreply.github.com> Date: Sat, 11 Jan 2025 20:35:11 +0300 Subject: [PATCH 1/5] add nitro vehicle functions --- Client/mods/deathmatch/logic/CNetAPI.cpp | 3 +++ Server/mods/deathmatch/logic/CVehicle.h | 5 +++++ .../logic/luadefs/CLuaVehicleDefs.cpp | 21 ++++++++++++++++++- .../logic/luadefs/CLuaVehicleDefs.h | 2 ++ .../logic/net/CSimVehiclePuresyncPacket.cpp | 14 +++++++++++++ .../logic/net/CSimVehiclePuresyncPacket.h | 1 + .../logic/packets/CVehiclePuresyncPacket.cpp | 13 ++++++++++++ Shared/sdk/net/bitstream.h | 2 ++ 8 files changed, 60 insertions(+), 1 deletion(-) diff --git a/Client/mods/deathmatch/logic/CNetAPI.cpp b/Client/mods/deathmatch/logic/CNetAPI.cpp index ced1680e3f7..f2d2bd87fa0 100644 --- a/Client/mods/deathmatch/logic/CNetAPI.cpp +++ b/Client/mods/deathmatch/logic/CNetAPI.cpp @@ -1777,6 +1777,9 @@ void CNetAPI::WriteVehiclePuresync(CClientPed* pPlayerModel, CClientVehicle* pVe // Write the sent position to the interpolator AddInterpolation(vecPosition); + + if (BitStream.Can(eBitStreamVersion::IsVehicleNitroActivated_Serverside)) + BitStream.Write(pVehicle->GetNitroLevel()); } bool CNetAPI::ReadSmallKeysync(CControllerState& ControllerState, NetBitStreamInterface& BitStream) diff --git a/Server/mods/deathmatch/logic/CVehicle.h b/Server/mods/deathmatch/logic/CVehicle.h index 01aa83d3b48..cc7beae0b7a 100644 --- a/Server/mods/deathmatch/logic/CVehicle.h +++ b/Server/mods/deathmatch/logic/CVehicle.h @@ -400,6 +400,10 @@ class CVehicle final : public CElement bool IsOnFire() const noexcept override { return m_onFire; } void SetOnFire(bool onFire) noexcept override { m_onFire = onFire; } + void SetNitroLevel(float level) noexcept { m_nitroLevel = level; } + float GetNitroLevel() const noexcept { return m_nitroLevel; } + bool IsNitroActivated() const noexcept { return m_nitroLevel < 0; } + void StopIdleTimer(); void RestartIdleTimer(); bool IsIdleTimerRunning(); @@ -495,6 +499,7 @@ class CVehicle final : public CElement unsigned char m_ucVariant2; bool m_onFire; + float m_nitroLevel; CTickCount m_LastPushedTime; CVector m_vecStationaryCheckPosition; diff --git a/Server/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.cpp b/Server/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.cpp index b1352f2e9eb..6fdc5229208 100644 --- a/Server/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.cpp +++ b/Server/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.cpp @@ -128,6 +128,8 @@ void CLuaVehicleDefs::LoadFunctions() {"getVehicleSirenParams", GetVehicleSirenParams}, {"setVehiclePlateText", SetVehiclePlateText}, {"setVehicleNitroActivated", ArgumentParser}, + {"isVehicleNitroActivated", ArgumentParser}, + {"getVehicleNitroLevel", ArgumentParser}, }; // Add functions @@ -3059,4 +3061,21 @@ bool CLuaVehicleDefs::SetVehicleNitroActivated(CVehicle* vehicle, bool state) no m_pPlayerManager->BroadcastOnlyJoined(CElementRPCPacket(vehicle, SET_VEHICLE_NITRO_ACTIVATED, *BitStream.pBitStream)); return true; -} \ No newline at end of file +} + + bool CLuaVehicleDefs::IsVehicleNitroActivated(CVehicle* vehicle) noexcept +{ + return vehicle->IsNitroActivated(); +} + +float CLuaVehicleDefs::GetVehicleNitroLevel(CVehicle* vehicle) noexcept +{ + float fLevel; + fLevel = vehicle->GetNitroLevel(); + + if (fLevel < 0) + fLevel = 1 + fLevel; + + return fLevel; + +} diff --git a/Server/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.h b/Server/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.h index 11b23691dcb..f9ce38d2f70 100644 --- a/Server/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.h +++ b/Server/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.h @@ -128,4 +128,6 @@ class CLuaVehicleDefs : public CLuaDefs static bool SpawnVehicleFlyingComponent(CVehicle* const vehicle, std::uint8_t nodeIndex, std::optional componentCollisionType, std::optional removalTime); static bool SetVehicleNitroActivated(CVehicle* vehicle, bool state) noexcept; + static bool IsVehicleNitroActivated(CVehicle* vehicle) noexcept; + static float GetVehicleNitroLevel(CVehicle* vehicle) noexcept; }; diff --git a/Server/mods/deathmatch/logic/net/CSimVehiclePuresyncPacket.cpp b/Server/mods/deathmatch/logic/net/CSimVehiclePuresyncPacket.cpp index dbfb098cf94..dc919822566 100644 --- a/Server/mods/deathmatch/logic/net/CSimVehiclePuresyncPacket.cpp +++ b/Server/mods/deathmatch/logic/net/CSimVehiclePuresyncPacket.cpp @@ -254,6 +254,16 @@ bool CSimVehiclePuresyncPacket::Read(NetBitStreamInterface& BitStream) if (BitStream.Can(eBitStreamVersion::SetElementOnFire)) m_Cache.isOnFire = BitStream.ReadBit(); + if (BitStream.Can(eBitStreamVersion::IsVehicleNitroActivated_Serverside)) + { + float vehicleNitro; + if (!BitStream.Read(vehicleNitro)) + return false; + + m_Cache.VehNitroLevel = vehicleNitro; + } + + // Success return true; } @@ -424,6 +434,10 @@ bool CSimVehiclePuresyncPacket::Write(NetBitStreamInterface& BitStream) const if (BitStream.Can(eBitStreamVersion::SetElementOnFire)) BitStream.WriteBit(m_Cache.isOnFire); + + if (BitStream.Can(eBitStreamVersion::IsVehicleNitroActivated_Serverside)) + BitStream.Write(m_Cache.VehNitroLevel); + // Success return true; } diff --git a/Server/mods/deathmatch/logic/net/CSimVehiclePuresyncPacket.h b/Server/mods/deathmatch/logic/net/CSimVehiclePuresyncPacket.h index 16ebe3eb907..191a1777332 100644 --- a/Server/mods/deathmatch/logic/net/CSimVehiclePuresyncPacket.h +++ b/Server/mods/deathmatch/logic/net/CSimVehiclePuresyncPacket.h @@ -75,6 +75,7 @@ class CSimVehiclePuresyncPacket : public CSimPacket CVector VehTurnSpeed; float fVehHealth; + float VehNitroLevel; std::vector TrailerList; diff --git a/Server/mods/deathmatch/logic/packets/CVehiclePuresyncPacket.cpp b/Server/mods/deathmatch/logic/packets/CVehiclePuresyncPacket.cpp index bfab30f952e..712ee0f16ea 100644 --- a/Server/mods/deathmatch/logic/packets/CVehiclePuresyncPacket.cpp +++ b/Server/mods/deathmatch/logic/packets/CVehiclePuresyncPacket.cpp @@ -454,6 +454,16 @@ bool CVehiclePuresyncPacket::Read(NetBitStreamInterface& BitStream) if (BitStream.Can(eBitStreamVersion::SetElementOnFire)) pVehicle->SetOnFire(BitStream.ReadBit()); + if (BitStream.Can(eBitStreamVersion::IsVehicleNitroActivated_Serverside)) + { + float vehicleNitro; + if (!BitStream.Read(vehicleNitro)) + return false; + + pVehicle->SetNitroLevel(vehicleNitro); + + } + // Success return true; } @@ -682,6 +692,9 @@ bool CVehiclePuresyncPacket::Write(NetBitStreamInterface& BitStream) const if (BitStream.Can(eBitStreamVersion::SetElementOnFire)) BitStream.WriteBit(pVehicle->IsOnFire()); + if (BitStream.Can(eBitStreamVersion::IsVehicleNitroActivated_Serverside)) + BitStream.Write(pVehicle->GetNitroLevel()); + // Success return true; } diff --git a/Shared/sdk/net/bitstream.h b/Shared/sdk/net/bitstream.h index f69c7cc0f76..c69d7b9599d 100644 --- a/Shared/sdk/net/bitstream.h +++ b/Shared/sdk/net/bitstream.h @@ -608,6 +608,8 @@ enum class eBitStreamVersion : unsigned short // 2025-01-10 WorldSpecialProperty_FlyingComponents, + IsVehicleNitroActivated_Serverside, + // This allows us to automatically increment the BitStreamVersion when things are added to this enum. // Make sure you only add things above this comment. Next, From ae4eda94e49861df6d057908ea85dc1730b7783c Mon Sep 17 00:00:00 2001 From: Proxy-99 <77501848+Proxy-99@users.noreply.github.com> Date: Thu, 16 Jan 2025 19:42:25 +0300 Subject: [PATCH 2/5] review --- Server/mods/deathmatch/logic/CVehicle.h | 2 +- Server/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.cpp | 4 +--- .../mods/deathmatch/logic/net/CSimVehiclePuresyncPacket.cpp | 4 ++-- Server/mods/deathmatch/logic/net/CSimVehiclePuresyncPacket.h | 2 +- .../mods/deathmatch/logic/packets/CVehiclePuresyncPacket.cpp | 3 +-- Shared/sdk/net/bitstream.h | 2 ++ 6 files changed, 8 insertions(+), 9 deletions(-) diff --git a/Server/mods/deathmatch/logic/CVehicle.h b/Server/mods/deathmatch/logic/CVehicle.h index cc7beae0b7a..4b4b3bc1dd0 100644 --- a/Server/mods/deathmatch/logic/CVehicle.h +++ b/Server/mods/deathmatch/logic/CVehicle.h @@ -499,7 +499,7 @@ class CVehicle final : public CElement unsigned char m_ucVariant2; bool m_onFire; - float m_nitroLevel; + float m_nitroLevel {0.0f}; CTickCount m_LastPushedTime; CVector m_vecStationaryCheckPosition; diff --git a/Server/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.cpp b/Server/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.cpp index 6fdc5229208..13ffcea1bac 100644 --- a/Server/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.cpp +++ b/Server/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.cpp @@ -3070,12 +3070,10 @@ bool CLuaVehicleDefs::SetVehicleNitroActivated(CVehicle* vehicle, bool state) no float CLuaVehicleDefs::GetVehicleNitroLevel(CVehicle* vehicle) noexcept { - float fLevel; - fLevel = vehicle->GetNitroLevel(); + float fLevel = vehicle->GetNitroLevel(); if (fLevel < 0) fLevel = 1 + fLevel; return fLevel; - } diff --git a/Server/mods/deathmatch/logic/net/CSimVehiclePuresyncPacket.cpp b/Server/mods/deathmatch/logic/net/CSimVehiclePuresyncPacket.cpp index dc919822566..9d133d8b512 100644 --- a/Server/mods/deathmatch/logic/net/CSimVehiclePuresyncPacket.cpp +++ b/Server/mods/deathmatch/logic/net/CSimVehiclePuresyncPacket.cpp @@ -260,7 +260,7 @@ bool CSimVehiclePuresyncPacket::Read(NetBitStreamInterface& BitStream) if (!BitStream.Read(vehicleNitro)) return false; - m_Cache.VehNitroLevel = vehicleNitro; + m_Cache.vehNitroLevel = vehicleNitro; } @@ -436,7 +436,7 @@ bool CSimVehiclePuresyncPacket::Write(NetBitStreamInterface& BitStream) const if (BitStream.Can(eBitStreamVersion::IsVehicleNitroActivated_Serverside)) - BitStream.Write(m_Cache.VehNitroLevel); + BitStream.Write(m_Cache.vehNitroLevel); // Success return true; diff --git a/Server/mods/deathmatch/logic/net/CSimVehiclePuresyncPacket.h b/Server/mods/deathmatch/logic/net/CSimVehiclePuresyncPacket.h index 191a1777332..6dc1753d30c 100644 --- a/Server/mods/deathmatch/logic/net/CSimVehiclePuresyncPacket.h +++ b/Server/mods/deathmatch/logic/net/CSimVehiclePuresyncPacket.h @@ -75,7 +75,7 @@ class CSimVehiclePuresyncPacket : public CSimPacket CVector VehTurnSpeed; float fVehHealth; - float VehNitroLevel; + float vehNitroLevel; std::vector TrailerList; diff --git a/Server/mods/deathmatch/logic/packets/CVehiclePuresyncPacket.cpp b/Server/mods/deathmatch/logic/packets/CVehiclePuresyncPacket.cpp index 712ee0f16ea..b58992b4865 100644 --- a/Server/mods/deathmatch/logic/packets/CVehiclePuresyncPacket.cpp +++ b/Server/mods/deathmatch/logic/packets/CVehiclePuresyncPacket.cpp @@ -454,14 +454,13 @@ bool CVehiclePuresyncPacket::Read(NetBitStreamInterface& BitStream) if (BitStream.Can(eBitStreamVersion::SetElementOnFire)) pVehicle->SetOnFire(BitStream.ReadBit()); - if (BitStream.Can(eBitStreamVersion::IsVehicleNitroActivated_Serverside)) + if (BitStream.Can(eBitStreamVersion::IsVehicleNitroActivated_Serverside)) { float vehicleNitro; if (!BitStream.Read(vehicleNitro)) return false; pVehicle->SetNitroLevel(vehicleNitro); - } // Success diff --git a/Shared/sdk/net/bitstream.h b/Shared/sdk/net/bitstream.h index c69d7b9599d..c6c9555a81e 100644 --- a/Shared/sdk/net/bitstream.h +++ b/Shared/sdk/net/bitstream.h @@ -608,6 +608,8 @@ enum class eBitStreamVersion : unsigned short // 2025-01-10 WorldSpecialProperty_FlyingComponents, + //2025-01-16 + //Add isVehicleNitroActivated and getVehicleNitroLevel Server side IsVehicleNitroActivated_Serverside, // This allows us to automatically increment the BitStreamVersion when things are added to this enum. From b3348705b5cd1fccd27840b1eaed452c8c188280 Mon Sep 17 00:00:00 2001 From: Proxy-99 <77501848+Proxy-99@users.noreply.github.com> Date: Fri, 14 Feb 2025 12:03:47 +0300 Subject: [PATCH 3/5] review --- Server/mods/deathmatch/logic/net/CSimVehiclePuresyncPacket.h | 2 +- Shared/sdk/net/bitstream.h | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Server/mods/deathmatch/logic/net/CSimVehiclePuresyncPacket.h b/Server/mods/deathmatch/logic/net/CSimVehiclePuresyncPacket.h index 6dc1753d30c..23bbc170428 100644 --- a/Server/mods/deathmatch/logic/net/CSimVehiclePuresyncPacket.h +++ b/Server/mods/deathmatch/logic/net/CSimVehiclePuresyncPacket.h @@ -75,7 +75,7 @@ class CSimVehiclePuresyncPacket : public CSimPacket CVector VehTurnSpeed; float fVehHealth; - float vehNitroLevel; + float vehNitroLevel {0.0f}; std::vector TrailerList; diff --git a/Shared/sdk/net/bitstream.h b/Shared/sdk/net/bitstream.h index 7fa7b165a09..99a6ae05375 100644 --- a/Shared/sdk/net/bitstream.h +++ b/Shared/sdk/net/bitstream.h @@ -608,8 +608,8 @@ enum class eBitStreamVersion : unsigned short // 2025-01-10 WorldSpecialProperty_FlyingComponents, - //2025-01-16 - //Add isVehicleNitroActivated and getVehicleNitroLevel Server side + // Add isVehicleNitroActivated and getVehicleNitroLevel Server side + // 2025-01-16 IsVehicleNitroActivated_Serverside, // Ped's camera synchronization From e9e47a0f64bdc37e67c97b9f9b44bcff52fe399f Mon Sep 17 00:00:00 2001 From: Proxy-99 <77501848+Proxy-99@users.noreply.github.com> Date: Fri, 14 Feb 2025 19:26:32 +0300 Subject: [PATCH 4/5] add IsNitroInstalled checks --- Server/mods/deathmatch/logic/CVehicle.cpp | 15 +++++++++++++++ Server/mods/deathmatch/logic/CVehicle.h | 3 ++- .../deathmatch/logic/luadefs/CLuaVehicleDefs.cpp | 14 +++++++++----- .../deathmatch/logic/luadefs/CLuaVehicleDefs.h | 2 +- 4 files changed, 27 insertions(+), 7 deletions(-) diff --git a/Server/mods/deathmatch/logic/CVehicle.cpp b/Server/mods/deathmatch/logic/CVehicle.cpp index 23c388b0208..edf51b87905 100644 --- a/Server/mods/deathmatch/logic/CVehicle.cpp +++ b/Server/mods/deathmatch/logic/CVehicle.cpp @@ -1013,3 +1013,18 @@ void CVehicle::SetRespawnEnabled(bool bEnabled) m_bRespawnEnabled = bEnabled; } } + +bool CVehicle::IsNitroInstalled() const noexcept +{ + return this->m_pUpgrades->GetSlotState(8) != 0; +} + +bool CVehicle::IsNitroActivated() const noexcept +{ + if (!IsNitroInstalled()) + return false; + + return m_nitroLevel < 0; +} + + diff --git a/Server/mods/deathmatch/logic/CVehicle.h b/Server/mods/deathmatch/logic/CVehicle.h index 4b4b3bc1dd0..2e11b8b2b4c 100644 --- a/Server/mods/deathmatch/logic/CVehicle.h +++ b/Server/mods/deathmatch/logic/CVehicle.h @@ -402,7 +402,8 @@ class CVehicle final : public CElement void SetNitroLevel(float level) noexcept { m_nitroLevel = level; } float GetNitroLevel() const noexcept { return m_nitroLevel; } - bool IsNitroActivated() const noexcept { return m_nitroLevel < 0; } + bool IsNitroActivated() const noexcept; + bool IsNitroInstalled() const noexcept; void StopIdleTimer(); void RestartIdleTimer(); diff --git a/Server/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.cpp b/Server/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.cpp index 13ffcea1bac..f21dd919ca3 100644 --- a/Server/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.cpp +++ b/Server/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.cpp @@ -3068,12 +3068,16 @@ bool CLuaVehicleDefs::SetVehicleNitroActivated(CVehicle* vehicle, bool state) no return vehicle->IsNitroActivated(); } -float CLuaVehicleDefs::GetVehicleNitroLevel(CVehicle* vehicle) noexcept +std::variant CLuaVehicleDefs::GetVehicleNitroLevel(CVehicle* vehicle) noexcept { - float fLevel = vehicle->GetNitroLevel(); - if (fLevel < 0) - fLevel = 1 + fLevel; + if (!vehicle->IsNitroInstalled()) + return false; + + float level = vehicle->GetNitroLevel(); + + if (level < 0) + level = 1 + level; - return fLevel; + return level; } diff --git a/Server/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.h b/Server/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.h index f9ce38d2f70..0eb4513f599 100644 --- a/Server/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.h +++ b/Server/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.h @@ -129,5 +129,5 @@ class CLuaVehicleDefs : public CLuaDefs static bool SpawnVehicleFlyingComponent(CVehicle* const vehicle, std::uint8_t nodeIndex, std::optional componentCollisionType, std::optional removalTime); static bool SetVehicleNitroActivated(CVehicle* vehicle, bool state) noexcept; static bool IsVehicleNitroActivated(CVehicle* vehicle) noexcept; - static float GetVehicleNitroLevel(CVehicle* vehicle) noexcept; + static std::variant GetVehicleNitroLevel(CVehicle* vehicle) noexcept; }; From e8967fcd8d4be3539bbbb0cdc460e03eb89d55df Mon Sep 17 00:00:00 2001 From: Proxy-99 <77501848+Proxy-99@users.noreply.github.com> Date: Fri, 14 Feb 2025 19:29:40 +0300 Subject: [PATCH 5/5] space --- Server/mods/deathmatch/logic/CVehicle.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/Server/mods/deathmatch/logic/CVehicle.cpp b/Server/mods/deathmatch/logic/CVehicle.cpp index edf51b87905..f30742b5ec2 100644 --- a/Server/mods/deathmatch/logic/CVehicle.cpp +++ b/Server/mods/deathmatch/logic/CVehicle.cpp @@ -1026,5 +1026,3 @@ bool CVehicle::IsNitroActivated() const noexcept return m_nitroLevel < 0; } - -