From 88103d5ccd253c52908da6c9e11db0b8955cc249 Mon Sep 17 00:00:00 2001 From: FlashHit <56718716+FlashHit@users.noreply.github.com> Date: Sun, 15 Aug 2021 18:56:08 +0200 Subject: [PATCH 1/4] feat(auto bundles): add bundles automatically when loading a project with additional bundles - add required superbundles - add required bundles - add terrainLevelName --- ext/Client/__init__.lua | 13 +++- ext/Server/DataBaseManager.lua | 39 +++++++++--- ext/Server/ProjectManager.lua | 106 ++++++++++++++++++++++++++++++++- ext/Server/__init__.lua | 11 ++++ ext/Shared/EditorCommon.lua | 76 ++++++++++++++++++++--- 5 files changed, 226 insertions(+), 19 deletions(-) diff --git a/ext/Client/__init__.lua b/ext/Client/__init__.lua index 476d64f6..a598024f 100644 --- a/ext/Client/__init__.lua +++ b/ext/Client/__init__.lua @@ -34,6 +34,7 @@ function MapEditorClient:RegisterEvents() Events:Subscribe('UpdateManager:Update', self, self.OnUpdatePass) Events:Subscribe('UI:DrawHud', self, self.OnDrawHud) Events:Subscribe('Level:LoadingInfo', self, self.OnLoadingInfo) + Events:Subscribe('Level:LoadResources', self, self.OnLevelLoadResources) -- Editor Events NetEvents:Subscribe('MapEditorClient:ReceiveProjectData', self, self.OnReceiveProjectData) @@ -57,6 +58,8 @@ function MapEditorClient:RegisterEvents() Hooks:Install('UI:PushScreen', 999, self, self.OnPushScreen) Hooks:Install('ResourceManager:LoadBundles', 999, self, self.OnLoadBundles) + Hooks:Install('Terrain:Load', 1, self, self.OnTerrainLoad) + Hooks:Install('VisualTerrain:Load', 1, self, self.OnTerrainLoad) Hooks:Install('EntityFactory:CreateFromBlueprint', 999, self, self.OnEntityCreateFromBlueprint) Hooks:Install('EntityFactory:Create', 999, self, self.OnEntityCreate) end @@ -119,6 +122,10 @@ function MapEditorClient:OnLevelDestroy() UIManager:OnLevelDestroy() end +function MapEditorClient:OnTerrainLoad(p_HookCtx, p_AssetName) + EditorCommon:OnTerrainLoad(p_HookCtx, p_AssetName, Editor.m_CurrentProjectHeader) +end + function MapEditorClient:OnLoadBundles(p_Hook, p_Bundles, p_Compartment) local s_LoadingInfo = '' @@ -142,10 +149,14 @@ function MapEditorClient:OnEntityCreateFromBlueprint(p_Hook, p_Blueprint, p_Tran GameObjectManager:OnEntityCreateFromBlueprint(p_Hook, p_Blueprint, p_Transform, p_Variation, p_Parent ) end -function MapEditorClient:OnLoadingInfo( p_Info ) +function MapEditorClient:OnLoadingInfo(p_Info) WebUI:ExecuteJS(string.format("vext.SetLoadingInfo('%s')", p_Info)) end +function MapEditorClient:OnLevelLoadResources(p_LevelName, p_GameMode, p_IsDedicatedServer) + EditorCommon:OnLevelLoadResources(Editor.m_CurrentProjectHeader) +end + ----------- Editor functions---------------- function MapEditorClient:OnSendCommandsToServer(p_CommandsJson) diff --git a/ext/Server/DataBaseManager.lua b/ext/Server/DataBaseManager.lua index b96bfbc8..e0761663 100644 --- a/ext/Server/DataBaseManager.lua +++ b/ext/Server/DataBaseManager.lua @@ -7,7 +7,9 @@ local m_ProjectName_Unique_Index = "idx_project_name" local m_ProjectName_Text_Column_Name = "project_name" local m_MapName_Text_Column_Name = "map_name" local m_GameModeName_Text_Column_Name = "gamemode_name" +local m_RequiredSuperBundles_Text_Column_Name = "required_superbundles" local m_RequiredBundles_Text_Column_Name = "required_bundles" +local m_TerrainLevelName_Text_Column_Name = "terrain_level_name" local m_TimeStamp_Text_Column_Name = "timestamp" local m_DB_Data_Table_Name = "project_data" @@ -22,21 +24,26 @@ function DataBaseManager:__init() self:CreateOrUpdateDatabase() end -function DataBaseManager:SaveProject(p_ProjectName, p_MapName, p_GameModeName, p_RequiredBundles, p_GameObjectSaveDatas) +function DataBaseManager:SaveProject(p_ProjectName, p_MapName, p_GameModeName, p_RequiredSuperBundles, p_RequiredBundles, p_TerrainLevelName, p_GameObjectSaveDatas) local s_TimeStamp = SharedUtils:GetTimeMS() local s_GameObjectSaveDatasJson = p_GameObjectSaveDatas + local s_RequiredSuperBundlesJson = p_RequiredSuperBundles local s_RequiredBundlesJson = p_RequiredBundles if type(p_GameObjectSaveDatas) ~= 'string' then s_GameObjectSaveDatasJson = json.encode(p_GameObjectSaveDatas) end + if type(p_RequiredSuperBundles) ~= 'string' then + s_RequiredSuperBundlesJson = json.encode(p_RequiredSuperBundles) + end + if type(p_RequiredBundles) ~= 'string' then s_RequiredBundlesJson = json.encode(p_RequiredBundles) end - local s_Success, s_ErrorMsg, s_HeaderId = self:SaveProjectHeader(p_ProjectName, p_MapName, p_GameModeName, s_RequiredBundlesJson, s_TimeStamp) + local s_Success, s_ErrorMsg, s_HeaderId = self:SaveProjectHeader(p_ProjectName, p_MapName, p_GameModeName, s_RequiredSuperBundlesJson, s_RequiredBundlesJson, p_TerrainLevelName, s_TimeStamp) if s_Success then return self:SaveProjectData(s_HeaderId, s_GameObjectSaveDatasJson) @@ -59,7 +66,9 @@ function DataBaseManager:CreateOrUpdateDatabase() ]] .. m_ProjectName_Text_Column_Name .. [[ TEXT, ]] .. m_MapName_Text_Column_Name .. [[ TEXT, ]] .. m_GameModeName_Text_Column_Name .. [[ TEXT, + ]] .. m_RequiredSuperBundles_Text_Column_Name .. [[ TEXT, ]] .. m_RequiredBundles_Text_Column_Name .. [[ TEXT, + ]] .. m_TerrainLevelName_Text_Column_Name .. [[ TEXT, ]] .. m_TimeStamp_Text_Column_Name .. [[ INTEGER ); @@ -90,7 +99,7 @@ function DataBaseManager:CreateOrUpdateDatabase() m_Logger:Write("Successfully created database!") end -function DataBaseManager:SaveProjectHeader(p_ProjectName, p_MapName, p_GameModeName, p_RequiredBundlesJson, p_TimeStamp) +function DataBaseManager:SaveProjectHeader(p_ProjectName, p_MapName, p_GameModeName, p_RequiredSuperBundlesJson, p_RequiredBundlesJson, p_TerrainLevelName, p_TimeStamp) if p_ProjectName == nil or type(p_ProjectName) ~= "string" then return false, "Failed to save Project - header.projectName is invalid: " .. tostring(p_ProjectName) end @@ -103,20 +112,28 @@ function DataBaseManager:SaveProjectHeader(p_ProjectName, p_MapName, p_GameModeN return false, "Failed to save Project - header.gameModeName is invalid: " .. tostring(p_GameModeName) end + if p_RequiredSuperBundlesJson == nil or type(p_RequiredSuperBundlesJson) ~= "string" then + return false, "Failed to save Project - header.requiredSuperBundles is invalid: " .. tostring(p_RequiredSuperBundlesJson) + end + if p_RequiredBundlesJson == nil or type(p_RequiredBundlesJson) ~= "string" then return false, "Failed to save Project - header.requiredBundles is invalid: " .. tostring(p_RequiredBundlesJson) end + if p_TerrainLevelName == nil or type(p_TerrainLevelName) ~= "string" then + return false, "Failed to save Project - header.terrainLevelName is invalid: " .. tostring(p_TerrainLevelName) + end + if p_TimeStamp == nil or type(p_TimeStamp) ~= "number" then return false, "Failed to save Project - header.timeStamp is invalid: " .. tostring(p_TimeStamp) end - local s_Query = [[INSERT OR REPLACE INTO ]] .. m_DB_Header_Table_Name .. [[ (]] .. m_ProjectName_Text_Column_Name .. [[, ]] .. m_MapName_Text_Column_Name .. [[, ]] .. m_GameModeName_Text_Column_Name .. [[, ]] .. m_RequiredBundles_Text_Column_Name .. [[, ]] .. m_TimeStamp_Text_Column_Name .. [[) VALUES (?, ?, ?, ?, ?)]] + local s_Query = [[INSERT OR REPLACE INTO ]] .. m_DB_Header_Table_Name .. [[ (]] .. m_ProjectName_Text_Column_Name .. [[, ]] .. m_MapName_Text_Column_Name .. [[, ]] .. m_GameModeName_Text_Column_Name .. [[, ]] .. m_RequiredSuperBundles_Text_Column_Name .. [[, ]] .. m_RequiredBundles_Text_Column_Name .. [[, ]] .. m_TerrainLevelName_Text_Column_Name .. [[, ]] .. m_TimeStamp_Text_Column_Name .. [[) VALUES (?, ?, ?, ?, ?, ?, ?)]] m_Logger:Write("Inserting values:") - m_Logger:Write(p_ProjectName .. " | " .. p_MapName .. " | " .. p_GameModeName .. " | " .. p_RequiredBundlesJson .. " | " .. tostring(p_TimeStamp)) + m_Logger:Write(p_ProjectName .. " | " .. p_MapName .. " | " .. p_GameModeName .. " | " .. p_RequiredSuperBundlesJson .. " | " .. p_RequiredBundlesJson .. " | " .. p_TerrainLevelName .. " | " .. tostring(p_TimeStamp)) - if not SQL:Query(s_Query, p_ProjectName, p_MapName, p_GameModeName, p_RequiredBundlesJson, p_TimeStamp) then + if not SQL:Query(s_Query, p_ProjectName, p_MapName, p_GameModeName, p_RequiredSuperBundlesJson, p_RequiredBundlesJson, p_TerrainLevelName, p_TimeStamp) then m_Logger:Error('Failed to execute query: ' .. SQL:Error()) return false, 'Internal database error, check server output for more info' end @@ -157,7 +174,9 @@ function DataBaseManager:GetProjectHeaders() projectName = l_Row[m_ProjectName_Text_Column_Name], mapName = l_Row[m_MapName_Text_Column_Name], gameModeName = l_Row[m_GameModeName_Text_Column_Name], + requiredSuperBundles = json.decode(l_Row[m_RequiredSuperBundles_Text_Column_Name]), requiredBundles = json.decode(l_Row[m_RequiredBundles_Text_Column_Name]), + terrainLevelName = l_Row[m_TerrainLevelName_Text_Column_Name], timeStamp = l_Row[m_TimeStamp_Text_Column_Name], id = l_Row['id'] } @@ -183,7 +202,9 @@ function DataBaseManager:GetProjectHeader(p_ProjectId) projectName = s_ProjectHeaderRow[1][m_ProjectName_Text_Column_Name], mapName = s_ProjectHeaderRow[1][m_MapName_Text_Column_Name], gameModeName = s_ProjectHeaderRow[1][m_GameModeName_Text_Column_Name], + requiredSuperBundles = json.decode(s_ProjectHeaderRow[1][m_RequiredSuperBundles_Text_Column_Name]), requiredBundles = json.decode(s_ProjectHeaderRow[1][m_RequiredBundles_Text_Column_Name]), + terrainLevelName = s_ProjectHeaderRow[1][m_TerrainLevelName_Text_Column_Name], timeStamp = s_ProjectHeaderRow[1][m_TimeStamp_Text_Column_Name], id = s_ProjectHeaderRow[1]['id'] } @@ -259,11 +280,13 @@ function DataBaseManager:ImportProject(p_ProjectDataJSON) if s_Header.projectName == nil or s_Header.mapName == nil or s_Header.gameModeName == nil or - s_Header.requiredBundles == nil then + s_Header.requiredSuperBundles == nil or + s_Header.requiredBundles == nil or + s_Header.terrainLevelName == nil then return false, 'Save header missing necessary field(s)' end - return self:SaveProject(s_Header.projectName, s_Header.mapName, s_Header.gameModeName, s_Header.requiredBundles, s_Data) + return self:SaveProject(s_Header.projectName, s_Header.mapName, s_Header.gameModeName, s_Header.requiredSuperBundles, s_Header.requiredBundles, s_Header.terrainLevelName, s_Data) end function DataBaseManager:DeleteProject(p_ProjectId) diff --git a/ext/Server/ProjectManager.lua b/ext/Server/ProjectManager.lua index bc62b44b..7a96c59e 100644 --- a/ext/Server/ProjectManager.lua +++ b/ext/Server/ProjectManager.lua @@ -4,6 +4,55 @@ local m_Logger = Logger("ProjectManager", true) local m_IsLevelLoaded = false local m_LoadDelay = 0 +local m_SuperBundles = { + ["levels/coop_002/coop_002"] = true, + ["levels/coop_003/coop_003"] = true, + ["levels/coop_006/coop_006"] = true, + ["levels/coop_007/coop_007"] = true, + ["levels/coop_009/coop_009 "] = true, + ["levels/coop_010/coop_010"] = true, + ["levels/mp_001/mp_001"] = true, + ["levels/mp_003/mp_003"] = true, + ["levels/mp_007/mp_007"] = true, + ["levels/mp_011/mp_011"] = true, + ["levels/mp_012/mp_012"] = true, + ["levels/mp_013/mp_013"] = true, + ["levels/mp_017/mp_017"] = true, + ["levels/mp_018/mp_018"] = true, + ["levels/mp_subway/mp_subway"] = true, + ["levels/sp_bank/sp_bank"] = true, + ["levels/sp_earthquake/sp_earthquake"] = true, + ["levels/sp_earthquake2/sp_earthquake2"] = true, + ["levels/sp_finale/sp_finale"] = true, + ["levels/sp_jet/sp_jet"] = true, + ["levels/sp_new_york/sp_new_york"] = true, + ["levels/sp_paris/sp_paris"] = true, + ["levels/sp_sniper/sp_sniper"] = true, + ["levels/sp_tank/sp_tank"] = true, + ["levels/sp_tank_b/sp_tank_b"] = true, + ["levels/sp_valley/sp_valley"] = true, + ["levels/sp_villa/sp_villa"] = true, + ["levels/xp1_001/xp1_001"] = true, + ["levels/xp1_002/xp1_002"] = true, + ["levels/xp1_003/xp1_003"] = true, + ["levels/xp1_004/xp1_004"] = true, + ["levels/xp2_factory/xp2_factory"] = true, + ["levels/xp2_office/xp2_office"] = true, + ["levels/xp2_palace/xp2_palace"] = true, + ["levels/xp2_skybar/xp2_skybar"] = true, + ["levels/xp3_alborz/xp3_alborz"] = true, + ["levels/xp3_desert/xp3_desert"] = true, + ["levels/xp3_shield/xp3_shield"] = true, + ["levels/xp3_valley/xp3_valley"] = true, + ["levels/xp4_fd/xp4_fd"] = true, + ["levels/xp4_parl/xp4_parl"] = true, + ["levels/xp4_quake/xp4_quake"] = true, + ["levels/xp4_rubble/xp4_rubble"] = true, + ["levels/xp5_001/xp5_001"] = true, + ["levels/xp5_002/xp5_002"] = true, + ["levels/xp5_003/xp5_003"] = true, + ["levels/xp5_004/xp5_004"] = true +} function ProjectManager:__init() m_Logger:Write("Initializing ProjectManager") @@ -17,6 +66,7 @@ function ProjectManager:RegisterVars() self.m_MapName = nil self.m_GameMode = nil self.m_LoadedBundles = {} + self.m_LoadedSuperBundles = {} end function ProjectManager:RegisterEvents() @@ -30,9 +80,61 @@ function ProjectManager:RegisterEvents() end function ProjectManager:OnLoadBundles(p_Bundles, p_Compartment) + if not self:IsLevelBundle(p_Bundles) then + return + end + + for _, l_Bundle in pairs(p_Bundles) do + if l_Bundle ~= SharedUtils:GetLevelName() then + if l_Bundle:match("xp1_") then + self.m_LoadedSuperBundles["xp1chunks"] = true + elseif l_Bundle:match("xp2_") then + self.m_LoadedSuperBundles["xp2chunks"] = true + elseif l_Bundle:match("xp3_") then + self.m_LoadedSuperBundles["xp3chunks"] = true + elseif l_Bundle:match("xp4_") then + self.m_LoadedSuperBundles["xp4chunks"] = true + elseif l_Bundle:match("xp5_") then + self.m_LoadedSuperBundles["xp5chunks"] = true + elseif l_Bundle:match("coop_") or l_Bundle:match("sp_") then + self.m_LoadedSuperBundles["spchunks"] = true + end + + if m_SuperBundles[l_Bundle] ~= nil then + self.m_LoadedSuperBundles[l_Bundle] = true + end + + self.m_LoadedBundles[l_Bundle] = true + end + end + + local s_Bundle = SharedUtils:GetLevelName() + + if s_Bundle:match("xp1_") then + self.m_LoadedSuperBundles["xp1chunks"] = nil + elseif s_Bundle:match("xp2_") then + self.m_LoadedSuperBundles["xp2chunks"] = nil + elseif s_Bundle:match("xp3_") then + self.m_LoadedSuperBundles["xp3chunks"] = nil + elseif s_Bundle:match("xp4_") then + self.m_LoadedSuperBundles["xp4chunks"] = nil + elseif s_Bundle:match("xp5_") then + self.m_LoadedSuperBundles["xp5chunks"] = nil + elseif s_Bundle:match("coop_") or s_Bundle:match("sp_") then + self.m_LoadedSuperBundles["spchunks"] = nil + self.m_LoadedSuperBundles["mpchunks"] = true + end +end + + +function ProjectManager:IsLevelBundle(p_Bundles) for _, l_Bundle in pairs(p_Bundles) do - self.m_LoadedBundles[l_Bundle] = true + if l_Bundle == SharedUtils:GetLevelName() then + return true + end end + + return false end function ProjectManager:OnRequestProjectHeaders(p_Player) @@ -200,7 +302,7 @@ function ProjectManager:SaveProjectCoroutine(p_ProjectSaveData) gameModeName = self.m_GameMode, requiredBundles = self.m_RequiredBundles } - local s_Success, s_Msg = DataBaseManager:SaveProject(p_ProjectSaveData.projectName, self.m_CurrentProjectHeader.mapName, self.m_CurrentProjectHeader.gameModeName, self.m_LoadedBundles, s_GameObjectSaveDatas) + local s_Success, s_Msg = DataBaseManager:SaveProject(p_ProjectSaveData.projectName, self.m_CurrentProjectHeader.mapName, self.m_CurrentProjectHeader.gameModeName, self.m_LoadedSuperBundles, self.m_LoadedBundles, self.m_CurrentProjectHeader.mapName, s_GameObjectSaveDatas) if s_Success then NetEvents:BroadcastLocal("MapEditorClient:ReceiveProjectHeaders", DataBaseManager:GetProjectHeaders()) diff --git a/ext/Server/__init__.lua b/ext/Server/__init__.lua index a1e0c631..9291d677 100644 --- a/ext/Server/__init__.lua +++ b/ext/Server/__init__.lua @@ -28,8 +28,11 @@ function MapEditorServer:RegisterEvents() Events:Subscribe('Partition:Loaded', self, self.OnPartitionLoaded) Events:Subscribe('Player:Chat', self, self.OnChat) Events:Subscribe('Player:Authenticated', self, self.OnPlayerAuthenticated) + Events:Subscribe('Level:LoadResources', self, self.OnLevelLoadResources) Hooks:Install('ResourceManager:LoadBundles', 999, self, self.OnLoadBundles) + Hooks:Install('Terrain:Load', 1, self, self.OnTerrainLoad) + Hooks:Install('VisualTerrain:Load', 1, self, self.OnTerrainLoad) Hooks:Install('EntityFactory:CreateFromBlueprint', 999, self, self.OnEntityCreateFromBlueprint) Hooks:Install('EntityFactory:Create', 999, self, self.OnEntityCreate) end @@ -92,6 +95,14 @@ function MapEditorServer:OnEntityCreate(p_Hook, p_EntityData, p_Transform) GameObjectManager:OnEntityCreate(p_Hook, p_EntityData, p_Transform ) end +function MapEditorServer:OnLevelLoadResources(p_LevelName, p_GameMode, p_IsDedicatedServer) + EditorCommon:OnLevelLoadResources(ProjectManager.m_CurrentProjectHeader) +end + +function MapEditorServer:OnTerrainLoad(p_HookCtx, p_AssetName) + EditorCommon:OnTerrainLoad(p_HookCtx, p_AssetName, ProjectManager.m_CurrentProjectHeader) +end + function MapEditorServer:OnLoadBundles(p_Hook, p_Bundles, p_Compartment) EditorCommon:OnLoadBundles(p_Hook, p_Bundles, p_Compartment, ProjectManager.m_CurrentProjectHeader) ProjectManager:OnLoadBundles(p_Bundles, p_Compartment) diff --git a/ext/Shared/EditorCommon.lua b/ext/Shared/EditorCommon.lua index bfc6fd07..43387aab 100644 --- a/ext/Shared/EditorCommon.lua +++ b/ext/Shared/EditorCommon.lua @@ -6,22 +6,82 @@ function EditorCommon:__init() m_Logger:Write("Initializing EditorCommon") end +function EditorCommon:OnLevelLoadResources(p_ProjectHeader) + if p_ProjectHeader == nil then + return + end + + if p_ProjectHeader.requiredSuperBundles == nil then + return + end + + for l_SuperBundle, l_IsRequired in pairs(p_ProjectHeader.requiredSuperBundles) do + if l_IsRequired then + print("MountSuperBundle: " .. l_SuperBundle) + ResourceManager:MountSuperBundle(l_SuperBundle) + end + end +end + +function EditorCommon:OnTerrainLoad(p_HookCtx, p_AssetName, p_ProjectHeader) + if p_ProjectHeader == nil then + return + end + + if p_ProjectHeader.terrainLevelName == nil then + return + end + + if not p_AssetName:match(p_ProjectHeader.terrainLevelName) then + p_HookCtx:Return() + end +end + function EditorCommon:OnLoadBundles(p_Hook, p_Bundles, p_Compartment, p_ProjectHeader) if p_ProjectHeader == nil then return end - -- Catch the earliest possible bundle. Both server & client. - if p_Bundles[1] == "gameconfigurations/game" or p_Bundles[1] == "UI/Flow/Bundle/LoadingBundleMp" then - -- Mount your superbundle and bundles.. + if p_ProjectHeader.requiredBundles == nil then + return + end - -- for _, l_BundleName in pairs(p_ProjectHeader.requiredBundles) do - -- local s_Bundle = Bundles[l_BundleName] -- Bundles doesnt exit yet + if not self:IsLevelBundle(p_Bundles) then + return + end - -- Events:Dispatch('BundleMounter:LoadBundles', s_Bundle.superBundle, s_Bundle.path) - -- -- TODO Might make sense to gather all bundles of a superbundle and send them together, but not sure if worth the effort - -- end + for l_Bundle, l_IsRequired in pairs(p_ProjectHeader.requiredBundles) do + if l_IsRequired then + if not self:IsBundleInList(p_Bundles, l_Bundle) then + print("Add to bundle: " .. l_Bundle) + table.insert(p_Bundles, l_Bundle) + end + end end + + print("Pass bundles") + p_Hook:Pass(p_Hook, p_Bundles, p_Compartment) end +function EditorCommon:IsLevelBundle(p_Bundles) + for _, l_Bundle in pairs(p_Bundles) do + if l_Bundle == SharedUtils:GetLevelName() then + return true + end + end + + return false +end + +function EditorCommon:IsBundleInList(p_Bundles, p_BundleToCheck) + for _, l_Bundle in pairs(p_Bundles) do + if l_Bundle == p_BundleToCheck then + return true + end + end + + return false +end + + return EditorCommon From 491855030393005a3827dbe6e27b5d65c803c16c Mon Sep 17 00:00:00 2001 From: FlashHit <56718716+FlashHit@users.noreply.github.com> Date: Sun, 15 Aug 2021 20:08:17 +0200 Subject: [PATCH 2/4] fix (ProjectManager): mapList.add was incorrect --- ext/Server/ProjectManager.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ext/Server/ProjectManager.lua b/ext/Server/ProjectManager.lua index 7a96c59e..586334b5 100644 --- a/ext/Server/ProjectManager.lua +++ b/ext/Server/ProjectManager.lua @@ -265,7 +265,7 @@ function ProjectManager:OnRequestProjectLoad(p_Player, p_ProjectId) RCON:SendCommand('mapList.restartRound') else RCON:SendCommand('mapList.clear') - local out = RCON:SendCommand('mapList.add ' .. s_MapName .. ' ' .. s_GameModeName .. ' 1') -- TODO: add proper map / gameplay support + local out = RCON:SendCommand('mapList.add', {s_MapName, s_GameModeName, '1'}) -- TODO: add proper map / gameplay support RCON:SendCommand('mapList.runNextRound') end end From dde966784b452af734b0088a29cc78e71f773dc6 Mon Sep 17 00:00:00 2001 From: FlashHit <56718716+FlashHit@users.noreply.github.com> Date: Sun, 15 Aug 2021 21:26:57 +0200 Subject: [PATCH 3/4] fix bugs - fix client missing currentProjectHeader - fix infinite loop in creating level - fix ProjectManager didn't receive bundles TODO: a proper order for the bundles and superbundles. atm there is a mismatch between client and server. --- ext/Client/Editor.lua | 5 +++++ ext/Client/__init__.lua | 6 +++++- ext/Server/__init__.lua | 6 ++++-- ext/Shared/EditorCommon.lua | 33 +++++++++++++++++++++++++-------- 4 files changed, 39 insertions(+), 11 deletions(-) diff --git a/ext/Client/Editor.lua b/ext/Client/Editor.lua index 4e9fbd8e..91d4a190 100644 --- a/ext/Client/Editor.lua +++ b/ext/Client/Editor.lua @@ -15,6 +15,11 @@ function Editor:RegisterVars() self.m_CameraTransform = nil --self.m_LevelLoaded = false + self.m_CurrentProjectHeader = nil +end + +function Editor:SetProjectHeaders(p_CurrentProjectHeader) + self.m_CurrentProjectHeader = p_CurrentProjectHeader end function Editor:OnEngineMessage(p_Message) diff --git a/ext/Client/__init__.lua b/ext/Client/__init__.lua index a598024f..b7729feb 100644 --- a/ext/Client/__init__.lua +++ b/ext/Client/__init__.lua @@ -138,7 +138,9 @@ function MapEditorClient:OnLoadBundles(p_Hook, p_Bundles, p_Compartment) end WebUI:ExecuteJS(string.format("vext.SetLoadingInfo('Mounting bundles: %s')", tostring(s_LoadingInfo))) - EditorCommon:OnLoadBundles(p_Hook, p_Bundles, p_Compartment, Editor.m_CurrentProjectHeader) + local s_Bundles = EditorCommon:OnLoadBundles(p_Hook, p_Bundles, p_Compartment, Editor.m_CurrentProjectHeader) + + p_Hook:Pass(s_Bundles, p_Compartment) end function MapEditorClient:OnEntityCreate(p_Hook, p_EntityData, p_Transform ) @@ -184,10 +186,12 @@ function MapEditorClient:OnUIReloaded() end function MapEditorClient:OnReceiveProjectHeaders(p_ProjectHeaders) + Editor:SetProjectHeaders(p_ProjectHeaders) WebUpdater:AddUpdate('SetProjectHeaders', p_ProjectHeaders) end function MapEditorClient:OnReceiveCurrentProjectHeader(p_CurrentProjectHeader) + Editor:SetProjectHeaders(p_CurrentProjectHeader) WebUpdater:AddUpdate('SetCurrentProjectHeader', p_CurrentProjectHeader) end diff --git a/ext/Server/__init__.lua b/ext/Server/__init__.lua index 9291d677..19edfd20 100644 --- a/ext/Server/__init__.lua +++ b/ext/Server/__init__.lua @@ -104,8 +104,10 @@ function MapEditorServer:OnTerrainLoad(p_HookCtx, p_AssetName) end function MapEditorServer:OnLoadBundles(p_Hook, p_Bundles, p_Compartment) - EditorCommon:OnLoadBundles(p_Hook, p_Bundles, p_Compartment, ProjectManager.m_CurrentProjectHeader) - ProjectManager:OnLoadBundles(p_Bundles, p_Compartment) + local s_Bundles = EditorCommon:OnLoadBundles(p_Hook, p_Bundles, p_Compartment, ProjectManager.m_CurrentProjectHeader) + ProjectManager:OnLoadBundles(s_Bundles, p_Compartment) + + p_Hook:Pass(s_Bundles, p_Compartment) end function MapEditorServer:OnPlayerAuthenticated(p_Player) diff --git a/ext/Shared/EditorCommon.lua b/ext/Shared/EditorCommon.lua index 43387aab..eee816e2 100644 --- a/ext/Shared/EditorCommon.lua +++ b/ext/Shared/EditorCommon.lua @@ -15,12 +15,22 @@ function EditorCommon:OnLevelLoadResources(p_ProjectHeader) return end + local s_SortedSuperBundles = {} + for l_SuperBundle, l_IsRequired in pairs(p_ProjectHeader.requiredSuperBundles) do if l_IsRequired then - print("MountSuperBundle: " .. l_SuperBundle) - ResourceManager:MountSuperBundle(l_SuperBundle) + if l_SuperBundle:match("chunks") then + table.insert(s_SortedSuperBundles, 1, l_SuperBundle) + else + table.insert(s_SortedSuperBundles, l_SuperBundle) + end end end + + for _, l_SuperBundle in pairs(s_SortedSuperBundles) do + print("MountSuperBundle: " .. l_SuperBundle) + ResourceManager:MountSuperBundle(l_SuperBundle) + end end function EditorCommon:OnTerrainLoad(p_HookCtx, p_AssetName, p_ProjectHeader) @@ -38,29 +48,36 @@ function EditorCommon:OnTerrainLoad(p_HookCtx, p_AssetName, p_ProjectHeader) end function EditorCommon:OnLoadBundles(p_Hook, p_Bundles, p_Compartment, p_ProjectHeader) + local s_Bundles = {} + if p_ProjectHeader == nil then - return + return s_Bundles end if p_ProjectHeader.requiredBundles == nil then - return + return s_Bundles end if not self:IsLevelBundle(p_Bundles) then - return + return s_Bundles + end + + + for _, p_Bundle in pairs(p_Bundles) do + table.insert(s_Bundles, p_Bundle) end for l_Bundle, l_IsRequired in pairs(p_ProjectHeader.requiredBundles) do if l_IsRequired then - if not self:IsBundleInList(p_Bundles, l_Bundle) then + if not self:IsBundleInList(s_Bundles, l_Bundle) then print("Add to bundle: " .. l_Bundle) - table.insert(p_Bundles, l_Bundle) + table.insert(s_Bundles, 1, l_Bundle) end end end print("Pass bundles") - p_Hook:Pass(p_Hook, p_Bundles, p_Compartment) + return s_Bundles end function EditorCommon:IsLevelBundle(p_Bundles) From 5a5e9217a5e958bcedaf04369ff72a3e0b33b2ec Mon Sep 17 00:00:00 2001 From: FlashHit <56718716+FlashHit@users.noreply.github.com> Date: Thu, 10 Mar 2022 12:58:36 +0100 Subject: [PATCH 4/4] fix(EditorCommon): fix typo --- ext/Shared/EditorCommon.lua | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ext/Shared/EditorCommon.lua b/ext/Shared/EditorCommon.lua index f2246dee..2470e3eb 100644 --- a/ext/Shared/EditorCommon.lua +++ b/ext/Shared/EditorCommon.lua @@ -52,15 +52,15 @@ function EditorCommon:OnLoadBundles(p_Hook, p_Bundles, p_Compartment, p_ProjectH local s_Bundles = {} if p_ProjectHeader == nil then - return s_Bundles + return p_Bundles end if p_ProjectHeader.requiredBundles == nil then - return s_Bundles + return p_Bundles end if not self:IsLevelBundle(p_Bundles) then - return s_Bundles + return p_Bundles end