From 279d42c6718dad5ecf872d4e4c7893da818430e0 Mon Sep 17 00:00:00 2001 From: schwiti6190 <58079399+schwiti6190@users.noreply.github.com> Date: Wed, 30 Dec 2020 03:10:41 +0100 Subject: [PATCH] GlobalSettings MP bugfix and AutoRepairSetting (#6580) * GlobalSettings MP bugfix and AutoRepairSetting - added AutoRepairSetting to enable automatic repair while driving - fixes GlobalSettings sync in MP * typo autodrive fix Co-authored-by: Peter Vaiko --- CombineUnloadAIDriver.lua | 8 +++-- Events/GlobalSettingsEvent.lua | 60 ++++++++++++++++++++++++++++++++ Events/SettingsListEvent.lua | 12 +++---- FieldworkAIDriver.lua | 2 ++ GlobalSettings.lua | 29 +++++++++++++++ base.lua | 2 +- course-generator/HybridAStar.lua | 4 ++- courseplay.lua | 3 +- gui/GlobalSettingsPage.xml | 9 ++--- modDesc.xml | 2 +- settings.lua | 39 ++++++++++++++------- toolManager.lua | 1 + translations/translation_br.xml | 6 ++++ translations/translation_cs.xml | 6 ++++ translations/translation_cz.xml | 12 +++++-- translations/translation_de.xml | 5 +++ translations/translation_en.xml | 5 +++ translations/translation_es.xml | 6 ++++ translations/translation_fr.xml | 6 ++++ translations/translation_hu.xml | 6 ++++ translations/translation_it.xml | 6 ++++ translations/translation_jp.xml | 6 ++++ translations/translation_nl.xml | 6 ++++ translations/translation_pl.xml | 6 ++++ translations/translation_pt.xml | 6 ++++ translations/translation_ru.xml | 6 ++++ translations/translation_sl.xml | 6 ++++ 27 files changed, 232 insertions(+), 33 deletions(-) create mode 100644 Events/GlobalSettingsEvent.lua diff --git a/CombineUnloadAIDriver.lua b/CombineUnloadAIDriver.lua index 6803af36d..9abeca589 100644 --- a/CombineUnloadAIDriver.lua +++ b/CombineUnloadAIDriver.lua @@ -2093,9 +2093,11 @@ function CombineUnloadAIDriver.disableProximitySensorForNonCourseplayDriver(unlo local d = calcDistanceFrom(unloader.rootNode, vehicle.rootNode) if d < CombineUnloadAIDriver.safeManeuveringDistance then vehicle.cp.driver:ignoreVehicleProximity(unloader, 3000) - if g_updateLoopIndex % 500 == 0 then - courseplay.infoVehicle(vehicle, 'Proximity sensor deactivated for player driven %s', nameNum(unloader)) - end + --TODO: figure out a possible debug channel, if needed + + --if g_updateLoopIndex % 500 == 0 then + --courseplay.infoVehicle(vehicle, 'Proximity sensor deactivated for player driven %s', nameNum(unloader)) + --end end end end diff --git a/Events/GlobalSettingsEvent.lua b/Events/GlobalSettingsEvent.lua new file mode 100644 index 000000000..1f1241193 --- /dev/null +++ b/Events/GlobalSettingsEvent.lua @@ -0,0 +1,60 @@ + +GlobalSettingsEvent = {}; +local GlobalSettingsEvent_mt = Class(GlobalSettingsEvent, Event); +InitEventClass(GlobalSettingsEvent, "GlobalSettingsEvent"); +function GlobalSettingsEvent:emptyNew() + local self = Event:new(GlobalSettingsEvent_mt); + self.className = "GlobalSettingsEvent"; + return self; +end + +function GlobalSettingsEvent:new(parentName, name, value) + courseplay:debug(string.format("GlobalSettingsEvent:new %s, %s, %s)", tostring(parentName),tostring(name), tostring(value)), 5) + self.parentName = parentName + self.name = name + self.value = value; + return self; +end + +function GlobalSettingsEvent:writeStream(streamId, connection) + courseplay:debug("SettingsListEvent:writeStream()",5) + courseplay:debug(('parentName:%s, name:%s, value:%s'):format(tostring(self.parentName), tostring(self.name), tostring(self.value)), 5); + + streamWriteString(streamId, self.parentName) + streamWriteString(streamId, self.name) + streamWriteInt32(streamId, self.value) +end + +function GlobalSettingsEvent:readStream(streamId, connection) + self.parentName = streamReadString(streamId) + self.name = streamReadString(streamId) + self.value = streamReadInt32(streamId) + + courseplay:debug("GlobalSettingsEvent:readStream()",5) + courseplay:debug(('parentName:%s, name:%s, value:%s'):format(tostring(self.parentName), tostring(self.name), tostring(self.value)), 5); + + self:run(connection) +end + +function GlobalSettingsEvent:run(connection) + courseplay:debug("GlobalSettingsEvent:run()",5) + courseplay:debug(('parentName:%s, name:%s, value:%s'):format(tostring(self.parentName), tostring(self.name), tostring(self.value)), 5); + courseplay[self.parentName][self.name]:setFromNetwork(self.value) + + if not connection:getIsServer() then + courseplay:debug("broadcast GlobalSettingsEvent",5) + g_server:broadcastEvent(GlobalSettingsEvent:new(self.parentName, self.name, self.value), nil, connection); + end; +end + +function GlobalSettingsEvent.sendEvent(parentName, name, value) + if g_server == nil then + courseplay:debug("send GlobalSettingsEvent", 5) + courseplay:debug(('parentName:%s, name:%s, value:%s'):format(tostring(parentName), tostring(name), tostring(value)), 5); + g_client:getServerConnection():sendEvent(GlobalSettingsEvent:new(parentName, name, value)) + else + courseplay:debug("broadcast GlobalSettingsEvent", 5) + courseplay:debug(('parentName:%s, name:%s, value:%s'):format(tostring(parentName), tostring(name), tostring(value)), 5); + g_server:broadcastEvent(GlobalSettingsEvent:new(parentName, name, value)) + end +end \ No newline at end of file diff --git a/Events/SettingsListEvent.lua b/Events/SettingsListEvent.lua index dbd0dd10b..334401ccd 100644 --- a/Events/SettingsListEvent.lua +++ b/Events/SettingsListEvent.lua @@ -13,7 +13,7 @@ function SettingsListEvent:emptyNew() end function SettingsListEvent:new(vehicle,parentName, name, value) - courseplay:debug(string.format("SettingsListEvent:new(%s, %s, %s, %s)",tostring(vehicle), tostring(name),tostring(parentName), tostring(value)), 5) + courseplay:debug(string.format("SettingsListEvent:new(%s, %s, %s, %s)",nameNum(vehicle), tostring(name),tostring(parentName), tostring(value)), 5) self.vehicle = nil self.vehicle = vehicle; self.parentName = parentName @@ -35,14 +35,14 @@ function SettingsListEvent:readStream(streamId, connection) -- wird aufgerufen w self.value = streamReadInt32(streamId) courseplay:debug("SettingsListEvent:readStream()",5) - courseplay:debug(('vehicle:%s, parentName:%s, name:%s, value:%s'):format(tostring(self.vehicle),tostring(self.parentName), tostring(self.name), tostring(self.value)), 5); + courseplay:debug(('vehicle:%s, parentName:%s, name:%s, value:%s'):format(nameNum(self.vehicle),tostring(self.parentName), tostring(self.name), tostring(self.value)), 5); self:run(connection); end function SettingsListEvent:writeStream(streamId, connection) -- Wird aufgrufen wenn ich ein event verschicke (merke: reihenfolge der Daten muss mit der bei readStream uebereinstimmen courseplay:debug("SettingsListEvent:writeStream()",5) - courseplay:debug(('vehicle:%s, parentName:%s, name:%s, value:%s'):format(tostring(self.vehicle),tostring(self.parentName), tostring(self.name), tostring(self.value)), 5); + courseplay:debug(('vehicle:%s, parentName:%s, name:%s, value:%s'):format(nameNum(self.vehicle),tostring(self.parentName), tostring(self.name), tostring(self.value)), 5); if self.vehicle ~= nil then courseplay:debug("vehicle specific Setting",5) streamWriteBool(streamId, true) @@ -58,7 +58,7 @@ end function SettingsListEvent:run(connection) -- wir fuehren das empfangene event aus courseplay:debug("SettingsListEvent:run()",5) - courseplay:debug(('vehicle:%s, parentName:%s, name:%s, value:%s'):format(tostring(self.vehicle),tostring(self.parentName), tostring(self.name), tostring(self.value)), 5); + courseplay:debug(('vehicle:%s, parentName:%s, name:%s, value:%s'):format(nameNum(self.vehicle),tostring(self.parentName), tostring(self.name), tostring(self.value)), 5); if self.vehicle then courseplay:debug("vehicle specific Setting",5) @@ -76,11 +76,11 @@ end function SettingsListEvent.sendEvent(vehicle,parentName, name, value) if g_server ~= nil then courseplay:debug("broadcast SettingsListEvent", 5) - courseplay:debug(('vehicle:%s, parentName:%s, name:%s, value:%s'):format(tostring(vehicle), tostring(parentName), tostring(name), tostring(value)), 5); + courseplay:debug(('vehicle:%s, parentName:%s, name:%s, value:%s'):format(nameNum(vehicle), tostring(parentName), tostring(name), tostring(value)), 5); g_server:broadcastEvent(SettingsListEvent:new(vehicle,parentName, name, value), nil, nil, vehicle); else courseplay:debug("send SettingsListEvent", 5) - courseplay:debug(('vehicle:%s, parentName:%s, name:%s, value:%s'):format(tostring(vehicle), tostring(parentName),tostring(name), tostring(value)), 5); + courseplay:debug(('vehicle:%s, parentName:%s, name:%s, value:%s'):format(nameNum(vehicle), tostring(parentName),tostring(name), tostring(value)), 5); g_client:getServerConnection():sendEvent(SettingsListEvent:new(vehicle,parentName, name, value)); end; end diff --git a/FieldworkAIDriver.lua b/FieldworkAIDriver.lua index 1163a56b6..b5f4e1bd2 100644 --- a/FieldworkAIDriver.lua +++ b/FieldworkAIDriver.lua @@ -477,6 +477,7 @@ function FieldworkAIDriver:stopAndRefuel() self:stopWork() self:foldImplements() self.state = self.states.ON_UNLOAD_OR_REFILL_WITH_AUTODRIVE + self.triggerHandler:disableFuelLoading() self:debug('passing the control to AutoDrive to run the fuel refill course.') self.vehicle.spec_autodrive:StartDrivingWithPathFinder(self.vehicle, self.vehicle.ad.mapMarkerSelected, -2, self, FieldworkAIDriver.onEndCourse, nil); end @@ -567,6 +568,7 @@ function FieldworkAIDriver:onEndCourse() if self.state == self.states.ON_UNLOAD_OR_REFILL_COURSE or self.state == self.states.ON_UNLOAD_OR_REFILL_WITH_AUTODRIVE then -- unload/refill course ended, return to fieldwork + self.triggerHandler:enableFuelLoading() self:debug('AI driver in mode %d continue fieldwork at %d/%d waypoints', self:getMode(), self.aiDriverData.continueFieldworkAtWaypoint, self.fieldworkCourse:getNumberOfWaypoints()) self:startFieldworkWithPathfinding(self.aiDriverData.continueFieldworkAtWaypoint) elseif self.state == self.states.RETURNING_TO_FIRST_POINT then diff --git a/GlobalSettings.lua b/GlobalSettings.lua index 8cab89d8d..134650720 100644 --- a/GlobalSettings.lua +++ b/GlobalSettings.lua @@ -62,3 +62,32 @@ function ShowMiniHudSetting:init() -- set default while we are transitioning from the the old setting to this new one self:set(false) end + + +---@class AutoRepairSetting : SettingList +AutoRepairSetting = CpObject(SettingList) +AutoRepairSetting.OFF = 0 +function AutoRepairSetting:init() + SettingList.init(self, 'autoRepair', 'COURSEPLAY_AUTOREPAIR', 'COURSEPLAY_AUTOREPAIR_TOOLTIP', nil, + {AutoRepairSetting.OFF, 25, 70, 99}, + {'COURSEPLAY_AUTOREPAIR_OFF', '< 25%', '< 70%', 'COURSEPALY_AUTOREPAIR_ALWAYS'} + ) + self:set(0) +end + +function AutoRepairSetting:isAutoRepairActive() + return self:get() ~= AutoRepairSetting.OFF +end + +function AutoRepairSetting:onUpdateTick(dt, isActive, isActiveForInput, isSelected) + local rootVehicle = self:getRootVehicle() + if courseplay:isAIDriverActive(rootVehicle) then + if courseplay.globalSettings.autoRepair:isAutoRepairActive() then + local repairStatus = (1 - self:getWearTotalAmount())*100 + if repairStatus < courseplay.globalSettings.autoRepair:get() then + self:repairVehicle() + end + end + end +end +Wearable.onUpdateTick = Utils.appendedFunction(Wearable.onUpdateTick, AutoRepairSetting.onUpdateTick) \ No newline at end of file diff --git a/base.lua b/base.lua index 92aa4ce2e..aa75ae65e 100644 --- a/base.lua +++ b/base.lua @@ -109,7 +109,6 @@ function courseplay:onLoad(savegame) self.cp.generationPosition = {} self.cp.generationPosition.hasSavedPosition = false - -- Visual i3D waypoint signs self.cp.signs = { crossing = {}; @@ -405,6 +404,7 @@ function courseplay:onLoad(savegame) courseplay:validateCanSwitchMode(self); -- TODO: all vehicle specific settings (HUD or advanced settings dialog) should be moved here + -- TODO: make sure every non global setting, has the vehicle table (self) for multiplayer sync ---@type SettingsContainer self.cp.settings = SettingsContainer("settings") self.cp.settings:addSetting(SearchCombineOnFieldSetting, self) diff --git a/course-generator/HybridAStar.lua b/course-generator/HybridAStar.lua index 16c6516df..55d7ca829 100644 --- a/course-generator/HybridAStar.lua +++ b/course-generator/HybridAStar.lua @@ -497,7 +497,9 @@ function HybridAStar:findPath(start, goal, turnRadius, allowReverse, constraints analyticPath[1]:setTrailerHeading(pred:getTrailerHeading()) State3D.calculateTrailerHeadings(analyticPath, hitchLength) if self:isPathValid(analyticPath) then - State3D.printPath(analyticPath, 'ANALYTIC') + --TODO: figure out a possible debug channel, if needed + + --State3D.printPath(analyticPath, 'ANALYTIC') self:debug('Found collision free analytic path (%s) at iteration %d', pathType, self.iterations) -- remove first node of returned analytic path as it is the same as pred table.remove(analyticPath, 1) diff --git a/courseplay.lua b/courseplay.lua index f3c021c96..a362b92ed 100644 --- a/courseplay.lua +++ b/courseplay.lua @@ -130,6 +130,7 @@ local function initialize() 'Events/SiloSelectedFillTypeEvent', 'Events/StartStopWorkEvent', 'Events/SettingsListEvent', + 'Events/GlobalSettingsEvent', 'Events/AssignedCombinesEvents', 'Events/CourseEvent', 'Events/InfoTextEvent', @@ -319,7 +320,7 @@ local function setGlobalData() courseplay.globalSettings:addSetting(ClickToSwitchSetting) courseplay.globalSettings:addSetting(ShowMiniHudSetting) courseplay.globalSettings:addSetting(EnableOpenHudWithMouseGlobalSetting) - + courseplay.globalSettings:addSetting(AutoRepairSetting) courseplay.globalCourseGeneratorSettings = SettingsContainer.createGlobalCourseGeneratorSettings() courseplay.globalPathfinderSettings = SettingsContainer.createGlobalPathfinderSettings() diff --git a/gui/GlobalSettingsPage.xml b/gui/GlobalSettingsPage.xml index afa77db0f..c72422033 100644 --- a/gui/GlobalSettingsPage.xml +++ b/gui/GlobalSettingsPage.xml @@ -58,19 +58,20 @@ + - - CoursePlay SIX diff --git a/settings.lua b/settings.lua index dee0094e6..dcd9fc5d9 100644 --- a/settings.lua +++ b/settings.lua @@ -1410,13 +1410,17 @@ function IntSetting:set(value,noEventSend) self.value = value if noEventSend == nil or noEventSend == false then if self.syncValue then - SettingsListEvent.sendEvent(self.vehicle,self.parentName, self.name, value) + self:sendEvent(value) end end self:onChange() end end +function IntSetting:sendEvent(value) + SettingsListEvent.sendEvent(self.vehicle,self.parentName, self.name, value) +end + ---@class SettingList SettingList = CpObject(Setting) @@ -1502,7 +1506,7 @@ function SettingList:setToIx(ix,noEventSend) self.lastChangeTimeMilliseconds = g_time if noEventSend == nil or noEventSend == false then if self.syncValue then - SettingsListEvent.sendEvent(self.vehicle,self.parentName, self.name, self.current) + self:sendEvent() end end end @@ -1634,6 +1638,15 @@ end function SettingList:getNetworkCurrentValue() return self.current end + +function SettingList:sendEvent() + if self.vehicle then + SettingsListEvent.sendEvent(self.vehicle,self.parentName, self.name, self.current) + else + GlobalSettingsEvent.sendEvent(self.parentName, self.name, self.current) + end +end + ---WIP ---Generic LinkedList setting and Interface for LinkedList.lua ---@class LinkedList : Setting @@ -1941,8 +1954,8 @@ end ---@class CenterModeSetting : SettingList CenterModeSetting = CpObject(SettingList) -function CenterModeSetting:init() - SettingList.init(self, 'centerMode', 'COURSEPLAY_CENTER_MODE', '', nil, +function CenterModeSetting:init(vehicle) + SettingList.init(self, 'centerMode', 'COURSEPLAY_CENTER_MODE', '', vehicle, { courseGenerator.CENTER_MODE_UP_DOWN, courseGenerator.CENTER_MODE_CIRCULAR, @@ -1961,9 +1974,9 @@ end ---@class NumberOfRowsPerLand NumberOfRowsPerLandSetting = CpObject(SettingList) -function NumberOfRowsPerLandSetting:init() +function NumberOfRowsPerLandSetting:init(vehicle) SettingList.init(self, 'numberOfRowsPerLand', 'COURSEPLAY_NUMBER_OF_ROWS_PER_LAND', - 'COURSEPLAY_NUMBER_OF_ROWS_PER_LAND_TOOLTIP', nil, + 'COURSEPLAY_NUMBER_OF_ROWS_PER_LAND_TOOLTIP', vehicle, {4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24}, {4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24}) self:set(6) @@ -2087,9 +2100,9 @@ end ---@class FoldImplementAtEndSetting : BooleanSetting FoldImplementAtEndSetting = CpObject(BooleanSetting) -function FoldImplementAtEndSetting:init() +function FoldImplementAtEndSetting:init(vehicle) BooleanSetting.init(self, 'foldImplementAtEnd', 'COURSEPLAY_SHOULD_FOLD_IMPLEMENT', - 'COURSEPLAY_SHOULD_FOLD_IMPLEMENT_TOOLTIP', nil) + 'COURSEPLAY_SHOULD_FOLD_IMPLEMENT_TOOLTIP', vehicle) self:set(true) end @@ -2316,18 +2329,18 @@ end ---@class EnableVisualWaypointsTemporary : BooleanSetting EnableVisualWaypointsTemporary = CpObject(BooleanSetting) -function EnableVisualWaypointsTemporary:init() +function EnableVisualWaypointsTemporary:init(vehicle) BooleanSetting.init(self, 'enableVisualWaypointsTemporary', 'COURSEPLAY_ENABLE_VISUAL_WAYPOINTS_TEMPORARY', - 'COURSEPLAY_ENABLE_VISUAL_WAYPOINTS_TEMPORARY_TOOLTIP', nil) + 'COURSEPLAY_ENABLE_VISUAL_WAYPOINTS_TEMPORARY_TOOLTIP', vehicle) -- set default while we are transitioning from the the old setting to this new one self:set(false) end ---@class EnableOpenHudWithMouseVehicle : BooleanSetting EnableOpenHudWithMouseVehicle = CpObject(BooleanSetting) -function EnableOpenHudWithMouseVehicle:init() +function EnableOpenHudWithMouseVehicle:init(vehicle) BooleanSetting.init(self, 'enableOpenHudWithMouseVehicle', 'COURSEPLAY_ENABLE_OPEN_HUD_WITH_MOUSE_VEHICLE', - 'COURSEPLAY_YES_NO_ENABLE_OPEN_HUD_WITH_MOUSE_VEHICLE', nil) + 'COURSEPLAY_YES_NO_ENABLE_OPEN_HUD_WITH_MOUSE_VEHICLE', vehicle) -- set default while we are transitioning from the the old setting to this new one self:set(true) end @@ -2395,7 +2408,7 @@ end ---@class AutomaticUnloadingOnFieldSetting : BooleanSetting AutomaticUnloadingOnFieldSetting = CpObject(BooleanSetting) function AutomaticUnloadingOnFieldSetting:init(vehicle) - BooleanSetting.init(self, 'automaticUnloadingOnField', 'COURSEPLAY_UNLOADING_ON_FIELD', 'COURSEPLAY_UNLOADING_ON_FIELD', {'COURSEPLAY_MANUAL','COURSEPLAY_AUTOMATIC'}) + BooleanSetting.init(self, 'automaticUnloadingOnField', 'COURSEPLAY_UNLOADING_ON_FIELD', 'COURSEPLAY_UNLOADING_ON_FIELD',vehicle, {'COURSEPLAY_MANUAL','COURSEPLAY_AUTOMATIC'}) self:set(false) end diff --git a/toolManager.lua b/toolManager.lua index 2e765931f..a39e52d3a 100644 --- a/toolManager.lua +++ b/toolManager.lua @@ -208,6 +208,7 @@ function courseplay:updateWorkTools(vehicle, workTool, isImplement) if isAllowedOkay and isDisallowedOkay then courseplay:setMarkers(vehicle, workTool) vehicle.cp.hasMachinetoFill = true; + local isSprayer, isSowingMachine = courseplay:isSprayer(workTool), courseplay:isSowingMachine(workTool); vehicle.cp.noStopOnEdge = isSprayer and not (isSowingMachine or workTool.cp.isTreePlanter); vehicle.cp.noStopOnTurn = isSprayer and not (isSowingMachine or workTool.cp.isTreePlanter); end; diff --git a/translations/translation_br.xml b/translations/translation_br.xml index 567379a69..02bdab043 100644 --- a/translations/translation_br.xml +++ b/translations/translation_br.xml @@ -496,6 +496,12 @@ + + + + + + diff --git a/translations/translation_cs.xml b/translations/translation_cs.xml index c166fc4d2..94d566688 100644 --- a/translations/translation_cs.xml +++ b/translations/translation_cs.xml @@ -497,6 +497,12 @@ + + + + + + diff --git a/translations/translation_cz.xml b/translations/translation_cz.xml index ff2225f1b..a85f63baa 100644 --- a/translations/translation_cz.xml +++ b/translations/translation_cz.xml @@ -498,8 +498,14 @@ - - - + + + + + + + + + diff --git a/translations/translation_de.xml b/translations/translation_de.xml index a32176abd..b2b34b7ab 100644 --- a/translations/translation_de.xml +++ b/translations/translation_de.xml @@ -497,6 +497,11 @@ + + + + + diff --git a/translations/translation_en.xml b/translations/translation_en.xml index 4a6893b6c..0e2c7350a 100644 --- a/translations/translation_en.xml +++ b/translations/translation_en.xml @@ -495,6 +495,11 @@ + + + + + diff --git a/translations/translation_es.xml b/translations/translation_es.xml index b2e0291d4..2a9fee197 100644 --- a/translations/translation_es.xml +++ b/translations/translation_es.xml @@ -495,6 +495,12 @@ + + + + + + diff --git a/translations/translation_fr.xml b/translations/translation_fr.xml index a0441b1b9..ba87162eb 100644 --- a/translations/translation_fr.xml +++ b/translations/translation_fr.xml @@ -498,6 +498,12 @@ + + + + + + diff --git a/translations/translation_hu.xml b/translations/translation_hu.xml index 76fec48f8..222f00ff6 100644 --- a/translations/translation_hu.xml +++ b/translations/translation_hu.xml @@ -495,6 +495,12 @@ + + + + + + diff --git a/translations/translation_it.xml b/translations/translation_it.xml index b651de952..94acaf9eb 100644 --- a/translations/translation_it.xml +++ b/translations/translation_it.xml @@ -497,6 +497,12 @@ + + + + + + diff --git a/translations/translation_jp.xml b/translations/translation_jp.xml index c2793420d..38e5284bf 100644 --- a/translations/translation_jp.xml +++ b/translations/translation_jp.xml @@ -497,6 +497,12 @@ + + + + + + diff --git a/translations/translation_nl.xml b/translations/translation_nl.xml index dcbbd2532..c08f472d3 100644 --- a/translations/translation_nl.xml +++ b/translations/translation_nl.xml @@ -495,6 +495,12 @@ + + + + + + diff --git a/translations/translation_pl.xml b/translations/translation_pl.xml index b0e224f26..e0cdec78a 100644 --- a/translations/translation_pl.xml +++ b/translations/translation_pl.xml @@ -498,6 +498,12 @@ + + + + + + diff --git a/translations/translation_pt.xml b/translations/translation_pt.xml index e8ff22e35..866cc6f4b 100644 --- a/translations/translation_pt.xml +++ b/translations/translation_pt.xml @@ -495,6 +495,12 @@ + + + + + + diff --git a/translations/translation_ru.xml b/translations/translation_ru.xml index 3a98322c1..3c3a4d133 100644 --- a/translations/translation_ru.xml +++ b/translations/translation_ru.xml @@ -499,6 +499,12 @@ + + + + + + diff --git a/translations/translation_sl.xml b/translations/translation_sl.xml index 7acb69b25..604f61aad 100644 --- a/translations/translation_sl.xml +++ b/translations/translation_sl.xml @@ -498,6 +498,12 @@ + + + + + +