From 3bc3c3015c528335d09cc0d37154d5a5a83a5d5f Mon Sep 17 00:00:00 2001 From: Sorata <39014375+q8X@users.noreply.github.com> Date: Sat, 13 Sep 2025 10:00:38 +0300 Subject: [PATCH] Fixes an issue when loading a small map the settings gets overwritten This happens because smaller maps load faster before the event reaches the client, this check will prevent map settings from being overwritten when EDF is loaded --- .../client/mapsettings_gamemodesettings.lua | 26 ++++++++++++------- [editor]/editor_main/server/EDFhandler.lua | 9 ++++--- 2 files changed, 22 insertions(+), 13 deletions(-) diff --git a/[editor]/editor_gui/client/mapsettings_gamemodesettings.lua b/[editor]/editor_gui/client/mapsettings_gamemodesettings.lua index 6b62b0c98..bb9860052 100644 --- a/[editor]/editor_gui/client/mapsettings_gamemodesettings.lua +++ b/[editor]/editor_gui/client/mapsettings_gamemodesettings.lua @@ -5,27 +5,33 @@ mapsettings.gamemodeSettings = {} local valueWidget local isHandled addEventHandler ( "doLoadEDF", root, -function(tableEDF, resource) +function(tableEDF, resource, isMapLoading) --store all our data neatly under the resource edfSettings[resource] = tableEDF["settings"] refreshGamemodeSettings() --send back the intepreted gui table so the server knows the settings !!Lazy, server could interpret this info or only one client could send it - mapsettings.gamemodeSettings = copyTable ( mapsettings.rowValues ) - currentMapSettings.rowData = rowData - currentMapSettings.gamemodeSettings = mapsettings.gamemodeSettings - triggerServerEvent ( "doSaveMapSettings", localPlayer, currentMapSettings, true ) + -- prevent edf from overwriting map settings while the map is being loaded + if not isMapLoading then + mapsettings.gamemodeSettings = copyTable ( mapsettings.rowValues ) + currentMapSettings.rowData = rowData + currentMapSettings.gamemodeSettings = mapsettings.gamemodeSettings + triggerServerEvent ( "doSaveMapSettings", localPlayer, currentMapSettings, true ) + end end ) addEventHandler ( "doUnloadEDF", root, -function(resource) +function(resource, isMapLoading) --store all our data neatly under the resource edfSettings[resource] = nil refreshGamemodeSettings() --send back the intepreted gui table so the server knows the settings !!Lazy, server could interpret this info or only one client could send it - mapsettings.gamemodeSettings = copyTable ( mapsettings.rowValues ) - currentMapSettings.rowData = rowData - currentMapSettings.gamemodeSettings = mapsettings.gamemodeSettings - triggerServerEvent ( "doSaveMapSettings", localPlayer, currentMapSettings, true ) + -- prevent edf from overwriting map settings while the map is being loaded + if not isMapLoading then + mapsettings.gamemodeSettings = copyTable ( mapsettings.rowValues ) + currentMapSettings.rowData = rowData + currentMapSettings.gamemodeSettings = mapsettings.gamemodeSettings + triggerServerEvent ( "doSaveMapSettings", localPlayer, currentMapSettings, true ) + end end ) function refreshGamemodeSettings() diff --git a/[editor]/editor_main/server/EDFhandler.lua b/[editor]/editor_main/server/EDFhandler.lua index 96202a58e..ecf3892c9 100644 --- a/[editor]/editor_main/server/EDFhandler.lua +++ b/[editor]/editor_main/server/EDFhandler.lua @@ -33,7 +33,8 @@ function registerEDF( resource ) loadedEDF[resource] = edf.edfGetDefinition(resource) for i, player in ipairs(getElementsByType"player") do if clientGUILoaded[player] then - triggerClientEvent ( player, "doLoadEDF", root, loadedEDF[resource], getResourceName ( resource ) ) + local isMapLoading = isEditorOpeningResource() + triggerClientEvent ( player, "doLoadEDF", root, loadedEDF[resource], getResourceName ( resource ), isMapLoading ) end end end @@ -45,7 +46,8 @@ addEventHandler ( "onEDFUnload", root, loadedEDF[resource] = nil for i, player in ipairs(getElementsByType"player") do if clientGUILoaded[player] then - triggerClientEvent ( player, "doUnloadEDF", root, getResourceName ( resource ) ) + local isMapLoading = isEditorOpeningResource() + triggerClientEvent ( player, "doUnloadEDF", root, getResourceName ( resource ), isMapLoading ) end end end @@ -54,7 +56,8 @@ addEventHandler ( "onEDFUnload", root, local function sendEDF() clientGUILoaded[source] = true for resource, resourceDefinition in pairs(loadedEDF) do - triggerClientEvent ( source, "doLoadEDF", root, resourceDefinition, getResourceName ( resource ) ) + local isMapLoading = isEditorOpeningResource() + triggerClientEvent ( source, "doLoadEDF", root, resourceDefinition, getResourceName ( resource ), isMapLoading ) end end addEventHandler ( "onClientGUILoaded", root, sendEDF)