Skip to content

Add nitro vehicle functions server side #3951

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 12 commits into
base: master
Choose a base branch
from
3 changes: 3 additions & 0 deletions Client/mods/deathmatch/logic/CNetAPI.cpp
Original file line number Diff line number Diff line change
@@ -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)
13 changes: 13 additions & 0 deletions Server/mods/deathmatch/logic/CVehicle.cpp
Original file line number Diff line number Diff line change
@@ -1013,3 +1013,16 @@ 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;
}
6 changes: 6 additions & 0 deletions Server/mods/deathmatch/logic/CVehicle.h
Original file line number Diff line number Diff line change
@@ -400,6 +400,11 @@ 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;
bool IsNitroInstalled() const noexcept;

void StopIdleTimer();
void RestartIdleTimer();
bool IsIdleTimerRunning();
@@ -495,6 +500,7 @@ class CVehicle final : public CElement
unsigned char m_ucVariant2;

bool m_onFire;
float m_nitroLevel {0.0f};

CTickCount m_LastPushedTime;
CVector m_vecStationaryCheckPosition;
23 changes: 22 additions & 1 deletion Server/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.cpp
Original file line number Diff line number Diff line change
@@ -128,6 +128,8 @@ void CLuaVehicleDefs::LoadFunctions()
{"getVehicleSirenParams", GetVehicleSirenParams},
{"setVehiclePlateText", SetVehiclePlateText},
{"setVehicleNitroActivated", ArgumentParser<SetVehicleNitroActivated>},
{"isVehicleNitroActivated", ArgumentParser<IsVehicleNitroActivated>},
{"getVehicleNitroLevel", ArgumentParser<GetVehicleNitroLevel>},
};

// Add functions
@@ -3059,4 +3061,23 @@ bool CLuaVehicleDefs::SetVehicleNitroActivated(CVehicle* vehicle, bool state) no

m_pPlayerManager->BroadcastOnlyJoined(CElementRPCPacket(vehicle, SET_VEHICLE_NITRO_ACTIVATED, *BitStream.pBitStream));
return true;
}
}

bool CLuaVehicleDefs::IsVehicleNitroActivated(CVehicle* vehicle) noexcept
{
return vehicle->IsNitroActivated();
}

std::variant<float, bool> CLuaVehicleDefs::GetVehicleNitroLevel(CVehicle* vehicle) noexcept
{

if (!vehicle->IsNitroInstalled())
return false;

float level = vehicle->GetNitroLevel();

if (level < 0)
level = 1 + level;

return level;
}
2 changes: 2 additions & 0 deletions Server/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.h
Original file line number Diff line number Diff line change
@@ -128,4 +128,6 @@ class CLuaVehicleDefs : public CLuaDefs

static bool SpawnVehicleFlyingComponent(CVehicle* const vehicle, std::uint8_t nodeIndex, std::optional<std::uint8_t> componentCollisionType, std::optional<std::uint32_t> removalTime);
static bool SetVehicleNitroActivated(CVehicle* vehicle, bool state) noexcept;
static bool IsVehicleNitroActivated(CVehicle* vehicle) noexcept;
static std::variant<float, bool> GetVehicleNitroLevel(CVehicle* vehicle) noexcept;
};
14 changes: 14 additions & 0 deletions Server/mods/deathmatch/logic/net/CSimVehiclePuresyncPacket.cpp
Original file line number Diff line number Diff line change
@@ -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;
}
Original file line number Diff line number Diff line change
@@ -75,6 +75,7 @@ class CSimVehiclePuresyncPacket : public CSimPacket
CVector VehTurnSpeed;

float fVehHealth;
float vehNitroLevel {0.0f};

std::vector<STrailerInfo> TrailerList;

12 changes: 12 additions & 0 deletions Server/mods/deathmatch/logic/packets/CVehiclePuresyncPacket.cpp
Original file line number Diff line number Diff line change
@@ -454,6 +454,15 @@ 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 +691,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;
}
4 changes: 4 additions & 0 deletions Shared/sdk/net/bitstream.h
Original file line number Diff line number Diff line change
@@ -608,6 +608,10 @@ enum class eBitStreamVersion : unsigned short
// 2025-01-10
WorldSpecialProperty_FlyingComponents,

// Add isVehicleNitroActivated and getVehicleNitroLevel Server side
// 2025-01-16
IsVehicleNitroActivated_Serverside,

// Ped's camera synchronization
// 2025-01-29
PedSync_CameraRotation,
Loading