From e1e50e291d526264050d93b6587232df92504360 Mon Sep 17 00:00:00 2001 From: Xenius97 Date: Fri, 28 Nov 2025 16:53:48 +0100 Subject: [PATCH 1/9] Add new shared getElementsSyncedByPlayer --- .../logic/CStaticFunctionDefinitions.cpp | 30 ++++++++++++++++ .../logic/CStaticFunctionDefinitions.h | 1 + .../logic/luadefs/CLuaElementDefs.cpp | 6 ++++ .../logic/luadefs/CLuaElementDefs.h | 1 + .../logic/CStaticFunctionDefinitions.cpp | 34 +++++++++++++++++++ .../logic/CStaticFunctionDefinitions.h | 1 + .../logic/luadefs/CLuaElementDefs.cpp | 6 ++++ .../logic/luadefs/CLuaElementDefs.h | 1 + .../logic/luadefs/CLuaPlayerDefs.cpp | 1 + 9 files changed, 81 insertions(+) diff --git a/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp b/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp index 3844bb73016..163dfd2f84d 100644 --- a/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp +++ b/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp @@ -874,6 +874,36 @@ bool CStaticFunctionDefinitions::IsElementSyncer(CClientEntity& Entity, bool& bI return true; } +std::vector CStaticFunctionDefinitions::GetElementsSyncedByPlayer() +{ + std::vector elements; + + // Check all peds + CPedSync* pPedSync = m_pClientGame->GetPedSync(); + for (auto iter = pPedSync->IterBegin(); iter != pPedSync->IterEnd(); ++iter) + { + elements.push_back(*iter); + } + + // Check all vehicles + CUnoccupiedVehicleSync* pVehicleSync = m_pClientGame->GetUnoccupiedVehicleSync(); + for (auto iter = pVehicleSync->IterBegin(); iter != pVehicleSync->IterEnd(); ++iter) + { + elements.push_back(*iter); + } + +#ifdef WITH_OBJECT_SYNC + // Check all objects + CObjectSync* pObjectSync = m_pClientGame->GetObjectSync(); + for (auto iter = pObjectSync->IterBegin(); iter != pObjectSync->IterEnd(); ++iter) + { + elements.push_back(*iter); + } +#endif + + return elements; +} + bool CStaticFunctionDefinitions::IsElementCollidableWith(CClientEntity& Entity, CClientEntity& ThisEntity, bool& bCanCollide) { switch (Entity.GetType()) diff --git a/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.h b/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.h index 766a09a9ffc..1d879e5d440 100644 --- a/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.h +++ b/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.h @@ -76,6 +76,7 @@ class CStaticFunctionDefinitions static bool GetElementModel(CClientEntity& Entity, unsigned short& usModel); static bool IsElementInWater(CClientEntity& Entity, bool& bInWater); static bool IsElementSyncer(CClientEntity& Entity, bool& bIsSyncer); + static std::vector GetElementsSyncedByPlayer(); static bool IsElementCollidableWith(CClientEntity& Entity, CClientEntity& ThisEntity, bool& bCanCollide); static bool GetElementCollisionsEnabled(CClientEntity& Entity); static bool IsElementFrozen(CClientEntity& Entity, bool& bFrozen); diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaElementDefs.cpp b/Client/mods/deathmatch/logic/luadefs/CLuaElementDefs.cpp index c763e1d3f4a..7b3a541d53a 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaElementDefs.cpp +++ b/Client/mods/deathmatch/logic/luadefs/CLuaElementDefs.cpp @@ -61,6 +61,7 @@ void CLuaElementDefs::LoadFunctions() {"getElementColShape", GetElementColShape}, {"isElementInWater", IsElementInWater}, {"isElementSyncer", IsElementSyncer}, + {"getElementsSyncedByPlayer", ArgumentParser}, {"isElementCollidableWith", IsElementCollidableWith}, {"isElementDoubleSided", IsElementDoubleSided}, {"getElementCollisionsEnabled", GetElementCollisionsEnabled}, @@ -1478,6 +1479,11 @@ int CLuaElementDefs::IsElementSyncer(lua_State* luaVM) return 1; } +std::vector CLuaElementDefs::GetElementsSyncedByPlayer() +{ + return CStaticFunctionDefinitions::GetElementsSyncedByPlayer(); +} + int CLuaElementDefs::IsElementCollidableWith(lua_State* luaVM) { // Verify the arguments diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaElementDefs.h b/Client/mods/deathmatch/logic/luadefs/CLuaElementDefs.h index 3d82ddcb145..20a891baa94 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaElementDefs.h +++ b/Client/mods/deathmatch/logic/luadefs/CLuaElementDefs.h @@ -63,6 +63,7 @@ class CLuaElementDefs : public CLuaDefs LUA_DECLARE(GetElementColShape); LUA_DECLARE(IsElementInWater); LUA_DECLARE(IsElementSyncer); + static std::vector GetElementsSyncedByPlayer(); LUA_DECLARE(IsElementCollidableWith); LUA_DECLARE(IsElementDoubleSided); LUA_DECLARE(GetElementCollisionsEnabled); diff --git a/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp b/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp index db003573e1e..421a5ea24a6 100644 --- a/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp +++ b/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp @@ -757,6 +757,40 @@ CElement* CStaticFunctionDefinitions::GetElementSyncer(CElement* pElement) return NULL; } +std::vector CStaticFunctionDefinitions::GetElementsSyncedByPlayer(CPlayer* pPlayer) +{ + assert(pPlayer); + + std::vector elements; + + // Check all vehicles + for (CVehicle* pVehicle : m_pVehicleManager->GetVehicles()) + { + if (pVehicle->GetSyncer() == pPlayer) + elements.push_back(pVehicle); + } + + // Check all peds + for (auto iter = m_pPedManager->IterBegin(); iter != m_pPedManager->IterEnd(); ++iter) + { + CPed* pPed = *iter; + if (pPed->GetSyncer() == pPlayer) + elements.push_back(pPed); + } + +#ifdef WITH_OBJECT_SYNC + // Check all objects + for (auto iter = m_pObjectManager->IterBegin(); iter != m_pObjectManager->IterEnd(); ++iter) + { + CObject* pObject = *iter; + if (pObject->GetSyncer() == pPlayer) + elements.push_back(pObject); + } +#endif + + return elements; +} + bool CStaticFunctionDefinitions::GetElementCollisionsEnabled(CElement* pElement) { assert(pElement); diff --git a/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.h b/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.h index 388f38b4439..02a44902b3c 100644 --- a/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.h +++ b/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.h @@ -74,6 +74,7 @@ class CStaticFunctionDefinitions static bool IsElementInWater(CElement* pElement, bool& bInWater); static bool GetElementAttachedOffsets(CElement* pElement, CVector& vecPosition, CVector& vecRotation); static CElement* GetElementSyncer(CElement* pElement); + static std::vector GetElementsSyncedByPlayer(CPlayer* pPlayer); static bool GetElementCollisionsEnabled(CElement* pElement); static bool IsElementFrozen(CElement* pElement, bool& bFrozen); static bool GetLowLodElement(CElement* pElement, CElement*& pOutLowLodElement); diff --git a/Server/mods/deathmatch/logic/luadefs/CLuaElementDefs.cpp b/Server/mods/deathmatch/logic/luadefs/CLuaElementDefs.cpp index 7d339104fb3..5179c6f613f 100644 --- a/Server/mods/deathmatch/logic/luadefs/CLuaElementDefs.cpp +++ b/Server/mods/deathmatch/logic/luadefs/CLuaElementDefs.cpp @@ -59,6 +59,7 @@ void CLuaElementDefs::LoadFunctions() {"getElementHealth", getElementHealth}, {"getElementModel", getElementModel}, {"getElementSyncer", getElementSyncer}, + {"getElementsSyncedByPlayer", ArgumentParser}, {"getElementCollisionsEnabled", getElementCollisionsEnabled}, {"getLowLODElement", getLowLODElement}, {"isElementOnFire", ArgumentParser}, @@ -1383,6 +1384,11 @@ int CLuaElementDefs::getElementSyncer(lua_State* luaVM) return 1; } +std::vector CLuaElementDefs::GetElementsSyncedByPlayer(CPlayer* player) +{ + return CStaticFunctionDefinitions::GetElementsSyncedByPlayer(player); +} + int CLuaElementDefs::getElementCollisionsEnabled(lua_State* luaVM) { // bool getElementCollisionsEnabled ( element theElement ) diff --git a/Server/mods/deathmatch/logic/luadefs/CLuaElementDefs.h b/Server/mods/deathmatch/logic/luadefs/CLuaElementDefs.h index 89745b5a3fb..4ccc14bacfd 100644 --- a/Server/mods/deathmatch/logic/luadefs/CLuaElementDefs.h +++ b/Server/mods/deathmatch/logic/luadefs/CLuaElementDefs.h @@ -57,6 +57,7 @@ class CLuaElementDefs : public CLuaDefs LUA_DECLARE(getElementModel); LUA_DECLARE(isElementInWater); LUA_DECLARE(getElementSyncer); + static std::vector GetElementsSyncedByPlayer(CPlayer* player); LUA_DECLARE(getElementCollisionsEnabled); LUA_DECLARE(isElementFrozen); LUA_DECLARE(getLowLODElement); diff --git a/Server/mods/deathmatch/logic/luadefs/CLuaPlayerDefs.cpp b/Server/mods/deathmatch/logic/luadefs/CLuaPlayerDefs.cpp index 41ea5464808..8662de77eba 100644 --- a/Server/mods/deathmatch/logic/luadefs/CLuaPlayerDefs.cpp +++ b/Server/mods/deathmatch/logic/luadefs/CLuaPlayerDefs.cpp @@ -180,6 +180,7 @@ void CLuaPlayerDefs::AddClass(lua_State* luaVM) lua_classfunction(luaVM, "getCameraMatrix", "getCameraMatrix"); lua_classfunction(luaVM, "getCameraTarget", "getCameraTarget"); lua_classfunction(luaVM, "getScriptDebugLevel", "getPlayerScriptDebugLevel"); + lua_classfunction(luaVM, "getElementsSyncedBy", "getElementsSyncedByPlayer"); lua_classvariable(luaVM, "account", NULL, "getPlayerAccount"); lua_classvariable(luaVM, "cameraInterior", "setCameraInterior", "getCameraInterior"); From eaee1f383a342e18244ca8552765c1d4f3c13560 Mon Sep 17 00:00:00 2001 From: Xenius97 Date: Fri, 28 Nov 2025 16:58:13 +0100 Subject: [PATCH 2/9] Add isElementSyncer to serverside --- .../logic/CStaticFunctionDefinitions.cpp | 26 +++++++++++++++++++ .../logic/CStaticFunctionDefinitions.h | 1 + .../logic/luadefs/CLuaElementDefs.cpp | 6 +++++ .../logic/luadefs/CLuaElementDefs.h | 1 + 4 files changed, 34 insertions(+) diff --git a/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp b/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp index 421a5ea24a6..7f8042903f4 100644 --- a/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp +++ b/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp @@ -757,6 +757,32 @@ CElement* CStaticFunctionDefinitions::GetElementSyncer(CElement* pElement) return NULL; } +bool CStaticFunctionDefinitions::IsElementSyncer(CElement* pElement, CPlayer* pPlayer) +{ + switch (pElement->GetType()) + { + case CElement::PED: + { + CPed* pPed = static_cast(pElement); + return pPed->IsSyncable() && pPed->GetSyncer() == pPlayer; + } + case CElement::VEHICLE: + { + CVehicle* pVehicle = static_cast(pElement); + return pVehicle->IsUnoccupiedSyncable() && pVehicle->GetSyncer() == pPlayer; + } +#ifdef WITH_OBJECT_SYNC + case CElement::OBJECT: + { + CObject* pObject = static_cast(pElement); + return pObject->IsSyncable() && pObject->GetSyncer() == pPlayer; + } +#endif + default: + return false; + } +} + std::vector CStaticFunctionDefinitions::GetElementsSyncedByPlayer(CPlayer* pPlayer) { assert(pPlayer); diff --git a/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.h b/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.h index 02a44902b3c..4a5cc44b151 100644 --- a/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.h +++ b/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.h @@ -74,6 +74,7 @@ class CStaticFunctionDefinitions static bool IsElementInWater(CElement* pElement, bool& bInWater); static bool GetElementAttachedOffsets(CElement* pElement, CVector& vecPosition, CVector& vecRotation); static CElement* GetElementSyncer(CElement* pElement); + static bool IsElementSyncer(CElement* pElement, CPlayer* pPlayer); static std::vector GetElementsSyncedByPlayer(CPlayer* pPlayer); static bool GetElementCollisionsEnabled(CElement* pElement); static bool IsElementFrozen(CElement* pElement, bool& bFrozen); diff --git a/Server/mods/deathmatch/logic/luadefs/CLuaElementDefs.cpp b/Server/mods/deathmatch/logic/luadefs/CLuaElementDefs.cpp index 5179c6f613f..b281a3ece4d 100644 --- a/Server/mods/deathmatch/logic/luadefs/CLuaElementDefs.cpp +++ b/Server/mods/deathmatch/logic/luadefs/CLuaElementDefs.cpp @@ -59,6 +59,7 @@ void CLuaElementDefs::LoadFunctions() {"getElementHealth", getElementHealth}, {"getElementModel", getElementModel}, {"getElementSyncer", getElementSyncer}, + {"isElementSyncer", ArgumentParser}, {"getElementsSyncedByPlayer", ArgumentParser}, {"getElementCollisionsEnabled", getElementCollisionsEnabled}, {"getLowLODElement", getLowLODElement}, @@ -1384,6 +1385,11 @@ int CLuaElementDefs::getElementSyncer(lua_State* luaVM) return 1; } +bool CLuaElementDefs::isElementSyncer(CElement* element, CPlayer* player) +{ + return CStaticFunctionDefinitions::IsElementSyncer(element, player); +} + std::vector CLuaElementDefs::GetElementsSyncedByPlayer(CPlayer* player) { return CStaticFunctionDefinitions::GetElementsSyncedByPlayer(player); diff --git a/Server/mods/deathmatch/logic/luadefs/CLuaElementDefs.h b/Server/mods/deathmatch/logic/luadefs/CLuaElementDefs.h index 4ccc14bacfd..24116f2ac3b 100644 --- a/Server/mods/deathmatch/logic/luadefs/CLuaElementDefs.h +++ b/Server/mods/deathmatch/logic/luadefs/CLuaElementDefs.h @@ -57,6 +57,7 @@ class CLuaElementDefs : public CLuaDefs LUA_DECLARE(getElementModel); LUA_DECLARE(isElementInWater); LUA_DECLARE(getElementSyncer); + static bool isElementSyncer(CElement* element, CPlayer* player); static std::vector GetElementsSyncedByPlayer(CPlayer* player); LUA_DECLARE(getElementCollisionsEnabled); LUA_DECLARE(isElementFrozen); From 683958ddbcd52a2cfd61d08de30661729ef2aa88 Mon Sep 17 00:00:00 2001 From: Xenius97 Date: Fri, 28 Nov 2025 17:11:28 +0100 Subject: [PATCH 3/9] add filtering --- .../logic/CStaticFunctionDefinitions.cpp | 29 ++++++++++------ .../logic/CStaticFunctionDefinitions.h | 2 +- .../logic/luadefs/CLuaElementDefs.cpp | 4 +-- .../logic/luadefs/CLuaElementDefs.h | 2 +- .../logic/CStaticFunctionDefinitions.cpp | 33 ++++++++++++------- .../logic/CStaticFunctionDefinitions.h | 2 +- .../logic/luadefs/CLuaElementDefs.cpp | 4 +-- .../logic/luadefs/CLuaElementDefs.h | 2 +- 8 files changed, 48 insertions(+), 30 deletions(-) diff --git a/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp b/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp index 163dfd2f84d..cb7d27e1d50 100644 --- a/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp +++ b/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp @@ -874,30 +874,39 @@ bool CStaticFunctionDefinitions::IsElementSyncer(CClientEntity& Entity, bool& bI return true; } -std::vector CStaticFunctionDefinitions::GetElementsSyncedByPlayer() +std::vector CStaticFunctionDefinitions::GetElementsSyncedByPlayer(std::optional strType) { std::vector elements; // Check all peds - CPedSync* pPedSync = m_pClientGame->GetPedSync(); - for (auto iter = pPedSync->IterBegin(); iter != pPedSync->IterEnd(); ++iter) + if (!strType.has_value() || strType.value() == "ped") { - elements.push_back(*iter); + CPedSync* pPedSync = m_pClientGame->GetPedSync(); + for (auto iter = pPedSync->IterBegin(); iter != pPedSync->IterEnd(); ++iter) + { + elements.push_back(*iter); + } } // Check all vehicles - CUnoccupiedVehicleSync* pVehicleSync = m_pClientGame->GetUnoccupiedVehicleSync(); - for (auto iter = pVehicleSync->IterBegin(); iter != pVehicleSync->IterEnd(); ++iter) + if (!strType.has_value() || strType.value() == "vehicle") { - elements.push_back(*iter); + CUnoccupiedVehicleSync* pVehicleSync = m_pClientGame->GetUnoccupiedVehicleSync(); + for (auto iter = pVehicleSync->IterBegin(); iter != pVehicleSync->IterEnd(); ++iter) + { + elements.push_back(*iter); + } } #ifdef WITH_OBJECT_SYNC // Check all objects - CObjectSync* pObjectSync = m_pClientGame->GetObjectSync(); - for (auto iter = pObjectSync->IterBegin(); iter != pObjectSync->IterEnd(); ++iter) + if (!strType.has_value() || strType.value() == "object") { - elements.push_back(*iter); + CObjectSync* pObjectSync = m_pClientGame->GetObjectSync(); + for (auto iter = pObjectSync->IterBegin(); iter != pObjectSync->IterEnd(); ++iter) + { + elements.push_back(*iter); + } } #endif diff --git a/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.h b/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.h index 1d879e5d440..b1c4945bbf2 100644 --- a/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.h +++ b/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.h @@ -76,7 +76,7 @@ class CStaticFunctionDefinitions static bool GetElementModel(CClientEntity& Entity, unsigned short& usModel); static bool IsElementInWater(CClientEntity& Entity, bool& bInWater); static bool IsElementSyncer(CClientEntity& Entity, bool& bIsSyncer); - static std::vector GetElementsSyncedByPlayer(); + static std::vector GetElementsSyncedByPlayer(std::optional strType); static bool IsElementCollidableWith(CClientEntity& Entity, CClientEntity& ThisEntity, bool& bCanCollide); static bool GetElementCollisionsEnabled(CClientEntity& Entity); static bool IsElementFrozen(CClientEntity& Entity, bool& bFrozen); diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaElementDefs.cpp b/Client/mods/deathmatch/logic/luadefs/CLuaElementDefs.cpp index 7b3a541d53a..5fee161f0f4 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaElementDefs.cpp +++ b/Client/mods/deathmatch/logic/luadefs/CLuaElementDefs.cpp @@ -1479,9 +1479,9 @@ int CLuaElementDefs::IsElementSyncer(lua_State* luaVM) return 1; } -std::vector CLuaElementDefs::GetElementsSyncedByPlayer() +std::vector CLuaElementDefs::GetElementsSyncedByPlayer(std::optional elementType) { - return CStaticFunctionDefinitions::GetElementsSyncedByPlayer(); + return CStaticFunctionDefinitions::GetElementsSyncedByPlayer(elementType); } int CLuaElementDefs::IsElementCollidableWith(lua_State* luaVM) diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaElementDefs.h b/Client/mods/deathmatch/logic/luadefs/CLuaElementDefs.h index 20a891baa94..7dd0402a640 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaElementDefs.h +++ b/Client/mods/deathmatch/logic/luadefs/CLuaElementDefs.h @@ -63,7 +63,7 @@ class CLuaElementDefs : public CLuaDefs LUA_DECLARE(GetElementColShape); LUA_DECLARE(IsElementInWater); LUA_DECLARE(IsElementSyncer); - static std::vector GetElementsSyncedByPlayer(); + static std::vector GetElementsSyncedByPlayer(std::optional elementType); LUA_DECLARE(IsElementCollidableWith); LUA_DECLARE(IsElementDoubleSided); LUA_DECLARE(GetElementCollisionsEnabled); diff --git a/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp b/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp index 7f8042903f4..dca4ffa675b 100644 --- a/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp +++ b/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp @@ -783,34 +783,43 @@ bool CStaticFunctionDefinitions::IsElementSyncer(CElement* pElement, CPlayer* pP } } -std::vector CStaticFunctionDefinitions::GetElementsSyncedByPlayer(CPlayer* pPlayer) +std::vector CStaticFunctionDefinitions::GetElementsSyncedByPlayer(CPlayer* pPlayer, std::optional strType) { assert(pPlayer); std::vector elements; // Check all vehicles - for (CVehicle* pVehicle : m_pVehicleManager->GetVehicles()) + if (!strType.has_value() || strType.value() == "vehicle") { - if (pVehicle->GetSyncer() == pPlayer) - elements.push_back(pVehicle); + for (CVehicle* pVehicle : m_pVehicleManager->GetVehicles()) + { + if (pVehicle->GetSyncer() == pPlayer) + elements.push_back(pVehicle); + } } // Check all peds - for (auto iter = m_pPedManager->IterBegin(); iter != m_pPedManager->IterEnd(); ++iter) + if (!strType.has_value() || strType.value() == "ped") { - CPed* pPed = *iter; - if (pPed->GetSyncer() == pPlayer) - elements.push_back(pPed); + for (auto iter = m_pPedManager->IterBegin(); iter != m_pPedManager->IterEnd(); ++iter) + { + CPed* pPed = *iter; + if (pPed->GetSyncer() == pPlayer) + elements.push_back(pPed); + } } #ifdef WITH_OBJECT_SYNC // Check all objects - for (auto iter = m_pObjectManager->IterBegin(); iter != m_pObjectManager->IterEnd(); ++iter) + if (!strType.has_value() || strType.value() == "object") { - CObject* pObject = *iter; - if (pObject->GetSyncer() == pPlayer) - elements.push_back(pObject); + for (auto iter = m_pObjectManager->IterBegin(); iter != m_pObjectManager->IterEnd(); ++iter) + { + CObject* pObject = *iter; + if (pObject->GetSyncer() == pPlayer) + elements.push_back(pObject); + } } #endif diff --git a/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.h b/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.h index 4a5cc44b151..b807c9fb017 100644 --- a/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.h +++ b/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.h @@ -75,7 +75,7 @@ class CStaticFunctionDefinitions static bool GetElementAttachedOffsets(CElement* pElement, CVector& vecPosition, CVector& vecRotation); static CElement* GetElementSyncer(CElement* pElement); static bool IsElementSyncer(CElement* pElement, CPlayer* pPlayer); - static std::vector GetElementsSyncedByPlayer(CPlayer* pPlayer); + static std::vector GetElementsSyncedByPlayer(CPlayer* pPlayer, std::optional strType); static bool GetElementCollisionsEnabled(CElement* pElement); static bool IsElementFrozen(CElement* pElement, bool& bFrozen); static bool GetLowLodElement(CElement* pElement, CElement*& pOutLowLodElement); diff --git a/Server/mods/deathmatch/logic/luadefs/CLuaElementDefs.cpp b/Server/mods/deathmatch/logic/luadefs/CLuaElementDefs.cpp index b281a3ece4d..4d80f5e7b0c 100644 --- a/Server/mods/deathmatch/logic/luadefs/CLuaElementDefs.cpp +++ b/Server/mods/deathmatch/logic/luadefs/CLuaElementDefs.cpp @@ -1390,9 +1390,9 @@ bool CLuaElementDefs::isElementSyncer(CElement* element, CPlayer* player) return CStaticFunctionDefinitions::IsElementSyncer(element, player); } -std::vector CLuaElementDefs::GetElementsSyncedByPlayer(CPlayer* player) +std::vector CLuaElementDefs::GetElementsSyncedByPlayer(CPlayer* player, std::optional elementType) { - return CStaticFunctionDefinitions::GetElementsSyncedByPlayer(player); + return CStaticFunctionDefinitions::GetElementsSyncedByPlayer(player, elementType); } int CLuaElementDefs::getElementCollisionsEnabled(lua_State* luaVM) diff --git a/Server/mods/deathmatch/logic/luadefs/CLuaElementDefs.h b/Server/mods/deathmatch/logic/luadefs/CLuaElementDefs.h index 24116f2ac3b..f1a042b4e7e 100644 --- a/Server/mods/deathmatch/logic/luadefs/CLuaElementDefs.h +++ b/Server/mods/deathmatch/logic/luadefs/CLuaElementDefs.h @@ -58,7 +58,7 @@ class CLuaElementDefs : public CLuaDefs LUA_DECLARE(isElementInWater); LUA_DECLARE(getElementSyncer); static bool isElementSyncer(CElement* element, CPlayer* player); - static std::vector GetElementsSyncedByPlayer(CPlayer* player); + static std::vector GetElementsSyncedByPlayer(CPlayer* player, std::optional elementType); LUA_DECLARE(getElementCollisionsEnabled); LUA_DECLARE(isElementFrozen); LUA_DECLARE(getLowLODElement); From 5088800be2f2b61658d16270a36fc995b315dc06 Mon Sep 17 00:00:00 2001 From: Xenius97 Date: Wed, 7 Jan 2026 07:59:37 +0100 Subject: [PATCH 4/9] remove isElementSyncer from server --- Server/mods/deathmatch/logic/luadefs/CLuaElementDefs.cpp | 6 ------ Server/mods/deathmatch/logic/luadefs/CLuaElementDefs.h | 1 - 2 files changed, 7 deletions(-) diff --git a/Server/mods/deathmatch/logic/luadefs/CLuaElementDefs.cpp b/Server/mods/deathmatch/logic/luadefs/CLuaElementDefs.cpp index 4d80f5e7b0c..12256eb3da2 100644 --- a/Server/mods/deathmatch/logic/luadefs/CLuaElementDefs.cpp +++ b/Server/mods/deathmatch/logic/luadefs/CLuaElementDefs.cpp @@ -59,7 +59,6 @@ void CLuaElementDefs::LoadFunctions() {"getElementHealth", getElementHealth}, {"getElementModel", getElementModel}, {"getElementSyncer", getElementSyncer}, - {"isElementSyncer", ArgumentParser}, {"getElementsSyncedByPlayer", ArgumentParser}, {"getElementCollisionsEnabled", getElementCollisionsEnabled}, {"getLowLODElement", getLowLODElement}, @@ -1385,11 +1384,6 @@ int CLuaElementDefs::getElementSyncer(lua_State* luaVM) return 1; } -bool CLuaElementDefs::isElementSyncer(CElement* element, CPlayer* player) -{ - return CStaticFunctionDefinitions::IsElementSyncer(element, player); -} - std::vector CLuaElementDefs::GetElementsSyncedByPlayer(CPlayer* player, std::optional elementType) { return CStaticFunctionDefinitions::GetElementsSyncedByPlayer(player, elementType); diff --git a/Server/mods/deathmatch/logic/luadefs/CLuaElementDefs.h b/Server/mods/deathmatch/logic/luadefs/CLuaElementDefs.h index f1a042b4e7e..2138a4467aa 100644 --- a/Server/mods/deathmatch/logic/luadefs/CLuaElementDefs.h +++ b/Server/mods/deathmatch/logic/luadefs/CLuaElementDefs.h @@ -57,7 +57,6 @@ class CLuaElementDefs : public CLuaDefs LUA_DECLARE(getElementModel); LUA_DECLARE(isElementInWater); LUA_DECLARE(getElementSyncer); - static bool isElementSyncer(CElement* element, CPlayer* player); static std::vector GetElementsSyncedByPlayer(CPlayer* player, std::optional elementType); LUA_DECLARE(getElementCollisionsEnabled); LUA_DECLARE(isElementFrozen); From f57019984e4c7bb7e2f54278596b2e3c0c23ebe4 Mon Sep 17 00:00:00 2001 From: Xenius97 Date: Wed, 7 Jan 2026 08:00:27 +0100 Subject: [PATCH 5/9] fix --- .../logic/CStaticFunctionDefinitions.cpp | 26 ------------------- 1 file changed, 26 deletions(-) diff --git a/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp b/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp index 18d5fbbb948..d7da344a14b 100644 --- a/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp +++ b/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp @@ -757,32 +757,6 @@ CElement* CStaticFunctionDefinitions::GetElementSyncer(CElement* pElement) return NULL; } -bool CStaticFunctionDefinitions::IsElementSyncer(CElement* pElement, CPlayer* pPlayer) -{ - switch (pElement->GetType()) - { - case CElement::PED: - { - CPed* pPed = static_cast(pElement); - return pPed->IsSyncable() && pPed->GetSyncer() == pPlayer; - } - case CElement::VEHICLE: - { - CVehicle* pVehicle = static_cast(pElement); - return pVehicle->IsUnoccupiedSyncable() && pVehicle->GetSyncer() == pPlayer; - } -#ifdef WITH_OBJECT_SYNC - case CElement::OBJECT: - { - CObject* pObject = static_cast(pElement); - return pObject->IsSyncable() && pObject->GetSyncer() == pPlayer; - } -#endif - default: - return false; - } -} - std::vector CStaticFunctionDefinitions::GetElementsSyncedByPlayer(CPlayer* pPlayer, std::optional strType) { assert(pPlayer); From 1af82a111ea0f626aedff817b6b949b73d9bc994 Mon Sep 17 00:00:00 2001 From: Xenius97 Date: Wed, 7 Jan 2026 08:00:31 +0100 Subject: [PATCH 6/9] fix --- Server/mods/deathmatch/logic/CStaticFunctionDefinitions.h | 1 - 1 file changed, 1 deletion(-) diff --git a/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.h b/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.h index b807c9fb017..822f5bc1be5 100644 --- a/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.h +++ b/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.h @@ -74,7 +74,6 @@ class CStaticFunctionDefinitions static bool IsElementInWater(CElement* pElement, bool& bInWater); static bool GetElementAttachedOffsets(CElement* pElement, CVector& vecPosition, CVector& vecRotation); static CElement* GetElementSyncer(CElement* pElement); - static bool IsElementSyncer(CElement* pElement, CPlayer* pPlayer); static std::vector GetElementsSyncedByPlayer(CPlayer* pPlayer, std::optional strType); static bool GetElementCollisionsEnabled(CElement* pElement); static bool IsElementFrozen(CElement* pElement, bool& bFrozen); From 404159e66775913e5d5c3c559f7a99af65710815 Mon Sep 17 00:00:00 2001 From: Xenius97 Date: Wed, 7 Jan 2026 08:05:37 +0100 Subject: [PATCH 7/9] Remove filter from getElementsSyncedByPlayer --- .../logic/CStaticFunctionDefinitions.cpp | 29 ++++++---------- .../logic/CStaticFunctionDefinitions.h | 2 +- .../logic/luadefs/CLuaElementDefs.cpp | 4 +-- .../logic/luadefs/CLuaElementDefs.h | 2 +- .../logic/CStaticFunctionDefinitions.cpp | 33 +++++++------------ .../logic/CStaticFunctionDefinitions.h | 2 +- .../logic/luadefs/CLuaElementDefs.cpp | 4 +-- .../logic/luadefs/CLuaElementDefs.h | 2 +- 8 files changed, 30 insertions(+), 48 deletions(-) diff --git a/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp b/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp index e27d3ba0823..6059e1fb308 100644 --- a/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp +++ b/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp @@ -874,39 +874,30 @@ bool CStaticFunctionDefinitions::IsElementSyncer(CClientEntity& Entity, bool& bI return true; } -std::vector CStaticFunctionDefinitions::GetElementsSyncedByPlayer(std::optional strType) +std::vector CStaticFunctionDefinitions::GetElementsSyncedByPlayer() { std::vector elements; // Check all peds - if (!strType.has_value() || strType.value() == "ped") + CPedSync* pPedSync = m_pClientGame->GetPedSync(); + for (auto iter = pPedSync->IterBegin(); iter != pPedSync->IterEnd(); ++iter) { - CPedSync* pPedSync = m_pClientGame->GetPedSync(); - for (auto iter = pPedSync->IterBegin(); iter != pPedSync->IterEnd(); ++iter) - { - elements.push_back(*iter); - } + elements.push_back(*iter); } // Check all vehicles - if (!strType.has_value() || strType.value() == "vehicle") + CUnoccupiedVehicleSync* pVehicleSync = m_pClientGame->GetUnoccupiedVehicleSync(); + for (auto iter = pVehicleSync->IterBegin(); iter != pVehicleSync->IterEnd(); ++iter) { - CUnoccupiedVehicleSync* pVehicleSync = m_pClientGame->GetUnoccupiedVehicleSync(); - for (auto iter = pVehicleSync->IterBegin(); iter != pVehicleSync->IterEnd(); ++iter) - { - elements.push_back(*iter); - } + elements.push_back(*iter); } #ifdef WITH_OBJECT_SYNC // Check all objects - if (!strType.has_value() || strType.value() == "object") + CObjectSync* pObjectSync = m_pClientGame->GetObjectSync(); + for (auto iter = pObjectSync->IterBegin(); iter != pObjectSync->IterEnd(); ++iter) { - CObjectSync* pObjectSync = m_pClientGame->GetObjectSync(); - for (auto iter = pObjectSync->IterBegin(); iter != pObjectSync->IterEnd(); ++iter) - { - elements.push_back(*iter); - } + elements.push_back(*iter); } #endif diff --git a/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.h b/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.h index b1c4945bbf2..1d879e5d440 100644 --- a/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.h +++ b/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.h @@ -76,7 +76,7 @@ class CStaticFunctionDefinitions static bool GetElementModel(CClientEntity& Entity, unsigned short& usModel); static bool IsElementInWater(CClientEntity& Entity, bool& bInWater); static bool IsElementSyncer(CClientEntity& Entity, bool& bIsSyncer); - static std::vector GetElementsSyncedByPlayer(std::optional strType); + static std::vector GetElementsSyncedByPlayer(); static bool IsElementCollidableWith(CClientEntity& Entity, CClientEntity& ThisEntity, bool& bCanCollide); static bool GetElementCollisionsEnabled(CClientEntity& Entity); static bool IsElementFrozen(CClientEntity& Entity, bool& bFrozen); diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaElementDefs.cpp b/Client/mods/deathmatch/logic/luadefs/CLuaElementDefs.cpp index 5fee161f0f4..7b3a541d53a 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaElementDefs.cpp +++ b/Client/mods/deathmatch/logic/luadefs/CLuaElementDefs.cpp @@ -1479,9 +1479,9 @@ int CLuaElementDefs::IsElementSyncer(lua_State* luaVM) return 1; } -std::vector CLuaElementDefs::GetElementsSyncedByPlayer(std::optional elementType) +std::vector CLuaElementDefs::GetElementsSyncedByPlayer() { - return CStaticFunctionDefinitions::GetElementsSyncedByPlayer(elementType); + return CStaticFunctionDefinitions::GetElementsSyncedByPlayer(); } int CLuaElementDefs::IsElementCollidableWith(lua_State* luaVM) diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaElementDefs.h b/Client/mods/deathmatch/logic/luadefs/CLuaElementDefs.h index 7dd0402a640..20a891baa94 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaElementDefs.h +++ b/Client/mods/deathmatch/logic/luadefs/CLuaElementDefs.h @@ -63,7 +63,7 @@ class CLuaElementDefs : public CLuaDefs LUA_DECLARE(GetElementColShape); LUA_DECLARE(IsElementInWater); LUA_DECLARE(IsElementSyncer); - static std::vector GetElementsSyncedByPlayer(std::optional elementType); + static std::vector GetElementsSyncedByPlayer(); LUA_DECLARE(IsElementCollidableWith); LUA_DECLARE(IsElementDoubleSided); LUA_DECLARE(GetElementCollisionsEnabled); diff --git a/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp b/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp index d7da344a14b..e1b4d0c9e19 100644 --- a/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp +++ b/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp @@ -757,43 +757,34 @@ CElement* CStaticFunctionDefinitions::GetElementSyncer(CElement* pElement) return NULL; } -std::vector CStaticFunctionDefinitions::GetElementsSyncedByPlayer(CPlayer* pPlayer, std::optional strType) +std::vector CStaticFunctionDefinitions::GetElementsSyncedByPlayer(CPlayer* pPlayer) { assert(pPlayer); std::vector elements; // Check all vehicles - if (!strType.has_value() || strType.value() == "vehicle") + for (CVehicle* pVehicle : m_pVehicleManager->GetVehicles()) { - for (CVehicle* pVehicle : m_pVehicleManager->GetVehicles()) - { - if (pVehicle->GetSyncer() == pPlayer) - elements.push_back(pVehicle); - } + if (pVehicle->GetSyncer() == pPlayer) + elements.push_back(pVehicle); } // Check all peds - if (!strType.has_value() || strType.value() == "ped") + for (auto iter = m_pPedManager->IterBegin(); iter != m_pPedManager->IterEnd(); ++iter) { - for (auto iter = m_pPedManager->IterBegin(); iter != m_pPedManager->IterEnd(); ++iter) - { - CPed* pPed = *iter; - if (pPed->GetSyncer() == pPlayer) - elements.push_back(pPed); - } + CPed* pPed = *iter; + if (pPed->GetSyncer() == pPlayer) + elements.push_back(pPed); } #ifdef WITH_OBJECT_SYNC // Check all objects - if (!strType.has_value() || strType.value() == "object") + for (auto iter = m_pObjectManager->IterBegin(); iter != m_pObjectManager->IterEnd(); ++iter) { - for (auto iter = m_pObjectManager->IterBegin(); iter != m_pObjectManager->IterEnd(); ++iter) - { - CObject* pObject = *iter; - if (pObject->GetSyncer() == pPlayer) - elements.push_back(pObject); - } + CObject* pObject = *iter; + if (pObject->GetSyncer() == pPlayer) + elements.push_back(pObject); } #endif diff --git a/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.h b/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.h index 822f5bc1be5..02a44902b3c 100644 --- a/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.h +++ b/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.h @@ -74,7 +74,7 @@ class CStaticFunctionDefinitions static bool IsElementInWater(CElement* pElement, bool& bInWater); static bool GetElementAttachedOffsets(CElement* pElement, CVector& vecPosition, CVector& vecRotation); static CElement* GetElementSyncer(CElement* pElement); - static std::vector GetElementsSyncedByPlayer(CPlayer* pPlayer, std::optional strType); + static std::vector GetElementsSyncedByPlayer(CPlayer* pPlayer); static bool GetElementCollisionsEnabled(CElement* pElement); static bool IsElementFrozen(CElement* pElement, bool& bFrozen); static bool GetLowLodElement(CElement* pElement, CElement*& pOutLowLodElement); diff --git a/Server/mods/deathmatch/logic/luadefs/CLuaElementDefs.cpp b/Server/mods/deathmatch/logic/luadefs/CLuaElementDefs.cpp index 12256eb3da2..5179c6f613f 100644 --- a/Server/mods/deathmatch/logic/luadefs/CLuaElementDefs.cpp +++ b/Server/mods/deathmatch/logic/luadefs/CLuaElementDefs.cpp @@ -1384,9 +1384,9 @@ int CLuaElementDefs::getElementSyncer(lua_State* luaVM) return 1; } -std::vector CLuaElementDefs::GetElementsSyncedByPlayer(CPlayer* player, std::optional elementType) +std::vector CLuaElementDefs::GetElementsSyncedByPlayer(CPlayer* player) { - return CStaticFunctionDefinitions::GetElementsSyncedByPlayer(player, elementType); + return CStaticFunctionDefinitions::GetElementsSyncedByPlayer(player); } int CLuaElementDefs::getElementCollisionsEnabled(lua_State* luaVM) diff --git a/Server/mods/deathmatch/logic/luadefs/CLuaElementDefs.h b/Server/mods/deathmatch/logic/luadefs/CLuaElementDefs.h index 2138a4467aa..4ccc14bacfd 100644 --- a/Server/mods/deathmatch/logic/luadefs/CLuaElementDefs.h +++ b/Server/mods/deathmatch/logic/luadefs/CLuaElementDefs.h @@ -57,7 +57,7 @@ class CLuaElementDefs : public CLuaDefs LUA_DECLARE(getElementModel); LUA_DECLARE(isElementInWater); LUA_DECLARE(getElementSyncer); - static std::vector GetElementsSyncedByPlayer(CPlayer* player, std::optional elementType); + static std::vector GetElementsSyncedByPlayer(CPlayer* player); LUA_DECLARE(getElementCollisionsEnabled); LUA_DECLARE(isElementFrozen); LUA_DECLARE(getLowLODElement); From 5dad53892775ed49c390e64e4ffdcff2082b2106 Mon Sep 17 00:00:00 2001 From: Xenius97 Date: Wed, 7 Jan 2026 08:53:58 +0100 Subject: [PATCH 8/9] Refactor GetElementsSyncedByPlayer to improve functionality and remove unused declarations --- .../logic/CStaticFunctionDefinitions.cpp | 29 ---------------- .../logic/CStaticFunctionDefinitions.h | 1 - .../logic/luadefs/CLuaElementDefs.cpp | 27 ++++++++++++++- .../logic/CStaticFunctionDefinitions.cpp | 33 ------------------- .../logic/CStaticFunctionDefinitions.h | 1 - .../deathmatch/logic/luadefs/CLuaDefs.cpp | 2 ++ .../mods/deathmatch/logic/luadefs/CLuaDefs.h | 2 ++ .../logic/luadefs/CLuaElementDefs.cpp | 29 +++++++++++++++- 8 files changed, 58 insertions(+), 66 deletions(-) diff --git a/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp b/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp index 6059e1fb308..87b13f203d7 100644 --- a/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp +++ b/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp @@ -874,35 +874,6 @@ bool CStaticFunctionDefinitions::IsElementSyncer(CClientEntity& Entity, bool& bI return true; } -std::vector CStaticFunctionDefinitions::GetElementsSyncedByPlayer() -{ - std::vector elements; - - // Check all peds - CPedSync* pPedSync = m_pClientGame->GetPedSync(); - for (auto iter = pPedSync->IterBegin(); iter != pPedSync->IterEnd(); ++iter) - { - elements.push_back(*iter); - } - - // Check all vehicles - CUnoccupiedVehicleSync* pVehicleSync = m_pClientGame->GetUnoccupiedVehicleSync(); - for (auto iter = pVehicleSync->IterBegin(); iter != pVehicleSync->IterEnd(); ++iter) - { - elements.push_back(*iter); - } - -#ifdef WITH_OBJECT_SYNC - // Check all objects - CObjectSync* pObjectSync = m_pClientGame->GetObjectSync(); - for (auto iter = pObjectSync->IterBegin(); iter != pObjectSync->IterEnd(); ++iter) - { - elements.push_back(*iter); - } -#endif - - return elements; -} bool CStaticFunctionDefinitions::IsElementCollidableWith(CClientEntity& Entity, CClientEntity& ThisEntity, bool& bCanCollide) { diff --git a/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.h b/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.h index 1d879e5d440..766a09a9ffc 100644 --- a/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.h +++ b/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.h @@ -76,7 +76,6 @@ class CStaticFunctionDefinitions static bool GetElementModel(CClientEntity& Entity, unsigned short& usModel); static bool IsElementInWater(CClientEntity& Entity, bool& bInWater); static bool IsElementSyncer(CClientEntity& Entity, bool& bIsSyncer); - static std::vector GetElementsSyncedByPlayer(); static bool IsElementCollidableWith(CClientEntity& Entity, CClientEntity& ThisEntity, bool& bCanCollide); static bool GetElementCollisionsEnabled(CClientEntity& Entity); static bool IsElementFrozen(CClientEntity& Entity, bool& bFrozen); diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaElementDefs.cpp b/Client/mods/deathmatch/logic/luadefs/CLuaElementDefs.cpp index 7b3a541d53a..285262f5ce4 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaElementDefs.cpp +++ b/Client/mods/deathmatch/logic/luadefs/CLuaElementDefs.cpp @@ -1481,7 +1481,32 @@ int CLuaElementDefs::IsElementSyncer(lua_State* luaVM) std::vector CLuaElementDefs::GetElementsSyncedByPlayer() { - return CStaticFunctionDefinitions::GetElementsSyncedByPlayer(); + std::vector elements; + + // Check all peds + CPedSync* pPedSync = m_pClientGame->GetPedSync(); + for (auto iter = pPedSync->IterBegin(); iter != pPedSync->IterEnd(); ++iter) + { + elements.push_back(*iter); + } + + // Check all vehicles + CUnoccupiedVehicleSync* pVehicleSync = m_pClientGame->GetUnoccupiedVehicleSync(); + for (auto iter = pVehicleSync->IterBegin(); iter != pVehicleSync->IterEnd(); ++iter) + { + elements.push_back(*iter); + } + +#ifdef WITH_OBJECT_SYNC + // Check all objects + CObjectSync* pObjectSync = m_pClientGame->GetObjectSync(); + for (auto iter = pObjectSync->IterBegin(); iter != pObjectSync->IterEnd(); ++iter) + { + elements.push_back(*iter); + } +#endif + + return elements; } int CLuaElementDefs::IsElementCollidableWith(lua_State* luaVM) diff --git a/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp b/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp index e1b4d0c9e19..054b78b1f59 100644 --- a/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp +++ b/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp @@ -757,39 +757,6 @@ CElement* CStaticFunctionDefinitions::GetElementSyncer(CElement* pElement) return NULL; } -std::vector CStaticFunctionDefinitions::GetElementsSyncedByPlayer(CPlayer* pPlayer) -{ - assert(pPlayer); - - std::vector elements; - - // Check all vehicles - for (CVehicle* pVehicle : m_pVehicleManager->GetVehicles()) - { - if (pVehicle->GetSyncer() == pPlayer) - elements.push_back(pVehicle); - } - - // Check all peds - for (auto iter = m_pPedManager->IterBegin(); iter != m_pPedManager->IterEnd(); ++iter) - { - CPed* pPed = *iter; - if (pPed->GetSyncer() == pPlayer) - elements.push_back(pPed); - } - -#ifdef WITH_OBJECT_SYNC - // Check all objects - for (auto iter = m_pObjectManager->IterBegin(); iter != m_pObjectManager->IterEnd(); ++iter) - { - CObject* pObject = *iter; - if (pObject->GetSyncer() == pPlayer) - elements.push_back(pObject); - } -#endif - - return elements; -} bool CStaticFunctionDefinitions::GetElementCollisionsEnabled(CElement* pElement) { diff --git a/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.h b/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.h index 02a44902b3c..388f38b4439 100644 --- a/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.h +++ b/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.h @@ -74,7 +74,6 @@ class CStaticFunctionDefinitions static bool IsElementInWater(CElement* pElement, bool& bInWater); static bool GetElementAttachedOffsets(CElement* pElement, CVector& vecPosition, CVector& vecRotation); static CElement* GetElementSyncer(CElement* pElement); - static std::vector GetElementsSyncedByPlayer(CPlayer* pPlayer); static bool GetElementCollisionsEnabled(CElement* pElement); static bool IsElementFrozen(CElement* pElement, bool& bFrozen); static bool GetLowLodElement(CElement* pElement, CElement*& pOutLowLodElement); diff --git a/Server/mods/deathmatch/logic/luadefs/CLuaDefs.cpp b/Server/mods/deathmatch/logic/luadefs/CLuaDefs.cpp index 7d054a0dcb3..f87ca54b356 100644 --- a/Server/mods/deathmatch/logic/luadefs/CLuaDefs.cpp +++ b/Server/mods/deathmatch/logic/luadefs/CLuaDefs.cpp @@ -47,6 +47,7 @@ CObjectManager* CLuaDefs::m_pObjectManager = NULL; CBuildingManager* CLuaDefs::m_pBuildingManager = nullptr; CPickupManager* CLuaDefs::m_pPickupManager = NULL; CPlayerManager* CLuaDefs::m_pPlayerManager = NULL; +CPedManager* CLuaDefs::m_pPedManager = NULL; CRadarAreaManager* CLuaDefs::m_pRadarAreaManager = NULL; CRegisteredCommands* CLuaDefs::m_pRegisteredCommands; CElement* CLuaDefs::m_pRootElement = NULL; @@ -71,6 +72,7 @@ void CLuaDefs::Initialize(CGame* pGame) m_pBuildingManager = pGame->GetBuildingManager(); m_pPickupManager = pGame->GetPickupManager(); m_pPlayerManager = pGame->GetPlayerManager(); + m_pPedManager = pGame->GetPedManager(); m_pRadarAreaManager = pGame->GetRadarAreaManager(); m_pRegisteredCommands = pGame->GetRegisteredCommands(); m_pScriptDebugging = pGame->GetScriptDebugging(); diff --git a/Server/mods/deathmatch/logic/luadefs/CLuaDefs.h b/Server/mods/deathmatch/logic/luadefs/CLuaDefs.h index f8e3e90e9d1..7ba1c45d3dd 100644 --- a/Server/mods/deathmatch/logic/luadefs/CLuaDefs.h +++ b/Server/mods/deathmatch/logic/luadefs/CLuaDefs.h @@ -24,6 +24,7 @@ #include "../CBuildingManager.h" #include "../CPickupManager.h" #include "../CPlayerManager.h" +#include "../CPedManager.h" #include "../CRadarAreaManager.h" #include "../CRegisteredCommands.h" #include "../CResourceManager.h" @@ -59,6 +60,7 @@ class CLuaDefs static CBuildingManager* m_pBuildingManager; static CPickupManager* m_pPickupManager; static CPlayerManager* m_pPlayerManager; + static CPedManager* m_pPedManager; static CRadarAreaManager* m_pRadarAreaManager; static CRegisteredCommands* m_pRegisteredCommands; static CElement* m_pRootElement; diff --git a/Server/mods/deathmatch/logic/luadefs/CLuaElementDefs.cpp b/Server/mods/deathmatch/logic/luadefs/CLuaElementDefs.cpp index 5179c6f613f..468908af8d4 100644 --- a/Server/mods/deathmatch/logic/luadefs/CLuaElementDefs.cpp +++ b/Server/mods/deathmatch/logic/luadefs/CLuaElementDefs.cpp @@ -1386,7 +1386,34 @@ int CLuaElementDefs::getElementSyncer(lua_State* luaVM) std::vector CLuaElementDefs::GetElementsSyncedByPlayer(CPlayer* player) { - return CStaticFunctionDefinitions::GetElementsSyncedByPlayer(player); + std::vector elements; + + // Check all vehicles + for (CVehicle* pVehicle : m_pVehicleManager->GetVehicles()) + { + if (pVehicle->GetSyncer() == player) + elements.push_back(pVehicle); + } + + // Check all peds + for (auto iter = m_pPedManager->IterBegin(); iter != m_pPedManager->IterEnd(); ++iter) + { + CPed* pPed = *iter; + if (pPed->GetSyncer() == player) + elements.push_back(pPed); + } + +#ifdef WITH_OBJECT_SYNC + // Check all objects + for (auto iter = m_pObjectManager->IterBegin(); iter != m_pObjectManager->IterEnd(); ++iter) + { + CObject* pObject = *iter; + if (pObject->GetSyncer() == player) + elements.push_back(pObject); + } +#endif + + return elements; } int CLuaElementDefs::getElementCollisionsEnabled(lua_State* luaVM) From 790159400ea7462f682714ae4932ac68bf7b2676 Mon Sep 17 00:00:00 2001 From: Xenius97 Date: Wed, 7 Jan 2026 08:54:45 +0100 Subject: [PATCH 9/9] fix --- Client/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp | 1 - Server/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp | 1 - 2 files changed, 2 deletions(-) diff --git a/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp b/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp index 87b13f203d7..6e91ea3b3a7 100644 --- a/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp +++ b/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp @@ -874,7 +874,6 @@ bool CStaticFunctionDefinitions::IsElementSyncer(CClientEntity& Entity, bool& bI return true; } - bool CStaticFunctionDefinitions::IsElementCollidableWith(CClientEntity& Entity, CClientEntity& ThisEntity, bool& bCanCollide) { switch (Entity.GetType()) diff --git a/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp b/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp index 054b78b1f59..810820a820e 100644 --- a/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp +++ b/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp @@ -757,7 +757,6 @@ CElement* CStaticFunctionDefinitions::GetElementSyncer(CElement* pElement) return NULL; } - bool CStaticFunctionDefinitions::GetElementCollisionsEnabled(CElement* pElement) { assert(pElement);