From b53c262cea1e115bd2fb077ee7c05d341e04cf4f Mon Sep 17 00:00:00 2001 From: Lpsd <40902730+Lpsd@users.noreply.github.com> Date: Sun, 14 Aug 2022 04:30:10 +0100 Subject: [PATCH 01/10] Add resetElements argument to setWaterLevel Allows all water elements level to be reset --- Client/mods/deathmatch/logic/CClientWater.cpp | 17 +++++++++++++++++ Client/mods/deathmatch/logic/CClientWater.h | 5 +++++ .../deathmatch/logic/CClientWaterManager.cpp | 10 ++++++++++ .../mods/deathmatch/logic/CClientWaterManager.h | 1 + .../deathmatch/logic/luadefs/CLuaWaterDefs.cpp | 12 ++++++++---- .../deathmatch/logic/luadefs/CLuaWaterDefs.h | 3 ++- .../logic/CStaticFunctionDefinitions.cpp | 2 ++ Server/mods/deathmatch/logic/CWater.cpp | 13 +++++++++++++ Server/mods/deathmatch/logic/CWater.h | 4 ++++ Server/mods/deathmatch/logic/CWaterManager.cpp | 9 +++++++++ Server/mods/deathmatch/logic/CWaterManager.h | 1 + .../deathmatch/logic/luadefs/CLuaWaterDefs.cpp | 13 +++++++++---- .../deathmatch/logic/luadefs/CLuaWaterDefs.h | 5 +++-- 13 files changed, 84 insertions(+), 11 deletions(-) diff --git a/Client/mods/deathmatch/logic/CClientWater.cpp b/Client/mods/deathmatch/logic/CClientWater.cpp index 7cd75346fa..8be149dd44 100644 --- a/Client/mods/deathmatch/logic/CClientWater.cpp +++ b/Client/mods/deathmatch/logic/CClientWater.cpp @@ -68,6 +68,8 @@ bool CClientWater::Create() g_pCore->GetConsole()->Printf("CClientWater::Create %d", GetID()); #endif + m_iDefaultLevel = GetLevel(); + return true; } @@ -180,3 +182,18 @@ bool CClientWater::SetLevel(float fLevel, void* pChangeSource) } return true; } + +float CClientWater::GetLevel() const +{ + float fLevel = 0.0f; + for (int i = 0; i < GetNumVertices(); i++) + { + fLevel += m_Vertices[i].fZ; + } + return fLevel / static_cast(GetNumVertices()); +} + +void CClientWater::ResetLevel() +{ + SetLevel(m_iDefaultLevel); +} diff --git a/Client/mods/deathmatch/logic/CClientWater.h b/Client/mods/deathmatch/logic/CClientWater.h index 497d19ecf1..382804fdf3 100644 --- a/Client/mods/deathmatch/logic/CClientWater.h +++ b/Client/mods/deathmatch/logic/CClientWater.h @@ -29,10 +29,13 @@ class CClientWater final : public CClientEntity void SetPosition(const CVector& vecPosition); bool SetVertexPosition(int iVertexIndex, CVector& vecPosition, void* pChangeSource = nullptr); bool SetLevel(float fWaterLevel, void* pChangeSource = nullptr); + float GetLevel() const; + void ResetLevel(); void Unlink(); void SetDimension(unsigned short usDimension); void RelateDimension(unsigned short usWorldDimension); + private: CWaterPoly* m_pPoly; @@ -41,5 +44,7 @@ class CClientWater final : public CClientEntity bool m_bShallow; // Shallow water? std::vector m_Vertices; // List of vertices for this water + float m_iDefaultLevel = .0f; + friend class CClientWaterManager; }; diff --git a/Client/mods/deathmatch/logic/CClientWaterManager.cpp b/Client/mods/deathmatch/logic/CClientWaterManager.cpp index b25c110b9a..4be8d874ff 100644 --- a/Client/mods/deathmatch/logic/CClientWaterManager.cpp +++ b/Client/mods/deathmatch/logic/CClientWaterManager.cpp @@ -104,6 +104,16 @@ bool CClientWaterManager::SetAllElementWaterLevel(float fLevel, void* pChangeSou return true; } +bool CClientWaterManager::ResetAllElementWaterLevel() +{ + list::const_iterator iter = m_List.begin(); + for (; iter != m_List.end(); iter++) + { + (*iter)->ResetLevel(); + } + return true; +} + void CClientWaterManager::ResetWorldWaterLevel() { g_pGame->GetWaterManager()->ResetWorldWaterLevel(); diff --git a/Client/mods/deathmatch/logic/CClientWaterManager.h b/Client/mods/deathmatch/logic/CClientWaterManager.h index e072b91732..66cb073e9b 100644 --- a/Client/mods/deathmatch/logic/CClientWaterManager.h +++ b/Client/mods/deathmatch/logic/CClientWaterManager.h @@ -31,6 +31,7 @@ class CClientWaterManager bool SetPositionWaterLevel(const CVector& vecPosition, float fLevel, void* pChangeSource); bool SetWorldWaterLevel(float fLevel, void* pChangeSource, bool bIncludeWorldNonSeaLevel, bool bIncludeWorldSeaLevel, bool bIncludeOutsideWorldLevel); bool SetAllElementWaterLevel(float fLevel, void* pChangeSource); + bool ResetAllElementWaterLevel(); void ResetWorldWaterLevel(); float GetWaveLevel(); diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaWaterDefs.cpp b/Client/mods/deathmatch/logic/luadefs/CLuaWaterDefs.cpp index 46ffb78e14..ccf6e240d7 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaWaterDefs.cpp +++ b/Client/mods/deathmatch/logic/luadefs/CLuaWaterDefs.cpp @@ -10,6 +10,7 @@ *****************************************************************************/ #include "StdInc.h" +#include "lua/CLuaFunctionParser.h" void CLuaWaterDefs::LoadFunctions() { @@ -17,7 +18,7 @@ void CLuaWaterDefs::LoadFunctions() {"createWater", CreateWater}, {"testLineAgainstWater", TestLineAgainstWater}, {"resetWaterColor", ResetWaterColor}, - {"resetWaterLevel", ResetWaterLevel}, + {"resetWaterLevel", ArgumentParser}, {"setWaterColor", SetWaterColor}, {"setWaterLevel", SetWaterLevel}, @@ -140,11 +141,14 @@ int CLuaWaterDefs::TestLineAgainstWater(lua_State* luaVM) return 1; } -int CLuaWaterDefs::ResetWaterLevel(lua_State* luaVM) +bool CLuaWaterDefs::ResetWaterLevel(bool resetElements) { CStaticFunctionDefinitions::ResetWorldWaterLevel(); - lua_pushboolean(luaVM, true); - return 1; + + if (resetElements) + g_pClientGame->GetManager()->GetWaterManager()->ResetAllElementWaterLevel(); + + return true; } int CLuaWaterDefs::ResetWaterColor(lua_State* luaVM) diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaWaterDefs.h b/Client/mods/deathmatch/logic/luadefs/CLuaWaterDefs.h index 8842f58316..527af2bc85 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaWaterDefs.h +++ b/Client/mods/deathmatch/logic/luadefs/CLuaWaterDefs.h @@ -19,7 +19,6 @@ class CLuaWaterDefs : public CLuaDefs static void AddClass(lua_State* luaVM); LUA_DECLARE(CreateWater); - LUA_DECLARE(ResetWaterLevel); LUA_DECLARE(ResetWaterColor); LUA_DECLARE(TestLineAgainstWater); @@ -32,4 +31,6 @@ class CLuaWaterDefs : public CLuaDefs LUA_DECLARE(GetWaterLevel); LUA_DECLARE(IsWaterDrawnLast); LUA_DECLARE(GetWaterVertexPosition); + + static bool ResetWaterLevel(bool resetElements); }; diff --git a/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp b/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp index 7371681917..a7bc4d3acc 100644 --- a/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp +++ b/Server/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp @@ -9176,6 +9176,8 @@ CWater* CStaticFunctionDefinitions::CreateWater(CResource* pResource, CVector* p return nullptr; } + pWater->SetDefaultLevel(pWater->GetLevel()); + if (pResource->IsClientSynced()) { CEntityAddPacket Packet; diff --git a/Server/mods/deathmatch/logic/CWater.cpp b/Server/mods/deathmatch/logic/CWater.cpp index 1efa9477eb..72012d1bea 100644 --- a/Server/mods/deathmatch/logic/CWater.cpp +++ b/Server/mods/deathmatch/logic/CWater.cpp @@ -14,6 +14,10 @@ #include "CWaterManager.h" #include "CLogger.h" +#include +#include "packets/CElementRPCPacket.h" +#include "CGame.h" + CWater::CWater(CWaterManager* pWaterManager, CElement* pParent, EWaterType waterType, bool bShallow) : CElement(pParent) { m_pWaterManager = pWaterManager; @@ -201,3 +205,12 @@ bool CWater::IsVertexWithinWorld(int index) { return m_Vertices[index].fX >= -3000.0f && m_Vertices[index].fX <= 3000.0f && m_Vertices[index].fY >= -3000.0f && m_Vertices[index].fY <= 3000.0f; } + +void CWater::ResetLevel() +{ + SetLevel(m_iDefaultLevel); + + CBitStream BitStream; + BitStream.pBitStream->Write(m_iDefaultLevel); + g_pGame->GetPlayerManager()->BroadcastOnlyJoined(CElementRPCPacket(this, SET_ELEMENT_WATER_LEVEL, *BitStream.pBitStream)); +} diff --git a/Server/mods/deathmatch/logic/CWater.h b/Server/mods/deathmatch/logic/CWater.h index 20f041b5b9..864e3a47c6 100644 --- a/Server/mods/deathmatch/logic/CWater.h +++ b/Server/mods/deathmatch/logic/CWater.h @@ -33,6 +33,8 @@ class CWater final : public CElement void SetPosition(const CVector& vecPosition); float GetLevel() const; void SetLevel(float fLevel); + void SetDefaultLevel(float fLevel) { m_iDefaultLevel = fLevel; } + void ResetLevel(); void Unlink(); @@ -57,4 +59,6 @@ class CWater final : public CElement SFixedArray m_Vertices; EWaterType m_WaterType; bool m_bShallow; + + float m_iDefaultLevel = .0f; }; diff --git a/Server/mods/deathmatch/logic/CWaterManager.cpp b/Server/mods/deathmatch/logic/CWaterManager.cpp index c10b2c4fbd..de5fa421c4 100644 --- a/Server/mods/deathmatch/logic/CWaterManager.cpp +++ b/Server/mods/deathmatch/logic/CWaterManager.cpp @@ -69,6 +69,15 @@ void CWaterManager::SetAllElementWaterLevel(float fLevel) } } +void CWaterManager::ResetAllElementWaterLevel() +{ + std::list::const_iterator iter = m_List.begin(); + for (; iter != m_List.end(); ++iter) + { + (*iter)->ResetLevel(); + } +} + void CWaterManager::SetWorldWaterLevel(float fLevel, bool bIncludeWorldNonSeaLevel, bool bIncludeWorldSeaLevel, bool bIncludeOutsideWorldLevel) { if (bIncludeWorldSeaLevel) diff --git a/Server/mods/deathmatch/logic/CWaterManager.h b/Server/mods/deathmatch/logic/CWaterManager.h index 6322330a31..913fe2c1f0 100644 --- a/Server/mods/deathmatch/logic/CWaterManager.h +++ b/Server/mods/deathmatch/logic/CWaterManager.h @@ -37,6 +37,7 @@ class CWaterManager void ResetWorldWaterLevel(); void SetElementWaterLevel(CWater* pWater, float fLevel); void SetAllElementWaterLevel(float fLevel); + void ResetAllElementWaterLevel(); std::list::const_iterator IterBegin() { return m_List.begin(); } std::list::const_iterator IterEnd() { return m_List.end(); } diff --git a/Server/mods/deathmatch/logic/luadefs/CLuaWaterDefs.cpp b/Server/mods/deathmatch/logic/luadefs/CLuaWaterDefs.cpp index 5b21701a84..88a1408199 100644 --- a/Server/mods/deathmatch/logic/luadefs/CLuaWaterDefs.cpp +++ b/Server/mods/deathmatch/logic/luadefs/CLuaWaterDefs.cpp @@ -12,15 +12,17 @@ #include "StdInc.h" #include "CLuaWaterDefs.h" #include "CWater.h" +#include "CWaterManager.h" #include "CStaticFunctionDefinitions.h" #include "CScriptArgReader.h" +#include "lua/CLuaFunctionParser.h" void CLuaWaterDefs::LoadFunctions() { constexpr static const std::pair functions[]{ {"createWater", CreateWater}, {"setWaterLevel", SetWaterLevel}, - {"resetWaterLevel", ResetWaterLevel}, + {"resetWaterLevel", ArgumentParser}, {"getWaterVertexPosition", GetWaterVertexPosition}, {"setWaterVertexPosition", SetWaterVertexPosition}, {"getWaterColor", GetWaterColor}, @@ -167,11 +169,14 @@ int CLuaWaterDefs::SetWaterLevel(lua_State* luaVM) return 1; } -int CLuaWaterDefs::ResetWaterLevel(lua_State* luaVM) +bool CLuaWaterDefs::ResetWaterLevel(bool resetElements) { CStaticFunctionDefinitions::ResetWorldWaterLevel(); - lua_pushboolean(luaVM, true); - return 1; + + if (resetElements) + g_pGame->GetWaterManager()->ResetAllElementWaterLevel(); + + return true; } int CLuaWaterDefs::GetWaterVertexPosition(lua_State* luaVM) diff --git a/Server/mods/deathmatch/logic/luadefs/CLuaWaterDefs.h b/Server/mods/deathmatch/logic/luadefs/CLuaWaterDefs.h index 44bb6c0f39..43f427ad89 100644 --- a/Server/mods/deathmatch/logic/luadefs/CLuaWaterDefs.h +++ b/Server/mods/deathmatch/logic/luadefs/CLuaWaterDefs.h @@ -20,10 +20,11 @@ class CLuaWaterDefs : public CLuaDefs LUA_DECLARE(CreateWater); LUA_DECLARE(SetWaterLevel); - LUA_DECLARE(ResetWaterLevel); LUA_DECLARE(GetWaterVertexPosition); LUA_DECLARE(SetWaterVertexPosition); LUA_DECLARE(GetWaterColor); LUA_DECLARE(SetWaterColor); LUA_DECLARE(ResetWaterColor); -}; \ No newline at end of file + + static bool ResetWaterLevel(bool resetElements); +}; From bf061e83a060a676d045c52ef15f2a0b46c581fa Mon Sep 17 00:00:00 2001 From: Lpsd <40902730+Lpsd@users.noreply.github.com> Date: Sun, 14 Aug 2022 15:36:47 +0100 Subject: [PATCH 02/10] Allow bool, element or table or elements --- .../deathmatch/logic/CClientWaterManager.cpp | 11 +++++ .../deathmatch/logic/CClientWaterManager.h | 2 + .../logic/luadefs/CLuaWaterDefs.cpp | 40 ++++++++++++++++-- .../deathmatch/logic/luadefs/CLuaWaterDefs.h | 2 +- .../mods/deathmatch/logic/CWaterManager.cpp | 11 +++++ Server/mods/deathmatch/logic/CWaterManager.h | 2 + .../logic/luadefs/CLuaWaterDefs.cpp | 41 +++++++++++++++++-- .../deathmatch/logic/luadefs/CLuaWaterDefs.h | 2 +- 8 files changed, 103 insertions(+), 8 deletions(-) diff --git a/Client/mods/deathmatch/logic/CClientWaterManager.cpp b/Client/mods/deathmatch/logic/CClientWaterManager.cpp index 4be8d874ff..12f09a7da9 100644 --- a/Client/mods/deathmatch/logic/CClientWaterManager.cpp +++ b/Client/mods/deathmatch/logic/CClientWaterManager.cpp @@ -114,6 +114,17 @@ bool CClientWaterManager::ResetAllElementWaterLevel() return true; } +void CClientWaterManager::ResetElementWaterLevel(CClientWater* pWater) +{ + pWater->ResetLevel(); +} + +void CClientWaterManager::ResetElementWaterLevel(std::vector& vecWaterElements) +{ + for (CClientWater* water : vecWaterElements) + water->ResetLevel(); +} + void CClientWaterManager::ResetWorldWaterLevel() { g_pGame->GetWaterManager()->ResetWorldWaterLevel(); diff --git a/Client/mods/deathmatch/logic/CClientWaterManager.h b/Client/mods/deathmatch/logic/CClientWaterManager.h index 66cb073e9b..8db1b9ea3b 100644 --- a/Client/mods/deathmatch/logic/CClientWaterManager.h +++ b/Client/mods/deathmatch/logic/CClientWaterManager.h @@ -32,6 +32,8 @@ class CClientWaterManager bool SetWorldWaterLevel(float fLevel, void* pChangeSource, bool bIncludeWorldNonSeaLevel, bool bIncludeWorldSeaLevel, bool bIncludeOutsideWorldLevel); bool SetAllElementWaterLevel(float fLevel, void* pChangeSource); bool ResetAllElementWaterLevel(); + void ResetElementWaterLevel(CClientWater* pWater); + void ResetElementWaterLevel(std::vector& vecWaterElements); void ResetWorldWaterLevel(); float GetWaveLevel(); diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaWaterDefs.cpp b/Client/mods/deathmatch/logic/luadefs/CLuaWaterDefs.cpp index ccf6e240d7..a469159de0 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaWaterDefs.cpp +++ b/Client/mods/deathmatch/logic/luadefs/CLuaWaterDefs.cpp @@ -141,12 +141,46 @@ int CLuaWaterDefs::TestLineAgainstWater(lua_State* luaVM) return 1; } -bool CLuaWaterDefs::ResetWaterLevel(bool resetElements) +bool CLuaWaterDefs::ResetWaterLevel(std::variant, CClientWater*> resetElements) { CStaticFunctionDefinitions::ResetWorldWaterLevel(); - if (resetElements) - g_pClientGame->GetManager()->GetWaterManager()->ResetAllElementWaterLevel(); + CClientWaterManager* pWaterManager = g_pClientGame->GetManager()->GetWaterManager(); + + switch (resetElements.index()) + { + case 0: + break; + + case 1: + { + if (std::get(resetElements) == true) + { + pWaterManager->ResetAllElementWaterLevel(); + } + + break; + } + + case 2: + { + auto& vecWaterElements = std::get>(resetElements); + pWaterManager->ResetElementWaterLevel(vecWaterElements); + break; + } + + case 3: + { + auto pWaterElement = std::get(resetElements); + pWaterManager->ResetElementWaterLevel(pWaterElement); + break; + } + + default: + { + throw std::invalid_argument("Invalid argument supplied for 'resetElements' - expected bool, table or element."); + } + } return true; } diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaWaterDefs.h b/Client/mods/deathmatch/logic/luadefs/CLuaWaterDefs.h index 527af2bc85..55bb70b0a9 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaWaterDefs.h +++ b/Client/mods/deathmatch/logic/luadefs/CLuaWaterDefs.h @@ -32,5 +32,5 @@ class CLuaWaterDefs : public CLuaDefs LUA_DECLARE(IsWaterDrawnLast); LUA_DECLARE(GetWaterVertexPosition); - static bool ResetWaterLevel(bool resetElements); + static bool ResetWaterLevel(std::variant, CClientWater*> resetElements); }; diff --git a/Server/mods/deathmatch/logic/CWaterManager.cpp b/Server/mods/deathmatch/logic/CWaterManager.cpp index de5fa421c4..011d27f80a 100644 --- a/Server/mods/deathmatch/logic/CWaterManager.cpp +++ b/Server/mods/deathmatch/logic/CWaterManager.cpp @@ -78,6 +78,17 @@ void CWaterManager::ResetAllElementWaterLevel() } } +void CWaterManager::ResetElementWaterLevel(CWater* pWater) +{ + pWater->ResetLevel(); +} + +void CWaterManager::ResetElementWaterLevel(std::vector& vecWaterElements) +{ + for (CWater* water : vecWaterElements) + water->ResetLevel(); +} + void CWaterManager::SetWorldWaterLevel(float fLevel, bool bIncludeWorldNonSeaLevel, bool bIncludeWorldSeaLevel, bool bIncludeOutsideWorldLevel) { if (bIncludeWorldSeaLevel) diff --git a/Server/mods/deathmatch/logic/CWaterManager.h b/Server/mods/deathmatch/logic/CWaterManager.h index 913fe2c1f0..07a2548458 100644 --- a/Server/mods/deathmatch/logic/CWaterManager.h +++ b/Server/mods/deathmatch/logic/CWaterManager.h @@ -38,6 +38,8 @@ class CWaterManager void SetElementWaterLevel(CWater* pWater, float fLevel); void SetAllElementWaterLevel(float fLevel); void ResetAllElementWaterLevel(); + void ResetElementWaterLevel(CWater* pWater); + void ResetElementWaterLevel(std::vector& vecWaterElements); std::list::const_iterator IterBegin() { return m_List.begin(); } std::list::const_iterator IterEnd() { return m_List.end(); } diff --git a/Server/mods/deathmatch/logic/luadefs/CLuaWaterDefs.cpp b/Server/mods/deathmatch/logic/luadefs/CLuaWaterDefs.cpp index 88a1408199..a4d89b3101 100644 --- a/Server/mods/deathmatch/logic/luadefs/CLuaWaterDefs.cpp +++ b/Server/mods/deathmatch/logic/luadefs/CLuaWaterDefs.cpp @@ -169,12 +169,47 @@ int CLuaWaterDefs::SetWaterLevel(lua_State* luaVM) return 1; } -bool CLuaWaterDefs::ResetWaterLevel(bool resetElements) +bool CLuaWaterDefs::ResetWaterLevel(std::variant, CWater*> resetElements) { CStaticFunctionDefinitions::ResetWorldWaterLevel(); - if (resetElements) - g_pGame->GetWaterManager()->ResetAllElementWaterLevel(); + CWaterManager* pWaterManager = g_pGame->GetWaterManager(); + + switch (resetElements.index()) + { + case 0: + break; + + case 1: + { + if (std::get(resetElements) == true) + { + pWaterManager->ResetAllElementWaterLevel(); + } + + break; + } + + case 2: + { + auto& vecWaterElements = std::get>(resetElements); + pWaterManager->ResetElementWaterLevel(vecWaterElements); + break; + } + + case 3: + { + auto pWaterElement = std::get(resetElements); + pWaterManager->ResetElementWaterLevel(pWaterElement); + break; + } + + default: + { + throw std::invalid_argument("Invalid argument supplied for 'resetElements' - expected bool, table or element."); + } + } + return true; } diff --git a/Server/mods/deathmatch/logic/luadefs/CLuaWaterDefs.h b/Server/mods/deathmatch/logic/luadefs/CLuaWaterDefs.h index 43f427ad89..898fe570ca 100644 --- a/Server/mods/deathmatch/logic/luadefs/CLuaWaterDefs.h +++ b/Server/mods/deathmatch/logic/luadefs/CLuaWaterDefs.h @@ -26,5 +26,5 @@ class CLuaWaterDefs : public CLuaDefs LUA_DECLARE(SetWaterColor); LUA_DECLARE(ResetWaterColor); - static bool ResetWaterLevel(bool resetElements); + static bool ResetWaterLevel(std::variant, CWater*> resetElements); }; From 95d97d34b4fdcaab152f75a73b0aea40c8de9a29 Mon Sep 17 00:00:00 2001 From: Lpsd <40902730+Lpsd@users.noreply.github.com> Date: Sun, 14 Aug 2022 15:40:58 +0100 Subject: [PATCH 03/10] Update variable naming for consistency --- Client/mods/deathmatch/logic/CClientWaterManager.cpp | 4 ++-- Server/mods/deathmatch/logic/CWaterManager.cpp | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Client/mods/deathmatch/logic/CClientWaterManager.cpp b/Client/mods/deathmatch/logic/CClientWaterManager.cpp index 12f09a7da9..b4a282e2d5 100644 --- a/Client/mods/deathmatch/logic/CClientWaterManager.cpp +++ b/Client/mods/deathmatch/logic/CClientWaterManager.cpp @@ -121,8 +121,8 @@ void CClientWaterManager::ResetElementWaterLevel(CClientWater* pWater) void CClientWaterManager::ResetElementWaterLevel(std::vector& vecWaterElements) { - for (CClientWater* water : vecWaterElements) - water->ResetLevel(); + for (CClientWater* pWater : vecWaterElements) + pWater->ResetLevel(); } void CClientWaterManager::ResetWorldWaterLevel() diff --git a/Server/mods/deathmatch/logic/CWaterManager.cpp b/Server/mods/deathmatch/logic/CWaterManager.cpp index 011d27f80a..f5cce19267 100644 --- a/Server/mods/deathmatch/logic/CWaterManager.cpp +++ b/Server/mods/deathmatch/logic/CWaterManager.cpp @@ -85,8 +85,8 @@ void CWaterManager::ResetElementWaterLevel(CWater* pWater) void CWaterManager::ResetElementWaterLevel(std::vector& vecWaterElements) { - for (CWater* water : vecWaterElements) - water->ResetLevel(); + for (CWater* pWater : vecWaterElements) + pWater->ResetLevel(); } void CWaterManager::SetWorldWaterLevel(float fLevel, bool bIncludeWorldNonSeaLevel, bool bIncludeWorldSeaLevel, bool bIncludeOutsideWorldLevel) From b1e835813057e2801b523eb2f880ddcc7ee4e576 Mon Sep 17 00:00:00 2001 From: Lpsd <40902730+Lpsd@users.noreply.github.com> Date: Sun, 14 Aug 2022 15:49:31 +0100 Subject: [PATCH 04/10] Use ArgumentParserWarn for Lua defs --- Client/mods/deathmatch/logic/luadefs/CLuaWaterDefs.cpp | 2 +- Server/mods/deathmatch/logic/luadefs/CLuaWaterDefs.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaWaterDefs.cpp b/Client/mods/deathmatch/logic/luadefs/CLuaWaterDefs.cpp index a469159de0..8ebcfb6723 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaWaterDefs.cpp +++ b/Client/mods/deathmatch/logic/luadefs/CLuaWaterDefs.cpp @@ -18,7 +18,7 @@ void CLuaWaterDefs::LoadFunctions() {"createWater", CreateWater}, {"testLineAgainstWater", TestLineAgainstWater}, {"resetWaterColor", ResetWaterColor}, - {"resetWaterLevel", ArgumentParser}, + {"resetWaterLevel", ArgumentParserWarn}, {"setWaterColor", SetWaterColor}, {"setWaterLevel", SetWaterLevel}, diff --git a/Server/mods/deathmatch/logic/luadefs/CLuaWaterDefs.cpp b/Server/mods/deathmatch/logic/luadefs/CLuaWaterDefs.cpp index a4d89b3101..e495b4e309 100644 --- a/Server/mods/deathmatch/logic/luadefs/CLuaWaterDefs.cpp +++ b/Server/mods/deathmatch/logic/luadefs/CLuaWaterDefs.cpp @@ -22,7 +22,7 @@ void CLuaWaterDefs::LoadFunctions() constexpr static const std::pair functions[]{ {"createWater", CreateWater}, {"setWaterLevel", SetWaterLevel}, - {"resetWaterLevel", ArgumentParser}, + {"resetWaterLevel", ArgumentParserWarn}, {"getWaterVertexPosition", GetWaterVertexPosition}, {"setWaterVertexPosition", SetWaterVertexPosition}, {"getWaterColor", GetWaterColor}, From 8a11b3ce0b5610845a37487acbb5c5713598a9f7 Mon Sep 17 00:00:00 2001 From: Lpsd <40902730+Lpsd@users.noreply.github.com> Date: Fri, 24 May 2024 10:35:23 +0100 Subject: [PATCH 05/10] mbedTLS fix for cURL 8.8.0 https://github.com/curl/curl/issues/13748 --- vendor/curl/lib/config-linux.h | 2 +- vendor/curl/lib/config-macos.h | 2 +- vendor/curl/lib/vtls/mbedtls.c | 21 +++++++++++++-------- vendor/curl/premake5.lua | 3 +++ 4 files changed, 18 insertions(+), 10 deletions(-) diff --git a/vendor/curl/lib/config-linux.h b/vendor/curl/lib/config-linux.h index 02a1306ed0..b0084d92dd 100644 --- a/vendor/curl/lib/config-linux.h +++ b/vendor/curl/lib/config-linux.h @@ -869,7 +869,7 @@ /* #undef USE_MANUAL */ /* if mbedTLS is enabled */ -/* #undef USE_MBEDTLS */ +#define USE_MBEDTLS 1 /* if msh3 is in use */ /* #undef USE_MSH3 */ diff --git a/vendor/curl/lib/config-macos.h b/vendor/curl/lib/config-macos.h index bf5733fcca..c46b5ec014 100644 --- a/vendor/curl/lib/config-macos.h +++ b/vendor/curl/lib/config-macos.h @@ -869,7 +869,7 @@ /* #undef USE_MANUAL */ /* if mbedTLS is enabled */ -/* #undef USE_MBEDTLS */ +#define USE_MBEDTLS 1 /* if msh3 is in use */ /* #undef USE_MSH3 */ diff --git a/vendor/curl/lib/vtls/mbedtls.c b/vendor/curl/lib/vtls/mbedtls.c index ec0b10dd9a..1197d2956d 100644 --- a/vendor/curl/lib/vtls/mbedtls.c +++ b/vendor/curl/lib/vtls/mbedtls.c @@ -902,8 +902,6 @@ mbed_connect_step2(struct Curl_cfilter *cf, struct Curl_easy *data) (struct mbed_ssl_backend_data *)connssl->backend; struct ssl_primary_config *conn_config = Curl_ssl_cf_get_primary_config(cf); const mbedtls_x509_crt *peercert; - char cipher_str[64]; - uint16_t cipher_id; #ifndef CURL_DISABLE_PROXY const char * const pinnedpubkey = Curl_ssl_cf_is_proxy(cf)? data->set.str[STRING_SSL_PINNEDPUBLICKEY_PROXY]: @@ -932,11 +930,18 @@ mbed_connect_step2(struct Curl_cfilter *cf, struct Curl_easy *data) return CURLE_SSL_CONNECT_ERROR; } - cipher_id = (uint16_t) - mbedtls_ssl_get_ciphersuite_id_from_ssl(&backend->ssl); - mbed_cipher_suite_get_str(cipher_id, cipher_str, sizeof(cipher_str), true); - infof(data, "mbedTLS: Handshake complete, cipher is %s", cipher_str); - +#if MBEDTLS_VERSION_NUMBER >= 0x03020000 + { + char cipher_str[64]; + uint16_t cipher_id; + cipher_id = (uint16_t) + mbedtls_ssl_get_ciphersuite_id_from_ssl(&backend->ssl); + mbed_cipher_suite_get_str(cipher_id, cipher_str, sizeof(cipher_str), true); + infof(data, "mbedTLS: Handshake complete, cipher is %s", cipher_str); + } +#else + infof(data, "mbedTLS: Handshake complete"); +#endif ret = mbedtls_ssl_get_verify_result(&backend->ssl); if(!conn_config->verifyhost) @@ -1506,4 +1511,4 @@ const struct Curl_ssl Curl_ssl_mbedtls = { mbed_send, /* send data to encrypt */ }; -#endif /* USE_MBEDTLS */ +#endif /* USE_MBEDTLS */ \ No newline at end of file diff --git a/vendor/curl/premake5.lua b/vendor/curl/premake5.lua index d86088f267..b3ac6a517f 100644 --- a/vendor/curl/premake5.lua +++ b/vendor/curl/premake5.lua @@ -32,6 +32,9 @@ project "curl" defines { "USE_SCHANNEL", "USE_WINDOWS_SSPI", "USE_WIN32_IDN" } links { "crypt32", "Normaliz" } + filter { "system:not windows" } + defines { "USE_MBEDTLS" } + filter { "system:linux or bsd or macosx" } defines { "CURL_HIDDEN_SYMBOLS" } From 2a5d1a710def532685f26f7e77e378a33cbcad1c Mon Sep 17 00:00:00 2001 From: lopsi <40902730+Lpsd@users.noreply.github.com> Date: Mon, 17 Jun 2024 22:51:14 +0100 Subject: [PATCH 06/10] Update CClientWaterManager.cpp Co-authored-by: Marek Kulik --- Client/mods/deathmatch/logic/CClientWaterManager.cpp | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/Client/mods/deathmatch/logic/CClientWaterManager.cpp b/Client/mods/deathmatch/logic/CClientWaterManager.cpp index b4a282e2d5..a7c30fe45b 100644 --- a/Client/mods/deathmatch/logic/CClientWaterManager.cpp +++ b/Client/mods/deathmatch/logic/CClientWaterManager.cpp @@ -106,11 +106,8 @@ bool CClientWaterManager::SetAllElementWaterLevel(float fLevel, void* pChangeSou bool CClientWaterManager::ResetAllElementWaterLevel() { - list::const_iterator iter = m_List.begin(); - for (; iter != m_List.end(); iter++) - { - (*iter)->ResetLevel(); - } + for (CClientWater* pWater : m_List) + pWater->ResetLevel(); return true; } From 30bec61f5e6b181786a3b2ab9517b7e6f6959912 Mon Sep 17 00:00:00 2001 From: lopsi <40902730+Lpsd@users.noreply.github.com> Date: Mon, 17 Jun 2024 22:51:25 +0100 Subject: [PATCH 07/10] Update CWater.h Co-authored-by: Marek Kulik --- Server/mods/deathmatch/logic/CWater.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Server/mods/deathmatch/logic/CWater.h b/Server/mods/deathmatch/logic/CWater.h index 864e3a47c6..94945a832f 100644 --- a/Server/mods/deathmatch/logic/CWater.h +++ b/Server/mods/deathmatch/logic/CWater.h @@ -60,5 +60,5 @@ class CWater final : public CElement EWaterType m_WaterType; bool m_bShallow; - float m_iDefaultLevel = .0f; + float m_iDefaultLevel{}; }; From 400e88b3c31966466557e2a106610824caf721d6 Mon Sep 17 00:00:00 2001 From: lopsi <40902730+Lpsd@users.noreply.github.com> Date: Mon, 17 Jun 2024 22:51:32 +0100 Subject: [PATCH 08/10] Update CWaterManager.cpp Co-authored-by: Marek Kulik --- Server/mods/deathmatch/logic/CWaterManager.cpp | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/Server/mods/deathmatch/logic/CWaterManager.cpp b/Server/mods/deathmatch/logic/CWaterManager.cpp index f5cce19267..ac00ceb042 100644 --- a/Server/mods/deathmatch/logic/CWaterManager.cpp +++ b/Server/mods/deathmatch/logic/CWaterManager.cpp @@ -71,11 +71,8 @@ void CWaterManager::SetAllElementWaterLevel(float fLevel) void CWaterManager::ResetAllElementWaterLevel() { - std::list::const_iterator iter = m_List.begin(); - for (; iter != m_List.end(); ++iter) - { - (*iter)->ResetLevel(); - } + for (CWater* pWater : m_List) + pWater->ResetLevel(); } void CWaterManager::ResetElementWaterLevel(CWater* pWater) From 366780ba34b47e52b2aa1e47a01f8e0a77dc1b2a Mon Sep 17 00:00:00 2001 From: Lpsd <40902730+Lpsd@users.noreply.github.com> Date: Wed, 19 Jun 2024 19:03:11 +0100 Subject: [PATCH 09/10] Modify resetWaterLevel argument handling --- .../mods/deathmatch/logic/luadefs/CLuaWaterDefs.cpp | 12 +++--------- .../mods/deathmatch/logic/luadefs/CLuaWaterDefs.cpp | 13 +++---------- 2 files changed, 6 insertions(+), 19 deletions(-) diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaWaterDefs.cpp b/Client/mods/deathmatch/logic/luadefs/CLuaWaterDefs.cpp index 8ebcfb6723..ab3e67cb07 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaWaterDefs.cpp +++ b/Client/mods/deathmatch/logic/luadefs/CLuaWaterDefs.cpp @@ -143,21 +143,20 @@ int CLuaWaterDefs::TestLineAgainstWater(lua_State* luaVM) bool CLuaWaterDefs::ResetWaterLevel(std::variant, CClientWater*> resetElements) { - CStaticFunctionDefinitions::ResetWorldWaterLevel(); - CClientWaterManager* pWaterManager = g_pClientGame->GetManager()->GetWaterManager(); switch (resetElements.index()) { case 0: + CStaticFunctionDefinitions::ResetWorldWaterLevel(); break; case 1: { if (std::get(resetElements) == true) - { pWaterManager->ResetAllElementWaterLevel(); - } + else + CStaticFunctionDefinitions::ResetWorldWaterLevel(); break; } @@ -175,11 +174,6 @@ bool CLuaWaterDefs::ResetWaterLevel(std::variantResetElementWaterLevel(pWaterElement); break; } - - default: - { - throw std::invalid_argument("Invalid argument supplied for 'resetElements' - expected bool, table or element."); - } } return true; diff --git a/Server/mods/deathmatch/logic/luadefs/CLuaWaterDefs.cpp b/Server/mods/deathmatch/logic/luadefs/CLuaWaterDefs.cpp index e495b4e309..883c5b42e7 100644 --- a/Server/mods/deathmatch/logic/luadefs/CLuaWaterDefs.cpp +++ b/Server/mods/deathmatch/logic/luadefs/CLuaWaterDefs.cpp @@ -171,21 +171,20 @@ int CLuaWaterDefs::SetWaterLevel(lua_State* luaVM) bool CLuaWaterDefs::ResetWaterLevel(std::variant, CWater*> resetElements) { - CStaticFunctionDefinitions::ResetWorldWaterLevel(); - CWaterManager* pWaterManager = g_pGame->GetWaterManager(); switch (resetElements.index()) { case 0: + CStaticFunctionDefinitions::ResetWorldWaterLevel(); break; case 1: { if (std::get(resetElements) == true) - { pWaterManager->ResetAllElementWaterLevel(); - } + else + CStaticFunctionDefinitions::ResetWorldWaterLevel(); break; } @@ -203,13 +202,7 @@ bool CLuaWaterDefs::ResetWaterLevel(std::variantResetElementWaterLevel(pWaterElement); break; } - - default: - { - throw std::invalid_argument("Invalid argument supplied for 'resetElements' - expected bool, table or element."); - } } - return true; } From 6fd936874514c026ffdf75abb5978b3bd7771cb1 Mon Sep 17 00:00:00 2001 From: Lpsd <40902730+Lpsd@users.noreply.github.com> Date: Wed, 19 Jun 2024 19:17:56 +0100 Subject: [PATCH 10/10] Update CClientWater.h --- Client/mods/deathmatch/logic/CClientWater.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Client/mods/deathmatch/logic/CClientWater.h b/Client/mods/deathmatch/logic/CClientWater.h index 16a3a2bcf8..8dcd9aaef9 100644 --- a/Client/mods/deathmatch/logic/CClientWater.h +++ b/Client/mods/deathmatch/logic/CClientWater.h @@ -46,7 +46,7 @@ class CClientWater final : public CClientEntity bool m_bShallow; // Shallow water? std::vector m_Vertices; // List of vertices for this water - float m_iDefaultLevel = .0f; + float m_iDefaultLevel{}; friend class CClientWaterManager; };