diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.cpp b/Client/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.cpp index 94945f0fbc..de4a5e7abf 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.cpp +++ b/Client/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.cpp @@ -49,6 +49,7 @@ void CLuaVehicleDefs::LoadFunctions() {"getVehiclePaintjob", GetVehiclePaintjob}, {"getVehiclePlateText", GetVehiclePlateText}, {"getVehicleWheelStates", GetVehicleWheelStates}, + {"getVehicleWheelState", ArgumentParser}, {"isVehicleWheelOnGround", IsVehicleWheelCollided}, {"isVehicleDamageProof", IsVehicleDamageProof}, {"isVehicleFuelTankExplodable", IsVehicleFuelTankExplodable}, @@ -223,6 +224,7 @@ void CLuaVehicleDefs::AddClass(lua_State* luaVM) lua_classfunction(luaVM, "getPaintjob", "getVehiclePaintjob"); lua_classfunction(luaVM, "getTurretPosition", "getVehicleTurretPosition"); lua_classfunction(luaVM, "getWheelStates", "getVehicleWheelStates"); + lua_classfunction(luaVM, "getWheelState", "getVehicleWheelState"); lua_classfunction(luaVM, "isWheelOnGround", "isVehicleWheelOnGround"); lua_classfunction(luaVM, "getDoorOpenRatio", "getVehicleDoorOpenRatio"); lua_classfunction(luaVM, "getVariant", "getVehicleVariant"); @@ -980,6 +982,17 @@ int CLuaVehicleDefs::GetVehicleWheelStates(lua_State* luaVM) return 1; } +std::variant CLuaVehicleDefs::GetVehicleWheelState(CClientVehicle* vehicle, std::uint8_t wheelIndex) +{ + if (!vehicle) + return false; + + if (wheelIndex >= MAX_WHEELS) + return false; + + return vehicle->GetWheelStatus(static_cast(wheelIndex)); +} + int CLuaVehicleDefs::IsVehicleWheelCollided(lua_State* luaVM) { CClientVehicle* pVehicle = nullptr; diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.h b/Client/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.h index d213961918..9ec3533d47 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.h +++ b/Client/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.h @@ -43,6 +43,7 @@ class CLuaVehicleDefs : public CLuaDefs LUA_DECLARE(GetVehicleUpgradeSlotName); LUA_DECLARE(GetVehicleCompatibleUpgrades); LUA_DECLARE(GetVehicleWheelStates); + static std::variant GetVehicleWheelState(CClientVehicle* vehicle, std::uint8_t wheelIndex); LUA_DECLARE(IsVehicleWheelCollided); LUA_DECLARE(GetVehicleDoorState); LUA_DECLARE(GetVehicleLightState); diff --git a/Server/mods/deathmatch/logic/CResourceChecker.Data.h b/Server/mods/deathmatch/logic/CResourceChecker.Data.h index 51d8c22258..8d7de9c9fc 100644 --- a/Server/mods/deathmatch/logic/CResourceChecker.Data.h +++ b/Server/mods/deathmatch/logic/CResourceChecker.Data.h @@ -91,6 +91,7 @@ namespace {false, "getVehicleID", "getElementModel"}, {false, "getVehicleRotation", "getElementRotation"}, {false, "getVehicleNameFromID", "getVehicleNameFromModel"}, + {false, "getVehicleWheelStates", "getVehicleWheelState"}, {false, "setVehicleRotation", "setElementRotation"}, {false, "attachElementToElement", "attachElements"}, {false, "detachElementFromElement", "detachElements"}, @@ -155,6 +156,7 @@ namespace {false, "getVehicleID", "getElementModel"}, {false, "getVehicleIDFromName", "getVehicleModelFromName"}, {false, "getVehicleNameFromID", "getVehicleNameFromModel"}, + {false, "getVehicleWheelStates", "getVehicleWheelState"}, {false, "getPlayerWeaponSlot", "getPedWeaponSlot"}, {false, "getPlayerWeapon", "getPedWeapon"}, {false, "getPlayerTotalAmmo", "getPedTotalAmmo"}, diff --git a/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp b/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp index cb1971e31b..5680cf0561 100644 --- a/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp +++ b/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp @@ -5286,6 +5286,17 @@ bool CStaticFunctionDefinitions::GetVehicleWheelStates(CVehicle* pVehicle, unsig return true; } +bool CStaticFunctionDefinitions::GetVehicleWheelState(CVehicle* vehicle, std::uint8_t wheelIndex, std::uint8_t& wheelState) +{ + assert(vehicle); + + if (wheelIndex >= MAX_WHEELS) + return false; + + wheelState = vehicle->m_ucWheelStates[static_cast(wheelIndex)]; + return true; +} + bool CStaticFunctionDefinitions::GetVehicleLightState(CVehicle* pVehicle, unsigned char ucLight, unsigned char& ucState) { assert(pVehicle); diff --git a/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.h b/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.h index b024b1136a..032daba271 100644 --- a/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.h +++ b/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.h @@ -264,6 +264,7 @@ class CStaticFunctionDefinitions static bool GetVehicleDoorState(CVehicle* pVehicle, unsigned char ucDoor, unsigned char& ucState); static bool GetVehicleWheelStates(CVehicle* pVehicle, unsigned char& ucFrontLeft, unsigned char& ucRearLeft, unsigned char& ucFrontRight, unsigned char& ucRearRight); + static bool GetVehicleWheelState(CVehicle* vehicle, std::uint8_t wheelIndex, std::uint8_t& wheelState); static bool GetVehicleLightState(CVehicle* pVehicle, unsigned char ucLight, unsigned char& ucState); static bool GetVehiclePanelState(CVehicle* pVehicle, unsigned char ucPanel, unsigned char& ucState); static bool GetVehicleOverrideLights(CVehicle* pVehicle, unsigned char& ucLights); diff --git a/Server/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.cpp b/Server/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.cpp index 13d72615fc..0707c6fb29 100644 --- a/Server/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.cpp +++ b/Server/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.cpp @@ -48,6 +48,7 @@ void CLuaVehicleDefs::LoadFunctions() {"getVehicleCompatibleUpgrades", GetVehicleCompatibleUpgrades}, {"getVehicleDoorState", GetVehicleDoorState}, {"getVehicleWheelStates", GetVehicleWheelStates}, + {"getVehicleWheelState", ArgumentParser}, {"getVehicleLightState", GetVehicleLightState}, {"getVehiclePanelState", GetVehiclePanelState}, {"getVehicleOverrideLights", GetVehicleOverrideLights}, @@ -202,6 +203,7 @@ void CLuaVehicleDefs::AddClass(lua_State* luaVM) lua_classfunction(luaVM, "getUpgradeOnSlot", "getVehicleUpgradeOnSlot"); lua_classfunction(luaVM, "getUpgrades", "getVehicleUpgrades"); lua_classfunction(luaVM, "getWheelStates", "getVehicleWheelStates"); + lua_classfunction(luaVM, "getWheelState", "getVehicleWheelState"); lua_classfunction(luaVM, "getDoorOpenRatio", "getVehicleDoorOpenRatio"); lua_classfunction(luaVM, "getHandling", "getVehicleHandling"); lua_classfunction(luaVM, "getRespawnPosition", "getVehicleRespawnPosition"); @@ -1320,6 +1322,16 @@ int CLuaVehicleDefs::GetVehicleWheelStates(lua_State* luaVM) return 1; } +std::variant CLuaVehicleDefs::GetVehicleWheelState(CVehicle* vehicle, std::uint8_t wheelIndex) +{ + std::uint8_t wheelState; + if (CStaticFunctionDefinitions::GetVehicleWheelState(vehicle, wheelIndex, wheelState)) + { + return wheelState; + } + return false; +} + int CLuaVehicleDefs::GetVehicleLightState(lua_State* luaVM) { CVehicle* pVehicle; @@ -3059,4 +3071,4 @@ 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 +} diff --git a/Server/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.h b/Server/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.h index 38652371c0..8f87c7a6ba 100644 --- a/Server/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.h +++ b/Server/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.h @@ -46,6 +46,7 @@ class CLuaVehicleDefs : public CLuaDefs LUA_DECLARE(GetVehicleCompatibleUpgrades); LUA_DECLARE(GetVehicleDoorState); LUA_DECLARE(GetVehicleWheelStates); + static std::variant GetVehicleWheelState(CVehicle* vehicle, std::uint8_t wheelIndex); LUA_DECLARE(GetVehicleLightState); LUA_DECLARE(GetVehiclePanelState); LUA_DECLARE(GetVehicleOverrideLights);