Procházet zdrojové kódy

Merge pull request #3883 from IvanSavenko/release_150

Preparation for 1.5.0 release
Ivan Savenko před 1 rokem
rodič
revize
d4c953e012

+ 19 - 0
ChangeLog.md

@@ -2,8 +2,11 @@
 
 ### General
 * Added Portuguese (Brazilian) translation
+* Added basic support for game controllers
 * Added option to disable cheats in game
 * Game will no longer run vcmiserver as a separate process on desktop systems
+* Game will no longer show server error messages in game chat in release builds
+* Implemented switchable artifact sets from HD Mod
 
 ### Stability
 * Fixed possible crash in Altar of Sacrifice
@@ -19,12 +22,19 @@
 * Fixed crash on moving through whirlpool when hero has no troops other than commander
 * Fixed possible freeze when moving hero over events that give enough experience to cause a level-up
 * Fixed possible crash on movement of double-wide creatures next to gates during siege
+* Fixed possible hanging app on attempt to close game during loading
 
 ### Multiplayer
+* Game map will no longer be locked during turn of other human players, allowing to change hero paths or inspect towns or heroes
+* Game will now correctly block most of player actions outside of their turn
 * Implemented new lobby, available in game with persistent accounts and chat
 * Removed old lobby previously available in launcher
 * Fixed potential crash that could occur if two players act at the very same time
 * Game will no longer pause due to network lag after every tile when instant movement speed is selected in multiplayer
+* Game will now show "X player's turn" dialog on new turn in online multiplayer
+* Fixed loading of turn timers state from saved games
+* Simultaneous turns will now break when players are 1 turn away from each other instead of 2 turns
+* Implemented rolling and banning of towns before game start
 
 ### Interface
 * Implemented configurable keyboard shortcuts, editable in file config/shortcutsConfig.json
@@ -35,6 +45,7 @@
 * It is no longer possible to start single scenario by pressing "Enter", in line with H3 and to prevent interference with game chat
 * Empty treasure banks will no longer ask for confirmation when entering
 * Game will now save last used difficulty settings
+* Opening random map tab or scenario selection tab in pregame will no longer reset starting towns or heroes unless different map was selected
 * Town Portal dialog will now show town icons
 * Town Portal dialog will now show town info on right click
 * Town Portal dialog will center on town on clicking it
@@ -55,10 +66,12 @@
 * Fixed translation of some bonuses using incorrect language
 * Added option to use 'nearest' rounding mode for UI scaling
 * Fixed various minor bugs in trade window interface
+* Removed animation of spawning of every single new monster on new month
 * Game will now correctly reset artifact drag-and-drop cursor if player opens another dialog on top of hero window
 * If player has no valid saves, game will pick "NEWGAME" as proposed save name instead of empty field
 * Fixed incorrect visitation sounds of Crypt, Shipwreck and Abandoned Ship
 * Fixed double sound playback on capturing mines
+* Recruitment costs that consist from 3 different resources should now fit recruitment window UI better
 
 ### Campaigns
 * Game will now correctly track who defeated the hero or wandering monsters for related quests and victory conditions
@@ -88,6 +101,7 @@
 ### Mechanics
 * It is no longer possible to learn spells from Pandora or events if hero can not learn them
 * Fixed behavior of 'Dimension Door' spell to be in line with H3:SoD
+* Fixed behavior of 'Fly' spell to be in line with H3:SoD
 * If it is not possible to cast 'Dimension Door', game will show message immediately on picking spell in spellbook
 * Added options to configure 'Dimension Door' spell to be in line with HotA
 * Casting 'Town Portal' while in boat will now show correct message box instead of server error
@@ -117,6 +131,8 @@
 * Decreased minimal density of obstacles on undergound level of the map
 * Density of objects should now closely resemble H3 RMG
 * Generator will now avoid routing road under guarded objects whenever possible
+* Generator will now avoid placing guards near roads
+* Generator will not place a guard near the road if it's stronger than 1/3 of max guard strength for this zone
 * Interactive objects will now appear on top of static objects
 * Windmill will now appear on top of all other objects
 
@@ -140,6 +156,8 @@
 
 ### AI
 * Fixed possible crash on updating NKAI pathfinding data
+* Fixed possible crash if hero has only commander left without army
+* Fixed possible crash on attempt to build tavern in a town
 * Fixed counting mana usage cost of Fly spell
 * Added estimation of value of Pyramid and Cyclops Stockpile
 * Reduced memory usage and improved performance of AI pathfinding
@@ -153,6 +171,7 @@
 
 ### Modding
 * Added new game setting that allows inviting heroes to taverns
+* It is now possible to add creature or faction description accessible via right-click of the icon
 * Fixed reversed Overlord and Warlock classes mapping
 * Added 'selectAll' mode for configurable objects which grants all potential rewards 
 * It is now possible to use most of json5 format in vcmi json files

+ 32 - 7
Mods/vcmi/config/vcmi/chinese.json

@@ -92,13 +92,26 @@
 	"vcmi.lobby.match.multi" : "%d 个玩家",
 	"vcmi.lobby.room.create" : "创建房间",
 	"vcmi.lobby.room.players.limit" : "玩家限制",
-	"vcmi.lobby.room.public" : "公开",
-	"vcmi.lobby.room.private" : "私有",
 	"vcmi.lobby.room.description.public" : "任何玩家都可以加入公开房间。",
 	"vcmi.lobby.room.description.private" : "只有被邀请的玩家能加入私有房间。",
 	"vcmi.lobby.room.description.new" : "选择一个新场景或设置一个随机地图开始游戏。",
 	"vcmi.lobby.room.description.load" : "使用你的一个存档开始游戏。",
 	"vcmi.lobby.room.description.limit" : "最多%d个玩家能加入你的房间,包括你在内。",
+	"vcmi.lobby.invite.header" : "邀请玩家",
+	"vcmi.lobby.invite.notification" : "有玩家邀请你到他们的房间里,你现在可以加入他们的私有房间。",
+	"vcmi.lobby.preview.title" : "加入游戏房间",
+	"vcmi.lobby.preview.subtitle" : "游戏模版为%s,主机玩家为%s", //TL Note: 1) name of map or RMG template 2) nickname of game host
+	"vcmi.lobby.preview.version" : "游戏版本:",
+	"vcmi.lobby.preview.players" : "玩家:",
+	"vcmi.lobby.preview.mods" : "使用模组:",
+	"vcmi.lobby.preview.allowed" : "加入这个游戏房间?",
+	"vcmi.lobby.preview.error.header" : "无法加入这个房间。",
+	"vcmi.lobby.preview.error.playing" : "你需要先离开你的当前游戏。",
+	"vcmi.lobby.preview.error.full" : "房间已满。",
+	"vcmi.lobby.preview.error.busy" : "这个房间不再接受新玩家。",
+	"vcmi.lobby.preview.error.invite" : "你没有被邀请到这个房间。",
+	"vcmi.lobby.preview.error.mods" : "你使用了不同的模组合集。",
+	"vcmi.lobby.preview.error.version" : "你使用了不同版本的VCMI。",
 	"vcmi.lobby.room.new" : "新建游戏",
 	"vcmi.lobby.room.load" : "加载游戏",
 	"vcmi.lobby.room.type" : "房间类型",
@@ -107,6 +120,18 @@
 	"vcmi.lobby.room.state.private" : "私有",
 	"vcmi.lobby.room.state.busy" : "游戏中",
 	"vcmi.lobby.room.state.invited" : "已邀请",
+	"vcmi.lobby.mod.state.compatible" : "兼容性",
+	"vcmi.lobby.mod.state.disabled" : "需要启用",
+	"vcmi.lobby.mod.state.version" : "版本不匹配",
+	"vcmi.lobby.mod.state.excessive" : "需要禁用",
+	"vcmi.lobby.mod.state.missing" : "未安装",
+	"vcmi.lobby.pvp.coin.hover" : "硬币",
+	"vcmi.lobby.pvp.coin.help" : "掷一枚硬币",
+	"vcmi.lobby.pvp.randomTown.hover" : "随机城镇",
+	"vcmi.lobby.pvp.randomTown.help" : "在聊天中随机输入一个城镇",
+	"vcmi.lobby.pvp.randomTownVs.hover" : "随机城镇对战",
+	"vcmi.lobby.pvp.randomTownVs.help" : "在聊天中随机输入两个城镇",
+	"vcmi.lobby.pvp.versus" : "对战",
 
 	"vcmi.client.errors.invalidMap" : "{非法地图或战役}\n\n启动游戏失败,选择的地图或者战役,无效或被污染。原因:\n%s",
 	"vcmi.client.errors.missingCampaigns" : "{找不到数据文件}\n\n没有找到战役数据文件!你可能使用了不完整或损坏的英雄无敌3数据文件,请重新安装数据文件。",
@@ -212,7 +237,7 @@
 	"vcmi.battleOptions.skipBattleIntroMusic.help": "{跳过战斗开始音乐}\n\n战斗开始音乐播放期间,你也能够进行操作。",
 	"vcmi.battleOptions.endWithAutocombat.hover": "结束战斗",
 	"vcmi.battleOptions.endWithAutocombat.help": "{结束战斗}\n\n以自动战斗立即结束剩余战斗过程",
-	
+
 	"vcmi.adventureMap.revisitObject.hover" : "重新访问",
 	"vcmi.adventureMap.revisitObject.help" : "{重新访问}\n\n让当前英雄重新访问地图建筑或城镇。",
 
@@ -234,7 +259,7 @@
 	"vcmi.battleWindow.endWithAutocombat" : "您确定想以自动战斗立即结束吗?",
 
 	"vcmi.battleResultsWindow.applyResultsLabel" : "接受战斗结果",
-	
+
 	"vcmi.tutorialWindow.title" : "触摸屏介绍",
 	"vcmi.tutorialWindow.decription.RightClick" : "长按要右键单击的元素。 触摸其他区域以关闭。",
 	"vcmi.tutorialWindow.decription.MapPanning" : "单指拖拽以移动地图。",
@@ -307,7 +332,7 @@
 	"vcmi.optionsTab.chessFieldBattle.help" : "在与 AI 的战斗中使用,或者在 {单位计时器} 耗尽时用于 pvp 战斗。在每次战斗开始时重置。",
 	"vcmi.optionsTab.chessFieldUnitAccumulate.help" : "在 PVP 战斗中选择单位动作时使用。 在单位回合结束时将剩余物添加到{战斗计时器}。",
 	"vcmi.optionsTab.chessFieldUnitDiscard.help" : "在 PVP 战斗中选择单位动作时使用。 在每个单位回合开始时重置。 任何未花费的时间都会丢失。",
-	
+
 	"vcmi.optionsTab.accumulate" : "累积",
 
 	"vcmi.optionsTab.simturnsTitle" : "同时进行回合",
@@ -317,7 +342,7 @@
 	"vcmi.optionsTab.simturnsMin.help" : "同时游戏进行的最少指定天数。在此期间玩家之间的联系将被阻止",
 	"vcmi.optionsTab.simturnsMax.help" : "同时游戏指定的最多天数或直到与其他玩家联系",
 	"vcmi.optionsTab.simturnsAI.help" : "{AI回合同时行动}\n实验选项。启用同时回合后,允许 AI 玩家与人类玩家同时行动。",
-	
+
 	"vcmi.optionsTab.turnTime.select"     : "回合计时器预设",
 	"vcmi.optionsTab.turnTime.unlimited"  : "无限时",
 	"vcmi.optionsTab.turnTime.classic.1"  : "经典计时器: 1 分钟",
@@ -332,7 +357,7 @@
 	"vcmi.optionsTab.turnTime.chess.4"    : "国际象棋计时器: 04:00 + 02:00 + 00:30 + 00:00",
 	"vcmi.optionsTab.turnTime.chess.2"    : "国际象棋计时器: 02:00 + 01:00 + 00:15 + 00:00",
 	"vcmi.optionsTab.turnTime.chess.1"    : "国际象棋计时器: 01:00 + 01:00 + 00:00 + 00:00",
-	
+
 	"vcmi.optionsTab.simturns.select"         : "同时进行回合预设",
 	"vcmi.optionsTab.simturns.none"           : "不同时进行回合",
 	"vcmi.optionsTab.simturns.tillContactMax" : "同时进行: 可进行联系",

+ 164 - 9
Mods/vcmi/config/vcmi/polish.json

@@ -20,6 +20,7 @@
 	"vcmi.adventureMap.playerAttacked"         : "Gracz został zaatakowany: %s",
 	"vcmi.adventureMap.moveCostDetails"        : "Punkty ruchu - Koszt: %TURNS tury + %POINTS punkty, Pozostałe punkty: %REMAINING",
 	"vcmi.adventureMap.moveCostDetailsNoTurns" : "Punkty ruchu - Koszt: %POINTS punkty, Pozostałe punkty: %REMAINING",
+	"vcmi.adventureMap.replayOpponentTurnNotImplemented" : "Wybacz, powtórka ruchu wroga nie została jeszcze zaimplementowana!",
 
 	"vcmi.capitalColors.0" : "Czerwony",
 	"vcmi.capitalColors.1" : "Niebieski",
@@ -62,7 +63,6 @@
 	"vcmi.mainMenu.serverClosing" : "Zamykanie...",
 	"vcmi.mainMenu.hostTCP" : "Hostuj grę TCP/IP",
 	"vcmi.mainMenu.joinTCP" : "Dołącz do gry TCP/IP",
-	"vcmi.mainMenu.playerName" : "Gracz",
 
 	"vcmi.lobby.filepath" : "Nazwa pliku",
 	"vcmi.lobby.creationDate" : "Data utworzenia",
@@ -71,7 +71,69 @@
 	"vcmi.lobby.noPreview" : "brak podglądu",
 	"vcmi.lobby.noUnderground" : "brak podziemi",
 	"vcmi.lobby.sortDate" : "Sortuj mapy według daty modyfikacji",
-
+	"vcmi.lobby.backToLobby" : "Wróc do lobby",
+
+	"vcmi.lobby.login.title" : "Lobby sieciowe VCMI",
+	"vcmi.lobby.login.username" : "Użytkownik:",
+	"vcmi.lobby.login.connecting" : "Łączenie...",
+	"vcmi.lobby.login.error" : "Błąd połączenia: %s",
+	"vcmi.lobby.login.create" : "Nowe konto",
+	"vcmi.lobby.login.login" : "Login",
+	"vcmi.lobby.login.as" : "Zaloguj jako %s",
+	"vcmi.lobby.header.rooms" : "Pokoje - %d",
+	"vcmi.lobby.header.channels" : "Kanały tekstowe",
+	"vcmi.lobby.header.chat.global" : "Chat globalny - %s", // %s -> language name
+	"vcmi.lobby.header.chat.match" : "Chat poprzedniej gry z %s", // %s -> game start date & time
+	"vcmi.lobby.header.chat.player" : "Chat prywatny z %s", // %s -> nickname of another player
+	"vcmi.lobby.header.history" : "Twoje poprzednie gry",
+	"vcmi.lobby.header.players" : "Graczy online - %d",
+	"vcmi.lobby.match.solo" : "Gra jednoosobowa",
+	"vcmi.lobby.match.duel" : "Graj z %s", // %s -> nickname of another player
+	"vcmi.lobby.match.multi" : "%d graczy",
+	"vcmi.lobby.room.create" : "Stwórz nowy pokój",
+	"vcmi.lobby.room.players.limit" : "Limit graczy",
+	"vcmi.lobby.room.description.public" : "Każdy może dołączyć do pokoju.",
+	"vcmi.lobby.room.description.private" : "Tylko zaproszeni gracze mogą dołączyć do pokoju.",
+	"vcmi.lobby.room.description.new" : "By rozpocząć grę, wybierz scenariusz lub losowy szablon.",
+	"vcmi.lobby.room.description.load" : "By rozpocząć grę, wybierz jeden z zapisanych stanów.",
+	"vcmi.lobby.room.description.limit" : "Maksymalnie %d graczy może dołączyć do pokoju, wliczając ciebie.",
+	"vcmi.lobby.invite.header" : "Zaproś graczy",
+	"vcmi.lobby.invite.notification" : "Gracz zaprosił Cię do jego prywatnego pokoju. Możesz teraz do niego dołączyć.",
+	"vcmi.lobby.preview.title" : "Dołącz",
+	"vcmi.lobby.preview.subtitle" : "Gra na %s, pokój stworzył %s", //TL Note: 1) name of map or RMG template 2) nickname of game host
+	"vcmi.lobby.preview.version" : "Wersja gry:",
+	"vcmi.lobby.preview.players" : "Gracze:",
+	"vcmi.lobby.preview.mods" : "Użyte mody:",
+	"vcmi.lobby.preview.allowed" : "Dołączyć do pokoju?",
+	"vcmi.lobby.preview.error.header" : "Napotkano problem podczas dołączenia do pokoju.",
+	"vcmi.lobby.preview.error.playing" : "Musisz najpierw wyjść z obecnej rozgrywki.",
+	"vcmi.lobby.preview.error.full" : "Pokój jest pełny.",
+	"vcmi.lobby.preview.error.busy" : "Pokój nie akceptuje już nowych graczy.",
+	"vcmi.lobby.preview.error.invite" : "Nie zostałeś zaproszony do tego pokoju.",
+	"vcmi.lobby.preview.error.mods" : "Używasz innego zestawu modyfikacji.",
+	"vcmi.lobby.preview.error.version" : "Używasz innej wersji VCMI.",
+	"vcmi.lobby.room.new" : "Nowa gra",
+	"vcmi.lobby.room.load" : "Wczytaj grę",
+	"vcmi.lobby.room.type" : "Typ pokoju",
+	"vcmi.lobby.room.mode" : "Tryb gry",
+	"vcmi.lobby.room.state.public" : "Publiczny",
+	"vcmi.lobby.room.state.private" : "Prywatny",
+	"vcmi.lobby.room.state.busy" : "W grze",
+	"vcmi.lobby.room.state.invited" : "Zaproszony",
+	"vcmi.lobby.mod.state.compatible" : "Kompatybilny",
+	"vcmi.lobby.mod.state.disabled" : "Musi być włączony",
+	"vcmi.lobby.mod.state.version" : "Niepoprawna wersja",
+	"vcmi.lobby.mod.state.excessive" : "Musi być wyłączony",
+	"vcmi.lobby.mod.state.missing" : "Nie zainstalowany",
+	"vcmi.lobby.pvp.coin.hover" : "Moneta",
+	"vcmi.lobby.pvp.coin.help" : "Rzut monetą",
+	"vcmi.lobby.pvp.randomTown.hover" : "Losowe miasto",
+	"vcmi.lobby.pvp.randomTown.help" : "Wyświetli nazwę wylosowanego miasta na czacie",
+	"vcmi.lobby.pvp.randomTownVs.hover" : "Losowe miasto vs.",
+	"vcmi.lobby.pvp.randomTownVs.help" : "Wyświetli nazwę 2 wylosowanych miast na czacie",
+	"vcmi.lobby.pvp.versus" : "vs.",
+
+	"vcmi.client.errors.invalidMap" : "{Błędna mapa lub kampania}\n\nNie udało się stworzyć gry! Wybrana mapa lub kampania jest niepoprawna lub uszkodzona. Powód:\n%s",
 	"vcmi.client.errors.missingCampaigns" : "{Brakujące pliki gry}\n\nPliki kampanii nie zostały znalezione! Możliwe że używasz niekompletnych lub uszkodzonych plików Heroes 3. Spróbuj ponownej instalacji plików gry.",
 	"vcmi.server.errors.existingProcess" : "Inny proces 'vcmiserver' został już uruchomiony, zakończ go nim przejdziesz dalej",
 	"vcmi.server.errors.modsToEnable"    : "{Następujące mody są wymagane do wczytania gry}",
@@ -81,6 +143,8 @@
 	"vcmi.server.errors.modConflict" : "Nie udało się wczytać moda {'%s'}!\n Konflikty z aktywnym modem {'%s'}!\n",
 	"vcmi.server.errors.unknownEntity" : "Nie udało się wczytać zapisu! Nieznany element '%s' znaleziony w pliku zapisu! Zapis może nie być zgodny z aktualnie zainstalowaną wersją modów!",
 
+	"vcmi.dimensionDoor.seaToLandError" : "Nie jest możliwa teleportacja przez drzwi wymiarów z wód na ląd i na odwrót.",
+
 	"vcmi.settingsMainWindow.generalTab.hover"   : "Ogólne",
 	"vcmi.settingsMainWindow.generalTab.help"    : "Przełącza do zakładki opcji ogólnych, która zawiera ustawienia związane z ogólnym działaniem gry",
 	"vcmi.settingsMainWindow.battleTab.hover"    : "Bitwa",
@@ -94,9 +158,9 @@
 	"vcmi.systemOptions.townsGroup" : "Ekran miasta",
 
 	"vcmi.systemOptions.fullscreenBorderless.hover" : "Pełny ekran (bez ramek)",
-	"vcmi.systemOptions.fullscreenBorderless.help"  : "{Pełny ekran w trybie okna}\n\nPo wybraniu VCMI będzie działać w trybie okna pełnoekranowego. W tym trybie gra będzie zawsze używać rozdzielczości pulpitu, ignorując wybraną rozdzielczość.",
+	"vcmi.systemOptions.fullscreenBorderless.help"  : "{Pełny ekran w trybie okna}\n\nVCMI będzie działać w trybie okna pełnoekranowego. W tym trybie gra będzie zawsze używać rozdzielczości pulpitu, ignorując wybraną rozdzielczość.",
 	"vcmi.systemOptions.fullscreenExclusive.hover"  : "Pełny ekran (tradycyjny)",
-	"vcmi.systemOptions.fullscreenExclusive.help"   : "{Pełny ekran}\n\nPo wybraniu VCMI będzie działać w trybie ekskluzywnego pełnego ekranu. W tym trybie gra zmieni rozdzielczość monitora do wybranej rozdzielczości.",
+	"vcmi.systemOptions.fullscreenExclusive.help"   : "{Pełny ekran}\n\nVCMI będzie działać w trybie ekskluzywnego pełnego ekranu. W tym trybie gra zmieni rozdzielczość monitora do wybranej rozdzielczości.",
 	"vcmi.systemOptions.resolutionButton.hover" : "Rozdzielczość: %wx%h",
 	"vcmi.systemOptions.resolutionButton.help"  : "{Wybierz rozdzielczość}\n\n Zmień rozdzielczość ekranu w grze.",
 	"vcmi.systemOptions.resolutionMenu.hover"   : "Wybierz rozdzielczość",
@@ -134,9 +198,11 @@
 	"vcmi.adventureOptions.infoBarCreatureManagement.hover" : "Zarządzanie armią w panelu informacyjnym",
 	"vcmi.adventureOptions.infoBarCreatureManagement.help" : "{Zarządzanie armią w panelu informacyjnym}\n\nPozwala zarządzać jednostkami w panelu informacyjnym, zamiast przełączać między domyślnymi informacjami.",
 	"vcmi.adventureOptions.leftButtonDrag.hover" : "Przeciąganie mapy lewym kliknięciem",
-	"vcmi.adventureOptions.leftButtonDrag.help" : "{Przeciąganie mapy lewym kliknięciem}\n\nGdy włączone, umożliwia przesuwanie mapy przygody poprzez przeciąganie myszy z wciśniętym lewym przyciskiem.",
+	"vcmi.adventureOptions.leftButtonDrag.help" : "{Przeciąganie mapy lewym kliknięciem}\n\nUmożliwia przesuwanie mapy przygody poprzez przeciąganie myszy z wciśniętym lewym przyciskiem.",
 	"vcmi.adventureOptions.smoothDragging.hover" : "'Pływające' przeciąganie mapy",
-	"vcmi.adventureOptions.smoothDragging.help" : "{'Pływające' przeciąganie mapy}\n\nGdy włączone, przeciąganie mapy następuje ze stopniowo zanikającym przyspieszeniem.",
+	"vcmi.adventureOptions.smoothDragging.help" : "{'Pływające' przeciąganie mapy}\n\nPrzeciąganie mapy następuje ze stopniowo zanikającym przyspieszeniem.",
+	"vcmi.adventureOptions.skipAdventureMapAnimations.hover" : "Pomiń efekty zanikania",
+	"vcmi.adventureOptions.skipAdventureMapAnimations.help" : "{Pominięcie efektów zanikania}\n\nPomija efekt zanikania obiektów (zbiór surowców, zdobycie statku itp.). Interfejs będzie bardziej responsywny kosztem efektów wizualnych. Użyteczne w grach PvP. Z maksymalną prędkością chodu, pominięcie jest włączone niezależnie od ustawienia.",
 	"vcmi.adventureOptions.mapScrollSpeed1.hover": "",
 	"vcmi.adventureOptions.mapScrollSpeed5.hover": "",
 	"vcmi.adventureOptions.mapScrollSpeed6.hover": "",
@@ -169,6 +235,8 @@
 	"vcmi.battleOptions.showStickyHeroInfoWindows.help": "{Pokaż trwale statystyki bohaterów}\n\nWłącza trwałe okna statystyk bohaterów pokazujące umiejętności pierwszorzędne i punkty magii.",
 	"vcmi.battleOptions.skipBattleIntroMusic.hover": "Pomiń czekanie startowe",
 	"vcmi.battleOptions.skipBattleIntroMusic.help": "{Pomiń czekanie startowe}\n\n Pomija konieczność czekania podczas muzyki startowej, która jest odtwarzana na początku każdej bitwy przed rozpoczęciem akcji.",
+	"vcmi.battleOptions.endWithAutocombat.hover": "Natychmiastowe auto-walki",
+	"vcmi.battleOptions.endWithAutocombat.help": "{Natychmiastowe auto-walki}\n\nAuto-walka natychmiastowo toczy walkę do samego końca",
 
 	"vcmi.adventureMap.revisitObject.hover" : "Odwiedź obiekt ponownie",
 	"vcmi.adventureMap.revisitObject.help" : "{Odwiedź obiekt ponownie}\n\nJeżeli bohater aktualnie stoi na polu odwiedzającym obiekt za pomocą tego przycisku może go odwiedzić ponownie.",
@@ -188,6 +256,7 @@
 	"vcmi.battleWindow.accurateShot.resultDescription.0" : "%d %s zostało zabitych poprzez celne strzały!",
 	"vcmi.battleWindow.accurateShot.resultDescription.1" : "%d %s został zabity poprzez celny strzał!",
 	"vcmi.battleWindow.accurateShot.resultDescription.2" : "%d %s zostali zabici poprzez celne strzały!",
+	"vcmi.battleWindow.endWithAutocombat" : "Czy jesteś pewien, że chcesz zakończyć walkę trybem automatycznym?",
 
 	"vcmi.battleResultsWindow.applyResultsLabel" : "Zatwierdź wynik bitwy",
 
@@ -230,6 +299,8 @@
 	"vcmi.heroWindow.openBackpack.hover" : "Otwórz okno sakwy",
 	"vcmi.heroWindow.openBackpack.help"  : "Otwiera okno pozwalające łatwiej zarządzać artefaktami w sakwie",
 
+	"vcmi.tavernWindow.inviteHero"  : "Zaproś bohatera",
+
 	"vcmi.commanderWindow.artifactMessage" : "Czy chcesz zwrócić ten artefakt bohaterowi?",
 
 	"vcmi.creatureWindow.showBonuses.hover"    : "Przełącz do widoku bonusów",
@@ -259,7 +330,7 @@
 	"vcmi.optionsTab.chessFieldTurnAccumulate.help" : "Używany poza bitwą lub gdy {Zegar bitewny} się wyczerpie. Odnawia się co turę. Nadwyżkę dodaje się do {Zegara startowego} pod koniec tury.",
 	"vcmi.optionsTab.chessFieldTurnDiscard.help" : "Używany poza bitwą lub gdy {Zegar bitewny} się wyczerpie. Odnawia się co turę. Niewykorzystany czas zostaje utracony.",
 	"vcmi.optionsTab.chessFieldBattle.help" : "Używany w bitwach z graczem AI lub gdy {Zegar jednostki} się wyczerpie w bitwie pomiędzy ludźmi. Odnawia się przy starcie każdej bitwy.",
-	"vcmi.optionsTab.chessFieldUnitAccumulate.help" : "Używany podczas oczekiwania na podjęcie akcji jednostką w bitwie pomiędzy ludźmi. Nadwyżka czasu dodaje się do {Timera bitwy}",
+	"vcmi.optionsTab.chessFieldUnitAccumulate.help" : "Używany podczas oczekiwania na podjęcie akcji jednostką w bitwie pomiędzy ludźmi. Nadwyżka czasu dodaje się do {Zegara bitewnego}",
 	"vcmi.optionsTab.chessFieldUnitDiscard.help" : "Używany podczas oczekiwania na podjęcie akcji jednostką w bitwie pomiędzy ludźmi. Resetuje się przy rozpoczęciu akcji jednostką.",
 
 	"vcmi.optionsTab.accumulate" : "Akumuluj",
@@ -309,6 +380,14 @@
 	"vcmi.optionsTab.simturns.months.1" : " %d miesiąc",
 	"vcmi.optionsTab.simturns.months.2" : " %d miesiące",
 
+	"vcmi.optionsTab.extraOptions.hover" : "Zaawansowane",
+	"vcmi.optionsTab.extraOptions.help" : "Dodatkowe opcje gry",
+
+	"vcmi.optionsTab.cheatAllowed.hover" : "Zezwól na oszustwa",
+	"vcmi.optionsTab.unlimitedReplay.hover" : "Nielimitowane powtórzenia walk",
+	"vcmi.optionsTab.cheatAllowed.help" : "{Zezwól na oszustwa}\nPozwala wpisywać kody na oszustwa podczas gry.",
+	"vcmi.optionsTab.unlimitedReplay.help" : "{Nielimitowane powtórzenia walk}\nBrak limitu na powtórzenia walk.",
+
 	// Custom victory conditions for H3 campaigns and HotA maps
 	"vcmi.map.victoryCondition.daysPassed.toOthers" : "Wróg dał radę przetrwać do dzisiejszego dnia. Zwycięstwo należy do niego!",
 	"vcmi.map.victoryCondition.daysPassed.toSelf" : "Gratulacje! Dałeś radę przetrwać. Zwycięstwo jest twoje!",
@@ -317,8 +396,84 @@
 	"vcmi.map.victoryCondition.collectArtifacts.message" : "Zdobądź trzy artefakty",
 	"vcmi.map.victoryCondition.angelicAlliance.toSelf" : "Gratulacje! Wszyscy wrogowie zostali pokonani, a ty masz Miecz Anielskiego Sojuszu! Zwycięstwo jest twoje!",
 	"vcmi.map.victoryCondition.angelicAlliance.message" : "Pokonaj wszystkich wrogów i stwórz Miecz Anielskiego Sojuszu",
-
-	//WoG strings translations missing here - should be taken from polish WoG translation
+	"vcmi.map.victoryCondition.angelicAlliancePartLost.toSelf" : "Niestety straciłeś część Sojuszu Anielskiego. Wszystko poszło na marne.",
+
+	// few strings from WoG used by vcmi
+	"vcmi.stackExperience.description" : "» S t a c k   E x p e r i e n c e   D e t a i l s «\n\nTyp stworzenia ................... : %s\nRanga ................. : %s (%i)\nDoświadczenie ............... : %i\nPunktów do awansu .. : %i\nMaks. dośw. na walkę ... : %i%% (%i)\nIlość stworzeń w grupie .... : %i\nMaks. ilość nowych rekrutów\n bez utraty rangi .... : %i\nMnożnik dośw. ........... : %.2f\nMnożnik ulepszenia .............. : %.2f\nDośw. po 10 randze ........ : %i\nMaks. ilość nowych rekrutów pozostających na\n 10 Randze, jeśli osiągnęli maksymalne dośw. : %i",
+	"vcmi.stackExperience.rank.0" : "Podstawowy",
+	"vcmi.stackExperience.rank.1" : "Nowicjusz",
+	"vcmi.stackExperience.rank.2" : "Przeszkolony",
+	"vcmi.stackExperience.rank.3" : "Wykwalifikowany",
+	"vcmi.stackExperience.rank.4" : "Udowodniony",
+	"vcmi.stackExperience.rank.5" : "Weteran",
+	"vcmi.stackExperience.rank.6" : "Adept",
+	"vcmi.stackExperience.rank.7" : "Expert",
+	"vcmi.stackExperience.rank.8" : "Elitarny",
+	"vcmi.stackExperience.rank.9" : "Master",
+	"vcmi.stackExperience.rank.10" : "As",
+
+	// Strings for HotA Seer Hut / Quest Guards
+	"core.seerhut.quest.heroClass.complete.0" : "Ah, ty jesteś %s.  Oto prezent dla ciebie.  Czy go przyjmiesz?",
+	"core.seerhut.quest.heroClass.complete.1" : "Ah, ty jesteś %s.  Oto prezent dla ciebie.  Czy go przyjmiesz?",
+	"core.seerhut.quest.heroClass.complete.2" : "Ah, ty jesteś %s.  Oto prezent dla ciebie.  Czy go przyjmiesz?",
+	"core.seerhut.quest.heroClass.complete.3" : "Strażnicy zauważają, że jesteś %s i oferują, że cię przepuszczą.  Czy to akceptujesz?",
+	"core.seerhut.quest.heroClass.complete.4" : "Strażnicy zauważają, że jesteś %s i oferują, że cię przepuszczą.  Czy to akceptujesz?",
+	"core.seerhut.quest.heroClass.complete.5" : "Strażnicy zauważają, że jesteś %s i oferują, że cię przepuszczą.  Czy to akceptujesz?",
+	"core.seerhut.quest.heroClass.description.0" : "Wyślij %s do %s",
+	"core.seerhut.quest.heroClass.description.1" : "Wyślij %s do %s",
+	"core.seerhut.quest.heroClass.description.2" : "Wyślij %s do %s",
+	"core.seerhut.quest.heroClass.description.3" : "Wyślij %s by otworzył bramę",
+	"core.seerhut.quest.heroClass.description.4" : "Wyślij %s by otworzył bramę",
+	"core.seerhut.quest.heroClass.description.5" : "Wyślij %s by otworzył bramę",
+	"core.seerhut.quest.heroClass.hover.0" : "(szuka bohatera klasy %s)",
+	"core.seerhut.quest.heroClass.hover.1" : "(szuka bohatera klasy %s)",
+	"core.seerhut.quest.heroClass.hover.2" : "(szuka bohatera klasy %s)",
+	"core.seerhut.quest.heroClass.hover.3" : "(szuka bohatera klasy %s)",
+	"core.seerhut.quest.heroClass.hover.4" : "(szuka bohatera klasy %s)",
+	"core.seerhut.quest.heroClass.hover.5" : "(szuka bohatera klasy %s)",
+	"core.seerhut.quest.heroClass.receive.0" : "Mam prezent dla %s.",
+	"core.seerhut.quest.heroClass.receive.1" : "Mam prezent dla %s.",
+	"core.seerhut.quest.heroClass.receive.2" : "Mam prezent dla %s.",
+	"core.seerhut.quest.heroClass.receive.3" : "Strażnicy mówią, że przepuszczą tylko %s.",
+	"core.seerhut.quest.heroClass.receive.4" : "Strażnicy mówią, że przepuszczą tylko %s.",
+	"core.seerhut.quest.heroClass.receive.5" : "Strażnicy mówią, że przepuszczą tylko %s.",
+	"core.seerhut.quest.heroClass.visit.0" : "Nie jesteś %s. Nie mam nic dla ciebie. Przepadnij!",
+	"core.seerhut.quest.heroClass.visit.1" : "Nie jesteś %s. Nie mam nic dla ciebie. Przepadnij!",
+	"core.seerhut.quest.heroClass.visit.2" : "Nie jesteś %s. Nie mam nic dla ciebie. Przepadnij!",
+	"core.seerhut.quest.heroClass.visit.3" : "Strażnicy tutaj przepuszczą tylko %s.",
+	"core.seerhut.quest.heroClass.visit.4" : "Strażnicy tutaj przepuszczą tylko %s.",
+	"core.seerhut.quest.heroClass.visit.5" : "Strażnicy tutaj przepuszczą tylko %s.",
+	
+	"core.seerhut.quest.reachDate.complete.0" : "Jestem już wolny. Oto co dla ciebie mam. Czy to przyjmiesz?",
+	"core.seerhut.quest.reachDate.complete.1" : "Jestem już wolny. Oto co dla ciebie mam. Czy to przyjmiesz?",
+	"core.seerhut.quest.reachDate.complete.2" : "Jestem już wolny. Oto co dla ciebie mam. Czy to przyjmiesz?",
+	"core.seerhut.quest.reachDate.complete.3" : "Możesz teraz przejść dalej. Czy chcesz przejść?",
+	"core.seerhut.quest.reachDate.complete.4" : "Możesz teraz przejść dalej. Czy chcesz przejść?",
+	"core.seerhut.quest.reachDate.complete.5" : "Możesz teraz przejść dalej. Czy chcesz przejść?",
+	"core.seerhut.quest.reachDate.description.0" : "Czekaj do %s przez %s",
+	"core.seerhut.quest.reachDate.description.1" : "Czekaj do %s przez %s",
+	"core.seerhut.quest.reachDate.description.2" : "Czekaj do %s przez %s",
+	"core.seerhut.quest.reachDate.description.3" : "Czekaj do %s by otworzyć bramę",
+	"core.seerhut.quest.reachDate.description.4" : "Czekaj do %s by otworzyć bramę",
+	"core.seerhut.quest.reachDate.description.5" : "Czekaj do %s by otworzyć bramę",
+	"core.seerhut.quest.reachDate.hover.0" : "(Wróć po %s)",
+	"core.seerhut.quest.reachDate.hover.1" : "(Wróć po %s)",
+	"core.seerhut.quest.reachDate.hover.2" : "(Wróć po %s)",
+	"core.seerhut.quest.reachDate.hover.3" : "(Wróć po %s)",
+	"core.seerhut.quest.reachDate.hover.4" : "(Wróć po %s)",
+	"core.seerhut.quest.reachDate.hover.5" : "(Wróć po %s)",
+	"core.seerhut.quest.reachDate.receive.0" : "Jestem zajęty. Wróć nie wcześniej niż %s",
+	"core.seerhut.quest.reachDate.receive.1" : "Jestem zajęty. Wróć nie wcześniej niż %s",
+	"core.seerhut.quest.reachDate.receive.2" : "Jestem zajęty. Wróć nie wcześniej niż %s",
+	"core.seerhut.quest.reachDate.receive.3" : "Zamknięte do %s.",
+	"core.seerhut.quest.reachDate.receive.4" : "Zamknięte do %s.",
+	"core.seerhut.quest.reachDate.receive.5" : "Zamknięte do %s.",
+	"core.seerhut.quest.reachDate.visit.0" : "Jestem zajęty. Wróć nie wcześniej niż %s.",
+	"core.seerhut.quest.reachDate.visit.1" : "Jestem zajęty. Wróć nie wcześniej niż %s.",
+	"core.seerhut.quest.reachDate.visit.2" : "Jestem zajęty. Wróć nie wcześniej niż %s.",
+	"core.seerhut.quest.reachDate.visit.3" : "Zamknięte do %s.",
+	"core.seerhut.quest.reachDate.visit.4" : "Zamknięte do %s.",
+	"core.seerhut.quest.reachDate.visit.5" : "Zamknięte do %s.",
 
 	"core.bonus.ADDITIONAL_ATTACK.name": "Podwójne Uderzenie",
 	"core.bonus.ADDITIONAL_ATTACK.description": "Atakuje dwa razy",

+ 1 - 1
android/vcmi-app/src/main/java/eu/vcmi/vcmi/ActivityMods.java

@@ -50,7 +50,7 @@ import eu.vcmi.vcmi.util.ServerResponse;
 public class ActivityMods extends ActivityWithToolbar
 {
     private static final boolean ENABLE_REPO_DOWNLOADING = true;
-    private static final String REPO_URL = "https://raw.githubusercontent.com/vcmi/vcmi-mods-repository/develop/vcmi-1.4.json";
+    private static final String REPO_URL = "https://raw.githubusercontent.com/vcmi/vcmi-mods-repository/develop/vcmi-1.5.json";
     private VCMIModsRepo mRepo;
     private RecyclerView mRecycler;
 

+ 1 - 1
debian/changelog

@@ -2,7 +2,7 @@ vcmi (1.5.0) jammy; urgency=medium
 
   * New upstream release
 
- -- Ivan Savenko <[email protected]>  Fri, 1 Mar 2024 12:00:00 +0200
+ -- Ivan Savenko <[email protected]>  Fri, 10 May 2024 12:00:00 +0200
 
 vcmi (1.4.5) jammy; urgency=medium
 

+ 1 - 4
docs/Readme.md

@@ -1,8 +1,5 @@
 [![VCMI](https://github.com/vcmi/vcmi/actions/workflows/github.yml/badge.svg?branch=develop&event=push)](https://github.com/vcmi/vcmi/actions/workflows/github.yml?query=branch%3Adevelop+event%3Apush)
-[![Github Downloads](https://img.shields.io/github/downloads/vcmi/vcmi/1.4.0/total)](https://github.com/vcmi/vcmi/releases/tag/1.4.0)
-[![Github Downloads](https://img.shields.io/github/downloads/vcmi/vcmi/1.4.1/total)](https://github.com/vcmi/vcmi/releases/tag/1.4.1)
-[![Github Downloads](https://img.shields.io/github/downloads/vcmi/vcmi/1.4.2/total)](https://github.com/vcmi/vcmi/releases/tag/1.4.2)
-[![Github Downloads](https://img.shields.io/github/downloads/vcmi/vcmi/1.4.5/total)](https://github.com/vcmi/vcmi/releases/tag/1.4.5)
+[![Github Downloads](https://img.shields.io/github/downloads/vcmi/vcmi/1.5.0/total)](https://github.com/vcmi/vcmi/releases/tag/1.5.0)
 [![Github Downloads](https://img.shields.io/github/downloads/vcmi/vcmi/total)](https://github.com/vcmi/vcmi/releases)
 
 # VCMI Project

+ 5 - 4
docs/maintainers/Release_Process.md

@@ -18,7 +18,7 @@ Should be done immediately after start of stabilization stage for previous relea
 - Add all features and bugs that should be fixed as part of this release into this project
 
 ### Start of stabilization stage (major releases only)
-Should be done 2-4 weeks before planned release date. All major features should be finished at this point.
+Should be done 2 weeks before planned release date. All major features should be finished at this point.
 
 - Create `beta` branch from `develop`
 - Bump vcmi version in CMake on `develop` branch
@@ -37,9 +37,10 @@ Should be done 1 week before release. Release date should be decided at this poi
 - Make sure to announce codebase freeze deadline (1 day before release) to all developers
 - Create pull request for release preparation tasks targeting `beta`:
 - - Update [changelog](https://github.com/vcmi/vcmi/blob/develop/ChangeLog.md)
-- - Update release date for Linux packaging. See [example](https://github.com/vcmi/vcmi/pull/1258)
-- - Update build ID for Android packaging. See [example](https://github.com/vcmi/vcmi/pull/2090)
-- - Update downloads counter in readme.md. See [example](https://github.com/vcmi/vcmi/pull/2091)
+- - Update release date in `debian/changelog`
+- - Update release date in `launcher/eu.vcmi.VCMI.metainfo.xml`
+- - Update build ID `android/vcmi-app/build.gradle`
+- - Update downloads counter in `docs/readme.md`
 
 ### Release preparation stage
 Should be done 1 day before release. At this point beta branch is in full freeze.

+ 12 - 1
launcher/eu.vcmi.VCMI.metainfo.xml

@@ -5,6 +5,7 @@
 	<summary>Open-source game engine for Heroes of Might and Magic III</summary>
 	<summary xml:lang="cs">Herní engine s otevřeným kódem pro Heroes of Might and Magic III</summary>
 	<summary xml:lang="de">Open-Source-Spielengine für Heroes of Might and Magic III</summary>
+	<summary xml:lang="uk">Ігровий рушій з відкритим початковим кодом для Heroes of Might and Magic III</summary>
 	<developer id="eu.vcmi">
 		<name>VCMI Team</name>
 		<name xml:lang="cs">Tým VCMI</name>
@@ -15,35 +16,45 @@
 		<p>VCMI is an open-source engine for Heroes of Might and Magic III with new possibilities. Years of intensive work resulted in an impressive amount of features. Among the current features are:</p>
 		<p xml:lang="cs">VCMI je engine s otevřeným kódem a novými možnostmi pro Heroes of Might and Magic III. Roky usilovné práce vyústily v úchvatném počtu nových funkcí. Mezi současnými funkcemi jsou:</p>
 		<p xml:lang="de">VCMI ist eine Open-Source-Engine für Heroes of Might and Magic III mit neuen Möglichkeiten. Jahrelange intensive Arbeit führte zu einer beeindruckenden Anzahl von Features. Zu den aktuellen Features gehören:</p>
+		<p xml:lang="uk">VCMI - це рушій з відкритим початковим кодом для Heroes of Might and Magic III з новими можливостями. Роки інтенсивної роботи вилилися у вражаючу кількість функцій. Серед поточних можливостей можна виділити наступні:</p>
 		<ul>
 			<li>Complete gameplay mechanics</li>
 			<li xml:lang="cs">Kompletní herní mechaniky</li>
 			<li xml:lang="de">Vollständige Spielmechanik</li>
+			<li xml:lang="uk">Уся ігрова механіка</li>
 			<li>Almost all objects, abilities, spells and other content</li>
 			<li xml:lang="cs">Skoro všechny předměty, schopnosti, kouzla a ostatní obsah</li>
 			<li xml:lang="de">Fast alle Objekte, Fähigkeiten, Zaubersprüche und andere Inhalte</li>
+			<li xml:lang="uk">Практично всі об'єкти, вміння, закляття та інший вміст</li>
 			<li>Basic battle AI and adventure AI</li>
 			<li xml:lang="cs">Základní AI boje a mapy světa</li>
 			<li xml:lang="de">Grundlegende Kampf- und Abenteuer-KI</li>
+			<li xml:lang="uk">Базовий ШІ для бою та для мапи пригод</li>
 			<li>Many GUI improvements: high resolutions, stack queue, creature window</li>
 			<li xml:lang="cs">Mnoho vylepšení rozhraní: vyšší rozlišení, fronta oddílů a okno bojovníků</li>
 			<li xml:lang="de">Viele GUI-Verbesserungen: Hohe Auflösungen, Truppenwarteschlange, Kreaturenfenster</li>
+			<li xml:lang="uk">Численні покращення графічного інтерфейсу: висока роздільна здатність, черга ходу істот, нове вікно істот</li>
 			<li>Advanced and easy mod support - add new towns, creatures, heroes, artifacts and spells without limits or conflicts</li>
 			<li xml:lang="cs">Pokročilá a jednoduchá podpora modifikací - přidání nových měst, bojovníků, hrdinů, artefaktů a kouzel bez limitů a konfliktů</li>
 			<li xml:lang="de">Erweiterte und einfache Mod-Unterstützung - füge neue Städte, Kreaturen, Helden, Artefakte und Zaubersprüche ohne Einschränkungen oder Konflikte hinzu</li>
+			<li xml:lang="uk">Просунута і проста підтримка модів - додавайте нові міста, істот, героїв, артефакти і закляття без обмежень і конфліктів</li>
 			<li>Launcher for easy configuration - download mods from our server and install them immediately!</li>
 			<li xml:lang="cs">Spouštěč pro jednoduché nastavení - stahujte modifikace z našeho serveru a hned je instalujte!</li>
 			<li xml:lang="de">Launcher für einfache Konfiguration - Mods von unserem Server herunterladen und sofort installieren!</li>
+			<li xml:lang="uk">Лаунчер для легкого налаштування гри - завантажуйте моди з нашого сервера та встановлюйте їх одразу!</li>
 			<li>Random map generator that supports objects added by mods</li>
 			<li xml:lang="cs">Náhodný generátor map, který podporuje předměty přidané modifikacemi</li>
 			<li xml:lang="de">Zufallsgenerator für Karten, der von Mods hinzugefügte Objekte unterstützt</li>
+			<li xml:lang="uk">Генератор випадкових карт, який підтримує об'єкти, додані модами</li>
 		</ul>
 		<p>Note: In order to play the game using VCMI you need to own data files for Heroes of Might and Magic III: The Shadow of Death.</p>
 		<p xml:lang="cs">Poznámka: pokud chcete hrát hru přes VCMI, musíte vlastnit datové soubory Heroes of Might and Magic III: The Shadow of Death.</p>
 		<p xml:lang="de">Hinweis: Um das Spiel mit VCMI spielen zu können, sind die Originaldateien für Heroes of Might and Magic III: The Shadow of Death erforderlich.</p>
+		<p xml:lang="uk">Примітка: Для того, щоб грати в гру за допомогою VCMI, вам потрібно мати файли даних для гри Heroes of Might and Magic III: The Shadow of Death.</p>
 		<p>If you want help, please check our forum, bug tracker or GitHub page.</p>
 		<p xml:lang="cs">Pokud chcete pomoct, prosíme, podívejte se na naše fórum nebo GitHub.</p>
 		<p xml:lang="de">Wird Hilfe benötigt, besucht bitte unser Forum, den Bugtracker oder die GitHub-Seite.</p>
+		<p xml:lang="uk">Якщо вам потрібна допомога, зверніться до нашого форуму, баг-трекера або на сторінку GitHub.</p>
 	</description>
 	<screenshots>
 		<screenshot type="default">
@@ -79,7 +90,7 @@
 	</screenshots>
 	<launchable type="desktop-id">vcmilauncher.desktop</launchable>
 	<releases>
-		<release version="1.5.0" date="2024-03-01" type="development"/>
+		<release version="1.5.0" date="2024-05-10" type="stable"/>
 		<release version="1.4.5" date="2024-01-23" type="stable"/>
 		<release version="1.4.4" date="2024-01-20" type="stable"/>
 		<release version="1.4.3" date="2024-01-19" type="stable"/>

+ 61 - 57
launcher/translation/chinese.ts

@@ -256,7 +256,7 @@
     <message>
         <location filename="../modManager/cmodlistview_moc.ui" line="373"/>
         <source>Install from file</source>
-        <translation type="unfinished"></translation>
+        <translation>从文件中安装</translation>
     </message>
     <message>
         <location filename="../modManager/cmodlistview_moc.ui" line="424"/>
@@ -352,18 +352,18 @@
     <message>
         <location filename="../modManager/cmodlistview_moc.cpp" line="310"/>
         <source>please upgrade mod</source>
-        <translation type="unfinished"></translation>
+        <translation>请更新模组</translation>
     </message>
     <message>
         <location filename="../modManager/cmodlistview_moc.cpp" line="182"/>
         <location filename="../modManager/cmodlistview_moc.cpp" line="796"/>
         <source>mods repository index</source>
-        <translation type="unfinished"></translation>
+        <translation>模组源索引号</translation>
     </message>
     <message>
         <location filename="../modManager/cmodlistview_moc.cpp" line="312"/>
         <source>or newer</source>
-        <translation type="unfinished"></translation>
+        <translation>或更新的版本</translation>
     </message>
     <message>
         <location filename="../modManager/cmodlistview_moc.cpp" line="315"/>
@@ -420,42 +420,42 @@
     <message>
         <location filename="../modManager/cmodlistview_moc.cpp" line="627"/>
         <source>All supported files</source>
-        <translation type="unfinished"></translation>
+        <translation>所有支持的文件格式</translation>
     </message>
     <message>
         <location filename="../modManager/cmodlistview_moc.cpp" line="627"/>
         <source>Maps</source>
-        <translation type="unfinished">地图</translation>
+        <translation>地图</translation>
     </message>
     <message>
         <location filename="../modManager/cmodlistview_moc.cpp" line="627"/>
         <source>Campaigns</source>
-        <translation type="unfinished"></translation>
+        <translation>战役</translation>
     </message>
     <message>
         <location filename="../modManager/cmodlistview_moc.cpp" line="627"/>
         <source>Configs</source>
-        <translation type="unfinished"></translation>
+        <translation>配置</translation>
     </message>
     <message>
         <location filename="../modManager/cmodlistview_moc.cpp" line="627"/>
         <source>Mods</source>
-        <translation type="unfinished">模组</translation>
+        <translation>模组</translation>
     </message>
     <message>
         <location filename="../modManager/cmodlistview_moc.cpp" line="628"/>
         <source>Select files (configs, mods, maps, campaigns) to install...</source>
-        <translation type="unfinished"></translation>
+        <translation>选择文件(配置,模组,地图,战役)来安装</translation>
     </message>
     <message>
         <location filename="../modManager/cmodlistview_moc.cpp" line="654"/>
         <source>Replace config file?</source>
-        <translation type="unfinished"></translation>
+        <translation>替换配置文件?</translation>
     </message>
     <message>
         <location filename="../modManager/cmodlistview_moc.cpp" line="654"/>
         <source>Do you want to replace %1?</source>
-        <translation type="unfinished"></translation>
+        <translation>你想要替换%1吗?</translation>
     </message>
     <message>
         <location filename="../modManager/cmodlistview_moc.cpp" line="693"/>
@@ -509,7 +509,7 @@ Install successfully downloaded?</source>
     <message>
         <location filename="../modManager/cmodlistview_moc.cpp" line="960"/>
         <source>screenshots</source>
-        <translation type="unfinished"></translation>
+        <translation>截图</translation>
     </message>
     <message>
         <location filename="../modManager/cmodlistview_moc.cpp" line="966"/>
@@ -528,95 +528,96 @@ Install successfully downloaded?</source>
     <message>
         <location filename="../modManager/cmodmanager.cpp" line="160"/>
         <source>Can not install submod</source>
-        <translation type="unfinished"></translation>
+        <translation>无法安装子模组</translation>
     </message>
     <message>
         <location filename="../modManager/cmodmanager.cpp" line="163"/>
         <source>Mod is already installed</source>
-        <translation type="unfinished"></translation>
+        <translation>模组已安装</translation>
     </message>
     <message>
         <location filename="../modManager/cmodmanager.cpp" line="172"/>
         <source>Can not uninstall submod</source>
-        <translation type="unfinished"></translation>
+        <translation>无法卸载子模组</translation>
     </message>
     <message>
         <location filename="../modManager/cmodmanager.cpp" line="175"/>
         <source>Mod is not installed</source>
-        <translation type="unfinished"></translation>
+        <translation>模组未安装</translation>
     </message>
     <message>
         <location filename="../modManager/cmodmanager.cpp" line="185"/>
         <source>Mod is already enabled</source>
-        <translation type="unfinished"></translation>
+        <translation>模组已启用</translation>
     </message>
     <message>
         <location filename="../modManager/cmodmanager.cpp" line="188"/>
         <location filename="../modManager/cmodmanager.cpp" line="231"/>
         <source>Mod must be installed first</source>
-        <translation type="unfinished"></translation>
+        <translation>需要先安装模组</translation>
     </message>
     <message>
         <location filename="../modManager/cmodmanager.cpp" line="192"/>
         <source>Mod is not compatible, please update VCMI and checkout latest mod revisions</source>
-        <translation type="unfinished"></translation>
+        <translation>模组不兼容,请更新VCMI并获取模组最新版本</translation>
     </message>
     <message>
         <location filename="../modManager/cmodmanager.cpp" line="197"/>
         <source>Required mod %1 is missing</source>
-        <translation type="unfinished"></translation>
+        <translation>需要的模组%1未找到</translation>
     </message>
     <message>
         <location filename="../modManager/cmodmanager.cpp" line="202"/>
         <source>Required mod %1 is not enabled</source>
-        <translation type="unfinished"></translation>
+        <translation>需要的模组%1未启用</translation>
     </message>
     <message>
         <location filename="../modManager/cmodmanager.cpp" line="211"/>
         <location filename="../modManager/cmodmanager.cpp" line="218"/>
         <source>This mod conflicts with %1</source>
-        <translation type="unfinished"></translation>
+        <translation>此模组和%1冲突</translation>
     </message>
     <message>
         <location filename="../modManager/cmodmanager.cpp" line="228"/>
         <source>Mod is already disabled</source>
-        <translation type="unfinished"></translation>
+        <translation>模组已禁用</translation>
     </message>
     <message>
         <location filename="../modManager/cmodmanager.cpp" line="238"/>
         <source>This mod is needed to run %1</source>
-        <translation type="unfinished"></translation>
+        <translation>此模组需要运行%1</translation>
     </message>
     <message>
         <location filename="../modManager/cmodmanager.cpp" line="280"/>
         <source>Mod archive is missing</source>
-        <translation type="unfinished"></translation>
+        <translation>模组归档文件未找到</translation>
     </message>
     <message>
         <location filename="../modManager/cmodmanager.cpp" line="283"/>
         <source>Mod with such name is already installed</source>
-        <translation type="unfinished"></translation>
+        <translation>同名模组已安装</translation>
     </message>
     <message>
         <location filename="../modManager/cmodmanager.cpp" line="288"/>
         <source>Mod archive is invalid or corrupted</source>
-        <translation type="unfinished"></translation>
+        <translation>模组归档文件无效或损坏</translation>
     </message>
     <message>
         <location filename="../modManager/cmodmanager.cpp" line="314"/>
         <source>Failed to extract mod data</source>
-        <translation type="unfinished"></translation>
+        <translation>提取模组数据失败</translation>
     </message>
     <message>
         <location filename="../modManager/cmodmanager.cpp" line="342"/>
         <source>Data with this mod was not found</source>
-        <translation type="unfinished"></translation>
+        <translation>此模组的数据未找到</translation>
     </message>
     <message>
         <location filename="../modManager/cmodmanager.cpp" line="346"/>
         <source>Mod is located in protected directory, please remove it manually:
 </source>
-        <translation type="unfinished"></translation>
+        <translation>模组位于受保护的目录,请手动删除它:
+</translation>
     </message>
 </context>
 <context>
@@ -864,27 +865,27 @@ Fullscreen Exclusive Mode - game will cover entirety of your screen and will use
     <message>
         <location filename="../modManager/cmodlist.cpp" line="21"/>
         <source>%1 B</source>
-        <translation type="unfinished"></translation>
+        <translation>%1 B</translation>
     </message>
     <message>
         <location filename="../modManager/cmodlist.cpp" line="22"/>
         <source>%1 KiB</source>
-        <translation type="unfinished"></translation>
+        <translation>%1 KiB</translation>
     </message>
     <message>
         <location filename="../modManager/cmodlist.cpp" line="23"/>
         <source>%1 MiB</source>
-        <translation type="unfinished"></translation>
+        <translation>%1 MiB</translation>
     </message>
     <message>
         <location filename="../modManager/cmodlist.cpp" line="24"/>
         <source>%1 GiB</source>
-        <translation type="unfinished"></translation>
+        <translation>%1 GiB</translation>
     </message>
     <message>
         <location filename="../modManager/cmodlist.cpp" line="25"/>
         <source>%1 TiB</source>
-        <translation type="unfinished"></translation>
+        <translation>%1 TiB</translation>
     </message>
 </context>
 <context>
@@ -940,7 +941,7 @@ Heroes® of Might and Magic® III HD is currently not supported!</source>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="288"/>
         <location filename="../firstLaunch/firstlaunch_moc.cpp" line="350"/>
         <source>Install gog.com files</source>
-        <translation type="unfinished"></translation>
+        <translation>安装  gog.com 文件</translation>
     </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="362"/>
@@ -1026,7 +1027,7 @@ Heroes® of Might and Magic® III HD is currently not supported!</source>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="346"/>
         <source>If you don&apos;t have a copy of Heroes III installed, VCMI can import your Heroes III data using the offline installer from gog.com.</source>
-        <translation type="unfinished"></translation>
+        <translation>如果你没有一份英雄无敌3的安装拷贝,VCMI可以从 gog.com的离线安装包导入你的英雄无敌3数据。</translation>
     </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.ui" line="384"/>
@@ -1089,53 +1090,53 @@ Heroes® of Might and Magic® III HD is currently not supported!</source>
         <location filename="../firstLaunch/firstlaunch_moc.cpp" line="289"/>
         <source>Select %1 file...</source>
         <comment>param is file extension</comment>
-        <translation type="unfinished"></translation>
+        <translation>选择%1文件...</translation>
     </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.cpp" line="290"/>
         <source>You have to select %1 file!</source>
         <comment>param is file extension</comment>
-        <translation type="unfinished"></translation>
+        <translation>你必须选择%1文件!</translation>
     </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.cpp" line="292"/>
         <source>GOG file (*.*)</source>
-        <translation type="unfinished"></translation>
+        <translation>GOG文件 (*.*)</translation>
     </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.cpp" line="293"/>
         <source>File selection</source>
-        <translation type="unfinished"></translation>
+        <translation>选择文件</translation>
     </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.cpp" line="300"/>
         <source>Invalid file selected</source>
-        <translation type="unfinished"></translation>
+        <translation>所选的文件无效</translation>
     </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.cpp" line="307"/>
         <source>GOG installer</source>
-        <translation type="unfinished"></translation>
+        <translation>GOG安装包</translation>
     </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.cpp" line="310"/>
         <source>GOG data</source>
-        <translation type="unfinished"></translation>
+        <translation>GOC数据</translation>
     </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.cpp" line="314"/>
         <source>Installing... Please wait!</source>
-        <translation type="unfinished"></translation>
+        <translation>安装中...请等待!</translation>
     </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.cpp" line="349"/>
         <source>No Heroes III data!</source>
-        <translation type="unfinished"></translation>
+        <translation>没有英雄无敌3数据!</translation>
     </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.cpp" line="349"/>
         <source>Selected files do not contain Heroes III data!</source>
-        <translation type="unfinished"></translation>
+        <translation>所选的文件不包含英雄无敌3数据!</translation>
     </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.cpp" line="387"/>
@@ -1143,26 +1144,29 @@ Heroes® of Might and Magic® III HD is currently not supported!</source>
         <location filename="../firstLaunch/firstlaunch_moc.cpp" line="408"/>
         <location filename="../firstLaunch/firstlaunch_moc.cpp" line="413"/>
         <source>Heroes III data not found!</source>
-        <translation type="unfinished"></translation>
+        <translation>未找到英雄无敌3数据!</translation>
     </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.cpp" line="387"/>
         <location filename="../firstLaunch/firstlaunch_moc.cpp" line="401"/>
         <source>Failed to detect valid Heroes III data in chosen directory.
 Please select directory with installed Heroes III data.</source>
-        <translation type="unfinished"></translation>
+        <translation>从所选目录检测有效的英雄无敌3数据失败。
+请选择已安装英雄无敌3的数据目录。</translation>
     </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.cpp" line="408"/>
         <source>Heroes III: HD Edition files are not supported by VCMI.
 Please select directory with Heroes III: Complete Edition or Heroes III: Shadow of Death.</source>
-        <translation type="unfinished"></translation>
+        <translation>VCMI不支持英雄无敌3高清版文件。
+请选择包含《英雄无敌3:完全版》或《英雄无敌3:死亡阴影》的目录。</translation>
     </message>
     <message>
         <location filename="../firstLaunch/firstlaunch_moc.cpp" line="413"/>
         <source>Unknown or unsupported Heroes III version found.
 Please select directory with Heroes III: Complete Edition or Heroes III: Shadow of Death.</source>
-        <translation type="unfinished"></translation>
+        <translation>检测到未知或不支持的英雄无敌3版本。
+请选择包含《英雄无敌3:完全版》或《英雄无敌3:死亡阴影》的目录。</translation>
     </message>
 </context>
 <context>
@@ -1319,17 +1323,17 @@ Please select directory with Heroes III: Complete Edition or Heroes III: Shadow
     <message>
         <location filename="../modManager/cmodlistmodel_moc.cpp" line="172"/>
         <source>Name</source>
-        <translation type="unfinished">名称</translation>
+        <translation>名称</translation>
     </message>
     <message>
         <location filename="../modManager/cmodlistmodel_moc.cpp" line="175"/>
         <source>Type</source>
-        <translation type="unfinished">类型</translation>
+        <translation>类型</translation>
     </message>
     <message>
         <location filename="../modManager/cmodlistmodel_moc.cpp" line="176"/>
         <source>Version</source>
-        <translation type="unfinished">版本</translation>
+        <translation>版本</translation>
     </message>
 </context>
 <context>
@@ -1352,12 +1356,12 @@ Please select directory with Heroes III: Complete Edition or Heroes III: Shadow
     <message>
         <location filename="../updatedialog_moc.cpp" line="64"/>
         <source>Network error</source>
-        <translation type="unfinished"></translation>
+        <translation>网络错误</translation>
     </message>
     <message>
         <location filename="../updatedialog_moc.cpp" line="101"/>
         <source>Cannot read JSON from url or incorrect JSON data</source>
-        <translation type="unfinished"></translation>
+        <translation>无法从url中读取JSON或JSON数据不正确</translation>
     </message>
 </context>
 </TS>