From 21db022547251cbf9fd3b5b5f234494a596ac0ef Mon Sep 17 00:00:00 2001 From: Laserlicht <13953785+Laserlicht@users.noreply.github.com> Date: Thu, 19 Jun 2025 15:03:34 +0200 Subject: [PATCH 01/60] seperate image for each mage guild level possible --- client/windows/CCastleInterface.cpp | 13 ++++++++++--- config/factions/castle.json | 4 ++-- config/factions/conflux.json | 6 +++--- config/factions/dungeon.json | 6 +++--- config/factions/fortress.json | 6 +++--- config/factions/inferno.json | 6 +++--- config/factions/necropolis.json | 6 +++--- config/factions/rampart.json | 6 +++--- config/factions/stronghold.json | 6 +++--- config/factions/tower.json | 6 +++--- config/schemas/faction.json | 19 ++++++++++++++----- lib/entities/faction/CTown.h | 4 ++-- lib/entities/faction/CTownHandler.cpp | 18 +++++++++++++++--- 13 files changed, 67 insertions(+), 39 deletions(-) diff --git a/client/windows/CCastleInterface.cpp b/client/windows/CCastleInterface.cpp index a5da90c7e..fca2b6bdb 100644 --- a/client/windows/CCastleInterface.cpp +++ b/client/windows/CCastleInterface.cpp @@ -1194,7 +1194,10 @@ void CCastleBuildings::enterTownHall() void CCastleBuildings::openMagesGuild() { auto mageGuildBackground = GAME->interface()->castleInt->town->getTown()->clientInfo.guildBackground; - ENGINE->windows().createAndPushWindow(GAME->interface()->castleInt, mageGuildBackground); + assert(mageGuildBackground.size() == 1 || mageGuildBackground.size() == GAME->interface()->castleInt->town->getTown()->mageLevel); + auto selectedMageGuildBackground = mageGuildBackground.size() == 1 ? mageGuildBackground[0] : mageGuildBackground[town->mageGuildLevel() - 1]; + + ENGINE->windows().createAndPushWindow(GAME->interface()->castleInt, selectedMageGuildBackground); } void CCastleBuildings::openTownHall() @@ -2113,7 +2116,11 @@ CMageGuildScreen::CMageGuildScreen(CCastleInterface * owner, const ImagePath & i { OBJECT_CONSTRUCTION; - window = std::make_shared(owner->town->getTown()->clientInfo.guildWindow, 332, 76); + auto guildWindow = owner->town->getTown()->clientInfo.guildWindow; + assert(guildWindow.size() == 1 || guildWindow.size() == GAME->interface()->castleInt->town->getTown()->mageLevel); + auto selectedGuildWindow = guildWindow.size() == 1 ? guildWindow[0] : guildWindow[owner->town->mageGuildLevel() - 1]; + + window = std::make_shared(selectedGuildWindow, 332, 76); resdatabar = std::make_shared(); resdatabar->moveBy(pos.topLeft(), true); @@ -2140,7 +2147,7 @@ void CMageGuildScreen::updateSpells(ObjectInstanceID tID) {Point(48,53), Point(48,147), Point(48,241), Point(48,335), Point(48,429)}, {Point(570,82), Point(672,82), Point(570,157), Point(672,157)}, {Point(183,42), Point(183,148), Point(183,253)}, - {Point(491,325), Point(591,325)} + {Point(491,325), Point(591,325)}// }; spells.clear(); diff --git a/config/factions/castle.json b/config/factions/castle.json index c5726036f..85b4ac4b3 100644 --- a/config/factions/castle.json +++ b/config/factions/castle.json @@ -122,9 +122,9 @@ "musicTheme" : [ "music/CstleTown" ], "defaultTavern" : 5, "tavernVideo" : "TAVERN.BIK", - "guildBackground" : "TPMAGE.bmp", + "guildBackground" : [ "TPMAGE.bmp" ], "townBackground": "TBCSBACK.bmp", - "guildWindow": "TPMAGECS.bmp", + "guildWindow": [ "TPMAGECS.bmp" ], "buildingsIcons": "HALLCSTL.DEF", "hallBackground": "TPTHBKCS.BMP", "hallSlots": diff --git a/config/factions/conflux.json b/config/factions/conflux.json index 6de579017..03a191a8b 100644 --- a/config/factions/conflux.json +++ b/config/factions/conflux.json @@ -126,9 +126,9 @@ "musicTheme" : [ "music/ElemTown" ], "defaultTavern" : 5, "tavernVideo" : "TAVERN.BIK", - "guildBackground" : "TPMAGE.bmp", - "townBackground": "TBELBACK.bmp", - "guildWindow": "TPMAGEEL.bmp", + "guildBackground" : [ "TPMAGE.bmp" ], + "townBackground": "TBCSBACK.bmp", + "guildWindow": [ "TPMAGECS.bmp" ], "buildingsIcons": "HALLELEM.DEF", "hallBackground": "TPTHBKFR.BMP", "hallSlots": diff --git a/config/factions/dungeon.json b/config/factions/dungeon.json index f4bf5670a..24689154f 100644 --- a/config/factions/dungeon.json +++ b/config/factions/dungeon.json @@ -122,9 +122,9 @@ "musicTheme" : [ "music/Dungeon" ], "defaultTavern" : 5, "tavernVideo" : "TAVERN.BIK", - "guildBackground" : "TPMAGE.bmp", - "townBackground": "TBDNBACK.bmp", - "guildWindow": "TPMAGEDN.bmp", + "guildBackground" : [ "TPMAGE.bmp" ], + "townBackground": "TBCSBACK.bmp", + "guildWindow": [ "TPMAGECS.bmp" ], "buildingsIcons": "HALLDUNG.DEF", "hallBackground": "TPTHBKDG.BMP", "hallSlots": diff --git a/config/factions/fortress.json b/config/factions/fortress.json index 545fe44a9..749878476 100644 --- a/config/factions/fortress.json +++ b/config/factions/fortress.json @@ -122,9 +122,9 @@ "musicTheme" : [ "music/FortressTown" ], "defaultTavern" : 5, "tavernVideo" : "TAVERN.BIK", - "guildBackground" : "TPMAGE.bmp", - "townBackground": "TBFRBACK.bmp", - "guildWindow": "TPMAGEFR.bmp", + "guildBackground" : [ "TPMAGE.bmp" ], + "townBackground": "TBCSBACK.bmp", + "guildWindow": [ "TPMAGECS.bmp" ], "buildingsIcons": "HALLFORT.DEF", "hallBackground": "TPTHBKFR.BMP", "hallSlots": diff --git a/config/factions/inferno.json b/config/factions/inferno.json index 813f392aa..489aab8f1 100644 --- a/config/factions/inferno.json +++ b/config/factions/inferno.json @@ -123,9 +123,9 @@ "musicTheme" : [ "music/InfernoTown" ], "defaultTavern" : 5, "tavernVideo" : "TAVERN.BIK", - "guildBackground" : "TPMAGE.bmp", - "townBackground": "TBINBACK.bmp", - "guildWindow": "TPMAGEIN.bmp", + "guildBackground" : [ "TPMAGE.bmp" ], + "townBackground": "TBCSBACK.bmp", + "guildWindow": [ "TPMAGECS.bmp" ], "buildingsIcons": "HALLINFR.DEF", "hallBackground": "TPTHBKIN.BMP", "hallSlots": diff --git a/config/factions/necropolis.json b/config/factions/necropolis.json index 21ac9c5e9..85ec7c377 100644 --- a/config/factions/necropolis.json +++ b/config/factions/necropolis.json @@ -127,9 +127,9 @@ "musicTheme" : [ "music/NecroTown" ], "defaultTavern" : 5, "tavernVideo" : "TAVERN.BIK", - "guildBackground" : "TPMAGE.bmp", - "townBackground": "TBNCBACK.bmp", - "guildWindow": "TPMAGENC.bmp", + "guildBackground" : [ "TPMAGE.bmp" ], + "townBackground": "TBCSBACK.bmp", + "guildWindow": [ "TPMAGECS.bmp" ], "buildingsIcons": "HALLNECR.DEF", "hallBackground": "TPTHBKNC.BMP", "hallSlots": diff --git a/config/factions/rampart.json b/config/factions/rampart.json index aafcd7375..3c9e8b1bc 100644 --- a/config/factions/rampart.json +++ b/config/factions/rampart.json @@ -126,9 +126,9 @@ "musicTheme" : [ "music/Rampart" ], "defaultTavern" : 5, "tavernVideo" : "TAVERN.BIK", - "guildBackground" : "TPMAGE.bmp", - "townBackground": "TBRMBACK.bmp", - "guildWindow": "TPMAGERM.bmp", + "guildBackground" : [ "TPMAGE.bmp" ], + "townBackground": "TBCSBACK.bmp", + "guildWindow": [ "TPMAGECS.bmp" ], "buildingsIcons": "HALLRAMP.DEF", "hallBackground": "TPTHBKRM.BMP", "hallSlots": diff --git a/config/factions/stronghold.json b/config/factions/stronghold.json index 66bf92db0..2ce031a13 100644 --- a/config/factions/stronghold.json +++ b/config/factions/stronghold.json @@ -120,9 +120,9 @@ "musicTheme" : [ "music/Stronghold" ], "defaultTavern" : 5, "tavernVideo" : "TAVERN.BIK", - "guildBackground" : "TPMAGE.bmp", - "townBackground": "TBSTBACK.bmp", - "guildWindow": "TPMAGEST.bmp", + "guildBackground" : [ "TPMAGE.bmp" ], + "townBackground": "TBCSBACK.bmp", + "guildWindow": [ "TPMAGECS.bmp" ], "buildingsIcons": "HALLSTRN.DEF", "hallBackground": "TPTHBKTW.BMP", "hallSlots": diff --git a/config/factions/tower.json b/config/factions/tower.json index a66491500..d932bc2bc 100644 --- a/config/factions/tower.json +++ b/config/factions/tower.json @@ -121,9 +121,9 @@ "musicTheme" : [ "music/TowerTown" ], "defaultTavern" : 5, "tavernVideo" : "TAVERN.BIK", - "guildBackground" : "TPMAGE.bmp", - "townBackground": "TBTWBACK.bmp", - "guildWindow": "TPMAGETW.bmp", + "guildBackground" : [ "TPMAGE.bmp" ], + "townBackground": "TBCSBACK.bmp", + "guildWindow": [ "TPMAGECS.bmp" ], "buildingsIcons": "HALLTOWR.DEF", "hallBackground": "TPTHBKTW.BMP", "hallSlots": diff --git a/config/schemas/faction.json b/config/schemas/faction.json index e25c286e4..439719540 100644 --- a/config/schemas/faction.json +++ b/config/schemas/faction.json @@ -166,13 +166,22 @@ "format" : "imageFile" }, "guildWindow" : { - "type" : "string", - "description" : "Image with small view on town from mage guild" + "type" : "array", + "description" : "Image with small view on town from mage guild (each array element for different mage guild level; if one element only this will be always selected)", + "minItems" : 1, + "items" : { + "type" : "string", + "format" : "imageFile" + } }, "guildBackground" : { - "type" : "string", - "description" : "Image with background of mage guild", - "format" : "imageFile" + "type" : "array", + "description" : "Image with background of mage guild (each array element for different mage guild level; if one element only this will be always selected)", + "minItems" : 1, + "items" : { + "type" : "string", + "format" : "imageFile" + } }, "hallBackground" : { "type" : "string", diff --git a/lib/entities/faction/CTown.h b/lib/entities/faction/CTown.h index b48087703..49d2bfbf0 100644 --- a/lib/entities/faction/CTown.h +++ b/lib/entities/faction/CTown.h @@ -88,8 +88,8 @@ public: VideoPath tavernVideo; std::vector musicTheme; ImagePath townBackground; - ImagePath guildBackground; - ImagePath guildWindow; + std::vector guildBackground; + std::vector guildWindow; AnimationPath buildingsIcons; ImagePath hallBackground; /// vector[row][column] = list of buildings in this slot diff --git a/lib/entities/faction/CTownHandler.cpp b/lib/entities/faction/CTownHandler.cpp index b07442b95..983442d95 100644 --- a/lib/entities/faction/CTownHandler.cpp +++ b/lib/entities/faction/CTownHandler.cpp @@ -573,12 +573,24 @@ void CTownHandler::loadClientData(CTown &town, const JsonNode & source) const info.hallBackground = ImagePath::fromJson(source["hallBackground"]); info.townBackground = ImagePath::fromJson(source["townBackground"]); - info.guildWindow = ImagePath::fromJson(source["guildWindow"]); info.buildingsIcons = AnimationPath::fromJson(source["buildingsIcons"]); - - info.guildBackground = ImagePath::fromJson(source["guildBackground"]); info.tavernVideo = VideoPath::fromJson(source["tavernVideo"]); + auto loadStringOrVector = [](auto & target, auto & node){ + if(node.isVector()) + { + target.clear(); + for(auto & background : node.Vector()) + { + target.push_back(ImagePath::fromJson(background)); + } + } + else + target = {ImagePath::fromJson(node)}; + }; + loadStringOrVector(info.guildBackground, source["guildBackground"]); + loadStringOrVector(info.guildWindow, source["guildWindow"]); + loadTownHall(town, source["hallSlots"]); loadStructures(town, source["structures"]); loadSiegeScreen(town, source["siege"]); From fac8fb59522f7b0aeed4f38bf0cfa46543ac4c3e Mon Sep 17 00:00:00 2001 From: Laserlicht <13953785+Laserlicht@users.noreply.github.com> Date: Thu, 19 Jun 2025 15:59:09 +0200 Subject: [PATCH 02/60] allow to position spells in mage guild --- client/windows/CCastleInterface.cpp | 19 +++++++++------- config/factions/castle.json | 6 +++++ config/factions/conflux.json | 11 +++++++-- config/factions/dungeon.json | 11 +++++++-- config/factions/fortress.json | 9 ++++++-- config/factions/inferno.json | 11 +++++++-- config/factions/necropolis.json | 11 +++++++-- config/factions/rampart.json | 11 +++++++-- config/factions/stronghold.json | 9 ++++++-- config/factions/tower.json | 11 +++++++-- config/schemas/faction.json | 20 ++++++++++++++++- lib/entities/faction/CTown.h | 1 + lib/entities/faction/CTownHandler.cpp | 32 +++++++++++++-------------- 13 files changed, 120 insertions(+), 42 deletions(-) diff --git a/client/windows/CCastleInterface.cpp b/client/windows/CCastleInterface.cpp index fca2b6bdb..1dfdc7932 100644 --- a/client/windows/CCastleInterface.cpp +++ b/client/windows/CCastleInterface.cpp @@ -2141,20 +2141,23 @@ void CMageGuildScreen::updateSpells(ObjectInstanceID tID) return; OBJECT_CONSTRUCTION; - static const std::vector > positions = - { - {Point(222,445), Point(312,445), Point(402,445), Point(520,445), Point(610,445), Point(700,445)}, - {Point(48,53), Point(48,147), Point(48,241), Point(48,335), Point(48,429)}, - {Point(570,82), Point(672,82), Point(570,157), Point(672,157)}, - {Point(183,42), Point(183,148), Point(183,253)}, - {Point(491,325), Point(591,325)}// - }; spells.clear(); emptyScrolls.clear(); const CGTownInstance * town = GAME->interface()->cb->getTown(townId); + auto positions = town->getTown()->clientInfo.guildSpellPositions; + if(!positions.size()) // TODO: remove legacy for compatibility + positions = + { + {Point(222,445), Point(312,445), Point(402,445), Point(520,445), Point(610,445), Point(700,445)}, + {Point(48,53), Point(48,147), Point(48,241), Point(48,335), Point(48,429)}, + {Point(570,82), Point(672,82), Point(570,157), Point(672,157)}, + {Point(183,42), Point(183,148), Point(183,253)}, + {Point(491,325), Point(591,325)} + }; + for(uint32_t i=0; igetTown()->mageLevel; i++) { uint32_t spellCount = town->spellsAtLevel(i+1,false); //spell at level with -1 hmmm? diff --git a/config/factions/castle.json b/config/factions/castle.json index 85b4ac4b3..35b94e04b 100644 --- a/config/factions/castle.json +++ b/config/factions/castle.json @@ -147,6 +147,12 @@ ], "horde" : [ 2, -1 ], "mageGuild" : 4, + "guildSpellPositions" : [ + [ { "x": 222, "y": 445 }, { "x": 312, "y": 445 }, { "x": 402, "y": 445 }, { "x": 520, "y": 445 }, { "x": 610, "y": 445 }, { "x": 700, "y": 445 } ], + [ { "x": 48, "y": 53 }, { "x": 48, "y": 147 }, { "x": 48, "y": 241 }, { "x": 48, "y": 335 }, { "x": 48, "y": 429 } ], + [ { "x": 570, "y": 82 }, { "x": 672, "y": 82 }, { "x": 570, "y": 157 }, { "x": 672, "y": 157 } ], + [ { "x": 183, "y": 42 }, { "x": 183, "y": 148 }, { "x": 183, "y": 253 } ] + ], "moatAbility" : "castleMoat", // primaryResource not specified so town get both Wood and Ore for resource bonus diff --git a/config/factions/conflux.json b/config/factions/conflux.json index 03a191a8b..a6c7f7568 100644 --- a/config/factions/conflux.json +++ b/config/factions/conflux.json @@ -127,8 +127,8 @@ "defaultTavern" : 5, "tavernVideo" : "TAVERN.BIK", "guildBackground" : [ "TPMAGE.bmp" ], - "townBackground": "TBCSBACK.bmp", - "guildWindow": [ "TPMAGECS.bmp" ], + "townBackground": "TBELBACK.bmp", + "guildWindow": [ "TPMAGEEL.bmp" ], "buildingsIcons": "HALLELEM.DEF", "hallBackground": "TPTHBKFR.BMP", "hallSlots": @@ -151,6 +151,13 @@ ], "horde" : [ 0, -1 ], "mageGuild" : 5, + "guildSpellPositions" : [ + [ { "x": 222, "y": 445 }, { "x": 312, "y": 445 }, { "x": 402, "y": 445 }, { "x": 520, "y": 445 }, { "x": 610, "y": 445 }, { "x": 700, "y": 445 } ], + [ { "x": 48, "y": 53 }, { "x": 48, "y": 147 }, { "x": 48, "y": 241 }, { "x": 48, "y": 335 }, { "x": 48, "y": 429 } ], + [ { "x": 570, "y": 82 }, { "x": 672, "y": 82 }, { "x": 570, "y": 157 }, { "x": 672, "y": 157 } ], + [ { "x": 183, "y": 42 }, { "x": 183, "y": 148 }, { "x": 183, "y": 253 } ], + [ { "x": 491, "y": 325 }, { "x": 591, "y": 325 } ] + ], "primaryResource" : "mercury", "moatAbility" : "castleMoat", diff --git a/config/factions/dungeon.json b/config/factions/dungeon.json index 24689154f..037b79790 100644 --- a/config/factions/dungeon.json +++ b/config/factions/dungeon.json @@ -123,8 +123,8 @@ "defaultTavern" : 5, "tavernVideo" : "TAVERN.BIK", "guildBackground" : [ "TPMAGE.bmp" ], - "townBackground": "TBCSBACK.bmp", - "guildWindow": [ "TPMAGECS.bmp" ], + "townBackground": "TBDNBACK.bmp", + "guildWindow": [ "TPMAGEDN.bmp" ], "buildingsIcons": "HALLDUNG.DEF", "hallBackground": "TPTHBKDG.BMP", "hallSlots": @@ -147,6 +147,13 @@ ], "horde" : [ 0, -1 ], "mageGuild" : 5, + "guildSpellPositions" : [ + [ { "x": 222, "y": 445 }, { "x": 312, "y": 445 }, { "x": 402, "y": 445 }, { "x": 520, "y": 445 }, { "x": 610, "y": 445 }, { "x": 700, "y": 445 } ], + [ { "x": 48, "y": 53 }, { "x": 48, "y": 147 }, { "x": 48, "y": 241 }, { "x": 48, "y": 335 }, { "x": 48, "y": 429 } ], + [ { "x": 570, "y": 82 }, { "x": 672, "y": 82 }, { "x": 570, "y": 157 }, { "x": 672, "y": 157 } ], + [ { "x": 183, "y": 42 }, { "x": 183, "y": 148 }, { "x": 183, "y": 253 } ], + [ { "x": 491, "y": 325 }, { "x": 591, "y": 325 } ] + ], "primaryResource" : "sulfur", "moatAbility" : "dungeonMoat", diff --git a/config/factions/fortress.json b/config/factions/fortress.json index 749878476..37485b94f 100644 --- a/config/factions/fortress.json +++ b/config/factions/fortress.json @@ -123,8 +123,8 @@ "defaultTavern" : 5, "tavernVideo" : "TAVERN.BIK", "guildBackground" : [ "TPMAGE.bmp" ], - "townBackground": "TBCSBACK.bmp", - "guildWindow": [ "TPMAGECS.bmp" ], + "townBackground": "TBFRBACK.bmp", + "guildWindow": [ "TPMAGEFR.bmp" ], "buildingsIcons": "HALLFORT.DEF", "hallBackground": "TPTHBKFR.BMP", "hallSlots": @@ -147,6 +147,11 @@ ], "horde" : [ 0, -1 ], "mageGuild" : 3, + "guildSpellPositions" : [ + [ { "x": 222, "y": 445 }, { "x": 312, "y": 445 }, { "x": 402, "y": 445 }, { "x": 520, "y": 445 }, { "x": 610, "y": 445 }, { "x": 700, "y": 445 } ], + [ { "x": 48, "y": 53 }, { "x": 48, "y": 147 }, { "x": 48, "y": 241 }, { "x": 48, "y": 335 }, { "x": 48, "y": 429 } ], + [ { "x": 570, "y": 82 }, { "x": 672, "y": 82 }, { "x": 570, "y": 157 }, { "x": 672, "y": 157 } ] + ], "moatAbility" : "fortressMoat", // primaryResource not specified so town get both Wood and Ore for resource bonus diff --git a/config/factions/inferno.json b/config/factions/inferno.json index 489aab8f1..79f4b6649 100644 --- a/config/factions/inferno.json +++ b/config/factions/inferno.json @@ -124,8 +124,8 @@ "defaultTavern" : 5, "tavernVideo" : "TAVERN.BIK", "guildBackground" : [ "TPMAGE.bmp" ], - "townBackground": "TBCSBACK.bmp", - "guildWindow": [ "TPMAGECS.bmp" ], + "townBackground": "TBINBACK.bmp", + "guildWindow": [ "TPMAGEIN.bmp" ], "buildingsIcons": "HALLINFR.DEF", "hallBackground": "TPTHBKIN.BMP", "hallSlots": @@ -148,6 +148,13 @@ ], "horde" : [ 0, 2 ], "mageGuild" : 5, + "guildSpellPositions" : [ + [ { "x": 222, "y": 445 }, { "x": 312, "y": 445 }, { "x": 402, "y": 445 }, { "x": 520, "y": 445 }, { "x": 610, "y": 445 }, { "x": 700, "y": 445 } ], + [ { "x": 48, "y": 53 }, { "x": 48, "y": 147 }, { "x": 48, "y": 241 }, { "x": 48, "y": 335 }, { "x": 48, "y": 429 } ], + [ { "x": 570, "y": 82 }, { "x": 672, "y": 82 }, { "x": 570, "y": 157 }, { "x": 672, "y": 157 } ], + [ { "x": 183, "y": 42 }, { "x": 183, "y": 148 }, { "x": 183, "y": 253 } ], + [ { "x": 491, "y": 325 }, { "x": 591, "y": 325 } ] + ], "primaryResource" : "mercury", "moatAbility" : "infernoMoat", diff --git a/config/factions/necropolis.json b/config/factions/necropolis.json index 85ec7c377..724b50b64 100644 --- a/config/factions/necropolis.json +++ b/config/factions/necropolis.json @@ -128,8 +128,8 @@ "defaultTavern" : 5, "tavernVideo" : "TAVERN.BIK", "guildBackground" : [ "TPMAGE.bmp" ], - "townBackground": "TBCSBACK.bmp", - "guildWindow": [ "TPMAGECS.bmp" ], + "townBackground": "TBNCBACK.bmp", + "guildWindow": [ "TPMAGENC.bmp" ], "buildingsIcons": "HALLNECR.DEF", "hallBackground": "TPTHBKNC.BMP", "hallSlots": @@ -152,6 +152,13 @@ ], "horde" : [ 0, -1 ], "mageGuild" : 5, + "guildSpellPositions" : [ + [ { "x": 222, "y": 445 }, { "x": 312, "y": 445 }, { "x": 402, "y": 445 }, { "x": 520, "y": 445 }, { "x": 610, "y": 445 }, { "x": 700, "y": 445 } ], + [ { "x": 48, "y": 53 }, { "x": 48, "y": 147 }, { "x": 48, "y": 241 }, { "x": 48, "y": 335 }, { "x": 48, "y": 429 } ], + [ { "x": 570, "y": 82 }, { "x": 672, "y": 82 }, { "x": 570, "y": 157 }, { "x": 672, "y": 157 } ], + [ { "x": 183, "y": 42 }, { "x": 183, "y": 148 }, { "x": 183, "y": 253 } ], + [ { "x": 491, "y": 325 }, { "x": 591, "y": 325 } ] + ], "moatAbility" : "necropolisMoat", // primaryResource not specified so town get both Wood and Ore for resource bonus diff --git a/config/factions/rampart.json b/config/factions/rampart.json index 3c9e8b1bc..753254f6e 100644 --- a/config/factions/rampart.json +++ b/config/factions/rampart.json @@ -127,8 +127,8 @@ "defaultTavern" : 5, "tavernVideo" : "TAVERN.BIK", "guildBackground" : [ "TPMAGE.bmp" ], - "townBackground": "TBCSBACK.bmp", - "guildWindow": [ "TPMAGECS.bmp" ], + "townBackground": "TBRMBACK.bmp", + "guildWindow": [ "TPMAGERM.bmp" ], "buildingsIcons": "HALLRAMP.DEF", "hallBackground": "TPTHBKRM.BMP", "hallSlots": @@ -151,6 +151,13 @@ ], "horde" : [ 1, 4 ], "mageGuild" : 5, + "guildSpellPositions" : [ + [ { "x": 222, "y": 445 }, { "x": 312, "y": 445 }, { "x": 402, "y": 445 }, { "x": 520, "y": 445 }, { "x": 610, "y": 445 }, { "x": 700, "y": 445 } ], + [ { "x": 48, "y": 53 }, { "x": 48, "y": 147 }, { "x": 48, "y": 241 }, { "x": 48, "y": 335 }, { "x": 48, "y": 429 } ], + [ { "x": 570, "y": 82 }, { "x": 672, "y": 82 }, { "x": 570, "y": 157 }, { "x": 672, "y": 157 } ], + [ { "x": 183, "y": 42 }, { "x": 183, "y": 148 }, { "x": 183, "y": 253 } ], + [ { "x": 491, "y": 325 }, { "x": 591, "y": 325 } ] + ], "primaryResource" : "crystal", "moatAbility" : "rampartMoat", diff --git a/config/factions/stronghold.json b/config/factions/stronghold.json index 2ce031a13..d34b6e2d8 100644 --- a/config/factions/stronghold.json +++ b/config/factions/stronghold.json @@ -121,8 +121,8 @@ "defaultTavern" : 5, "tavernVideo" : "TAVERN.BIK", "guildBackground" : [ "TPMAGE.bmp" ], - "townBackground": "TBCSBACK.bmp", - "guildWindow": [ "TPMAGECS.bmp" ], + "townBackground": "TBSTBACK.bmp", + "guildWindow": [ "TPMAGEST.bmp" ], "buildingsIcons": "HALLSTRN.DEF", "hallBackground": "TPTHBKTW.BMP", "hallSlots": @@ -145,6 +145,11 @@ ], "horde" : [ 0, -1 ], "mageGuild" : 3, + "guildSpellPositions" : [ + [ { "x": 222, "y": 445 }, { "x": 312, "y": 445 }, { "x": 402, "y": 445 }, { "x": 520, "y": 445 }, { "x": 610, "y": 445 }, { "x": 700, "y": 445 } ], + [ { "x": 48, "y": 53 }, { "x": 48, "y": 147 }, { "x": 48, "y": 241 }, { "x": 48, "y": 335 }, { "x": 48, "y": 429 } ], + [ { "x": 570, "y": 82 }, { "x": 672, "y": 82 }, { "x": 570, "y": 157 }, { "x": 672, "y": 157 } ] + ], "moatAbility" : "strongholdMoat", // primaryResource not specified so town get both Wood and Ore for resource bonus diff --git a/config/factions/tower.json b/config/factions/tower.json index d932bc2bc..588b40722 100644 --- a/config/factions/tower.json +++ b/config/factions/tower.json @@ -122,8 +122,8 @@ "defaultTavern" : 5, "tavernVideo" : "TAVERN.BIK", "guildBackground" : [ "TPMAGE.bmp" ], - "townBackground": "TBCSBACK.bmp", - "guildWindow": [ "TPMAGECS.bmp" ], + "townBackground": "TBTWBACK.bmp", + "guildWindow": [ "TPMAGETW.bmp" ], "buildingsIcons": "HALLTOWR.DEF", "hallBackground": "TPTHBKTW.BMP", "hallSlots": @@ -147,6 +147,13 @@ "horde" : [ 1, -1 ], "primaryResource" : "gems", "mageGuild" : 5, + "guildSpellPositions" : [ + [ { "x": 222, "y": 445 }, { "x": 312, "y": 445 }, { "x": 402, "y": 445 }, { "x": 520, "y": 445 }, { "x": 610, "y": 445 }, { "x": 700, "y": 445 } ], + [ { "x": 48, "y": 53 }, { "x": 48, "y": 147 }, { "x": 48, "y": 241 }, { "x": 48, "y": 335 }, { "x": 48, "y": 429 } ], + [ { "x": 570, "y": 82 }, { "x": 672, "y": 82 }, { "x": 570, "y": 157 }, { "x": 672, "y": 157 } ], + [ { "x": 183, "y": 42 }, { "x": 183, "y": 148 }, { "x": 183, "y": 253 } ], + [ { "x": 491, "y": 325 }, { "x": 591, "y": 325 } ] + ], "moatAbility" : "towerMoat", "buildings" : diff --git a/config/schemas/faction.json b/config/schemas/faction.json index 439719540..09c99a5a5 100644 --- a/config/schemas/faction.json +++ b/config/schemas/faction.json @@ -183,6 +183,24 @@ "format" : "imageFile" } }, + "guildSpellPositions" : { + "type" : "array", + "description" : "Positions of spells in mage guild", + "items" : { + "type" : "array", + "items" : { + "type" : "array", + "items" : { + "type" : "object", + "additionalProperties" : false, + "properties" : { + "x" : { "type" : "number", "description" : "X coordinate on screen" }, + "y" : { "type" : "number", "description" : "Y coordinate on screen" } + } + } + } + } + }, "hallBackground" : { "type" : "string", "description" : "background image for town hall", @@ -268,7 +286,7 @@ "properties" : { "index" : { "type" : "number", "description" : "Order in which images will be opened" }, "x" : { "type" : "number", "description" : "X coordinate on screen" }, - "y" : { "type" : "number", "description" : "X coordinate on screen" } + "y" : { "type" : "number", "description" : "Y coordinate on screen" } } } }, diff --git a/lib/entities/faction/CTown.h b/lib/entities/faction/CTown.h index 49d2bfbf0..67f19367d 100644 --- a/lib/entities/faction/CTown.h +++ b/lib/entities/faction/CTown.h @@ -90,6 +90,7 @@ public: ImagePath townBackground; std::vector guildBackground; std::vector guildWindow; + std::vector> guildSpellPositions; AnimationPath buildingsIcons; ImagePath hallBackground; /// vector[row][column] = list of buildings in this slot diff --git a/lib/entities/faction/CTownHandler.cpp b/lib/entities/faction/CTownHandler.cpp index 983442d95..085af5ad2 100644 --- a/lib/entities/faction/CTownHandler.cpp +++ b/lib/entities/faction/CTownHandler.cpp @@ -561,35 +561,33 @@ void CTownHandler::loadClientData(CTown &town, const JsonNode & source) const readIcon(source["icons"]["fort"]["normal"], info.iconSmall[1][0], info.iconLarge[1][0]); readIcon(source["icons"]["fort"]["built"], info.iconSmall[1][1], info.iconLarge[1][1]); - if (source["musicTheme"].isVector()) - { - for (auto const & entry : source["musicTheme"].Vector()) - info.musicTheme.push_back(AudioPath::fromJson(entry)); - } - else - { - info.musicTheme.push_back(AudioPath::fromJson(source["musicTheme"])); - } - info.hallBackground = ImagePath::fromJson(source["hallBackground"]); info.townBackground = ImagePath::fromJson(source["townBackground"]); info.buildingsIcons = AnimationPath::fromJson(source["buildingsIcons"]); info.tavernVideo = VideoPath::fromJson(source["tavernVideo"]); - auto loadStringOrVector = [](auto & target, auto & node){ + info.guildSpellPositions.clear(); + for(auto & level : source["guildSpellPositions"].Vector()) + { + std::vector points; + for(auto & item : level.Vector()) + points.push_back(Point(item["x"].Integer(), item["y"].Integer())); + info.guildSpellPositions.push_back(points); + } + + auto loadStringOrVector = [](auto & target, auto & node, auto fromJsonFunc){ if(node.isVector()) { target.clear(); for(auto & background : node.Vector()) - { - target.push_back(ImagePath::fromJson(background)); - } + target.push_back(fromJsonFunc(background)); } else - target = {ImagePath::fromJson(node)}; + target = {fromJsonFunc(node)}; }; - loadStringOrVector(info.guildBackground, source["guildBackground"]); - loadStringOrVector(info.guildWindow, source["guildWindow"]); + loadStringOrVector(info.musicTheme, source["musicTheme"], AudioPath::fromJson); + loadStringOrVector(info.guildBackground, source["guildBackground"], ImagePath::fromJson); + loadStringOrVector(info.guildWindow, source["guildWindow"], ImagePath::fromJson); loadTownHall(town, source["hallSlots"]); loadStructures(town, source["structures"]); From 14f0b82f17bb24fb945e45440ab4e4cf7db97068 Mon Sep 17 00:00:00 2001 From: Laserlicht <13953785+Laserlicht@users.noreply.github.com> Date: Thu, 19 Jun 2025 19:48:02 +0200 Subject: [PATCH 03/60] configurable window position --- client/windows/CCastleInterface.cpp | 5 ++++- config/factions/castle.json | 1 + config/factions/conflux.json | 1 + config/factions/dungeon.json | 1 + config/factions/fortress.json | 1 + config/factions/inferno.json | 1 + config/factions/necropolis.json | 1 + config/factions/rampart.json | 1 + config/factions/stronghold.json | 1 + config/factions/tower.json | 1 + config/schemas/faction.json | 11 +++++++++++ lib/entities/faction/CTown.h | 1 + lib/entities/faction/CTownHandler.cpp | 1 + 13 files changed, 26 insertions(+), 1 deletion(-) diff --git a/client/windows/CCastleInterface.cpp b/client/windows/CCastleInterface.cpp index 1dfdc7932..4e53c322a 100644 --- a/client/windows/CCastleInterface.cpp +++ b/client/windows/CCastleInterface.cpp @@ -2120,7 +2120,10 @@ CMageGuildScreen::CMageGuildScreen(CCastleInterface * owner, const ImagePath & i assert(guildWindow.size() == 1 || guildWindow.size() == GAME->interface()->castleInt->town->getTown()->mageLevel); auto selectedGuildWindow = guildWindow.size() == 1 ? guildWindow[0] : guildWindow[owner->town->mageGuildLevel() - 1]; - window = std::make_shared(selectedGuildWindow, 332, 76); + auto windowPosition = owner->town->getTown()->clientInfo.guildWindowPosition; + if(windowPosition == Point(0, 0)) // TODO: remove legacy for compatibility + windowPosition = Point(332, 76); + window = std::make_shared(selectedGuildWindow, windowPosition.x, windowPosition.y); resdatabar = std::make_shared(); resdatabar->moveBy(pos.topLeft(), true); diff --git a/config/factions/castle.json b/config/factions/castle.json index 35b94e04b..1c09793d5 100644 --- a/config/factions/castle.json +++ b/config/factions/castle.json @@ -153,6 +153,7 @@ [ { "x": 570, "y": 82 }, { "x": 672, "y": 82 }, { "x": 570, "y": 157 }, { "x": 672, "y": 157 } ], [ { "x": 183, "y": 42 }, { "x": 183, "y": 148 }, { "x": 183, "y": 253 } ] ], + "guildWindowPosition": { "x": 332, "y": 76 }, "moatAbility" : "castleMoat", // primaryResource not specified so town get both Wood and Ore for resource bonus diff --git a/config/factions/conflux.json b/config/factions/conflux.json index a6c7f7568..24d8c1b2f 100644 --- a/config/factions/conflux.json +++ b/config/factions/conflux.json @@ -158,6 +158,7 @@ [ { "x": 183, "y": 42 }, { "x": 183, "y": 148 }, { "x": 183, "y": 253 } ], [ { "x": 491, "y": 325 }, { "x": 591, "y": 325 } ] ], + "guildWindowPosition": { "x": 332, "y": 76 }, "primaryResource" : "mercury", "moatAbility" : "castleMoat", diff --git a/config/factions/dungeon.json b/config/factions/dungeon.json index 037b79790..ec860b248 100644 --- a/config/factions/dungeon.json +++ b/config/factions/dungeon.json @@ -154,6 +154,7 @@ [ { "x": 183, "y": 42 }, { "x": 183, "y": 148 }, { "x": 183, "y": 253 } ], [ { "x": 491, "y": 325 }, { "x": 591, "y": 325 } ] ], + "guildWindowPosition": { "x": 332, "y": 76 }, "primaryResource" : "sulfur", "moatAbility" : "dungeonMoat", diff --git a/config/factions/fortress.json b/config/factions/fortress.json index 37485b94f..dcd5f19fd 100644 --- a/config/factions/fortress.json +++ b/config/factions/fortress.json @@ -152,6 +152,7 @@ [ { "x": 48, "y": 53 }, { "x": 48, "y": 147 }, { "x": 48, "y": 241 }, { "x": 48, "y": 335 }, { "x": 48, "y": 429 } ], [ { "x": 570, "y": 82 }, { "x": 672, "y": 82 }, { "x": 570, "y": 157 }, { "x": 672, "y": 157 } ] ], + "guildWindowPosition": { "x": 332, "y": 76 }, "moatAbility" : "fortressMoat", // primaryResource not specified so town get both Wood and Ore for resource bonus diff --git a/config/factions/inferno.json b/config/factions/inferno.json index 79f4b6649..d4da7481d 100644 --- a/config/factions/inferno.json +++ b/config/factions/inferno.json @@ -155,6 +155,7 @@ [ { "x": 183, "y": 42 }, { "x": 183, "y": 148 }, { "x": 183, "y": 253 } ], [ { "x": 491, "y": 325 }, { "x": 591, "y": 325 } ] ], + "guildWindowPosition": { "x": 332, "y": 76 }, "primaryResource" : "mercury", "moatAbility" : "infernoMoat", diff --git a/config/factions/necropolis.json b/config/factions/necropolis.json index 724b50b64..445b64231 100644 --- a/config/factions/necropolis.json +++ b/config/factions/necropolis.json @@ -159,6 +159,7 @@ [ { "x": 183, "y": 42 }, { "x": 183, "y": 148 }, { "x": 183, "y": 253 } ], [ { "x": 491, "y": 325 }, { "x": 591, "y": 325 } ] ], + "guildWindowPosition": { "x": 332, "y": 76 }, "moatAbility" : "necropolisMoat", // primaryResource not specified so town get both Wood and Ore for resource bonus diff --git a/config/factions/rampart.json b/config/factions/rampart.json index 753254f6e..dfb661188 100644 --- a/config/factions/rampart.json +++ b/config/factions/rampart.json @@ -158,6 +158,7 @@ [ { "x": 183, "y": 42 }, { "x": 183, "y": 148 }, { "x": 183, "y": 253 } ], [ { "x": 491, "y": 325 }, { "x": 591, "y": 325 } ] ], + "guildWindowPosition": { "x": 332, "y": 76 }, "primaryResource" : "crystal", "moatAbility" : "rampartMoat", diff --git a/config/factions/stronghold.json b/config/factions/stronghold.json index d34b6e2d8..8ff08f5b0 100644 --- a/config/factions/stronghold.json +++ b/config/factions/stronghold.json @@ -150,6 +150,7 @@ [ { "x": 48, "y": 53 }, { "x": 48, "y": 147 }, { "x": 48, "y": 241 }, { "x": 48, "y": 335 }, { "x": 48, "y": 429 } ], [ { "x": 570, "y": 82 }, { "x": 672, "y": 82 }, { "x": 570, "y": 157 }, { "x": 672, "y": 157 } ] ], + "guildWindowPosition": { "x": 332, "y": 76 }, "moatAbility" : "strongholdMoat", // primaryResource not specified so town get both Wood and Ore for resource bonus diff --git a/config/factions/tower.json b/config/factions/tower.json index 588b40722..9fbf48421 100644 --- a/config/factions/tower.json +++ b/config/factions/tower.json @@ -154,6 +154,7 @@ [ { "x": 183, "y": 42 }, { "x": 183, "y": 148 }, { "x": 183, "y": 253 } ], [ { "x": 491, "y": 325 }, { "x": 591, "y": 325 } ] ], + "guildWindowPosition": { "x": 332, "y": 76 }, "moatAbility" : "towerMoat", "buildings" : diff --git a/config/schemas/faction.json b/config/schemas/faction.json index 09c99a5a5..55217a336 100644 --- a/config/schemas/faction.json +++ b/config/schemas/faction.json @@ -183,6 +183,17 @@ "format" : "imageFile" } }, + "guildWindowPosition" : { + "type" : "array", + "items" : { + "type" : "object", + "additionalProperties" : false, + "properties" : { + "x" : { "type" : "number", "description" : "X coordinate on screen" }, + "y" : { "type" : "number", "description" : "Y coordinate on screen" } + } + } + }, "guildSpellPositions" : { "type" : "array", "description" : "Positions of spells in mage guild", diff --git a/lib/entities/faction/CTown.h b/lib/entities/faction/CTown.h index 67f19367d..1d9b77842 100644 --- a/lib/entities/faction/CTown.h +++ b/lib/entities/faction/CTown.h @@ -90,6 +90,7 @@ public: ImagePath townBackground; std::vector guildBackground; std::vector guildWindow; + Point guildWindowPosition; std::vector> guildSpellPositions; AnimationPath buildingsIcons; ImagePath hallBackground; diff --git a/lib/entities/faction/CTownHandler.cpp b/lib/entities/faction/CTownHandler.cpp index 085af5ad2..8376d47a6 100644 --- a/lib/entities/faction/CTownHandler.cpp +++ b/lib/entities/faction/CTownHandler.cpp @@ -565,6 +565,7 @@ void CTownHandler::loadClientData(CTown &town, const JsonNode & source) const info.townBackground = ImagePath::fromJson(source["townBackground"]); info.buildingsIcons = AnimationPath::fromJson(source["buildingsIcons"]); info.tavernVideo = VideoPath::fromJson(source["tavernVideo"]); + info.guildWindowPosition = Point(source["guildWindowPosition"]["x"].Integer(), source["guildWindowPosition"]["y"].Integer()); info.guildSpellPositions.clear(); for(auto & level : source["guildSpellPositions"].Vector()) From d0d3b96fa90e3cdad6de5a0e44713ce397e15e7d Mon Sep 17 00:00:00 2001 From: Laserlicht <13953785+Laserlicht@users.noreply.github.com> Date: Fri, 20 Jun 2025 01:51:10 +0200 Subject: [PATCH 04/60] add battle animation --- client/mapView/IMapRendererContext.h | 3 +++ client/mapView/MapRenderer.cpp | 6 ++++++ client/mapView/MapRendererContext.cpp | 14 ++++++++++++++ client/mapView/MapRendererContext.h | 1 + client/renderSDL/RenderHandler.cpp | 10 ++++++++++ lib/callback/CBattleCallback.cpp | 5 +++++ lib/callback/CBattleCallback.h | 1 + 7 files changed, 40 insertions(+) diff --git a/client/mapView/IMapRendererContext.h b/client/mapView/IMapRendererContext.h index e1ae49f47..23315257f 100644 --- a/client/mapView/IMapRendererContext.h +++ b/client/mapView/IMapRendererContext.h @@ -56,6 +56,9 @@ public: /// returns true if specified object is the currently active hero virtual bool isActiveHero(const CGObjectInstance* obj) const = 0; + /// returns true if specified object is a monster and currently attacked + virtual bool isMonsterAttacked(const CGObjectInstance * obj) const = 0; + virtual size_t objectGroupIndex(ObjectInstanceID objectID) const = 0; virtual Point objectImageOffset(ObjectInstanceID objectID, const int3 & coordinates) const = 0; diff --git a/client/mapView/MapRenderer.cpp b/client/mapView/MapRenderer.cpp index 9c157b264..7028a7dfd 100644 --- a/client/mapView/MapRenderer.cpp +++ b/client/mapView/MapRenderer.cpp @@ -465,6 +465,12 @@ std::shared_ptr MapRendererObjects::getImage(IMapRendererContext & conte if(animation->size(groupIndex) == 0) return nullptr; + + if(context.isMonsterAttacked(obj)) + { + auto img = ENGINE->renderHandler().loadImage(ImagePath::builtin("AvWattak:0:0"), EImageBlitMode::SIMPLE); + return img; + } size_t frameIndex = context.objectImageIndex(obj->id, animation->size(groupIndex)); diff --git a/client/mapView/MapRendererContext.cpp b/client/mapView/MapRendererContext.cpp index 9c5f66a31..2f5432ed6 100644 --- a/client/mapView/MapRendererContext.cpp +++ b/client/mapView/MapRendererContext.cpp @@ -25,6 +25,8 @@ #include "../../lib/spells/CSpellHandler.h" #include "../../lib/mapping/CMap.h" #include "../../lib/pathfinder/CGPathNode.h" +#include "../../lib/battle/CPlayerBattleCallback.h" +#include "../../lib/battle/IBattleState.h" MapRendererBaseContext::MapRendererBaseContext(const MapRendererContextState & viewState) : viewState(viewState) @@ -85,6 +87,18 @@ bool MapRendererBaseContext::isActiveHero(const CGObjectInstance * obj) const return false; } +bool MapRendererBaseContext::isMonsterAttacked(const CGObjectInstance * obj) const +{ + if(obj->ID != Obj::MONSTER) + return false; + + for(auto & battle : GAME->interface()->cb->getActiveBattles()) + if(obj->pos == battle.second->getBattle()->getLocation()) + return true; + + return false; +} + bool MapRendererBaseContext::tileAnimated(const int3 & coordinates) const { return false; diff --git a/client/mapView/MapRendererContext.h b/client/mapView/MapRendererContext.h index b956f1f09..f7c169d43 100644 --- a/client/mapView/MapRendererContext.h +++ b/client/mapView/MapRendererContext.h @@ -36,6 +36,7 @@ public: bool tileAnimated(const int3 & coordinates) const override; bool isActiveHero(const CGObjectInstance* obj) const override; + bool isMonsterAttacked(const CGObjectInstance * obj) const override; const TerrainTile & getMapTile(const int3 & coordinates) const override; const MapObjectsList & getObjects(const int3 & coordinates) const override; diff --git a/client/renderSDL/RenderHandler.cpp b/client/renderSDL/RenderHandler.cpp index fa49ee327..1afebdb20 100644 --- a/client/renderSDL/RenderHandler.cpp +++ b/client/renderSDL/RenderHandler.cpp @@ -354,6 +354,16 @@ std::shared_ptr RenderHandler::loadImage(const AnimationPath & path, int std::shared_ptr RenderHandler::loadImage(const ImagePath & path, EImageBlitMode mode) { + auto name = path.getOriginalName(); + + std::vector splitted; + boost::split(splitted, name, boost::is_any_of(":")); + if(splitted.size() == 3) + { + ImageLocator locator = getLocatorForAnimationFrame(AnimationPath::builtin(splitted[0]), std::stoi(splitted[2]), std::stoi(splitted[1]), 1, mode); + return loadImage(locator); + } + ImageLocator locator(path, mode); return loadImage(locator); } diff --git a/lib/callback/CBattleCallback.cpp b/lib/callback/CBattleCallback.cpp index a603f4bfd..5908fe6e9 100644 --- a/lib/callback/CBattleCallback.cpp +++ b/lib/callback/CBattleCallback.cpp @@ -79,6 +79,11 @@ void CBattleCallback::onBattleEnded(const BattleID & battleID) activeBattles.erase(battleID); } +std::map> CBattleCallback::getActiveBattles() +{ + return activeBattles; +} + void CBattleCallback::battleMakeSpellAction(const BattleID & battleID, const BattleAction & action) { assert(action.actionType == EActionType::HERO_SPELL); diff --git a/lib/callback/CBattleCallback.h b/lib/callback/CBattleCallback.h index c34110788..0d524fec6 100644 --- a/lib/callback/CBattleCallback.h +++ b/lib/callback/CBattleCallback.h @@ -39,6 +39,7 @@ public: void onBattleStarted(const IBattleInfo * info); void onBattleEnded(const BattleID & battleID); + std::map> getActiveBattles(); }; VCMI_LIB_NAMESPACE_END From e1adbde5ac5dd3b6bed2001daf20c2d9ee12c915 Mon Sep 17 00:00:00 2001 From: Laserlicht <13953785+Laserlicht@users.noreply.github.com> Date: Fri, 20 Jun 2025 03:02:43 +0200 Subject: [PATCH 05/60] direction & image functionality --- client/mapView/IMapRendererContext.h | 4 ++-- client/mapView/MapRenderer.cpp | 11 ++++++++--- client/mapView/MapRendererContext.cpp | 8 ++++---- client/mapView/MapRendererContext.h | 2 +- config/schemas/creature.json | 10 ++++++++++ lib/CCreatureHandler.cpp | 2 ++ lib/CCreatureHandler.h | 2 ++ 7 files changed, 29 insertions(+), 10 deletions(-) diff --git a/client/mapView/IMapRendererContext.h b/client/mapView/IMapRendererContext.h index 23315257f..964e44f5d 100644 --- a/client/mapView/IMapRendererContext.h +++ b/client/mapView/IMapRendererContext.h @@ -56,8 +56,8 @@ public: /// returns true if specified object is the currently active hero virtual bool isActiveHero(const CGObjectInstance* obj) const = 0; - /// returns true if specified object is a monster and currently attacked - virtual bool isMonsterAttacked(const CGObjectInstance * obj) const = 0; + /// returns pos of attacker if specified object is a monster and currently attacked + virtual std::optional monsterAttacked(const CGObjectInstance * obj) const = 0; virtual size_t objectGroupIndex(ObjectInstanceID objectID) const = 0; virtual Point objectImageOffset(ObjectInstanceID objectID, const int3 & coordinates) const = 0; diff --git a/client/mapView/MapRenderer.cpp b/client/mapView/MapRenderer.cpp index 7028a7dfd..0f66a5338 100644 --- a/client/mapView/MapRenderer.cpp +++ b/client/mapView/MapRenderer.cpp @@ -466,10 +466,15 @@ std::shared_ptr MapRendererObjects::getImage(IMapRendererContext & conte if(animation->size(groupIndex) == 0) return nullptr; - if(context.isMonsterAttacked(obj)) + if(auto attackerPos = context.monsterAttacked(obj)) { - auto img = ENGINE->renderHandler().loadImage(ImagePath::builtin("AvWattak:0:0"), EImageBlitMode::SIMPLE); - return img; + const auto * creature = dynamic_cast(obj); + ImagePath imgPath = (*attackerPos).x < obj->pos.x ? (*creature->getCreatureMap().begin()).first->mapAttackFromLeft : (*creature->getCreatureMap().begin()).first->mapAttackFromRight; + if(!imgPath.empty()) + { + auto img = ENGINE->renderHandler().loadImage(imgPath, EImageBlitMode::SIMPLE); + return img; + } } size_t frameIndex = context.objectImageIndex(obj->id, animation->size(groupIndex)); diff --git a/client/mapView/MapRendererContext.cpp b/client/mapView/MapRendererContext.cpp index 2f5432ed6..c5f10bf37 100644 --- a/client/mapView/MapRendererContext.cpp +++ b/client/mapView/MapRendererContext.cpp @@ -87,16 +87,16 @@ bool MapRendererBaseContext::isActiveHero(const CGObjectInstance * obj) const return false; } -bool MapRendererBaseContext::isMonsterAttacked(const CGObjectInstance * obj) const +std::optional MapRendererBaseContext::monsterAttacked(const CGObjectInstance * obj) const { if(obj->ID != Obj::MONSTER) - return false; + return std::nullopt; for(auto & battle : GAME->interface()->cb->getActiveBattles()) if(obj->pos == battle.second->getBattle()->getLocation()) - return true; + return battle.second->getBattle()->getSideHero(BattleSide::ATTACKER)->pos; - return false; + return std::nullopt; } bool MapRendererBaseContext::tileAnimated(const int3 & coordinates) const diff --git a/client/mapView/MapRendererContext.h b/client/mapView/MapRendererContext.h index f7c169d43..67b620084 100644 --- a/client/mapView/MapRendererContext.h +++ b/client/mapView/MapRendererContext.h @@ -36,7 +36,7 @@ public: bool tileAnimated(const int3 & coordinates) const override; bool isActiveHero(const CGObjectInstance* obj) const override; - bool isMonsterAttacked(const CGObjectInstance * obj) const override; + std::optional monsterAttacked(const CGObjectInstance * obj) const override; const TerrainTile & getMapTile(const int3 & coordinates) const override; const MapObjectsList & getObjects(const int3 & coordinates) const override; diff --git a/config/schemas/creature.json b/config/schemas/creature.json index 19c218a39..dee7b063b 100644 --- a/config/schemas/creature.json +++ b/config/schemas/creature.json @@ -153,6 +153,16 @@ "items" : { "type" : "string" }, "description" : "Object mask that describes on which tiles object is visible/blocked/activatable" }, + "mapAttackFromLeft" : { + "type" : "string", + "description" : "Adventure map creature image when attacked from left", + "format" : "imageFile" + }, + "mapAttackFromRight" : { + "type" : "string", + "description" : "Adventure map creature image when attacked from right", + "format" : "imageFile" + }, "iconLarge" : { "type" : "string", "description" : "Large icon for this creature, used for example in town screen", diff --git a/lib/CCreatureHandler.cpp b/lib/CCreatureHandler.cpp index 5ce9fe00f..d1a300b55 100644 --- a/lib/CCreatureHandler.cpp +++ b/lib/CCreatureHandler.cpp @@ -901,6 +901,8 @@ void CCreatureHandler::loadJsonAnimation(CCreature * cre, const JsonNode & graph void CCreatureHandler::loadCreatureJson(CCreature * creature, const JsonNode & config) const { creature->animDefName = AnimationPath::fromJson(config["graphics"]["animation"]); + creature->mapAttackFromLeft = ImagePath::fromJson(config["graphics"]["mapAttackFromLeft"]); + creature->mapAttackFromRight = ImagePath::fromJson(config["graphics"]["mapAttackFromRight"]); //FIXME: MOD COMPATIBILITY if (config["abilities"].getType() == JsonNode::JsonType::DATA_STRUCT) diff --git a/lib/CCreatureHandler.h b/lib/CCreatureHandler.h index 4ba246eef..3ee4879c4 100644 --- a/lib/CCreatureHandler.h +++ b/lib/CCreatureHandler.h @@ -67,6 +67,8 @@ public: std::set upgrades; // IDs of creatures to which this creature can be upgraded AnimationPath animDefName; // creature animation used during battles + ImagePath mapAttackFromLeft; // adventure map creature image when attacked from left + ImagePath mapAttackFromRight; // adventure map creature image when attacked from right si32 iconIndex = -1; // index of icon in files like twcrport, used in tests now. /// names of files with appropriate icons. Used only during loading From 0cb74bc719f69c828486339a9948f1304c5d556e Mon Sep 17 00:00:00 2001 From: Laserlicht <13953785+Laserlicht@users.noreply.github.com> Date: Fri, 20 Jun 2025 03:25:44 +0200 Subject: [PATCH 06/60] config change --- config/creatures/castle.json | 28 ++++++++++++++++++++++++++++ config/creatures/conflux.json | 28 ++++++++++++++++++++++++++++ config/creatures/dungeon.json | 28 ++++++++++++++++++++++++++++ config/creatures/fortress.json | 28 ++++++++++++++++++++++++++++ config/creatures/inferno.json | 28 ++++++++++++++++++++++++++++ config/creatures/necropolis.json | 28 ++++++++++++++++++++++++++++ config/creatures/neutral.json | 30 ++++++++++++++++++++++++++++++ config/creatures/rampart.json | 28 ++++++++++++++++++++++++++++ config/creatures/stronghold.json | 28 ++++++++++++++++++++++++++++ config/creatures/tower.json | 28 ++++++++++++++++++++++++++++ 10 files changed, 282 insertions(+) diff --git a/config/creatures/castle.json b/config/creatures/castle.json index a703d486d..b1960d7c9 100644 --- a/config/creatures/castle.json +++ b/config/creatures/castle.json @@ -14,6 +14,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:0", + "mapAttackFromLeft": "AvWattak.def:0:1", "animation": "CPKMAN.DEF" }, "sound" : @@ -39,6 +41,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:2", + "mapAttackFromLeft": "AvWattak.def:0:3", "animation": "CHALBD.DEF" }, "sound" : @@ -66,6 +70,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:4", + "mapAttackFromLeft": "AvWattak.def:0:5", "animation": "CLCBOW.DEF", "missile" : { @@ -103,6 +109,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:6", + "mapAttackFromLeft": "AvWattak.def:0:7", "animation": "CHCBOW.DEF", "missile" : { @@ -140,6 +148,8 @@ "hasDoubleWeek": true, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:8", + "mapAttackFromLeft": "AvWattak.def:0:9", "animation": "CGRIFF.DEF" }, "sound" : @@ -169,6 +179,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:10", + "mapAttackFromLeft": "AvWattak.def:0:11", "animation": "CRGRIF.DEF" }, "sound" : @@ -188,6 +200,8 @@ "upgrades": ["crusader"], "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:12", + "mapAttackFromLeft": "AvWattak.def:0:13", "animation": "CSWORD.DEF" }, "sound" : @@ -214,6 +228,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:14", + "mapAttackFromLeft": "AvWattak.def:0:15", "animation": "CCRUSD.DEF" }, "sound" : @@ -240,6 +256,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:16", + "mapAttackFromLeft": "AvWattak.def:0:17", "animation": "CMONKK.DEF", "missile" : { @@ -273,6 +291,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:18", + "mapAttackFromLeft": "AvWattak.def:0:19", "animation": "CZEALT.DEF", "missile" : { @@ -306,6 +326,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:20", + "mapAttackFromLeft": "AvWattak.def:0:21", "animation": "CCAVLR.DEF" }, "sound" : @@ -333,6 +355,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:22", + "mapAttackFromLeft": "AvWattak.def:0:23", "animation": "CCHAMP.DEF" }, "sound" : @@ -384,6 +408,8 @@ "upgrades": ["archangel"], "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:24", + "mapAttackFromLeft": "AvWattak.def:0:25", "animation": "CANGEL.DEF" }, "sound" : @@ -451,6 +477,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:26", + "mapAttackFromLeft": "AvWattak.def:0:27", "animation": "CRANGL.DEF" }, "sound" : diff --git a/config/creatures/conflux.json b/config/creatures/conflux.json index 78cb70ec1..505f8f59c 100755 --- a/config/creatures/conflux.json +++ b/config/creatures/conflux.json @@ -15,6 +15,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:236", + "mapAttackFromLeft": "AvWattak.def:0:237", "animation": "CPIXIE.DEF" }, "sound" : @@ -44,6 +46,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:238", + "mapAttackFromLeft": "AvWattak.def:0:239", "animation": "CSPRITE.DEF" }, "sound" : @@ -111,6 +115,8 @@ "upgrades": ["stormElemental"], "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:224", + "mapAttackFromLeft": "AvWattak.def:0:225", "animation": "CAELEM.DEF" }, "sound" : @@ -196,6 +202,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:254", + "mapAttackFromLeft": "AvWattak.def:0:255", "animation": "CSTORM.DEF", "missile" : { @@ -285,6 +293,8 @@ "upgrades": ["iceElemental"], "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:230", + "mapAttackFromLeft": "AvWattak.def:0:231", "animation": "CWELEM.DEF" }, "sound" : @@ -388,6 +398,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:246", + "mapAttackFromLeft": "AvWattak.def:0:247", "animation": "CICEE.DEF", "missile" : { @@ -452,6 +464,8 @@ "upgrades": ["energyElemental"], "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:228", + "mapAttackFromLeft": "AvWattak.def:0:229", "animation": "CFELEM.DEF" }, "sound" : @@ -530,6 +544,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:258", + "mapAttackFromLeft": "AvWattak.def:0:259", "animation": "CNRG.DEF" }, "sound" : @@ -593,6 +609,8 @@ "upgrades": ["magmaElemental"], "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:226", + "mapAttackFromLeft": "AvWattak.def:0:227", "animation": "CEELEM.DEF" }, "sound" : @@ -671,6 +689,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:250", + "mapAttackFromLeft": "AvWattak.def:0:251", "animation": "CSTONE.DEF" }, "sound" : @@ -710,6 +730,8 @@ "upgrades": ["magicElemental"], "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:240", + "mapAttackFromLeft": "AvWattak.def:0:241", "animation": "CPSYEL.DEF" }, "sound" : @@ -749,6 +771,8 @@ "doubleWide" : false, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:242", + "mapAttackFromLeft": "AvWattak.def:0:243", "animation": "CMAGEL.DEF" }, "sound" : @@ -790,6 +814,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:260", + "mapAttackFromLeft": "AvWattak.def:0:261", "animation": "CFBIRD.DEF" }, "sound" : @@ -840,6 +866,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:262", + "mapAttackFromLeft": "AvWattak.def:0:263", "animation": "CPHX.DEF" }, "sound" : diff --git a/config/creatures/dungeon.json b/config/creatures/dungeon.json index f49aaebfa..d8959059e 100644 --- a/config/creatures/dungeon.json +++ b/config/creatures/dungeon.json @@ -21,6 +21,8 @@ "hasDoubleWeek": true, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:140", + "mapAttackFromLeft": "AvWattak.def:0:141", "animation": "CTROGL.DEF" }, "sound" : @@ -52,6 +54,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:142", + "mapAttackFromLeft": "AvWattak.def:0:143", "animation": "CITROG.DEF" }, "sound" : @@ -83,6 +87,8 @@ "hasDoubleWeek": true, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:144", + "mapAttackFromLeft": "AvWattak.def:0:145", "animation": "CHARPY.DEF" }, "sound" : @@ -116,6 +122,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:146", + "mapAttackFromLeft": "AvWattak.def:0:147", "animation": "CHARPH.DEF" }, "sound" : @@ -148,6 +156,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:148", + "mapAttackFromLeft": "AvWattak.def:0:149", "animation": "CBEHOL.DEF", "missile" : { @@ -190,6 +200,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:150", + "mapAttackFromLeft": "AvWattak.def:0:151", "animation": "CEVEYE.DEF", "missile" : { @@ -241,6 +253,8 @@ "upgrades": ["medusaQueen"], "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:152", + "mapAttackFromLeft": "AvWattak.def:0:153", "animation": "CMEDUS.DEF", "missile" : { @@ -284,6 +298,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:154", + "mapAttackFromLeft": "AvWattak.def:0:155", "animation": "CMEDUQ.DEF", "missile" : { @@ -317,6 +333,8 @@ "upgrades": ["minotaurKing"], "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:156", + "mapAttackFromLeft": "AvWattak.def:0:157", "animation": "CMINOT.DEF" }, "sound" : @@ -344,6 +362,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:158", + "mapAttackFromLeft": "AvWattak.def:0:159", "animation": "CMINOK.DEF" }, "sound" : @@ -372,6 +392,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:160", + "mapAttackFromLeft": "AvWattak.def:0:161", "animation": "CMCORE.DEF" }, "sound" : @@ -405,6 +427,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:162", + "mapAttackFromLeft": "AvWattak.def:0:163", "animation": "CCMCOR.DEF" }, "sound" : @@ -451,6 +475,8 @@ "upgrades": ["blackDragon"], "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:164", + "mapAttackFromLeft": "AvWattak.def:0:165", "animation": "CRDRGN.DEF" }, "sound" : @@ -501,6 +527,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:166", + "mapAttackFromLeft": "AvWattak.def:0:167", "animation": "CBDRGN.DEF" }, "sound" : diff --git a/config/creatures/fortress.json b/config/creatures/fortress.json index f834f993a..c9d2d093b 100644 --- a/config/creatures/fortress.json +++ b/config/creatures/fortress.json @@ -7,6 +7,8 @@ "upgrades": ["gnollMarauder"], "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:196", + "mapAttackFromLeft": "AvWattak.def:0:197", "animation": "CGNOLL.DEF" }, "sound" : @@ -25,6 +27,8 @@ "faction": "fortress", "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:198", + "mapAttackFromLeft": "AvWattak.def:0:199", "animation": "CGNOLM.DEF" }, "sound" : @@ -54,6 +58,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:200", + "mapAttackFromLeft": "AvWattak.def:0:201", "animation": "CPLIZA.DEF", "missile" : { @@ -85,6 +91,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:202", + "mapAttackFromLeft": "AvWattak.def:0:203", "animation": "CALIZA.DEF", "missile" : { @@ -124,6 +132,8 @@ "hasDoubleWeek": true, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:208", + "mapAttackFromLeft": "AvWattak.def:0:209", "animation": "CDRFLY.DEF" }, "sound" : @@ -161,6 +171,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:210", + "mapAttackFromLeft": "AvWattak.def:0:211", "animation": "CDRFIR.DEF" }, "sound" : @@ -191,6 +203,8 @@ "upgrades": ["greaterBasilisk"], "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:212", + "mapAttackFromLeft": "AvWattak.def:0:213", "animation": "CBASIL.DEF" }, "sound" : @@ -219,6 +233,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:214", + "mapAttackFromLeft": "AvWattak.def:0:215", "animation": "CGBASI.DEF" }, "sound" : @@ -239,6 +255,8 @@ "doubleWide" : true, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:204", + "mapAttackFromLeft": "AvWattak.def:0:205", "animation": "CCGORG.DEF" }, "sound" : @@ -267,6 +285,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:206", + "mapAttackFromLeft": "AvWattak.def:0:207", "animation": "CBGOG.DEF" }, "sound" : @@ -294,6 +314,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:216", + "mapAttackFromLeft": "AvWattak.def:0:217", "animation": "CWYVER.DEF" }, "sound" : @@ -326,6 +348,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:218", + "mapAttackFromLeft": "AvWattak.def:0:219", "animation": "CWYVMN.DEF" }, "sound" : @@ -362,6 +386,8 @@ "upgrades": ["chaosHydra"], "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:220", + "mapAttackFromLeft": "AvWattak.def:0:221", "animation": "CHYDRA.DEF" }, "sound" : @@ -397,6 +423,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:222", + "mapAttackFromLeft": "AvWattak.def:0:223", "animation": "CCHYDR.DEF" }, "sound" : diff --git a/config/creatures/inferno.json b/config/creatures/inferno.json index 87c8e5a7c..3a3fb5e90 100755 --- a/config/creatures/inferno.json +++ b/config/creatures/inferno.json @@ -7,6 +7,8 @@ "upgrades": ["familiar"], "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:84", + "mapAttackFromLeft": "AvWattak.def:0:85", "animation": "CIMP.DEF" }, "sound" : @@ -33,6 +35,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:86", + "mapAttackFromLeft": "AvWattak.def:0:87", "animation": "CFAMIL.DEF" }, "sound" : @@ -61,6 +65,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:88", + "mapAttackFromLeft": "AvWattak.def:0:89", "animation": "CGOG.DEF", "missile" : { @@ -97,6 +103,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:90", + "mapAttackFromLeft": "AvWattak.def:0:91", "animation": "CMAGOG.DEF", "missile" : { @@ -122,6 +130,8 @@ "doubleWide" : true, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:92", + "mapAttackFromLeft": "AvWattak.def:0:93", "animation": "CHHOUN.DEF" }, "sound" : @@ -152,6 +162,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:94", + "mapAttackFromLeft": "AvWattak.def:0:95", "animation": "CCERBU.DEF" }, "sound" : @@ -171,6 +183,8 @@ "upgrades": ["hornedDemon"], "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:96", + "mapAttackFromLeft": "AvWattak.def:0:97", "animation": "COHDEM.DEF" }, "sound" : @@ -189,6 +203,8 @@ "faction": "inferno", "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:98", + "mapAttackFromLeft": "AvWattak.def:0:99", "animation": "CTHDEM.DEF" }, "sound" : @@ -208,6 +224,8 @@ "upgrades": ["pitLord"], "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:100", + "mapAttackFromLeft": "AvWattak.def:0:101", "animation": "CPFIEN.DEF" }, "sound" : @@ -246,6 +264,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:102", + "mapAttackFromLeft": "AvWattak.def:0:103", "animation": "CPFOE.DEF" }, "sound" : @@ -289,6 +309,8 @@ "upgrades": ["efreetSultan"], "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:104", + "mapAttackFromLeft": "AvWattak.def:0:105", "animation": "CEFREE.DEF" }, "sound" : @@ -336,6 +358,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:106", + "mapAttackFromLeft": "AvWattak.def:0:107", "animation": "CEFRES.DEF" }, "sound" : @@ -396,6 +420,8 @@ "upgrades": ["archDevil"], "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:108", + "mapAttackFromLeft": "AvWattak.def:0:109", "animation": "CDEVIL.DEF" }, "sound" : @@ -456,6 +482,8 @@ "graphics" : { "missile" : null, + "mapAttackFromRight": "AvWattak.def:0:110", + "mapAttackFromLeft": "AvWattak.def:0:111", "animation": "CADEVL.DEF" }, "sound" : diff --git a/config/creatures/necropolis.json b/config/creatures/necropolis.json index 7e98d6ff2..50da678f0 100644 --- a/config/creatures/necropolis.json +++ b/config/creatures/necropolis.json @@ -14,6 +14,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:112", + "mapAttackFromLeft": "AvWattak.def:0:113", "animation": "CSKELE.DEF" }, "sound" : @@ -39,6 +41,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:114", + "mapAttackFromLeft": "AvWattak.def:0:115", "animation": "CWSKEL.DEF" }, "sound" : @@ -66,6 +70,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:116", + "mapAttackFromLeft": "AvWattak.def:0:117", "animation": "CZOMBI.DEF" }, "sound" : @@ -84,6 +90,8 @@ "faction": "necropolis", "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:118", + "mapAttackFromLeft": "AvWattak.def:0:119", "animation": "CZOMLO.DEF" }, "sound" : @@ -133,6 +141,8 @@ "hasDoubleWeek": true, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:120", + "mapAttackFromLeft": "AvWattak.def:0:121", "animation": "CWIGHT.DEF" }, "sound" : @@ -172,6 +182,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:122", + "mapAttackFromLeft": "AvWattak.def:0:123", "animation": "CWRAIT.DEF" }, "sound" : @@ -206,6 +218,8 @@ "upgrades": ["vampireLord"], "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:124", + "mapAttackFromLeft": "AvWattak.def:0:125", "animation": "CVAMP.DEF" }, "sound" : @@ -246,6 +260,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:126", + "mapAttackFromLeft": "AvWattak.def:0:127", "animation": "CNOSFE.DEF" }, "sound" : @@ -285,6 +301,8 @@ "upgrades": ["powerLich"], "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:128", + "mapAttackFromLeft": "AvWattak.def:0:129", "animation": "CLICH.DEF", "missile" : { @@ -325,6 +343,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:130", + "mapAttackFromLeft": "AvWattak.def:0:131", "animation": "CPLICH.DEF", "missile" : { @@ -363,6 +383,8 @@ "upgrades": ["dreadKnight"], "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:132", + "mapAttackFromLeft": "AvWattak.def:0:133", "animation": "CBKNIG.DEF" }, "sound" : @@ -400,6 +422,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:134", + "mapAttackFromLeft": "AvWattak.def:0:135", "animation": "CBLORD.DEF" }, "sound" : @@ -450,6 +474,8 @@ "upgrades": ["ghostDragon"], "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:136", + "mapAttackFromLeft": "AvWattak.def:0:137", "animation": "CNDRGN.DEF" }, "sound" : @@ -505,6 +531,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:138", + "mapAttackFromLeft": "AvWattak.def:0:139", "animation": "CHDRGN.DEF" }, "sound" : diff --git a/config/creatures/neutral.json b/config/creatures/neutral.json index 0e25c5231..b7debdf14 100644 --- a/config/creatures/neutral.json +++ b/config/creatures/neutral.json @@ -20,6 +20,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:232", + "mapAttackFromLeft": "AvWattak.def:0:233", "animation": "CGGOLE.DEF" }, "sound" : @@ -51,6 +53,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:234", + "mapAttackFromLeft": "AvWattak.def:0:235", "animation": "CDGOLE.DEF" }, "sound" : @@ -104,6 +108,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:264", + "mapAttackFromLeft": "AvWattak.def:0:265", "animation": "CADRGN.DEF" }, "sound" : @@ -145,6 +151,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:266", + "mapAttackFromLeft": "AvWattak.def:0:267", "animation": "CCDRGN.DEF" }, "sound" : @@ -252,6 +260,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:268", + "mapAttackFromLeft": "AvWattak.def:0:269", "animation": "CFDRGN.DEF" }, "sound" : @@ -305,6 +315,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:270", + "mapAttackFromLeft": "AvWattak.def:0:271", "animation": "CRSDGN.DEF" }, "sound" : @@ -388,6 +400,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:272", + "mapAttackFromLeft": "AvWattak.def:0:273", "animation": "Cench.DEF", "missile" : { @@ -429,6 +443,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:274", + "mapAttackFromLeft": "AvWattak.def:0:275", "animation": "CSHARP.DEF", "missile" : { @@ -466,6 +482,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:276", + "mapAttackFromLeft": "AvWattak.def:0:277", "animation": "CHALF.DEF", "missile" : { @@ -489,6 +507,8 @@ "faction": "neutral", "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:278", + "mapAttackFromLeft": "AvWattak.def:0:279", "animation": "CPEAS.DEF" }, "sound" : @@ -508,6 +528,8 @@ "doubleWide" : true, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:280", + "mapAttackFromLeft": "AvWattak.def:0:281", "animation": "CBOAR.DEF" }, "sound" : @@ -539,6 +561,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:282", + "mapAttackFromLeft": "AvWattak.def:0:283", "animation": "CMUMMY.DEF" }, "sound" : @@ -567,6 +591,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:284", + "mapAttackFromLeft": "AvWattak.def:0:285", "animation": "CNOMAD.DEF" }, "sound" : @@ -612,6 +638,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:286", + "mapAttackFromLeft": "AvWattak.def:0:287", "animation": "CROGUE.DEF" }, "sound" : @@ -638,6 +666,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:288", + "mapAttackFromLeft": "AvWattak.def:0:289", "animation": "CTROLL.DEF" }, "sound" : diff --git a/config/creatures/rampart.json b/config/creatures/rampart.json index 63b4595a1..d3bc698a3 100644 --- a/config/creatures/rampart.json +++ b/config/creatures/rampart.json @@ -10,6 +10,8 @@ "graphics" : { "missile" : null, + "mapAttackFromRight": "AvWattak.def:0:28", + "mapAttackFromLeft": "AvWattak.def:0:29", "animation": "CCENTR.DEF" }, "sound" : @@ -31,6 +33,8 @@ "graphics" : { "missile" : null, + "mapAttackFromRight": "AvWattak.def:0:30", + "mapAttackFromLeft": "AvWattak.def:0:31", "animation": "CECENT.DEF" }, "sound" : @@ -58,6 +62,8 @@ "upgrades": ["battleDwarf"], "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:32", + "mapAttackFromLeft": "AvWattak.def:0:33", "animation": "CDWARF.DEF" }, "sound" : @@ -84,6 +90,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:34", + "mapAttackFromLeft": "AvWattak.def:0:35", "animation": "CBDWAR.DEF" }, "sound" : @@ -111,6 +119,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:36", + "mapAttackFromLeft": "AvWattak.def:0:37", "animation": "CELF.DEF", "missile" : { @@ -149,6 +159,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:38", + "mapAttackFromLeft": "AvWattak.def:0:39", "animation": "CGRELF.DEF", "missile" : { @@ -187,6 +199,8 @@ "hasDoubleWeek": true, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:40", + "mapAttackFromLeft": "AvWattak.def:0:41", "animation": "CPEGAS.DEF" }, "sound" : @@ -218,6 +232,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:42", + "mapAttackFromLeft": "AvWattak.def:0:43", "animation": "CAPEGS.DEF" }, "sound" : @@ -246,6 +262,8 @@ "upgrades": ["dendroidSoldier"], "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:44", + "mapAttackFromLeft": "AvWattak.def:0:45", "animation": "CTREE.DEF" }, "sound" : @@ -273,6 +291,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:46", + "mapAttackFromLeft": "AvWattak.def:0:47", "animation": "CBTREE.DEF" }, "sound" : @@ -308,6 +328,8 @@ "upgrades": ["warUnicorn"], "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:48", + "mapAttackFromLeft": "AvWattak.def:0:49", "animation": "CUNICO.DEF" }, "sound" : @@ -342,6 +364,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:50", + "mapAttackFromLeft": "AvWattak.def:0:51", "animation": "CWUNIC.DEF" }, "sound" : @@ -388,6 +412,8 @@ "upgrades": ["goldDragon"], "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:52", + "mapAttackFromLeft": "AvWattak.def:0:53", "animation": "CGDRAG.DEF" }, "sound" : @@ -432,6 +458,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:54", + "mapAttackFromLeft": "AvWattak.def:0:55", "animation": "CDDRAG.DEF" }, "sound" : diff --git a/config/creatures/stronghold.json b/config/creatures/stronghold.json index 7824a2b58..f85ebf420 100644 --- a/config/creatures/stronghold.json +++ b/config/creatures/stronghold.json @@ -8,6 +8,8 @@ "upgrades": ["hobgoblin"], "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:168", + "mapAttackFromLeft": "AvWattak.def:0:169", "animation": "CGOBLI.DEF" }, "sound" : @@ -27,6 +29,8 @@ "hasDoubleWeek": true, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:170", + "mapAttackFromLeft": "AvWattak.def:0:171", "animation": "CHGOBL.DEF" }, "sound" : @@ -48,6 +52,8 @@ "hasDoubleWeek": true, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:172", + "mapAttackFromLeft": "AvWattak.def:0:173", "animation": "CBWLFR.DEF" }, "sound" : @@ -75,6 +81,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:174", + "mapAttackFromLeft": "AvWattak.def:0:175", "animation": "CUWLFR.DEF" }, "sound" : @@ -102,6 +110,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:176", + "mapAttackFromLeft": "AvWattak.def:0:177", "animation": "CORC.DEF", "missile" : { @@ -133,6 +143,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:178", + "mapAttackFromLeft": "AvWattak.def:0:179", "animation": "CORCCH.DEF", "missile" : { @@ -157,6 +169,8 @@ "upgrades": ["ogreMage"], "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:180", + "mapAttackFromLeft": "AvWattak.def:0:181", "animation": "COGRE.DEF" }, "sound" : @@ -194,6 +208,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:182", + "mapAttackFromLeft": "AvWattak.def:0:183", "animation": "COGMAG.DEF" }, "sound" : @@ -222,6 +238,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:184", + "mapAttackFromLeft": "AvWattak.def:0:185", "animation": "CROC.DEF" }, "sound" : @@ -260,6 +278,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:186", + "mapAttackFromLeft": "AvWattak.def:0:187", "animation": "CTBIRD.DEF" }, "sound" : @@ -292,6 +312,8 @@ "upgrades": ["cyclopKing"], "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:188", + "mapAttackFromLeft": "AvWattak.def:0:189", "animation": "CCYCLR.DEF", "missile" : { @@ -335,6 +357,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:190", + "mapAttackFromLeft": "AvWattak.def:0:191", "animation": "CCYCLLOR.DEF", "missile" : { @@ -373,6 +397,8 @@ "upgrades": ["ancientBehemoth"], "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:192", + "mapAttackFromLeft": "AvWattak.def:0:193", "animation": "CYBEHE.DEF" }, "sound" : @@ -405,6 +431,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:194", + "mapAttackFromLeft": "AvWattak.def:0:195", "animation": "CABEHE.DEF" }, "sound" : diff --git a/config/creatures/tower.json b/config/creatures/tower.json index 99781a907..84bcef6e6 100644 --- a/config/creatures/tower.json +++ b/config/creatures/tower.json @@ -9,6 +9,8 @@ "hasDoubleWeek": true, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:56", + "mapAttackFromLeft": "AvWattak.def:0:57", "animation": "CGREMA.DEF" }, "sound" : @@ -36,6 +38,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:58", + "mapAttackFromLeft": "AvWattak.def:0:59", "animation": "CGREMM.DEF", "missile" : { @@ -71,6 +75,8 @@ "upgrades": ["obsidianGargoyle"], "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:60", + "mapAttackFromLeft": "AvWattak.def:0:61", "animation": "CGARGO.DEF" }, "sound" : @@ -100,6 +106,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:62", + "mapAttackFromLeft": "AvWattak.def:0:63", "animation": "COGARG.DEF" }, "sound" : @@ -132,6 +140,8 @@ "upgrades": ["stoneGolem"], "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:64", + "mapAttackFromLeft": "AvWattak.def:0:65", "animation": "CSGOLE.DEF" }, "sound" : @@ -163,6 +173,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:66", + "mapAttackFromLeft": "AvWattak.def:0:67", "animation": "CIGOLE.DEF" }, "sound" : @@ -199,6 +211,8 @@ "upgrades": ["archMage"], "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:68", + "mapAttackFromLeft": "AvWattak.def:0:69", "animation": "CMAGE.DEF", "missile" : { @@ -243,6 +257,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:70", + "mapAttackFromLeft": "AvWattak.def:0:71", "animation": "CAMAGE.DEF", "missile" : { @@ -294,6 +310,8 @@ "upgrades": ["masterGenie"], "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:72", + "mapAttackFromLeft": "AvWattak.def:0:73", "animation": "CGENIE.DEF" }, "sound" : @@ -346,6 +364,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:74", + "mapAttackFromLeft": "AvWattak.def:0:75", "animation": "CSULTA.DEF" }, "sound" : @@ -374,6 +394,8 @@ "upgrades": ["nagaQueen"], "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:76", + "mapAttackFromLeft": "AvWattak.def:0:77", "animation": "CNAGA.DEF" }, "sound" : @@ -400,6 +422,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:78", + "mapAttackFromLeft": "AvWattak.def:0:79", "animation": "CNAGAG.DEF" }, "sound" : @@ -431,6 +455,8 @@ "upgrades": ["titan"], "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:80", + "mapAttackFromLeft": "AvWattak.def:0:81", "animation": "CLTITA.DEF" }, "sound" : @@ -476,6 +502,8 @@ }, "graphics" : { + "mapAttackFromRight": "AvWattak.def:0:82", + "mapAttackFromLeft": "AvWattak.def:0:83", "animation": "CGTITA.DEF", "missile" : { From eef3e00f42eb4ef2d4a0a86c8ff027f8bbd069af Mon Sep 17 00:00:00 2001 From: Laserlicht <13953785+Laserlicht@users.noreply.github.com> Date: Fri, 20 Jun 2025 03:45:11 +0200 Subject: [PATCH 07/60] fix direction --- client/mapView/IMapRendererContext.h | 4 ++-- client/mapView/MapRenderer.cpp | 6 ++++-- client/mapView/MapRendererContext.cpp | 8 ++++---- client/mapView/MapRendererContext.h | 2 +- 4 files changed, 11 insertions(+), 9 deletions(-) diff --git a/client/mapView/IMapRendererContext.h b/client/mapView/IMapRendererContext.h index 964e44f5d..1c5f9e6ee 100644 --- a/client/mapView/IMapRendererContext.h +++ b/client/mapView/IMapRendererContext.h @@ -56,8 +56,8 @@ public: /// returns true if specified object is the currently active hero virtual bool isActiveHero(const CGObjectInstance* obj) const = 0; - /// returns pos of attacker if specified object is a monster and currently attacked - virtual std::optional monsterAttacked(const CGObjectInstance * obj) const = 0; + /// returns direction of attacker if specified object is a monster and currently attacked + virtual int monsterAttacked(const CGObjectInstance * obj) const = 0; virtual size_t objectGroupIndex(ObjectInstanceID objectID) const = 0; virtual Point objectImageOffset(ObjectInstanceID objectID, const int3 & coordinates) const = 0; diff --git a/client/mapView/MapRenderer.cpp b/client/mapView/MapRenderer.cpp index 0f66a5338..2dbb99d76 100644 --- a/client/mapView/MapRenderer.cpp +++ b/client/mapView/MapRenderer.cpp @@ -466,10 +466,12 @@ std::shared_ptr MapRendererObjects::getImage(IMapRendererContext & conte if(animation->size(groupIndex) == 0) return nullptr; - if(auto attackerPos = context.monsterAttacked(obj)) + auto attackerPos = context.monsterAttacked(obj); + if(attackerPos != -1) { const auto * creature = dynamic_cast(obj); - ImagePath imgPath = (*attackerPos).x < obj->pos.x ? (*creature->getCreatureMap().begin()).first->mapAttackFromLeft : (*creature->getCreatureMap().begin()).first->mapAttackFromRight; + auto dir = std::vector({1, 2, 7, 8}); + ImagePath imgPath = std::count(dir.begin(), dir.end(), attackerPos) ? (*creature->getCreatureMap().begin()).first->mapAttackFromRight : (*creature->getCreatureMap().begin()).first->mapAttackFromLeft; if(!imgPath.empty()) { auto img = ENGINE->renderHandler().loadImage(imgPath, EImageBlitMode::SIMPLE); diff --git a/client/mapView/MapRendererContext.cpp b/client/mapView/MapRendererContext.cpp index c5f10bf37..3fa9811da 100644 --- a/client/mapView/MapRendererContext.cpp +++ b/client/mapView/MapRendererContext.cpp @@ -87,16 +87,16 @@ bool MapRendererBaseContext::isActiveHero(const CGObjectInstance * obj) const return false; } -std::optional MapRendererBaseContext::monsterAttacked(const CGObjectInstance * obj) const +int MapRendererBaseContext::monsterAttacked(const CGObjectInstance * obj) const { if(obj->ID != Obj::MONSTER) - return std::nullopt; + return -1; for(auto & battle : GAME->interface()->cb->getActiveBattles()) if(obj->pos == battle.second->getBattle()->getLocation()) - return battle.second->getBattle()->getSideHero(BattleSide::ATTACKER)->pos; + return battle.second->getBattle()->getSideHero(BattleSide::ATTACKER)->moveDir; - return std::nullopt; + return -1; } bool MapRendererBaseContext::tileAnimated(const int3 & coordinates) const diff --git a/client/mapView/MapRendererContext.h b/client/mapView/MapRendererContext.h index 67b620084..35d891cc5 100644 --- a/client/mapView/MapRendererContext.h +++ b/client/mapView/MapRendererContext.h @@ -36,7 +36,7 @@ public: bool tileAnimated(const int3 & coordinates) const override; bool isActiveHero(const CGObjectInstance* obj) const override; - std::optional monsterAttacked(const CGObjectInstance * obj) const override; + int monsterAttacked(const CGObjectInstance * obj) const override; const TerrainTile & getMapTile(const int3 & coordinates) const override; const MapObjectsList & getObjects(const int3 & coordinates) const override; From a8af226ec5e160d8260bb5c9bc3b08e2114db230 Mon Sep 17 00:00:00 2001 From: Laserlicht <13953785+Laserlicht@users.noreply.github.com> Date: Fri, 20 Jun 2025 03:46:27 +0200 Subject: [PATCH 08/60] format fix --- client/renderSDL/RenderHandler.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/renderSDL/RenderHandler.cpp b/client/renderSDL/RenderHandler.cpp index 1afebdb20..6f9bb8aa9 100644 --- a/client/renderSDL/RenderHandler.cpp +++ b/client/renderSDL/RenderHandler.cpp @@ -357,7 +357,7 @@ std::shared_ptr RenderHandler::loadImage(const ImagePath & path, EImageB auto name = path.getOriginalName(); std::vector splitted; - boost::split(splitted, name, boost::is_any_of(":")); + boost::split(splitted, name, boost::is_any_of(":")); if(splitted.size() == 3) { ImageLocator locator = getLocatorForAnimationFrame(AnimationPath::builtin(splitted[0]), std::stoi(splitted[2]), std::stoi(splitted[1]), 1, mode); From b95293f254eb0e311bbb3dc11b94b0a28099a869 Mon Sep 17 00:00:00 2001 From: Laserlicht <13953785+Laserlicht@users.noreply.github.com> Date: Fri, 20 Jun 2025 12:10:35 +0200 Subject: [PATCH 09/60] better approach --- client/mapView/MapRenderer.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/client/mapView/MapRenderer.cpp b/client/mapView/MapRenderer.cpp index 2dbb99d76..b0462cf60 100644 --- a/client/mapView/MapRenderer.cpp +++ b/client/mapView/MapRenderer.cpp @@ -470,8 +470,9 @@ std::shared_ptr MapRendererObjects::getImage(IMapRendererContext & conte if(attackerPos != -1) { const auto * creature = dynamic_cast(obj); + auto const & creatureType = LIBRARY->creh->objects[creature->appearance->subid]; auto dir = std::vector({1, 2, 7, 8}); - ImagePath imgPath = std::count(dir.begin(), dir.end(), attackerPos) ? (*creature->getCreatureMap().begin()).first->mapAttackFromRight : (*creature->getCreatureMap().begin()).first->mapAttackFromLeft; + ImagePath imgPath = std::count(dir.begin(), dir.end(), attackerPos) ? creatureType->mapAttackFromRight : creatureType->mapAttackFromLeft; if(!imgPath.empty()) { auto img = ENGINE->renderHandler().loadImage(imgPath, EImageBlitMode::SIMPLE); From 9f5f6d74347d305323ab38aa79e61dddfc201fb0 Mon Sep 17 00:00:00 2001 From: George King <98261225+GeorgeK1ng@users.noreply.github.com> Date: Fri, 20 Jun 2025 19:44:15 +0200 Subject: [PATCH 10/60] Czech translation update --- Mods/vcmi/Content/config/czech.json | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/Mods/vcmi/Content/config/czech.json b/Mods/vcmi/Content/config/czech.json index 235c4f25c..64410024b 100644 --- a/Mods/vcmi/Content/config/czech.json +++ b/Mods/vcmi/Content/config/czech.json @@ -32,6 +32,13 @@ "vcmi.adventureMap.dwelling3" : "{%s}\n\nChceš najmout jednotku %s, %s nebo %s?", "vcmi.artifact.charges" : "Použití", + + "vcmi.battle.action.move" : "Přesunout jednotku na určené místo", + "vcmi.battle.action.info" : "Zobrazit informace o jednotce", + "vcmi.battle.action.shoot" : "Použít střelecký útok", + "vcmi.battle.action.attack" : "Použít útok zblízka", + "vcmi.battle.action.return" : "Zaútočit zblízka a vrátit se", + "vcmi.battle.action.genie" : "Seslat náhodné podpůrné kouzlo", "vcmi.bonusSource.artifact" : "Artefakt", "vcmi.bonusSource.creature" : "Schopnost", @@ -435,6 +442,9 @@ "vcmi.townWindow.upgradeAll.notAllUpgradable" : "Nemáte dostatek surovin na vylepšení všech jednotek. Chcete vylepšit následující jednotky?", "vcmi.townWindow.upgradeAll.notUpgradable" : "Nemáte dostatek surovin na vylepšení žádné z jednotek.", + "vcmi.kingdomOverview.secSkillOverflow.hover" : "Další druhotné dovednosti", + "vcmi.kingdomOverview.secSkillOverflow.help" : "{Další druhotné dovednosti}\n\nTento hrdina má více druhotných dovedností.\nVšechny si můžeš prohlédnout v přehledu hrdiny.", + "vcmi.logicalExpressions.anyOf" : "Nějaké z následujících:", "vcmi.logicalExpressions.allOf" : "Všechny následující:", "vcmi.logicalExpressions.noneOf" : "Žádné z následujících:", @@ -637,7 +647,6 @@ "creatures.core.azureDragon.bonus.fearful" : "{Strach}\nVyvolává strach u nepřátelské jednotky", "creatures.core.azureDragon.bonus.fearless" : "{Nebojácnost}\nImunní vůči schopnosti Strach", - "core.bonus.ADDITIONAL_ATTACK.description" : "{Dvojitý útok}\nÚtočí dvakrát", // TODO: alternative descriptions for melee/ranged effect range "core.bonus.ADDITIONAL_RETALIATION.description" : "{Další odvetné útoky}\nMůže odvetně zaútočit ${val} krát navíc", "core.bonus.ATTACKS_ALL_ADJACENT.description" : "{Útok na všechny kolem}\nÚtočí na všechny sousední nepřátele", @@ -700,6 +709,7 @@ "core.bonus.REVENGE.description" : "{Pomsta}\nZpůsobuje extra poškození na základě ztrát útočníka v bitvě", "core.bonus.SHOOTER.description" : "{Střelec}\nJednotka může střílet", "core.bonus.SHOOTS_ALL_ADJACENT.description" : "{Střílí všude kolem}\nStřelecký útok této jednotky zasáhne všechny cíle v malé oblasti", + "core.bonus.SKELETON_TRANSFORMER_TARGET.description" : "{Přeměna na kostlivce}\nMěnič na kostlivce přemění tuto jednotku na ${subtype.creature}.", "core.bonus.SOUL_STEAL.description" : "{Zloděj duší}\nZískává ${val} nové jednotky za každého zabitého nepřítele", "core.bonus.SPELL_AFTER_ATTACK.description" : "{Sesílá po útoku}\nMá ${val}% šanci seslat ${subtype.spell} po útoku", "core.bonus.SPELL_BEFORE_ATTACK.description" : "{Sesílá před útokem}\nMá ${val}% šanci seslat ${subtype.spell} před útokem", From 2730e461a9afb0ca287b8e18ac0257c98ada29fd Mon Sep 17 00:00:00 2001 From: Laserlicht <13953785+Laserlicht@users.noreply.github.com> Date: Sat, 21 Jun 2025 15:19:30 +0200 Subject: [PATCH 11/60] credits translation --- Mods/vcmi/Content/config/english.json | 7 +++++++ Mods/vcmi/Content/config/german.json | 7 +++++++ client/mainmenu/CreditsScreen.cpp | 6 ++++-- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/Mods/vcmi/Content/config/english.json b/Mods/vcmi/Content/config/english.json index 9480af6de..110aae88d 100644 --- a/Mods/vcmi/Content/config/english.json +++ b/Mods/vcmi/Content/config/english.json @@ -410,6 +410,13 @@ "vcmi.battleResultsWindow.spellDurationRemaining.1" : "Remaining duration : %d combat round", "vcmi.battleResultsWindow.spellDurationRemaining.2" : "Remaining duration : %d combat rounds", + "vcmi.credits.website" : "Website", + "vcmi.credits.vcmi" : "VCMI", + "vcmi.credits.heroes" : "Heroes of Might and Magic III", + "vcmi.credits.idea" : "Idea", + "vcmi.credits.developing" : "Developing", + "vcmi.credits.testing" : "Testing", + "vcmi.tutorialWindow.title" : "Touchscreen Introduction", "vcmi.tutorialWindow.decription.RightClick" : "Touch and hold the element on which you want to right-click. Touch the free area to close.", "vcmi.tutorialWindow.decription.MapPanning" : "Touch and drag with one finger to move the map.", diff --git a/Mods/vcmi/Content/config/german.json b/Mods/vcmi/Content/config/german.json index a5858f42d..397a784fa 100644 --- a/Mods/vcmi/Content/config/german.json +++ b/Mods/vcmi/Content/config/german.json @@ -400,6 +400,13 @@ "vcmi.battleResultsWindow.applyResultsLabel" : "Kampfergebnis übernehmen", + "vcmi.credits.website" : "Webseite", + "vcmi.credits.vcmi" : "VCMI", + "vcmi.credits.heroes" : "Heroes of Might and Magic III", + "vcmi.credits.idea" : "Idee", + "vcmi.credits.developing" : "Entwicklung", + "vcmi.credits.testing" : "Tester", + "vcmi.tutorialWindow.title" : "Touchscreen Einführung", "vcmi.tutorialWindow.decription.RightClick" : "Berührt und haltet das Element, auf das mit der rechten Maustaste geklickt werden soll. Berührt den freien Bereich, um zu schließen.", "vcmi.tutorialWindow.decription.MapPanning" : "Berührt und zieht mit einem Finger, um die Karte zu verschieben.", diff --git a/client/mainmenu/CreditsScreen.cpp b/client/mainmenu/CreditsScreen.cpp index 22fe39228..e47afd3c5 100644 --- a/client/mainmenu/CreditsScreen.cpp +++ b/client/mainmenu/CreditsScreen.cpp @@ -17,7 +17,9 @@ #include "../widgets/TextControls.h" #include "../widgets/ObjectLists.h" +#include "../../lib/GameLibrary.h" #include "../../lib/filesystem/Filesystem.h" +#include "../../lib/texts/CGeneralTextHandler.h" #include "../../AUTHORS.h" @@ -36,7 +38,7 @@ CreditsScreen::CreditsScreen(Rect rect) for (auto & element : contributors) { if(element[0] != contributorsTask) - contributorsText += "\r\n{" + element[0] + ":}\r\n"; + contributorsText += "\r\n\r\n{" + LIBRARY->generaltexth->translate("vcmi.credits." + boost::to_lower_copy(element[0])) + ":}\r\n"; contributorsText += (element[2] != "" ? element[2] : element[1]) + "\r\n"; contributorsTask = element[0]; } @@ -45,7 +47,7 @@ CreditsScreen::CreditsScreen(Rect rect) std::string text((char *)textFile.first.get(), textFile.second); size_t firstQuote = text.find('\"') + 1; text = text.substr(firstQuote, text.find('\"', firstQuote) - firstQuote); - text = "{- VCMI -}\r\n\r\n" + contributorsText + "\r\n\r\n{Website:}\r\nhttps://vcmi.eu\r\n\r\n\r\n\r\n\r\n{- Heroes of Might and Magic III -}\r\n\r\n" + text; + text = "{- " + LIBRARY->generaltexth->translate("vcmi.credits.vcmi") + " -}\r\n" + contributorsText + "\r\n\r\n{" + LIBRARY->generaltexth->translate("vcmi.credits.website") + ":}\r\nhttps://vcmi.eu\r\n\r\n\r\n\r\n\r\n{- " + LIBRARY->generaltexth->translate("vcmi.credits.heroes") + " -}\r\n\r\n\r\n" + text; credits = std::make_shared(Rect(pos.w - 350, 0, 350, 600), FONT_CREDITS, ETextAlignment::CENTER, Colors::WHITE, text); credits->scrollTextTo(-600); // move all text below the screen } From 12cfd48fd90b8ac653fca961d3bb57990b183e24 Mon Sep 17 00:00:00 2001 From: Laserlicht <13953785+Laserlicht@users.noreply.github.com> Date: Sat, 21 Jun 2025 15:30:23 +0200 Subject: [PATCH 12/60] shorten text to fit in one line --- Mods/vcmi/Content/config/english.json | 2 +- Mods/vcmi/Content/config/german.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Mods/vcmi/Content/config/english.json b/Mods/vcmi/Content/config/english.json index 110aae88d..36edf1aef 100644 --- a/Mods/vcmi/Content/config/english.json +++ b/Mods/vcmi/Content/config/english.json @@ -412,7 +412,7 @@ "vcmi.credits.website" : "Website", "vcmi.credits.vcmi" : "VCMI", - "vcmi.credits.heroes" : "Heroes of Might and Magic III", + "vcmi.credits.heroes" : "Heroes III", "vcmi.credits.idea" : "Idea", "vcmi.credits.developing" : "Developing", "vcmi.credits.testing" : "Testing", diff --git a/Mods/vcmi/Content/config/german.json b/Mods/vcmi/Content/config/german.json index 397a784fa..2160f0920 100644 --- a/Mods/vcmi/Content/config/german.json +++ b/Mods/vcmi/Content/config/german.json @@ -402,7 +402,7 @@ "vcmi.credits.website" : "Webseite", "vcmi.credits.vcmi" : "VCMI", - "vcmi.credits.heroes" : "Heroes of Might and Magic III", + "vcmi.credits.heroes" : "Heroes III", "vcmi.credits.idea" : "Idee", "vcmi.credits.developing" : "Entwicklung", "vcmi.credits.testing" : "Tester", From bd090059da27e3e68b1c38c3fc398ce2c62ba1cc Mon Sep 17 00:00:00 2001 From: Laserlicht <13953785+Laserlicht@users.noreply.github.com> Date: Sun, 22 Jun 2025 00:20:03 +0200 Subject: [PATCH 13/60] small refactoring --- lib/campaign/CampaignHandler.cpp | 15 +-------------- lib/mapping/MapFormatH3M.cpp | 16 +--------------- lib/texts/TextOperations.cpp | 14 ++++++++++++++ lib/texts/TextOperations.h | 3 +++ 4 files changed, 19 insertions(+), 29 deletions(-) diff --git a/lib/campaign/CampaignHandler.cpp b/lib/campaign/CampaignHandler.cpp index 4972d0468..53738c985 100644 --- a/lib/campaign/CampaignHandler.cpp +++ b/lib/campaign/CampaignHandler.cpp @@ -112,19 +112,6 @@ std::shared_ptr CampaignHandler::getCampaign( const std::string & return ret; } -static std::string convertMapName(std::string input) -{ - boost::algorithm::to_lower(input); - boost::algorithm::trim(input); - - size_t slashPos = input.find_last_of("/"); - - if (slashPos != std::string::npos) - return input.substr(slashPos + 1); - - return input; -} - std::string CampaignHandler::readLocalizedString(CampaignHeader & target, CBinaryReader & reader, const std::string & filename, const std::string & modName, const std::string & encoding, const std::string & identifier) { const std::string & input = TextOperations::toUnicode(reader.readBaseString(), encoding); @@ -134,7 +121,7 @@ std::string CampaignHandler::readLocalizedString(CampaignHeader & target, CBinar std::string CampaignHandler::readLocalizedString(CampaignHeader & target, const std::string & text, const std::string & filename, const std::string & modName, const std::string & identifier) { - TextIdentifier stringID( "campaign", convertMapName(filename), identifier); + TextIdentifier stringID( "campaign", TextOperations::convertMapName(filename), identifier); if (text.empty()) return ""; diff --git a/lib/mapping/MapFormatH3M.cpp b/lib/mapping/MapFormatH3M.cpp index 8afa96e57..a8c0e60f6 100644 --- a/lib/mapping/MapFormatH3M.cpp +++ b/lib/mapping/MapFormatH3M.cpp @@ -46,25 +46,11 @@ VCMI_LIB_NAMESPACE_BEGIN -static std::string convertMapName(std::string input) -{ - boost::algorithm::to_lower(input); - boost::algorithm::trim(input); - boost::algorithm::erase_all(input, "."); - - size_t slashPos = input.find_last_of('/'); - - if(slashPos != std::string::npos) - return input.substr(slashPos + 1); - - return input; -} - CMapLoaderH3M::CMapLoaderH3M(const std::string & mapName, const std::string & modName, const std::string & encodingName, CInputStream * stream) : map(nullptr) , reader(new MapReaderH3M(stream)) , inputStream(stream) - , mapName(convertMapName(mapName)) + , mapName(TextOperations::convertMapName(mapName)) , modName(modName) , fileEncoding(encodingName) { diff --git a/lib/texts/TextOperations.cpp b/lib/texts/TextOperations.cpp index 0346dfe65..3a83e42ec 100644 --- a/lib/texts/TextOperations.cpp +++ b/lib/texts/TextOperations.cpp @@ -423,4 +423,18 @@ boost::filesystem::path TextOperations::Utf8TofilesystemPath(const std::string& #endif } +std::string TextOperations::convertMapName(std::string input) +{ + boost::algorithm::to_lower(input); + boost::algorithm::trim(input); + boost::algorithm::erase_all(input, "."); + + size_t slashPos = input.find_last_of('/'); + + if(slashPos != std::string::npos) + return input.substr(slashPos + 1); + + return input; +} + VCMI_LIB_NAMESPACE_END diff --git a/lib/texts/TextOperations.h b/lib/texts/TextOperations.h index 63933ae56..bae9c5873 100644 --- a/lib/texts/TextOperations.h +++ b/lib/texts/TextOperations.h @@ -91,6 +91,9 @@ namespace TextOperations // Used for handling paths with non-ASCII characters. DLL_LINKAGE boost::filesystem::path Utf8TofilesystemPath(const std::string& path); + + /// Strip out unwanted characters from map name + DLL_LINKAGE std::string convertMapName(std::string input); }; template From ef2227251c8fda604e1753b3173a0ac07700b322 Mon Sep 17 00:00:00 2001 From: Laserlicht <13953785+Laserlicht@users.noreply.github.com> Date: Sun, 22 Jun 2025 14:08:01 +0200 Subject: [PATCH 14/60] treasure selector --- mapeditor/CMakeLists.txt | 3 + mapeditor/templateeditor/templateeditor.cpp | 4 +- mapeditor/templateeditor/treasureselector.cpp | 102 ++++++++++++++++++ mapeditor/templateeditor/treasureselector.h | 37 +++++++ mapeditor/templateeditor/treasureselector.ui | 38 +++++++ 5 files changed, 182 insertions(+), 2 deletions(-) create mode 100644 mapeditor/templateeditor/treasureselector.cpp create mode 100644 mapeditor/templateeditor/treasureselector.h create mode 100644 mapeditor/templateeditor/treasureselector.ui diff --git a/mapeditor/CMakeLists.txt b/mapeditor/CMakeLists.txt index cad4dffaf..2dcfc3345 100644 --- a/mapeditor/CMakeLists.txt +++ b/mapeditor/CMakeLists.txt @@ -60,6 +60,7 @@ if(ENABLE_TEMPLATE_EDITOR) templateeditor/terrainselector.cpp templateeditor/factionselector.cpp templateeditor/mineselector.cpp + templateeditor/treasureselector.cpp ) endif() @@ -126,6 +127,7 @@ if(ENABLE_TEMPLATE_EDITOR) templateeditor/terrainselector.h templateeditor/factionselector.h templateeditor/mineselector.h + templateeditor/treasureselector.h ) endif() @@ -170,6 +172,7 @@ if(ENABLE_TEMPLATE_EDITOR) templateeditor/terrainselector.ui templateeditor/factionselector.ui templateeditor/mineselector.ui + templateeditor/treasureselector.ui ) endif() diff --git a/mapeditor/templateeditor/templateeditor.cpp b/mapeditor/templateeditor/templateeditor.cpp index e4cd7de70..ec64739ca 100644 --- a/mapeditor/templateeditor/templateeditor.cpp +++ b/mapeditor/templateeditor/templateeditor.cpp @@ -15,6 +15,7 @@ #include "terrainselector.h" #include "factionselector.h" #include "mineselector.h" +#include "treasureselector.h" #include "GeometryAlgorithm.h" #include "../helper.h" @@ -1047,8 +1048,7 @@ void TemplateEditor::on_pushButtonBannedMonsters_clicked() void TemplateEditor::on_pushButtonTreasure_clicked() { - //TODO: Implement dialog - QMessageBox::critical(this, tr("Error"), tr("Not implemented yet!")); + TreasureSelector::showTreasureSelector(templates[selectedTemplate]->getZones().at(selectedZone)->treasureInfo); } void TemplateEditor::on_pushButtonMines_clicked() diff --git a/mapeditor/templateeditor/treasureselector.cpp b/mapeditor/templateeditor/treasureselector.cpp new file mode 100644 index 000000000..486c6e57c --- /dev/null +++ b/mapeditor/templateeditor/treasureselector.cpp @@ -0,0 +1,102 @@ +/* + * treasureselector.cpp, part of VCMI engine + * + * Authors: listed in file AUTHORS in main folder + * + * License: GNU General Public License v2.0 or later + * Full text of license available in license.txt file, in main folder + * + */ + +#include "StdInc.h" + +#include "treasureselector.h" +#include "ui_treasureselector.h" + +#include "../../lib/GameLibrary.h" +#include "../../lib/texts/CGeneralTextHandler.h" +#include "../../lib/rmg/CRmgTemplate.h" + +TreasureSelector::TreasureSelector(std::vector & treasures) : + ui(new Ui::TreasureSelector), + treasures(treasures) +{ + ui->setupUi(this); + + setWindowTitle(tr("Treasure Selector")); + + setWindowModality(Qt::ApplicationModal); + + ui->tableWidgetTreasures->setColumnCount(4); + ui->tableWidgetTreasures->setRowCount(treasures.size() + 1); + ui->tableWidgetTreasures->setHorizontalHeaderLabels({tr("Min"), tr("Max"), tr("Density"), tr("Action")}); + + auto addRow = [this](int min, int max, int density, int row){ + auto spinBoxMin = new QSpinBox(); + spinBoxMin->setRange(0, 1000000); + spinBoxMin->setValue(min); + ui->tableWidgetTreasures->setCellWidget(row, 0, spinBoxMin); + + auto spinBoxMax = new QSpinBox(); + spinBoxMax->setRange(0, 1000000); + spinBoxMax->setValue(max); + ui->tableWidgetTreasures->setCellWidget(row, 1, spinBoxMax); + + auto spinBoxDensity = new QSpinBox(); + spinBoxDensity->setRange(0, 1000); + spinBoxDensity->setValue(density); + ui->tableWidgetTreasures->setCellWidget(row, 2, spinBoxDensity); + + auto deleteButton = new QPushButton("Delete"); + ui->tableWidgetTreasures->setCellWidget(row, 3, deleteButton); + connect(deleteButton, &QPushButton::clicked, this, [this, deleteButton]() { + for (int r = 0; r < ui->tableWidgetTreasures->rowCount(); ++r) { + if (ui->tableWidgetTreasures->cellWidget(r, 3) == deleteButton) { + ui->tableWidgetTreasures->removeRow(r); + break; + } + } + }); + }; + + for (int row = 0; row < treasures.size(); ++row) + addRow(treasures[row].min, treasures[row].max, treasures[row].density, row); + + auto addButton = new QPushButton("Add"); + ui->tableWidgetTreasures->setCellWidget(ui->tableWidgetTreasures->rowCount() - 1, 3, addButton); + connect(addButton, &QPushButton::clicked, this, [this, addRow, treasures]() { + ui->tableWidgetTreasures->insertRow(ui->tableWidgetTreasures->rowCount() - 1); + addRow(0, 0, 0, ui->tableWidgetTreasures->rowCount() - 2); + }); + + ui->tableWidgetTreasures->resizeColumnsToContents(); + + show(); +} + +void TreasureSelector::showTreasureSelector(std::vector & treasures) +{ + auto * dialog = new TreasureSelector(treasures); + dialog->setAttribute(Qt::WA_DeleteOnClose); + dialog->exec(); +} + +void TreasureSelector::on_buttonBoxResult_accepted() +{ + treasures.clear(); + for (int row = 0; row < ui->tableWidgetTreasures->rowCount() - 1; ++row) + { + CTreasureInfo info; + info.min = static_cast(ui->tableWidgetTreasures->cellWidget(row, 0))->value(); + info.max = static_cast(ui->tableWidgetTreasures->cellWidget(row, 1))->value(); + info.density = static_cast(ui->tableWidgetTreasures->cellWidget(row, 2))->value(); + treasures.push_back(info); + } + + close(); +} + +void TreasureSelector::on_buttonBoxResult_rejected() +{ + close(); +} \ No newline at end of file diff --git a/mapeditor/templateeditor/treasureselector.h b/mapeditor/templateeditor/treasureselector.h new file mode 100644 index 000000000..dea0912d5 --- /dev/null +++ b/mapeditor/templateeditor/treasureselector.h @@ -0,0 +1,37 @@ +/* + * treasureselector.h, part of VCMI engine + * + * Authors: listed in file AUTHORS in main folder + * + * License: GNU General Public License v2.0 or later + * Full text of license available in license.txt file, in main folder + * + */ +#pragma once +#include + +#include "../StdInc.h" +#include "../../lib/rmg/CRmgTemplate.h" + +namespace Ui { +class TreasureSelector; +} + +class TreasureSelector : public QDialog +{ + Q_OBJECT + +public: + explicit TreasureSelector(std::vector & treasures); + + static void showTreasureSelector(std::vector & treasures); + +private slots: + void on_buttonBoxResult_accepted(); + void on_buttonBoxResult_rejected(); + +private: + Ui::TreasureSelector *ui; + + std::vector & treasures; +}; diff --git a/mapeditor/templateeditor/treasureselector.ui b/mapeditor/templateeditor/treasureselector.ui new file mode 100644 index 000000000..67fd71f6b --- /dev/null +++ b/mapeditor/templateeditor/treasureselector.ui @@ -0,0 +1,38 @@ + + + TreasureSelector + + + + 0 + 0 + 400 + 330 + + + + Select Treasures + + + + + + Select Treasures + + + + + + + + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + From c6798bdeb5d713664adf3aa1dca966952a3b7db1 Mon Sep 17 00:00:00 2001 From: Laserlicht <13953785+Laserlicht@users.noreply.github.com> Date: Sun, 22 Jun 2025 14:34:12 +0200 Subject: [PATCH 15/60] update translations --- launcher/translation/belarusian.ts | 36 +- launcher/translation/bulgarian.ts | 36 +- launcher/translation/chinese.ts | 36 +- launcher/translation/czech.ts | 36 +- launcher/translation/english.ts | 36 +- launcher/translation/finnish.ts | 36 +- launcher/translation/french.ts | 36 +- launcher/translation/german.ts | 36 +- launcher/translation/greek.ts | 36 +- launcher/translation/hungarian.ts | 36 +- launcher/translation/italian.ts | 36 +- launcher/translation/japanese.ts | 36 +- launcher/translation/korean.ts | 36 +- launcher/translation/norwegian.ts | 36 +- launcher/translation/polish.ts | 36 +- launcher/translation/portuguese.ts | 36 +- launcher/translation/romanian.ts | 36 +- launcher/translation/russian.ts | 36 +- launcher/translation/spanish.ts | 36 +- launcher/translation/swedish.ts | 36 +- launcher/translation/turkish.ts | 36 +- launcher/translation/ukrainian.ts | 36 +- launcher/translation/vietnamese.ts | 36 +- mapeditor/translation/belarusian.ts | 1417 +++++++++++++++++++------- mapeditor/translation/bulgarian.ts | 1418 +++++++++++++++++++------- mapeditor/translation/chinese.ts | 1421 +++++++++++++++++++------- mapeditor/translation/czech.ts | 1421 +++++++++++++++++++------- mapeditor/translation/english.ts | 1411 +++++++++++++++++++------- mapeditor/translation/finnish.ts | 1419 +++++++++++++++++++------- mapeditor/translation/french.ts | 1423 +++++++++++++++++++------- mapeditor/translation/german.ts | 1421 +++++++++++++++++++------- mapeditor/translation/greek.ts | 1418 +++++++++++++++++++------- mapeditor/translation/hungarian.ts | 1421 +++++++++++++++++++------- mapeditor/translation/italian.ts | 1423 +++++++++++++++++++------- mapeditor/translation/japanese.ts | 1416 +++++++++++++++++++------- mapeditor/translation/korean.ts | 1428 ++++++++++++++++++++------- mapeditor/translation/norwegian.ts | 1416 +++++++++++++++++++------- mapeditor/translation/polish.ts | 1419 +++++++++++++++++++------- mapeditor/translation/portuguese.ts | 1421 +++++++++++++++++++------- mapeditor/translation/romanian.ts | 1416 +++++++++++++++++++------- mapeditor/translation/russian.ts | 1421 +++++++++++++++++++------- mapeditor/translation/spanish.ts | 1421 +++++++++++++++++++------- mapeditor/translation/swedish.ts | 1416 +++++++++++++++++++------- mapeditor/translation/turkish.ts | 1424 +++++++++++++++++++------- mapeditor/translation/ukrainian.ts | 1421 +++++++++++++++++++------- mapeditor/translation/vietnamese.ts | 1421 +++++++++++++++++++------- 46 files changed, 24924 insertions(+), 8557 deletions(-) diff --git a/launcher/translation/belarusian.ts b/launcher/translation/belarusian.ts index 4790fb1c6..f69a0bb1c 100644 --- a/launcher/translation/belarusian.ts +++ b/launcher/translation/belarusian.ts @@ -1098,7 +1098,7 @@ Offline installer consists of two files: ".exe" and ".bin" - - + You have to select %1 file! param is file extension @@ -1115,69 +1115,69 @@ Offline installer consists of two files: ".exe" and ".bin" - - + GOG installer - + You've provided a GOG Galaxy installer! This file doesn't contain the game. Please download the offline backup game installer! - + Heroes III: HD Edition files are not supported by VCMI. Please select the directory with Heroes III: Complete Edition or Heroes III: Shadow of Death. - + Unknown or unsupported Heroes III version found. Please select the directory with Heroes III: Complete Edition or Heroes III: Shadow of Death. - + GOG data - + Failed to open file: %1 - + Extracting error! - + Hash error! - + No Heroes III data! - + Selected files do not contain Heroes III data! - + Failed to detect valid Heroes III data in chosen directory. Please select the directory with installed Heroes III data. - - - - + + + + Heroes III data not found! @@ -1521,12 +1521,12 @@ Bin (%n bytes): - + Mod data was not found - + Mod is located in a protected directory, please remove it manually: diff --git a/launcher/translation/bulgarian.ts b/launcher/translation/bulgarian.ts index 7956e1974..71ebc365b 100644 --- a/launcher/translation/bulgarian.ts +++ b/launcher/translation/bulgarian.ts @@ -1098,7 +1098,7 @@ Offline installer consists of two files: ".exe" and ".bin" - - + You have to select %1 file! param is file extension @@ -1115,69 +1115,69 @@ Offline installer consists of two files: ".exe" and ".bin" - - + GOG installer - + You've provided a GOG Galaxy installer! This file doesn't contain the game. Please download the offline backup game installer! - + Heroes III: HD Edition files are not supported by VCMI. Please select the directory with Heroes III: Complete Edition or Heroes III: Shadow of Death. - + Unknown or unsupported Heroes III version found. Please select the directory with Heroes III: Complete Edition or Heroes III: Shadow of Death. - + GOG data - + Failed to open file: %1 - + Extracting error! - + Hash error! - + No Heroes III data! - + Selected files do not contain Heroes III data! - + Failed to detect valid Heroes III data in chosen directory. Please select the directory with installed Heroes III data. - - - - + + + + Heroes III data not found! @@ -1519,12 +1519,12 @@ Bin (%n bytes): - + Mod data was not found - + Mod is located in a protected directory, please remove it manually: diff --git a/launcher/translation/chinese.ts b/launcher/translation/chinese.ts index e888512a9..1d8be25c0 100644 --- a/launcher/translation/chinese.ts +++ b/launcher/translation/chinese.ts @@ -1124,7 +1124,7 @@ Offline installer consists of two files: ".exe" and ".bin" - 选择%1文件... - + You have to select %1 file! param is file extension 你必须选择%1文件! @@ -1141,19 +1141,19 @@ Offline installer consists of two files: ".exe" and ".bin" - - + GOG installer GOG安装包 - + Heroes III: HD Edition files are not supported by VCMI. Please select the directory with Heroes III: Complete Edition or Heroes III: Shadow of Death. VCMI不支持英雄无敌3高清版文件。 请选择包含《英雄无敌3:完全版》或《英雄无敌3:死亡阴影》的目录。 - + Unknown or unsupported Heroes III version found. Please select the directory with Heroes III: Complete Edition or Heroes III: Shadow of Death. 检测到未知或不支持的英雄无敌3版本。 @@ -1161,52 +1161,52 @@ Please select the directory with Heroes III: Complete Edition or Heroes III: Sha - + GOG data GOG数据 - + Failed to open file: %1 打开文件失败:%1 - + You've provided a GOG Galaxy installer! This file doesn't contain the game. Please download the offline backup game installer! 您提供的是GOG Galaxy安装器!这个文件不包含游戏内容,请下载离线游戏安装器! - + Hash error! 哈希错误! - + No Heroes III data! 没有英雄无敌3数据! - + Selected files do not contain Heroes III data! 所选的文件不包含英雄无敌3数据! - + Failed to detect valid Heroes III data in chosen directory. Please select the directory with installed Heroes III data. 从所选目录检测有效的英雄无敌3数据失败。 请选择已安装英雄无敌3的数据目录。 - - - - + + + + Heroes III data not found! 未找到英雄无敌3数据! - + Extracting error! 提取错误! @@ -1567,12 +1567,12 @@ Bin (%n字节): 提取模组数据失败 - + Mod data was not found 未找到模组数据 - + Mod is located in a protected directory, please remove it manually: 模组位于受保护的目录,请手动删除它: diff --git a/launcher/translation/czech.ts b/launcher/translation/czech.ts index 9584d482e..59a8e079f 100644 --- a/launcher/translation/czech.ts +++ b/launcher/translation/czech.ts @@ -1117,7 +1117,7 @@ Offline installer consists of two files: ".exe" and ".bin" - Vyberte soubor %1... - + You have to select %1 file! param is file extension Musíte vybrat soubor %1! @@ -1134,24 +1134,24 @@ Offline installer consists of two files: ".exe" and ".bin" - - + GOG installer Instalátor GOG - + You've provided a GOG Galaxy installer! This file doesn't contain the game. Please download the offline backup game installer! Poskytli jste instalátor GOG Galaxy! Tento soubor neobsahuje hru. Prosím, stáhněte si záložní offline instalátor hry! - + Heroes III: HD Edition files are not supported by VCMI. Please select the directory with Heroes III: Complete Edition or Heroes III: Shadow of Death. Soubory z Heroes III: HD Edition nejsou ve VCMI podporovány. Vyberte prosím adresář s Heroes III: Complete Edition nebo Heroes III: Shadow of Death. - + Unknown or unsupported Heroes III version found. Please select the directory with Heroes III: Complete Edition or Heroes III: Shadow of Death. Byla nalezena neznámá nebo nepodporovaná verze Heroes III. @@ -1159,47 +1159,47 @@ Vyberte prosím adresář s Heroes III: Complete Edition nebo Heroes III: Shadow - + GOG data Data GOG - + Failed to open file: %1 Nepodařilo se otevřít soubor: %1 - + Extracting error! Chyba při rozbalování! - + Hash error! Nesouhlasí kontrolní součet! - + No Heroes III data! Chybí data Heroes III! - + Selected files do not contain Heroes III data! Vybrané soubory neobsahují data Heroes III! - + Failed to detect valid Heroes III data in chosen directory. Please select the directory with installed Heroes III data. Nepodařilo se detekovat platná data Heroes III ve vybraném adresáři. Vyberte prosím adresář s nainstalovanými daty Heroes III. - - - - + + + + Heroes III data not found! Data Heroes III nenalezena! @@ -1566,12 +1566,12 @@ Bin (%n bajtů): Extrakce modifikace selhala - + Mod data was not found Data modifikace nebyla nalezena - + Mod is located in a protected directory, please remove it manually: Modifikace se nachází v chráněném adresáři, odstraňte ji prosím ručně: diff --git a/launcher/translation/english.ts b/launcher/translation/english.ts index 05a30ef6c..0b514e594 100644 --- a/launcher/translation/english.ts +++ b/launcher/translation/english.ts @@ -1098,7 +1098,7 @@ Offline installer consists of two files: ".exe" and ".bin" - - + You have to select %1 file! param is file extension @@ -1115,69 +1115,69 @@ Offline installer consists of two files: ".exe" and ".bin" - - + GOG installer - + You've provided a GOG Galaxy installer! This file doesn't contain the game. Please download the offline backup game installer! - + Heroes III: HD Edition files are not supported by VCMI. Please select the directory with Heroes III: Complete Edition or Heroes III: Shadow of Death. - + Unknown or unsupported Heroes III version found. Please select the directory with Heroes III: Complete Edition or Heroes III: Shadow of Death. - + GOG data - + Failed to open file: %1 - + Extracting error! - + Hash error! - + No Heroes III data! - + Selected files do not contain Heroes III data! - + Failed to detect valid Heroes III data in chosen directory. Please select the directory with installed Heroes III data. - - - - + + + + Heroes III data not found! @@ -1519,12 +1519,12 @@ Bin (%n bytes): - + Mod data was not found - + Mod is located in a protected directory, please remove it manually: diff --git a/launcher/translation/finnish.ts b/launcher/translation/finnish.ts index 751961f12..34cec6eb5 100644 --- a/launcher/translation/finnish.ts +++ b/launcher/translation/finnish.ts @@ -1098,7 +1098,7 @@ Offline installer consists of two files: ".exe" and ".bin" - - + You have to select %1 file! param is file extension @@ -1115,69 +1115,69 @@ Offline installer consists of two files: ".exe" and ".bin" - - + GOG installer - + You've provided a GOG Galaxy installer! This file doesn't contain the game. Please download the offline backup game installer! - + Heroes III: HD Edition files are not supported by VCMI. Please select the directory with Heroes III: Complete Edition or Heroes III: Shadow of Death. - + Unknown or unsupported Heroes III version found. Please select the directory with Heroes III: Complete Edition or Heroes III: Shadow of Death. - + GOG data - + Failed to open file: %1 - + Extracting error! - + Hash error! - + No Heroes III data! - + Selected files do not contain Heroes III data! - + Failed to detect valid Heroes III data in chosen directory. Please select the directory with installed Heroes III data. - - - - + + + + Heroes III data not found! @@ -1519,12 +1519,12 @@ Bin (%n bytes): - + Mod data was not found - + Mod is located in a protected directory, please remove it manually: diff --git a/launcher/translation/french.ts b/launcher/translation/french.ts index d26c6832b..d060cfbec 100644 --- a/launcher/translation/french.ts +++ b/launcher/translation/french.ts @@ -1119,7 +1119,7 @@ L'installateur hors ligne est composé de deux fichiers : ".exe" Sélectionner le fichier %1... - + You have to select %1 file! param is file extension Vous avez sélectionné le fichier %1 ! @@ -1136,19 +1136,19 @@ L'installateur hors ligne est composé de deux fichiers : ".exe" - + GOG installer Installateur GOG - + Heroes III: HD Edition files are not supported by VCMI. Please select the directory with Heroes III: Complete Edition or Heroes III: Shadow of Death. Les fichiers de Heroes III: HD Edition ne sont pas pris en charge par VCMI. Veuillez sélectionner le répertoire contenant Heroes III: Complete Edition ou Heroes III: Shadow of Death. - + Unknown or unsupported Heroes III version found. Please select the directory with Heroes III: Complete Edition or Heroes III: Shadow of Death. Version inconnue ou non prise en charge de Heroes III détectée. @@ -1156,52 +1156,52 @@ Veuillez sélectionner le répertoire contenant Heroes III: Complete Edition ou - + GOG data Données GOG - + Failed to open file: %1 - + You've provided a GOG Galaxy installer! This file doesn't contain the game. Please download the offline backup game installer! Vous avez fourni un installateur GOG Galaxy ! Ce fichier ne contient pas le jeu. Veuillez télécharger l'installateur de sauvegarde hors ligne ! - + Hash error! Erreur de hachage ! - + No Heroes III data! Pas de données Heroes III! - + Selected files do not contain Heroes III data! Les fichiers sélectionnés ne contiennent pas les données de Heroes III ! - + Failed to detect valid Heroes III data in chosen directory. Please select the directory with installed Heroes III data. Impossible de détecter des données valides de Heroes III dans le répertoire choisi. Veuillez sélectionner le répertoire contenant les données installées de Heroes III. - - - - + + + + Heroes III data not found! Données Heroes III introuvables ! - + Extracting error! Erreur d'extraction ! @@ -1562,12 +1562,12 @@ Bin (%n octets): Échec de l'extraction des données du mod - + Mod data was not found Les données du mod n'ont pas été trouvées - + Mod is located in a protected directory, please remove it manually: Le mod est situé dans un répertoire protégé, veuillez le supprimer manuellement : diff --git a/launcher/translation/german.ts b/launcher/translation/german.ts index 54a8f5db6..49b29c9e4 100644 --- a/launcher/translation/german.ts +++ b/launcher/translation/german.ts @@ -1118,7 +1118,7 @@ Der Offline-Installer besteht aus zwei Dateien: „.exe“ und ‚.bin‘ - Sie %1 Datei auswählen... - + You have to select %1 file! param is file extension Sie müssen %1 Datei auswählen! @@ -1135,19 +1135,19 @@ Der Offline-Installer besteht aus zwei Dateien: „.exe“ und ‚.bin‘ - Sie - + GOG installer GOG-Installationsprogramm - + Heroes III: HD Edition files are not supported by VCMI. Please select the directory with Heroes III: Complete Edition or Heroes III: Shadow of Death. Heroes III: HD Edition Dateien werden von VCMI nicht unterstützt. Bitte wählt das Verzeichnis mit Heroes III: Complete Edition oder Heroes III: Shadow of Death. - + Unknown or unsupported Heroes III version found. Please select the directory with Heroes III: Complete Edition or Heroes III: Shadow of Death. Unbekannte oder nicht unterstützte Heroes III-Version gefunden. @@ -1155,52 +1155,52 @@ Bitte wählt das Verzeichnis mit Heroes III: Complete Edition oder Heroes III: S - + GOG data GOG-Datendatei - + Failed to open file: %1 Öffnen der Datei fehlgeschlagen: %1 - + You've provided a GOG Galaxy installer! This file doesn't contain the game. Please download the offline backup game installer! Ein GOG Galaxy-Installationsprogramm wurde bereitgestellt! Diese Datei enthält nicht das Spiel. Bitte ladet den Offline-Backup-Installer für das Spiel herunter! - + Hash error! Hash-Fehler! - + No Heroes III data! Keine Heroes III-Daten! - + Selected files do not contain Heroes III data! Die ausgewählten Dateien enthalten keine Heroes III-Daten! - + Failed to detect valid Heroes III data in chosen directory. Please select the directory with installed Heroes III data. Es konnten keine gültigen Heroes III-Daten im gewählten Verzeichnis gefunden werden. Bitte wählt das Verzeichnis mit installierten Heroes III-Daten. - - - - + + + + Heroes III data not found! Heroes III Daten nicht gefunden! - + Extracting error! Fehler beim Extrahieren! @@ -1561,12 +1561,12 @@ Bin (%n Bytes): Mod-Daten konnten nicht extrahiert werden - + Mod data was not found Mod-Daten wurden nicht gefunden - + Mod is located in a protected directory, please remove it manually: Mod befindet sich in einem geschützten Verzeichnis, bitte manuell entfernen: diff --git a/launcher/translation/greek.ts b/launcher/translation/greek.ts index 5b379cd35..6862b1a5b 100644 --- a/launcher/translation/greek.ts +++ b/launcher/translation/greek.ts @@ -1098,7 +1098,7 @@ Offline installer consists of two files: ".exe" and ".bin" - - + You have to select %1 file! param is file extension @@ -1115,69 +1115,69 @@ Offline installer consists of two files: ".exe" and ".bin" - - + GOG installer - + You've provided a GOG Galaxy installer! This file doesn't contain the game. Please download the offline backup game installer! - + Heroes III: HD Edition files are not supported by VCMI. Please select the directory with Heroes III: Complete Edition or Heroes III: Shadow of Death. - + Unknown or unsupported Heroes III version found. Please select the directory with Heroes III: Complete Edition or Heroes III: Shadow of Death. - + GOG data - + Failed to open file: %1 - + Extracting error! - + Hash error! - + No Heroes III data! - + Selected files do not contain Heroes III data! - + Failed to detect valid Heroes III data in chosen directory. Please select the directory with installed Heroes III data. - - - - + + + + Heroes III data not found! @@ -1519,12 +1519,12 @@ Bin (%n bytes): - + Mod data was not found - + Mod is located in a protected directory, please remove it manually: diff --git a/launcher/translation/hungarian.ts b/launcher/translation/hungarian.ts index 573b5e2b1..0d77ed985 100644 --- a/launcher/translation/hungarian.ts +++ b/launcher/translation/hungarian.ts @@ -1122,7 +1122,7 @@ Az offline telepítő két fájlból áll: ".exe" és ".bin" Válasszon ki egy %1 fájlt... - + You have to select %1 file! param is file extension Ki kell választania egy %1 fájlt! @@ -1139,24 +1139,24 @@ Az offline telepítő két fájlból áll: ".exe" és ".bin" - + GOG installer GOG telepítő - + You've provided a GOG Galaxy installer! This file doesn't contain the game. Please download the offline backup game installer! GOG Galaxy telepítőt adott meg! Ez a fájl nem tartalmazza a játékot. Kérjük, töltse le az offline biztonsági telepítőt! - + Heroes III: HD Edition files are not supported by VCMI. Please select the directory with Heroes III: Complete Edition or Heroes III: Shadow of Death. A Heroes III: HD Edition fájlokat a VCMI nem támogatja. Kérjük, válassza ki a Heroes III: Complete Edition vagy Heroes III: Shadow of Death verzió könyvtárát. - + Unknown or unsupported Heroes III version found. Please select the directory with Heroes III: Complete Edition or Heroes III: Shadow of Death. Ismeretlen vagy nem támogatott Heroes III verzió található. @@ -1164,47 +1164,47 @@ Kérjük, válassza ki a Heroes III: Complete Edition vagy Heroes III: Shadow of - + GOG data GOG adatok - + Failed to open file: %1 - + Extracting error! Kicsomagolási hiba! - + Hash error! Hash hiba! - + No Heroes III data! Nincs Heroes III adat! - + Selected files do not contain Heroes III data! A kiválasztott fájlok nem tartalmaznak Heroes III adatokat! - + Failed to detect valid Heroes III data in chosen directory. Please select the directory with installed Heroes III data. Nem sikerült érvényes Heroes III adatokat találni a kiválasztott könyvtárban. Kérjük, válassza ki az installált Heroes III adatokat tartalmazó könyvtárat. - - - - + + + + Heroes III data not found! Heroes III adatok nem találhatóak! @@ -1559,12 +1559,12 @@ Bin (%n bájt): Nem sikerült kibontani a mod adatokat - + Mod data was not found A mod adatai nem találhatók - + Mod is located in a protected directory, please remove it manually: A mod védett könyvtárban található, kérjük, távolítsa el manuálisan: diff --git a/launcher/translation/italian.ts b/launcher/translation/italian.ts index adbf8c614..167f7bdd4 100644 --- a/launcher/translation/italian.ts +++ b/launcher/translation/italian.ts @@ -1118,7 +1118,7 @@ L'installer offline è composto da due file: ".exe" e ".bin& Seleziona il file %1... - + You have to select %1 file! param is file extension Devi selezionare il file %1! @@ -1135,24 +1135,24 @@ L'installer offline è composto da due file: ".exe" e ".bin& - + GOG installer Installer GOG - + You've provided a GOG Galaxy installer! This file doesn't contain the game. Please download the offline backup game installer! Hai fornito un installer di GOG Galaxy! Questo file non contiene il gioco. Scarica l'installer di backup offline del gioco! - + Heroes III: HD Edition files are not supported by VCMI. Please select the directory with Heroes III: Complete Edition or Heroes III: Shadow of Death. I file di Heroes III: HD Edition non sono supportati da VCMI. Seleziona la directory con Heroes III: Complete Edition o Heroes III: Shadow of Death. - + Unknown or unsupported Heroes III version found. Please select the directory with Heroes III: Complete Edition or Heroes III: Shadow of Death. Trovata una versione sconosciuta o non supportata di Heroes III. @@ -1160,47 +1160,47 @@ Seleziona la directory con Heroes III: Complete Edition o Heroes III: Shadow of - + GOG data Dati GOG - + Failed to open file: %1 - + Extracting error! Errore durante l'estrazione! - + Hash error! Errore di hash! - + No Heroes III data! Nessun dato di Heroes III! - + Selected files do not contain Heroes III data! I file selezionati non contengono dati di Heroes III! - + Failed to detect valid Heroes III data in chosen directory. Please select the directory with installed Heroes III data. Impossibile rilevare dati validi di Heroes III nella directory scelta. Seleziona la directory con i dati installati di Heroes III. - - - - + + + + Heroes III data not found! Dati di Heroes III non trovati! @@ -1561,12 +1561,12 @@ Bin (%n byte): Impossibile estrarre i dati del mod - + Mod data was not found Dati del mod non trovati - + Mod is located in a protected directory, please remove it manually: Il mod si trova in una directory protetta, rimuovilo manualmente: diff --git a/launcher/translation/japanese.ts b/launcher/translation/japanese.ts index f3094992f..8e1c690de 100644 --- a/launcher/translation/japanese.ts +++ b/launcher/translation/japanese.ts @@ -1098,7 +1098,7 @@ Offline installer consists of two files: ".exe" and ".bin" - - + You have to select %1 file! param is file extension @@ -1115,69 +1115,69 @@ Offline installer consists of two files: ".exe" and ".bin" - - + GOG installer - + You've provided a GOG Galaxy installer! This file doesn't contain the game. Please download the offline backup game installer! - + Heroes III: HD Edition files are not supported by VCMI. Please select the directory with Heroes III: Complete Edition or Heroes III: Shadow of Death. - + Unknown or unsupported Heroes III version found. Please select the directory with Heroes III: Complete Edition or Heroes III: Shadow of Death. - + GOG data - + Failed to open file: %1 - + Extracting error! - + Hash error! - + No Heroes III data! - + Selected files do not contain Heroes III data! - + Failed to detect valid Heroes III data in chosen directory. Please select the directory with installed Heroes III data. - - - - + + + + Heroes III data not found! @@ -1517,12 +1517,12 @@ Bin (%n bytes): - + Mod data was not found - + Mod is located in a protected directory, please remove it manually: diff --git a/launcher/translation/korean.ts b/launcher/translation/korean.ts index 135a2d7de..0791ece63 100644 --- a/launcher/translation/korean.ts +++ b/launcher/translation/korean.ts @@ -1098,7 +1098,7 @@ Offline installer consists of two files: ".exe" and ".bin" - - + You have to select %1 file! param is file extension @@ -1115,69 +1115,69 @@ Offline installer consists of two files: ".exe" and ".bin" - - + GOG installer - + You've provided a GOG Galaxy installer! This file doesn't contain the game. Please download the offline backup game installer! - + Heroes III: HD Edition files are not supported by VCMI. Please select the directory with Heroes III: Complete Edition or Heroes III: Shadow of Death. - + Unknown or unsupported Heroes III version found. Please select the directory with Heroes III: Complete Edition or Heroes III: Shadow of Death. - + GOG data - + Failed to open file: %1 - + Extracting error! - + Hash error! - + No Heroes III data! - + Selected files do not contain Heroes III data! - + Failed to detect valid Heroes III data in chosen directory. Please select the directory with installed Heroes III data. - - - - + + + + Heroes III data not found! @@ -1517,12 +1517,12 @@ Bin (%n bytes): - + Mod data was not found - + Mod is located in a protected directory, please remove it manually: diff --git a/launcher/translation/norwegian.ts b/launcher/translation/norwegian.ts index 4758a6f60..c2d952b20 100644 --- a/launcher/translation/norwegian.ts +++ b/launcher/translation/norwegian.ts @@ -1098,7 +1098,7 @@ Offline installer consists of two files: ".exe" and ".bin" - - + You have to select %1 file! param is file extension @@ -1115,69 +1115,69 @@ Offline installer consists of two files: ".exe" and ".bin" - - + GOG installer - + You've provided a GOG Galaxy installer! This file doesn't contain the game. Please download the offline backup game installer! - + Heroes III: HD Edition files are not supported by VCMI. Please select the directory with Heroes III: Complete Edition or Heroes III: Shadow of Death. - + Unknown or unsupported Heroes III version found. Please select the directory with Heroes III: Complete Edition or Heroes III: Shadow of Death. - + GOG data - + Failed to open file: %1 - + Extracting error! - + Hash error! - + No Heroes III data! - + Selected files do not contain Heroes III data! - + Failed to detect valid Heroes III data in chosen directory. Please select the directory with installed Heroes III data. - - - - + + + + Heroes III data not found! @@ -1519,12 +1519,12 @@ Bin (%n bytes): - + Mod data was not found - + Mod is located in a protected directory, please remove it manually: diff --git a/launcher/translation/polish.ts b/launcher/translation/polish.ts index be2d858cd..711d318b6 100644 --- a/launcher/translation/polish.ts +++ b/launcher/translation/polish.ts @@ -1119,7 +1119,7 @@ Instalator offline składa się z dwóch plików: ".exe" i ".bin& Wybierz plik %1... - + You have to select %1 file! param is file extension Musisz wybrać plik %1! @@ -1136,19 +1136,19 @@ Instalator offline składa się z dwóch plików: ".exe" i ".bin& - + GOG installer Instalator GOG - + Heroes III: HD Edition files are not supported by VCMI. Please select the directory with Heroes III: Complete Edition or Heroes III: Shadow of Death. Pliki Heroes III: HD Edition nie są obsługiwane przez VCMI. Wybierz katalog z Heroes III: Complete Edition lub Heroes III: Shadow of Death. - + Unknown or unsupported Heroes III version found. Please select the directory with Heroes III: Complete Edition or Heroes III: Shadow of Death. Nieznana lub nieobsługiwana wersja Heroes III została wykryta. @@ -1156,52 +1156,52 @@ Wybierz katalog z Heroes III: Complete Edition lub Heroes III: Shadow of Death.< - + GOG data Dane GOG - + Failed to open file: %1 - + You've provided a GOG Galaxy installer! This file doesn't contain the game. Please download the offline backup game installer! Podany plik jest instalatorem GOG Galaxy! Ten plik nie zawiera gry. Proszę pobrać zapasowy instalator offline gry! - + Hash error! Błąd sumy kontrolnej! - + No Heroes III data! Brak danych Heroes III! - + Selected files do not contain Heroes III data! Wybrane pliki nie zawierają danych Heroes III! - + Failed to detect valid Heroes III data in chosen directory. Please select the directory with installed Heroes III data. Nieudane znalezienie poprawnych plików Heroes III w podanej lokalizacji. Proszę wybrać folder z zainstalowanymi danymi Heroes III. - - - - + + + + Heroes III data not found! Nie odnaleziono danych Heroes III! - + Extracting error! Błąd wypakowywania! @@ -1565,12 +1565,12 @@ Bin (%n bytes): Nieudane wyodrębnienie danych moda - + Mod data was not found Nie znaleziono danych moda - + Mod is located in a protected directory, please remove it manually: Mod jest umiejscowiony w chronionym folderze, proszę go usunąć ręcznie: diff --git a/launcher/translation/portuguese.ts b/launcher/translation/portuguese.ts index aaf45d935..3d17636c8 100644 --- a/launcher/translation/portuguese.ts +++ b/launcher/translation/portuguese.ts @@ -1118,7 +1118,7 @@ O instalador offline consiste em dois arquivos: ".exe" e ".bin&qu Selecionar arquivo %1... - + You have to select %1 file! param is file extension Você precisa selecionar o arquivo %1! @@ -1135,24 +1135,24 @@ O instalador offline consiste em dois arquivos: ".exe" e ".bin&qu - + GOG installer Instalador GOG - + You've provided a GOG Galaxy installer! This file doesn't contain the game. Please download the offline backup game installer! Você forneceu um instalador do GOG Galaxy! Este arquivo não contém o jogo. Por favor, baixe o instalador offline de backup do jogo! - + Heroes III: HD Edition files are not supported by VCMI. Please select the directory with Heroes III: Complete Edition or Heroes III: Shadow of Death. Os arquivos do Heroes III: HD Edition não são suportados pelo VCMI. Por favor, selecione o diretório com Heroes III: Complete Edition ou Heroes III: Sombra da Morte. - + Unknown or unsupported Heroes III version found. Please select the directory with Heroes III: Complete Edition or Heroes III: Shadow of Death. Versão desconhecida ou não suportada do Heroes III encontrada. @@ -1160,47 +1160,47 @@ Por favor, selecione o diretório com Heroes III: Complete Edition ou Heroes III - + GOG data Dados do GOG - + Failed to open file: %1 Falha ao abrir o arquivo: %1 - + Extracting error! Erro ao extrair! - + Hash error! Erro de hash! - + No Heroes III data! Nenhum dado do Heroes III! - + Selected files do not contain Heroes III data! Os arquivos selecionados não contêm dados do Heroes III! - + Failed to detect valid Heroes III data in chosen directory. Please select the directory with installed Heroes III data. Falha ao detectar dados válidos do Heroes III no diretório escolhido. Por favor, selecione o diretório com os dados do Heroes III instalados. - - - - + + + + Heroes III data not found! Dados do Heroes III não encontrados! @@ -1561,12 +1561,12 @@ Bin (%n bytes): Falha ao extrair os dados do mod - + Mod data was not found Os dados do mod não foram encontrados - + Mod is located in a protected directory, please remove it manually: O mod está localizado em um diretório protegido. Remova-o manualmente: diff --git a/launcher/translation/romanian.ts b/launcher/translation/romanian.ts index 071d3dd8c..df13811cd 100644 --- a/launcher/translation/romanian.ts +++ b/launcher/translation/romanian.ts @@ -1098,7 +1098,7 @@ Offline installer consists of two files: ".exe" and ".bin" - - + You have to select %1 file! param is file extension @@ -1115,69 +1115,69 @@ Offline installer consists of two files: ".exe" and ".bin" - - + GOG installer - + You've provided a GOG Galaxy installer! This file doesn't contain the game. Please download the offline backup game installer! - + Heroes III: HD Edition files are not supported by VCMI. Please select the directory with Heroes III: Complete Edition or Heroes III: Shadow of Death. - + Unknown or unsupported Heroes III version found. Please select the directory with Heroes III: Complete Edition or Heroes III: Shadow of Death. - + GOG data - + Failed to open file: %1 - + Extracting error! - + Hash error! - + No Heroes III data! - + Selected files do not contain Heroes III data! - + Failed to detect valid Heroes III data in chosen directory. Please select the directory with installed Heroes III data. - - - - + + + + Heroes III data not found! @@ -1521,12 +1521,12 @@ Bin (%n bytes): - + Mod data was not found - + Mod is located in a protected directory, please remove it manually: diff --git a/launcher/translation/russian.ts b/launcher/translation/russian.ts index 5d0981dda..3a3253f76 100644 --- a/launcher/translation/russian.ts +++ b/launcher/translation/russian.ts @@ -1118,7 +1118,7 @@ Offline installer consists of two files: ".exe" and ".bin" - Выберите файл %1... - + You have to select %1 file! param is file extension Вы должны выбрать файл %1! @@ -1135,24 +1135,24 @@ Offline installer consists of two files: ".exe" and ".bin" - - + GOG installer Установщик GOG - + You've provided a GOG Galaxy installer! This file doesn't contain the game. Please download the offline backup game installer! Вы указали установщик GOG Galaxy! Этот файл не содержит игру. Пожалуйста, скачайте оффлайн установочный файл игры! - + Heroes III: HD Edition files are not supported by VCMI. Please select the directory with Heroes III: Complete Edition or Heroes III: Shadow of Death. Файлы Heroes III: HD Edition не поддерживаются VCMI. Пожалуйста, выберите каталог с Heroes III: Complete Edition или Heroes III: Shadow of Death. - + Unknown or unsupported Heroes III version found. Please select the directory with Heroes III: Complete Edition or Heroes III: Shadow of Death. Обнаружена неизвестная или неподдерживаемая версия Heroes III. @@ -1160,47 +1160,47 @@ Please select the directory with Heroes III: Complete Edition or Heroes III: Sha - + GOG data Данные GOG - + Failed to open file: %1 - + Extracting error! Ошибка распаковки! - + Hash error! Ошибка хэша! - + No Heroes III data! Нет данных Heroes III! - + Selected files do not contain Heroes III data! Выбранные файлы не содержат данных Heroes III! - + Failed to detect valid Heroes III data in chosen directory. Please select the directory with installed Heroes III data. Не удалось обнаружить корректные данные Heroes III в выбранном каталоге. Пожалуйста, выберите каталог с установленными данными Heroes III. - - - - + + + + Heroes III data not found! Данные Heroes III не найдены! @@ -1559,12 +1559,12 @@ Bin (%n байт): Не удалось распаковать данные мода - + Mod data was not found Данные мода не найдены - + Mod is located in a protected directory, please remove it manually: Мод находится в защищённом каталоге, пожалуйста, удалите его вручную: diff --git a/launcher/translation/spanish.ts b/launcher/translation/spanish.ts index f192cbf78..d76fc1ea4 100644 --- a/launcher/translation/spanish.ts +++ b/launcher/translation/spanish.ts @@ -1122,7 +1122,7 @@ El instalador offline consta de dos archivos: ".exe" y ".bin" Seleccionar archivo %1... - + You have to select %1 file! param is file extension ¡Debes seleccionar el archivo %1! @@ -1139,24 +1139,24 @@ El instalador offline consta de dos archivos: ".exe" y ".bin" - + GOG installer Instalador de GOG - + You've provided a GOG Galaxy installer! This file doesn't contain the game. Please download the offline backup game installer! ¡Has proporcionado un instalador de GOG Galaxy! Este archivo no contiene el juego. ¡Por favor, descarga el instalador de respaldo del juego offline! - + Heroes III: HD Edition files are not supported by VCMI. Please select the directory with Heroes III: Complete Edition or Heroes III: Shadow of Death. Los archivos de Heroes III: HD Edition no son compatibles con VCMI. Por favor, selecciona el directorio con Heroes III: Complete Edition o Heroes III: Shadow of Death. - + Unknown or unsupported Heroes III version found. Please select the directory with Heroes III: Complete Edition or Heroes III: Shadow of Death. Se ha encontrado una versión desconocida o no compatible de Heroes III. @@ -1164,47 +1164,47 @@ Por favor, selecciona el directorio con Heroes III: Complete Edition o Heroes II - + GOG data Datos de GOG - + Failed to open file: %1 - + Extracting error! Error al extraer - + Hash error! Error de hash - + No Heroes III data! ¡No hay datos de Heroes III! - + Selected files do not contain Heroes III data! Los archivos seleccionados no contienen datos de Heroes III. - + Failed to detect valid Heroes III data in chosen directory. Please select the directory with installed Heroes III data. No se han detectado datos válidos de Heroes III en el directorio elegido. Por favor, selecciona el directorio con los datos de Heroes III instalados. - - - - + + + + Heroes III data not found! ¡Datos de Heroes III no encontrados! @@ -1565,12 +1565,12 @@ Bin (%n bytes): Error al extraer los datos del mod - + Mod data was not found No se encontraron datos del mod - + Mod is located in a protected directory, please remove it manually: El mod está ubicado en un directorio protegido, por favor elimínalo manualmente: diff --git a/launcher/translation/swedish.ts b/launcher/translation/swedish.ts index 159cbefc8..1199bbf9b 100644 --- a/launcher/translation/swedish.ts +++ b/launcher/translation/swedish.ts @@ -1118,7 +1118,7 @@ När dessa två filer finns på din enhet kan VCMI börja importera nödvändiga Välj %1-filen... - + You have to select %1 file! param is file extension Du behöver välja %1-filen! @@ -1135,24 +1135,24 @@ När dessa två filer finns på din enhet kan VCMI börja importera nödvändiga - + GOG installer Offline Backup Game Installers (gog.com) - + You've provided a GOG Galaxy installer! This file doesn't contain the game. Please download the offline backup game installer! Du har tillhandahållit en installationsfil av GOG Galaxy! Den här filen innehåller inte spelet. Vänligen ladda ner säkerhetskopian av spelet (offline backup game installers)! - + Heroes III: HD Edition files are not supported by VCMI. Please select the directory with Heroes III: Complete Edition or Heroes III: Shadow of Death. Heroes III: HD Edition-filer stöds inte av VCMI. Vänligen välj mappen med Heroes III: Complete Edition eller Heroes III: Shadow of Death. - + Unknown or unsupported Heroes III version found. Please select the directory with Heroes III: Complete Edition or Heroes III: Shadow of Death. Okänd eller ej stödd Heroes III-version hittades. @@ -1160,47 +1160,47 @@ Vänligen välj mappen med Heroes III: Complete Edition eller Heroes III: Shadow - + GOG data GOG-data - + Failed to open file: %1 Kunde inte öppna filen: %1 - + Extracting error! Extraheringsfel! - + Hash error! Hashfel! - + No Heroes III data! Inga Heroes III-data! - + Selected files do not contain Heroes III data! De valda filerna innehåller inte Heroes III-data! - + Failed to detect valid Heroes III data in chosen directory. Please select the directory with installed Heroes III data. Lyckades inte upptäcka giltiga Heroes III-data i vald mapp. Vänligen välj mappen där du installerade Heroes III. - - - - + + + + Heroes III data not found! Heroes III-data hittades inte! @@ -1561,12 +1561,12 @@ Bin (%n byte): Misslyckades att extrahera modd-data - + Mod data was not found Moddata hittades inte - + Mod is located in a protected directory, please remove it manually: Modden finns i en skyddad mapp. Vänligen ta bort den manuellt: diff --git a/launcher/translation/turkish.ts b/launcher/translation/turkish.ts index 13d38d94c..195e68fa0 100644 --- a/launcher/translation/turkish.ts +++ b/launcher/translation/turkish.ts @@ -1098,7 +1098,7 @@ Offline installer consists of two files: ".exe" and ".bin" - - + You have to select %1 file! param is file extension @@ -1115,69 +1115,69 @@ Offline installer consists of two files: ".exe" and ".bin" - - + GOG installer - + You've provided a GOG Galaxy installer! This file doesn't contain the game. Please download the offline backup game installer! - + Heroes III: HD Edition files are not supported by VCMI. Please select the directory with Heroes III: Complete Edition or Heroes III: Shadow of Death. - + Unknown or unsupported Heroes III version found. Please select the directory with Heroes III: Complete Edition or Heroes III: Shadow of Death. - + GOG data - + Failed to open file: %1 - + Extracting error! - + Hash error! - + No Heroes III data! - + Selected files do not contain Heroes III data! - + Failed to detect valid Heroes III data in chosen directory. Please select the directory with installed Heroes III data. - - - - + + + + Heroes III data not found! @@ -1517,12 +1517,12 @@ Bin (%n bytes): - + Mod data was not found - + Mod is located in a protected directory, please remove it manually: diff --git a/launcher/translation/ukrainian.ts b/launcher/translation/ukrainian.ts index d86567f31..cd4101c6f 100644 --- a/launcher/translation/ukrainian.ts +++ b/launcher/translation/ukrainian.ts @@ -1118,7 +1118,7 @@ Offline installer consists of two files: ".exe" and ".bin" - Оберіть файл %1... - + You have to select %1 file! param is file extension Ви повинні обрати файл %1! @@ -1135,19 +1135,19 @@ Offline installer consists of two files: ".exe" and ".bin" - - + GOG installer Інсталятор GOG - + Heroes III: HD Edition files are not supported by VCMI. Please select the directory with Heroes III: Complete Edition or Heroes III: Shadow of Death. Файли Heroes III: HD Edition не підтримуються VCMI. Будь ласка, виберіть теку з Heroes III: Complete Edition або Heroes III: Shadow of Death. - + Unknown or unsupported Heroes III version found. Please select the directory with Heroes III: Complete Edition or Heroes III: Shadow of Death. Знайдено невідому або не підтримувану версію Heroes III. @@ -1155,52 +1155,52 @@ Please select the directory with Heroes III: Complete Edition or Heroes III: Sha - + GOG data Дані GOG - + Failed to open file: %1 - + You've provided a GOG Galaxy installer! This file doesn't contain the game. Please download the offline backup game installer! Ви надали інсталятор GOG Galaxy! Цей файл не містить гри. Будь ласка, завантажте резервну копію інсталятора гри! - + Hash error! Помилка хешу! - + No Heroes III data! Немає файлів даних Heroes III! - + Selected files do not contain Heroes III data! Обрані файли не містять файлів з грою Heroes III! - + Failed to detect valid Heroes III data in chosen directory. Please select the directory with installed Heroes III data. Не вдалося виявити файли Heroes III у вибраному каталозі. Будь ласка, виберіть теку зі встановленими даними Heroes III. - - - - + + + + Heroes III data not found! Файли даних Heroes III не знайдено! - + Extracting error! Помилка видобування! @@ -1567,12 +1567,12 @@ Bin (%n байтів): Не вдалося видобути дані модифікації - + Mod data was not found Не знайдено файли даних модифікації - + Mod is located in a protected directory, please remove it manually: Модифікація знаходиться в захищеному каталозі, будь ласка, видаліть її вручну: diff --git a/launcher/translation/vietnamese.ts b/launcher/translation/vietnamese.ts index 4412ef0af..30ca8bbe1 100644 --- a/launcher/translation/vietnamese.ts +++ b/launcher/translation/vietnamese.ts @@ -1142,7 +1142,7 @@ Cài đặt ngoại tuyến bao gồm hai tệp tin sau: ".exe" và &q Chọn tệp tin %1... - + You have to select %1 file! param is file extension Bạn phải chọn tệp tin %1! @@ -1159,24 +1159,24 @@ Cài đặt ngoại tuyến bao gồm hai tệp tin sau: ".exe" và &q - + GOG installer Trình cài đặt GOG - + You've provided a GOG Galaxy installer! This file doesn't contain the game. Please download the offline backup game installer! Bạn đã cung cấp bộ cài đặt GOG Galaxy! Tệp tin này không chứa dữ liệu trò chơi. Hãy tải về bộ cài đặt trò chơi Heroes III. - + Heroes III: HD Edition files are not supported by VCMI. Please select the directory with Heroes III: Complete Edition or Heroes III: Shadow of Death. VCMI không hỗ trợ các tập tin Heroes III: HD Edition. Hãy chọn thư mục có Heroes III: Complete Edition hoặc Heroes III: Shadow of Death. - + Unknown or unsupported Heroes III version found. Please select the directory with Heroes III: Complete Edition or Heroes III: Shadow of Death. Phiên bản Heroes III không đúng hoặc không được hỗ trợ. @@ -1184,47 +1184,47 @@ Hãy chọn thư mục có Heroes III: Complete Edition hoặc Heroes III: Shado - + GOG data Dữ liệu GOG - + Failed to open file: %1 - + Extracting error! Có lỗi khi giải nén - + Hash error! Lỗi hàm Hash! - + No Heroes III data! Không có dữ liệu Heroes III! - + Selected files do not contain Heroes III data! Các tệp tin đã chọn không chứa dữ liệu Heroes III! - + Failed to detect valid Heroes III data in chosen directory. Please select the directory with installed Heroes III data. Không tìm thấy dữ liệu Heroes III trong thư mục đã chọn. Hãy chọn đúng thư mục chứa dữ liệu Heroes III đã cài đặt. - - - - + + + + Heroes III data not found! Không tìm thấy dữ liệu Heroes III! @@ -1578,12 +1578,12 @@ Bin (%n bytes): Không trích xuất được dữ liệu mod - + Mod data was not found Không tìm thấy dữ liệu mod - + Mod is located in a protected directory, please remove it manually: Mod nằm trong thư mục được bảo vệ, hãy xóa thủ công: diff --git a/mapeditor/translation/belarusian.ts b/mapeditor/translation/belarusian.ts index d889328a5..fcd06d7a6 100644 --- a/mapeditor/translation/belarusian.ts +++ b/mapeditor/translation/belarusian.ts @@ -54,7 +54,7 @@ CampaignEditor - + VCMI Campaign Editor AI-generated, needs review by native speaker; delete this comment afterwards Рэдактар кампаній VCMI @@ -135,43 +135,43 @@ Паказаць поўнае тло - + Scenario editor AI-generated, needs review by native speaker; delete this comment afterwards Рэдактар сцэнара - + Confirmation AI-generated, needs review by native speaker; delete this comment afterwards Пацверджанне - + Unsaved changes will be lost, are you sure? AI-generated, needs review by native speaker; delete this comment afterwards Незахаваныя змены будуць страчаныя. Вы ўпэўнены? - + Open map AI-generated, needs review by native speaker; delete this comment afterwards Адкрыць мапу - + All supported campaigns (*.vcmp *.h3c);;VCMI campaigns(*.vcmp);;HoMM3 campaigns(*.h3c) AI-generated, needs review by native speaker; delete this comment afterwards Усе падтрымліваючыя кампаніі (*.vcmp *.h3c);;Кампаніі VCMI(*.vcmp);;Кампаніі HoMM3(*.h3c) - + Save campaign AI-generated, needs review by native speaker; delete this comment afterwards Захаваць кампанію - + VCMI campaigns (*.vcmp) AI-generated, needs review by native speaker; delete this comment afterwards Кампаніі VCMI (*.vcmp) @@ -181,7 +181,7 @@ CampaignProperties - + Campaign Properties AI-generated, needs review by native speaker; delete this comment afterwards Уласцівасці кампаніі @@ -320,49 +320,49 @@ Фінальнае відэа - + Custom AI-generated, needs review by native speaker; delete this comment afterwards Карыстальніцкае - + Infix AI-generated, needs review by native speaker; delete this comment afterwards Інфікс - + X AI-generated, needs review by native speaker; delete this comment afterwards X - + Y AI-generated, needs review by native speaker; delete this comment afterwards Y - + Label Pos X AI-generated, needs review by native speaker; delete this comment afterwards Пазіцыя надпісу X - + Label Pos Y AI-generated, needs review by native speaker; delete this comment afterwards Пазіцыя надпісу Y - + Fewer Scenarios AI-generated, needs review by native speaker; delete this comment afterwards Менш сцэнараў - + New Region setup supports fewer scenarios than before. Some will removed. Continue? AI-generated, needs review by native speaker; delete this comment afterwards Новае наладжванне рэгіёнаў падтрымлівае менш сцэнараў, чым раней. Некаторыя будуць выдалены. Працягнуць? @@ -401,6 +401,20 @@ Новая падзея + + FactionSelector + + + + Select Factions + + + + + Faction Selector + + + GeneralSettings @@ -499,6 +513,16 @@ AI-generated, needs review by native speaker; delete this comment afterwards Артыфакт + + + Save + Захаваць + + + + Cancel + Скасаваць + HeroSkillsWidget @@ -654,7 +678,7 @@ MainWindow - + VCMI Map Editor Рэдактар ​​карт VCMI @@ -666,864 +690,870 @@ - + Open Recent AI-generated, needs review by native speaker; delete this comment afterwards Адкрыць нядаўна - + Map AI-generated, needs review by native speaker; delete this comment afterwards Мапа - + Edit AI-generated, needs review by native speaker; delete this comment afterwards Рэдагаваць - + View AI-generated, needs review by native speaker; delete this comment afterwards Выгляд - + Player AI-generated, needs review by native speaker; delete this comment afterwards Гулец - + Toolbar AI-generated, needs review by native speaker; delete this comment afterwards Панэль інструментаў - + Minimap AI-generated, needs review by native speaker; delete this comment afterwards Мінімапа - + Map Objects View AI-generated, needs review by native speaker; delete this comment afterwards Прагляд аб’ектаў мапы - + Browser AI-generated, needs review by native speaker; delete this comment afterwards Аглядальнік - + Inspector AI-generated, needs review by native speaker; delete this comment afterwards Інспектар - + Property AI-generated, needs review by native speaker; delete this comment afterwards Уласцівасць - + Value AI-generated, needs review by native speaker; delete this comment afterwards Значэнне - + Tools AI-generated, needs review by native speaker; delete this comment afterwards Інструменты - + Painting AI-generated, needs review by native speaker; delete this comment afterwards Маляванне - + Terrains AI-generated, needs review by native speaker; delete this comment afterwards Тэрэны - + Roads AI-generated, needs review by native speaker; delete this comment afterwards Дарыгі - + Rivers AI-generated, needs review by native speaker; delete this comment afterwards Рэкі - + Preview AI-generated, needs review by native speaker; delete this comment afterwards Папярэдні прагляд - + Open AI-generated, needs review by native speaker; delete this comment afterwards Адкрыць - + Ctrl+O AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+O - + More... AI-generated, needs review by native speaker; delete this comment afterwards Больш... - + Save AI-generated, needs review by native speaker; delete this comment afterwards Захаваць - + Ctrl+S AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+S - + New AI-generated, needs review by native speaker; delete this comment afterwards Новы - + Ctrl+N AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+N - + Save as... AI-generated, needs review by native speaker; delete this comment afterwards Захаваць як... - + Ctrl+Shift+S AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+S - - + + Campaign editor AI-generated, needs review by native speaker; delete this comment afterwards Рэдактар кампаній - - - - + + + Template editor + + + + + + + View underground AI-generated, needs review by native speaker; delete this comment afterwards Паказаць падземны ўзровень - + Ctrl+U AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+U - + Pass AI-generated, needs review by native speaker; delete this comment afterwards Перадача ходу - + Ctrl+Shift+P AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+P - + Cut AI-generated, needs review by native speaker; delete this comment afterwards Выразаць - + Ctrl+X AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+X - + Copy AI-generated, needs review by native speaker; delete this comment afterwards Скапіяваць - + Ctrl+C AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+C - + Paste AI-generated, needs review by native speaker; delete this comment afterwards Уставіць - + Ctrl+V AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+V - + Fill AI-generated, needs review by native speaker; delete this comment afterwards Запоўніць - + Fills the selection with obstacles AI-generated, needs review by native speaker; delete this comment afterwards Запаўняе вобласць перашкодамі - + Grid AI-generated, needs review by native speaker; delete this comment afterwards Сетка - + Ctrl+G AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+G - + General AI-generated, needs review by native speaker; delete this comment afterwards Агульнае - + Map title and description AI-generated, needs review by native speaker; delete this comment afterwards Назва і апісанне мапы - + Ctrl+Enter AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Enter - + Players settings AI-generated, needs review by native speaker; delete this comment afterwards Налады гульцоў - + Ctrl+P AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+P - - + + Undo AI-generated, needs review by native speaker; delete this comment afterwards Адмяніць - + Ctrl+Z AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Z - + Redo AI-generated, needs review by native speaker; delete this comment afterwards Паўтарыць - + Ctrl+Y AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Y - + Erase AI-generated, needs review by native speaker; delete this comment afterwards Сцерці - + Del AI-generated, needs review by native speaker; delete this comment afterwards Del - + Neutral AI-generated, needs review by native speaker; delete this comment afterwards Нейтральны - + Ctrl+0 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+0 - + Validate AI-generated, needs review by native speaker; delete this comment afterwards Праверыць - + Ctrl+Shift+V AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+V - - - - + + + + Update appearance AI-generated, needs review by native speaker; delete this comment afterwards Абнавіць знешні выгляд - + Recreate obstacles AI-generated, needs review by native speaker; delete this comment afterwards Перастварыць перашкоды - + Player 1 AI-generated, needs review by native speaker; delete this comment afterwards Гулец 1 - + Ctrl+1 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+1 - + Player 2 AI-generated, needs review by native speaker; delete this comment afterwards Гулец 2 - + Ctrl+2 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+2 - + Player 3 AI-generated, needs review by native speaker; delete this comment afterwards Гулец 3 - + Ctrl+3 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+3 - + Player 4 AI-generated, needs review by native speaker; delete this comment afterwards Гулец 4 - + Ctrl+4 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+4 - + Player 5 AI-generated, needs review by native speaker; delete this comment afterwards Гулец 5 - + Ctrl+5 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+5 - + Player 6 AI-generated, needs review by native speaker; delete this comment afterwards Гулец 6 - + Ctrl+6 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+6 - + Player 7 AI-generated, needs review by native speaker; delete this comment afterwards Гулец 7 - + Ctrl+7 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+7 - + Player 8 AI-generated, needs review by native speaker; delete this comment afterwards Гулец 8 - + Ctrl+8 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+8 - + Export as... AI-generated, needs review by native speaker; delete this comment afterwards Экспартаваць як... - + Ctrl+E AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+E - + Translations AI-generated, needs review by native speaker; delete this comment afterwards Пераклады - + Ctrl+T AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+T - - + + h3m converter AI-generated, needs review by native speaker; delete this comment afterwards Канвэртар h3m - + Ctrl+Shift+M AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+M - - + + h3c converter AI-generated, needs review by native speaker; delete this comment afterwards Канвэртар h3c - + Ctrl+Shift+C AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+C - + Lock AI-generated, needs review by native speaker; delete this comment afterwards Заблакаваць - + Lock objects on map to avoid unnecessary changes AI-generated, needs review by native speaker; delete this comment afterwards Заблакаваць аб’екты на мапе, каб пазбегнуць выпадковых зменаў - + Ctrl+L AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+L - + Unlock AI-generated, needs review by native speaker; delete this comment afterwards Разблакаваць - + Unlock all objects on the map AI-generated, needs review by native speaker; delete this comment afterwards Разблакаваць усе аб’екты на мапе - + Ctrl+Shift+L AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+L - + Zoom in AI-generated, needs review by native speaker; delete this comment afterwards Павялічыць маштаб - + Ctrl++ AI-generated, needs review by native speaker; delete this comment afterwards Ctrl++ - + Zoom out AI-generated, needs review by native speaker; delete this comment afterwards Паменшыць маштаб - + Ctrl+- AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+- - + Zoom reset AI-generated, needs review by native speaker; delete this comment afterwards Скінуць маштаб - + Ctrl+Shift+= AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+= - + Confirmation AI-generated, needs review by native speaker; delete this comment afterwards Пацверджанне - + Unsaved changes will be lost, are you sure? AI-generated, needs review by native speaker; delete this comment afterwards Незахаваныя змены будуць страчаныя, вы ўпэўнены? - + Mods are required AI-generated, needs review by native speaker; delete this comment afterwards Патрабуюцца моды - + Failed to open map AI-generated, needs review by native speaker; delete this comment afterwards Не атрымалася адкрыць мапу - + Open map AI-generated, needs review by native speaker; delete this comment afterwards Адкрыць мапу - + All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) AI-generated, needs review by native speaker; delete this comment afterwards Усе падтрымліваемыя мапы (*.vmap *.h3m);;Мапы VCMI(*.vmap);;Мапы HoMM3(*.h3m) - + Recently Opened Files AI-generated, needs review by native speaker; delete this comment afterwards Нядаўна адкрытыя файлы - + Map validation AI-generated, needs review by native speaker; delete this comment afterwards Праверка мапы - + Map has critical problems and most probably will not be playable. Open Validator from the Map menu to see issues found AI-generated, needs review by native speaker; delete this comment afterwards Мапа мае крытычныя памылкі і, хутчэй за ўсё, не будзе прайграна. Адкрыйце Валідатар у меню Мапа, каб убачыць знойдзеныя праблемы - + Map has some errors. Open Validator from the Map menu to see issues found AI-generated, needs review by native speaker; delete this comment afterwards Мапа мае памылкі. Адкрыйце Валідатар у меню Мапа, каб убачыць знойдзеныя праблемы - + Failed to save map AI-generated, needs review by native speaker; delete this comment afterwards Не атрымалася захаваць мапу - + Save map AI-generated, needs review by native speaker; delete this comment afterwards Захаваць мапу - + VCMI maps (*.vmap) AI-generated, needs review by native speaker; delete this comment afterwards Мапы VCMI (*.vmap) - + Type AI-generated, needs review by native speaker; delete this comment afterwards Тып - + Towns AI-generated, needs review by native speaker; delete this comment afterwards Гарады - + Objects AI-generated, needs review by native speaker; delete this comment afterwards Аб’екты - + Heroes AI-generated, needs review by native speaker; delete this comment afterwards Героі - + Artifacts AI-generated, needs review by native speaker; delete this comment afterwards Артыфакты - + Resources AI-generated, needs review by native speaker; delete this comment afterwards Рэсурсы - + Banks AI-generated, needs review by native speaker; delete this comment afterwards Банкі - + Dwellings AI-generated, needs review by native speaker; delete this comment afterwards Жыллё - + Grounds AI-generated, needs review by native speaker; delete this comment afterwards Паверхня - + Teleports AI-generated, needs review by native speaker; delete this comment afterwards Тэлепорты - + Mines AI-generated, needs review by native speaker; delete this comment afterwards Руднікі - + Triggers AI-generated, needs review by native speaker; delete this comment afterwards Трыгеры - + Monsters AI-generated, needs review by native speaker; delete this comment afterwards Монстры - + Quests AI-generated, needs review by native speaker; delete this comment afterwards Заданні - + Wog Objects AI-generated, needs review by native speaker; delete this comment afterwards Аб’екты WoG - + Obstacles AI-generated, needs review by native speaker; delete this comment afterwards Перашкоды - + Other AI-generated, needs review by native speaker; delete this comment afterwards Іншае - + Mods loading problem AI-generated, needs review by native speaker; delete this comment afterwards Праблема з загрузкай модаў - + Critical error during Mods loading. Disable invalid mods and restart. AI-generated, needs review by native speaker; delete this comment afterwards Крытычная памылка падчас загрузкі модаў. Адключыце памылковыя моды і перазапусціце. - - + + View surface AI-generated, needs review by native speaker; delete this comment afterwards Паказаць паверхню - + No objects selected AI-generated, needs review by native speaker; delete this comment afterwards Аб’екты не абраныя - + This operation is irreversible. Do you want to continue? AI-generated, needs review by native speaker; delete this comment afterwards Гэта дзеянне незваротнае. Хочаце працягнуць? - + Errors occurred. %1 objects were not updated AI-generated, needs review by native speaker; delete this comment afterwards Адбыліся памылкі. %1 аб’ектаў не былі абноўлены - + Save to image AI-generated, needs review by native speaker; delete this comment afterwards Захаваць як выява - + Select maps to convert AI-generated, needs review by native speaker; delete this comment afterwards Абраць мапы для канвертацыі - + HoMM3 maps(*.h3m) AI-generated, needs review by native speaker; delete this comment afterwards Мапы HoMM3 (*.h3m) - + Choose directory to save converted maps AI-generated, needs review by native speaker; delete this comment afterwards Абраць каталог для захавання пераўтворанных мап - + Operation completed AI-generated, needs review by native speaker; delete this comment afterwards Аперацыя завершана - + Successfully converted %1 maps AI-generated, needs review by native speaker; delete this comment afterwards Паспяхова пераўтворана мапаў: %1 - + Failed to convert the map. Abort operation AI-generated, needs review by native speaker; delete this comment afterwards Не ўдалося пераўтварыць мапу. Аперацыя спынена - + Select campaign to convert AI-generated, needs review by native speaker; delete this comment afterwards Абраць кампанію для канвертацыі - + HoMM3 campaigns (*.h3c) AI-generated, needs review by native speaker; delete this comment afterwards Кампаніі HoMM3 (*.h3c) - + Select destination file AI-generated, needs review by native speaker; delete this comment afterwards Абраць файл прызначэння - + VCMI campaigns (*.vcmp) AI-generated, needs review by native speaker; delete this comment afterwards Кампаніі VCMI (*.vcmp) @@ -1532,30 +1562,30 @@ MapController - + Hero %1 cannot be created as NEUTRAL. AI-generated, needs review by native speaker; delete this comment afterwards Герой %1 не можа быць створаны як НЕЙТРАЛЬНЫ. - + Missing Required Mod AI-generated, needs review by native speaker; delete this comment afterwards Адсутнічае неабходны мод - + Do you want to do that now ? -AI-generated, needs review by native speaker; delete this comment afterwards + AI-generated, needs review by native speaker; delete this comment afterwards Хочаце зрабіць гэта зараз? - + This object's mod is mandatory for map to remain valid. AI-generated, needs review by native speaker; delete this comment afterwards Мод гэтага аб’екта з’яўляецца абавязковым для карэктнай працы мапы. @@ -1660,6 +1690,30 @@ Do you want to do that now ? Паведамленне + + MineSelector + + + + Select Mines + + + + + Mine Selector + + + + + Resource + Рэсурс + + + + Mines + Руднікі + + ModSettings @@ -1814,29 +1868,25 @@ Do you want to do that now ? - PlayerSettings + PlayerSettingsDialog - + Player settings - AI-generated, needs review by native speaker; delete this comment afterwards Налады гульца - + Players - AI-generated, needs review by native speaker; delete this comment afterwards Гульцы - + 1 - AI-generated, needs review by native speaker; delete this comment afterwards 1 - + Ok - AI-generated, needs review by native speaker; delete this comment afterwards ОК @@ -1895,81 +1945,81 @@ Do you want to do that now ? Другасныя ўменні: - + Compliant AI-generated, needs review by native speaker; delete this comment afterwards Паслухмяны - + Friendly AI-generated, needs review by native speaker; delete this comment afterwards Дабразычлівы - + Aggressive AI-generated, needs review by native speaker; delete this comment afterwards Агрэсіўны - + Hostile AI-generated, needs review by native speaker; delete this comment afterwards Варожы - + Savage AI-generated, needs review by native speaker; delete this comment afterwards Дзікі - - + + No patrol AI-generated, needs review by native speaker; delete this comment afterwards Без патруля - + POWER RANK AI-generated, needs review by native speaker; delete this comment afterwards РАНГ СІЛЫ - + HERO TYPE AI-generated, needs review by native speaker; delete this comment afterwards ТЫП ГЕРОЯ - + Hero class AI-generated, needs review by native speaker; delete this comment afterwards Клас героя - + Portrait AI-generated, needs review by native speaker; delete this comment afterwards Партрэт - + Skills AI-generated, needs review by native speaker; delete this comment afterwards Уменні - + Artifacts AI-generated, needs review by native speaker; delete this comment afterwards Артыфакты - - + + %n tile(s) AI-generated, needs review by native speaker; delete this comment afterwards @@ -1979,353 +2029,353 @@ Do you want to do that now ? - + Buildings AI-generated, needs review by native speaker; delete this comment afterwards Будынкі - + Events AI-generated, needs review by native speaker; delete this comment afterwards Падзеі - + Resource AI-generated, needs review by native speaker; delete this comment afterwards Рэсурс - + Artifact reward AI-generated, needs review by native speaker; delete this comment afterwards Узнагарода: артыфакт - + Quest AI-generated, needs review by native speaker; delete this comment afterwards Заданне - + Identifier AI-generated, needs review by native speaker; delete this comment afterwards Ідэнтыфікатар - + ID AI-generated, needs review by native speaker; delete this comment afterwards ID - + SubID AI-generated, needs review by native speaker; delete this comment afterwards SubID - + InstanceName AI-generated, needs review by native speaker; delete this comment afterwards Назва інстанцыі - + IsStatic AI-generated, needs review by native speaker; delete this comment afterwards Статычны - - + + neutral AI-generated, needs review by native speaker; delete this comment afterwards нейтральны - - + + Army AI-generated, needs review by native speaker; delete this comment afterwards Армія - - - + + - - - - - + + + + + + Owner AI-generated, needs review by native speaker; delete this comment afterwards Уладальнік - - + + Same as town AI-generated, needs review by native speaker; delete this comment afterwards Як у горада - - + + Removable units AI-generated, needs review by native speaker; delete this comment afterwards Падраздзяленні, якія можна выдаліць - - + + Placeholder type AI-generated, needs review by native speaker; delete this comment afterwards Тып заглушкі - - + + Power rank AI-generated, needs review by native speaker; delete this comment afterwards Ранг сілы - - - - + + + + Hero type AI-generated, needs review by native speaker; delete this comment afterwards Тып героя - - + + Experience AI-generated, needs review by native speaker; delete this comment afterwards Досвед - - + + MALE AI-generated, needs review by native speaker; delete this comment afterwards МУЖЧЫНА - - + + FEMALE AI-generated, needs review by native speaker; delete this comment afterwards ЖАНЧЫНА - - + + Gender AI-generated, needs review by native speaker; delete this comment afterwards Пол - - + + Name AI-generated, needs review by native speaker; delete this comment afterwards Імя - - + + Biography AI-generated, needs review by native speaker; delete this comment afterwards Біяграфія - - + + Spells AI-generated, needs review by native speaker; delete this comment afterwards Заклёнствы - - + + Patrol radius AI-generated, needs review by native speaker; delete this comment afterwards Радыус патруля - - + + Town name AI-generated, needs review by native speaker; delete this comment afterwards Назва горада - - + + Same as player AI-generated, needs review by native speaker; delete this comment afterwards Як у гульца - - - - - - - - - + + + + + + + + + Message AI-generated, needs review by native speaker; delete this comment afterwards Паведамленне - - + + Spell AI-generated, needs review by native speaker; delete this comment afterwards Заклён - - + + Productivity AI-generated, needs review by native speaker; delete this comment afterwards Прадуктыўнасць - - - - + + + + Amount AI-generated, needs review by native speaker; delete this comment afterwards Колькасць - + Character AI-generated, needs review by native speaker; delete this comment afterwards Персанаж - + Select town AI-generated, needs review by native speaker; delete this comment afterwards Абраць горад - - + + Never flees AI-generated, needs review by native speaker; delete this comment afterwards Ніколі не ўцякае - - + + Not growing AI-generated, needs review by native speaker; delete this comment afterwards Не расце - - + + Reward AI-generated, needs review by native speaker; delete this comment afterwards Узнагарода - - + + Remove after AI-generated, needs review by native speaker; delete this comment afterwards Выдаліць пасля - - + + Human trigger AI-generated, needs review by native speaker; delete this comment afterwards Трыгер чалавека - - + + Cpu trigger AI-generated, needs review by native speaker; delete this comment afterwards Трыгер ШІ - - + + First visit text AI-generated, needs review by native speaker; delete this comment afterwards Тэкст пры першым візіце - - + + Next visit text AI-generated, needs review by native speaker; delete this comment afterwards Тэкст пры наступных візітах - - + + Completed text AI-generated, needs review by native speaker; delete this comment afterwards Тэкст пасля выканання - - - + + + Repeat quest AI-generated, needs review by native speaker; delete this comment afterwards Паўтараць заданне - - + + Time limit AI-generated, needs review by native speaker; delete this comment afterwards Абмежаванне па часе - + UNFLAGGABLE AI-generated, needs review by native speaker; delete this comment afterwards НЕМАГЧЫМА ПАЗНАЧЫЦЬ - + Can't place object AI-generated, needs review by native speaker; delete this comment afterwards Немагчыма размясціць аб’ект - + There can only be one grail object on the map. AI-generated, needs review by native speaker; delete this comment afterwards На мапе можа быць толькі адзін артэфакт Грааля. - + (submod of %1) AI-generated, needs review by native speaker; delete this comment afterwards (падмодуль %1) - + The mod '%1'%2, is required by an object on the map. Add it to the map's required mods in Map->General settings. should be consistent with Map->General menu entry translation @@ -2373,14 +2423,14 @@ Add it to the map's required mods in Map->General settings. - + Hero Level: %1 AI-generated, needs review by native speaker; delete this comment afterwards Узровень героя: %1 - + Hero Experience: %1 AI-generated, needs review by native speaker; delete this comment afterwards Досвед героя: %1 @@ -2393,49 +2443,49 @@ Add it to the map's required mods in Map->General settings. - + Mana Percentage: %1 AI-generated, needs review by native speaker; delete this comment afterwards Працэнт маны: %1 - + Primary Skills: %1/%2/%3/%4 AI-generated, needs review by native speaker; delete this comment afterwards Асноўныя навыкі: %1/%2/%3/%4 - + Resources: %1 AI-generated, needs review by native speaker; delete this comment afterwards Рэсурсы: %1 - + Artifacts: %1 AI-generated, needs review by native speaker; delete this comment afterwards Артыфакты: %1 - + Spells: %1 AI-generated, needs review by native speaker; delete this comment afterwards Заклёнствы: %1 - + Secondary Skills: %1 AI-generated, needs review by native speaker; delete this comment afterwards Другасныя навыкі: %1 - + Creatures: %1 AI-generated, needs review by native speaker; delete this comment afterwards Стварэнні: %1 @@ -2459,43 +2509,43 @@ Add it to the map's required mods in Map->General settings. Гульцы: %1 - + Rewards: AI-generated, needs review by native speaker; delete this comment afterwards Узнагароды: - + Reward Message: %1 AI-generated, needs review by native speaker; delete this comment afterwards Паведамленне пра ўзнагароду: %1 - + Mana Diff: %1 AI-generated, needs review by native speaker; delete this comment afterwards Розніца маны: %1 - + Move Points: %1 AI-generated, needs review by native speaker; delete this comment afterwards Ачкі перамяшчэння: %1 - + Move Percentage: %1 AI-generated, needs review by native speaker; delete this comment afterwards Працэнт перамяшчэння: %1 - + Spell Cast: %1 (%2) AI-generated, needs review by native speaker; delete this comment afterwards Заклён выкарыстаны: %1 (%2) - + Bonuses: %1 AI-generated, needs review by native speaker; delete this comment afterwards Бонусы: %1 @@ -3000,20 +3050,20 @@ Add it to the map's required mods in Map->General settings. Гульцы - + None AI-generated, needs review by native speaker; delete this comment afterwards Няма - + Day %1 AI-generated, needs review by native speaker; delete this comment afterwards Дзень %1 - - + + Reward %1 AI-generated, needs review by native speaker; delete this comment afterwards Узнагарода %1 @@ -3279,8 +3329,8 @@ Add it to the map's required mods in Map->General settings. - - + + Player position AI-generated, needs review by native speaker; delete this comment afterwards Пазіцыя гульца @@ -3340,57 +3390,57 @@ Add it to the map's required mods in Map->General settings. Гулец - + Open map AI-generated, needs review by native speaker; delete this comment afterwards Адкрыць мапу - + All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) AI-generated, needs review by native speaker; delete this comment afterwards Усе падтрымліваемыя мапы (*.vmap *.h3m);;Мапы VCMI(*.vmap);;Мапы HoMM3(*.h3m) - - + + Error AI-generated, needs review by native speaker; delete this comment afterwards Памылка - - + + Could not open the file. AI-generated, needs review by native speaker; delete this comment afterwards Не ўдалося адкрыць файл. - + Save map AI-generated, needs review by native speaker; delete this comment afterwards Захаваць мапу - + VCMI maps (*.vmap); AI-generated, needs review by native speaker; delete this comment afterwards Мапы VCMI (*.vmap); - + HoMM3 maps (*.h3m); AI-generated, needs review by native speaker; delete this comment afterwards Мапы HoMM3 (*.h3m); - + Source scenario AI-generated, needs review by native speaker; delete this comment afterwards Сцэнар-крыніца - + Hero AI-generated, needs review by native speaker; delete this comment afterwards Герой @@ -3430,7 +3480,7 @@ Add it to the map's required mods in Map->General settings. - + Building AI-generated, needs review by native speaker; delete this comment afterwards Будынак @@ -3461,7 +3511,7 @@ Add it to the map's required mods in Map->General settings. - + Secondary skill AI-generated, needs review by native speaker; delete this comment afterwards Другасны навык @@ -3469,7 +3519,7 @@ Add it to the map's required mods in Map->General settings. - + Resource AI-generated, needs review by native speaker; delete this comment afterwards Рэсурс @@ -3571,54 +3621,679 @@ Add it to the map's required mods in Map->General settings. Рэдкі (%1, %2, %3, %4) - + strongest hero AI-generated, needs review by native speaker; delete this comment afterwards найлепшы герой - + generated hero AI-generated, needs review by native speaker; delete this comment afterwards створаны герой - + random hero AI-generated, needs review by native speaker; delete this comment afterwards выпадковы герой - + %1 spell for %2 AI-generated, needs review by native speaker; delete this comment afterwards %1 заклён для %2 - + %1 %2 for %3 AI-generated, needs review by native speaker; delete this comment afterwards %1 %2 для %3 - + %1 artifact for %2 AI-generated, needs review by native speaker; delete this comment afterwards %1 артыфакт для %2 - + %1 spell scroll for %2 AI-generated, needs review by native speaker; delete this comment afterwards %1 скрутак заклёна для %2 - + Primary skill (Attack: %1, Defense: %2, Spell: %3, Knowledge: %4) for %5 AI-generated, needs review by native speaker; delete this comment afterwards Асноўны навык (Атака: %1, Абарона: %2, Магія: %3, Веданне: %4) для %5 + + TemplateEditor + + + + VCMI Template Editor + + + + + File + Файл + + + + Edit + Рэдагаваць + + + + View + Выгляд + + + + Toolbar + Панэль інструментаў + + + + Selected Template: + + + + + + + Add + Дадаць + + + + Remove + Выдаліць + + + + Rename + + + + + General + Агульнае + + + + Name + Імя + + + + Description + + + + + Min Size + + + + + + + X + X + + + + + + Y + Y + + + + + + Z + + + + + Max Size + + + + + + Players + Гульцы + + + + Human + + + + + Allowed water content + + + + + + + None + + + + + + Normal + Звычайныя + + + + Islands + Астравы + + + + Zone + + + + + Visualisation + + + + + Position + + + + + + Size + + + + + ID + ID + + + + + Type + Тып + + + + Owner + Уладальнік + + + + Zone link + + + + + + + Mines + Руднікі + + + + + Custom objects + + + + + + Towns + Гарады + + + + + Terrain + + + + + + + + Treasure + + + + + Town info + + + + + Town count + + + + + + + + Player + Гулец + + + + + + + Neutral + Нейтральны + + + + Castle count + + + + + Town density + + + + + Castle density + + + + + Match terrain to town + + + + + Terrain types + + + + + Banned terrain types + + + + + Towns are same type + + + + + Allowed towns + + + + + Banned towns + + + + + Town hints + + + + + Monsters + Монстры + + + + Allowed monsters + + + + + Banned monsters + + + + + Strength + + + + + Objects + Аб’екты + + + + Connections + + + + + Open + Адкрыць + + + + Save + Захаваць + + + + New + Новы + + + + Save as... + Захаваць як... + + + + Ctrl+Shift+S + Ctrl+Shift+S + + + + Add zone + + + + + Remove zone + + + + + + Del + Del + + + + Auto position + + + + + Ctrl+P + Ctrl+P + + + + Zoom in + Павялічыць маштаб + + + + Ctrl++ + Ctrl++ + + + + Zoom out + Паменшыць маштаб + + + + Ctrl+- + Ctrl+- + + + + Zoom auto + + + + + Ctrl+Shift+: + + + + + Zoom reset + Скінуць маштаб + + + + Ctrl+Shift+= + Ctrl+Shift+= + + + + Min + + + + + Max + + + + + Action + + + + + + Delete + + + + + ID: %1 + + + + + Max treasure: %1 + + + + + Player start + + + + + CPU start + + + + + Junction + + + + + Water + + + + + Sealed + + + + + + Random + + + + + Weak + Слабыя + + + + Strong + Моцныя + + + + Zone A + + + + + Zone B + + + + + Guard + + + + + Road + + + + + Guarded + + + + + Fictive + + + + + Repulsive + + + + + Wide + + + + + Force portal + + + + + Yes + + + + + No + + + + + Zone A: %1 +Zone B: %2 +Guard: %3 + + + + + Confirmation + Пацверджанне + + + + Unsaved changes will be lost, are you sure? + + + + + Open template + + + + + VCMI templates(*.json) + + + + + Save template + + + + + VCMI templates (*.json) + + + + + + Enter Name + + + + + + Name: + + + + + Already existing! + + + + + At template with this name is already existing. + + + + + To few templates! + + + + + At least one template should remain after removing. + + + + + + Error + Памылка + + + + + Not implemented yet! + + + + + TerrainSelector + + + + Select Terrains + + + + + Terrain Selector + + + TimedEvent @@ -4021,6 +4696,40 @@ Add it to the map's required mods in Map->General settings. Усе існуючыя тэкставыя запісы для гэтай мовы будуць выдалены. Працягнуць? + + TreasureSelector + + + + Select Treasures + + + + + Treasure Selector + + + + + Min + + + + + Max + + + + + Density + + + + + Action + + + Validator @@ -4485,25 +5194,25 @@ Add it to the map's required mods in Map->General settings. Скасаваць - + No template AI-generated, needs review by native speaker; delete this comment afterwards Няма шаблона - + No template for parameters specified. Random map cannot be generated. AI-generated, needs review by native speaker; delete this comment afterwards Няма шаблона для зададзеных параметраў. Немагчыма стварыць выпадковую мапу. - + RMG failure AI-generated, needs review by native speaker; delete this comment afterwards Сбой генератара мапы (RMG) - + [default] AI-generated, needs review by native speaker; delete this comment afterwards [па змаўчанні] @@ -4512,31 +5221,31 @@ Add it to the map's required mods in Map->General settings. main - + Filepath of the map to open. AI-generated, needs review by native speaker; delete this comment afterwards Шлях да мапы для адкрыцця. - + Extract original H3 archives into a separate folder. AI-generated, needs review by native speaker; delete this comment afterwards Выцягнуць арыгінальныя архівы H3 у асобную тэчку. - + From an extracted archive, it Splits TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 and Un44 into individual PNG's. AI-generated, needs review by native speaker; delete this comment afterwards З вынятага архіва падзяляе TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 і Un44 на асобныя PNG's. - + From an extracted archive, Converts single Images (found in Images folder) from .pcx to png. AI-generated, needs review by native speaker; delete this comment afterwards З вынятага архіва канвертуе асобныя выявы (у тэчцы Images) з .pcx у .png. - + Delete original files, for the ones split / converted. AI-generated, needs review by native speaker; delete this comment afterwards Выдаліць арыгінальныя файлы, што былі падзелены/ператвораны. diff --git a/mapeditor/translation/bulgarian.ts b/mapeditor/translation/bulgarian.ts index 61a3e790a..d3a58afbd 100644 --- a/mapeditor/translation/bulgarian.ts +++ b/mapeditor/translation/bulgarian.ts @@ -54,7 +54,7 @@ CampaignEditor - + VCMI Campaign Editor AI-generated, needs review by native speaker; delete this comment afterwards VCMI Редактор на кампании @@ -135,43 +135,43 @@ Покажи пълен фон - + Scenario editor AI-generated, needs review by native speaker; delete this comment afterwards Редактор на сценарии - + Confirmation AI-generated, needs review by native speaker; delete this comment afterwards Потвърждение - + Unsaved changes will be lost, are you sure? AI-generated, needs review by native speaker; delete this comment afterwards Незаписаните промени ще бъдат загубени, сигурни ли сте? - + Open map AI-generated, needs review by native speaker; delete this comment afterwards Отвори карта - + All supported campaigns (*.vcmp *.h3c);;VCMI campaigns(*.vcmp);;HoMM3 campaigns(*.h3c) AI-generated, needs review by native speaker; delete this comment afterwards Всички поддържани кампании (*.vcmp *.h3c);;VCMI кампании(*.vcmp);;HoMM3 кампании(*.h3c) - + Save campaign AI-generated, needs review by native speaker; delete this comment afterwards Запази кампания - + VCMI campaigns (*.vcmp) AI-generated, needs review by native speaker; delete this comment afterwards VCMI кампании (*.vcmp) @@ -181,7 +181,7 @@ CampaignProperties - + Campaign Properties AI-generated, needs review by native speaker; delete this comment afterwards Свойства на кампанията @@ -320,47 +320,47 @@ Аутро видео - + Custom AI-generated, needs review by native speaker; delete this comment afterwards Персонализирано - + Infix AI-generated, needs review by native speaker; delete this comment afterwards Инфикс - + X - + Y - + Label Pos X AI-generated, needs review by native speaker; delete this comment afterwards Позиция на етикета X - + Label Pos Y AI-generated, needs review by native speaker; delete this comment afterwards Позиция на етикета Y - + Fewer Scenarios AI-generated, needs review by native speaker; delete this comment afterwards По-малко сценарии - + New Region setup supports fewer scenarios than before. Some will removed. Continue? AI-generated, needs review by native speaker; delete this comment afterwards Новата конфигурация на региона поддържа по-малко сценарии. Някои ще бъдат премахнати. Да продължа ли? @@ -399,6 +399,20 @@ Ново събитие + + FactionSelector + + + + Select Factions + + + + + Faction Selector + + + GeneralSettings @@ -497,6 +511,16 @@ AI-generated, needs review by native speaker; delete this comment afterwards Артефакт + + + Save + Запази + + + + Cancel + Отказ + HeroSkillsWidget @@ -652,7 +676,7 @@ MainWindow - + VCMI Map Editor Редактор на карти VCMI @@ -664,864 +688,870 @@ - + Open Recent AI-generated, needs review by native speaker; delete this comment afterwards Последно отваряни - + Map AI-generated, needs review by native speaker; delete this comment afterwards Карта - + Edit AI-generated, needs review by native speaker; delete this comment afterwards Редакция - + View AI-generated, needs review by native speaker; delete this comment afterwards Изглед - + Player AI-generated, needs review by native speaker; delete this comment afterwards Играч - + Toolbar AI-generated, needs review by native speaker; delete this comment afterwards Лента с инструменти - + Minimap AI-generated, needs review by native speaker; delete this comment afterwards Миникарта - + Map Objects View AI-generated, needs review by native speaker; delete this comment afterwards Изглед на обекти от картата - + Browser AI-generated, needs review by native speaker; delete this comment afterwards Браузър - + Inspector AI-generated, needs review by native speaker; delete this comment afterwards Инспектор - + Property AI-generated, needs review by native speaker; delete this comment afterwards Свойство - + Value AI-generated, needs review by native speaker; delete this comment afterwards Стойност - + Tools AI-generated, needs review by native speaker; delete this comment afterwards Инструменти - + Painting AI-generated, needs review by native speaker; delete this comment afterwards Рисуване - + Terrains AI-generated, needs review by native speaker; delete this comment afterwards Терени - + Roads AI-generated, needs review by native speaker; delete this comment afterwards Пътища - + Rivers AI-generated, needs review by native speaker; delete this comment afterwards Реки - + Preview AI-generated, needs review by native speaker; delete this comment afterwards Преглед - + Open AI-generated, needs review by native speaker; delete this comment afterwards Отвори - + Ctrl+O AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+O - + More... AI-generated, needs review by native speaker; delete this comment afterwards Още... - + Save AI-generated, needs review by native speaker; delete this comment afterwards Запази - + Ctrl+S AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+S - + New AI-generated, needs review by native speaker; delete this comment afterwards Нов - + Ctrl+N AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+N - + Save as... AI-generated, needs review by native speaker; delete this comment afterwards Запази като... - + Ctrl+Shift+S AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+S - - + + Campaign editor AI-generated, needs review by native speaker; delete this comment afterwards Редактор на кампании - - - - + + + Template editor + + + + + + + View underground AI-generated, needs review by native speaker; delete this comment afterwards Преглед на подземие - + Ctrl+U AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+U - + Pass AI-generated, needs review by native speaker; delete this comment afterwards Проход - + Ctrl+Shift+P AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+P - + Cut AI-generated, needs review by native speaker; delete this comment afterwards Изрежи - + Ctrl+X AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+X - + Copy AI-generated, needs review by native speaker; delete this comment afterwards Копирай - + Ctrl+C AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+C - + Paste AI-generated, needs review by native speaker; delete this comment afterwards Постави - + Ctrl+V AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+V - + Fill AI-generated, needs review by native speaker; delete this comment afterwards Запълни - + Fills the selection with obstacles AI-generated, needs review by native speaker; delete this comment afterwards Запълва избраното с препятствия - + Grid AI-generated, needs review by native speaker; delete this comment afterwards Мрежа - + Ctrl+G AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+G - + General AI-generated, needs review by native speaker; delete this comment afterwards Общи - + Map title and description AI-generated, needs review by native speaker; delete this comment afterwards Заглавие и описание на картата - + Ctrl+Enter AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Enter - + Players settings AI-generated, needs review by native speaker; delete this comment afterwards Настройки на играчите - + Ctrl+P AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+P - - + + Undo AI-generated, needs review by native speaker; delete this comment afterwards Отмени - + Ctrl+Z AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Z - + Redo AI-generated, needs review by native speaker; delete this comment afterwards Повтори - + Ctrl+Y AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Y - + Erase AI-generated, needs review by native speaker; delete this comment afterwards Изтрий - + Del AI-generated, needs review by native speaker; delete this comment afterwards Del - + Neutral AI-generated, needs review by native speaker; delete this comment afterwards Неутрален - + Ctrl+0 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+0 - + Validate AI-generated, needs review by native speaker; delete this comment afterwards Провери - + Ctrl+Shift+V AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+V - - - - + + + + Update appearance AI-generated, needs review by native speaker; delete this comment afterwards Обнови външния вид - + Recreate obstacles AI-generated, needs review by native speaker; delete this comment afterwards Пресъздай препятствията - + Player 1 AI-generated, needs review by native speaker; delete this comment afterwards Играч 1 - + Ctrl+1 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+1 - + Player 2 AI-generated, needs review by native speaker; delete this comment afterwards Играч 2 - + Ctrl+2 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+2 - + Player 3 AI-generated, needs review by native speaker; delete this comment afterwards Играч 3 - + Ctrl+3 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+3 - + Player 4 AI-generated, needs review by native speaker; delete this comment afterwards Играч 4 - + Ctrl+4 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+4 - + Player 5 AI-generated, needs review by native speaker; delete this comment afterwards Играч 5 - + Ctrl+5 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+5 - + Player 6 AI-generated, needs review by native speaker; delete this comment afterwards Играч 6 - + Ctrl+6 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+6 - + Player 7 AI-generated, needs review by native speaker; delete this comment afterwards Играч 7 - + Ctrl+7 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+7 - + Player 8 AI-generated, needs review by native speaker; delete this comment afterwards Играч 8 - + Ctrl+8 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+8 - + Export as... AI-generated, needs review by native speaker; delete this comment afterwards Експортирай като... - + Ctrl+E AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+E - + Translations AI-generated, needs review by native speaker; delete this comment afterwards Преводи - + Ctrl+T AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+T - - + + h3m converter AI-generated, needs review by native speaker; delete this comment afterwards h3m конвертор - + Ctrl+Shift+M AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+M - - + + h3c converter AI-generated, needs review by native speaker; delete this comment afterwards h3c конвертор - + Ctrl+Shift+C AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+C - + Lock AI-generated, needs review by native speaker; delete this comment afterwards Заключи - + Lock objects on map to avoid unnecessary changes AI-generated, needs review by native speaker; delete this comment afterwards Заключи обекти на картата, за да се избегнат ненужни промени - + Ctrl+L AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+L - + Unlock AI-generated, needs review by native speaker; delete this comment afterwards Отключи - + Unlock all objects on the map AI-generated, needs review by native speaker; delete this comment afterwards Отключи всички обекти на картата - + Ctrl+Shift+L AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+L - + Zoom in AI-generated, needs review by native speaker; delete this comment afterwards Увеличи - + Ctrl++ AI-generated, needs review by native speaker; delete this comment afterwards Ctrl++ - + Zoom out AI-generated, needs review by native speaker; delete this comment afterwards Намали - + Ctrl+- AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+- - + Zoom reset AI-generated, needs review by native speaker; delete this comment afterwards Нулирай мащаба - + Ctrl+Shift+= AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+= - + Confirmation AI-generated, needs review by native speaker; delete this comment afterwards Потвърждение - + Unsaved changes will be lost, are you sure? AI-generated, needs review by native speaker; delete this comment afterwards Незаписаните промени ще бъдат загубени, сигурни ли сте? - + Mods are required AI-generated, needs review by native speaker; delete this comment afterwards Необходими са модове - + Failed to open map AI-generated, needs review by native speaker; delete this comment afterwards Неуспешно отваряне на карта - + Open map AI-generated, needs review by native speaker; delete this comment afterwards Отвори карта - + All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) AI-generated, needs review by native speaker; delete this comment afterwards Всички поддържани карти (*.vmap *.h3m);;VCMI карти(*.vmap);;HoMM3 карти(*.h3m) - + Recently Opened Files AI-generated, needs review by native speaker; delete this comment afterwards Последно отворени файлове - + Map validation AI-generated, needs review by native speaker; delete this comment afterwards Валидиране на картата - + Map has critical problems and most probably will not be playable. Open Validator from the Map menu to see issues found AI-generated, needs review by native speaker; delete this comment afterwards Картата има критични проблеми и най-вероятно няма да бъде игрална. Отворете Валидатора от менюто Карта, за да видите намерените проблеми - + Map has some errors. Open Validator from the Map menu to see issues found AI-generated, needs review by native speaker; delete this comment afterwards Картата има някои грешки. Отворете Валидатора от менюто Карта, за да видите намерените проблеми - + Failed to save map AI-generated, needs review by native speaker; delete this comment afterwards Неуспешно запазване на картата - + Save map AI-generated, needs review by native speaker; delete this comment afterwards Запази карта - + VCMI maps (*.vmap) AI-generated, needs review by native speaker; delete this comment afterwards VCMI карти (*.vmap) - + Type AI-generated, needs review by native speaker; delete this comment afterwards Тип - + Towns AI-generated, needs review by native speaker; delete this comment afterwards Градове - + Objects AI-generated, needs review by native speaker; delete this comment afterwards Обекти - + Heroes AI-generated, needs review by native speaker; delete this comment afterwards Герои - + Artifacts AI-generated, needs review by native speaker; delete this comment afterwards Артефакти - + Resources AI-generated, needs review by native speaker; delete this comment afterwards Ресурси - + Banks AI-generated, needs review by native speaker; delete this comment afterwards Банки - + Dwellings AI-generated, needs review by native speaker; delete this comment afterwards Жилища - + Grounds AI-generated, needs review by native speaker; delete this comment afterwards Терен - + Teleports AI-generated, needs review by native speaker; delete this comment afterwards Телепорти - + Mines AI-generated, needs review by native speaker; delete this comment afterwards Мини - + Triggers AI-generated, needs review by native speaker; delete this comment afterwards Тригери - + Monsters AI-generated, needs review by native speaker; delete this comment afterwards Чудовища - + Quests AI-generated, needs review by native speaker; delete this comment afterwards Мисии - + Wog Objects AI-generated, needs review by native speaker; delete this comment afterwards Wog обекти - + Obstacles AI-generated, needs review by native speaker; delete this comment afterwards Препятствия - + Other AI-generated, needs review by native speaker; delete this comment afterwards Други - + Mods loading problem AI-generated, needs review by native speaker; delete this comment afterwards Проблем при зареждане на модове - + Critical error during Mods loading. Disable invalid mods and restart. AI-generated, needs review by native speaker; delete this comment afterwards Критична грешка при зареждане на модове. Изключете невалидните модове и рестартирайте. - - + + View surface AI-generated, needs review by native speaker; delete this comment afterwards Преглед на повърхността - + No objects selected AI-generated, needs review by native speaker; delete this comment afterwards Няма избрани обекти - + This operation is irreversible. Do you want to continue? AI-generated, needs review by native speaker; delete this comment afterwards Тази операция е необратима. Искате ли да продължите? - + Errors occurred. %1 objects were not updated AI-generated, needs review by native speaker; delete this comment afterwards Възникнаха грешки. %1 обекта не бяха обновени - + Save to image AI-generated, needs review by native speaker; delete this comment afterwards Запази като изображение - + Select maps to convert AI-generated, needs review by native speaker; delete this comment afterwards Изберете карти за конвертиране - + HoMM3 maps(*.h3m) AI-generated, needs review by native speaker; delete this comment afterwards HoMM3 карти (*.h3m) - + Choose directory to save converted maps AI-generated, needs review by native speaker; delete this comment afterwards Изберете директория за запазване на конвертираните карти - + Operation completed AI-generated, needs review by native speaker; delete this comment afterwards Операцията завърши - + Successfully converted %1 maps AI-generated, needs review by native speaker; delete this comment afterwards Успешно конвертирани %1 карти - + Failed to convert the map. Abort operation AI-generated, needs review by native speaker; delete this comment afterwards Неуспешно конвертиране на карта. Прекъсване на операцията - + Select campaign to convert AI-generated, needs review by native speaker; delete this comment afterwards Изберете кампания за конвертиране - + HoMM3 campaigns (*.h3c) AI-generated, needs review by native speaker; delete this comment afterwards HoMM3 кампании (*.h3c) - + Select destination file AI-generated, needs review by native speaker; delete this comment afterwards Изберете целеви файл - + VCMI campaigns (*.vcmp) AI-generated, needs review by native speaker; delete this comment afterwards VCMI кампании (*.vcmp) @@ -1530,30 +1560,30 @@ MapController - + Hero %1 cannot be created as NEUTRAL. AI-generated, needs review by native speaker; delete this comment afterwards Герой %1 не може да бъде създаден като НЕУТРАЛЕН. - + Missing Required Mod AI-generated, needs review by native speaker; delete this comment afterwards Липсващ необходим мод - + Do you want to do that now ? -AI-generated, needs review by native speaker; delete this comment afterwards + AI-generated, needs review by native speaker; delete this comment afterwards Желаете ли да го направите сега? - + This object's mod is mandatory for map to remain valid. AI-generated, needs review by native speaker; delete this comment afterwards Модът на този обект е задължителен, за да остане картата валидна. @@ -1658,6 +1688,30 @@ Do you want to do that now ? Съобщение + + MineSelector + + + + Select Mines + + + + + Mine Selector + + + + + Resource + Ресурс + + + + Mines + Мини + + ModSettings @@ -1811,28 +1865,25 @@ Do you want to do that now ? - PlayerSettings + PlayerSettingsDialog - + Player settings - AI-generated, needs review by native speaker; delete this comment afterwards Настройки на играча - + Players - AI-generated, needs review by native speaker; delete this comment afterwards - Играчите + - + 1 - + Ok - AI-generated, needs review by native speaker; delete this comment afterwards ОК @@ -1890,81 +1941,81 @@ Do you want to do that now ? Вторични умения: - + Compliant AI-generated, needs review by native speaker; delete this comment afterwards Подчинителен - + Friendly AI-generated, needs review by native speaker; delete this comment afterwards Приятелски - + Aggressive AI-generated, needs review by native speaker; delete this comment afterwards Агресивен - + Hostile AI-generated, needs review by native speaker; delete this comment afterwards Враждебен - + Savage AI-generated, needs review by native speaker; delete this comment afterwards Свиреп - - + + No patrol AI-generated, needs review by native speaker; delete this comment afterwards Без патрул - + POWER RANK AI-generated, needs review by native speaker; delete this comment afterwards СИЛОВ РАНГ - + HERO TYPE AI-generated, needs review by native speaker; delete this comment afterwards ТИП ГЕРОЙ - + Hero class AI-generated, needs review by native speaker; delete this comment afterwards Клас на героя - + Portrait AI-generated, needs review by native speaker; delete this comment afterwards Портрет - + Skills AI-generated, needs review by native speaker; delete this comment afterwards Умения - + Artifacts AI-generated, needs review by native speaker; delete this comment afterwards Артефакти - - + + %n tile(s) AI-generated, needs review by native speaker; delete this comment afterwards @@ -1973,353 +2024,353 @@ Do you want to do that now ? - + Buildings AI-generated, needs review by native speaker; delete this comment afterwards Сгради - + Events AI-generated, needs review by native speaker; delete this comment afterwards Събития - + Resource AI-generated, needs review by native speaker; delete this comment afterwards Ресурс - + Artifact reward AI-generated, needs review by native speaker; delete this comment afterwards Награда: артефакт - + Quest AI-generated, needs review by native speaker; delete this comment afterwards Мисия - + Identifier AI-generated, needs review by native speaker; delete this comment afterwards Идентификатор - + ID AI-generated, needs review by native speaker; delete this comment afterwards ID - + SubID AI-generated, needs review by native speaker; delete this comment afterwards ПодID - + InstanceName AI-generated, needs review by native speaker; delete this comment afterwards Име на инстанцията - + IsStatic AI-generated, needs review by native speaker; delete this comment afterwards Статичен ли е - - + + neutral AI-generated, needs review by native speaker; delete this comment afterwards неутрален - - + + Army AI-generated, needs review by native speaker; delete this comment afterwards Армия - - - + + - - - - - + + + + + + Owner AI-generated, needs review by native speaker; delete this comment afterwards Собственик - - + + Same as town AI-generated, needs review by native speaker; delete this comment afterwards Същият като града - - + + Removable units AI-generated, needs review by native speaker; delete this comment afterwards Могат да се премахнат единици - - + + Placeholder type AI-generated, needs review by native speaker; delete this comment afterwards Тип на заместителя - - + + Power rank AI-generated, needs review by native speaker; delete this comment afterwards Силов ранг - - - - + + + + Hero type AI-generated, needs review by native speaker; delete this comment afterwards Тип герой - - + + Experience AI-generated, needs review by native speaker; delete this comment afterwards Опит - - + + MALE AI-generated, needs review by native speaker; delete this comment afterwards МЪЖ - - + + FEMALE AI-generated, needs review by native speaker; delete this comment afterwards ЖЕНА - - + + Gender AI-generated, needs review by native speaker; delete this comment afterwards Пол - - + + Name AI-generated, needs review by native speaker; delete this comment afterwards Име - - + + Biography AI-generated, needs review by native speaker; delete this comment afterwards Биография - - + + Spells AI-generated, needs review by native speaker; delete this comment afterwards Заклинания - - + + Patrol radius AI-generated, needs review by native speaker; delete this comment afterwards Радиус на патрулиране - - + + Town name AI-generated, needs review by native speaker; delete this comment afterwards Име на града - - + + Same as player AI-generated, needs review by native speaker; delete this comment afterwards Същият като играча - - - - - - - - - + + + + + + + + + Message AI-generated, needs review by native speaker; delete this comment afterwards Съобщение - - + + Spell AI-generated, needs review by native speaker; delete this comment afterwards Заклинание - - + + Productivity AI-generated, needs review by native speaker; delete this comment afterwards Продуктивност - - - - + + + + Amount AI-generated, needs review by native speaker; delete this comment afterwards Количество - + Character AI-generated, needs review by native speaker; delete this comment afterwards Характер - + Select town AI-generated, needs review by native speaker; delete this comment afterwards Избери град - - + + Never flees AI-generated, needs review by native speaker; delete this comment afterwards Никога не бяга - - + + Not growing AI-generated, needs review by native speaker; delete this comment afterwards Не нараства - - + + Reward AI-generated, needs review by native speaker; delete this comment afterwards Награда - - + + Remove after AI-generated, needs review by native speaker; delete this comment afterwards Премахни след - - + + Human trigger AI-generated, needs review by native speaker; delete this comment afterwards Задейства се от човек - - + + Cpu trigger AI-generated, needs review by native speaker; delete this comment afterwards Задейства се от ИИ - - + + First visit text AI-generated, needs review by native speaker; delete this comment afterwards Текст при първо посещение - - + + Next visit text AI-generated, needs review by native speaker; delete this comment afterwards Текст при следващо посещение - - + + Completed text AI-generated, needs review by native speaker; delete this comment afterwards Текст при завършване - - - + + + Repeat quest AI-generated, needs review by native speaker; delete this comment afterwards Повтаряема мисия - - + + Time limit AI-generated, needs review by native speaker; delete this comment afterwards Лимит от време - + UNFLAGGABLE AI-generated, needs review by native speaker; delete this comment afterwards НЕОЗНАЧИМ - + Can't place object AI-generated, needs review by native speaker; delete this comment afterwards Не може да се постави обект - + There can only be one grail object on the map. AI-generated, needs review by native speaker; delete this comment afterwards На картата може да има само един обект на граала. - + (submod of %1) AI-generated, needs review by native speaker; delete this comment afterwards (подмодул на %1) - + The mod '%1'%2, is required by an object on the map. Add it to the map's required mods in Map->General settings. should be consistent with Map->General menu entry translation @@ -2367,14 +2418,14 @@ Add it to the map's required mods in Map->General settings. - + Hero Level: %1 AI-generated, needs review by native speaker; delete this comment afterwards Ниво на героя: %1 - + Hero Experience: %1 AI-generated, needs review by native speaker; delete this comment afterwards Опит на героя: %1 @@ -2387,49 +2438,49 @@ Add it to the map's required mods in Map->General settings. - + Mana Percentage: %1 AI-generated, needs review by native speaker; delete this comment afterwards Процент мана: %1 - + Primary Skills: %1/%2/%3/%4 AI-generated, needs review by native speaker; delete this comment afterwards Основни умения: %1/%2/%3/%4 - + Resources: %1 AI-generated, needs review by native speaker; delete this comment afterwards Ресурси: %1 - + Artifacts: %1 AI-generated, needs review by native speaker; delete this comment afterwards Артефакти: %1 - + Spells: %1 AI-generated, needs review by native speaker; delete this comment afterwards Заклинания: %1 - + Secondary Skills: %1 AI-generated, needs review by native speaker; delete this comment afterwards Вторични умения: %1 - + Creatures: %1 AI-generated, needs review by native speaker; delete this comment afterwards Същества: %1 @@ -2453,43 +2504,43 @@ Add it to the map's required mods in Map->General settings. Играч(и): %1 - + Rewards: AI-generated, needs review by native speaker; delete this comment afterwards Награди: - + Reward Message: %1 AI-generated, needs review by native speaker; delete this comment afterwards Съобщение за награда: %1 - + Mana Diff: %1 AI-generated, needs review by native speaker; delete this comment afterwards Разлика в мана: %1 - + Move Points: %1 AI-generated, needs review by native speaker; delete this comment afterwards Точки за движение: %1 - + Move Percentage: %1 AI-generated, needs review by native speaker; delete this comment afterwards Процент движение: %1 - + Spell Cast: %1 (%2) AI-generated, needs review by native speaker; delete this comment afterwards Извършено заклинание: %1 (%2) - + Bonuses: %1 AI-generated, needs review by native speaker; delete this comment afterwards Бонуси: %1 @@ -2991,20 +3042,20 @@ Add it to the map's required mods in Map->General settings. Играч(и) - + None AI-generated, needs review by native speaker; delete this comment afterwards Няма - + Day %1 AI-generated, needs review by native speaker; delete this comment afterwards Ден %1 - - + + Reward %1 AI-generated, needs review by native speaker; delete this comment afterwards Награда %1 @@ -3270,8 +3321,8 @@ Add it to the map's required mods in Map->General settings. - - + + Player position AI-generated, needs review by native speaker; delete this comment afterwards Позиция на играча @@ -3331,57 +3382,57 @@ Add it to the map's required mods in Map->General settings. Играч - + Open map AI-generated, needs review by native speaker; delete this comment afterwards Отвори карта - + All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) AI-generated, needs review by native speaker; delete this comment afterwards Всички поддържани карти (*.vmap *.h3m);;VCMI карти(*.vmap);;HoMM3 карти(*.h3m) - - + + Error AI-generated, needs review by native speaker; delete this comment afterwards Грешка - - + + Could not open the file. AI-generated, needs review by native speaker; delete this comment afterwards Не може да се отвори файлът. - + Save map AI-generated, needs review by native speaker; delete this comment afterwards Запази карта - + VCMI maps (*.vmap); AI-generated, needs review by native speaker; delete this comment afterwards VCMI карти (*.vmap); - + HoMM3 maps (*.h3m); AI-generated, needs review by native speaker; delete this comment afterwards HoMM3 карти (*.h3m); - + Source scenario AI-generated, needs review by native speaker; delete this comment afterwards Изходен сценарий - + Hero AI-generated, needs review by native speaker; delete this comment afterwards Герой @@ -3421,7 +3472,7 @@ Add it to the map's required mods in Map->General settings. - + Building AI-generated, needs review by native speaker; delete this comment afterwards Сграда @@ -3452,7 +3503,7 @@ Add it to the map's required mods in Map->General settings. - + Secondary skill AI-generated, needs review by native speaker; delete this comment afterwards Вторично умение @@ -3460,7 +3511,7 @@ Add it to the map's required mods in Map->General settings. - + Resource AI-generated, needs review by native speaker; delete this comment afterwards Ресурс @@ -3562,54 +3613,679 @@ Add it to the map's required mods in Map->General settings. Редки (%1, %2, %3, %4) - + strongest hero AI-generated, needs review by native speaker; delete this comment afterwards най-силен герой - + generated hero AI-generated, needs review by native speaker; delete this comment afterwards генериран герой - + random hero AI-generated, needs review by native speaker; delete this comment afterwards случаен герой - + %1 spell for %2 AI-generated, needs review by native speaker; delete this comment afterwards %1 заклинание за %2 - + %1 %2 for %3 AI-generated, needs review by native speaker; delete this comment afterwards %1 %2 за %3 - + %1 artifact for %2 AI-generated, needs review by native speaker; delete this comment afterwards %1 артефакт за %2 - + %1 spell scroll for %2 AI-generated, needs review by native speaker; delete this comment afterwards %1 свитък със заклинание за %2 - + Primary skill (Attack: %1, Defense: %2, Spell: %3, Knowledge: %4) for %5 AI-generated, needs review by native speaker; delete this comment afterwards Основно умение (Атака: %1, Защита: %2, Магия: %3, Знания: %4) за %5 + + TemplateEditor + + + + VCMI Template Editor + + + + + File + Файл + + + + Edit + Редакция + + + + View + Изглед + + + + Toolbar + Лента с инструменти + + + + Selected Template: + + + + + + + Add + Добави + + + + Remove + Премахни + + + + Rename + + + + + General + Общи + + + + Name + Име + + + + Description + + + + + Min Size + + + + + + + X + + + + + + + Y + + + + + + + Z + + + + + Max Size + + + + + + Players + + + + + Human + + + + + Allowed water content + + + + + + + None + + + + + + Normal + Нормална + + + + Islands + Острови + + + + Zone + + + + + Visualisation + + + + + Position + + + + + + Size + + + + + ID + ID + + + + + Type + Тип + + + + Owner + Собственик + + + + Zone link + + + + + + + Mines + Мини + + + + + Custom objects + + + + + + Towns + Градове + + + + + Terrain + + + + + + + + Treasure + + + + + Town info + + + + + Town count + + + + + + + + Player + Играч + + + + + + + Neutral + Неутрален + + + + Castle count + + + + + Town density + + + + + Castle density + + + + + Match terrain to town + + + + + Terrain types + + + + + Banned terrain types + + + + + Towns are same type + + + + + Allowed towns + + + + + Banned towns + + + + + Town hints + + + + + Monsters + Чудовища + + + + Allowed monsters + + + + + Banned monsters + + + + + Strength + + + + + Objects + Обекти + + + + Connections + + + + + Open + Отвори + + + + Save + Запази + + + + New + Нов + + + + Save as... + Запази като... + + + + Ctrl+Shift+S + Ctrl+Shift+S + + + + Add zone + + + + + Remove zone + + + + + + Del + Del + + + + Auto position + + + + + Ctrl+P + Ctrl+P + + + + Zoom in + Увеличи + + + + Ctrl++ + Ctrl++ + + + + Zoom out + Намали + + + + Ctrl+- + Ctrl+- + + + + Zoom auto + + + + + Ctrl+Shift+: + + + + + Zoom reset + Нулирай мащаба + + + + Ctrl+Shift+= + Ctrl+Shift+= + + + + Min + + + + + Max + + + + + Action + + + + + + Delete + + + + + ID: %1 + + + + + Max treasure: %1 + + + + + Player start + + + + + CPU start + + + + + Junction + + + + + Water + + + + + Sealed + + + + + + Random + + + + + Weak + Слаба + + + + Strong + Силна + + + + Zone A + + + + + Zone B + + + + + Guard + + + + + Road + + + + + Guarded + + + + + Fictive + + + + + Repulsive + + + + + Wide + + + + + Force portal + + + + + Yes + + + + + No + + + + + Zone A: %1 +Zone B: %2 +Guard: %3 + + + + + Confirmation + Потвърждение + + + + Unsaved changes will be lost, are you sure? + Незаписаните промени ще бъдат загубени, сигурни ли сте? + + + + Open template + + + + + VCMI templates(*.json) + + + + + Save template + + + + + VCMI templates (*.json) + + + + + + Enter Name + + + + + + Name: + + + + + Already existing! + + + + + At template with this name is already existing. + + + + + To few templates! + + + + + At least one template should remain after removing. + + + + + + Error + Грешка + + + + + Not implemented yet! + + + + + TerrainSelector + + + + Select Terrains + + + + + Terrain Selector + + + TimedEvent @@ -4012,6 +4688,40 @@ Add it to the map's required mods in Map->General settings. Всички съществуващи текстове за този език ще бъдат премахнати. Продължаване? + + TreasureSelector + + + + Select Treasures + + + + + Treasure Selector + + + + + Min + + + + + Max + + + + + Density + + + + + Action + + + Validator @@ -4476,25 +5186,25 @@ Add it to the map's required mods in Map->General settings. Отказ - + No template AI-generated, needs review by native speaker; delete this comment afterwards Няма шаблон - + No template for parameters specified. Random map cannot be generated. AI-generated, needs review by native speaker; delete this comment afterwards Няма шаблон за зададените параметри. Не може да се генерира случайна карта. - + RMG failure AI-generated, needs review by native speaker; delete this comment afterwards Грешка при генерация на карта - + [default] AI-generated, needs review by native speaker; delete this comment afterwards [по подразбиране] @@ -4503,31 +5213,31 @@ Add it to the map's required mods in Map->General settings. main - + Filepath of the map to open. AI-generated, needs review by native speaker; delete this comment afterwards Път до картата, която да се отвори. - + Extract original H3 archives into a separate folder. AI-generated, needs review by native speaker; delete this comment afterwards Извлечете оригиналните H3 архиви в отделна папка. - + From an extracted archive, it Splits TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 and Un44 into individual PNG's. AI-generated, needs review by native speaker; delete this comment afterwards От извлечен архив разделя TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 и Un44 на отделни PNG файлове. - + From an extracted archive, Converts single Images (found in Images folder) from .pcx to png. AI-generated, needs review by native speaker; delete this comment afterwards От извлечен архив конвертира единични изображения (в папката Images) от .pcx в .png. - + Delete original files, for the ones split / converted. AI-generated, needs review by native speaker; delete this comment afterwards Изтрий оригиналните файлове, за тези които са разделени/конвертирани. diff --git a/mapeditor/translation/chinese.ts b/mapeditor/translation/chinese.ts index 977e3157f..3022360b3 100644 --- a/mapeditor/translation/chinese.ts +++ b/mapeditor/translation/chinese.ts @@ -47,7 +47,7 @@ CampaignEditor - + VCMI Campaign Editor VCMI战役编辑器 @@ -115,37 +115,37 @@ 显示全部背景 - + Scenario editor 场景编辑器 - + Confirmation 确认 - + Unsaved changes will be lost, are you sure? 未保存的改动会丢失,你确定要这么做吗? - + Open map 打开地图 - + All supported campaigns (*.vcmp *.h3c);;VCMI campaigns(*.vcmp);;HoMM3 campaigns(*.h3c) 所有支持的战役文件 (*.vcmp *.h3c);;VCMI战役文件(*.vcmp);;英雄无敌3战役文件(*.h3c) - + Save campaign 保存战役 - + VCMI campaigns (*.vcmp) VCMI战役文件(*.vcmp) @@ -154,7 +154,7 @@ CampaignProperties - + Campaign Properties 战役属性 @@ -270,42 +270,42 @@ 结尾动画 - + Custom 自定义 - + Infix 中缀 - + X X - + Y Y - + Label Pos X 标签坐标X - + Label Pos Y 标签坐标Y - + Fewer Scenarios 场景减少 - + New Region setup supports fewer scenarios than before. Some will removed. Continue? 新的区域设置支持的场景数量减少,部分场景将会被移除。是否继续? @@ -338,6 +338,20 @@ 新事件 + + FactionSelector + + + + Select Factions + + + + + Faction Selector + + + GeneralSettings @@ -421,6 +435,16 @@ Artifact 宝物 + + + Save + 保存 + + + + Cancel + 取消 + HeroSkillsWidget @@ -553,7 +577,7 @@ MainWindow - + VCMI Map Editor VCMI地图编辑器 @@ -564,723 +588,729 @@ - + Open Recent 打开最近 - + Map 地图 - + Edit 编辑 - + View 视图 - + Player 玩家 - + Toolbar 工具栏 - + Minimap 小地图 - + Map Objects View 地图物体视图 - + Browser 浏览器 - + Inspector 检视器 - + Property 属性 - + Value - + Tools 工具 - + Painting 绘制 - + Terrains 地形 - + Roads 道路 - + Rivers 河流 - + Preview 预览 - + Open 打开 - + Ctrl+O Ctrl+O - + More... 更多 - + Save 保存 - + Ctrl+S Ctrl+S - + New 新建 - + Ctrl+N Ctrl+N - + Save as... 另存为 - + Ctrl+Shift+S Ctrl+Shift+S - - + + Campaign editor 战役编辑器 - - - - + + + Template editor + + + + + + + View underground 查看地下 - + Ctrl+U Ctrl+U - + Pass 可通行 - + Ctrl+Shift+P Ctrl+Shift+P - + Cut 剪切 - + Ctrl+X Ctrl+X - + Copy 复制 - + Ctrl+C Ctrl+C - + Paste 粘贴 - + Ctrl+V Ctrl+V - + Fill 填充 - + Fills the selection with obstacles 填充障碍物到选定区域 - + Grid 网格 - + Ctrl+G Ctrl+G - + General 通用 - + Map title and description 地图标题与描述 - + Ctrl+Enter Ctrl+Enter - + Players settings 玩家设置 - + Ctrl+P Ctrl+P - - + + Undo 撤销 - + Ctrl+Z Ctrl+Z - + Redo 重做 - + Ctrl+Y Ctrl+Y - + Erase 擦除 - + Del Del - + Neutral 中立 - + Ctrl+0 Ctrl+0 - + Validate 有效性验证 - + Ctrl+Shift+V Ctrl+Shift+V - - - - + + + + Update appearance 更新外观 - + Recreate obstacles 重建障碍物 - + Player 1 玩家1 - + Ctrl+1 Ctrl+1 - + Player 2 玩家2 - + Ctrl+2 Ctrl+2 - + Player 3 玩家3 - + Ctrl+3 Ctrl+3 - + Player 4 玩家4 - + Ctrl+4 Ctrl+4 - + Player 5 玩家5 - + Ctrl+5 Ctrl+5 - + Player 6 玩家6 - + Ctrl+6 Ctrl+6 - + Player 7 玩家7 - + Ctrl+7 Ctrl+7 - + Player 8 玩家8 - + Ctrl+8 Ctrl+8 - + Export as... 导出为 - + Ctrl+E Ctrl+E - + Translations 翻译 - + Ctrl+T Ctrl+T - - + + h3m converter h3m转换器 - + Ctrl+Shift+M Ctrl+Shift+M - - + + h3c converter h3c转换器 - + Ctrl+Shift+C Ctrl+Shift+C - + Lock 锁定 - + Lock objects on map to avoid unnecessary changes 锁定地图上的物体防止误操作 - + Ctrl+L Ctrl+L - + Unlock 解锁 - + Unlock all objects on the map 解锁地图上的所有物体 - + Ctrl+Shift+L Ctrl+Shift+L - + Zoom in 放大 - + Ctrl++ Ctrl++ - + Zoom out 缩小 - + Ctrl+- Ctrl+- - + Zoom reset 重置缩放 - + Ctrl+Shift+= Ctrl+Shift+= - + Confirmation 确认 - + Unsaved changes will be lost, are you sure? 未保存的改动会丢失,你确定要这么做吗? - + Mods are required 需要模组 - + Failed to open map 打开地图失败 - + Open map 打开地图 - + All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) 所有支持的地图类型(*.vmap *.h3m);;VCMI地图(*.vmap);;英雄无敌3地图(*.h3m) - + Recently Opened Files 最近打开文件 - + Map validation 地图校验 - + Map has critical problems and most probably will not be playable. Open Validator from the Map menu to see issues found 地图有致命问题,很可能无法游玩。打开地图菜单的校验功能以定位问题 - + Map has some errors. Open Validator from the Map menu to see issues found 地图有一些错误,打开地图菜单的校验功能以定位问题 - + Failed to save map 保存地图失败 - + Save map 保存地图 - + VCMI maps (*.vmap) VCMI地图(*.vmap) - + Type 类型 - + Towns 城镇 - + Objects 物体 - + Heroes 英雄 - + Artifacts 宝物 - + Resources 资源 - + Banks 宝屋 - + Dwellings 巢穴 - + Grounds 地面 - + Teleports 传送门 - + Mines 矿井 - + Triggers 触发器 - + Monsters 怪物 - + Quests 任务 - + Wog Objects Wog物体 - + Obstacles 障碍物 - + Other 其他 - + Mods loading problem 模组加载遇到问题 - + Critical error during Mods loading. Disable invalid mods and restart. 加载模组时遇到致命错误,请关闭无效模组后重启。 - - + + View surface 查看地上 - + No objects selected 未选择任何物体 - + This operation is irreversible. Do you want to continue? 此操作无法被撤销,你确定要继续么? - + Errors occurred. %1 objects were not updated 发生错误!%1 物体未完成更新 - + Save to image 保存为图片 - + Select maps to convert 选择待转换的地图 - + HoMM3 maps(*.h3m) 英雄无敌3地图文件(*.h3m) - + Choose directory to save converted maps 选择保存转换地图的目录 - + Operation completed 操作完成 - + Successfully converted %1 maps 成功转换 %1 地图 - + Failed to convert the map. Abort operation 转换地图失败,操作终止 - + Select campaign to convert 选择待转换的战役 - + HoMM3 campaigns (*.h3c) 英雄无敌3战役文件(*.h3c) - + Select destination file 选择目标文件 - + VCMI campaigns (*.vcmp) VCMI战役文件(*.vcmp) @@ -1288,29 +1318,29 @@ MapController - + Hero %1 cannot be created as NEUTRAL. 英雄 %1 无法在中立阵营被创建。 - + Missing Required Mod AI-generated, needs review by native speaker; delete this comment afterwards 缺少必需的模组 - + Do you want to do that now ? -AI-generated, needs review by native speaker; delete this comment afterwards + AI-generated, needs review by native speaker; delete this comment afterwards 你现在要这样做吗? - + This object's mod is mandatory for map to remain valid. AI-generated, needs review by native speaker; delete this comment afterwards 该对象的模组是地图保持有效所必需的。 @@ -1400,6 +1430,30 @@ Do you want to do that now ? 消息 + + MineSelector + + + + Select Mines + + + + + Mine Selector + + + + + Resource + 资源 + + + + Mines + 矿井 + + ModSettings @@ -1534,26 +1588,26 @@ Do you want to do that now ? - PlayerSettings + PlayerSettingsDialog - + Player settings - 玩家设置 + 玩家设置 - + Players - 玩家 + 玩家 - + 1 - 1 + 1 - + Ok - 确定 + 确定 @@ -1603,374 +1657,374 @@ Do you want to do that now ? 辅助技能: - + Compliant 屈服的 - + Friendly 友善的 - + Aggressive 好斗的 - + Hostile 有敌意的 - + Savage 野蛮的 - - + + No patrol 无巡逻 - + POWER RANK 实力排行 - + HERO TYPE 英雄类型 - + Hero class 英雄职业 - + Portrait 头像 - + Skills 技能 - + Artifacts 宝物 - - + + %n tile(s) %n格 - + Buildings 建筑 - + Events 事件 - + Resource 资源 - + Artifact reward 宝物奖励 - + Quest 任务 - + Identifier 标识符 - + ID ID - + SubID 子ID - + InstanceName 实力名称 - + IsStatic 是否静态 - - + + neutral 中立 - - + + Army 部队 - - - + + - - - - - + + + + + + Owner 所有者 - - + + Same as town 与城镇相同 - - + + Removable units 可移除单位 - - + + Placeholder type 占位符类型 - - + + Power rank 实力排行 - - - - + + + + Hero type 英雄类型 - - + + Experience 经验值 - - + + MALE 男性 - - + + FEMALE 女性 - - + + Gender 性别 - - + + Name 名字 - - + + Biography 传记 - - + + Spells 魔法 - - + + Patrol radius 巡逻半径 - - + + Town name 城镇名 - - + + Same as player 与玩家相同 - - - - - - - - - + + + + + + + + + Message 消息 - - + + Spell 魔法 - - + + Productivity 产量 - - - - + + + + Amount 数量 - + Character 角色 - + Select town 选择城镇 - - + + Never flees 从不撤退 - - + + Not growing 不增长 - - + + Reward 奖励 - - + + Remove after 访问后移除 - - + + Human trigger 人类触发 - - + + Cpu trigger 电脑触发 - - + + First visit text 首次访问文本 - - + + Next visit text 后续访问文本 - - + + Completed text 完成后文本 - - - + + + Repeat quest 重复任务 - - + + Time limit 世界限制 - + UNFLAGGABLE 没有旗帜 - + Can't place object 无法放置物体 - + There can only be one grail object on the map. 只能放置一个神器在地图上。 - + (submod of %1) AI-generated, needs review by native speaker; delete this comment afterwards (%1 的子模组) - + The mod '%1'%2, is required by an object on the map. Add it to the map's required mods in Map->General settings. should be consistent with Map->General menu entry translation @@ -2012,13 +2066,13 @@ Add it to the map's required mods in Map->General settings. - + Hero Level: %1 英雄等级:%1 - + Hero Experience: %1 英雄经验值:%1 @@ -2029,43 +2083,43 @@ Add it to the map's required mods in Map->General settings. - + Mana Percentage: %1 魔法值百分比:%1 - + Primary Skills: %1/%2/%3/%4 主属性:%1/%2/%3/%4 - + Resources: %1 资源:%1 - + Artifacts: %1 宝物:%1 - + Spells: %1 魔法:%1 - + Secondary Skills: %1 辅助技能:%1 - + Creatures: %1 生物:%1 @@ -2085,37 +2139,37 @@ Add it to the map's required mods in Map->General settings. 玩家:%1 - + Rewards: 奖励: - + Reward Message: %1 奖励消息:%1 - + Mana Diff: %1 魔法值变动:%1 - + Move Points: %1 移动点数:%1 - + Move Percentage: %1 移动点数百分比:%1 - + Spell Cast: %1 (%2) 施法:%1(%2) - + Bonuses: %1 奖励:%1 @@ -2541,18 +2595,18 @@ Add it to the map's required mods in Map->General settings. 玩家 - + None - + Day %1 %1 天 - - + + Reward %1 奖励 %1 @@ -2777,8 +2831,8 @@ Add it to the map's required mods in Map->General settings. - - + + Player position 玩家坐标 @@ -2828,49 +2882,49 @@ Add it to the map's required mods in Map->General settings. 玩家 - + Open map 打开地图 - + All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) 所有支持的地图类型(*.vmap *.h3m);;VCMI地图(*.vmap);;英雄无敌3地图(*.h3m) - - + + Error 错误 - - + + Could not open the file. 无法打开文件! - + Save map 保存地图 - + VCMI maps (*.vmap); VCMI地图(*.vmap); - + HoMM3 maps (*.h3m); 英雄无敌3地图(*.h3m); - + Source scenario 来源场景 - + Hero 英雄 @@ -2905,7 +2959,7 @@ Add it to the map's required mods in Map->General settings. - + Building 建筑 @@ -2932,14 +2986,14 @@ Add it to the map's required mods in Map->General settings. - + Secondary skill 辅助技能 - + Resource 资源 @@ -3025,46 +3079,671 @@ Add it to the map's required mods in Map->General settings. 稀有 (%1,%2,%3,%4) - + strongest hero 强大英雄 - + generated hero 普通英雄 - + random hero 随机英雄 - + %1 spell for %2 %2 的%1魔法 - + %1 %2 for %3 %3的%1 %2 - + %1 artifact for %2 %2的%1宝物 - + %1 spell scroll for %2 %2的%1魔法卷轴 - + Primary skill (Attack: %1, Defense: %2, Spell: %3, Knowledge: %4) for %5 %5的主属性(攻击力:%1,防御力%2,魔法:%3,知识:%4) + + TemplateEditor + + + + VCMI Template Editor + + + + + File + 文件 + + + + Edit + 编辑 + + + + View + 视图 + + + + Toolbar + 工具栏 + + + + Selected Template: + + + + + + + Add + 添加 + + + + Remove + 移除 + + + + Rename + + + + + General + 通用 + + + + Name + 名字 + + + + Description + + + + + Min Size + + + + + + + X + X + + + + + + Y + Y + + + + + + Z + + + + + Max Size + + + + + + Players + 玩家 + + + + Human + + + + + Allowed water content + + + + + + + None + + + + + + Normal + 普通 + + + + Islands + 岛屿 + + + + Zone + + + + + Visualisation + + + + + Position + + + + + + Size + + + + + ID + ID + + + + + Type + 类型 + + + + Owner + 所有者 + + + + Zone link + + + + + + + Mines + 矿井 + + + + + Custom objects + + + + + + Towns + 城镇 + + + + + Terrain + + + + + + + + Treasure + + + + + Town info + + + + + Town count + + + + + + + + Player + 玩家 + + + + + + + Neutral + 中立 + + + + Castle count + + + + + Town density + + + + + Castle density + + + + + Match terrain to town + + + + + Terrain types + + + + + Banned terrain types + + + + + Towns are same type + + + + + Allowed towns + + + + + Banned towns + + + + + Town hints + + + + + Monsters + 怪物 + + + + Allowed monsters + + + + + Banned monsters + + + + + Strength + + + + + Objects + 物体 + + + + Connections + + + + + Open + 打开 + + + + Save + 保存 + + + + New + 新建 + + + + Save as... + 另存为 + + + + Ctrl+Shift+S + Ctrl+Shift+S + + + + Add zone + + + + + Remove zone + + + + + + Del + Del + + + + Auto position + + + + + Ctrl+P + Ctrl+P + + + + Zoom in + 放大 + + + + Ctrl++ + Ctrl++ + + + + Zoom out + 缩小 + + + + Ctrl+- + Ctrl+- + + + + Zoom auto + + + + + Ctrl+Shift+: + + + + + Zoom reset + 重置缩放 + + + + Ctrl+Shift+= + Ctrl+Shift+= + + + + Min + + + + + Max + + + + + Action + + + + + + Delete + + + + + ID: %1 + + + + + Max treasure: %1 + + + + + Player start + + + + + CPU start + + + + + Junction + + + + + Water + + + + + Sealed + + + + + + Random + 随机 + + + + Weak + + + + + Strong + + + + + Zone A + + + + + Zone B + + + + + Guard + + + + + Road + + + + + Guarded + + + + + Fictive + + + + + Repulsive + + + + + Wide + + + + + Force portal + + + + + Yes + + + + + No + + + + + Zone A: %1 +Zone B: %2 +Guard: %3 + + + + + Confirmation + 确认 + + + + Unsaved changes will be lost, are you sure? + 未保存的改动会丢失,你确定要这么做吗? + + + + Open template + + + + + VCMI templates(*.json) + + + + + Save template + + + + + VCMI templates (*.json) + + + + + + Enter Name + + + + + + Name: + + + + + Already existing! + + + + + At template with this name is already existing. + + + + + To few templates! + + + + + At least one template should remain after removing. + + + + + + Error + 错误 + + + + + Not implemented yet! + + + + + TerrainSelector + + + + Select Terrains + + + + + Terrain Selector + + + TimedEvent @@ -3405,6 +4084,40 @@ Add it to the map's required mods in Map->General settings. 此语言的所有文本记录将被移除,确定继续吗? + + TreasureSelector + + + + Select Treasures + + + + + Treasure Selector + + + + + Min + + + + + Max + + + + + Density + + + + + Action + + + Validator @@ -3796,22 +4509,22 @@ Add it to the map's required mods in Map->General settings. 取消 - + No template 缺少模版 - + No template for parameters specified. Random map cannot be generated. 未指定任一模版作为参数,随机地图无法生成。 - + RMG failure 随机地图生成失败 - + [default] [默认] @@ -3819,27 +4532,27 @@ Add it to the map's required mods in Map->General settings. main - + Filepath of the map to open. 要打开的地图所在的文件路径。 - + Extract original H3 archives into a separate folder. 将原始H3文件解压到特定目录。 - + From an extracted archive, it Splits TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 and Un44 into individual PNG's. 数据文件解压后,将TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 und Un44切分为独立的PNG文件。 - + From an extracted archive, Converts single Images (found in Images folder) from .pcx to png. 数据文件解压后,将每一张图片(Images目录)从pcx格式转化为png格式。 - + Delete original files, for the ones split / converted. 当切分/转换完成后,原始文件将被删除。 diff --git a/mapeditor/translation/czech.ts b/mapeditor/translation/czech.ts index a24a9fb93..1383dcf34 100644 --- a/mapeditor/translation/czech.ts +++ b/mapeditor/translation/czech.ts @@ -47,7 +47,7 @@ CampaignEditor - + VCMI Campaign Editor Editor kampaní @@ -115,37 +115,37 @@ Zobrazit celé pozadí - + Scenario editor Editor scénáře - + Confirmation Potvrzení - + Unsaved changes will be lost, are you sure? Neuložené změny budou ztraceny, jste si jisti? - + Open map Otevřít mapu - + All supported campaigns (*.vcmp *.h3c);;VCMI campaigns(*.vcmp);;HoMM3 campaigns(*.h3c) Všechny typy kampaní (*.vcmp *.h3c);;Kampaně VCMI (*.vcmp);;Kampaně HoMM3 (*.h3c) - + Save campaign Uložit kampaň - + VCMI campaigns (*.vcmp) Kampaně VCMI (*.vcmp) @@ -154,7 +154,7 @@ CampaignProperties - + Campaign Properties Vlastnosti kampaně @@ -270,42 +270,42 @@ Závěrečné video - + Custom Vlastní - + Infix Vsuvka - + X X - + Y Y - + Label Pos X Pozice popisku X - + Label Pos Y Pozice popisku Y - + Fewer Scenarios Méně scénářů - + New Region setup supports fewer scenarios than before. Some will removed. Continue? Nové nastavení oblasti podporuje méně scénářů než dříve. Některé budou odstraněny. Pokračovat? @@ -338,6 +338,20 @@ Nová událost + + FactionSelector + + + + Select Factions + + + + + Faction Selector + + + GeneralSettings @@ -421,6 +435,16 @@ Artifact Artefakt + + + Save + Uložit + + + + Cancel + Zrušit + HeroSkillsWidget @@ -554,7 +578,7 @@ MainWindow - + VCMI Map Editor Editor map VCMI @@ -565,723 +589,729 @@ - + Open Recent Otevřít poslední - + Map Mapa - + Edit Upravit - + View Zobrazit - + Player Hráč - + Toolbar Panel nástrojů - + Minimap Minimapa - + Map Objects View Zobrazení objektů mapy - + Browser Prohlížeč - + Inspector Inspektor - + Property Vlastnost - + Value Hodnota - + Tools Nástroje - + Painting Malování - + Terrains Krajiny - + Roads Cesty - + Rivers Řeky - + Preview Náhled - + Open Otevřít - + Ctrl+O Ctrl+O - + More... Více... - + Save Uložit - + Ctrl+S Ctrl+S - + New Nový - + Ctrl+N Ctrl+N - + Save as... Uložit jako... - + Ctrl+Shift+S Ctrl+Shift+S - - + + Campaign editor Editor kampaní - - - - + + + Template editor + + + + + + + View underground Zobrazit podzemí - + Ctrl+U Ctrl+U - + Pass Průchodnost - + Ctrl+Shift+P Ctrl+Shift+P - + Cut Vyjmout - + Ctrl+X Ctrl+X - + Copy Kopírovat - + Ctrl+C Ctrl+C - + Paste Vložit - + Ctrl+V Ctrl+V - + Fill Vyplnit - + Fills the selection with obstacles Vyplní výběr překážkami - + Grid Mřížka - + Ctrl+G Ctrl+G - + General Nastavení - + Map title and description Název a popis mapy - + Ctrl+Enter Ctrl+Enter - + Players settings Hráči - + Ctrl+P Ctrl+P - - + + Undo Zpět - + Ctrl+Z Ctrl+Z - + Redo Znovu - + Ctrl+Y Ctrl+Y - + Erase Smazat - + Del Del - + Neutral Neutrální - + Ctrl+0 Ctrl+0 - + Validate Validátor - + Ctrl+Shift+V Ctrl+Shift+V - - - - + + + + Update appearance Aktualizovat vzhled - + Recreate obstacles Přetvořit překážky - + Player 1 Hráč 1 - + Ctrl+1 Ctrl+1 - + Player 2 Hráč 2 - + Ctrl+2 Ctrl+2 - + Player 3 Hráč 3 - + Ctrl+3 Ctrl+3 - + Player 4 Hráč 4 - + Ctrl+4 Ctrl+4 - + Player 5 Hráč 5 - + Ctrl+5 Ctrl+5 - + Player 6 Hráč 6 - + Ctrl+6 Ctrl+6 - + Player 7 Hráč 7 - + Ctrl+7 Ctrl+7 - + Player 8 Hráč 8 - + Ctrl+8 Ctrl+8 - + Export as... Exportovat jako... - + Ctrl+E Ctrl+E - + Translations Překlady - + Ctrl+T Ctrl+T - - + + h3m converter Konvertor map - + Ctrl+Shift+M Ctrl+Shift+M - - + + h3c converter Konvertor kampaní - + Ctrl+Shift+C Ctrl+Shift+C - + Lock Zamknout - + Lock objects on map to avoid unnecessary changes Zamknout objekty na mapě pro zabránění nadbytečných změn - + Ctrl+L Ctrl+L - + Unlock Odemknout - + Unlock all objects on the map Odemknout objekty na mapě - + Ctrl+Shift+L Ctrl+Shift+L - + Zoom in Přiblížit - + Ctrl++ Ctrl++ - + Zoom out Oddálit - + Ctrl+- Ctrl+- - + Zoom reset Zrušit přiblížení - + Ctrl+Shift+= Ctrl+Shift+= - + Confirmation Potvrzení - + Unsaved changes will be lost, are you sure? Neuložené změny budou ztraceny, jste si jisti? - + Mods are required Vyžadované modifikace - + Failed to open map Otevření mapy se nezdařilo - + Open map Otevřít mapu - + All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) Všechny podporované mapy (*.vmap *.h3m);; Mapy VCMI(*.vmap);;Mapy HoMM3(*.h3m) - + Recently Opened Files Naposledny otevřené soubory - + Map validation Kontrola mapy - + Map has critical problems and most probably will not be playable. Open Validator from the Map menu to see issues found Mapa obsahuje kritické problémy a pravděpodobně nebude hratelná. Otevřete Validátor z nabídky Mapa, abyste zobrazili nalezené chyby - + Map has some errors. Open Validator from the Map menu to see issues found Mapa obsahuje chyby. Otevřete Validátor z nabídky Mapa, abyste zobrazili nalezené problémy - + Failed to save map Nepodařilo se uložit mapu - + Save map Uložit mapu - + VCMI maps (*.vmap) Mapy VCMI (*.vmap) - + Type Druh - + Towns Města - + Objects Objekty - + Heroes Hrdinové - + Artifacts Artefakty - + Resources Suroviny - + Banks Zásobárny - + Dwellings Obydlí - + Grounds Země - + Teleports Teleporty - + Mines Doly - + Triggers Spouštěče - + Monsters Jednotky - + Quests Úkoly - + Wog Objects WoG objekty - + Obstacles Překážky - + Other Ostatní - + Mods loading problem Problém s načítáním modifikací - + Critical error during Mods loading. Disable invalid mods and restart. Kritická chyba při načítání modifikací. Deaktivujte neplatné modifikace a restartujte. - - + + View surface Zobrazit povrch - + No objects selected Nejsou vybrány žádné objekty - + This operation is irreversible. Do you want to continue? Tento úkon je nezvratný. Chcete pokračovat? - + Errors occurred. %1 objects were not updated Nastaly chyby. Nebylo aktualizováno %1 objektů - + Save to image Uložit do obrázku - + Select maps to convert Vyberte mapy pro převod - + HoMM3 maps(*.h3m) Mapy HoMM3 (*.h3m) - + Choose directory to save converted maps Vyberte složku pro uložení převedených map - + Operation completed Operace dokončena - + Successfully converted %1 maps Úspěšně převedeno %1 map - + Failed to convert the map. Abort operation Převod map selhal. Úkon zrušen - + Select campaign to convert Vyberte kampaň ke konverzi - + HoMM3 campaigns (*.h3c) Kampaně HoMM3 (*.h3c) - + Select destination file Vyberte cílový soubor - + VCMI campaigns (*.vcmp) Kampaně VCMI (*.vcmp) @@ -1289,29 +1319,29 @@ MapController - + Hero %1 cannot be created as NEUTRAL. Hrdina %1 nemůže být vytvořen jako NEUTRÁLNÍ. - + Missing Required Mod AI-generated, needs review by native speaker; delete this comment afterwards Chybějící povinný mod - + Do you want to do that now ? -AI-generated, needs review by native speaker; delete this comment afterwards + AI-generated, needs review by native speaker; delete this comment afterwards Chcete to udělat nyní? - + This object's mod is mandatory for map to remain valid. AI-generated, needs review by native speaker; delete this comment afterwards Mod tohoto objektu je povinný, aby mapa zůstala platná. @@ -1401,6 +1431,30 @@ Chcete to udělat nyní? Zpráva + + MineSelector + + + + Select Mines + + + + + Mine Selector + + + + + Resource + Surovina + + + + Mines + Doly + + ModSettings @@ -1535,26 +1589,26 @@ Chcete to udělat nyní? - PlayerSettings + PlayerSettingsDialog - + Player settings - Nastavení hráčů + Nastavení hráčů - + Players - Hráči + Hráči - + 1 - 1 + 1 - + Ok - OK + OK @@ -1604,69 +1658,69 @@ Chcete to udělat nyní? Dovednosti: - + Compliant Ochotná - + Friendly Přátelská - + Aggressive Agresivní - + Hostile Nepřátelská - + Savage Brutální - - + + No patrol Bez hlídky - + POWER RANK Hodnocení síly - + HERO TYPE Typ hrdiny - + Hero class Rasa hrdiny - + Portrait Portrét - + Skills Dovednosti - + Artifacts Artefakty - - + + %n tile(s) %n pole @@ -1675,305 +1729,305 @@ Chcete to udělat nyní? - + Buildings Budovy - + Events Události - + Resource Surovina - + Artifact reward Odměna: artefakt - + Quest Úkol - + Identifier Identifikátor - + ID ID - + SubID SubID - + InstanceName Jméno instance - + IsStatic Statický - - + + neutral neutrální - - + + Army Armáda - - - + + - - - - - + + + + + + Owner Vlastník - - + + Same as town Stejná jako město - - + + Removable units Odstranitelné jednotky - - + + Placeholder type Typ výplně - - + + Power rank Hodnocení síly - - - - + + + + Hero type Typ hrdiny - - + + Experience Zkušenosti - - + + MALE Muž - - + + FEMALE Žena - - + + Gender Pohlaví - - + + Name Jméno - - + + Biography Životopis - - + + Spells Kouzla - - + + Patrol radius Poloměr hlídky - - + + Town name Jméno města - - + + Same as player Stejná jako hráč - - - - - - - - - + + + + + + + + + Message Zpráva - - + + Spell Kouzlo - - + + Productivity Produktivita - - - - + + + + Amount Množství - + Character Postava - + Select town Vyber město - - + + Never flees Nikdy neutíká - - + + Not growing Neroste - - + + Reward Odměna - - + + Remove after Odstranit po - - + + Human trigger Lidský spouštěč - - + + Cpu trigger AI spouštěč - - + + First visit text Text při první návštěvě - - + + Next visit text Text při další návštěvě - - + + Completed text Text při dokončení - - - + + + Repeat quest Opakovatelný úkol - - + + Time limit Časový limit - + UNFLAGGABLE NEOZNAČITELNÝ - + Can't place object Objekt nelze umístit - + There can only be one grail object on the map. Na mapě může být pouze jeden grál. - + (submod of %1) AI-generated, needs review by native speaker; delete this comment afterwards (submodul %1) - + The mod '%1'%2, is required by an object on the map. Add it to the map's required mods in Map->General settings. should be consistent with Map->General menu entry translation @@ -2015,13 +2069,13 @@ Přidejte ho do povinných modů mapy v nabídce Mapa->Obecné nastavení. - + Hero Level: %1 Úroveň hrdiny: %1 - + Hero Experience: %1 Zkušenosti hrdiny: %1 @@ -2032,43 +2086,43 @@ Přidejte ho do povinných modů mapy v nabídce Mapa->Obecné nastavení. - + Mana Percentage: %1 Podíl magické energie: %1 - + Primary Skills: %1/%2/%3/%4 Primární dovednosti: %1/%2/%3/%4 - + Resources: %1 Suroviny: %1 - + Artifacts: %1 Artefakty: %1 - + Spells: %1 Kouzla: %1 - + Secondary Skills: %1 Dovednosti: %1 - + Creatures: %1 Jednotky: %1 @@ -2088,37 +2142,37 @@ Přidejte ho do povinných modů mapy v nabídce Mapa->Obecné nastavení.Hráči: %1 - + Rewards: Odměny: - + Reward Message: %1 Zpráva o odměně: %1 - + Mana Diff: %1 Spotřeba magické energie: %1 - + Move Points: %1 Body pohybu:%1 - + Move Percentage: %1 Podíl pohybu: %1 - + Spell Cast: %1 (%2) Seslané kouzlo: %1 (%2) - + Bonuses: %1 Bonusy: %1 @@ -2544,18 +2598,18 @@ Přidejte ho do povinných modů mapy v nabídce Mapa->Obecné nastavení.Hráči - + None Žádný - + Day %1 Den %1 - - + + Reward %1 Odměna %1 @@ -2779,8 +2833,8 @@ Přidejte ho do povinných modů mapy v nabídce Mapa->Obecné nastavení. - - + + Player position Pozice hráče @@ -2830,49 +2884,49 @@ Přidejte ho do povinných modů mapy v nabídce Mapa->Obecné nastavení.Hráč - + Open map Otevřít mapu - + All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) Všechny podporované mapy (*.vmap *.h3m);; Mapy VCMI(*.vmap);;Mapy HoMM3(*.h3m) - - + + Error Chyba - - + + Could not open the file. Soubor se nepodařilo otevřít. - + Save map Uložit mapu - + VCMI maps (*.vmap); Mapy VCMI (*.vmap); - + HoMM3 maps (*.h3m); Mapy HoMM3 (*.h3m); - + Source scenario Výchozí scénář - + Hero Hrdina @@ -2907,7 +2961,7 @@ Přidejte ho do povinných modů mapy v nabídce Mapa->Obecné nastavení. - + Building Budiva @@ -2934,14 +2988,14 @@ Přidejte ho do povinných modů mapy v nabídce Mapa->Obecné nastavení. - + Secondary skill Druhotné schopnosti - + Resource Surovina @@ -3027,46 +3081,671 @@ Přidejte ho do povinných modů mapy v nabídce Mapa->Obecné nastavení.Vzácné (%1, %2, %3, %4) - + strongest hero nejsilnější hrdina - + generated hero Vygenerovaný hrdina - + random hero náhodný hrdina - + %1 spell for %2 Kouzlo %1 pro %2 - + %1 %2 for %3 %1 %2 pro %3 - + %1 artifact for %2 Artefakt %1 pro %2 - + %1 spell scroll for %2 Kouzelný svitek %1 pro %2 - + Primary skill (Attack: %1, Defense: %2, Spell: %3, Knowledge: %4) for %5 Základní schopnosti (Útok: %1, Obrana: %2, Síla kouzel: %3, Znalosti: %4) pro %5 + + TemplateEditor + + + + VCMI Template Editor + + + + + File + Soubor + + + + Edit + Upravit + + + + View + Zobrazit + + + + Toolbar + Panel nástrojů + + + + Selected Template: + + + + + + + Add + Přidat + + + + Remove + Odebrat + + + + Rename + + + + + General + + + + + Name + Jméno + + + + Description + + + + + Min Size + + + + + + + X + X + + + + + + Y + Y + + + + + + Z + + + + + Max Size + + + + + + Players + Hráči + + + + Human + + + + + Allowed water content + + + + + + + None + + + + + + Normal + Normální + + + + Islands + Ostrovy + + + + Zone + + + + + Visualisation + + + + + Position + + + + + + Size + + + + + ID + ID + + + + + Type + + + + + Owner + Vlastník + + + + Zone link + + + + + + + Mines + Doly + + + + + Custom objects + + + + + + Towns + Města + + + + + Terrain + + + + + + + + Treasure + + + + + Town info + + + + + Town count + + + + + + + + Player + Hráč + + + + + + + Neutral + Neutrální + + + + Castle count + + + + + Town density + + + + + Castle density + + + + + Match terrain to town + + + + + Terrain types + + + + + Banned terrain types + + + + + Towns are same type + + + + + Allowed towns + + + + + Banned towns + + + + + Town hints + + + + + Monsters + Jednotky + + + + Allowed monsters + + + + + Banned monsters + + + + + Strength + + + + + Objects + Objekty + + + + Connections + + + + + Open + Otevřít + + + + Save + Uložit + + + + New + + + + + Save as... + Uložit jako... + + + + Ctrl+Shift+S + Ctrl+Shift+S + + + + Add zone + + + + + Remove zone + + + + + + Del + Del + + + + Auto position + + + + + Ctrl+P + Ctrl+P + + + + Zoom in + Přiblížit + + + + Ctrl++ + Ctrl++ + + + + Zoom out + Oddálit + + + + Ctrl+- + Ctrl+- + + + + Zoom auto + + + + + Ctrl+Shift+: + + + + + Zoom reset + Zrušit přiblížení + + + + Ctrl+Shift+= + Ctrl+Shift+= + + + + Min + + + + + Max + + + + + Action + + + + + + Delete + + + + + ID: %1 + + + + + Max treasure: %1 + + + + + Player start + + + + + CPU start + + + + + Junction + + + + + Water + + + + + Sealed + + + + + + Random + + + + + Weak + Slabá + + + + Strong + Silná + + + + Zone A + + + + + Zone B + + + + + Guard + + + + + Road + + + + + Guarded + + + + + Fictive + + + + + Repulsive + + + + + Wide + + + + + Force portal + + + + + Yes + + + + + No + + + + + Zone A: %1 +Zone B: %2 +Guard: %3 + + + + + Confirmation + Potvrzení + + + + Unsaved changes will be lost, are you sure? + Neuložené změny budou ztraceny, jste si jisti? + + + + Open template + + + + + VCMI templates(*.json) + + + + + Save template + + + + + VCMI templates (*.json) + + + + + + Enter Name + + + + + + Name: + + + + + Already existing! + + + + + At template with this name is already existing. + + + + + To few templates! + + + + + At least one template should remain after removing. + + + + + + Error + Chyba + + + + + Not implemented yet! + + + + + TerrainSelector + + + + Select Terrains + + + + + Terrain Selector + + + TimedEvent @@ -3407,6 +4086,40 @@ Přidejte ho do povinných modů mapy v nabídce Mapa->Obecné nastavení.Všechny textové záznamy pro tento jazyk budou odstraněny. Pokračovat? + + TreasureSelector + + + + Select Treasures + + + + + Treasure Selector + + + + + Min + + + + + Max + + + + + Density + + + + + Action + + + Validator @@ -3798,22 +4511,22 @@ Přidejte ho do povinných modů mapy v nabídce Mapa->Obecné nastavení.Zrušit - + No template Bez šablony - + No template for parameters specified. Random map cannot be generated. Žádná šablona pro vybrané parametry. Náhodná mapa nemůže být vygenerována. - + RMG failure Chyba RMG - + [default] [výchozí] @@ -3821,27 +4534,27 @@ Přidejte ho do povinných modů mapy v nabídce Mapa->Obecné nastavení. main - + Filepath of the map to open. Cesta k souboru mapy, kterou chcete otevřít. - + Extract original H3 archives into a separate folder. Rozbalit originální archivy H3 do zvláštní složky. - + From an extracted archive, it Splits TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 and Un44 into individual PNG's. Z rozbaleného archivu rozdělí TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 a Un44 do jednotlivých PNG. - + From an extracted archive, Converts single Images (found in Images folder) from .pcx to png. Z rozbaleného archivu převede jednoduché obrázky (nalezené ve složce Images) z .pcx do png. - + Delete original files, for the ones split / converted. Odstranit původní soubory pro ty, které byly rozděleny nebo převedeny. diff --git a/mapeditor/translation/english.ts b/mapeditor/translation/english.ts index ee669a3bd..39513e0b6 100644 --- a/mapeditor/translation/english.ts +++ b/mapeditor/translation/english.ts @@ -47,7 +47,7 @@ CampaignEditor - + VCMI Campaign Editor @@ -115,37 +115,37 @@ - + Scenario editor - + Confirmation - + Unsaved changes will be lost, are you sure? - + Open map - + All supported campaigns (*.vcmp *.h3c);;VCMI campaigns(*.vcmp);;HoMM3 campaigns(*.h3c) - + Save campaign - + VCMI campaigns (*.vcmp) @@ -154,7 +154,7 @@ CampaignProperties - + Campaign Properties @@ -270,42 +270,42 @@ - + Custom - + Infix - + X - + Y - + Label Pos X - + Label Pos Y - + Fewer Scenarios - + New Region setup supports fewer scenarios than before. Some will removed. Continue? @@ -338,6 +338,20 @@ + + FactionSelector + + + + Select Factions + + + + + Faction Selector + + + GeneralSettings @@ -421,6 +435,16 @@ Artifact + + + Save + + + + + Cancel + + HeroSkillsWidget @@ -553,7 +577,7 @@ MainWindow - + VCMI Map Editor @@ -564,723 +588,729 @@ - + Open Recent - + Map - + Edit - + View - + Player - + Toolbar - + Minimap - + Map Objects View - + Browser - + Inspector - + Property - + Value - + Tools - + Painting - + Terrains - + Roads - + Rivers - + Preview - + Open - + Ctrl+O - + More... - + Save - + Ctrl+S - + New - + Ctrl+N - + Save as... - + Ctrl+Shift+S - - + + Campaign editor - - - - + + + Template editor + + + + + + + View underground - + Ctrl+U - + Pass - + Ctrl+Shift+P - + Cut - + Ctrl+X - + Copy - + Ctrl+C - + Paste - + Ctrl+V - + Fill - + Fills the selection with obstacles - + Grid - + Ctrl+G - + General - + Map title and description - + Ctrl+Enter - + Players settings - + Ctrl+P - - + + Undo - + Ctrl+Z - + Redo - + Ctrl+Y - + Erase - + Del - + Neutral - + Ctrl+0 - + Validate - + Ctrl+Shift+V - - - - + + + + Update appearance - + Recreate obstacles - + Player 1 - + Ctrl+1 - + Player 2 - + Ctrl+2 - + Player 3 - + Ctrl+3 - + Player 4 - + Ctrl+4 - + Player 5 - + Ctrl+5 - + Player 6 - + Ctrl+6 - + Player 7 - + Ctrl+7 - + Player 8 - + Ctrl+8 - + Export as... - + Ctrl+E - + Translations - + Ctrl+T - - + + h3m converter - + Ctrl+Shift+M - - + + h3c converter - + Ctrl+Shift+C - + Lock - + Lock objects on map to avoid unnecessary changes - + Ctrl+L - + Unlock - + Unlock all objects on the map - + Ctrl+Shift+L - + Zoom in - + Ctrl++ - + Zoom out - + Ctrl+- - + Zoom reset - + Ctrl+Shift+= - + Confirmation - + Unsaved changes will be lost, are you sure? - + Mods are required - + Failed to open map - + Open map - + All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) - + Recently Opened Files - + Map validation - + Map has critical problems and most probably will not be playable. Open Validator from the Map menu to see issues found - + Map has some errors. Open Validator from the Map menu to see issues found - + Failed to save map - + Save map - + VCMI maps (*.vmap) - + Type - + Towns - + Objects - + Heroes - + Artifacts - + Resources - + Banks - + Dwellings - + Grounds - + Teleports - + Mines - + Triggers - + Monsters - + Quests - + Wog Objects - + Obstacles - + Other - + Mods loading problem - + Critical error during Mods loading. Disable invalid mods and restart. - - + + View surface - + No objects selected - + This operation is irreversible. Do you want to continue? - + Errors occurred. %1 objects were not updated - + Save to image - + Select maps to convert - + HoMM3 maps(*.h3m) - + Choose directory to save converted maps - + Operation completed - + Successfully converted %1 maps - + Failed to convert the map. Abort operation - + Select campaign to convert - + HoMM3 campaigns (*.h3c) - + Select destination file - + VCMI campaigns (*.vcmp) @@ -1288,24 +1318,24 @@ MapController - + Hero %1 cannot be created as NEUTRAL. - + Missing Required Mod - + Do you want to do that now ? - + This object's mod is mandatory for map to remain valid. @@ -1394,6 +1424,30 @@ Do you want to do that now ? + + MineSelector + + + + Select Mines + + + + + Mine Selector + + + + + Resource + + + + + Mines + + + ModSettings @@ -1524,24 +1578,24 @@ Do you want to do that now ? - PlayerSettings + PlayerSettingsDialog - + Player settings - + Players - + 1 - + Ok @@ -1593,69 +1647,69 @@ Do you want to do that now ? - + Compliant - + Friendly - + Aggressive - + Hostile - + Savage - - + + No patrol - + POWER RANK - + HERO TYPE - + Hero class - + Portrait - + Skills - + Artifacts - - + + %n tile(s) @@ -1663,304 +1717,304 @@ Do you want to do that now ? - + Buildings - + Events - + Resource - + Artifact reward - + Quest - + Identifier - + ID - + SubID - + InstanceName - + IsStatic - - + + neutral - - + + Army - - - + + - - - - - + + + + + + Owner - - + + Same as town - - + + Removable units - - + + Placeholder type - - + + Power rank - - - - + + + + Hero type - - + + Experience - - + + MALE - - + + FEMALE - - + + Gender - - + + Name - - + + Biography - - + + Spells - - + + Patrol radius - - + + Town name - - + + Same as player - - - - - - - - - + + + + + + + + + Message - - + + Spell - - + + Productivity - - - - + + + + Amount - + Character - + Select town - - + + Never flees - - + + Not growing - - + + Reward - - + + Remove after - - + + Human trigger - - + + Cpu trigger - - + + First visit text - - + + Next visit text - - + + Completed text - - - + + + Repeat quest - - + + Time limit - + UNFLAGGABLE - + Can't place object - + There can only be one grail object on the map. - + (submod of %1) - + The mod '%1'%2, is required by an object on the map. Add it to the map's required mods in Map->General settings. should be consistent with Map->General menu entry translation @@ -2000,13 +2054,13 @@ Add it to the map's required mods in Map->General settings. - + Hero Level: %1 - + Hero Experience: %1 @@ -2017,43 +2071,43 @@ Add it to the map's required mods in Map->General settings. - + Mana Percentage: %1 - + Primary Skills: %1/%2/%3/%4 - + Resources: %1 - + Artifacts: %1 - + Spells: %1 - + Secondary Skills: %1 - + Creatures: %1 @@ -2073,37 +2127,37 @@ Add it to the map's required mods in Map->General settings. - + Rewards: - + Reward Message: %1 - + Mana Diff: %1 - + Move Points: %1 - + Move Percentage: %1 - + Spell Cast: %1 (%2) - + Bonuses: %1 @@ -2529,18 +2583,18 @@ Add it to the map's required mods in Map->General settings. - + None - + Day %1 - - + + Reward %1 @@ -2764,8 +2818,8 @@ Add it to the map's required mods in Map->General settings. - - + + Player position @@ -2815,49 +2869,49 @@ Add it to the map's required mods in Map->General settings. - + Open map - + All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) - - + + Error - - + + Could not open the file. - + Save map - + VCMI maps (*.vmap); - + HoMM3 maps (*.h3m); - + Source scenario - + Hero @@ -2892,7 +2946,7 @@ Add it to the map's required mods in Map->General settings. - + Building @@ -2919,14 +2973,14 @@ Add it to the map's required mods in Map->General settings. - + Secondary skill - + Resource @@ -3012,46 +3066,671 @@ Add it to the map's required mods in Map->General settings. - + strongest hero - + generated hero - + random hero - + %1 spell for %2 - + %1 %2 for %3 - + %1 artifact for %2 - + %1 spell scroll for %2 - + Primary skill (Attack: %1, Defense: %2, Spell: %3, Knowledge: %4) for %5 + + TemplateEditor + + + + VCMI Template Editor + + + + + File + + + + + Edit + + + + + View + + + + + Toolbar + + + + + Selected Template: + + + + + + + Add + + + + + Remove + + + + + Rename + + + + + General + + + + + Name + + + + + Description + + + + + Min Size + + + + + + + X + + + + + + + Y + + + + + + + Z + + + + + Max Size + + + + + + Players + + + + + Human + + + + + Allowed water content + + + + + + + None + + + + + + Normal + + + + + Islands + + + + + Zone + + + + + Visualisation + + + + + Position + + + + + + Size + + + + + ID + + + + + + Type + + + + + Owner + + + + + Zone link + + + + + + + Mines + + + + + + Custom objects + + + + + + Towns + + + + + + Terrain + + + + + + + + Treasure + + + + + Town info + + + + + Town count + + + + + + + + Player + + + + + + + + Neutral + + + + + Castle count + + + + + Town density + + + + + Castle density + + + + + Match terrain to town + + + + + Terrain types + + + + + Banned terrain types + + + + + Towns are same type + + + + + Allowed towns + + + + + Banned towns + + + + + Town hints + + + + + Monsters + + + + + Allowed monsters + + + + + Banned monsters + + + + + Strength + + + + + Objects + + + + + Connections + + + + + Open + + + + + Save + + + + + New + + + + + Save as... + + + + + Ctrl+Shift+S + + + + + Add zone + + + + + Remove zone + + + + + + Del + + + + + Auto position + + + + + Ctrl+P + + + + + Zoom in + + + + + Ctrl++ + + + + + Zoom out + + + + + Ctrl+- + + + + + Zoom auto + + + + + Ctrl+Shift+: + + + + + Zoom reset + + + + + Ctrl+Shift+= + + + + + Min + + + + + Max + + + + + Action + + + + + + Delete + + + + + ID: %1 + + + + + Max treasure: %1 + + + + + Player start + + + + + CPU start + + + + + Junction + + + + + Water + + + + + Sealed + + + + + + Random + + + + + Weak + + + + + Strong + + + + + Zone A + + + + + Zone B + + + + + Guard + + + + + Road + + + + + Guarded + + + + + Fictive + + + + + Repulsive + + + + + Wide + + + + + Force portal + + + + + Yes + + + + + No + + + + + Zone A: %1 +Zone B: %2 +Guard: %3 + + + + + Confirmation + + + + + Unsaved changes will be lost, are you sure? + + + + + Open template + + + + + VCMI templates(*.json) + + + + + Save template + + + + + VCMI templates (*.json) + + + + + + Enter Name + + + + + + Name: + + + + + Already existing! + + + + + At template with this name is already existing. + + + + + To few templates! + + + + + At least one template should remain after removing. + + + + + + Error + + + + + + Not implemented yet! + + + + + TerrainSelector + + + + Select Terrains + + + + + Terrain Selector + + + TimedEvent @@ -3392,6 +4071,40 @@ Add it to the map's required mods in Map->General settings. + + TreasureSelector + + + + Select Treasures + + + + + Treasure Selector + + + + + Min + + + + + Max + + + + + Density + + + + + Action + + + Validator @@ -3781,22 +4494,22 @@ Add it to the map's required mods in Map->General settings. - + No template - + No template for parameters specified. Random map cannot be generated. - + RMG failure - + [default] @@ -3804,27 +4517,27 @@ Add it to the map's required mods in Map->General settings. main - + Filepath of the map to open. - + Extract original H3 archives into a separate folder. - + From an extracted archive, it Splits TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 and Un44 into individual PNG's. - + From an extracted archive, Converts single Images (found in Images folder) from .pcx to png. - + Delete original files, for the ones split / converted. diff --git a/mapeditor/translation/finnish.ts b/mapeditor/translation/finnish.ts index 8ee205d20..a6e34d8fd 100644 --- a/mapeditor/translation/finnish.ts +++ b/mapeditor/translation/finnish.ts @@ -54,7 +54,7 @@ CampaignEditor - + VCMI Campaign Editor AI-generated, needs review by native speaker; delete this comment afterwards VCMI-kampanjamuokkain @@ -135,43 +135,43 @@ Näytä koko taustakuva - + Scenario editor AI-generated, needs review by native speaker; delete this comment afterwards Skenaariomuokkain - + Confirmation AI-generated, needs review by native speaker; delete this comment afterwards Vahvistus - + Unsaved changes will be lost, are you sure? AI-generated, needs review by native speaker; delete this comment afterwards Tallentamattomat muutokset menetetään,oletko varma? - + Open map AI-generated, needs review by native speaker; delete this comment afterwards Avaa kartta - + All supported campaigns (*.vcmp *.h3c);;VCMI campaigns(*.vcmp);;HoMM3 campaigns(*.h3c) AI-generated, needs review by native speaker; delete this comment afterwards Kaikki tuetut kampanjat (*.vcmp *.h3c);;VCMI-kampanjat (*.vcmp);;HoMM3-kampanjat (*.h3c) - + Save campaign AI-generated, needs review by native speaker; delete this comment afterwards Tallenna kampanja - + VCMI campaigns (*.vcmp) AI-generated, needs review by native speaker; delete this comment afterwards VCMI-kampanjat (*.vcmp) @@ -181,7 +181,7 @@ CampaignProperties - + Campaign Properties AI-generated, needs review by native speaker; delete this comment afterwards Kampanjan ominaisuudet @@ -320,49 +320,49 @@ Lopetusvideo - + Custom AI-generated, needs review by native speaker; delete this comment afterwards Mukautettu - + Infix AI-generated, needs review by native speaker; delete this comment afterwards Väliosa - + X AI-generated, needs review by native speaker; delete this comment afterwards X - + Y AI-generated, needs review by native speaker; delete this comment afterwards Y - + Label Pos X AI-generated, needs review by native speaker; delete this comment afterwards Tekstin sijainti X - + Label Pos Y AI-generated, needs review by native speaker; delete this comment afterwards Tekstin sijainti Y - + Fewer Scenarios AI-generated, needs review by native speaker; delete this comment afterwards Vähemmän skenaarioita - + New Region setup supports fewer scenarios than before. Some will removed. Continue? AI-generated, needs review by native speaker; delete this comment afterwards Uusi alueasetus tukee vähemmän skenaarioita kuin aiemmin. Jotkut poistetaan. Jatketaanko? @@ -401,6 +401,20 @@ Uusi tapahtuma + + FactionSelector + + + + Select Factions + + + + + Faction Selector + + + GeneralSettings @@ -499,6 +513,16 @@ AI-generated, needs review by native speaker; delete this comment afterwards Artefakti + + + Save + Tallenna + + + + Cancel + Peruuta + HeroSkillsWidget @@ -654,7 +678,7 @@ MainWindow - + VCMI Map Editor VCMI-karttaeditori @@ -666,864 +690,870 @@ - + Open Recent AI-generated, needs review by native speaker; delete this comment afterwards Avaa viimeisimmät - + Map AI-generated, needs review by native speaker; delete this comment afterwards Kartta - + Edit AI-generated, needs review by native speaker; delete this comment afterwards Muokkaa - + View AI-generated, needs review by native speaker; delete this comment afterwards Näytä - + Player AI-generated, needs review by native speaker; delete this comment afterwards Pelaaja - + Toolbar AI-generated, needs review by native speaker; delete this comment afterwards Työkalupalkki - + Minimap AI-generated, needs review by native speaker; delete this comment afterwards Minikartta - + Map Objects View AI-generated, needs review by native speaker; delete this comment afterwards Karttaobjektien näkymä - + Browser AI-generated, needs review by native speaker; delete this comment afterwards Selain - + Inspector AI-generated, needs review by native speaker; delete this comment afterwards Tarkastaja - + Property AI-generated, needs review by native speaker; delete this comment afterwards Ominaisuus - + Value AI-generated, needs review by native speaker; delete this comment afterwards Arvo - + Tools AI-generated, needs review by native speaker; delete this comment afterwards Työkalut - + Painting AI-generated, needs review by native speaker; delete this comment afterwards Maalaus - + Terrains AI-generated, needs review by native speaker; delete this comment afterwards Maastot - + Roads AI-generated, needs review by native speaker; delete this comment afterwards Tiet - + Rivers AI-generated, needs review by native speaker; delete this comment afterwards Joet - + Preview AI-generated, needs review by native speaker; delete this comment afterwards Esikatselu - + Open AI-generated, needs review by native speaker; delete this comment afterwards Avaa - + Ctrl+O AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+O - + More... AI-generated, needs review by native speaker; delete this comment afterwards Lisää... - + Save AI-generated, needs review by native speaker; delete this comment afterwards Tallenna - + Ctrl+S AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+S - + New AI-generated, needs review by native speaker; delete this comment afterwards Uusi - + Ctrl+N AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+N - + Save as... AI-generated, needs review by native speaker; delete this comment afterwards Tallenna nimellä... - + Ctrl+Shift+S AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+S - - + + Campaign editor AI-generated, needs review by native speaker; delete this comment afterwards Kampanjamuokkain - - - - + + + Template editor + + + + + + + View underground AI-generated, needs review by native speaker; delete this comment afterwards Näytä maanalainen - + Ctrl+U AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+U - + Pass AI-generated, needs review by native speaker; delete this comment afterwards Ohita - + Ctrl+Shift+P AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+P - + Cut AI-generated, needs review by native speaker; delete this comment afterwards Leikkaa - + Ctrl+X AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+X - + Copy AI-generated, needs review by native speaker; delete this comment afterwards Kopioi - + Ctrl+C AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+C - + Paste AI-generated, needs review by native speaker; delete this comment afterwards Liitä - + Ctrl+V AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+V - + Fill AI-generated, needs review by native speaker; delete this comment afterwards Täytä - + Fills the selection with obstacles AI-generated, needs review by native speaker; delete this comment afterwards Täyttää valinnan esteillä - + Grid AI-generated, needs review by native speaker; delete this comment afterwards Ruudukko - + Ctrl+G AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+G - + General AI-generated, needs review by native speaker; delete this comment afterwards Yleiset - + Map title and description AI-generated, needs review by native speaker; delete this comment afterwards Kartan nimi ja kuvaus - + Ctrl+Enter AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Enter - + Players settings AI-generated, needs review by native speaker; delete this comment afterwards Pelaaja-asetukset - + Ctrl+P AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+P - - + + Undo AI-generated, needs review by native speaker; delete this comment afterwards Kumoa - + Ctrl+Z AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Z - + Redo AI-generated, needs review by native speaker; delete this comment afterwards Tee uudelleen - + Ctrl+Y AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Y - + Erase AI-generated, needs review by native speaker; delete this comment afterwards Poista - + Del AI-generated, needs review by native speaker; delete this comment afterwards Del - + Neutral AI-generated, needs review by native speaker; delete this comment afterwards Neutraali - + Ctrl+0 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+0 - + Validate AI-generated, needs review by native speaker; delete this comment afterwards Vahvista - + Ctrl+Shift+V AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+V - - - - + + + + Update appearance AI-generated, needs review by native speaker; delete this comment afterwards Päivitä ulkoasu - + Recreate obstacles AI-generated, needs review by native speaker; delete this comment afterwards Luo esteet uudelleen - + Player 1 AI-generated, needs review by native speaker; delete this comment afterwards Pelaaja 1 - + Ctrl+1 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+1 - + Player 2 AI-generated, needs review by native speaker; delete this comment afterwards Pelaaja 2 - + Ctrl+2 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+2 - + Player 3 AI-generated, needs review by native speaker; delete this comment afterwards Pelaaja 3 - + Ctrl+3 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+3 - + Player 4 AI-generated, needs review by native speaker; delete this comment afterwards Pelaaja 4 - + Ctrl+4 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+4 - + Player 5 AI-generated, needs review by native speaker; delete this comment afterwards Pelaaja 5 - + Ctrl+5 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+5 - + Player 6 AI-generated, needs review by native speaker; delete this comment afterwards Pelaaja 6 - + Ctrl+6 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+6 - + Player 7 AI-generated, needs review by native speaker; delete this comment afterwards Pelaaja 7 - + Ctrl+7 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+7 - + Player 8 AI-generated, needs review by native speaker; delete this comment afterwards Pelaaja 8 - + Ctrl+8 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+8 - + Export as... AI-generated, needs review by native speaker; delete this comment afterwards Vie nimellä... - + Ctrl+E AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+E - + Translations AI-generated, needs review by native speaker; delete this comment afterwards Käännökset - + Ctrl+T AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+T - - + + h3m converter AI-generated, needs review by native speaker; delete this comment afterwards h3m-muunnin - + Ctrl+Shift+M AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+M - - + + h3c converter AI-generated, needs review by native speaker; delete this comment afterwards h3c-muunnin - + Ctrl+Shift+C AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+C - + Lock AI-generated, needs review by native speaker; delete this comment afterwards Lukitse - + Lock objects on map to avoid unnecessary changes AI-generated, needs review by native speaker; delete this comment afterwards Lukitse objektit kartalla estääksesi tarpeettomat muutokset - + Ctrl+L AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+L - + Unlock AI-generated, needs review by native speaker; delete this comment afterwards Poista lukitus - + Unlock all objects on the map AI-generated, needs review by native speaker; delete this comment afterwards Poista kaikkien kartan objektien lukitus - + Ctrl+Shift+L AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+L - + Zoom in AI-generated, needs review by native speaker; delete this comment afterwards Lähennä - + Ctrl++ AI-generated, needs review by native speaker; delete this comment afterwards Ctrl++ - + Zoom out AI-generated, needs review by native speaker; delete this comment afterwards Loitonna - + Ctrl+- AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+- - + Zoom reset AI-generated, needs review by native speaker; delete this comment afterwards Palauta zoomaus - + Ctrl+Shift+= AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+= - + Confirmation AI-generated, needs review by native speaker; delete this comment afterwards Vahvistus - + Unsaved changes will be lost, are you sure? AI-generated, needs review by native speaker; delete this comment afterwards Tallentamattomat muutokset menetetään,oletko varma? - + Mods are required AI-generated, needs review by native speaker; delete this comment afterwards Modit vaaditaan - + Failed to open map AI-generated, needs review by native speaker; delete this comment afterwards Karttaa ei voitu avata - + Open map AI-generated, needs review by native speaker; delete this comment afterwards Avaa kartta - + All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) AI-generated, needs review by native speaker; delete this comment afterwards Kaikki tuetut kartat (*.vmap *.h3m);;VCMI-kartat(*.vmap);;HoMM3-kartat(*.h3m) - + Recently Opened Files AI-generated, needs review by native speaker; delete this comment afterwards Viimeksi avatut tiedostot - + Map validation AI-generated, needs review by native speaker; delete this comment afterwards Kartan tarkistus - + Map has critical problems and most probably will not be playable. Open Validator from the Map menu to see issues found AI-generated, needs review by native speaker; delete this comment afterwards Kartassa on kriittisiä ongelmia,eikä se todennäköisesti ole pelattavissa. Avaa tarkistus Kartta-valikosta nähdäksesi löydetyt virheet - + Map has some errors. Open Validator from the Map menu to see issues found AI-generated, needs review by native speaker; delete this comment afterwards Kartassa on joitakin virheitä. Avaa tarkistus Kartta-valikosta nähdäksesi löydetyt virheet - + Failed to save map AI-generated, needs review by native speaker; delete this comment afterwards Karttaa ei voitu tallentaa - + Save map AI-generated, needs review by native speaker; delete this comment afterwards Tallenna kartta - + VCMI maps (*.vmap) AI-generated, needs review by native speaker; delete this comment afterwards VCMI-kartat (*.vmap) - + Type AI-generated, needs review by native speaker; delete this comment afterwards Tyyppi - + Towns AI-generated, needs review by native speaker; delete this comment afterwards Kaupungit - + Objects AI-generated, needs review by native speaker; delete this comment afterwards Objektit - + Heroes AI-generated, needs review by native speaker; delete this comment afterwards Sankarit - + Artifacts AI-generated, needs review by native speaker; delete this comment afterwards Artefaktit - + Resources AI-generated, needs review by native speaker; delete this comment afterwards Resurssit - + Banks AI-generated, needs review by native speaker; delete this comment afterwards Pankit - + Dwellings AI-generated, needs review by native speaker; delete this comment afterwards Asuinpaikat - + Grounds AI-generated, needs review by native speaker; delete this comment afterwards Maastot - + Teleports AI-generated, needs review by native speaker; delete this comment afterwards Teleportit - + Mines AI-generated, needs review by native speaker; delete this comment afterwards Kaivokset - + Triggers AI-generated, needs review by native speaker; delete this comment afterwards Laukaisimet - + Monsters AI-generated, needs review by native speaker; delete this comment afterwards Hirviöt - + Quests AI-generated, needs review by native speaker; delete this comment afterwards Tehtävät - + Wog Objects AI-generated, needs review by native speaker; delete this comment afterwards WoG-objektit - + Obstacles AI-generated, needs review by native speaker; delete this comment afterwards Esteet - + Other AI-generated, needs review by native speaker; delete this comment afterwards Muut - + Mods loading problem AI-generated, needs review by native speaker; delete this comment afterwards Modien latausongelma - + Critical error during Mods loading. Disable invalid mods and restart. AI-generated, needs review by native speaker; delete this comment afterwards Kriittinen virhe modien latauksessa. Poista virheelliset modit käytöstä ja käynnistä uudelleen. - - + + View surface AI-generated, needs review by native speaker; delete this comment afterwards Näytä pinta - + No objects selected AI-generated, needs review by native speaker; delete this comment afterwards Ei valittuja objekteja - + This operation is irreversible. Do you want to continue? AI-generated, needs review by native speaker; delete this comment afterwards Tätä toimintoa ei voi perua. Haluatko jatkaa? - + Errors occurred. %1 objects were not updated AI-generated, needs review by native speaker; delete this comment afterwards Tapahtui virheitä. %1 objektia ei päivitetty - + Save to image AI-generated, needs review by native speaker; delete this comment afterwards Tallenna kuvana - + Select maps to convert AI-generated, needs review by native speaker; delete this comment afterwards Valitse kartat muunnettavaksi - + HoMM3 maps(*.h3m) AI-generated, needs review by native speaker; delete this comment afterwards HoMM3-kartat (*.h3m) - + Choose directory to save converted maps AI-generated, needs review by native speaker; delete this comment afterwards Valitse hakemisto muunnettujen karttojen tallennukseen - + Operation completed AI-generated, needs review by native speaker; delete this comment afterwards Toiminto suoritettu - + Successfully converted %1 maps AI-generated, needs review by native speaker; delete this comment afterwards %1 karttaa muunnettiin onnistuneesti - + Failed to convert the map. Abort operation AI-generated, needs review by native speaker; delete this comment afterwards Kartan muuntaminen epäonnistui. Keskeytetään - + Select campaign to convert AI-generated, needs review by native speaker; delete this comment afterwards Valitse muunnettava kampanja - + HoMM3 campaigns (*.h3c) AI-generated, needs review by native speaker; delete this comment afterwards HoMM3-kampanjat (*.h3c) - + Select destination file AI-generated, needs review by native speaker; delete this comment afterwards Valitse kohdetiedosto - + VCMI campaigns (*.vcmp) AI-generated, needs review by native speaker; delete this comment afterwards VCMI-kampanjat (*.vcmp) @@ -1532,30 +1562,30 @@ MapController - + Hero %1 cannot be created as NEUTRAL. AI-generated, needs review by native speaker; delete this comment afterwards Sankaria %1 ei voida luoda NEUTRAALINA. - + Missing Required Mod AI-generated, needs review by native speaker; delete this comment afterwards Vaadittu modi puuttuu - + Do you want to do that now ? -AI-generated, needs review by native speaker; delete this comment afterwards + AI-generated, needs review by native speaker; delete this comment afterwards Haluatko tehdä sen nyt? - + This object's mod is mandatory for map to remain valid. AI-generated, needs review by native speaker; delete this comment afterwards Tämän objektin modi on pakollinen,jotta kartta pysyy kelvollisena. @@ -1660,6 +1690,30 @@ Haluatko tehdä sen nyt? Viesti + + MineSelector + + + + Select Mines + + + + + Mine Selector + + + + + Resource + Resurssi + + + + Mines + Kaivokset + + ModSettings @@ -1814,29 +1868,25 @@ Haluatko tehdä sen nyt? - PlayerSettings + PlayerSettingsDialog - + Player settings - AI-generated, needs review by native speaker; delete this comment afterwards Pelaaja-asetukset - + Players - AI-generated, needs review by native speaker; delete this comment afterwards Pelaajat - + 1 - AI-generated, needs review by native speaker; delete this comment afterwards 1 - + Ok - AI-generated, needs review by native speaker; delete this comment afterwards Ok @@ -1895,81 +1945,81 @@ Haluatko tehdä sen nyt? Toissijaiset taidot: - + Compliant AI-generated, needs review by native speaker; delete this comment afterwards Myöntyvä - + Friendly AI-generated, needs review by native speaker; delete this comment afterwards Ystävällinen - + Aggressive AI-generated, needs review by native speaker; delete this comment afterwards Aggressiivinen - + Hostile AI-generated, needs review by native speaker; delete this comment afterwards Vihamielinen - + Savage AI-generated, needs review by native speaker; delete this comment afterwards Raivoisa - - + + No patrol AI-generated, needs review by native speaker; delete this comment afterwards Ei partiointia - + POWER RANK AI-generated, needs review by native speaker; delete this comment afterwards VOIMATASO - + HERO TYPE AI-generated, needs review by native speaker; delete this comment afterwards SANKARITYYPPI - + Hero class AI-generated, needs review by native speaker; delete this comment afterwards Sankariluokka - + Portrait AI-generated, needs review by native speaker; delete this comment afterwards Muotokuva - + Skills AI-generated, needs review by native speaker; delete this comment afterwards Taidot - + Artifacts AI-generated, needs review by native speaker; delete this comment afterwards Artefaktit - - + + %n tile(s) AI-generated, needs review by native speaker; delete this comment afterwards @@ -1978,358 +2028,358 @@ Haluatko tehdä sen nyt? - + Buildings AI-generated, needs review by native speaker; delete this comment afterwards Rakennukset - + Events AI-generated, needs review by native speaker; delete this comment afterwards Tapahtumat - + Resource AI-generated, needs review by native speaker; delete this comment afterwards Resurssi - + Artifact reward AI-generated, needs review by native speaker; delete this comment afterwards Artefaktipalkinto - + Quest AI-generated, needs review by native speaker; delete this comment afterwards Tehtävä - + Identifier AI-generated, needs review by native speaker; delete this comment afterwards Tunniste - + ID AI-generated, needs review by native speaker; delete this comment afterwards ID - + SubID AI-generated, needs review by native speaker; delete this comment afterwards Alitunniste - + InstanceName AI-generated, needs review by native speaker; delete this comment afterwards Instanssinimi - + IsStatic AI-generated, needs review by native speaker; delete this comment afterwards OnStaattinen - - + + neutral AI-generated, needs review by native speaker; delete this comment afterwards neutraali - - + + Army AI-generated, needs review by native speaker; delete this comment afterwards Armeija - - - + + - - - - - + + + + + + Owner AI-generated, needs review by native speaker; delete this comment afterwards Omistaja - - + + Same as town AI-generated, needs review by native speaker; delete this comment afterwards Sama kuin kaupungilla - - + + Removable units AI-generated, needs review by native speaker; delete this comment afterwards Poistettavat yksiköt - - + + Placeholder type AI-generated, needs review by native speaker; delete this comment afterwards Paikanpitotyyppi - - + + Power rank AI-generated, needs review by native speaker; delete this comment afterwards Voimatason sijoitus - - - - + + + + Hero type AI-generated, needs review by native speaker; delete this comment afterwards Sankarityyppi - - + + Experience AI-generated, needs review by native speaker; delete this comment afterwards Kokemus - - + + MALE AI-generated, needs review by native speaker; delete this comment afterwards MIES - - + + FEMALE AI-generated, needs review by native speaker; delete this comment afterwards NAINEN - - + + Gender AI-generated, needs review by native speaker; delete this comment afterwards Sukupuoli - - + + Name AI-generated, needs review by native speaker; delete this comment afterwards Nimi - - + + Biography AI-generated, needs review by native speaker; delete this comment afterwards Elämäkerta - - + + Spells AI-generated, needs review by native speaker; delete this comment afterwards Loitsut - - + + Patrol radius AI-generated, needs review by native speaker; delete this comment afterwards Partiointisäde - - + + Town name AI-generated, needs review by native speaker; delete this comment afterwards Kaupungin nimi - - + + Same as player AI-generated, needs review by native speaker; delete this comment afterwards Sama kuin pelaajalla - - - - - - - - - + + + + + + + + + Message AI-generated, needs review by native speaker; delete this comment afterwards Viesti - - + + Spell AI-generated, needs review by native speaker; delete this comment afterwards Loitsu - - + + Productivity AI-generated, needs review by native speaker; delete this comment afterwards Tuottavuus - - - - + + + + Amount AI-generated, needs review by native speaker; delete this comment afterwards Määrä - + Character AI-generated, needs review by native speaker; delete this comment afterwards Hahmo - + Select town AI-generated, needs review by native speaker; delete this comment afterwards Valitse kaupunki - - + + Never flees AI-generated, needs review by native speaker; delete this comment afterwards Ei koskaan pakene - - + + Not growing AI-generated, needs review by native speaker; delete this comment afterwards Ei kasva - - + + Reward AI-generated, needs review by native speaker; delete this comment afterwards Palkinto - - + + Remove after AI-generated, needs review by native speaker; delete this comment afterwards Poista jälkeen - - + + Human trigger AI-generated, needs review by native speaker; delete this comment afterwards Ihmisen laukaisija - - + + Cpu trigger AI-generated, needs review by native speaker; delete this comment afterwards Tietokoneen laukaisija - - + + First visit text AI-generated, needs review by native speaker; delete this comment afterwards Ensimmäinen vierailuteksti - - + + Next visit text AI-generated, needs review by native speaker; delete this comment afterwards Seuraavan vierailun teksti - - + + Completed text AI-generated, needs review by native speaker; delete this comment afterwards Suoritettu teksti - - - + + + Repeat quest AI-generated, needs review by native speaker; delete this comment afterwards Toista tehtävä - - + + Time limit AI-generated, needs review by native speaker; delete this comment afterwards Aikaraja - + UNFLAGGABLE AI-generated, needs review by native speaker; delete this comment afterwards EI LIPUTETTAVISSA - + Can't place object AI-generated, needs review by native speaker; delete this comment afterwards Objektia ei voi sijoittaa - + There can only be one grail object on the map. AI-generated, needs review by native speaker; delete this comment afterwards Kartalla voi olla vain yksi Graali-objekti. - + (submod of %1) AI-generated, needs review by native speaker; delete this comment afterwards (alalisäosa %1) - + The mod '%1'%2, is required by an object on the map. Add it to the map's required mods in Map->General settings. should be consistent with Map->General menu entry translation AI-generated, needs review by native speaker; delete this comment afterwards - Lisäosa '%1'%2 vaaditaan kartalla olevan objektin takia. + Lisäosa '%1'%2 vaaditaan kartalla olevan objektin takia. Lisää se kartan vaadittuihin lisäosiin valikosta Kartta → Yleiset asetukset. @@ -2372,14 +2422,14 @@ Lisää se kartan vaadittuihin lisäosiin valikosta Kartta → Yleiset asetukset - + Hero Level: %1 AI-generated, needs review by native speaker; delete this comment afterwards Sankarin taso: %1 - + Hero Experience: %1 AI-generated, needs review by native speaker; delete this comment afterwards Sankarin kokemus: %1 @@ -2392,49 +2442,49 @@ Lisää se kartan vaadittuihin lisäosiin valikosta Kartta → Yleiset asetukset - + Mana Percentage: %1 AI-generated, needs review by native speaker; delete this comment afterwards Manaprosentti: %1 - + Primary Skills: %1/%2/%3/%4 AI-generated, needs review by native speaker; delete this comment afterwards Päätaidot: %1/%2/%3/%4 - + Resources: %1 AI-generated, needs review by native speaker; delete this comment afterwards Resurssit: %1 - + Artifacts: %1 AI-generated, needs review by native speaker; delete this comment afterwards Artefaktit: %1 - + Spells: %1 AI-generated, needs review by native speaker; delete this comment afterwards Loitsut: %1 - + Secondary Skills: %1 AI-generated, needs review by native speaker; delete this comment afterwards Toissijaiset taidot: %1 - + Creatures: %1 AI-generated, needs review by native speaker; delete this comment afterwards Yksiköt: %1 @@ -2458,43 +2508,43 @@ Lisää se kartan vaadittuihin lisäosiin valikosta Kartta → Yleiset asetukset Pelaajat: %1 - + Rewards: AI-generated, needs review by native speaker; delete this comment afterwards Palkinnot: - + Reward Message: %1 AI-generated, needs review by native speaker; delete this comment afterwards Palkintoviesti: %1 - + Mana Diff: %1 AI-generated, needs review by native speaker; delete this comment afterwards Manaero: %1 - + Move Points: %1 AI-generated, needs review by native speaker; delete this comment afterwards Liikkumispisteet: %1 - + Move Percentage: %1 AI-generated, needs review by native speaker; delete this comment afterwards Liikkumisprosentti: %1 - + Spell Cast: %1 (%2) AI-generated, needs review by native speaker; delete this comment afterwards Loitsu heitetty: %1 (%2) - + Bonuses: %1 AI-generated, needs review by native speaker; delete this comment afterwards Bonukset: %1 @@ -2999,20 +3049,20 @@ Lisää se kartan vaadittuihin lisäosiin valikosta Kartta → Yleiset asetukset Pelaajat - + None AI-generated, needs review by native speaker; delete this comment afterwards Ei mitään - + Day %1 AI-generated, needs review by native speaker; delete this comment afterwards Päivä %1 - - + + Reward %1 AI-generated, needs review by native speaker; delete this comment afterwards Palkinto %1 @@ -3278,8 +3328,8 @@ Lisää se kartan vaadittuihin lisäosiin valikosta Kartta → Yleiset asetukset - - + + Player position AI-generated, needs review by native speaker; delete this comment afterwards Pelaajan sijainti @@ -3339,57 +3389,57 @@ Lisää se kartan vaadittuihin lisäosiin valikosta Kartta → Yleiset asetukset Pelaaja - + Open map AI-generated, needs review by native speaker; delete this comment afterwards Avaa kartta - + All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) AI-generated, needs review by native speaker; delete this comment afterwards Kaikki tuetut kartat (*.vmap *.h3m);;VCMI-kartat (*.vmap);;HoMM3-kartat (*.h3m) - - + + Error AI-generated, needs review by native speaker; delete this comment afterwards Virhe - - + + Could not open the file. AI-generated, needs review by native speaker; delete this comment afterwards Tiedoston avaaminen epäonnistui. - + Save map AI-generated, needs review by native speaker; delete this comment afterwards Tallenna kartta - + VCMI maps (*.vmap); AI-generated, needs review by native speaker; delete this comment afterwards VCMI-kartat (*.vmap); - + HoMM3 maps (*.h3m); AI-generated, needs review by native speaker; delete this comment afterwards HoMM3-kartat (*.h3m); - + Source scenario AI-generated, needs review by native speaker; delete this comment afterwards Lähdeskenaario - + Hero AI-generated, needs review by native speaker; delete this comment afterwards Sankari @@ -3429,7 +3479,7 @@ Lisää se kartan vaadittuihin lisäosiin valikosta Kartta → Yleiset asetukset - + Building AI-generated, needs review by native speaker; delete this comment afterwards Rakennus @@ -3460,7 +3510,7 @@ Lisää se kartan vaadittuihin lisäosiin valikosta Kartta → Yleiset asetukset - + Secondary skill AI-generated, needs review by native speaker; delete this comment afterwards Sivutaidot @@ -3468,7 +3518,7 @@ Lisää se kartan vaadittuihin lisäosiin valikosta Kartta → Yleiset asetukset - + Resource AI-generated, needs review by native speaker; delete this comment afterwards Resurssi @@ -3570,54 +3620,679 @@ Lisää se kartan vaadittuihin lisäosiin valikosta Kartta → Yleiset asetukset Harvinainen (%1, %2, %3, %4) - + strongest hero AI-generated, needs review by native speaker; delete this comment afterwards vahvin sankari - + generated hero AI-generated, needs review by native speaker; delete this comment afterwards luotu sankari - + random hero AI-generated, needs review by native speaker; delete this comment afterwards satunnainen sankari - + %1 spell for %2 AI-generated, needs review by native speaker; delete this comment afterwards %1-loitsu kohteelle %2 - + %1 %2 for %3 AI-generated, needs review by native speaker; delete this comment afterwards %1 %2 kohteelle %3 - + %1 artifact for %2 AI-generated, needs review by native speaker; delete this comment afterwards %1-artefakti kohteelle %2 - + %1 spell scroll for %2 AI-generated, needs review by native speaker; delete this comment afterwards %1-loitsukäärö kohteelle %2 - + Primary skill (Attack: %1, Defense: %2, Spell: %3, Knowledge: %4) for %5 AI-generated, needs review by native speaker; delete this comment afterwards Päätaidot (Hyökkäys: %1, Puolustus: %2, Loitsu: %3, Tiede: %4) kohteelle %5 + + TemplateEditor + + + + VCMI Template Editor + + + + + File + Tiedosto + + + + Edit + Muokkaa + + + + View + Näytä + + + + Toolbar + Työkalupalkki + + + + Selected Template: + + + + + + + Add + Lisää + + + + Remove + Poista + + + + Rename + + + + + General + Yleiset + + + + Name + Nimi + + + + Description + + + + + Min Size + + + + + + + X + X + + + + + + Y + Y + + + + + + Z + + + + + Max Size + + + + + + Players + Pelaajat + + + + Human + + + + + Allowed water content + + + + + + + None + + + + + + Normal + Normaali + + + + Islands + Saaristo + + + + Zone + + + + + Visualisation + + + + + Position + + + + + + Size + + + + + ID + ID + + + + + Type + Tyyppi + + + + Owner + Omistaja + + + + Zone link + + + + + + + Mines + Kaivokset + + + + + Custom objects + + + + + + Towns + Kaupungit + + + + + Terrain + + + + + + + + Treasure + + + + + Town info + + + + + Town count + + + + + + + + Player + Pelaaja + + + + + + + Neutral + Neutraali + + + + Castle count + + + + + Town density + + + + + Castle density + + + + + Match terrain to town + + + + + Terrain types + + + + + Banned terrain types + + + + + Towns are same type + + + + + Allowed towns + + + + + Banned towns + + + + + Town hints + + + + + Monsters + Hirviöt + + + + Allowed monsters + + + + + Banned monsters + + + + + Strength + + + + + Objects + Objektit + + + + Connections + + + + + Open + Avaa + + + + Save + Tallenna + + + + New + Uusi + + + + Save as... + Tallenna nimellä... + + + + Ctrl+Shift+S + Ctrl+Shift+S + + + + Add zone + + + + + Remove zone + + + + + + Del + Del + + + + Auto position + + + + + Ctrl+P + Ctrl+P + + + + Zoom in + Lähennä + + + + Ctrl++ + Ctrl++ + + + + Zoom out + Loitonna + + + + Ctrl+- + Ctrl+- + + + + Zoom auto + + + + + Ctrl+Shift+: + + + + + Zoom reset + Palauta zoomaus + + + + Ctrl+Shift+= + Ctrl+Shift+= + + + + Min + + + + + Max + + + + + Action + + + + + + Delete + + + + + ID: %1 + + + + + Max treasure: %1 + + + + + Player start + + + + + CPU start + + + + + Junction + + + + + Water + + + + + Sealed + + + + + + Random + Satunnainen + + + + Weak + Heikko + + + + Strong + Vahva + + + + Zone A + + + + + Zone B + + + + + Guard + + + + + Road + + + + + Guarded + + + + + Fictive + + + + + Repulsive + + + + + Wide + + + + + Force portal + + + + + Yes + + + + + No + + + + + Zone A: %1 +Zone B: %2 +Guard: %3 + + + + + Confirmation + Vahvistus + + + + Unsaved changes will be lost, are you sure? + Tallentamattomat muutokset menetetään,oletko varma? + + + + Open template + + + + + VCMI templates(*.json) + + + + + Save template + + + + + VCMI templates (*.json) + + + + + + Enter Name + + + + + + Name: + + + + + Already existing! + + + + + At template with this name is already existing. + + + + + To few templates! + + + + + At least one template should remain after removing. + + + + + + Error + Virhe + + + + + Not implemented yet! + + + + + TerrainSelector + + + + Select Terrains + + + + + Terrain Selector + + + TimedEvent @@ -4020,6 +4695,40 @@ Lisää se kartan vaadittuihin lisäosiin valikosta Kartta → Yleiset asetukset Kaikki nykyiset tekstimerkinnät tälle kielelle poistetaan. Jatketaanko? + + TreasureSelector + + + + Select Treasures + + + + + Treasure Selector + + + + + Min + + + + + Max + + + + + Density + + + + + Action + + + Validator @@ -4484,25 +5193,25 @@ Lisää se kartan vaadittuihin lisäosiin valikosta Kartta → Yleiset asetukset Peruuta - + No template AI-generated, needs review by native speaker; delete this comment afterwards Ei pohjaa - + No template for parameters specified. Random map cannot be generated. AI-generated, needs review by native speaker; delete this comment afterwards Parametrien mukaisia pohjia ei ole. Satunnaista karttaa ei voi luoda. - + RMG failure AI-generated, needs review by native speaker; delete this comment afterwards RMG epäonnistui - + [default] AI-generated, needs review by native speaker; delete this comment afterwards [oletus] @@ -4511,31 +5220,31 @@ Lisää se kartan vaadittuihin lisäosiin valikosta Kartta → Yleiset asetukset main - + Filepath of the map to open. AI-generated, needs review by native speaker; delete this comment afterwards Avattavan kartan tiedostopolku. - + Extract original H3 archives into a separate folder. AI-generated, needs review by native speaker; delete this comment afterwards Pura alkuperäiset H3-arkistot erilliseen kansioon. - + From an extracted archive, it Splits TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 and Un44 into individual PNG's. AI-generated, needs review by native speaker; delete this comment afterwards Puretusta arkistosta jakaa TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 ja Un44 yksittäisiin PNG-kuviin. - + From an extracted archive, Converts single Images (found in Images folder) from .pcx to png. AI-generated, needs review by native speaker; delete this comment afterwards Puretusta arkistosta muuntaa yksittäiset kuvat (.pcx) PNG-muotoon (löytyvät Images-kansiosta). - + Delete original files, for the ones split / converted. AI-generated, needs review by native speaker; delete this comment afterwards Poista alkuperäiset tiedostot niiltä osin, mitkä jaettiin / muunnettiin. diff --git a/mapeditor/translation/french.ts b/mapeditor/translation/french.ts index 902302fa0..1e9ebc1dc 100644 --- a/mapeditor/translation/french.ts +++ b/mapeditor/translation/french.ts @@ -49,7 +49,7 @@ CampaignEditor - + VCMI Campaign Editor AI-generated, needs review by native speaker; delete this comment afterwards Éditeur de Campagnes VCMI @@ -121,40 +121,40 @@ Afficher l’arrière-plan complet - + Scenario editor AI-generated, needs review by native speaker; delete this comment afterwards Éditeur de scénario - + Confirmation Confirmation - + Unsaved changes will be lost, are you sure? Les modifications non sauvegardées seront perdues. Êtes-vous sûr ? - + Open map Ouvrir une carte - + All supported campaigns (*.vcmp *.h3c);;VCMI campaigns(*.vcmp);;HoMM3 campaigns(*.h3c) AI-generated, needs review by native speaker; delete this comment afterwards Toutes les campagnes prises en charge (*.vcmp *.h3c);;Campagnes VCMI (*.vcmp);;Campagnes HoMM3 (*.h3c) - + Save campaign AI-generated, needs review by native speaker; delete this comment afterwards Enregistrer la campagne - + VCMI campaigns (*.vcmp) AI-generated, needs review by native speaker; delete this comment afterwards Campagnes VCMI (*.vcmp) @@ -164,7 +164,7 @@ CampaignProperties - + Campaign Properties AI-generated, needs review by native speaker; delete this comment afterwards Propriétés de la campagne @@ -299,47 +299,47 @@ Vidéo de fin - + Custom AI-generated, needs review by native speaker; delete this comment afterwards Personnalisé - + Infix AI-generated, needs review by native speaker; delete this comment afterwards Infixe - + X - + Y - + Label Pos X AI-generated, needs review by native speaker; delete this comment afterwards Position de l’étiquette X - + Label Pos Y AI-generated, needs review by native speaker; delete this comment afterwards Position de l’étiquette Y - + Fewer Scenarios AI-generated, needs review by native speaker; delete this comment afterwards Moins de scénarios - + New Region setup supports fewer scenarios than before. Some will removed. Continue? AI-generated, needs review by native speaker; delete this comment afterwards La nouvelle configuration de région prend en charge moins de scénarios qu’auparavant. Certains seront supprimés. Continuer ? @@ -373,6 +373,20 @@ Nouvel évènement + + FactionSelector + + + + Select Factions + + + + + Faction Selector + + + GeneralSettings @@ -459,6 +473,16 @@ AI-generated, needs review by native speaker; delete this comment afterwards Artefact + + + Save + Enregistrer + + + + Cancel + Annuler + HeroSkillsWidget @@ -592,7 +616,7 @@ MainWindow - + VCMI Map Editor Éditeur de carte VCMI @@ -603,782 +627,788 @@ - + Open Recent AI-generated, needs review by native speaker; delete this comment afterwards Ouvrir récemment - + Map Carte - + Edit Édition - + View Affichage - + Player Joueur - + Toolbar Barre d'outils - + Minimap Mini-carte - + Map Objects View Vue des objets cartographiques - + Browser Navigateur - + Inspector Inspecteur - + Property Propriété - + Value Valeur - + Tools Outils - + Painting Remplissage - + Terrains Terrains - + Roads Routes - + Rivers Rivières - + Preview Aperçu - + Open Ouvrir - + Ctrl+O AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+O - + More... AI-generated, needs review by native speaker; delete this comment afterwards Plus... - + Save Enregistrer - + Ctrl+S AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+S - + New Nouveau - + Ctrl+N AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+N - + Save as... Enregistrer sous... - + Ctrl+Shift+S Ctrl+Maj+S - - + + Campaign editor AI-generated, needs review by native speaker; delete this comment afterwards Éditeur de campagne - - - - + + + Template editor + + + + + + + View underground Voir le sous-sol - + Ctrl+U AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+U - + Pass Passage - + Ctrl+Shift+P AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Maj+P - + Cut Couper - + Ctrl+X AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+X - + Copy Copier - + Ctrl+C AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+C - + Paste Coller - + Ctrl+V AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+V - + Fill Remplir - + Fills the selection with obstacles Remplir la sélection d'obstacles - + Grid Grille - + Ctrl+G AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+G - + General Général - + Map title and description Titre et description de la carte - + Ctrl+Enter AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Entrée - + Players settings Paramètres des joueurs - + Ctrl+P AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+P - - + + Undo Annuler - + Ctrl+Z AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Z - + Redo Rétablir - + Ctrl+Y AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Y - + Erase Effacer - + Del AI-generated, needs review by native speaker; delete this comment afterwards Suppr - + Neutral Neutre - + Ctrl+0 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+0 - + Validate Valider - + Ctrl+Shift+V AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Maj+V - - - - + + + + Update appearance Mettre à jour l'apparence - + Recreate obstacles Recréer des obstacles - + Player 1 Joueur 1 - + Ctrl+1 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+1 - + Player 2 Joueur 2 - + Ctrl+2 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+2 - + Player 3 Joueur 3 - + Ctrl+3 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+3 - + Player 4 Joueur 4 - + Ctrl+4 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+4 - + Player 5 Joueur 5 - + Ctrl+5 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+5 - + Player 6 Joueur 6 - + Ctrl+6 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+6 - + Player 7 Joueur 7 - + Ctrl+7 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+7 - + Player 8 Joueur 8 - + Ctrl+8 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+8 - + Export as... Exporter sous... - + Ctrl+E AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+E - + Translations Traductions - + Ctrl+T Ctrl+T - - + + h3m converter convertisseur h3m - + Ctrl+Shift+M AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Maj+M - - + + h3c converter convertisseur h3m {3c?} - + Ctrl+Shift+C AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Maj+C - + Lock Vérouiller - + Lock objects on map to avoid unnecessary changes Vérouiller les objets sur la carte pour éviter des changements non nécessaires - + Ctrl+L Ctrl+L - + Unlock Déverouiller - + Unlock all objects on the map Dévérouiller tous les objets de la carte - + Ctrl+Shift+L Ctrl+Maj+L - + Zoom in Zoom avant - + Ctrl++ AI-generated, needs review by native speaker; delete this comment afterwards Ctrl++ - + Zoom out Zoom arrière - + Ctrl+- AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+- - + Zoom reset Remise à zéro du zoom - + Ctrl+Shift+= Ctrl+Maj+= - + Confirmation Confirmation - + Unsaved changes will be lost, are you sure? Les modifications non sauvegardées seront perdues. Êtes-vous sûr ? - + Mods are required AI-generated, needs review by native speaker; delete this comment afterwards Des mods sont requis - + Failed to open map AI-generated, needs review by native speaker; delete this comment afterwards Échec de l’ouverture de la carte - + Open map Ouvrir une carte - + All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) Toutes les cartes prises en charge (*.vmap *.h3m);;Cartes VCMI (*.vmap);;Cartes HoMM3 (*.h3m) - + Recently Opened Files AI-generated, needs review by native speaker; delete this comment afterwards Fichiers récemment ouverts - + Map validation AI-generated, needs review by native speaker; delete this comment afterwards Validation de la carte - + Map has critical problems and most probably will not be playable. Open Validator from the Map menu to see issues found AI-generated, needs review by native speaker; delete this comment afterwards La carte comporte des problèmes critiques et ne sera probablement pas jouable. Ouvrez le validateur depuis le menu Carte pour voir les problèmes détectés - + Map has some errors. Open Validator from the Map menu to see issues found AI-generated, needs review by native speaker; delete this comment afterwards La carte comporte certaines erreurs. Ouvrez le validateur depuis le menu Carte pour voir les problèmes détectés - + Failed to save map AI-generated, needs review by native speaker; delete this comment afterwards Échec de l’enregistrement de la carte - + Save map Enregistrer la carte - + VCMI maps (*.vmap) Cartes VCMI (*.vmap) - + Type Type - + Towns AI-generated, needs review by native speaker; delete this comment afterwards Villes - + Objects AI-generated, needs review by native speaker; delete this comment afterwards Objets - + Heroes Héros - + Artifacts AI-generated, needs review by native speaker; delete this comment afterwards Artefacts - + Resources AI-generated, needs review by native speaker; delete this comment afterwards Ressources - + Banks AI-generated, needs review by native speaker; delete this comment afterwards Banques - + Dwellings AI-generated, needs review by native speaker; delete this comment afterwards Habitations - + Grounds AI-generated, needs review by native speaker; delete this comment afterwards Terrains - + Teleports AI-generated, needs review by native speaker; delete this comment afterwards Téléporteurs - + Mines AI-generated, needs review by native speaker; delete this comment afterwards Mines - + Triggers AI-generated, needs review by native speaker; delete this comment afterwards Déclencheurs - + Monsters AI-generated, needs review by native speaker; delete this comment afterwards Monstres - + Quests AI-generated, needs review by native speaker; delete this comment afterwards Quêtes - + Wog Objects AI-generated, needs review by native speaker; delete this comment afterwards Objets WoG - + Obstacles AI-generated, needs review by native speaker; delete this comment afterwards Obstacles - + Other AI-generated, needs review by native speaker; delete this comment afterwards Autres - + Mods loading problem AI-generated, needs review by native speaker; delete this comment afterwards Problème de chargement des mods - + Critical error during Mods loading. Disable invalid mods and restart. AI-generated, needs review by native speaker; delete this comment afterwards Erreur critique lors du chargement des mods. Désactivez les mods invalides et redémarrez. - - + + View surface Afficher la surface - + No objects selected Pas d'objets sélectionnés - + This operation is irreversible. Do you want to continue? Cette opération est irreversible. Voulez-vous continuer ? - + Errors occurred. %1 objects were not updated Erreur rencontrée. %1 objets n'ont pas étés mis à jour - + Save to image Sauvegarder en tant qu'image - + Select maps to convert Sélectionner les cartes à convertir - + HoMM3 maps(*.h3m) Cartes HoMM3(*.h3m) - + Choose directory to save converted maps Sélectionner le dossier ou sauvegarder les cartes converties - + Operation completed Opération terminée - + Successfully converted %1 maps Conversion éffectuée avec succès des %1 cartes - + Failed to convert the map. Abort operation Erreur de conversion de carte. Opération annulée - + Select campaign to convert AI-generated, needs review by native speaker; delete this comment afterwards Sélectionner une campagne à convertir - + HoMM3 campaigns (*.h3c) AI-generated, needs review by native speaker; delete this comment afterwards Campagnes HoMM3 (*.h3c) - + Select destination file AI-generated, needs review by native speaker; delete this comment afterwards Sélectionner le fichier de destination - + VCMI campaigns (*.vcmp) AI-generated, needs review by native speaker; delete this comment afterwards Campagnes VCMI (*.vcmp) @@ -1387,29 +1417,29 @@ MapController - + Hero %1 cannot be created as NEUTRAL. Le héro %1 ne peut pas être créé en tant que NEUTRE. - + Missing Required Mod AI-generated, needs review by native speaker; delete this comment afterwards Mod requis manquant - + Do you want to do that now ? -AI-generated, needs review by native speaker; delete this comment afterwards + AI-generated, needs review by native speaker; delete this comment afterwards Voulez-vous le faire maintenant ? - + This object's mod is mandatory for map to remain valid. AI-generated, needs review by native speaker; delete this comment afterwards Le mod de cet objet est obligatoire pour que la carte reste valide. @@ -1499,6 +1529,30 @@ Voulez-vous le faire maintenant ? Message + + MineSelector + + + + Select Mines + + + + + Mine Selector + + + + + Resource + Ressource + + + + Mines + Mines + + ModSettings @@ -1634,26 +1688,26 @@ Voulez-vous le faire maintenant ? - PlayerSettings + PlayerSettingsDialog - + Player settings - Paramètres du joueur + Paramètres du joueur - + Players - Joueurs + Joueurs - + 1 - 1 + 1 - + Ok - OK + OK @@ -1705,75 +1759,75 @@ Voulez-vous le faire maintenant ? Compétences secondaires : - + Compliant Compérhensif - + Friendly Amical - + Aggressive Aggressif - + Hostile Hostile - + Savage Sauvage - - + + No patrol AI-generated, needs review by native speaker; delete this comment afterwards Pas de patrouille - + POWER RANK AI-generated, needs review by native speaker; delete this comment afterwards NIVEAU DE PUISSANCE - + HERO TYPE AI-generated, needs review by native speaker; delete this comment afterwards TYPE DE HÉROS - + Hero class AI-generated, needs review by native speaker; delete this comment afterwards Classe du héros - + Portrait Portrait - + Skills AI-generated, needs review by native speaker; delete this comment afterwards Compétences - + Artifacts AI-generated, needs review by native speaker; delete this comment afterwards Artefacts - - + + %n tile(s) AI-generated, needs review by native speaker; delete this comment afterwards @@ -1782,348 +1836,348 @@ Voulez-vous le faire maintenant ? - + Buildings Bâtiments - + Events Événements - + Resource AI-generated, needs review by native speaker; delete this comment afterwards Ressource - + Artifact reward AI-generated, needs review by native speaker; delete this comment afterwards Récompense : artefact - + Quest AI-generated, needs review by native speaker; delete this comment afterwards Quête - + Identifier AI-generated, needs review by native speaker; delete this comment afterwards Identifiant - + ID AI-generated, needs review by native speaker; delete this comment afterwards ID - + SubID AI-generated, needs review by native speaker; delete this comment afterwards Sous-ID - + InstanceName AI-generated, needs review by native speaker; delete this comment afterwards NomInstance - + IsStatic AI-generated, needs review by native speaker; delete this comment afterwards EstStatique - - + + neutral neutre - - + + Army AI-generated, needs review by native speaker; delete this comment afterwards Armée - - - + + - - - - - + + + + + + Owner AI-generated, needs review by native speaker; delete this comment afterwards Propriétaire - - + + Same as town AI-generated, needs review by native speaker; delete this comment afterwards Identique à la ville - - + + Removable units AI-generated, needs review by native speaker; delete this comment afterwards Unités amovibles - - + + Placeholder type AI-generated, needs review by native speaker; delete this comment afterwards Type d’espace réservé - - + + Power rank AI-generated, needs review by native speaker; delete this comment afterwards Niveau de puissance - - - - + + + + Hero type AI-generated, needs review by native speaker; delete this comment afterwards Type de héros - - + + Experience AI-generated, needs review by native speaker; delete this comment afterwards Expérience - - + + MALE AI-generated, needs review by native speaker; delete this comment afterwards HOMME - - + + FEMALE AI-generated, needs review by native speaker; delete this comment afterwards FEMME - - + + Gender AI-generated, needs review by native speaker; delete this comment afterwards Genre - - + + Name AI-generated, needs review by native speaker; delete this comment afterwards Nom - - + + Biography AI-generated, needs review by native speaker; delete this comment afterwards Biographie - - + + Spells Sorts - - + + Patrol radius AI-generated, needs review by native speaker; delete this comment afterwards Rayon de patrouille - - + + Town name AI-generated, needs review by native speaker; delete this comment afterwards Nom de la ville - - + + Same as player AI-generated, needs review by native speaker; delete this comment afterwards Identique au joueur - - - - - - - - - + + + + + + + + + Message Message - - + + Spell Sort - - + + Productivity AI-generated, needs review by native speaker; delete this comment afterwards Productivité - - - - + + + + Amount AI-generated, needs review by native speaker; delete this comment afterwards Quantité - + Character AI-generated, needs review by native speaker; delete this comment afterwards Personnage - + Select town AI-generated, needs review by native speaker; delete this comment afterwards Sélectionner une ville - - + + Never flees AI-generated, needs review by native speaker; delete this comment afterwards Ne fuit jamais - - + + Not growing AI-generated, needs review by native speaker; delete this comment afterwards Pas de croissance - - + + Reward Récompense - - + + Remove after AI-generated, needs review by native speaker; delete this comment afterwards Supprimer après - - + + Human trigger AI-generated, needs review by native speaker; delete this comment afterwards Déclencheur humain - - + + Cpu trigger AI-generated, needs review by native speaker; delete this comment afterwards Déclencheur IA - - + + First visit text AI-generated, needs review by native speaker; delete this comment afterwards Texte à la première visite - - + + Next visit text AI-generated, needs review by native speaker; delete this comment afterwards Texte à la visite suivante - - + + Completed text AI-generated, needs review by native speaker; delete this comment afterwards Texte de complétion - - - + + + Repeat quest AI-generated, needs review by native speaker; delete this comment afterwards Répéter la quête - - + + Time limit AI-generated, needs review by native speaker; delete this comment afterwards Limite de temps - + UNFLAGGABLE INCLASSABLE - + Can't place object Impossible de placer l'objet - + There can only be one grail object on the map. Il ne peut y avoir qu'un objet Graal sur la carte. - + (submod of %1) AI-generated, needs review by native speaker; delete this comment afterwards (sous-mod de %1) - + The mod '%1'%2, is required by an object on the map. Add it to the map's required mods in Map->General settings. should be consistent with Map->General menu entry translation AI-generated, needs review by native speaker; delete this comment afterwards - Le mod « %1 »%2 est requis par un objet sur la carte. + Le mod « %1 »%2 est requis par un objet sur la carte. Ajoutez-le aux mods requis dans Carte → Paramètres généraux. @@ -2165,14 +2219,14 @@ Ajoutez-le aux mods requis dans Carte → Paramètres généraux. - + Hero Level: %1 AI-generated, needs review by native speaker; delete this comment afterwards Niveau du héros : %1 - + Hero Experience: %1 AI-generated, needs review by native speaker; delete this comment afterwards Expérience du héros : %1 @@ -2185,49 +2239,49 @@ Ajoutez-le aux mods requis dans Carte → Paramètres généraux. - + Mana Percentage: %1 AI-generated, needs review by native speaker; delete this comment afterwards Pourcentage de mana : %1 - + Primary Skills: %1/%2/%3/%4 AI-generated, needs review by native speaker; delete this comment afterwards Compétences principales : %1/%2/%3/%4 - + Resources: %1 AI-generated, needs review by native speaker; delete this comment afterwards Ressources : %1 - + Artifacts: %1 AI-generated, needs review by native speaker; delete this comment afterwards Artefacts : %1 - + Spells: %1 AI-generated, needs review by native speaker; delete this comment afterwards Sorts : %1 - + Secondary Skills: %1 AI-generated, needs review by native speaker; delete this comment afterwards Compétences secondaires : %1 - + Creatures: %1 AI-generated, needs review by native speaker; delete this comment afterwards Créatures : %1 @@ -2251,43 +2305,43 @@ Ajoutez-le aux mods requis dans Carte → Paramètres généraux. Joueurs : %1 - + Rewards: AI-generated, needs review by native speaker; delete this comment afterwards Récompenses : - + Reward Message: %1 AI-generated, needs review by native speaker; delete this comment afterwards Message de récompense : %1 - + Mana Diff: %1 AI-generated, needs review by native speaker; delete this comment afterwards Différence de mana : %1 - + Move Points: %1 AI-generated, needs review by native speaker; delete this comment afterwards Points de déplacement : %1 - + Move Percentage: %1 AI-generated, needs review by native speaker; delete this comment afterwards Pourcentage de déplacement : %1 - + Spell Cast: %1 (%2) AI-generated, needs review by native speaker; delete this comment afterwards Sort lancé : %1 (%2) - + Bonuses: %1 AI-generated, needs review by native speaker; delete this comment afterwards Bonus : %1 @@ -2719,18 +2773,18 @@ Ajoutez-le aux mods requis dans Carte → Paramètres généraux. Joueurs - + None Aucune - + Day %1 Jour %1 - - + + Reward %1 Récompense %1 @@ -2984,8 +3038,8 @@ Ajoutez-le aux mods requis dans Carte → Paramètres généraux. - - + + Player position AI-generated, needs review by native speaker; delete this comment afterwards Position du joueur @@ -3043,54 +3097,54 @@ Ajoutez-le aux mods requis dans Carte → Paramètres généraux. Joueur - + Open map Ouvrir une carte - + All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) Toutes les cartes prises en charge (*.vmap *.h3m);;Cartes VCMI (*.vmap);;Cartes HoMM3 (*.h3m) - - + + Error AI-generated, needs review by native speaker; delete this comment afterwards Erreur - - + + Could not open the file. AI-generated, needs review by native speaker; delete this comment afterwards Impossible d’ouvrir le fichier. - + Save map Enregistrer la carte - + VCMI maps (*.vmap); AI-generated, needs review by native speaker; delete this comment afterwards Cartes VCMI (*.vmap); - + HoMM3 maps (*.h3m); AI-generated, needs review by native speaker; delete this comment afterwards Cartes HoMM3 (*.h3m); - + Source scenario AI-generated, needs review by native speaker; delete this comment afterwards Scénario source - + Hero AI-generated, needs review by native speaker; delete this comment afterwards Héros @@ -3129,7 +3183,7 @@ Ajoutez-le aux mods requis dans Carte → Paramètres généraux. - + Building AI-generated, needs review by native speaker; delete this comment afterwards Bâtiment @@ -3160,7 +3214,7 @@ Ajoutez-le aux mods requis dans Carte → Paramètres généraux. - + Secondary skill AI-generated, needs review by native speaker; delete this comment afterwards Compétence secondaire @@ -3168,7 +3222,7 @@ Ajoutez-le aux mods requis dans Carte → Paramètres généraux. - + Resource AI-generated, needs review by native speaker; delete this comment afterwards Ressource @@ -3268,54 +3322,679 @@ Ajoutez-le aux mods requis dans Carte → Paramètres généraux. Rare (%1, %2, %3, %4) - + strongest hero AI-generated, needs review by native speaker; delete this comment afterwards héros le plus fort - + generated hero AI-generated, needs review by native speaker; delete this comment afterwards héros généré - + random hero AI-generated, needs review by native speaker; delete this comment afterwards héros aléatoire - + %1 spell for %2 AI-generated, needs review by native speaker; delete this comment afterwards Sort %1 pour %2 - + %1 %2 for %3 AI-generated, needs review by native speaker; delete this comment afterwards %1 %2 pour %3 - + %1 artifact for %2 AI-generated, needs review by native speaker; delete this comment afterwards Artefact %1 pour %2 - + %1 spell scroll for %2 AI-generated, needs review by native speaker; delete this comment afterwards Parchemin %1 pour %2 - + Primary skill (Attack: %1, Defense: %2, Spell: %3, Knowledge: %4) for %5 AI-generated, needs review by native speaker; delete this comment afterwards Comp. principale (Attaque : %1, Défense : %2, Sort : %3, Connaissance : %4) pour %5 + + TemplateEditor + + + + VCMI Template Editor + + + + + File + Fichier + + + + Edit + Édition + + + + View + Affichage + + + + Toolbar + Barre d'outils + + + + Selected Template: + + + + + + + Add + Ajouter + + + + Remove + Supprimer + + + + Rename + + + + + General + Général + + + + Name + Nom + + + + Description + + + + + Min Size + + + + + + + X + + + + + + + Y + + + + + + + Z + + + + + Max Size + + + + + + Players + Joueurs + + + + Human + + + + + Allowed water content + + + + + + + None + Aucune + + + + + Normal + Normal + + + + Islands + Îles + + + + Zone + + + + + Visualisation + + + + + Position + + + + + + Size + + + + + ID + ID + + + + + Type + Type + + + + Owner + Propriétaire + + + + Zone link + + + + + + + Mines + Mines + + + + + Custom objects + + + + + + Towns + Villes + + + + + Terrain + + + + + + + + Treasure + + + + + Town info + + + + + Town count + + + + + + + + Player + Joueur + + + + + + + Neutral + Neutre + + + + Castle count + + + + + Town density + + + + + Castle density + + + + + Match terrain to town + + + + + Terrain types + + + + + Banned terrain types + + + + + Towns are same type + + + + + Allowed towns + + + + + Banned towns + + + + + Town hints + + + + + Monsters + Monstres + + + + Allowed monsters + + + + + Banned monsters + + + + + Strength + + + + + Objects + Objets + + + + Connections + + + + + Open + Ouvrir + + + + Save + Enregistrer + + + + New + Nouveau + + + + Save as... + Enregistrer sous... + + + + Ctrl+Shift+S + Ctrl+Maj+S + + + + Add zone + + + + + Remove zone + + + + + + Del + Suppr + + + + Auto position + + + + + Ctrl+P + Ctrl+P + + + + Zoom in + Zoom avant + + + + Ctrl++ + Ctrl++ + + + + Zoom out + Zoom arrière + + + + Ctrl+- + Ctrl+- + + + + Zoom auto + + + + + Ctrl+Shift+: + + + + + Zoom reset + Remise à zéro du zoom + + + + Ctrl+Shift+= + Ctrl+Maj+= + + + + Min + + + + + Max + + + + + Action + + + + + + Delete + + + + + ID: %1 + + + + + Max treasure: %1 + + + + + Player start + + + + + CPU start + + + + + Junction + + + + + Water + + + + + Sealed + + + + + + Random + Aléatoire + + + + Weak + Faible + + + + Strong + Forte + + + + Zone A + + + + + Zone B + + + + + Guard + + + + + Road + + + + + Guarded + + + + + Fictive + + + + + Repulsive + + + + + Wide + + + + + Force portal + + + + + Yes + + + + + No + + + + + Zone A: %1 +Zone B: %2 +Guard: %3 + + + + + Confirmation + Confirmation + + + + Unsaved changes will be lost, are you sure? + Les modifications non sauvegardées seront perdues. Êtes-vous sûr ? + + + + Open template + + + + + VCMI templates(*.json) + + + + + Save template + + + + + VCMI templates (*.json) + + + + + + Enter Name + + + + + + Name: + + + + + Already existing! + + + + + At template with this name is already existing. + + + + + To few templates! + + + + + At least one template should remain after removing. + + + + + + Error + Erreur + + + + + Not implemented yet! + + + + + TerrainSelector + + + + Select Terrains + + + + + Terrain Selector + + + TimedEvent @@ -3658,6 +4337,40 @@ Ajoutez-le aux mods requis dans Carte → Paramètres généraux. Tous les enregistrement texte de cette langue seront supprimés. Continuer? + + TreasureSelector + + + + Select Treasures + + + + + Treasure Selector + + + + + Min + + + + + Max + + + + + Density + + + + + Action + + + Validator @@ -4058,22 +4771,22 @@ Ajoutez-le aux mods requis dans Carte → Paramètres généraux. Annuler - + No template Pas de modèle - + No template for parameters specified. Random map cannot be generated. Pas de modèles pour les paramètres spécifiés. La carte aléatoire ne peut pas être générée. - + RMG failure Echec de RMG - + [default] AI-generated, needs review by native speaker; delete this comment afterwards [défaut] @@ -4082,27 +4795,27 @@ Ajoutez-le aux mods requis dans Carte → Paramètres généraux. main - + Filepath of the map to open. Chemin du fichier de la carte à ouvrir. - + Extract original H3 archives into a separate folder. Extraire les archives H3 d'origine dans un dossier séparé. - + From an extracted archive, it Splits TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 and Un44 into individual PNG's. À partir d'une archive extraite, il divise TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 et Un44 en fichiers PNG individuals. - + From an extracted archive, Converts single Images (found in Images folder) from .pcx to png. À partir d'une archive extraite, convertit des images uniques (trouvées dans le dossier Images) de .pcx en png. - + Delete original files, for the ones split / converted. Supprimer les fichiers d'origine, pour ceux fractionnés/converts. diff --git a/mapeditor/translation/german.ts b/mapeditor/translation/german.ts index 205a729b9..55c4ab3cd 100644 --- a/mapeditor/translation/german.ts +++ b/mapeditor/translation/german.ts @@ -47,7 +47,7 @@ CampaignEditor - + VCMI Campaign Editor VCMI Kampagnen-Editor @@ -115,37 +115,37 @@ Zeige vollen Hintergrund - + Scenario editor Szenario-Editor - + Confirmation Bestätigung - + Unsaved changes will be lost, are you sure? Ungespeicherte Änderungen gehen verloren, sind Sie sicher? - + Open map Karte öffnen - + All supported campaigns (*.vcmp *.h3c);;VCMI campaigns(*.vcmp);;HoMM3 campaigns(*.h3c) Alle unterstützten Kampagnen (*.vcmp *.h3c);;VCMI-Kampagnen(*.vcmp);;HoMM3-Kampagnen(*.h3c) - + Save campaign Kampagne speichern - + VCMI campaigns (*.vcmp) VCMI-Kampagnen (*.vcmp) @@ -154,7 +154,7 @@ CampaignProperties - + Campaign Properties Kampagnen EIgenschaften @@ -270,42 +270,42 @@ Outro-Video - + Custom Benutzerdefiniert - + Infix Infix - + X X - + Y Y - + Label Pos X Label Pos X - + Label Pos Y Label Pos Y - + Fewer Scenarios Weniger Szenarien - + New Region setup supports fewer scenarios than before. Some will removed. Continue? Neues Region-Setup unterstützt weniger Szenarien als zuvor. Es werden welche entfernt. Fortfahren? @@ -338,6 +338,20 @@ Neues Ereignis + + FactionSelector + + + + Select Factions + + + + + Faction Selector + + + GeneralSettings @@ -421,6 +435,16 @@ Artifact Artefakt + + + Save + Speichern + + + + Cancel + Abbrechen + HeroSkillsWidget @@ -553,7 +577,7 @@ MainWindow - + VCMI Map Editor VCMI-Karteneditor @@ -564,723 +588,729 @@ - + Open Recent Zuletzt geöffnet - + Map Karte - + Edit Bearbeiten - + View Ansicht - + Player Spieler - + Toolbar Werkzeugleiste - + Minimap Minikarte - + Map Objects View Kartenobjekte-Ansicht - + Browser Browser - + Inspector Inspektor - + Property Eigenschaft - + Value Wert - + Tools Werkzeuge - + Painting Malen - + Terrains Terrains - + Roads Straßen - + Rivers Flüsse - + Preview Vorschau - + Open Öffnen - + Ctrl+O Strg+O - + More... Mehr... - + Save Speichern - + Ctrl+S Strg+S - + New Neu - + Ctrl+N Strg+N - + Save as... Speichern unter... - + Ctrl+Shift+S Strg+Shift+S - - + + Campaign editor Kampagnen-Editor - - - - + + + Template editor + + + + + + + View underground Ansicht Untergrund - + Ctrl+U Strg+U - + Pass Passierbar - + Ctrl+Shift+P Strg+Shift+P - + Cut Ausschneiden - + Ctrl+X Strg+X - + Copy Kopieren - + Ctrl+C Strg+C - + Paste Einfügen - + Ctrl+V Strg+V - + Fill Füllen - + Fills the selection with obstacles Füllt die Auswahl mit Hindernissen - + Grid Raster - + Ctrl+G Strg+G - + General Allgemein - + Map title and description Titel und Beschreibung der Karte - + Ctrl+Enter Strg+Enter - + Players settings Spieler-Einstellungen - + Ctrl+P Strg+P - - + + Undo Rückgängig - + Ctrl+Z Strg+Z - + Redo Wiederholen - + Ctrl+Y Strg+Y - + Erase Löschen - + Del Entf - + Neutral Neutral - + Ctrl+0 Strg+0 - + Validate Validieren - + Ctrl+Shift+V Strg+Shift+V - - - - + + + + Update appearance Aussehen aktualisieren - + Recreate obstacles Hindernisse neu erschaffen - + Player 1 Spieler 1 - + Ctrl+1 Strg+1 - + Player 2 Spieler 2 - + Ctrl+2 Strg+2 - + Player 3 Spieler 3 - + Ctrl+3 Strg+3 - + Player 4 Spieler 4 - + Ctrl+4 Strg+4 - + Player 5 Spieler 5 - + Ctrl+5 Strg+5 - + Player 6 Spieler 6 - + Ctrl+6 Strg+6 - + Player 7 Spieler 7 - + Ctrl+7 Strg+7 - + Player 8 Spieler 8 - + Ctrl+8 Strg+8 - + Export as... Exportieren als... - + Ctrl+E Strg+E - + Translations Übersetzungen - + Ctrl+T Strg+T - - + + h3m converter h3m-Konverter - + Ctrl+Shift+M Strg+Shift+M - - + + h3c converter h3c-Konverter - + Ctrl+Shift+C Strg+Shift+C - + Lock Sperren - + Lock objects on map to avoid unnecessary changes Objekte auf der Karte sperren, um unnötige Änderungen zu vermeiden - + Ctrl+L Strg+L - + Unlock Entsperren - + Unlock all objects on the map Entsperre alle Objekte auf der Karte - + Ctrl+Shift+L Strg+Umschalt+L - + Zoom in Heranzoomen - + Ctrl++ Strg++ - + Zoom out Herauszoomen - + Ctrl+- Strg+- - + Zoom reset Zoom zurücksetzen - + Ctrl+Shift+= Strg+Umschalt+= - + Confirmation Bestätigung - + Unsaved changes will be lost, are you sure? Ungespeicherte Änderungen gehen verloren, sind sie sicher? - + Mods are required Mods sind erforderlich - + Failed to open map Karte konnte nicht geöffnet werden - + Open map Karte öffnen - + All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) Alle unterstützten Karten (*.vmap *.h3m);;VCMI-Karten (*.vmap);;HoMM3-Karten (*.h3m) - + Recently Opened Files Kürzlich geöffnete Dateien - + Map validation Validierung der Karte - + Map has critical problems and most probably will not be playable. Open Validator from the Map menu to see issues found Die Karte hat kritische Probleme und wird höchstwahrscheinlich nicht spielbar sein. Öffnen Sie den Validator aus dem Kartenmenü, um die gefundenen Probleme zu sehen - + Map has some errors. Open Validator from the Map menu to see issues found Karte hat einige Fehler. Öffnen Sie den Validator aus dem Kartenmenü, um die gefundenen Probleme zu sehen - + Failed to save map Karte konnte nicht gespeichert werden - + Save map Karte speichern - + VCMI maps (*.vmap) VCMI-Karten (*.vmap) - + Type Typ - + Towns Städte - + Objects Objekte - + Heroes Helden - + Artifacts Artefakte - + Resources Ressourcen - + Banks Bänke - + Dwellings Unterkünfte - + Grounds Gelände - + Teleports Teleporter - + Mines Minen - + Triggers Trigger - + Monsters Monster - + Quests Aufgaben - + Wog Objects Wog Objekte - + Obstacles Hindernisse - + Other Anderes - + Mods loading problem Problem beim Laden von Mods - + Critical error during Mods loading. Disable invalid mods and restart. Kritischer Fehler beim Laden von Mods. Deaktivieren Sie ungültige Mods und starten Sie neu. - - + + View surface Oberfläche anzeigen - + No objects selected Keine Objekte selektiert - + This operation is irreversible. Do you want to continue? Diese Operation ist unumkehrbar. Möchten sie fortsetzen? - + Errors occurred. %1 objects were not updated Fehler sind aufgetreten. %1 Objekte konnten nicht aktualisiert werden - + Save to image Als Bild speichern - + Select maps to convert Zu konvertierende Karten auswählen - + HoMM3 maps(*.h3m) HoMM3-Karten (*.h3m) - + Choose directory to save converted maps Verzeichnis zum Speichern der konvertierten Karten wählen - + Operation completed Vorgang abgeschlossen - + Successfully converted %1 maps Erfolgreiche Konvertierung von %1 Karten - + Failed to convert the map. Abort operation Die Karte konnte nicht konvertiert werden. Vorgang abgebrochen - + Select campaign to convert Kampagne zur Konvertierung auswählen - + HoMM3 campaigns (*.h3c) HoMM3-Kampagnen (*.h3c) - + Select destination file Zieldatei auswählen - + VCMI campaigns (*.vcmp) VCMI-Kampagnen (*.vcmp) @@ -1288,29 +1318,29 @@ MapController - + Hero %1 cannot be created as NEUTRAL. Held %1 kann nicht als NEUTRAL erstellt werden. - + Missing Required Mod AI-generated, needs review by native speaker; delete this comment afterwards Erforderliches Mod fehlt - + Do you want to do that now ? -AI-generated, needs review by native speaker; delete this comment afterwards + AI-generated, needs review by native speaker; delete this comment afterwards Möchten Sie das jetzt tun? - + This object's mod is mandatory for map to remain valid. AI-generated, needs review by native speaker; delete this comment afterwards Das Mod dieses Objekts ist erforderlich, damit die Karte gültig bleibt. @@ -1400,6 +1430,30 @@ Möchten Sie das jetzt tun? Nachricht + + MineSelector + + + + Select Mines + + + + + Mine Selector + + + + + Resource + Ressource + + + + Mines + Minen + + ModSettings @@ -1534,26 +1588,26 @@ Möchten Sie das jetzt tun? - PlayerSettings + PlayerSettingsDialog - + Player settings - Spieler-Einstellungen + Spieler-Einstellungen - + Players - Spieler + Spieler - + 1 - 1 + 1 - + Ok - Ok + Ok @@ -1603,69 +1657,69 @@ Möchten Sie das jetzt tun? Sekundärfähigkeiten: - + Compliant Konform - + Friendly Freundlich - + Aggressive Aggressiv - + Hostile Feindlich - + Savage Wild - - + + No patrol Keine Streife - + POWER RANK STÄRKE RANG - + HERO TYPE HELDENTYP - + Hero class Heldenklasse - + Portrait Porträt - + Skills Fertigkeiten - + Artifacts Artefakte - - + + %n tile(s) %n Kachel @@ -1673,305 +1727,305 @@ Möchten Sie das jetzt tun? - + Buildings Gebäude - + Events Ereignisse - + Resource Ressource - + Artifact reward Artefakt-Belohnung - + Quest Aufgabe - + Identifier Identifier - + ID ID - + SubID SubID - + InstanceName InstanzName - + IsStatic IstStatisch - - + + neutral neutral - - + + Army Armee - - - + + - - - - - + + + + + + Owner Besitzer - - + + Same as town Wie die Stadt - - + + Removable units Entfernbare Einheiten - - + + Placeholder type Platzhalter-Typ - - + + Power rank Stärke Rang - - - - + + + + Hero type Helden-Typ - - + + Experience Erfahrung - - + + MALE MÄNNLICH - - + + FEMALE WEIBLICH - - + + Gender Geschlecht - - + + Name Name - - + + Biography Biografie - - + + Spells Zaubersprüche - - + + Patrol radius Patrouillenradius - - + + Town name Stadtname - - + + Same as player Gleich wie der Spieler - - - - - - - - - + + + + + + + + + Message Nachricht - - + + Spell Zauberspruch - - + + Productivity Produktivität - - - - + + + + Amount Menge - + Character Charakter - + Select town Stadt auswählen - - + + Never flees Flieht niemals - - + + Not growing Wächst nicht - - + + Reward Belohnung - - + + Remove after Nach Entfernen - - + + Human trigger Menschlich-Auslöser - - + + Cpu trigger CPU-Auslöser - - + + First visit text Erster Besuch Text - - + + Next visit text Nächster Besuch Text - - + + Completed text Abgeschlossener Text - - - + + + Repeat quest Wiederhole Quest - - + + Time limit Zeitlimit - + UNFLAGGABLE UNFLAGGBAR - + Can't place object Objekt kann nicht platziert werden - + There can only be one grail object on the map. Es kann sich nur ein Gral auf der Karte befinden. - + (submod of %1) AI-generated, needs review by native speaker; delete this comment afterwards (Submodul von %1) - + The mod '%1'%2, is required by an object on the map. Add it to the map's required mods in Map->General settings. should be consistent with Map->General menu entry translation @@ -2013,13 +2067,13 @@ Fügen Sie es zu den erforderlichen Mods unter Karte → Allgemeine Einstellunge - + Hero Level: %1 Heldenstufe: %1 - + Hero Experience: %1 Heldenerfahrung: %1 @@ -2030,43 +2084,43 @@ Fügen Sie es zu den erforderlichen Mods unter Karte → Allgemeine Einstellunge - + Mana Percentage: %1 Mana-Prozentsatz: %1 - + Primary Skills: %1/%2/%3/%4 Primäre Fertigkeiten: %1/%2/%3/%4 - + Resources: %1 Ressourcen: %1 - + Artifacts: %1 Artefakte: %1 - + Spells: %1 Zaubersprüche: %1 - + Secondary Skills: %1 Sekundäre Fertigkeiten: %1 - + Creatures: %1 Kreaturen: %1 @@ -2086,37 +2140,37 @@ Fügen Sie es zu den erforderlichen Mods unter Karte → Allgemeine Einstellunge Spieler: %1 - + Rewards: Belohnungen: - + Reward Message: %1 Belohnungsmeldung: %1 - + Mana Diff: %1 Mana-Differenz: %1 - + Move Points: %1 Bewegungspunkte: %1 - + Move Percentage: %1 Prozentsatz der Bewegung: %1 - + Spell Cast: %1 (%2) Zauberspruch gewirkt: %1 (%2) - + Bonuses: %1 Boni: %1 @@ -2542,18 +2596,18 @@ Fügen Sie es zu den erforderlichen Mods unter Karte → Allgemeine Einstellunge Spieler - + None Keine - + Day %1 Tag %1 - - + + Reward %1 Belohnung %1 @@ -2777,8 +2831,8 @@ Fügen Sie es zu den erforderlichen Mods unter Karte → Allgemeine Einstellunge - - + + Player position Spielerposition @@ -2828,49 +2882,49 @@ Fügen Sie es zu den erforderlichen Mods unter Karte → Allgemeine Einstellunge Spieler - + Open map Karte öffnen - + All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) Alle unterstützten Karten (*.vmap *.h3m);;VCMI-Karten (*.vmap);;HoMM3-Karten (*.h3m) - - + + Error Fehler - - + + Could not open the file. Kann die Datei nicht öffnen. - + Save map Karte speichern - + VCMI maps (*.vmap); VCMI-Karten (*.vmap); - + HoMM3 maps (*.h3m); HoMM3-Karten (*.h3m); - + Source scenario Quell-Szenario - + Hero Held @@ -2905,7 +2959,7 @@ Fügen Sie es zu den erforderlichen Mods unter Karte → Allgemeine Einstellunge - + Building Gebäude @@ -2932,14 +2986,14 @@ Fügen Sie es zu den erforderlichen Mods unter Karte → Allgemeine Einstellunge - + Secondary skill Sekundäre Fähigkeit - + Resource Ressource @@ -3025,46 +3079,671 @@ Fügen Sie es zu den erforderlichen Mods unter Karte → Allgemeine Einstellunge Selten (%1, %2, %3, %4) - + strongest hero stärkster Held - + generated hero generierter Held - + random hero zufälliger Held - + %1 spell for %2 %1 Zauber für %2 - + %1 %2 for %3 %1 %2 für %3 - + %1 artifact for %2 %1 Artefakt für %2 - + %1 spell scroll for %2 %1 Zauberrolle für %2 - + Primary skill (Attack: %1, Defense: %2, Spell: %3, Knowledge: %4) for %5 Primäre Fähigkeit (Angriff: %1, Verteidigung: %2, Zauberkraft: %3, Wissen: %4) für %5 + + TemplateEditor + + + + VCMI Template Editor + + + + + File + Datei + + + + Edit + Bearbeiten + + + + View + Ansicht + + + + Toolbar + Werkzeugleiste + + + + Selected Template: + + + + + + + Add + Hinzufügen + + + + Remove + Entfernen + + + + Rename + + + + + General + Allgemein + + + + Name + Name + + + + Description + + + + + Min Size + + + + + + + X + X + + + + + + Y + Y + + + + + + Z + + + + + Max Size + + + + + + Players + Spieler + + + + Human + + + + + Allowed water content + + + + + + + None + Keine + + + + + Normal + Normal + + + + Islands + Inseln + + + + Zone + + + + + Visualisation + + + + + Position + + + + + + Size + + + + + ID + ID + + + + + Type + Typ + + + + Owner + Besitzer + + + + Zone link + + + + + + + Mines + Minen + + + + + Custom objects + + + + + + Towns + Städte + + + + + Terrain + + + + + + + + Treasure + + + + + Town info + + + + + Town count + + + + + + + + Player + Spieler + + + + + + + Neutral + Neutral + + + + Castle count + + + + + Town density + + + + + Castle density + + + + + Match terrain to town + + + + + Terrain types + + + + + Banned terrain types + + + + + Towns are same type + + + + + Allowed towns + + + + + Banned towns + + + + + Town hints + + + + + Monsters + Monster + + + + Allowed monsters + + + + + Banned monsters + + + + + Strength + + + + + Objects + Objekte + + + + Connections + + + + + Open + Öffnen + + + + Save + Speichern + + + + New + Neu + + + + Save as... + Speichern unter... + + + + Ctrl+Shift+S + Strg+Shift+S + + + + Add zone + + + + + Remove zone + + + + + + Del + Entf + + + + Auto position + + + + + Ctrl+P + Strg+P + + + + Zoom in + Heranzoomen + + + + Ctrl++ + Strg++ + + + + Zoom out + Herauszoomen + + + + Ctrl+- + Strg+- + + + + Zoom auto + + + + + Ctrl+Shift+: + + + + + Zoom reset + Zoom zurücksetzen + + + + Ctrl+Shift+= + Strg+Umschalt+= + + + + Min + + + + + Max + + + + + Action + + + + + + Delete + + + + + ID: %1 + + + + + Max treasure: %1 + + + + + Player start + + + + + CPU start + + + + + Junction + + + + + Water + + + + + Sealed + + + + + + Random + Zufall + + + + Weak + Schwach + + + + Strong + Stark + + + + Zone A + + + + + Zone B + + + + + Guard + + + + + Road + + + + + Guarded + + + + + Fictive + + + + + Repulsive + + + + + Wide + + + + + Force portal + + + + + Yes + + + + + No + + + + + Zone A: %1 +Zone B: %2 +Guard: %3 + + + + + Confirmation + Bestätigung + + + + Unsaved changes will be lost, are you sure? + + + + + Open template + + + + + VCMI templates(*.json) + + + + + Save template + + + + + VCMI templates (*.json) + + + + + + Enter Name + + + + + + Name: + + + + + Already existing! + + + + + At template with this name is already existing. + + + + + To few templates! + + + + + At least one template should remain after removing. + + + + + + Error + Fehler + + + + + Not implemented yet! + + + + + TerrainSelector + + + + Select Terrains + + + + + Terrain Selector + + + TimedEvent @@ -3405,6 +4084,40 @@ Fügen Sie es zu den erforderlichen Mods unter Karte → Allgemeine Einstellunge Alle vorhandenen Textsätze für diese Sprache werden entfernt. Weiter? + + TreasureSelector + + + + Select Treasures + + + + + Treasure Selector + + + + + Min + + + + + Max + + + + + Density + + + + + Action + + + Validator @@ -3796,22 +4509,22 @@ Fügen Sie es zu den erforderlichen Mods unter Karte → Allgemeine Einstellunge Abbrechen - + No template Kein Template - + No template for parameters specified. Random map cannot be generated. Es wurde kein Template für Parameter erstellt. Zufällige Karte kann nicht generiert werden. - + RMG failure RMG-Fehler - + [default] [Standard] @@ -3819,27 +4532,27 @@ Fügen Sie es zu den erforderlichen Mods unter Karte → Allgemeine Einstellunge main - + Filepath of the map to open. Dateipfad der zu öffnenden Karte. - + Extract original H3 archives into a separate folder. Extrahieren Sie die Original-H3-Archive in einen separaten Ordner. - + From an extracted archive, it Splits TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 and Un44 into individual PNG's. Aus einem extrahierten Archiv zerlegt es TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 und Un44 in einzelne PNGs. - + From an extracted archive, Converts single Images (found in Images folder) from .pcx to png. Aus einem extrahierten Archiv werden einzelne Bilder (aus dem Ordner "Images") von .pcx in png konvertiert. - + Delete original files, for the ones split / converted. Löschen Sie die Originaldateien für die gesplitteten/konvertierten Dateien. diff --git a/mapeditor/translation/greek.ts b/mapeditor/translation/greek.ts index 38f0e9ec6..b3acfc175 100644 --- a/mapeditor/translation/greek.ts +++ b/mapeditor/translation/greek.ts @@ -54,7 +54,7 @@ CampaignEditor - + VCMI Campaign Editor AI-generated, needs review by native speaker; delete this comment afterwards VCMI Επεξεργαστής Εκστρατείας @@ -135,43 +135,43 @@ Εμφάνιση πλήρους φόντου - + Scenario editor AI-generated, needs review by native speaker; delete this comment afterwards Επεξεργαστής σεναρίου - + Confirmation AI-generated, needs review by native speaker; delete this comment afterwards Επιβεβαίωση - + Unsaved changes will be lost, are you sure? AI-generated, needs review by native speaker; delete this comment afterwards Οι μη αποθηκευμένες αλλαγές θα χαθούν, είστε βέβαιοι; - + Open map AI-generated, needs review by native speaker; delete this comment afterwards Άνοιγμα χάρτη - + All supported campaigns (*.vcmp *.h3c);;VCMI campaigns(*.vcmp);;HoMM3 campaigns(*.h3c) AI-generated, needs review by native speaker; delete this comment afterwards Όλες οι υποστηριζόμενες εκστρατείες (*.vcmp *.h3c);;VCMI εκστρατείες(*.vcmp);;HoMM3 εκστρατείες(*.h3c) - + Save campaign AI-generated, needs review by native speaker; delete this comment afterwards Αποθήκευση εκστρατείας - + VCMI campaigns (*.vcmp) AI-generated, needs review by native speaker; delete this comment afterwards VCMI εκστρατείες (*.vcmp) @@ -181,7 +181,7 @@ CampaignProperties - + Campaign Properties AI-generated, needs review by native speaker; delete this comment afterwards Ιδιότητες Εκστρατείας @@ -320,47 +320,47 @@ Τελικό βίντεο - + Custom AI-generated, needs review by native speaker; delete this comment afterwards Προσαρμοσμένο - + Infix AI-generated, needs review by native speaker; delete this comment afterwards Ενδιάμεσο - + X - + Y - + Label Pos X AI-generated, needs review by native speaker; delete this comment afterwards Θέση ετικέτας Χ - + Label Pos Y AI-generated, needs review by native speaker; delete this comment afterwards Θέση ετικέτας Υ - + Fewer Scenarios AI-generated, needs review by native speaker; delete this comment afterwards Λιγότερα σενάρια - + New Region setup supports fewer scenarios than before. Some will removed. Continue? AI-generated, needs review by native speaker; delete this comment afterwards Η νέα ρύθμιση περιοχής υποστηρίζει λιγότερα σενάρια από πριν. Μερικά θα αφαιρεθούν. Συνέχεια; @@ -399,6 +399,20 @@ Νέο γεγονός + + FactionSelector + + + + Select Factions + + + + + Faction Selector + + + GeneralSettings @@ -497,6 +511,16 @@ AI-generated, needs review by native speaker; delete this comment afterwards Τεχνούργημα + + + Save + Αποθήκευση + + + + Cancel + Ακύρωση + HeroSkillsWidget @@ -652,7 +676,7 @@ MainWindow - + VCMI Map Editor Επεξεργαστής χάρτη VCMI @@ -664,864 +688,870 @@ - + Open Recent AI-generated, needs review by native speaker; delete this comment afterwards Άνοιγμα πρόσφατων - + Map AI-generated, needs review by native speaker; delete this comment afterwards Χάρτης - + Edit AI-generated, needs review by native speaker; delete this comment afterwards Επεξεργασία - + View AI-generated, needs review by native speaker; delete this comment afterwards Προβολή - + Player AI-generated, needs review by native speaker; delete this comment afterwards Παίκτης - + Toolbar AI-generated, needs review by native speaker; delete this comment afterwards Γραμμή εργαλείων - + Minimap AI-generated, needs review by native speaker; delete this comment afterwards Μικροχάρτης - + Map Objects View AI-generated, needs review by native speaker; delete this comment afterwards Προβολή αντικειμένων χάρτη - + Browser AI-generated, needs review by native speaker; delete this comment afterwards Περιηγητής - + Inspector AI-generated, needs review by native speaker; delete this comment afterwards Επιθεωρητής - + Property AI-generated, needs review by native speaker; delete this comment afterwards Ιδιότητα - + Value AI-generated, needs review by native speaker; delete this comment afterwards Τιμή - + Tools AI-generated, needs review by native speaker; delete this comment afterwards Εργαλεία - + Painting AI-generated, needs review by native speaker; delete this comment afterwards Ζωγραφική - + Terrains AI-generated, needs review by native speaker; delete this comment afterwards Εδάφη - + Roads AI-generated, needs review by native speaker; delete this comment afterwards Δρόμοι - + Rivers AI-generated, needs review by native speaker; delete this comment afterwards Ποτάμια - + Preview AI-generated, needs review by native speaker; delete this comment afterwards Προεπισκόπηση - + Open AI-generated, needs review by native speaker; delete this comment afterwards Άνοιγμα - + Ctrl+O AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+O - + More... AI-generated, needs review by native speaker; delete this comment afterwards Περισσότερα... - + Save AI-generated, needs review by native speaker; delete this comment afterwards Αποθήκευση - + Ctrl+S AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+S - + New AI-generated, needs review by native speaker; delete this comment afterwards Νέο - + Ctrl+N AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+N - + Save as... AI-generated, needs review by native speaker; delete this comment afterwards Αποθήκευση ως... - + Ctrl+Shift+S AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Maj+S - - + + Campaign editor AI-generated, needs review by native speaker; delete this comment afterwards Επεξεργαστής εκστρατείας - - - - + + + Template editor + + + + + + + View underground AI-generated, needs review by native speaker; delete this comment afterwards Προβολή υπόγειου - + Ctrl+U AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+U - + Pass AI-generated, needs review by native speaker; delete this comment afterwards Πάσο - + Ctrl+Shift+P AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Maj+P - + Cut AI-generated, needs review by native speaker; delete this comment afterwards Αποκοπή - + Ctrl+X AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+X - + Copy AI-generated, needs review by native speaker; delete this comment afterwards Αντιγραφή - + Ctrl+C AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+C - + Paste AI-generated, needs review by native speaker; delete this comment afterwards Επικόλληση - + Ctrl+V AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+V - + Fill AI-generated, needs review by native speaker; delete this comment afterwards Γέμισμα - + Fills the selection with obstacles AI-generated, needs review by native speaker; delete this comment afterwards Γεμίζει την επιλογή με εμπόδια - + Grid AI-generated, needs review by native speaker; delete this comment afterwards Πλέγμα - + Ctrl+G AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+G - + General AI-generated, needs review by native speaker; delete this comment afterwards Γενικά - + Map title and description AI-generated, needs review by native speaker; delete this comment afterwards Τίτλος και περιγραφή χάρτη - + Ctrl+Enter AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Enter - + Players settings AI-generated, needs review by native speaker; delete this comment afterwards Ρυθμίσεις παικτών - + Ctrl+P AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+P - - + + Undo AI-generated, needs review by native speaker; delete this comment afterwards Αναίρεση - + Ctrl+Z AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Z - + Redo AI-generated, needs review by native speaker; delete this comment afterwards Επαναφορά - + Ctrl+Y AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Y - + Erase AI-generated, needs review by native speaker; delete this comment afterwards Διαγραφή - + Del AI-generated, needs review by native speaker; delete this comment afterwards Del - + Neutral AI-generated, needs review by native speaker; delete this comment afterwards Ουδέτερος - + Ctrl+0 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+0 - + Validate AI-generated, needs review by native speaker; delete this comment afterwards Επικύρωση - + Ctrl+Shift+V AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Maj+V - - - - + + + + Update appearance AI-generated, needs review by native speaker; delete this comment afterwards Ενημέρωση εμφάνισης - + Recreate obstacles AI-generated, needs review by native speaker; delete this comment afterwards Αναδημιουργία εμποδίων - + Player 1 AI-generated, needs review by native speaker; delete this comment afterwards Παίκτης 1 - + Ctrl+1 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+1 - + Player 2 AI-generated, needs review by native speaker; delete this comment afterwards Παίκτης 2 - + Ctrl+2 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+2 - + Player 3 AI-generated, needs review by native speaker; delete this comment afterwards Παίκτης 3 - + Ctrl+3 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+3 - + Player 4 AI-generated, needs review by native speaker; delete this comment afterwards Παίκτης 4 - + Ctrl+4 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+4 - + Player 5 AI-generated, needs review by native speaker; delete this comment afterwards Παίκτης 5 - + Ctrl+5 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+5 - + Player 6 AI-generated, needs review by native speaker; delete this comment afterwards Παίκτης 6 - + Ctrl+6 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+6 - + Player 7 AI-generated, needs review by native speaker; delete this comment afterwards Παίκτης 7 - + Ctrl+7 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+7 - + Player 8 AI-generated, needs review by native speaker; delete this comment afterwards Παίκτης 8 - + Ctrl+8 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+8 - + Export as... AI-generated, needs review by native speaker; delete this comment afterwards Εξαγωγή ως... - + Ctrl+E AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+E - + Translations AI-generated, needs review by native speaker; delete this comment afterwards Μεταφράσεις - + Ctrl+T AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+T - - + + h3m converter AI-generated, needs review by native speaker; delete this comment afterwards Μετατροπέας h3m - + Ctrl+Shift+M AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Maj+M - - + + h3c converter AI-generated, needs review by native speaker; delete this comment afterwards Μετατροπέας h3c - + Ctrl+Shift+C AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Maj+C - + Lock AI-generated, needs review by native speaker; delete this comment afterwards Κλείδωμα - + Lock objects on map to avoid unnecessary changes AI-generated, needs review by native speaker; delete this comment afterwards Κλειδώστε αντικείμενα στον χάρτη για να αποφύγετε περιττές αλλαγές - + Ctrl+L AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+L - + Unlock AI-generated, needs review by native speaker; delete this comment afterwards Ξεκλείδωμα - + Unlock all objects on the map AI-generated, needs review by native speaker; delete this comment afterwards Ξεκλειδώστε όλα τα αντικείμενα στον χάρτη - + Ctrl+Shift+L AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Maj+L - + Zoom in AI-generated, needs review by native speaker; delete this comment afterwards Μεγέθυνση - + Ctrl++ AI-generated, needs review by native speaker; delete this comment afterwards Ctrl++ - + Zoom out AI-generated, needs review by native speaker; delete this comment afterwards Σμίκρυνση - + Ctrl+- AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+- - + Zoom reset AI-generated, needs review by native speaker; delete this comment afterwards Επαναφορά ζουμ - + Ctrl+Shift+= AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Maj+= - + Confirmation AI-generated, needs review by native speaker; delete this comment afterwards Επιβεβαίωση - + Unsaved changes will be lost, are you sure? AI-generated, needs review by native speaker; delete this comment afterwards Οι μη αποθηκευμένες αλλαγές θα χαθούν, είστε βέβαιοι; - + Mods are required AI-generated, needs review by native speaker; delete this comment afterwards Απαιτούνται mods - + Failed to open map AI-generated, needs review by native speaker; delete this comment afterwards Αποτυχία ανοίγματος χάρτη - + Open map AI-generated, needs review by native speaker; delete this comment afterwards Άνοιγμα χάρτη - + All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) AI-generated, needs review by native speaker; delete this comment afterwards Όλοι οι υποστηριζόμενοι χάρτες (*.vmap *.h3m);;Χάρτες VCMI(*.vmap);;Χάρτες HoMM3(*.h3m) - + Recently Opened Files AI-generated, needs review by native speaker; delete this comment afterwards Πρόσφατα Ανοιγμένα Αρχεία - + Map validation AI-generated, needs review by native speaker; delete this comment afterwards Επικύρωση χάρτη - + Map has critical problems and most probably will not be playable. Open Validator from the Map menu to see issues found AI-generated, needs review by native speaker; delete this comment afterwards Ο χάρτης έχει κρίσιμα προβλήματα και πιθανότατα δεν θα είναι αναπαίξιμος. Ανοίξτε τον Επικυρωτή από το μενού Χάρτης για να δείτε τα προβλήματα - + Map has some errors. Open Validator from the Map menu to see issues found AI-generated, needs review by native speaker; delete this comment afterwards Ο χάρτης έχει κάποια σφάλματα. Ανοίξτε τον Επικυρωτή από το μενού Χάρτης για να δείτε τα προβλήματα - + Failed to save map AI-generated, needs review by native speaker; delete this comment afterwards Αποτυχία αποθήκευσης χάρτη - + Save map AI-generated, needs review by native speaker; delete this comment afterwards Αποθήκευση χάρτη - + VCMI maps (*.vmap) AI-generated, needs review by native speaker; delete this comment afterwards Χάρτες VCMI (*.vmap) - + Type AI-generated, needs review by native speaker; delete this comment afterwards Τύπος - + Towns AI-generated, needs review by native speaker; delete this comment afterwards Πόλεις - + Objects AI-generated, needs review by native speaker; delete this comment afterwards Αντικείμενα - + Heroes AI-generated, needs review by native speaker; delete this comment afterwards Ήρωες - + Artifacts AI-generated, needs review by native speaker; delete this comment afterwards Τεχνουργήματα - + Resources AI-generated, needs review by native speaker; delete this comment afterwards Πόροι - + Banks AI-generated, needs review by native speaker; delete this comment afterwards Τράπεζες - + Dwellings AI-generated, needs review by native speaker; delete this comment afterwards Κατοικίες - + Grounds AI-generated, needs review by native speaker; delete this comment afterwards Εδάφη - + Teleports AI-generated, needs review by native speaker; delete this comment afterwards Τηλεμεταφορές - + Mines AI-generated, needs review by native speaker; delete this comment afterwards Ορυχεία - + Triggers AI-generated, needs review by native speaker; delete this comment afterwards Ενεργοποιητές - + Monsters AI-generated, needs review by native speaker; delete this comment afterwards Τέρατα - + Quests AI-generated, needs review by native speaker; delete this comment afterwards Αποστολές - + Wog Objects AI-generated, needs review by native speaker; delete this comment afterwards Αντικείμενα Wog - + Obstacles AI-generated, needs review by native speaker; delete this comment afterwards Εμπόδια - + Other AI-generated, needs review by native speaker; delete this comment afterwards Άλλα - + Mods loading problem AI-generated, needs review by native speaker; delete this comment afterwards Πρόβλημα φόρτωσης Mods - + Critical error during Mods loading. Disable invalid mods and restart. AI-generated, needs review by native speaker; delete this comment afterwards Κρίσιμο σφάλμα κατά τη φόρτωση των Mods. Απενεργοποιήστε τα άκυρα mods και επανεκκινήστε. - - + + View surface AI-generated, needs review by native speaker; delete this comment afterwards Προβολή επιφάνειας - + No objects selected AI-generated, needs review by native speaker; delete this comment afterwards Δεν επιλέχθηκαν αντικείμενα - + This operation is irreversible. Do you want to continue? AI-generated, needs review by native speaker; delete this comment afterwards Αυτή η ενέργεια είναι μη αναστρέψιμη. Θέλετε να συνεχίσετε; - + Errors occurred. %1 objects were not updated AI-generated, needs review by native speaker; delete this comment afterwards Παρουσιάστηκαν σφάλματα. %1 αντικείμενα δεν ενημερώθηκαν - + Save to image AI-generated, needs review by native speaker; delete this comment afterwards Αποθήκευση ως εικόνα - + Select maps to convert AI-generated, needs review by native speaker; delete this comment afterwards Επιλέξτε χάρτες για μετατροπή - + HoMM3 maps(*.h3m) AI-generated, needs review by native speaker; delete this comment afterwards Χάρτες HoMM3(*.h3m) - + Choose directory to save converted maps AI-generated, needs review by native speaker; delete this comment afterwards Επιλέξτε κατάλογο για αποθήκευση μετατρεπόμενων χαρτών - + Operation completed AI-generated, needs review by native speaker; delete this comment afterwards Η λειτουργία ολοκληρώθηκε - + Successfully converted %1 maps AI-generated, needs review by native speaker; delete this comment afterwards Μετατράπηκαν επιτυχώς %1 χάρτες - + Failed to convert the map. Abort operation AI-generated, needs review by native speaker; delete this comment afterwards Αποτυχία μετατροπής του χάρτη. Διακοπή λειτουργίας - + Select campaign to convert AI-generated, needs review by native speaker; delete this comment afterwards Επιλέξτε καμπάνια για μετατροπή - + HoMM3 campaigns (*.h3c) AI-generated, needs review by native speaker; delete this comment afterwards Καμπάνιες HoMM3 (*.h3c) - + Select destination file AI-generated, needs review by native speaker; delete this comment afterwards Επιλέξτε αρχείο προορισμού - + VCMI campaigns (*.vcmp) AI-generated, needs review by native speaker; delete this comment afterwards Καμπάνιες VCMI (*.vcmp) @@ -1530,30 +1560,30 @@ MapController - + Hero %1 cannot be created as NEUTRAL. AI-generated, needs review by native speaker; delete this comment afterwards Ο Ήρωας %1 δεν μπορεί να δημιουργηθεί ως ΟΥΔΕΤΕΡΟΣ. - + Missing Required Mod AI-generated, needs review by native speaker; delete this comment afterwards Λείπει απαιτούμενο Mod - + Do you want to do that now ? -AI-generated, needs review by native speaker; delete this comment afterwards + AI-generated, needs review by native speaker; delete this comment afterwards Θέλετε να το κάνετε τώρα ; - + This object's mod is mandatory for map to remain valid. AI-generated, needs review by native speaker; delete this comment afterwards Το mod αυτού του αντικειμένου είναι υποχρεωτικό για να παραμείνει ο χάρτης έγκυρος. @@ -1658,6 +1688,30 @@ Do you want to do that now ? Μήνυμα + + MineSelector + + + + Select Mines + + + + + Mine Selector + + + + + Resource + Πόρος + + + + Mines + Ορυχεία + + ModSettings @@ -1811,29 +1865,26 @@ Do you want to do that now ? - PlayerSettings + PlayerSettingsDialog - + Player settings - AI-generated, needs review by native speaker; delete this comment afterwards Ρυθμίσεις παίκτη - + Players - AI-generated, needs review by native speaker; delete this comment afterwards Παίκτες - + 1 - + Ok - AI-generated, needs review by native speaker; delete this comment afterwards - Εντάξει + @@ -1890,81 +1941,81 @@ Do you want to do that now ? Δευτερεύουσες ικανότητες: - + Compliant AI-generated, needs review by native speaker; delete this comment afterwards Συμβατός - + Friendly AI-generated, needs review by native speaker; delete this comment afterwards Φιλικός - + Aggressive AI-generated, needs review by native speaker; delete this comment afterwards Επιθετικός - + Hostile AI-generated, needs review by native speaker; delete this comment afterwards Εχθρικός - + Savage AI-generated, needs review by native speaker; delete this comment afterwards Άγριος - - + + No patrol AI-generated, needs review by native speaker; delete this comment afterwards Χωρίς περιπολία - + POWER RANK AI-generated, needs review by native speaker; delete this comment afterwards ΚΑΤΑΤΑΞΗ ΔΥΝΑΜΗΣ - + HERO TYPE AI-generated, needs review by native speaker; delete this comment afterwards ΤΥΠΟΣ ΗΡΩΑ - + Hero class AI-generated, needs review by native speaker; delete this comment afterwards Κλάση ήρωα - + Portrait AI-generated, needs review by native speaker; delete this comment afterwards Πορτρέτο - + Skills AI-generated, needs review by native speaker; delete this comment afterwards Ικανότητες - + Artifacts AI-generated, needs review by native speaker; delete this comment afterwards Αντικείμενα - - + + %n tile(s) AI-generated, needs review by native speaker; delete this comment afterwards @@ -1973,353 +2024,353 @@ Do you want to do that now ? - + Buildings AI-generated, needs review by native speaker; delete this comment afterwards Κτίρια - + Events AI-generated, needs review by native speaker; delete this comment afterwards Γεγονότα - + Resource AI-generated, needs review by native speaker; delete this comment afterwards Πόρος - + Artifact reward AI-generated, needs review by native speaker; delete this comment afterwards Ανταμοιβή αντικειμένου - + Quest AI-generated, needs review by native speaker; delete this comment afterwards Αποστολή - + Identifier AI-generated, needs review by native speaker; delete this comment afterwards Αναγνωριστικό - + ID AI-generated, needs review by native speaker; delete this comment afterwards ID - + SubID AI-generated, needs review by native speaker; delete this comment afterwards SubID - + InstanceName AI-generated, needs review by native speaker; delete this comment afterwards ΌνομαΣτιγμιότυπου - + IsStatic AI-generated, needs review by native speaker; delete this comment afterwards ΕίναιΣτατικό - - + + neutral AI-generated, needs review by native speaker; delete this comment afterwards ουδέτερος - - + + Army AI-generated, needs review by native speaker; delete this comment afterwards Στρατός - - - + + - - - - - + + + + + + Owner AI-generated, needs review by native speaker; delete this comment afterwards Ιδιοκτήτης - - + + Same as town AI-generated, needs review by native speaker; delete this comment afterwards Ίδιος με την πόλη - - + + Removable units AI-generated, needs review by native speaker; delete this comment afterwards Αφαιρούμενες μονάδες - - + + Placeholder type AI-generated, needs review by native speaker; delete this comment afterwards Τύπος placeholder - - + + Power rank AI-generated, needs review by native speaker; delete this comment afterwards Κατάταξη δύναμης - - - - + + + + Hero type AI-generated, needs review by native speaker; delete this comment afterwards Τύπος ήρωα - - + + Experience AI-generated, needs review by native speaker; delete this comment afterwards Εμπειρία - - + + MALE AI-generated, needs review by native speaker; delete this comment afterwards ΑΝΔΡΑΣ - - + + FEMALE AI-generated, needs review by native speaker; delete this comment afterwards ΓΥΝΑΙΚΑ - - + + Gender AI-generated, needs review by native speaker; delete this comment afterwards Φύλο - - + + Name AI-generated, needs review by native speaker; delete this comment afterwards Όνομα - - + + Biography AI-generated, needs review by native speaker; delete this comment afterwards Βιογραφία - - + + Spells AI-generated, needs review by native speaker; delete this comment afterwards Ξόρκια - - + + Patrol radius AI-generated, needs review by native speaker; delete this comment afterwards Ακτίνα περιπολίας - - + + Town name AI-generated, needs review by native speaker; delete this comment afterwards Όνομα πόλης - - + + Same as player AI-generated, needs review by native speaker; delete this comment afterwards Ίδιο με τον παίκτη - - - - - - - - - + + + + + + + + + Message AI-generated, needs review by native speaker; delete this comment afterwards Μήνυμα - - + + Spell AI-generated, needs review by native speaker; delete this comment afterwards Ξόρκι - - + + Productivity AI-generated, needs review by native speaker; delete this comment afterwards Παραγωγικότητα - - - - + + + + Amount AI-generated, needs review by native speaker; delete this comment afterwards Ποσότητα - + Character AI-generated, needs review by native speaker; delete this comment afterwards Χαρακτήρας - + Select town AI-generated, needs review by native speaker; delete this comment afterwards Επιλογή πόλης - - + + Never flees AI-generated, needs review by native speaker; delete this comment afterwards Δεν τρέπεται ποτέ σε φυγή - - + + Not growing AI-generated, needs review by native speaker; delete this comment afterwards Δεν αυξάνεται - - + + Reward AI-generated, needs review by native speaker; delete this comment afterwards Ανταμοιβή - - + + Remove after AI-generated, needs review by native speaker; delete this comment afterwards Αφαίρεση μετά από - - + + Human trigger AI-generated, needs review by native speaker; delete this comment afterwards Ενεργοποίηση από άνθρωπο - - + + Cpu trigger AI-generated, needs review by native speaker; delete this comment afterwards Ενεργοποίηση από Υπολογιστή - - + + First visit text AI-generated, needs review by native speaker; delete this comment afterwards Κείμενο πρώτης επίσκεψης - - + + Next visit text AI-generated, needs review by native speaker; delete this comment afterwards Κείμενο επόμενης επίσκεψης - - + + Completed text AI-generated, needs review by native speaker; delete this comment afterwards Κείμενο ολοκλήρωσης - - - + + + Repeat quest AI-generated, needs review by native speaker; delete this comment afterwards Επανάληψη αποστολής - - + + Time limit AI-generated, needs review by native speaker; delete this comment afterwards Χρονικό όριο - + UNFLAGGABLE AI-generated, needs review by native speaker; delete this comment afterwards ΧΩΡΙΣ ΣΗΜΑΙΑ - + Can't place object AI-generated, needs review by native speaker; delete this comment afterwards Αδυναμία τοποθέτησης αντικειμένου - + There can only be one grail object on the map. AI-generated, needs review by native speaker; delete this comment afterwards Μπορεί να υπάρχει μόνο ένα αντικείμενο Γκράαλ στον χάρτη. - + (submod of %1) AI-generated, needs review by native speaker; delete this comment afterwards (υπο-τροποποίηση του %1) - + The mod '%1'%2, is required by an object on the map. Add it to the map's required mods in Map->General settings. should be consistent with Map->General menu entry translation @@ -2367,14 +2418,14 @@ Add it to the map's required mods in Map->General settings. - + Hero Level: %1 AI-generated, needs review by native speaker; delete this comment afterwards Επίπεδο Ήρωα: %1 - + Hero Experience: %1 AI-generated, needs review by native speaker; delete this comment afterwards Εμπειρία Ήρωα: %1 @@ -2387,49 +2438,49 @@ Add it to the map's required mods in Map->General settings. - + Mana Percentage: %1 AI-generated, needs review by native speaker; delete this comment afterwards Ποσοστό Μάνα: %1 - + Primary Skills: %1/%2/%3/%4 AI-generated, needs review by native speaker; delete this comment afterwards Πρωτεύοντα Χαρακτηριστικά: %1/%2/%3/%4 - + Resources: %1 AI-generated, needs review by native speaker; delete this comment afterwards Πόροι: %1 - + Artifacts: %1 AI-generated, needs review by native speaker; delete this comment afterwards Τεχνουργήματα: %1 - + Spells: %1 AI-generated, needs review by native speaker; delete this comment afterwards Ξόρκια: %1 - + Secondary Skills: %1 AI-generated, needs review by native speaker; delete this comment afterwards Δευτερεύουσες Δεξιότητες: %1 - + Creatures: %1 AI-generated, needs review by native speaker; delete this comment afterwards Μονάδες: %1 @@ -2453,43 +2504,43 @@ Add it to the map's required mods in Map->General settings. Παίκτες: %1 - + Rewards: AI-generated, needs review by native speaker; delete this comment afterwards Ανταμοιβές: - + Reward Message: %1 AI-generated, needs review by native speaker; delete this comment afterwards Μήνυμα Ανταμοιβής: %1 - + Mana Diff: %1 AI-generated, needs review by native speaker; delete this comment afterwards Διαφορά Μάνα: %1 - + Move Points: %1 AI-generated, needs review by native speaker; delete this comment afterwards Πόντοι Κίνησης: %1 - + Move Percentage: %1 AI-generated, needs review by native speaker; delete this comment afterwards Ποσοστό Κίνησης: %1 - + Spell Cast: %1 (%2) AI-generated, needs review by native speaker; delete this comment afterwards Ρίψη Ξορκιού: %1 (%2) - + Bonuses: %1 AI-generated, needs review by native speaker; delete this comment afterwards Μπόνους: %1 @@ -2991,20 +3042,20 @@ Add it to the map's required mods in Map->General settings. Παίκτες - + None AI-generated, needs review by native speaker; delete this comment afterwards Κανένας - + Day %1 AI-generated, needs review by native speaker; delete this comment afterwards Ημέρα %1 - - + + Reward %1 AI-generated, needs review by native speaker; delete this comment afterwards Ανταμοιβή %1 @@ -3270,8 +3321,8 @@ Add it to the map's required mods in Map->General settings. - - + + Player position AI-generated, needs review by native speaker; delete this comment afterwards Θέση παίκτη @@ -3331,57 +3382,57 @@ Add it to the map's required mods in Map->General settings. Παίκτης - + Open map AI-generated, needs review by native speaker; delete this comment afterwards Άνοιγμα χάρτη - + All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) AI-generated, needs review by native speaker; delete this comment afterwards Όλοι οι υποστηριζόμενοι χάρτες (*.vmap *.h3m);;Χάρτες VCMI(*.vmap);;Χάρτες HoMM3(*.h3m) - - + + Error AI-generated, needs review by native speaker; delete this comment afterwards Σφάλμα - - + + Could not open the file. AI-generated, needs review by native speaker; delete this comment afterwards Δεν ήταν δυνατό το άνοιγμα του αρχείου. - + Save map AI-generated, needs review by native speaker; delete this comment afterwards Αποθήκευση χάρτη - + VCMI maps (*.vmap); AI-generated, needs review by native speaker; delete this comment afterwards Χάρτες VCMI (*.vmap); - + HoMM3 maps (*.h3m); AI-generated, needs review by native speaker; delete this comment afterwards Χάρτες HoMM3 (*.h3m); - + Source scenario AI-generated, needs review by native speaker; delete this comment afterwards Σενάριο πηγής - + Hero AI-generated, needs review by native speaker; delete this comment afterwards Ήρωας @@ -3421,7 +3472,7 @@ Add it to the map's required mods in Map->General settings. - + Building AI-generated, needs review by native speaker; delete this comment afterwards Κτίριο @@ -3452,7 +3503,7 @@ Add it to the map's required mods in Map->General settings. - + Secondary skill AI-generated, needs review by native speaker; delete this comment afterwards Δευτερεύουσα ικανότητα @@ -3460,7 +3511,7 @@ Add it to the map's required mods in Map->General settings. - + Resource AI-generated, needs review by native speaker; delete this comment afterwards Πόρος @@ -3562,54 +3613,679 @@ Add it to the map's required mods in Map->General settings. Σπάνιο (%1, %2, %3, %4) - + strongest hero AI-generated, needs review by native speaker; delete this comment afterwards ισχυρότερος ήρωας - + generated hero AI-generated, needs review by native speaker; delete this comment afterwards παραγόμενος ήρωας - + random hero AI-generated, needs review by native speaker; delete this comment afterwards τυχαίος ήρωας - + %1 spell for %2 AI-generated, needs review by native speaker; delete this comment afterwards %1 ξόρκι για %2 - + %1 %2 for %3 AI-generated, needs review by native speaker; delete this comment afterwards %1 %2 για %3 - + %1 artifact for %2 AI-generated, needs review by native speaker; delete this comment afterwards %1 τεχνουργήματα για %2 - + %1 spell scroll for %2 AI-generated, needs review by native speaker; delete this comment afterwards %1 κύλινδρος ξορκιού για %2 - + Primary skill (Attack: %1, Defense: %2, Spell: %3, Knowledge: %4) for %5 AI-generated, needs review by native speaker; delete this comment afterwards Πρωτεύουσα ικανότητα (Επίθεση: %1, Άμυνα: %2, Ξόρκι: %3, Γνώση: %4) για %5 + + TemplateEditor + + + + VCMI Template Editor + + + + + File + Αρχείο + + + + Edit + Επεξεργασία + + + + View + Προβολή + + + + Toolbar + Γραμμή εργαλείων + + + + Selected Template: + + + + + + + Add + Προσθήκη + + + + Remove + Αφαίρεση + + + + Rename + + + + + General + Γενικά + + + + Name + Όνομα + + + + Description + + + + + Min Size + + + + + + + X + + + + + + + Y + + + + + + + Z + + + + + Max Size + + + + + + Players + Παίκτες + + + + Human + + + + + Allowed water content + + + + + + + None + + + + + + Normal + Κανονική + + + + Islands + Νησιά + + + + Zone + + + + + Visualisation + + + + + Position + + + + + + Size + + + + + ID + ID + + + + + Type + Τύπος + + + + Owner + Ιδιοκτήτης + + + + Zone link + + + + + + + Mines + Ορυχεία + + + + + Custom objects + + + + + + Towns + Πόλεις + + + + + Terrain + + + + + + + + Treasure + + + + + Town info + + + + + Town count + + + + + + + + Player + Παίκτης + + + + + + + Neutral + Ουδέτερος + + + + Castle count + + + + + Town density + + + + + Castle density + + + + + Match terrain to town + + + + + Terrain types + + + + + Banned terrain types + + + + + Towns are same type + + + + + Allowed towns + + + + + Banned towns + + + + + Town hints + + + + + Monsters + Τέρατα + + + + Allowed monsters + + + + + Banned monsters + + + + + Strength + + + + + Objects + Αντικείμενα + + + + Connections + + + + + Open + Άνοιγμα + + + + Save + Αποθήκευση + + + + New + Νέο + + + + Save as... + Αποθήκευση ως... + + + + Ctrl+Shift+S + + + + + Add zone + + + + + Remove zone + + + + + + Del + Del + + + + Auto position + + + + + Ctrl+P + Ctrl+P + + + + Zoom in + Μεγέθυνση + + + + Ctrl++ + Ctrl++ + + + + Zoom out + Σμίκρυνση + + + + Ctrl+- + Ctrl+- + + + + Zoom auto + + + + + Ctrl+Shift+: + + + + + Zoom reset + Επαναφορά ζουμ + + + + Ctrl+Shift+= + Ctrl+Maj+= + + + + Min + + + + + Max + + + + + Action + + + + + + Delete + + + + + ID: %1 + + + + + Max treasure: %1 + + + + + Player start + + + + + CPU start + + + + + Junction + + + + + Water + + + + + Sealed + + + + + + Random + + + + + Weak + Αδύναμη + + + + Strong + Δυνατή + + + + Zone A + + + + + Zone B + + + + + Guard + + + + + Road + + + + + Guarded + + + + + Fictive + + + + + Repulsive + + + + + Wide + + + + + Force portal + + + + + Yes + + + + + No + + + + + Zone A: %1 +Zone B: %2 +Guard: %3 + + + + + Confirmation + Επιβεβαίωση + + + + Unsaved changes will be lost, are you sure? + Οι μη αποθηκευμένες αλλαγές θα χαθούν, είστε βέβαιοι; + + + + Open template + + + + + VCMI templates(*.json) + + + + + Save template + + + + + VCMI templates (*.json) + + + + + + Enter Name + + + + + + Name: + + + + + Already existing! + + + + + At template with this name is already existing. + + + + + To few templates! + + + + + At least one template should remain after removing. + + + + + + Error + Σφάλμα + + + + + Not implemented yet! + + + + + TerrainSelector + + + + Select Terrains + + + + + Terrain Selector + + + TimedEvent @@ -4012,6 +4688,40 @@ Add it to the map's required mods in Map->General settings. Όλες οι υπάρχουσες εγγραφές κειμένου για αυτήν τη γλώσσα θα αφαιρεθούν. Συνέχεια; + + TreasureSelector + + + + Select Treasures + + + + + Treasure Selector + + + + + Min + + + + + Max + + + + + Density + + + + + Action + + + Validator @@ -4476,25 +5186,25 @@ Add it to the map's required mods in Map->General settings. Ακύρωση - + No template AI-generated, needs review by native speaker; delete this comment afterwards Χωρίς πρότυπο - + No template for parameters specified. Random map cannot be generated. AI-generated, needs review by native speaker; delete this comment afterwards Δεν υπάρχει πρότυπο για τις καθορισμένες παραμέτρους. Δεν μπορεί να δημιουργηθεί τυχαίος χάρτης. - + RMG failure AI-generated, needs review by native speaker; delete this comment afterwards Αποτυχία RMG - + [default] AI-generated, needs review by native speaker; delete this comment afterwards [προεπιλογή] @@ -4503,31 +5213,31 @@ Add it to the map's required mods in Map->General settings. main - + Filepath of the map to open. AI-generated, needs review by native speaker; delete this comment afterwards Διαδρομή αρχείου του χάρτη προς άνοιγμα. - + Extract original H3 archives into a separate folder. AI-generated, needs review by native speaker; delete this comment afterwards Εξαγωγή των αρχικών αρχείων H3 σε ξεχωριστό φάκελο. - + From an extracted archive, it Splits TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 and Un44 into individual PNG's. AI-generated, needs review by native speaker; delete this comment afterwards Από εξαγόμενο αρχείο, χωρίζει τα TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 και Un44 σε μεμονωμένα PNG. - + From an extracted archive, Converts single Images (found in Images folder) from .pcx to png. AI-generated, needs review by native speaker; delete this comment afterwards Από εξαγόμενο αρχείο, μετατρέπει μεμονωμένες εικόνες (στο φάκελο Images) από .pcx σε png. - + Delete original files, for the ones split / converted. AI-generated, needs review by native speaker; delete this comment afterwards Διαγραφή αρχικών αρχείων για εκείνα που χωρίστηκαν / μετατράπηκαν. diff --git a/mapeditor/translation/hungarian.ts b/mapeditor/translation/hungarian.ts index 9076418d5..68b03c1cb 100644 --- a/mapeditor/translation/hungarian.ts +++ b/mapeditor/translation/hungarian.ts @@ -47,7 +47,7 @@ CampaignEditor - + VCMI Campaign Editor AI-generated, needs review by native speaker; delete this comment afterwards VCMI kampány szerkesztő @@ -119,40 +119,40 @@ Teljes háttér megjelenítése - + Scenario editor AI-generated, needs review by native speaker; delete this comment afterwards Szintró szerkesztő - + Confirmation Megerősítés - + Unsaved changes will be lost, are you sure? Nem mentett változások el fognak veszni, biztos benne? - + Open map Térkép megnyitása - + All supported campaigns (*.vcmp *.h3c);;VCMI campaigns(*.vcmp);;HoMM3 campaigns(*.h3c) AI-generated, needs review by native speaker; delete this comment afterwards Minden támogatott kampány (*.vcmp *.h3c);;VCMI kampányok (*.vcmp);;HoMM3 kampányok (*.h3c) - + Save campaign AI-generated, needs review by native speaker; delete this comment afterwards Kampány mentése - + VCMI campaigns (*.vcmp) VCMI kampányok (*.vcmp) @@ -161,7 +161,7 @@ CampaignProperties - + Campaign Properties AI-generated, needs review by native speaker; delete this comment afterwards Kampány tulajdonságai @@ -296,47 +296,47 @@ Záró videó - + Custom AI-generated, needs review by native speaker; delete this comment afterwards Egyéni - + Infix AI-generated, needs review by native speaker; delete this comment afterwards Köztag - + X - + Y - + Label Pos X AI-generated, needs review by native speaker; delete this comment afterwards Címke X pozíció - + Label Pos Y AI-generated, needs review by native speaker; delete this comment afterwards Címke Y pozíció - + Fewer Scenarios AI-generated, needs review by native speaker; delete this comment afterwards Kevesebb szintró - + New Region setup supports fewer scenarios than before. Some will removed. Continue? AI-generated, needs review by native speaker; delete this comment afterwards Az új régióbeállítás kevesebb szintrót támogat, mint korábban. Néhány törlésre kerül. Folytatja? @@ -370,6 +370,20 @@ Új esemény + + FactionSelector + + + + Select Factions + + + + + Faction Selector + + + GeneralSettings @@ -453,6 +467,16 @@ Artifact Tárgy + + + Save + Mentés + + + + Cancel + Mégse + HeroSkillsWidget @@ -585,7 +609,7 @@ MainWindow - + VCMI Map Editor VCMI térképszerkesztő @@ -596,752 +620,758 @@ - + Open Recent Legutóbbi megnyitása - + Map Térkép - + Edit Szerkesztés - + View Nézet - + Player Játékos - + Toolbar Eszköztár - + Minimap Miniatűr térkép - + Map Objects View Térképobjektumok nézete - + Browser Böngésző - + Inspector Ellenőrző - + Property Tulajdonság - + Value Érték - + Tools Eszközök - + Painting Festés - + Terrains Felszínek - + Roads Utak - + Rivers Folyók - + Preview Előnézet - + Open Megnyitás - + Ctrl+O AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+O - + More... Továbbiak... - + Save Mentés - + Ctrl+S AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+S - + New Új - + Ctrl+N AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+N - + Save as... Mentés másként... - + Ctrl+Shift+S Ctrl+Shift+S - - + + Campaign editor AI-generated, needs review by native speaker; delete this comment afterwards Kampány szerkesztő - - - - + + + Template editor + + + + + + + View underground Földalatti nézet - + Ctrl+U AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+U - + Pass Átjárhatóság - + Ctrl+Shift+P AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+P - + Cut Kivágás - + Ctrl+X AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+X - + Copy Másolás - + Ctrl+C AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+C - + Paste Beillesztés - + Ctrl+V AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+V - + Fill Kitöltés - + Fills the selection with obstacles Kitölti a kijelölést akadályokkal - + Grid Rács - + Ctrl+G AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+G - + General Általános - + Map title and description Térkép címe és leírása - + Ctrl+Enter AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Enter - + Players settings Játékos beállítások - + Ctrl+P AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+P - - + + Undo Visszavonás - + Ctrl+Z AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Z - + Redo Újra - + Ctrl+Y AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Y - + Erase Törlés - + Del AI-generated, needs review by native speaker; delete this comment afterwards Del - + Neutral Semleges - + Ctrl+0 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+0 - + Validate Érvényesítés - + Ctrl+Shift+V AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+V - - - - + + + + Update appearance Megjelenés frissítése - + Recreate obstacles Akadályok újragenerálása - + Player 1 1. játékos - + Ctrl+1 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+1 - + Player 2 2. játékos - + Ctrl+2 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+2 - + Player 3 3. játékos - + Ctrl+3 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+3 - + Player 4 4. játékos - + Ctrl+4 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+4 - + Player 5 5. játékos - + Ctrl+5 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+5 - + Player 6 6. játékos - + Ctrl+6 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+6 - + Player 7 7. játékos - + Ctrl+7 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+7 - + Player 8 8. játékos - + Ctrl+8 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+8 - + Export as... Exportálás másként... - + Ctrl+E AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+E - + Translations Fordítások - + Ctrl+T Ctrl+T - - + + h3m converter h3m konverter - + Ctrl+Shift+M AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+M - - + + h3c converter h3c konverter - + Ctrl+Shift+C AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+C - + Lock Zárolás - + Lock objects on map to avoid unnecessary changes Objektumok zárolása a térképen a véletlen változtatások elkerüléséhez - + Ctrl+L Ctrl+L - + Unlock Feloldás - + Unlock all objects on the map Összes objektum feloldása a térképen - + Ctrl+Shift+L Ctrl+Shift+L - + Zoom in Nagyítás - + Ctrl++ AI-generated, needs review by native speaker; delete this comment afterwards Ctrl++ - + Zoom out Kicsinyítés - + Ctrl+- Ctrl+- - + Zoom reset Nagyítás alaphelyzetbe - + Ctrl+Shift+= Ctrl+Shift+= - + Confirmation Megerősítés - + Unsaved changes will be lost, are you sure? Nem mentett változások el fognak veszni, biztos benne? - + Mods are required Modok szükségesek - + Failed to open map Nem sikerült a térkép megnyitása - + Open map Térkép megnyitása - + All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) Minden támogatott térkép (*.vmap *.h3m);;VCMI térképek (*.vmap);;HoMM3 térképek (*.h3m) - + Recently Opened Files Legutóbb megnyitott fájlok - + Map validation Térkép érvényesítése - + Map has critical problems and most probably will not be playable. Open Validator from the Map menu to see issues found A térképen kritikus hibák vannak, és valószínűleg nem játszható. Nyissa meg az Ellenőrzőt a Térkép menüből, hogy megnézze a hibákat - + Map has some errors. Open Validator from the Map menu to see issues found A térképen hibák vannak. Nyissa meg az Ellenőrzőt a Térkép menüből, hogy megnézze a hibákat - + Failed to save map Nem sikerült a térkép mentése - + Save map Térkép mentése - + VCMI maps (*.vmap) VCMI térképek (*.vmap) - + Type Típus - + Towns Városok - + Objects Objektumok - + Heroes Hősök - + Artifacts Tárgyak - + Resources Erőforrások - + Banks Bankok - + Dwellings Lakhelyek - + Grounds Talajok - + Teleports Teleportok - + Mines Bányák - + Triggers Indítók - + Monsters Szörnyek - + Quests Küldetések - + Wog Objects Wog Objektumok - + Obstacles Akadályok - + Other Egyéb - + Mods loading problem Mod betöltési probléma - + Critical error during Mods loading. Disable invalid mods and restart. Kritikus hiba történt a Modok betöltése során. Tiltsa le az érvénytelen modokat és indítsa újra. - - + + View surface Felszín megtekintése - + No objects selected Nincs kiválasztott objektum - + This operation is irreversible. Do you want to continue? Ez a művelet visszafordíthatatlan. Folytatja? - + Errors occurred. %1 objects were not updated Hibák történtek. %1 objektum nem lett frissítve - + Save to image Mentés képként - + Select maps to convert Térképek kiválasztása konvertáláshoz - + HoMM3 maps(*.h3m) HoMM3 térképek (*.h3m) - + Choose directory to save converted maps Könyvtár kiválasztása a konvertált térképek mentéséhez - + Operation completed Művelet befejezve - + Successfully converted %1 maps Sikeresen konvertálva: %1 térkép - + Failed to convert the map. Abort operation Nem sikerült a térkép konvertálása. Művelet megszakítva - + Select campaign to convert Kampány kiválasztása konvertáláshoz - + HoMM3 campaigns (*.h3c) HoMM3 kampányok (*.h3c) - + Select destination file Célfájl kiválasztása - + VCMI campaigns (*.vcmp) VCMI kampányok (*.vcmp) @@ -1349,29 +1379,29 @@ MapController - + Hero %1 cannot be created as NEUTRAL. A(z) %1 hős nem hozható létre SEMLEGESKÉNT. - + Missing Required Mod AI-generated, needs review by native speaker; delete this comment afterwards Hiányzó szükséges mod - + Do you want to do that now ? -AI-generated, needs review by native speaker; delete this comment afterwards + AI-generated, needs review by native speaker; delete this comment afterwards Szeretnéd ezt most megtenni? - + This object's mod is mandatory for map to remain valid. AI-generated, needs review by native speaker; delete this comment afterwards Ennek az objektumnak a modja kötelező ahhoz, hogy a térkép érvényes maradjon. @@ -1461,6 +1491,30 @@ Szeretnéd ezt most megtenni? Üzenet + + MineSelector + + + + Select Mines + + + + + Mine Selector + + + + + Resource + Erőforrás + + + + Mines + Bányák + + ModSettings @@ -1595,26 +1649,26 @@ Szeretnéd ezt most megtenni? - PlayerSettings + PlayerSettingsDialog - + Player settings - Játékos beállítások + Játékos beállítások - + Players - Játékosok + Játékosok - + 1 - 1 + 1 - + Ok - Rendben + Rendben @@ -1664,374 +1718,374 @@ Szeretnéd ezt most megtenni? Másodlagos képességek: - + Compliant Engedékeny - + Friendly Barátságos - + Aggressive Aggresszív - + Hostile Ellenséges - + Savage Vad - - + + No patrol Nincs őrjárat - + POWER RANK ERŐ RANG - + HERO TYPE HŐS TÍPUS - + Hero class Hős osztály - + Portrait Portré - + Skills Képességek - + Artifacts Tárgyak - - + + %n tile(s) %n mező - + Buildings Épületek - + Events Események - + Resource Erőforrás - + Artifact reward Tárgy jutalom - + Quest Küldetés - + Identifier Azonosító - + ID ID - + SubID SubID - + InstanceName InstanceName - + IsStatic Statikus-e - - + + neutral semleges - - + + Army Sereg - - - + + - - - - - + + + + + + Owner Tulajdonos - - + + Same as town Azonos a várossal - - + + Removable units Eltávolítható egységek - - + + Placeholder type Helyőrző típus - - + + Power rank Erő rang - - - - + + + + Hero type Hős típus - - + + Experience Tapasztalat - - + + MALE FÉRFI - - + + FEMALE - - + + Gender Nem - - + + Name Név - - + + Biography Életrajz - - + + Spells Varázslatok - - + + Patrol radius Őrjárat sugara - - + + Town name Város neve - - + + Same as player Azonos a játékossal - - - - - - - - - + + + + + + + + + Message Üzenet - - + + Spell Varázslat - - + + Productivity Termelékenység - - - - + + + + Amount Mennyiség - + Character Karakter - + Select town Város kiválasztása - - + + Never flees Soha nem menekül - - + + Not growing Nem növekszik - - + + Reward Jutalom - - + + Remove after Eltávolítás idő után - - + + Human trigger Ember által indított - - + + Cpu trigger CPU által indított - - + + First visit text Első látogatás szövege - - + + Next visit text Következő látogatás szövege - - + + Completed text Teljesített szöveg - - - + + + Repeat quest Küldetés ismétlése - - + + Time limit Időkorlát - + UNFLAGGABLE NEM ZÁSZLÓZHATÓ - + Can't place object Nem lehet objektumot elhelyezni - + There can only be one grail object on the map. Csak egy Szent Grál objektum lehet a térképen. - + (submod of %1) AI-generated, needs review by native speaker; delete this comment afterwards (%1 almodulja) - + The mod '%1'%2, is required by an object on the map. Add it to the map's required mods in Map->General settings. should be consistent with Map->General menu entry translation @@ -2073,13 +2127,13 @@ Add hozzá a térkép kötelező moduljaihoz a Térkép → Általános beállí - + Hero Level: %1 Hős szint: %1 - + Hero Experience: %1 Hős tapasztalat: %1 @@ -2090,43 +2144,43 @@ Add hozzá a térkép kötelező moduljaihoz a Térkép → Általános beállí - + Mana Percentage: %1 Mana százalék: %1 - + Primary Skills: %1/%2/%3/%4 Elsődleges képességek: %1/%2/%3/%4 - + Resources: %1 Erőforrások: %1 - + Artifacts: %1 Tárgyak: %1 - + Spells: %1 Varázslatok: %1 - + Secondary Skills: %1 Másodlagos képességek: %1 - + Creatures: %1 Egységek: %1 @@ -2146,37 +2200,37 @@ Add hozzá a térkép kötelező moduljaihoz a Térkép → Általános beállí Játékosok: %1 - + Rewards: Jutalmak: - + Reward Message: %1 Jutalom üzenet: %1 - + Mana Diff: %1 Mana különbség: %1 - + Move Points: %1 Mozgáspontok: %1 - + Move Percentage: %1 Mozgás százalék: %1 - + Spell Cast: %1 (%2) Varázslat használat: %1 (%2) - + Bonuses: %1 Bónuszok: %1 @@ -2602,18 +2656,18 @@ Add hozzá a térkép kötelező moduljaihoz a Térkép → Általános beállí Játékosok - + None Nincs - + Day %1 Nap %1 - - + + Reward %1 Jutalom %1 @@ -2864,8 +2918,8 @@ Add hozzá a térkép kötelező moduljaihoz a Térkép → Általános beállí - - + + Player position AI-generated, needs review by native speaker; delete this comment afterwards Játékos pozíció @@ -2923,54 +2977,54 @@ Add hozzá a térkép kötelező moduljaihoz a Térkép → Általános beállí Játékos - + Open map Térkép megnyitása - + All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) Minden támogatott térkép (*.vmap *.h3m);;VCMI térképek (*.vmap);;HoMM3 térképek (*.h3m) - - + + Error AI-generated, needs review by native speaker; delete this comment afterwards Hiba - - + + Could not open the file. AI-generated, needs review by native speaker; delete this comment afterwards Nem sikerült megnyitni a fájlt. - + Save map Térkép mentése - + VCMI maps (*.vmap); AI-generated, needs review by native speaker; delete this comment afterwards VCMI térképek (*.vmap); - + HoMM3 maps (*.h3m); AI-generated, needs review by native speaker; delete this comment afterwards HoMM3 térképek (*.h3m); - + Source scenario AI-generated, needs review by native speaker; delete this comment afterwards Forrás forgatókönyv - + Hero AI-generated, needs review by native speaker; delete this comment afterwards Hős @@ -3009,7 +3063,7 @@ Add hozzá a térkép kötelező moduljaihoz a Térkép → Általános beállí - + Building AI-generated, needs review by native speaker; delete this comment afterwards Épület @@ -3039,7 +3093,7 @@ Add hozzá a térkép kötelező moduljaihoz a Térkép → Általános beállí - + Secondary skill AI-generated, needs review by native speaker; delete this comment afterwards Másodlagos képesség @@ -3047,7 +3101,7 @@ Add hozzá a térkép kötelező moduljaihoz a Térkép → Általános beállí - + Resource Erőforrás @@ -3145,54 +3199,679 @@ Add hozzá a térkép kötelező moduljaihoz a Térkép → Általános beállí Ritka (%1, %2, %3, %4) - + strongest hero AI-generated, needs review by native speaker; delete this comment afterwards leghatalmasabb hős - + generated hero AI-generated, needs review by native speaker; delete this comment afterwards generált hős - + random hero AI-generated, needs review by native speaker; delete this comment afterwards véletlen hős - + %1 spell for %2 AI-generated, needs review by native speaker; delete this comment afterwards %1 varázslat %2 számára - + %1 %2 for %3 AI-generated, needs review by native speaker; delete this comment afterwards %1 %2 %3 számára - + %1 artifact for %2 AI-generated, needs review by native speaker; delete this comment afterwards %1 tárgy %2 számára - + %1 spell scroll for %2 AI-generated, needs review by native speaker; delete this comment afterwards %1 varázstekercs %2 számára - + Primary skill (Attack: %1, Defense: %2, Spell: %3, Knowledge: %4) for %5 AI-generated, needs review by native speaker; delete this comment afterwards Elsődleges képesség (Támadás: %1, Védekezés: %2, Mágia: %3, Tudás: %4) %5 számára + + TemplateEditor + + + + VCMI Template Editor + + + + + File + Fájl + + + + Edit + Szerkesztés + + + + View + Nézet + + + + Toolbar + Eszköztár + + + + Selected Template: + + + + + + + Add + Hozzáadás + + + + Remove + Eltávolítás + + + + Rename + + + + + General + Általános + + + + Name + Név + + + + Description + + + + + Min Size + + + + + + + X + + + + + + + Y + + + + + + + Z + + + + + Max Size + + + + + + Players + Játékosok + + + + Human + + + + + Allowed water content + + + + + + + None + Nincs + + + + + Normal + Normál + + + + Islands + Szigetek + + + + Zone + + + + + Visualisation + + + + + Position + + + + + + Size + + + + + ID + ID + + + + + Type + Típus + + + + Owner + Tulajdonos + + + + Zone link + + + + + + + Mines + Bányák + + + + + Custom objects + + + + + + Towns + Városok + + + + + Terrain + + + + + + + + Treasure + + + + + Town info + + + + + Town count + + + + + + + + Player + Játékos + + + + + + + Neutral + Semleges + + + + Castle count + + + + + Town density + + + + + Castle density + + + + + Match terrain to town + + + + + Terrain types + + + + + Banned terrain types + + + + + Towns are same type + + + + + Allowed towns + + + + + Banned towns + + + + + Town hints + + + + + Monsters + Szörnyek + + + + Allowed monsters + + + + + Banned monsters + + + + + Strength + + + + + Objects + Objektumok + + + + Connections + + + + + Open + Megnyitás + + + + Save + Mentés + + + + New + Új + + + + Save as... + Mentés másként... + + + + Ctrl+Shift+S + Ctrl+Shift+S + + + + Add zone + + + + + Remove zone + + + + + + Del + Del + + + + Auto position + + + + + Ctrl+P + Ctrl+P + + + + Zoom in + Nagyítás + + + + Ctrl++ + Ctrl++ + + + + Zoom out + Kicsinyítés + + + + Ctrl+- + Ctrl+- + + + + Zoom auto + + + + + Ctrl+Shift+: + + + + + Zoom reset + Nagyítás alaphelyzetbe + + + + Ctrl+Shift+= + Ctrl+Shift+= + + + + Min + + + + + Max + + + + + Action + + + + + + Delete + + + + + ID: %1 + + + + + Max treasure: %1 + + + + + Player start + + + + + CPU start + + + + + Junction + + + + + Water + + + + + Sealed + + + + + + Random + Véletlen + + + + Weak + Gyenge + + + + Strong + Erős + + + + Zone A + + + + + Zone B + + + + + Guard + + + + + Road + + + + + Guarded + + + + + Fictive + + + + + Repulsive + + + + + Wide + + + + + Force portal + + + + + Yes + + + + + No + + + + + Zone A: %1 +Zone B: %2 +Guard: %3 + + + + + Confirmation + Megerősítés + + + + Unsaved changes will be lost, are you sure? + Nem mentett változások el fognak veszni, biztos benne? + + + + Open template + + + + + VCMI templates(*.json) + + + + + Save template + + + + + VCMI templates (*.json) + + + + + + Enter Name + + + + + + Name: + + + + + Already existing! + + + + + At template with this name is already existing. + + + + + To few templates! + + + + + At least one template should remain after removing. + + + + + + Error + Hiba + + + + + Not implemented yet! + + + + + TerrainSelector + + + + Select Terrains + + + + + Terrain Selector + + + TimedEvent @@ -3533,6 +4212,40 @@ Add hozzá a térkép kötelező moduljaihoz a Térkép → Általános beállí Minden meglévő szövegrekord törlődik az adott nyelvhez. Folytatja? + + TreasureSelector + + + + Select Treasures + + + + + Treasure Selector + + + + + Min + + + + + Max + + + + + Density + + + + + Action + + + Validator @@ -3924,22 +4637,22 @@ Add hozzá a térkép kötelező moduljaihoz a Térkép → Általános beállí Mégse - + No template Nincs sablon - + No template for parameters specified. Random map cannot be generated. Nincs sablon a megadott paraméterekhez. Véletlen térkép nem generálható. - + RMG failure Véletlen térkép generálási hiba - + [default] [alapértelmezett] @@ -3947,27 +4660,27 @@ Add hozzá a térkép kötelező moduljaihoz a Térkép → Általános beállí main - + Filepath of the map to open. A megnyitni kívánt térkép fájlútvonala. - + Extract original H3 archives into a separate folder. Az eredeti H3 archívumok kibontása egy külön mappába. - + From an extracted archive, it Splits TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 and Un44 into individual PNG's. Egy kibontott archívumból a TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 és Un44 fájlokat egyedi PNG-kre bontja. - + From an extracted archive, Converts single Images (found in Images folder) from .pcx to png. Egy kibontott archívumból az egyedi képeket (az Images mappában találhatók) .pcx formátumból png formátumba konvertálja. - + Delete original files, for the ones split / converted. Az eredeti fájlokat törli azok helyett, amelyek szétbontásra/konvertálásra kerültek. diff --git a/mapeditor/translation/italian.ts b/mapeditor/translation/italian.ts index 1d3a28eac..04d299f6b 100644 --- a/mapeditor/translation/italian.ts +++ b/mapeditor/translation/italian.ts @@ -47,7 +47,7 @@ CampaignEditor - + VCMI Campaign Editor AI-generated, needs review by native speaker; delete this comment afterwards Editor Campagna VCMI @@ -119,40 +119,40 @@ Mostra sfondo completo - + Scenario editor AI-generated, needs review by native speaker; delete this comment afterwards Editor scenario - + Confirmation Conferma - + Unsaved changes will be lost, are you sure? Le modifiche non salvate andranno perse, sei sicuro? - + Open map Apri mappa - + All supported campaigns (*.vcmp *.h3c);;VCMI campaigns(*.vcmp);;HoMM3 campaigns(*.h3c) AI-generated, needs review by native speaker; delete this comment afterwards Tutte le campagne supportate (*.vcmp *.h3c);;Campagne VCMI (*.vcmp);;Campagne HoMM3 (*.h3c) - + Save campaign AI-generated, needs review by native speaker; delete this comment afterwards Salva campagna - + VCMI campaigns (*.vcmp) Campagne VCMI (*.vcmp) @@ -161,7 +161,7 @@ CampaignProperties - + Campaign Properties AI-generated, needs review by native speaker; delete this comment afterwards Proprietà della Campagna @@ -296,47 +296,47 @@ Video finale - + Custom AI-generated, needs review by native speaker; delete this comment afterwards Personalizzato - + Infix AI-generated, needs review by native speaker; delete this comment afterwards Intersuffisso - + X - + Y - + Label Pos X AI-generated, needs review by native speaker; delete this comment afterwards Posizione etichetta X - + Label Pos Y AI-generated, needs review by native speaker; delete this comment afterwards Posizione etichetta Y - + Fewer Scenarios AI-generated, needs review by native speaker; delete this comment afterwards Meno scenari - + New Region setup supports fewer scenarios than before. Some will removed. Continue? AI-generated, needs review by native speaker; delete this comment afterwards La nuova configurazione della regione supporta meno scenari di prima. Alcuni verranno rimossi. Continuare? @@ -370,6 +370,20 @@ Nuovo evento + + FactionSelector + + + + Select Factions + + + + + Faction Selector + + + GeneralSettings @@ -453,6 +467,16 @@ Artifact Artefatto + + + Save + Salva + + + + Cancel + Annulla + HeroSkillsWidget @@ -585,7 +609,7 @@ MainWindow - + VCMI Map Editor Editor di mappe VCMI @@ -596,752 +620,758 @@ - + Open Recent Apri recenti - + Map Mappa - + Edit Modifica - + View Visualizza - + Player Giocatore - + Toolbar Barra degli strumenti - + Minimap Minimappa - + Map Objects View Vista oggetti mappa - + Browser Browser - + Inspector Ispettore - + Property Proprietà - + Value Valore - + Tools Strumenti - + Painting Pittura - + Terrains Terreni - + Roads Strade - + Rivers Fiumi - + Preview Anteprima - + Open Apri - + Ctrl+O AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+O - + More... Altro... - + Save Salva - + Ctrl+S AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+S - + New Nuovo - + Ctrl+N AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+N - + Save as... Salva con nome... - + Ctrl+Shift+S Ctrl+Shift+S - - + + Campaign editor AI-generated, needs review by native speaker; delete this comment afterwards Editor campagna - - - - + + + Template editor + + + + + + + View underground Visualizza sottosuolo - + Ctrl+U AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+U - + Pass Passa - + Ctrl+Shift+P AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Maiusc+P - + Cut Taglia - + Ctrl+X AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+X - + Copy Copia - + Ctrl+C AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+C - + Paste Incolla - + Ctrl+V AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+V - + Fill Riempi - + Fills the selection with obstacles Riempi la selezione con ostacoli - + Grid Griglia - + Ctrl+G AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+G - + General Generale - + Map title and description Titolo e descrizione della mappa - + Ctrl+Enter AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Invio - + Players settings Impostazioni giocatori - + Ctrl+P AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+P - - + + Undo Annulla - + Ctrl+Z AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Z - + Redo Ripeti - + Ctrl+Y AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Y - + Erase Cancella - + Del AI-generated, needs review by native speaker; delete this comment afterwards Canc - + Neutral Neutrale - + Ctrl+0 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+0 - + Validate Convalida - + Ctrl+Shift+V AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Maiusc+V - - - - + + + + Update appearance Aggiorna aspetto - + Recreate obstacles Ricrea ostacoli - + Player 1 Giocatore 1 - + Ctrl+1 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+1 - + Player 2 Giocatore 2 - + Ctrl+2 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+2 - + Player 3 Giocatore 3 - + Ctrl+3 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+3 - + Player 4 Giocatore 4 - + Ctrl+4 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+4 - + Player 5 Giocatore 5 - + Ctrl+5 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+5 - + Player 6 Giocatore 6 - + Ctrl+6 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+6 - + Player 7 Giocatore 7 - + Ctrl+7 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+7 - + Player 8 Giocatore 8 - + Ctrl+8 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+8 - + Export as... Esporta come... - + Ctrl+E AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+E - + Translations Traduzioni - + Ctrl+T Ctrl+T - - + + h3m converter Convertitore h3m - + Ctrl+Shift+M AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Maiusc+M - - + + h3c converter Convertitore h3c - + Ctrl+Shift+C AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Maiusc+C - + Lock Blocca - + Lock objects on map to avoid unnecessary changes Blocca oggetti sulla mappa per evitare modifiche non necessarie - + Ctrl+L Ctrl+L - + Unlock Sblocca - + Unlock all objects on the map Sblocca tutti gli oggetti sulla mappa - + Ctrl+Shift+L Ctrl+Shift+L - + Zoom in Zoom avanti - + Ctrl++ AI-generated, needs review by native speaker; delete this comment afterwards Ctrl++ - + Zoom out Zoom indietro - + Ctrl+- Ctrl+- - + Zoom reset Reimposta zoom - + Ctrl+Shift+= Ctrl+Shift+= - + Confirmation Conferma - + Unsaved changes will be lost, are you sure? Le modifiche non salvate andranno perse, sei sicuro? - + Mods are required Mod richiesti - + Failed to open map Impossibile aprire la mappa - + Open map Apri mappa - + All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) Tutte le mappe supportate (*.vmap *.h3m);;Mappe VCMI(*.vmap);;Mappe HoMM3(*.h3m) - + Recently Opened Files File recenti - + Map validation Validazione mappa - + Map has critical problems and most probably will not be playable. Open Validator from the Map menu to see issues found La mappa ha problemi critici e probabilmente non sarà giocabile. Apri il Validatore dal menu Mappa per vedere i problemi rilevati - + Map has some errors. Open Validator from the Map menu to see issues found La mappa ha alcuni errori. Apri il Validatore dal menu Mappa per vedere i problemi rilevati - + Failed to save map Salvataggio della mappa fallito - + Save map Salva mappa - + VCMI maps (*.vmap) Mappe VCMI (*.vmap) - + Type Tipo - + Towns Città - + Objects Oggetti - + Heroes Eroi - + Artifacts Artefatti - + Resources Risorse - + Banks Banche - + Dwellings Dimore - + Grounds Terreni - + Teleports Teletrasporti - + Mines Miniere - + Triggers Trigger - + Monsters Mostri - + Quests Missioni - + Wog Objects Oggetti Wog - + Obstacles Ostacoli - + Other Altro - + Mods loading problem Problema nel caricamento dei mod - + Critical error during Mods loading. Disable invalid mods and restart. Errore critico durante il caricamento dei mod. Disabilita i mod non validi e riavvia. - - + + View surface Visualizza superficie - + No objects selected Nessun oggetto selezionato - + This operation is irreversible. Do you want to continue? Questa operazione è irreversibile. Vuoi continuare? - + Errors occurred. %1 objects were not updated Si sono verificati errori. %1 oggetti non sono stati aggiornati - + Save to image Salva come immagine - + Select maps to convert Seleziona mappe da convertire - + HoMM3 maps(*.h3m) Mappe HoMM3(*.h3m) - + Choose directory to save converted maps Scegli la directory per salvare le mappe convertite - + Operation completed Operazione completata - + Successfully converted %1 maps Convertite con successo %1 mappe - + Failed to convert the map. Abort operation Impossibile convertire la mappa. Operazione annullata - + Select campaign to convert Seleziona la campagna da convertire - + HoMM3 campaigns (*.h3c) Campagne HoMM3 (*.h3c) - + Select destination file Seleziona il file di destinazione - + VCMI campaigns (*.vcmp) Campagne VCMI (*.vcmp) @@ -1349,29 +1379,29 @@ MapController - + Hero %1 cannot be created as NEUTRAL. L'eroe %1 non può essere creato come NEUTRALE. - + Missing Required Mod AI-generated, needs review by native speaker; delete this comment afterwards Mod mancante richiesto - + Do you want to do that now ? -AI-generated, needs review by native speaker; delete this comment afterwards + AI-generated, needs review by native speaker; delete this comment afterwards Vuoi farlo ora? - + This object's mod is mandatory for map to remain valid. AI-generated, needs review by native speaker; delete this comment afterwards La mod di questo oggetto è obbligatoria affinché la mappa rimanga valida. @@ -1461,6 +1491,30 @@ Vuoi farlo ora? Messaggio + + MineSelector + + + + Select Mines + + + + + Mine Selector + + + + + Resource + Risorsa + + + + Mines + Miniere + + ModSettings @@ -1579,7 +1633,7 @@ Vuoi farlo ora? Hero cannot be created as NEUTRAL AI-generated, needs review by native speaker; delete this comment afterwards - L'eroe non può essere creato come NEUTRALE + L'eroe non può essere creato come NEUTRALE @@ -1595,26 +1649,26 @@ Vuoi farlo ora? - PlayerSettings + PlayerSettingsDialog - + Player settings - Impostazioni giocatore + Impostazioni giocatore - + Players - Giocatori + Giocatori - + 1 - 1 + 1 - + Ok - Ok + Ok @@ -1664,69 +1718,69 @@ Vuoi farlo ora? Abilità secondarie: - + Compliant Docile - + Friendly Amichevole - + Aggressive Aggressivo - + Hostile Ostile - + Savage Feroce - - + + No patrol Nessuna pattuglia - + POWER RANK RANGO POTERE - + HERO TYPE TIPO EROE - + Hero class Classe eroe - + Portrait Ritratto - + Skills Abilità - + Artifacts Artefatti - - + + %n tile(s) %n casella @@ -1734,305 +1788,305 @@ Vuoi farlo ora? - + Buildings Edifici - + Events Eventi - + Resource Risorsa - + Artifact reward Ricompensa artefatto - + Quest Missione - + Identifier Identificatore - + ID ID - + SubID SubID - + InstanceName NomeIstanza - + IsStatic ÈStatico - - + + neutral neutrale - - + + Army Esercito - - - + + - - - - - + + + + + + Owner Proprietario - - + + Same as town Uguale alla città - - + + Removable units Unità rimovibili - - + + Placeholder type Tipo segnaposto - - + + Power rank Grado di potenza - - - - + + + + Hero type Tipo eroe - - + + Experience Esperienza - - + + MALE MASCHIO - - + + FEMALE FEMMINA - - + + Gender Genere - - + + Name Nome - - + + Biography Biografia - - + + Spells Incantesimi - - + + Patrol radius Raggio di pattuglia - - + + Town name Nome della città - - + + Same as player Uguale al giocatore - - - - - - - - - + + + + + + + + + Message Messaggio - - + + Spell Incantesimo - - + + Productivity Produttività - - - - + + + + Amount Quantità - + Character Carattere - + Select town Seleziona città - - + + Never flees Non fugge mai - - + + Not growing Non cresce - - + + Reward Ricompensa - - + + Remove after Rimuovi dopo - - + + Human trigger Attivazione umana - - + + Cpu trigger Attivazione AI - - + + First visit text Testo prima visita - - + + Next visit text Testo visita successiva - - + + Completed text Testo completamento - - - + + + Repeat quest Ripeti missione - - + + Time limit Limite di tempo - + UNFLAGGABLE NON FLAGGABILE - + Can't place object Impossibile posizionare l'oggetto - + There can only be one grail object on the map. Può esserci solo un oggetto Graal sulla mappa. - + (submod of %1) AI-generated, needs review by native speaker; delete this comment afterwards (sottomodulo di %1) - + The mod '%1'%2, is required by an object on the map. Add it to the map's required mods in Map->General settings. should be consistent with Map->General menu entry translation @@ -2074,13 +2128,13 @@ Aggiungila alle mod richieste della mappa in Mappa->Impostazioni generali. - + Hero Level: %1 Livello eroe: %1 - + Hero Experience: %1 Esperienza eroe: %1 @@ -2091,43 +2145,43 @@ Aggiungila alle mod richieste della mappa in Mappa->Impostazioni generali. - + Mana Percentage: %1 Percentuale mana: %1 - + Primary Skills: %1/%2/%3/%4 Abilità primarie: %1/%2/%3/%4 - + Resources: %1 Risorse: %1 - + Artifacts: %1 Artefatti: %1 - + Spells: %1 Incantesimi: %1 - + Secondary Skills: %1 Abilità secondarie: %1 - + Creatures: %1 Creature: %1 @@ -2147,37 +2201,37 @@ Aggiungila alle mod richieste della mappa in Mappa->Impostazioni generali.Giocatori: %1 - + Rewards: Ricompense: - + Reward Message: %1 Messaggio ricompensa: %1 - + Mana Diff: %1 Differenza mana: %1 - + Move Points: %1 Punti movimento: %1 - + Move Percentage: %1 Percentuale movimento: %1 - + Spell Cast: %1 (%2) Incantesimo lanciato: %1 (%2) - + Bonuses: %1 Bonus: %1 @@ -2603,18 +2657,18 @@ Aggiungila alle mod richieste della mappa in Mappa->Impostazioni generali.Giocatori - + None Nessuno - + Day %1 Giorno %1 - - + + Reward %1 Ricompensa %1 @@ -2865,8 +2919,8 @@ Aggiungila alle mod richieste della mappa in Mappa->Impostazioni generali. - - + + Player position AI-generated, needs review by native speaker; delete this comment afterwards Posizione del giocatore @@ -2924,54 +2978,54 @@ Aggiungila alle mod richieste della mappa in Mappa->Impostazioni generali.Giocatore - + Open map Apri mappa - + All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) Tutte le mappe supportate (*.vmap *.h3m);;Mappe VCMI(*.vmap);;Mappe HoMM3(*.h3m) - - + + Error AI-generated, needs review by native speaker; delete this comment afterwards Errore - - + + Could not open the file. AI-generated, needs review by native speaker; delete this comment afterwards Impossibile aprire il file. - + Save map Salva mappa - + VCMI maps (*.vmap); AI-generated, needs review by native speaker; delete this comment afterwards Mappe VCMI (*.vmap); - + HoMM3 maps (*.h3m); AI-generated, needs review by native speaker; delete this comment afterwards Mappe HoMM3 (*.h3m); - + Source scenario AI-generated, needs review by native speaker; delete this comment afterwards Scenario di origine - + Hero AI-generated, needs review by native speaker; delete this comment afterwards Eroe @@ -3010,7 +3064,7 @@ Aggiungila alle mod richieste della mappa in Mappa->Impostazioni generali. - + Building AI-generated, needs review by native speaker; delete this comment afterwards Edificio @@ -3040,7 +3094,7 @@ Aggiungila alle mod richieste della mappa in Mappa->Impostazioni generali. - + Secondary skill AI-generated, needs review by native speaker; delete this comment afterwards Abilità secondaria @@ -3048,7 +3102,7 @@ Aggiungila alle mod richieste della mappa in Mappa->Impostazioni generali. - + Resource Risorsa @@ -3146,54 +3200,679 @@ Aggiungila alle mod richieste della mappa in Mappa->Impostazioni generali.Raro (%1, %2, %3, %4) - + strongest hero AI-generated, needs review by native speaker; delete this comment afterwards eroe più forte - + generated hero AI-generated, needs review by native speaker; delete this comment afterwards eroe generato - + random hero AI-generated, needs review by native speaker; delete this comment afterwards eroe casuale - + %1 spell for %2 AI-generated, needs review by native speaker; delete this comment afterwards %1 incantesimo per %2 - + %1 %2 for %3 AI-generated, needs review by native speaker; delete this comment afterwards %1 %2 per %3 - + %1 artifact for %2 AI-generated, needs review by native speaker; delete this comment afterwards %1 artefatto per %2 - + %1 spell scroll for %2 AI-generated, needs review by native speaker; delete this comment afterwards %1 pergamena magica per %2 - + Primary skill (Attack: %1, Defense: %2, Spell: %3, Knowledge: %4) for %5 AI-generated, needs review by native speaker; delete this comment afterwards Abilità primaria (Attacco: %1, Difesa: %2, Magia: %3, Conoscenza: %4) per %5 + + TemplateEditor + + + + VCMI Template Editor + + + + + File + File + + + + Edit + Modifica + + + + View + Visualizza + + + + Toolbar + Barra degli strumenti + + + + Selected Template: + + + + + + + Add + Aggiungi + + + + Remove + Rimuovi + + + + Rename + + + + + General + Generale + + + + Name + Nome + + + + Description + + + + + Min Size + + + + + + + X + + + + + + + Y + + + + + + + Z + + + + + Max Size + + + + + + Players + Giocatori + + + + Human + + + + + Allowed water content + + + + + + + None + Nessuno + + + + + Normal + Normale + + + + Islands + Isole + + + + Zone + + + + + Visualisation + + + + + Position + + + + + + Size + + + + + ID + ID + + + + + Type + Tipo + + + + Owner + Proprietario + + + + Zone link + + + + + + + Mines + Miniere + + + + + Custom objects + + + + + + Towns + Città + + + + + Terrain + + + + + + + + Treasure + + + + + Town info + + + + + Town count + + + + + + + + Player + Giocatore + + + + + + + Neutral + Neutrale + + + + Castle count + + + + + Town density + + + + + Castle density + + + + + Match terrain to town + + + + + Terrain types + + + + + Banned terrain types + + + + + Towns are same type + + + + + Allowed towns + + + + + Banned towns + + + + + Town hints + + + + + Monsters + Mostri + + + + Allowed monsters + + + + + Banned monsters + + + + + Strength + + + + + Objects + Oggetti + + + + Connections + + + + + Open + Apri + + + + Save + Salva + + + + New + Nuovo + + + + Save as... + Salva con nome... + + + + Ctrl+Shift+S + Ctrl+Shift+S + + + + Add zone + + + + + Remove zone + + + + + + Del + Canc + + + + Auto position + + + + + Ctrl+P + Ctrl+P + + + + Zoom in + Zoom avanti + + + + Ctrl++ + Ctrl++ + + + + Zoom out + Zoom indietro + + + + Ctrl+- + Ctrl+- + + + + Zoom auto + + + + + Ctrl+Shift+: + + + + + Zoom reset + Reimposta zoom + + + + Ctrl+Shift+= + Ctrl+Shift+= + + + + Min + + + + + Max + + + + + Action + + + + + + Delete + + + + + ID: %1 + + + + + Max treasure: %1 + + + + + Player start + + + + + CPU start + + + + + Junction + + + + + Water + + + + + Sealed + + + + + + Random + Casuale + + + + Weak + Debole + + + + Strong + Forte + + + + Zone A + + + + + Zone B + + + + + Guard + + + + + Road + + + + + Guarded + + + + + Fictive + + + + + Repulsive + + + + + Wide + + + + + Force portal + + + + + Yes + + + + + No + + + + + Zone A: %1 +Zone B: %2 +Guard: %3 + + + + + Confirmation + Conferma + + + + Unsaved changes will be lost, are you sure? + Le modifiche non salvate andranno perse, sei sicuro? + + + + Open template + + + + + VCMI templates(*.json) + + + + + Save template + + + + + VCMI templates (*.json) + + + + + + Enter Name + + + + + + Name: + + + + + Already existing! + + + + + At template with this name is already existing. + + + + + To few templates! + + + + + At least one template should remain after removing. + + + + + + Error + Errore + + + + + Not implemented yet! + + + + + TerrainSelector + + + + Select Terrains + + + + + Terrain Selector + + + TimedEvent @@ -3534,6 +4213,40 @@ Aggiungila alle mod richieste della mappa in Mappa->Impostazioni generali.Tutti i record di testo esistenti per questa lingua verranno rimossi. Continuare? + + TreasureSelector + + + + Select Treasures + + + + + Treasure Selector + + + + + Min + + + + + Max + + + + + Density + + + + + Action + + + Validator @@ -3925,22 +4638,22 @@ Aggiungila alle mod richieste della mappa in Mappa->Impostazioni generali.Annulla - + No template Nessun modello - + No template for parameters specified. Random map cannot be generated. Nessun modello per i parametri specificati. Impossibile generare una mappa casuale. - + RMG failure Errore nella generazione della mappa casuale - + [default] [predefinito] @@ -3948,27 +4661,27 @@ Aggiungila alle mod richieste della mappa in Mappa->Impostazioni generali. main - + Filepath of the map to open. Percorso file della mappa da aprire. - + Extract original H3 archives into a separate folder. Estrai gli archivi originali di H3 in una cartella separata. - + From an extracted archive, it Splits TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 and Un44 into individual PNG's. Da un archivio estratto, divide TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 e Un44 in PNG individuali. - + From an extracted archive, Converts single Images (found in Images folder) from .pcx to png. Da un archivio estratto, converte immagini singole (trovate nella cartella Images) da .pcx a .png. - + Delete original files, for the ones split / converted. Elimina i file originali per quelli divisi/convertiti. diff --git a/mapeditor/translation/japanese.ts b/mapeditor/translation/japanese.ts index d44a9717e..3f1a036cc 100644 --- a/mapeditor/translation/japanese.ts +++ b/mapeditor/translation/japanese.ts @@ -54,7 +54,7 @@ CampaignEditor - + VCMI Campaign Editor AI-generated, needs review by native speaker; delete this comment afterwards VCMIキャンペーンエディタ @@ -135,43 +135,43 @@ 背景を全体表示 - + Scenario editor AI-generated, needs review by native speaker; delete this comment afterwards シナリオエディタ - + Confirmation AI-generated, needs review by native speaker; delete this comment afterwards 確認 - + Unsaved changes will be lost, are you sure? AI-generated, needs review by native speaker; delete this comment afterwards 未保存の変更は失われます。本当によろしいですか? - + Open map AI-generated, needs review by native speaker; delete this comment afterwards マップを開く - + All supported campaigns (*.vcmp *.h3c);;VCMI campaigns(*.vcmp);;HoMM3 campaigns(*.h3c) AI-generated, needs review by native speaker; delete this comment afterwards すべての対応キャンペーン (*.vcmp *.h3c);;VCMIキャンペーン (*.vcmp);;HoMM3キャンペーン (*.h3c) - + Save campaign AI-generated, needs review by native speaker; delete this comment afterwards キャンペーンを保存 - + VCMI campaigns (*.vcmp) AI-generated, needs review by native speaker; delete this comment afterwards VCMIキャンペーン (*.vcmp) @@ -181,7 +181,7 @@ CampaignProperties - + Campaign Properties AI-generated, needs review by native speaker; delete this comment afterwards キャンペーンのプロパティ @@ -320,47 +320,47 @@ アウトロビデオ - + Custom AI-generated, needs review by native speaker; delete this comment afterwards カスタム - + Infix AI-generated, needs review by native speaker; delete this comment afterwards 中間語 - + X - + Y - + Label Pos X AI-generated, needs review by native speaker; delete this comment afterwards ラベル位置X - + Label Pos Y AI-generated, needs review by native speaker; delete this comment afterwards ラベル位置Y - + Fewer Scenarios AI-generated, needs review by native speaker; delete this comment afterwards シナリオ数の削減 - + New Region setup supports fewer scenarios than before. Some will removed. Continue? AI-generated, needs review by native speaker; delete this comment afterwards 新しい地域設定では以前より少ないシナリオ数に対応しています。一部が削除されます。続行しますか? @@ -399,6 +399,20 @@ 新しいイベント + + FactionSelector + + + + Select Factions + + + + + Faction Selector + + + GeneralSettings @@ -497,6 +511,16 @@ AI-generated, needs review by native speaker; delete this comment afterwards アーティファクト + + + Save + 保存 + + + + Cancel + キャンセル + HeroSkillsWidget @@ -652,7 +676,7 @@ MainWindow - + VCMI Map Editor VCMIマップエディター @@ -664,864 +688,870 @@ - + Open Recent AI-generated, needs review by native speaker; delete this comment afterwards 最近開いたファイル - + Map AI-generated, needs review by native speaker; delete this comment afterwards マップ - + Edit AI-generated, needs review by native speaker; delete this comment afterwards 編集 - + View AI-generated, needs review by native speaker; delete this comment afterwards 表示 - + Player AI-generated, needs review by native speaker; delete this comment afterwards プレイヤー - + Toolbar AI-generated, needs review by native speaker; delete this comment afterwards ツールバー - + Minimap AI-generated, needs review by native speaker; delete this comment afterwards ミニマップ - + Map Objects View AI-generated, needs review by native speaker; delete this comment afterwards マップオブジェクトビュー - + Browser AI-generated, needs review by native speaker; delete this comment afterwards ブラウザ - + Inspector AI-generated, needs review by native speaker; delete this comment afterwards インスペクター - + Property AI-generated, needs review by native speaker; delete this comment afterwards プロパティ - + Value AI-generated, needs review by native speaker; delete this comment afterwards - + Tools AI-generated, needs review by native speaker; delete this comment afterwards ツール - + Painting AI-generated, needs review by native speaker; delete this comment afterwards ペイント - + Terrains AI-generated, needs review by native speaker; delete this comment afterwards 地形 - + Roads AI-generated, needs review by native speaker; delete this comment afterwards 道路 - + Rivers AI-generated, needs review by native speaker; delete this comment afterwards - + Preview AI-generated, needs review by native speaker; delete this comment afterwards プレビュー - + Open AI-generated, needs review by native speaker; delete this comment afterwards 開く - + Ctrl+O AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+O - + More... AI-generated, needs review by native speaker; delete this comment afterwards その他... - + Save AI-generated, needs review by native speaker; delete this comment afterwards 保存 - + Ctrl+S AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+S - + New AI-generated, needs review by native speaker; delete this comment afterwards 新規作成 - + Ctrl+N AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+N - + Save as... AI-generated, needs review by native speaker; delete this comment afterwards 名前を付けて保存... - + Ctrl+Shift+S AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+S - - + + Campaign editor AI-generated, needs review by native speaker; delete this comment afterwards キャンペーンエディター - - - - + + + Template editor + + + + + + + View underground AI-generated, needs review by native speaker; delete this comment afterwards 地下を表示 - + Ctrl+U AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+U - + Pass AI-generated, needs review by native speaker; delete this comment afterwards パス - + Ctrl+Shift+P AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+P - + Cut AI-generated, needs review by native speaker; delete this comment afterwards 切り取り - + Ctrl+X AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+X - + Copy AI-generated, needs review by native speaker; delete this comment afterwards コピー - + Ctrl+C AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+C - + Paste AI-generated, needs review by native speaker; delete this comment afterwards 貼り付け - + Ctrl+V AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+V - + Fill AI-generated, needs review by native speaker; delete this comment afterwards 塗りつぶし - + Fills the selection with obstacles AI-generated, needs review by native speaker; delete this comment afterwards 選択範囲を障害物で塗りつぶします - + Grid AI-generated, needs review by native speaker; delete this comment afterwards グリッド - + Ctrl+G AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+G - + General AI-generated, needs review by native speaker; delete this comment afterwards 一般 - + Map title and description AI-generated, needs review by native speaker; delete this comment afterwards マップのタイトルと説明 - + Ctrl+Enter AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Enter - + Players settings AI-generated, needs review by native speaker; delete this comment afterwards プレイヤー設定 - + Ctrl+P AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+P - - + + Undo AI-generated, needs review by native speaker; delete this comment afterwards 元に戻す - + Ctrl+Z AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Z - + Redo AI-generated, needs review by native speaker; delete this comment afterwards やり直し - + Ctrl+Y AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Y - + Erase AI-generated, needs review by native speaker; delete this comment afterwards 削除 - + Del AI-generated, needs review by native speaker; delete this comment afterwards Del - + Neutral AI-generated, needs review by native speaker; delete this comment afterwards 中立 - + Ctrl+0 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+0 - + Validate AI-generated, needs review by native speaker; delete this comment afterwards 検証 - + Ctrl+Shift+V AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+V - - - - + + + + Update appearance AI-generated, needs review by native speaker; delete this comment afterwards 外観を更新 - + Recreate obstacles AI-generated, needs review by native speaker; delete this comment afterwards 障害物を再作成 - + Player 1 AI-generated, needs review by native speaker; delete this comment afterwards プレイヤー 1 - + Ctrl+1 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+1 - + Player 2 AI-generated, needs review by native speaker; delete this comment afterwards プレイヤー 2 - + Ctrl+2 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+2 - + Player 3 AI-generated, needs review by native speaker; delete this comment afterwards プレイヤー 3 - + Ctrl+3 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+3 - + Player 4 AI-generated, needs review by native speaker; delete this comment afterwards プレイヤー 4 - + Ctrl+4 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+4 - + Player 5 AI-generated, needs review by native speaker; delete this comment afterwards プレイヤー 5 - + Ctrl+5 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+5 - + Player 6 AI-generated, needs review by native speaker; delete this comment afterwards プレイヤー 6 - + Ctrl+6 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+6 - + Player 7 AI-generated, needs review by native speaker; delete this comment afterwards プレイヤー 7 - + Ctrl+7 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+7 - + Player 8 AI-generated, needs review by native speaker; delete this comment afterwards プレイヤー 8 - + Ctrl+8 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+8 - + Export as... AI-generated, needs review by native speaker; delete this comment afterwards 名前を付けてエクスポート... - + Ctrl+E AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+E - + Translations AI-generated, needs review by native speaker; delete this comment afterwards 翻訳 - + Ctrl+T AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+T - - + + h3m converter AI-generated, needs review by native speaker; delete this comment afterwards h3m コンバーター - + Ctrl+Shift+M AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+M - - + + h3c converter AI-generated, needs review by native speaker; delete this comment afterwards h3c コンバーター - + Ctrl+Shift+C AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+C - + Lock AI-generated, needs review by native speaker; delete this comment afterwards ロック - + Lock objects on map to avoid unnecessary changes AI-generated, needs review by native speaker; delete this comment afterwards マップ上のオブジェクトをロックして不必要な変更を防ぐ - + Ctrl+L AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+L - + Unlock AI-generated, needs review by native speaker; delete this comment afterwards ロック解除 - + Unlock all objects on the map AI-generated, needs review by native speaker; delete this comment afterwards マップ上のすべてのオブジェクトのロックを解除する - + Ctrl+Shift+L AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+L - + Zoom in AI-generated, needs review by native speaker; delete this comment afterwards ズームイン - + Ctrl++ AI-generated, needs review by native speaker; delete this comment afterwards Ctrl++ - + Zoom out AI-generated, needs review by native speaker; delete this comment afterwards ズームアウト - + Ctrl+- AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+- - + Zoom reset AI-generated, needs review by native speaker; delete this comment afterwards ズームリセット - + Ctrl+Shift+= AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+= - + Confirmation AI-generated, needs review by native speaker; delete this comment afterwards 確認 - + Unsaved changes will be lost, are you sure? AI-generated, needs review by native speaker; delete this comment afterwards 保存されていない変更は失われます。よろしいですか? - + Mods are required AI-generated, needs review by native speaker; delete this comment afterwards 必要なModがあります - + Failed to open map AI-generated, needs review by native speaker; delete this comment afterwards マップを開くのに失敗しました - + Open map AI-generated, needs review by native speaker; delete this comment afterwards マップを開く - + All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) AI-generated, needs review by native speaker; delete this comment afterwards すべての対応マップ (*.vmap *.h3m);;VCMIマップ(*.vmap);;HoMM3マップ(*.h3m) - + Recently Opened Files AI-generated, needs review by native speaker; delete this comment afterwards 最近開いたファイル - + Map validation AI-generated, needs review by native speaker; delete this comment afterwards マップの検証 - + Map has critical problems and most probably will not be playable. Open Validator from the Map menu to see issues found AI-generated, needs review by native speaker; delete this comment afterwards マップに重大な問題があり、プレイできない可能性があります。マップメニューからバリデータを開いて問題を確認してください - + Map has some errors. Open Validator from the Map menu to see issues found AI-generated, needs review by native speaker; delete this comment afterwards マップにいくつかのエラーがあります。マップメニューからバリデータを開いて問題を確認してください - + Failed to save map AI-generated, needs review by native speaker; delete this comment afterwards マップの保存に失敗しました - + Save map AI-generated, needs review by native speaker; delete this comment afterwards マップを保存 - + VCMI maps (*.vmap) AI-generated, needs review by native speaker; delete this comment afterwards VCMIマップ (*.vmap) - + Type AI-generated, needs review by native speaker; delete this comment afterwards 種類 - + Towns AI-generated, needs review by native speaker; delete this comment afterwards - + Objects AI-generated, needs review by native speaker; delete this comment afterwards オブジェクト - + Heroes AI-generated, needs review by native speaker; delete this comment afterwards ヒーロー - + Artifacts AI-generated, needs review by native speaker; delete this comment afterwards アーティファクト - + Resources AI-generated, needs review by native speaker; delete this comment afterwards 資源 - + Banks AI-generated, needs review by native speaker; delete this comment afterwards バンク - + Dwellings AI-generated, needs review by native speaker; delete this comment afterwards 住居 - + Grounds AI-generated, needs review by native speaker; delete this comment afterwards 地形 - + Teleports AI-generated, needs review by native speaker; delete this comment afterwards テレポート - + Mines AI-generated, needs review by native speaker; delete this comment afterwards 鉱山 - + Triggers AI-generated, needs review by native speaker; delete this comment afterwards トリガー - + Monsters AI-generated, needs review by native speaker; delete this comment afterwards モンスター - + Quests AI-generated, needs review by native speaker; delete this comment afterwards クエスト - + Wog Objects AI-generated, needs review by native speaker; delete this comment afterwards Wogオブジェクト - + Obstacles AI-generated, needs review by native speaker; delete this comment afterwards 障害物 - + Other AI-generated, needs review by native speaker; delete this comment afterwards その他 - + Mods loading problem AI-generated, needs review by native speaker; delete this comment afterwards Modの読み込み問題 - + Critical error during Mods loading. Disable invalid mods and restart. AI-generated, needs review by native speaker; delete this comment afterwards Mod読み込み中に重大なエラーが発生しました。無効なModを無効にして再起動してください。 - - + + View surface AI-generated, needs review by native speaker; delete this comment afterwards 地上を表示 - + No objects selected AI-generated, needs review by native speaker; delete this comment afterwards オブジェクトが選択されていません - + This operation is irreversible. Do you want to continue? AI-generated, needs review by native speaker; delete this comment afterwards この操作は元に戻せません。本当に続行しますか? - + Errors occurred. %1 objects were not updated AI-generated, needs review by native speaker; delete this comment afterwards エラーが発生しました。%1 個のオブジェクトが更新されませんでした - + Save to image AI-generated, needs review by native speaker; delete this comment afterwards 画像として保存 - + Select maps to convert AI-generated, needs review by native speaker; delete this comment afterwards 変換するマップを選択 - + HoMM3 maps(*.h3m) AI-generated, needs review by native speaker; delete this comment afterwards HoMM3マップ (*.h3m) - + Choose directory to save converted maps AI-generated, needs review by native speaker; delete this comment afterwards 変換されたマップを保存するディレクトリを選択 - + Operation completed AI-generated, needs review by native speaker; delete this comment afterwards 操作が完了しました - + Successfully converted %1 maps AI-generated, needs review by native speaker; delete this comment afterwards %1 個のマップが正常に変換されました - + Failed to convert the map. Abort operation AI-generated, needs review by native speaker; delete this comment afterwards マップの変換に失敗しました。操作を中止します - + Select campaign to convert AI-generated, needs review by native speaker; delete this comment afterwards 変換するキャンペーンを選択 - + HoMM3 campaigns (*.h3c) AI-generated, needs review by native speaker; delete this comment afterwards HoMM3キャンペーン (*.h3c) - + Select destination file AI-generated, needs review by native speaker; delete this comment afterwards 保存先ファイルを選択 - + VCMI campaigns (*.vcmp) AI-generated, needs review by native speaker; delete this comment afterwards VCMIキャンペーン (*.vcmp) @@ -1530,30 +1560,30 @@ MapController - + Hero %1 cannot be created as NEUTRAL. AI-generated, needs review by native speaker; delete this comment afterwards ヒーロー %1 は中立 (NEUTRAL) として作成できません。 - + Missing Required Mod AI-generated, needs review by native speaker; delete this comment afterwards 必要なModが見つかりません - + Do you want to do that now ? -AI-generated, needs review by native speaker; delete this comment afterwards + AI-generated, needs review by native speaker; delete this comment afterwards 今すぐ行いますか? - + This object's mod is mandatory for map to remain valid. AI-generated, needs review by native speaker; delete this comment afterwards このオブジェクトのModはマップを有効な状態に保つために必須です。 @@ -1658,6 +1688,30 @@ Do you want to do that now ? メッセージ + + MineSelector + + + + Select Mines + + + + + Mine Selector + + + + + Resource + 資源 + + + + Mines + 鉱山 + + ModSettings @@ -1811,28 +1865,25 @@ Do you want to do that now ? - PlayerSettings + PlayerSettingsDialog - + Player settings - AI-generated, needs review by native speaker; delete this comment afterwards プレイヤー設定 - + Players - AI-generated, needs review by native speaker; delete this comment afterwards プレイヤー - + 1 - + Ok - AI-generated, needs review by native speaker; delete this comment afterwards OK @@ -1890,434 +1941,434 @@ Do you want to do that now ? 副次スキル: - + Compliant AI-generated, needs review by native speaker; delete this comment afterwards 穏やか - + Friendly AI-generated, needs review by native speaker; delete this comment afterwards 友好的 - + Aggressive AI-generated, needs review by native speaker; delete this comment afterwards 攻撃的 - + Hostile AI-generated, needs review by native speaker; delete this comment afterwards 敵対的 - + Savage AI-generated, needs review by native speaker; delete this comment afterwards 凶暴 - - + + No patrol AI-generated, needs review by native speaker; delete this comment afterwards 巡回なし - + POWER RANK AI-generated, needs review by native speaker; delete this comment afterwards 戦力ランク - + HERO TYPE AI-generated, needs review by native speaker; delete this comment afterwards ヒーロータイプ - + Hero class AI-generated, needs review by native speaker; delete this comment afterwards ヒーロークラス - + Portrait AI-generated, needs review by native speaker; delete this comment afterwards ポートレート - + Skills AI-generated, needs review by native speaker; delete this comment afterwards スキル - + Artifacts AI-generated, needs review by native speaker; delete this comment afterwards アーティファクト - - + + %n tile(s) - + Buildings AI-generated, needs review by native speaker; delete this comment afterwards 建物 - + Events AI-generated, needs review by native speaker; delete this comment afterwards イベント - + Resource AI-generated, needs review by native speaker; delete this comment afterwards 資源 - + Artifact reward AI-generated, needs review by native speaker; delete this comment afterwards アーティファクト報酬 - + Quest AI-generated, needs review by native speaker; delete this comment afterwards クエスト - + Identifier AI-generated, needs review by native speaker; delete this comment afterwards 識別子 - + ID AI-generated, needs review by native speaker; delete this comment afterwards ID - + SubID AI-generated, needs review by native speaker; delete this comment afterwards サブID - + InstanceName AI-generated, needs review by native speaker; delete this comment afterwards インスタンス名 - + IsStatic AI-generated, needs review by native speaker; delete this comment afterwards 静的か - - + + neutral AI-generated, needs review by native speaker; delete this comment afterwards 中立 - - + + Army AI-generated, needs review by native speaker; delete this comment afterwards 軍隊 - - - + + - - - - - + + + + + + Owner AI-generated, needs review by native speaker; delete this comment afterwards 所有者 - - + + Same as town AI-generated, needs review by native speaker; delete this comment afterwards 町と同じ - - + + Removable units AI-generated, needs review by native speaker; delete this comment afterwards 除去可能なユニット - - + + Placeholder type AI-generated, needs review by native speaker; delete this comment afterwards プレースホルダータイプ - - + + Power rank AI-generated, needs review by native speaker; delete this comment afterwards 戦力ランク - - - - + + + + Hero type AI-generated, needs review by native speaker; delete this comment afterwards ヒーロータイプ - - + + Experience AI-generated, needs review by native speaker; delete this comment afterwards 経験値 - - + + MALE AI-generated, needs review by native speaker; delete this comment afterwards 男性 - - + + FEMALE AI-generated, needs review by native speaker; delete this comment afterwards 女性 - - + + Gender AI-generated, needs review by native speaker; delete this comment afterwards 性別 - - + + Name AI-generated, needs review by native speaker; delete this comment afterwards 名前 - - + + Biography AI-generated, needs review by native speaker; delete this comment afterwards 経歴 - - + + Spells AI-generated, needs review by native speaker; delete this comment afterwards 魔法 - - + + Patrol radius AI-generated, needs review by native speaker; delete this comment afterwards 巡回範囲 - - + + Town name AI-generated, needs review by native speaker; delete this comment afterwards 町の名前 - - + + Same as player AI-generated, needs review by native speaker; delete this comment afterwards プレイヤーと同じ - - - - - - - - - + + + + + + + + + Message AI-generated, needs review by native speaker; delete this comment afterwards メッセージ - - + + Spell AI-generated, needs review by native speaker; delete this comment afterwards 魔法 - - + + Productivity AI-generated, needs review by native speaker; delete this comment afterwards 生産性 - - - - + + + + Amount AI-generated, needs review by native speaker; delete this comment afterwards - + Character AI-generated, needs review by native speaker; delete this comment afterwards キャラクター - + Select town AI-generated, needs review by native speaker; delete this comment afterwards 町を選択 - - + + Never flees AI-generated, needs review by native speaker; delete this comment afterwards 決して逃走しない - - + + Not growing AI-generated, needs review by native speaker; delete this comment afterwards 成長しない - - + + Reward AI-generated, needs review by native speaker; delete this comment afterwards 報酬 - - + + Remove after AI-generated, needs review by native speaker; delete this comment afterwards 後で除去 - - + + Human trigger AI-generated, needs review by native speaker; delete this comment afterwards 人間トリガー - - + + Cpu trigger AI-generated, needs review by native speaker; delete this comment afterwards CPUトリガー - - + + First visit text AI-generated, needs review by native speaker; delete this comment afterwards 初回訪問時のテキスト - - + + Next visit text AI-generated, needs review by native speaker; delete this comment afterwards 次回訪問時のテキスト - - + + Completed text AI-generated, needs review by native speaker; delete this comment afterwards 完了時のテキスト - - - + + + Repeat quest AI-generated, needs review by native speaker; delete this comment afterwards クエストを繰り返す - - + + Time limit AI-generated, needs review by native speaker; delete this comment afterwards 時間制限 - + UNFLAGGABLE AI-generated, needs review by native speaker; delete this comment afterwards フラグ不可 - + Can't place object AI-generated, needs review by native speaker; delete this comment afterwards オブジェクトを配置できません - + There can only be one grail object on the map. AI-generated, needs review by native speaker; delete this comment afterwards マップ上に聖杯オブジェクトは1つだけ配置できます。 - + (submod of %1) AI-generated, needs review by native speaker; delete this comment afterwards (%1 のサブMod) - + The mod '%1'%2, is required by an object on the map. Add it to the map's required mods in Map->General settings. should be consistent with Map->General menu entry translation @@ -2365,14 +2416,14 @@ Add it to the map's required mods in Map->General settings. - + Hero Level: %1 AI-generated, needs review by native speaker; delete this comment afterwards ヒーローレベル:%1 - + Hero Experience: %1 AI-generated, needs review by native speaker; delete this comment afterwards ヒーロー経験値:%1 @@ -2385,49 +2436,49 @@ Add it to the map's required mods in Map->General settings. - + Mana Percentage: %1 AI-generated, needs review by native speaker; delete this comment afterwards マナの割合:%1 - + Primary Skills: %1/%2/%3/%4 AI-generated, needs review by native speaker; delete this comment afterwards 基本スキル:%1/%2/%3/%4 - + Resources: %1 AI-generated, needs review by native speaker; delete this comment afterwards 資源:%1 - + Artifacts: %1 AI-generated, needs review by native speaker; delete this comment afterwards アーティファクト:%1 - + Spells: %1 AI-generated, needs review by native speaker; delete this comment afterwards 魔法:%1 - + Secondary Skills: %1 AI-generated, needs review by native speaker; delete this comment afterwards 副次スキル:%1 - + Creatures: %1 AI-generated, needs review by native speaker; delete this comment afterwards クリーチャー:%1 @@ -2451,43 +2502,43 @@ Add it to the map's required mods in Map->General settings. プレイヤー:%1 - + Rewards: AI-generated, needs review by native speaker; delete this comment afterwards 報酬: - + Reward Message: %1 AI-generated, needs review by native speaker; delete this comment afterwards 報酬メッセージ:%1 - + Mana Diff: %1 AI-generated, needs review by native speaker; delete this comment afterwards マナ差分:%1 - + Move Points: %1 AI-generated, needs review by native speaker; delete this comment afterwards 移動ポイント:%1 - + Move Percentage: %1 AI-generated, needs review by native speaker; delete this comment afterwards 移動の割合:%1 - + Spell Cast: %1 (%2) AI-generated, needs review by native speaker; delete this comment afterwards 詠唱魔法:%1(%2) - + Bonuses: %1 AI-generated, needs review by native speaker; delete this comment afterwards ボーナス:%1 @@ -2989,20 +3040,20 @@ Add it to the map's required mods in Map->General settings. プレイヤー - + None AI-generated, needs review by native speaker; delete this comment afterwards なし - + Day %1 AI-generated, needs review by native speaker; delete this comment afterwards 日付 %1 - - + + Reward %1 AI-generated, needs review by native speaker; delete this comment afterwards 報酬 %1 @@ -3268,8 +3319,8 @@ Add it to the map's required mods in Map->General settings. - - + + Player position AI-generated, needs review by native speaker; delete this comment afterwards プレイヤー位置 @@ -3329,57 +3380,57 @@ Add it to the map's required mods in Map->General settings. プレイヤー - + Open map AI-generated, needs review by native speaker; delete this comment afterwards マップを開く - + All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) AI-generated, needs review by native speaker; delete this comment afterwards すべての対応マップ (*.vmap *.h3m);;VCMIマップ(*.vmap);;HoMM3マップ(*.h3m) - - + + Error AI-generated, needs review by native speaker; delete this comment afterwards エラー - - + + Could not open the file. AI-generated, needs review by native speaker; delete this comment afterwards ファイルを開けませんでした。 - + Save map AI-generated, needs review by native speaker; delete this comment afterwards マップを保存 - + VCMI maps (*.vmap); AI-generated, needs review by native speaker; delete this comment afterwards VCMIマップ (*.vmap); - + HoMM3 maps (*.h3m); AI-generated, needs review by native speaker; delete this comment afterwards HoMM3マップ (*.h3m); - + Source scenario AI-generated, needs review by native speaker; delete this comment afterwards 元シナリオ - + Hero AI-generated, needs review by native speaker; delete this comment afterwards ヒーロー @@ -3419,7 +3470,7 @@ Add it to the map's required mods in Map->General settings. - + Building AI-generated, needs review by native speaker; delete this comment afterwards 建物 @@ -3450,7 +3501,7 @@ Add it to the map's required mods in Map->General settings. - + Secondary skill AI-generated, needs review by native speaker; delete this comment afterwards 副次スキル @@ -3458,7 +3509,7 @@ Add it to the map's required mods in Map->General settings. - + Resource AI-generated, needs review by native speaker; delete this comment afterwards 資源 @@ -3560,54 +3611,679 @@ Add it to the map's required mods in Map->General settings. レア(%1、%2、%3、%4) - + strongest hero AI-generated, needs review by native speaker; delete this comment afterwards 最強のヒーロー - + generated hero AI-generated, needs review by native speaker; delete this comment afterwards 自動生成ヒーロー - + random hero AI-generated, needs review by native speaker; delete this comment afterwards ランダムヒーロー - + %1 spell for %2 AI-generated, needs review by native speaker; delete this comment afterwards %1 のための魔法 %2 - + %1 %2 for %3 AI-generated, needs review by native speaker; delete this comment afterwards %1 %2(対象:%3) - + %1 artifact for %2 AI-generated, needs review by native speaker; delete this comment afterwards %1 のためのアーティファクト - + %1 spell scroll for %2 AI-generated, needs review by native speaker; delete this comment afterwards %1 のための魔法の巻物 - + Primary skill (Attack: %1, Defense: %2, Spell: %3, Knowledge: %4) for %5 AI-generated, needs review by native speaker; delete this comment afterwards 基本スキル(攻撃:%1、防御:%2、魔力:%3、知識:%4)対象:%5 + + TemplateEditor + + + + VCMI Template Editor + + + + + File + ファイル + + + + Edit + 編集 + + + + View + 表示 + + + + Toolbar + ツールバー + + + + Selected Template: + + + + + + + Add + 追加 + + + + Remove + 削除 + + + + Rename + + + + + General + 一般 + + + + Name + 名前 + + + + Description + + + + + Min Size + + + + + + + X + + + + + + + Y + + + + + + + Z + + + + + Max Size + + + + + + Players + プレイヤー + + + + Human + + + + + Allowed water content + + + + + + + None + なし + + + + + Normal + 普通 + + + + Islands + + + + + Zone + + + + + Visualisation + + + + + Position + + + + + + Size + + + + + ID + ID + + + + + Type + 種類 + + + + Owner + 所有者 + + + + Zone link + + + + + + + Mines + 鉱山 + + + + + Custom objects + + + + + + Towns + + + + + + Terrain + + + + + + + + Treasure + + + + + Town info + + + + + Town count + + + + + + + + Player + プレイヤー + + + + + + + Neutral + 中立 + + + + Castle count + + + + + Town density + + + + + Castle density + + + + + Match terrain to town + + + + + Terrain types + + + + + Banned terrain types + + + + + Towns are same type + + + + + Allowed towns + + + + + Banned towns + + + + + Town hints + + + + + Monsters + モンスター + + + + Allowed monsters + + + + + Banned monsters + + + + + Strength + + + + + Objects + オブジェクト + + + + Connections + + + + + Open + 開く + + + + Save + 保存 + + + + New + 新規作成 + + + + Save as... + 名前を付けて保存... + + + + Ctrl+Shift+S + Ctrl+Shift+S + + + + Add zone + + + + + Remove zone + + + + + + Del + Del + + + + Auto position + + + + + Ctrl+P + Ctrl+P + + + + Zoom in + ズームイン + + + + Ctrl++ + Ctrl++ + + + + Zoom out + ズームアウト + + + + Ctrl+- + Ctrl+- + + + + Zoom auto + + + + + Ctrl+Shift+: + + + + + Zoom reset + ズームリセット + + + + Ctrl+Shift+= + Ctrl+Shift+= + + + + Min + + + + + Max + + + + + Action + + + + + + Delete + + + + + ID: %1 + + + + + Max treasure: %1 + + + + + Player start + + + + + CPU start + + + + + Junction + + + + + Water + + + + + Sealed + + + + + + Random + ランダム + + + + Weak + 弱い + + + + Strong + 強い + + + + Zone A + + + + + Zone B + + + + + Guard + + + + + Road + + + + + Guarded + + + + + Fictive + + + + + Repulsive + + + + + Wide + + + + + Force portal + + + + + Yes + + + + + No + + + + + Zone A: %1 +Zone B: %2 +Guard: %3 + + + + + Confirmation + 確認 + + + + Unsaved changes will be lost, are you sure? + + + + + Open template + + + + + VCMI templates(*.json) + + + + + Save template + + + + + VCMI templates (*.json) + + + + + + Enter Name + + + + + + Name: + + + + + Already existing! + + + + + At template with this name is already existing. + + + + + To few templates! + + + + + At least one template should remain after removing. + + + + + + Error + エラー + + + + + Not implemented yet! + + + + + TerrainSelector + + + + Select Terrains + + + + + Terrain Selector + + + TimedEvent @@ -4010,6 +4686,40 @@ Add it to the map's required mods in Map->General settings. この言語のすべてのテキストレコードが削除されます。続行しますか? + + TreasureSelector + + + + Select Treasures + + + + + Treasure Selector + + + + + Min + + + + + Max + + + + + Density + + + + + Action + + + Validator @@ -4474,25 +5184,25 @@ Add it to the map's required mods in Map->General settings. キャンセル - + No template AI-generated, needs review by native speaker; delete this comment afterwards テンプレートなし - + No template for parameters specified. Random map cannot be generated. AI-generated, needs review by native speaker; delete this comment afterwards 指定されたパラメータに対応するテンプレートがありません。ランダムマップを生成できません。 - + RMG failure AI-generated, needs review by native speaker; delete this comment afterwards RMG失敗 - + [default] AI-generated, needs review by native speaker; delete this comment afterwards [デフォルト] @@ -4501,31 +5211,31 @@ Add it to the map's required mods in Map->General settings. main - + Filepath of the map to open. AI-generated, needs review by native speaker; delete this comment afterwards 開くマップのファイルパス。 - + Extract original H3 archives into a separate folder. AI-generated, needs review by native speaker; delete this comment afterwards 元のH3アーカイブを別のフォルダに抽出します。 - + From an extracted archive, it Splits TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 and Un44 into individual PNG's. AI-generated, needs review by native speaker; delete this comment afterwards 抽出されたアーカイブから、TwCrPort、CPRSMALL、FlagPort、ITPA、ITPt、Un32、Un44 を個別のPNGに分割します。 - + From an extracted archive, Converts single Images (found in Images folder) from .pcx to png. AI-generated, needs review by native speaker; delete this comment afterwards 抽出されたアーカイブから、Imagesフォルダにある単体画像(.pcx)をpngに変換します。 - + Delete original files, for the ones split / converted. AI-generated, needs review by native speaker; delete this comment afterwards 分割/変換されたファイルの元ファイルを削除します。 diff --git a/mapeditor/translation/korean.ts b/mapeditor/translation/korean.ts index 21166b73c..e56b215aa 100644 --- a/mapeditor/translation/korean.ts +++ b/mapeditor/translation/korean.ts @@ -54,7 +54,7 @@ CampaignEditor - + VCMI Campaign Editor AI-generated, needs review by native speaker; delete this comment afterwards VCMI 캠페인 편집기 @@ -135,43 +135,43 @@ 전체 배경 표시 - + Scenario editor AI-generated, needs review by native speaker; delete this comment afterwards 시나리오 편집기 - + Confirmation AI-generated, needs review by native speaker; delete this comment afterwards 확인 - + Unsaved changes will be lost, are you sure? AI-generated, needs review by native speaker; delete this comment afterwards 저장되지 않은 변경 사항이 손실됩니다. 계속하시겠습니까? - + Open map AI-generated, needs review by native speaker; delete this comment afterwards 맵 열기 - + All supported campaigns (*.vcmp *.h3c);;VCMI campaigns(*.vcmp);;HoMM3 campaigns(*.h3c) AI-generated, needs review by native speaker; delete this comment afterwards 모든 지원 캠페인 (*.vcmp *.h3c);;VCMI 캠페인(*.vcmp);;HoMM3 캠페인(*.h3c) - + Save campaign AI-generated, needs review by native speaker; delete this comment afterwards 캠페인 저장 - + VCMI campaigns (*.vcmp) AI-generated, needs review by native speaker; delete this comment afterwards VCMI 캠페인 (*.vcmp) @@ -181,7 +181,7 @@ CampaignProperties - + Campaign Properties AI-generated, needs review by native speaker; delete this comment afterwards 캠페인 속성 @@ -320,47 +320,47 @@ 아웃트로 비디오 - + Custom AI-generated, needs review by native speaker; delete this comment afterwards 사용자 정의 - + Infix AI-generated, needs review by native speaker; delete this comment afterwards 중간 삽입어 - + X - + Y - + Label Pos X AI-generated, needs review by native speaker; delete this comment afterwards 라벨 위치 X - + Label Pos Y AI-generated, needs review by native speaker; delete this comment afterwards 라벨 위치 Y - + Fewer Scenarios AI-generated, needs review by native speaker; delete this comment afterwards 시나리오 수 감소 - + New Region setup supports fewer scenarios than before. Some will removed. Continue? AI-generated, needs review by native speaker; delete this comment afterwards 새로운 지역 설정은 이전보다 시나리오 수가 적습니다. 일부가 제거됩니다. 계속하시겠습니까? @@ -399,6 +399,20 @@ 새 이벤트 + + FactionSelector + + + + Select Factions + + + + + Faction Selector + + + GeneralSettings @@ -497,6 +511,16 @@ AI-generated, needs review by native speaker; delete this comment afterwards 아티팩트 + + + Save + 저장 + + + + Cancel + 취소 + HeroSkillsWidget @@ -652,7 +676,7 @@ MainWindow - + VCMI Map Editor VCMI 맵 편집기 @@ -664,843 +688,849 @@ - + Open Recent AI-generated, needs review by native speaker; delete this comment afterwards 최근 열기 - + Map AI-generated, needs review by native speaker; delete this comment afterwards - + Edit AI-generated, needs review by native speaker; delete this comment afterwards 편집 - + View AI-generated, needs review by native speaker; delete this comment afterwards 보기 - + Player AI-generated, needs review by native speaker; delete this comment afterwards 플레이어 - + Toolbar AI-generated, needs review by native speaker; delete this comment afterwards 도구 모음 - + Minimap AI-generated, needs review by native speaker; delete this comment afterwards 미니맵 - + Map Objects View AI-generated, needs review by native speaker; delete this comment afterwards 맵 오브젝트 보기 - + Browser AI-generated, needs review by native speaker; delete this comment afterwards 브라우저 - + Inspector AI-generated, needs review by native speaker; delete this comment afterwards 인스펙터 - + Property AI-generated, needs review by native speaker; delete this comment afterwards 속성 - + Value AI-generated, needs review by native speaker; delete this comment afterwards - + Tools AI-generated, needs review by native speaker; delete this comment afterwards 도구 - + Painting AI-generated, needs review by native speaker; delete this comment afterwards 그리기 - + Terrains AI-generated, needs review by native speaker; delete this comment afterwards 지형 - + Roads AI-generated, needs review by native speaker; delete this comment afterwards 도로 - + Rivers AI-generated, needs review by native speaker; delete this comment afterwards - + Preview AI-generated, needs review by native speaker; delete this comment afterwards 미리보기 - + Open AI-generated, needs review by native speaker; delete this comment afterwards 열기 - + Ctrl+O AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+O - + More... AI-generated, needs review by native speaker; delete this comment afterwards 더 보기... - + Save AI-generated, needs review by native speaker; delete this comment afterwards 저장 - + Ctrl+S AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+S - + New AI-generated, needs review by native speaker; delete this comment afterwards 새로 만들기 - + Ctrl+N AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+N - + Save as... AI-generated, needs review by native speaker; delete this comment afterwards 다른 이름으로 저장... - + Ctrl+Shift+S AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+S - - + + Campaign editor AI-generated, needs review by native speaker; delete this comment afterwards 캠페인 편집기 - - - - + + + Template editor + + + + + + + View underground AI-generated, needs review by native speaker; delete this comment afterwards 지하 보기 - + Ctrl+U AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+U - + Pass AI-generated, needs review by native speaker; delete this comment afterwards 통과 - + Ctrl+Shift+P AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+P - + Cut AI-generated, needs review by native speaker; delete this comment afterwards 잘라내기 - + Ctrl+X AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+X - + Copy AI-generated, needs review by native speaker; delete this comment afterwards 복사 - + Ctrl+C AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+C - + Paste AI-generated, needs review by native speaker; delete this comment afterwards 붙여넣기 - + Ctrl+V AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+V - + Fill AI-generated, needs review by native speaker; delete this comment afterwards 채우기 - + Fills the selection with obstacles AI-generated, needs review by native speaker; delete this comment afterwards 선택 영역을 장애물로 채웁니다 - + Grid AI-generated, needs review by native speaker; delete this comment afterwards 격자 - + Ctrl+G AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+G - + General AI-generated, needs review by native speaker; delete this comment afterwards 일반 - + Map title and description AI-generated, needs review by native speaker; delete this comment afterwards 맵 제목 및 설명 - + Ctrl+Enter AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Enter - + Players settings AI-generated, needs review by native speaker; delete this comment afterwards 플레이어 설정 - + Ctrl+P AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+P - - + + Undo AI-generated, needs review by native speaker; delete this comment afterwards 실행 취소 - + Ctrl+Z AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Z - + Redo AI-generated, needs review by native speaker; delete this comment afterwards 다시 실행 - + Ctrl+Y AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Y - + Erase AI-generated, needs review by native speaker; delete this comment afterwards 지우기 - + Del AI-generated, needs review by native speaker; delete this comment afterwards Del - + Neutral AI-generated, needs review by native speaker; delete this comment afterwards 중립 - + Ctrl+0 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+0 - + Validate AI-generated, needs review by native speaker; delete this comment afterwards 검사 - + Ctrl+Shift+V AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+V - - - - + + + + Update appearance AI-generated, needs review by native speaker; delete this comment afterwards 외형 업데이트 - + Recreate obstacles AI-generated, needs review by native speaker; delete this comment afterwards 장애물 다시 생성 - + Player 1 AI-generated, needs review by native speaker; delete this comment afterwards 플레이어 1 - + Ctrl+1 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+1 - + Player 2 AI-generated, needs review by native speaker; delete this comment afterwards 플레이어 2 - + Ctrl+2 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+2 - + Player 3 AI-generated, needs review by native speaker; delete this comment afterwards 플레이어 3 - + Ctrl+3 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+3 - + Player 4 AI-generated, needs review by native speaker; delete this comment afterwards 플레이어 4 - + Ctrl+4 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+4 - + Player 5 AI-generated, needs review by native speaker; delete this comment afterwards 플레이어 5 - + Ctrl+5 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+5 - + Player 6 AI-generated, needs review by native speaker; delete this comment afterwards 플레이어 6 - + Ctrl+6 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+6 - + Player 7 AI-generated, needs review by native speaker; delete this comment afterwards 플레이어 7 - + Ctrl+7 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+7 - + Player 8 AI-generated, needs review by native speaker; delete this comment afterwards 플레이어 8 - + Ctrl+8 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+8 - + Export as... AI-generated, needs review by native speaker; delete this comment afterwards 다른 이름으로 내보내기... - + Ctrl+E AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+E - + Translations AI-generated, needs review by native speaker; delete this comment afterwards 번역 - + Ctrl+T AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+T - - + + h3m converter AI-generated, needs review by native speaker; delete this comment afterwards h3m 변환기 - + Ctrl+Shift+M AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+M - - + + h3c converter AI-generated, needs review by native speaker; delete this comment afterwards h3c 변환기 - + Ctrl+Shift+C AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+C - + Lock AI-generated, needs review by native speaker; delete this comment afterwards 잠금 - + Lock objects on map to avoid unnecessary changes AI-generated, needs review by native speaker; delete this comment afterwards 불필요한 변경을 방지하기 위해 맵의 오브젝트를 잠급니다 - + Ctrl+L AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+L - + Unlock AI-generated, needs review by native speaker; delete this comment afterwards 잠금 해제 - + Unlock all objects on the map AI-generated, needs review by native speaker; delete this comment afterwards 맵의 모든 오브젝트의 잠금을 해제합니다 - + Ctrl+Shift+L AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+L - + Zoom in AI-generated, needs review by native speaker; delete this comment afterwards 확대 - + Ctrl++ AI-generated, needs review by native speaker; delete this comment afterwards Ctrl++ - + Zoom out AI-generated, needs review by native speaker; delete this comment afterwards 축소 - + Ctrl+- AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+- - + Zoom reset AI-generated, needs review by native speaker; delete this comment afterwards 확대 초기화 - + Ctrl+Shift+= AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+= - + Confirmation AI-generated, needs review by native speaker; delete this comment afterwards 확인 - + Unsaved changes will be lost, are you sure? AI-generated, needs review by native speaker; delete this comment afterwards 저장되지 않은 변경 사항이 손실됩니다. 계속하시겠습니까? - + Mods are required AI-generated, needs review by native speaker; delete this comment afterwards 필수 모드가 필요합니다 - + Failed to open map AI-generated, needs review by native speaker; delete this comment afterwards 맵 열기에 실패했습니다 - + Open map AI-generated, needs review by native speaker; delete this comment afterwards 맵 열기 - + All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) AI-generated, needs review by native speaker; delete this comment afterwards 지원되는 모든 맵 (*.vmap *.h3m);;VCMI 맵(*.vmap);;HoMM3 맵(*.h3m) - + Recently Opened Files AI-generated, needs review by native speaker; delete this comment afterwards 최근에 연 파일 - + Map validation AI-generated, needs review by native speaker; delete this comment afterwards 맵 유효성 검사 - + Map has critical problems and most probably will not be playable. Open Validator from the Map menu to see issues found AI-generated, needs review by native speaker; delete this comment afterwards 맵에 치명적인 문제가 있어 플레이할 수 없 - + Map has some errors. Open Validator from the Map menu to see issues found - + Failed to save map - + Save map - + 맵 저장 - + VCMI maps (*.vmap) - + Type - + Towns - + Objects - + Heroes - + 영웅 - + Artifacts - + 아티팩트 - + Resources - + 자원 - + Banks - + Dwellings - + Grounds - + Teleports - + Mines - + Triggers - + Monsters - + Quests - + Wog Objects - + Obstacles - + Other - + Mods loading problem AI-generated, needs review by native speaker; delete this comment afterwards 모드 로딩 문제 - + Critical error during Mods loading. Disable invalid mods and restart. AI-generated, needs review by native speaker; delete this comment afterwards 모드를 불러오는 중 치명적인 오류가 발생했습니다. 잘못된 모드를 비활성화하고 다시 시작하세요. - - + + View surface AI-generated, needs review by native speaker; delete this comment afterwards 지상 보기 - + No objects selected AI-generated, needs review by native speaker; delete this comment afterwards 선택된 오브젝트 없음 - + This operation is irreversible. Do you want to continue? AI-generated, needs review by native speaker; delete this comment afterwards 이 작업은 되돌릴 수 없습니다. 계속하시겠습니까? - + Errors occurred. %1 objects were not updated AI-generated, needs review by native speaker; delete this comment afterwards 오류가 발생했습니다. %1개의 오브젝트가 업데이트되지 않았습니다 - + Save to image AI-generated, needs review by native speaker; delete this comment afterwards 이미지로 저장 - + Select maps to convert AI-generated, needs review by native speaker; delete this comment afterwards 변환할 맵 선택 - + HoMM3 maps(*.h3m) AI-generated, needs review by native speaker; delete this comment afterwards HoMM3 맵(*.h3m) - + Choose directory to save converted maps AI-generated, needs review by native speaker; delete this comment afterwards 변환된 맵을 저장할 디렉토리 선택 - + Operation completed AI-generated, needs review by native speaker; delete this comment afterwards 작업 완료 - + Successfully converted %1 maps AI-generated, needs review by native speaker; delete this comment afterwards %1개의 맵이 성공적으로 변환되었습니다 - + Failed to convert the map. Abort operation AI-generated, needs review by native speaker; delete this comment afterwards 맵 변환 실패. 작업을 중단합니다 - + Select campaign to convert AI-generated, needs review by native speaker; delete this comment afterwards 변환할 캠페인 선택 - + HoMM3 campaigns (*.h3c) AI-generated, needs review by native speaker; delete this comment afterwards HoMM3 캠페인 (*.h3c) - + Select destination file AI-generated, needs review by native speaker; delete this comment afterwards 대상 파일 선택 - + VCMI campaigns (*.vcmp) AI-generated, needs review by native speaker; delete this comment afterwards VCMI 캠페인 (*.vcmp) @@ -1509,30 +1539,30 @@ MapController - + Hero %1 cannot be created as NEUTRAL. AI-generated, needs review by native speaker; delete this comment afterwards 영웅 %1은(는) 중립으로 생성할 수 없습니다. - + Missing Required Mod AI-generated, needs review by native speaker; delete this comment afterwards 필수 모드 누락 - + Do you want to do that now ? -AI-generated, needs review by native speaker; delete this comment afterwards + AI-generated, needs review by native speaker; delete this comment afterwards 지금 실행하시겠습니까? - + This object's mod is mandatory for map to remain valid. AI-generated, needs review by native speaker; delete this comment afterwards 이 오브젝트의 모드는 맵의 유효성을 유지하기 위해 필수입니다. @@ -1637,6 +1667,30 @@ Do you want to do that now ? 메시지 + + MineSelector + + + + Select Mines + + + + + Mine Selector + + + + + Resource + 자원 + + + + Mines + + + ModSettings @@ -1790,28 +1844,25 @@ Do you want to do that now ? - PlayerSettings + PlayerSettingsDialog - + Player settings - AI-generated, needs review by native speaker; delete this comment afterwards 플레이어 설정 - + Players - AI-generated, needs review by native speaker; delete this comment afterwards 플레이어 - + 1 - + Ok - AI-generated, needs review by native speaker; delete this comment afterwards 확인 @@ -1869,440 +1920,440 @@ Do you want to do that now ? 보조 기술: - + Compliant AI-generated, needs review by native speaker; delete this comment afterwards 온순함 - + Friendly AI-generated, needs review by native speaker; delete this comment afterwards 우호적 - + Aggressive AI-generated, needs review by native speaker; delete this comment afterwards 공격적 - + Hostile AI-generated, needs review by native speaker; delete this comment afterwards 적대적 - + Savage AI-generated, needs review by native speaker; delete this comment afterwards 야성적 - - + + No patrol AI-generated, needs review by native speaker; delete this comment afterwards 순찰 없음 - + POWER RANK AI-generated, needs review by native speaker; delete this comment afterwards 전투력 순위 - + HERO TYPE AI-generated, needs review by native speaker; delete this comment afterwards 영웅 유형 - + Hero class AI-generated, needs review by native speaker; delete this comment afterwards 영웅 클래스 - + Portrait AI-generated, needs review by native speaker; delete this comment afterwards 초상화 - + Skills AI-generated, needs review by native speaker; delete this comment afterwards 기술 - + Artifacts AI-generated, needs review by native speaker; delete this comment afterwards 아티팩트 - - + + %n tile(s) - + Buildings AI-generated, needs review by native speaker; delete this comment afterwards 건물 - + Events AI-generated, needs review by native speaker; delete this comment afterwards 이벤트 - + Resource AI-generated, needs review by native speaker; delete this comment afterwards 자원 - + Artifact reward AI-generated, needs review by native speaker; delete this comment afterwards 아티팩트 보상 - + Quest AI-generated, needs review by native speaker; delete this comment afterwards 퀘스트 - + Identifier AI-generated, needs review by native speaker; delete this comment afterwards 식별자 - + ID AI-generated, needs review by native speaker; delete this comment afterwards ID - + SubID AI-generated, needs review by native speaker; delete this comment afterwards 하위 ID - + InstanceName AI-generated, needs review by native speaker; delete this comment afterwards 인스턴스 이름 - + IsStatic AI-generated, needs review by native speaker; delete this comment afterwards 정적 여부 - - + + neutral AI-generated, needs review by native speaker; delete this comment afterwards 중립 - - + + Army AI-generated, needs review by native speaker; delete this comment afterwards 군대 - - - + + - - - - - + + + + + + Owner AI-generated, needs review by native speaker; delete this comment afterwards 소유자 - - + + Same as town AI-generated, needs review by native speaker; delete this comment afterwards 도시와 동일 - - + + Removable units AI-generated, needs review by native speaker; delete this comment afterwards 제거 가능한 유닛 - - + + Placeholder type AI-generated, needs review by native speaker; delete this comment afterwards 자리 표시자 유형 - - + + Power rank AI-generated, needs review by native speaker; delete this comment afterwards 전투력 순위 - - - - + + + + Hero type AI-generated, needs review by native speaker; delete this comment afterwards 영웅 유형 - - + + Experience AI-generated, needs review by native speaker; delete this comment afterwards 경험치 - - + + MALE AI-generated, needs review by native speaker; delete this comment afterwards 남성 - - + + FEMALE AI-generated, needs review by native speaker; delete this comment afterwards 여성 - - + + Gender AI-generated, needs review by native speaker; delete this comment afterwards 성별 - - + + Name AI-generated, needs review by native speaker; delete this comment afterwards 이름 - - + + Biography AI-generated, needs review by native speaker; delete this comment afterwards 전기 - - + + Spells AI-generated, needs review by native speaker; delete this comment afterwards 주문 - - + + Patrol radius AI-generated, needs review by native speaker; delete this comment afterwards 순찰 반경 - - + + Town name AI-generated, needs review by native speaker; delete this comment afterwards 도시 이름 - - + + Same as player AI-generated, needs review by native speaker; delete this comment afterwards 플레이어와 동일 - - - - - - - - - + + + + + + + + + Message AI-generated, needs review by native speaker; delete this comment afterwards 메시지 - - + + Spell AI-generated, needs review by native speaker; delete this comment afterwards 주문 - - + + Productivity AI-generated, needs review by native speaker; delete this comment afterwards 생산성 - - - - + + + + Amount AI-generated, needs review by native speaker; delete this comment afterwards 수량 - + Character AI-generated, needs review by native speaker; delete this comment afterwards 문자 - + Select town AI-generated, needs review by native speaker; delete this comment afterwards 도시 선택 - - + + Never flees AI-generated, needs review by native speaker; delete this comment afterwards 절대 도망치지 않음 - - + + Not growing AI-generated, needs review by native speaker; delete this comment afterwards 성장 없음 - - + + Reward AI-generated, needs review by native speaker; delete this comment afterwards 보상 - - + + Remove after AI-generated, needs review by native speaker; delete this comment afterwards 이후 제거 - - + + Human trigger AI-generated, needs review by native speaker; delete this comment afterwards 플레이어 트리거 - - + + Cpu trigger AI-generated, needs review by native speaker; delete this comment afterwards CPU 트리거 - - + + First visit text AI-generated, needs review by native speaker; delete this comment afterwards 첫 방문 텍스트 - - + + Next visit text AI-generated, needs review by native speaker; delete this comment afterwards 다음 방문 텍스트 - - + + Completed text AI-generated, needs review by native speaker; delete this comment afterwards 완료 텍스트 - - - + + + Repeat quest AI-generated, needs review by native speaker; delete this comment afterwards 퀘스트 반복 - - + + Time limit AI-generated, needs review by native speaker; delete this comment afterwards 시간 제한 - + UNFLAGGABLE AI-generated, needs review by native speaker; delete this comment afterwards 깃발 불가 - + Can't place object AI-generated, needs review by native speaker; delete this comment afterwards 오브젝트를 배치할 수 없습니다 - + There can only be one grail object on the map. AI-generated, needs review by native speaker; delete this comment afterwards 맵에는 성배 오브젝트가 하나만 존재할 수 있습니다. - + (submod of %1) AI-generated, needs review by native speaker; delete this comment afterwards (%1의 서브모드) - + The mod '%1'%2, is required by an object on the map. Add it to the map's required mods in Map->General settings. should be consistent with Map->General menu entry translation AI-generated, needs review by native speaker; delete this comment afterwards - 모드 '%1'%2는 맵에 있는 오브젝트에 필요합니다. -맵 -> 일반 설정에서 해당 모드를 필수 모드로 추가하세요. + 모드 '%1'%2는 맵에 있는 오브젝트에 필요합니다. +맵 -> 일반 설정에서 해당 모드를 필수 모드로 추가하세요. @@ -2344,14 +2395,14 @@ Add it to the map's required mods in Map->General settings. - + Hero Level: %1 AI-generated, needs review by native speaker; delete this comment afterwards 영웅 레벨: %1 - + Hero Experience: %1 AI-generated, needs review by native speaker; delete this comment afterwards 영웅 경험치: %1 @@ -2364,49 +2415,49 @@ Add it to the map's required mods in Map->General settings. - + Mana Percentage: %1 AI-generated, needs review by native speaker; delete this comment afterwards 마나 비율: %1 - + Primary Skills: %1/%2/%3/%4 AI-generated, needs review by native speaker; delete this comment afterwards 기본 기술: %1/%2/%3/%4 - + Resources: %1 AI-generated, needs review by native speaker; delete this comment afterwards 자원: %1 - + Artifacts: %1 AI-generated, needs review by native speaker; delete this comment afterwards 아티팩트: %1 - + Spells: %1 AI-generated, needs review by native speaker; delete this comment afterwards 주문: %1 - + Secondary Skills: %1 AI-generated, needs review by native speaker; delete this comment afterwards 보조 기술: %1 - + Creatures: %1 AI-generated, needs review by native speaker; delete this comment afterwards 생물: %1 @@ -2430,43 +2481,43 @@ Add it to the map's required mods in Map->General settings. 플레이어: %1 - + Rewards: AI-generated, needs review by native speaker; delete this comment afterwards 보상: - + Reward Message: %1 AI-generated, needs review by native speaker; delete this comment afterwards 보상 메시지: %1 - + Mana Diff: %1 AI-generated, needs review by native speaker; delete this comment afterwards 마나 차이: %1 - + Move Points: %1 AI-generated, needs review by native speaker; delete this comment afterwards 이동 포인트: %1 - + Move Percentage: %1 AI-generated, needs review by native speaker; delete this comment afterwards 이동 비율: %1 - + Spell Cast: %1 (%2) AI-generated, needs review by native speaker; delete this comment afterwards 시전 주문: %1 (%2) - + Bonuses: %1 AI-generated, needs review by native speaker; delete this comment afterwards 보너스: %1 @@ -2968,20 +3019,20 @@ Add it to the map's required mods in Map->General settings. 플레이어 - + None AI-generated, needs review by native speaker; delete this comment afterwards 없음 - + Day %1 AI-generated, needs review by native speaker; delete this comment afterwards Day %1 - - + + Reward %1 AI-generated, needs review by native speaker; delete this comment afterwards 보상 %1 @@ -3247,8 +3298,8 @@ Add it to the map's required mods in Map->General settings. - - + + Player position AI-generated, needs review by native speaker; delete this comment afterwards 플레이어 위치 @@ -3308,57 +3359,57 @@ Add it to the map's required mods in Map->General settings. 플레이어 - + Open map AI-generated, needs review by native speaker; delete this comment afterwards 맵 열기 - + All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) AI-generated, needs review by native speaker; delete this comment afterwards 모든 지원되는 맵 (*.vmap *.h3m);;VCMI 맵(*.vmap);;HoMM3 맵(*.h3m) - - + + Error AI-generated, needs review by native speaker; delete this comment afterwards 오류 - - + + Could not open the file. AI-generated, needs review by native speaker; delete this comment afterwards 파일을 열 수 없습니다. - + Save map AI-generated, needs review by native speaker; delete this comment afterwards 맵 저장 - + VCMI maps (*.vmap); AI-generated, needs review by native speaker; delete this comment afterwards VCMI 맵 (*.vmap); - + HoMM3 maps (*.h3m); AI-generated, needs review by native speaker; delete this comment afterwards HoMM3 맵 (*.h3m); - + Source scenario AI-generated, needs review by native speaker; delete this comment afterwards 출처 시나리오 - + Hero AI-generated, needs review by native speaker; delete this comment afterwards 영웅 @@ -3398,7 +3449,7 @@ Add it to the map's required mods in Map->General settings. - + Building AI-generated, needs review by native speaker; delete this comment afterwards 건물 @@ -3429,7 +3480,7 @@ Add it to the map's required mods in Map->General settings. - + Secondary skill AI-generated, needs review by native speaker; delete this comment afterwards 보조 기술 @@ -3437,7 +3488,7 @@ Add it to the map's required mods in Map->General settings. - + Resource AI-generated, needs review by native speaker; delete this comment afterwards 자원 @@ -3539,54 +3590,679 @@ Add it to the map's required mods in Map->General settings. 희귀 (%1, %2, %3, %4) - + strongest hero AI-generated, needs review by native speaker; delete this comment afterwards 최강 영웅 - + generated hero AI-generated, needs review by native speaker; delete this comment afterwards 생성된 영웅 - + random hero AI-generated, needs review by native speaker; delete this comment afterwards 무작위 영웅 - + %1 spell for %2 AI-generated, needs review by native speaker; delete this comment afterwards %2를 위한 %1 주문 - + %1 %2 for %3 AI-generated, needs review by native speaker; delete this comment afterwards %3를 위한 %1 %2 - + %1 artifact for %2 AI-generated, needs review by native speaker; delete this comment afterwards %2를 위한 %1 아티팩트 - + %1 spell scroll for %2 AI-generated, needs review by native speaker; delete this comment afterwards %2를 위한 %1 주문서 - + Primary skill (Attack: %1, Defense: %2, Spell: %3, Knowledge: %4) for %5 AI-generated, needs review by native speaker; delete this comment afterwards %5를 위한 기본 기술 (공격: %1, 방어: %2, 주문력: %3, 지식: %4) + + TemplateEditor + + + + VCMI Template Editor + + + + + File + 파일 + + + + Edit + 편집 + + + + View + 보기 + + + + Toolbar + 도구 모음 + + + + Selected Template: + + + + + + + Add + 추가 + + + + Remove + 제거 + + + + Rename + + + + + General + 일반 + + + + Name + 이름 + + + + Description + + + + + Min Size + + + + + + + X + + + + + + + Y + + + + + + + Z + + + + + Max Size + + + + + + Players + 플레이어 + + + + Human + + + + + Allowed water content + + + + + + + None + 없음 + + + + + Normal + 보통 + + + + Islands + + + + + Zone + + + + + Visualisation + + + + + Position + + + + + + Size + + + + + ID + ID + + + + + Type + + + + + Owner + 소유자 + + + + Zone link + + + + + + + Mines + + + + + + Custom objects + + + + + + Towns + + + + + + Terrain + + + + + + + + Treasure + + + + + Town info + + + + + Town count + + + + + + + + Player + 플레이어 + + + + + + + Neutral + 중립 + + + + Castle count + + + + + Town density + + + + + Castle density + + + + + Match terrain to town + + + + + Terrain types + + + + + Banned terrain types + + + + + Towns are same type + + + + + Allowed towns + + + + + Banned towns + + + + + Town hints + + + + + Monsters + + + + + Allowed monsters + + + + + Banned monsters + + + + + Strength + + + + + Objects + + + + + Connections + + + + + Open + 열기 + + + + Save + 저장 + + + + New + 새로 만들기 + + + + Save as... + 다른 이름으로 저장... + + + + Ctrl+Shift+S + Ctrl+Shift+S + + + + Add zone + + + + + Remove zone + + + + + + Del + Del + + + + Auto position + + + + + Ctrl+P + Ctrl+P + + + + Zoom in + 확대 + + + + Ctrl++ + Ctrl++ + + + + Zoom out + 축소 + + + + Ctrl+- + Ctrl+- + + + + Zoom auto + + + + + Ctrl+Shift+: + + + + + Zoom reset + 확대 초기화 + + + + Ctrl+Shift+= + Ctrl+Shift+= + + + + Min + + + + + Max + + + + + Action + + + + + + Delete + + + + + ID: %1 + + + + + Max treasure: %1 + + + + + Player start + + + + + CPU start + + + + + Junction + + + + + Water + + + + + Sealed + + + + + + Random + 무작위 + + + + Weak + 약함 + + + + Strong + 강함 + + + + Zone A + + + + + Zone B + + + + + Guard + + + + + Road + + + + + Guarded + + + + + Fictive + + + + + Repulsive + + + + + Wide + + + + + Force portal + + + + + Yes + + + + + No + + + + + Zone A: %1 +Zone B: %2 +Guard: %3 + + + + + Confirmation + 확인 + + + + Unsaved changes will be lost, are you sure? + 저장되지 않은 변경 사항이 손실됩니다. 계속하시겠습니까? + + + + Open template + + + + + VCMI templates(*.json) + + + + + Save template + + + + + VCMI templates (*.json) + + + + + + Enter Name + + + + + + Name: + + + + + Already existing! + + + + + At template with this name is already existing. + + + + + To few templates! + + + + + At least one template should remain after removing. + + + + + + Error + 오류 + + + + + Not implemented yet! + + + + + TerrainSelector + + + + Select Terrains + + + + + Terrain Selector + + + TimedEvent @@ -3989,6 +4665,40 @@ Add it to the map's required mods in Map->General settings. 이 언어에 대한 모든 기존 텍스트 레코드가 제거됩니다. 계속하시겠습니까? + + TreasureSelector + + + + Select Treasures + + + + + Treasure Selector + + + + + Min + + + + + Max + + + + + Density + + + + + Action + + + Validator @@ -4453,25 +5163,25 @@ Add it to the map's required mods in Map->General settings. 취소 - + No template AI-generated, needs review by native speaker; delete this comment afterwards 템플릿 없음 - + No template for parameters specified. Random map cannot be generated. AI-generated, needs review by native speaker; delete this comment afterwards 지정된 매개변수에 맞는 템플릿이 없습니다. 무작위 맵을 생성할 수 없습니다. - + RMG failure AI-generated, needs review by native speaker; delete this comment afterwards RMG 실패 - + [default] AI-generated, needs review by native speaker; delete this comment afterwards [기본값] @@ -4480,31 +5190,31 @@ Add it to the map's required mods in Map->General settings. main - + Filepath of the map to open. AI-generated, needs review by native speaker; delete this comment afterwards 열 맵의 파일 경로. - + Extract original H3 archives into a separate folder. AI-generated, needs review by native speaker; delete this comment afterwards 원본 H3 아카이브를 별도의 폴더에 추출합니다. - + From an extracted archive, it Splits TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 and Un44 into individual PNG's. AI-generated, needs review by native speaker; delete this comment afterwards 추출된 아카이브에서 TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 및 Un44를 개별 PNG로 분할합니다. - + From an extracted archive, Converts single Images (found in Images folder) from .pcx to png. AI-generated, needs review by native speaker; delete this comment afterwards 추출된 아카이브에서 Images 폴더에 있는 단일 이미지(.pcx)를 PNG로 변환합니다. - + Delete original files, for the ones split / converted. AI-generated, needs review by native speaker; delete this comment afterwards 분할/변환된 파일에 대해 원본 파일을 삭제합니다. diff --git a/mapeditor/translation/norwegian.ts b/mapeditor/translation/norwegian.ts index 039893616..e87e69d6e 100644 --- a/mapeditor/translation/norwegian.ts +++ b/mapeditor/translation/norwegian.ts @@ -54,7 +54,7 @@ CampaignEditor - + VCMI Campaign Editor AI-generated, needs review by native speaker; delete this comment afterwards VCMI kampanjeredigerer @@ -135,43 +135,43 @@ Vis full bakgrunn - + Scenario editor AI-generated, needs review by native speaker; delete this comment afterwards Scenarioredigerer - + Confirmation AI-generated, needs review by native speaker; delete this comment afterwards Bekreftelse - + Unsaved changes will be lost, are you sure? AI-generated, needs review by native speaker; delete this comment afterwards Ulagrede endringer vil gå tapt, er du sikker? - + Open map AI-generated, needs review by native speaker; delete this comment afterwards Åpne kart - + All supported campaigns (*.vcmp *.h3c);;VCMI campaigns(*.vcmp);;HoMM3 campaigns(*.h3c) AI-generated, needs review by native speaker; delete this comment afterwards Alle støttede kampanjer (*.vcmp *.h3c);;VCMI-kampanjer(*.vcmp);;HoMM3-kampanjer(*.h3c) - + Save campaign AI-generated, needs review by native speaker; delete this comment afterwards Lagre kampanje - + VCMI campaigns (*.vcmp) AI-generated, needs review by native speaker; delete this comment afterwards VCMI-kampanjer (*.vcmp) @@ -181,7 +181,7 @@ CampaignProperties - + Campaign Properties AI-generated, needs review by native speaker; delete this comment afterwards Kampanjeegenskaper @@ -320,47 +320,47 @@ Utrovideo - + Custom AI-generated, needs review by native speaker; delete this comment afterwards Egendefinert - + Infix AI-generated, needs review by native speaker; delete this comment afterwards Infix - + X - + Y - + Label Pos X AI-generated, needs review by native speaker; delete this comment afterwards Etikettposisjon X - + Label Pos Y AI-generated, needs review by native speaker; delete this comment afterwards Etikettposisjon Y - + Fewer Scenarios AI-generated, needs review by native speaker; delete this comment afterwards Færre scenarier - + New Region setup supports fewer scenarios than before. Some will removed. Continue? AI-generated, needs review by native speaker; delete this comment afterwards Ny regionoppsett støtter færre scenarier enn før. Noen vil bli fjernet. Fortsette? @@ -399,6 +399,20 @@ Ny hendelse + + FactionSelector + + + + Select Factions + + + + + Faction Selector + + + GeneralSettings @@ -497,6 +511,16 @@ AI-generated, needs review by native speaker; delete this comment afterwards Gjenstand + + + Save + Lagre + + + + Cancel + Avbryt + HeroSkillsWidget @@ -652,7 +676,7 @@ MainWindow - + VCMI Map Editor VCMI-kartredigeringsprogram @@ -664,864 +688,870 @@ - + Open Recent AI-generated, needs review by native speaker; delete this comment afterwards Åpne nylige - + Map AI-generated, needs review by native speaker; delete this comment afterwards Kart - + Edit AI-generated, needs review by native speaker; delete this comment afterwards Rediger - + View AI-generated, needs review by native speaker; delete this comment afterwards Vis - + Player AI-generated, needs review by native speaker; delete this comment afterwards Spiller - + Toolbar AI-generated, needs review by native speaker; delete this comment afterwards Verktøylinje - + Minimap AI-generated, needs review by native speaker; delete this comment afterwards Minikart - + Map Objects View AI-generated, needs review by native speaker; delete this comment afterwards Kartobjektvisning - + Browser AI-generated, needs review by native speaker; delete this comment afterwards Utforsker - + Inspector AI-generated, needs review by native speaker; delete this comment afterwards Inspektør - + Property AI-generated, needs review by native speaker; delete this comment afterwards Egenskap - + Value AI-generated, needs review by native speaker; delete this comment afterwards Verdi - + Tools AI-generated, needs review by native speaker; delete this comment afterwards Verktøy - + Painting AI-generated, needs review by native speaker; delete this comment afterwards Maling - + Terrains AI-generated, needs review by native speaker; delete this comment afterwards Terreng - + Roads AI-generated, needs review by native speaker; delete this comment afterwards Veier - + Rivers AI-generated, needs review by native speaker; delete this comment afterwards Elver - + Preview AI-generated, needs review by native speaker; delete this comment afterwards Forhåndsvisning - + Open AI-generated, needs review by native speaker; delete this comment afterwards Åpne - + Ctrl+O AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+O - + More... AI-generated, needs review by native speaker; delete this comment afterwards Mer... - + Save AI-generated, needs review by native speaker; delete this comment afterwards Lagre - + Ctrl+S AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+S - + New AI-generated, needs review by native speaker; delete this comment afterwards Ny - + Ctrl+N AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+N - + Save as... AI-generated, needs review by native speaker; delete this comment afterwards Lagre som... - + Ctrl+Shift+S AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+S - - + + Campaign editor AI-generated, needs review by native speaker; delete this comment afterwards Kampanjeredigerer - - - - + + + Template editor + + + + + + + View underground AI-generated, needs review by native speaker; delete this comment afterwards Vis underjordisk - + Ctrl+U AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+U - + Pass AI-generated, needs review by native speaker; delete this comment afterwards Passasje - + Ctrl+Shift+P AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+P - + Cut AI-generated, needs review by native speaker; delete this comment afterwards Klipp ut - + Ctrl+X AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+X - + Copy AI-generated, needs review by native speaker; delete this comment afterwards Kopier - + Ctrl+C AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+C - + Paste AI-generated, needs review by native speaker; delete this comment afterwards Lim inn - + Ctrl+V AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+V - + Fill AI-generated, needs review by native speaker; delete this comment afterwards Fyll - + Fills the selection with obstacles AI-generated, needs review by native speaker; delete this comment afterwards Fyller utvalget med hindringer - + Grid AI-generated, needs review by native speaker; delete this comment afterwards Rutenett - + Ctrl+G AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+G - + General AI-generated, needs review by native speaker; delete this comment afterwards Generelt - + Map title and description AI-generated, needs review by native speaker; delete this comment afterwards Karttittel og beskrivelse - + Ctrl+Enter AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Enter - + Players settings AI-generated, needs review by native speaker; delete this comment afterwards Spillerinnstillinger - + Ctrl+P AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+P - - + + Undo AI-generated, needs review by native speaker; delete this comment afterwards Angre - + Ctrl+Z AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Z - + Redo AI-generated, needs review by native speaker; delete this comment afterwards Gjør om - + Ctrl+Y AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Y - + Erase AI-generated, needs review by native speaker; delete this comment afterwards Slett - + Del AI-generated, needs review by native speaker; delete this comment afterwards Del - + Neutral AI-generated, needs review by native speaker; delete this comment afterwards Nøytral - + Ctrl+0 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+0 - + Validate AI-generated, needs review by native speaker; delete this comment afterwards Valider - + Ctrl+Shift+V AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+V - - - - + + + + Update appearance AI-generated, needs review by native speaker; delete this comment afterwards Oppdater utseende - + Recreate obstacles AI-generated, needs review by native speaker; delete this comment afterwards Gjenskap hindringer - + Player 1 AI-generated, needs review by native speaker; delete this comment afterwards Spiller 1 - + Ctrl+1 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+1 - + Player 2 AI-generated, needs review by native speaker; delete this comment afterwards Spiller 2 - + Ctrl+2 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+2 - + Player 3 AI-generated, needs review by native speaker; delete this comment afterwards Spiller 3 - + Ctrl+3 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+3 - + Player 4 AI-generated, needs review by native speaker; delete this comment afterwards Spiller 4 - + Ctrl+4 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+4 - + Player 5 AI-generated, needs review by native speaker; delete this comment afterwards Spiller 5 - + Ctrl+5 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+5 - + Player 6 AI-generated, needs review by native speaker; delete this comment afterwards Spiller 6 - + Ctrl+6 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+6 - + Player 7 AI-generated, needs review by native speaker; delete this comment afterwards Spiller 7 - + Ctrl+7 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+7 - + Player 8 AI-generated, needs review by native speaker; delete this comment afterwards Spiller 8 - + Ctrl+8 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+8 - + Export as... AI-generated, needs review by native speaker; delete this comment afterwards Eksporter som... - + Ctrl+E AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+E - + Translations AI-generated, needs review by native speaker; delete this comment afterwards Oversettelser - + Ctrl+T AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+T - - + + h3m converter AI-generated, needs review by native speaker; delete this comment afterwards h3m-konverter - + Ctrl+Shift+M AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+M - - + + h3c converter AI-generated, needs review by native speaker; delete this comment afterwards h3c-konverter - + Ctrl+Shift+C AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+C - + Lock AI-generated, needs review by native speaker; delete this comment afterwards Lås - + Lock objects on map to avoid unnecessary changes AI-generated, needs review by native speaker; delete this comment afterwards Lås objekter på kartet for å unngå unødvendige endringer - + Ctrl+L AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+L - + Unlock AI-generated, needs review by native speaker; delete this comment afterwards Lås opp - + Unlock all objects on the map AI-generated, needs review by native speaker; delete this comment afterwards Lås opp alle objekter på kartet - + Ctrl+Shift+L AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+L - + Zoom in AI-generated, needs review by native speaker; delete this comment afterwards Zoom inn - + Ctrl++ AI-generated, needs review by native speaker; delete this comment afterwards Ctrl++ - + Zoom out AI-generated, needs review by native speaker; delete this comment afterwards Zoom ut - + Ctrl+- AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+- - + Zoom reset AI-generated, needs review by native speaker; delete this comment afterwards Nullstill zoom - + Ctrl+Shift+= AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+= - + Confirmation AI-generated, needs review by native speaker; delete this comment afterwards Bekreftelse - + Unsaved changes will be lost, are you sure? AI-generated, needs review by native speaker; delete this comment afterwards Ulagrede endringer vil gå tapt, er du sikker? - + Mods are required AI-generated, needs review by native speaker; delete this comment afterwards Modifikasjoner kreves - + Failed to open map AI-generated, needs review by native speaker; delete this comment afterwards Kunne ikke åpne kart - + Open map AI-generated, needs review by native speaker; delete this comment afterwards Åpne kart - + All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) AI-generated, needs review by native speaker; delete this comment afterwards Alle støttede kart (*.vmap *.h3m);;VCMI-kart(*.vmap);;HoMM3-kart(*.h3m) - + Recently Opened Files AI-generated, needs review by native speaker; delete this comment afterwards Nylig åpnete filer - + Map validation AI-generated, needs review by native speaker; delete this comment afterwards Kartvalidering - + Map has critical problems and most probably will not be playable. Open Validator from the Map menu to see issues found AI-generated, needs review by native speaker; delete this comment afterwards Kartet har kritiske problemer og vil sannsynligvis ikke være spillbart. Åpne Validator fra Kart-menyen for å se funnene - + Map has some errors. Open Validator from the Map menu to see issues found AI-generated, needs review by native speaker; delete this comment afterwards Kartet har noen feil. Åpne Validator fra Kart-menyen for å se funnene - + Failed to save map AI-generated, needs review by native speaker; delete this comment afterwards Kunne ikke lagre kart - + Save map AI-generated, needs review by native speaker; delete this comment afterwards Lagre kart - + VCMI maps (*.vmap) AI-generated, needs review by native speaker; delete this comment afterwards VCMI-kart (*.vmap) - + Type AI-generated, needs review by native speaker; delete this comment afterwards Type - + Towns AI-generated, needs review by native speaker; delete this comment afterwards Byer - + Objects AI-generated, needs review by native speaker; delete this comment afterwards Objekter - + Heroes AI-generated, needs review by native speaker; delete this comment afterwards Helter - + Artifacts AI-generated, needs review by native speaker; delete this comment afterwards Gjenstander - + Resources AI-generated, needs review by native speaker; delete this comment afterwards Ressurser - + Banks AI-generated, needs review by native speaker; delete this comment afterwards Banker - + Dwellings AI-generated, needs review by native speaker; delete this comment afterwards Boliger - + Grounds AI-generated, needs review by native speaker; delete this comment afterwards Bakker - + Teleports AI-generated, needs review by native speaker; delete this comment afterwards Teleportere - + Mines AI-generated, needs review by native speaker; delete this comment afterwards Gruver - + Triggers AI-generated, needs review by native speaker; delete this comment afterwards Utløsere - + Monsters AI-generated, needs review by native speaker; delete this comment afterwards Monstre - + Quests AI-generated, needs review by native speaker; delete this comment afterwards Oppdrag - + Wog Objects AI-generated, needs review by native speaker; delete this comment afterwards Wog-objekter - + Obstacles AI-generated, needs review by native speaker; delete this comment afterwards Hindringer - + Other AI-generated, needs review by native speaker; delete this comment afterwards Annet - + Mods loading problem AI-generated, needs review by native speaker; delete this comment afterwards Problem med lasting av modifikasjoner - + Critical error during Mods loading. Disable invalid mods and restart. AI-generated, needs review by native speaker; delete this comment afterwards Kritisk feil under lasting av modifikasjoner. Deaktiver ugyldige mods og start på nytt. - - + + View surface AI-generated, needs review by native speaker; delete this comment afterwards Vis overflate - + No objects selected AI-generated, needs review by native speaker; delete this comment afterwards Ingen objekter valgt - + This operation is irreversible. Do you want to continue? AI-generated, needs review by native speaker; delete this comment afterwards Denne handlingen kan ikke angres. Vil du fortsette? - + Errors occurred. %1 objects were not updated AI-generated, needs review by native speaker; delete this comment afterwards Det oppsto feil. %1 objekter ble ikke oppdatert - + Save to image AI-generated, needs review by native speaker; delete this comment afterwards Lagre som bilde - + Select maps to convert AI-generated, needs review by native speaker; delete this comment afterwards Velg kart å konvertere - + HoMM3 maps(*.h3m) AI-generated, needs review by native speaker; delete this comment afterwards HoMM3-kart (*.h3m) - + Choose directory to save converted maps AI-generated, needs review by native speaker; delete this comment afterwards Velg mappe for å lagre konverterte kart - + Operation completed AI-generated, needs review by native speaker; delete this comment afterwards Operasjon fullført - + Successfully converted %1 maps AI-generated, needs review by native speaker; delete this comment afterwards Vellykket konvertering av %1 kart - + Failed to convert the map. Abort operation AI-generated, needs review by native speaker; delete this comment afterwards Kunne ikke konvertere kartet. Avbryter operasjonen - + Select campaign to convert AI-generated, needs review by native speaker; delete this comment afterwards Velg kampanje å konvertere - + HoMM3 campaigns (*.h3c) AI-generated, needs review by native speaker; delete this comment afterwards HoMM3-kampanjer (*.h3c) - + Select destination file AI-generated, needs review by native speaker; delete this comment afterwards Velg måldokument - + VCMI campaigns (*.vcmp) AI-generated, needs review by native speaker; delete this comment afterwards VCMI-kampanjer (*.vcmp) @@ -1530,30 +1560,30 @@ MapController - + Hero %1 cannot be created as NEUTRAL. AI-generated, needs review by native speaker; delete this comment afterwards Helt %1 kan ikke opprettes som NØYTRAL. - + Missing Required Mod AI-generated, needs review by native speaker; delete this comment afterwards Manglende påkrevd modifikasjon - + Do you want to do that now ? -AI-generated, needs review by native speaker; delete this comment afterwards + AI-generated, needs review by native speaker; delete this comment afterwards Vil du gjøre det nå? - + This object's mod is mandatory for map to remain valid. AI-generated, needs review by native speaker; delete this comment afterwards Denne gjenstandens modifikasjon er obligatorisk for at kartet skal være gyldig. @@ -1658,6 +1688,30 @@ Vil du gjøre det nå? Melding + + MineSelector + + + + Select Mines + + + + + Mine Selector + + + + + Resource + Ressurs + + + + Mines + Gruver + + ModSettings @@ -1811,28 +1865,25 @@ Vil du gjøre det nå? - PlayerSettings + PlayerSettingsDialog - + Player settings - AI-generated, needs review by native speaker; delete this comment afterwards Spillerinnstillinger - + Players - AI-generated, needs review by native speaker; delete this comment afterwards Spillere - + 1 - + Ok - AI-generated, needs review by native speaker; delete this comment afterwards Ok @@ -1890,81 +1941,81 @@ Vil du gjøre det nå? Sekundære ferdigheter: - + Compliant AI-generated, needs review by native speaker; delete this comment afterwards Medgjørlig - + Friendly AI-generated, needs review by native speaker; delete this comment afterwards Vennlig - + Aggressive AI-generated, needs review by native speaker; delete this comment afterwards Aggressiv - + Hostile AI-generated, needs review by native speaker; delete this comment afterwards Fiendtlig - + Savage AI-generated, needs review by native speaker; delete this comment afterwards Voldsom - - + + No patrol AI-generated, needs review by native speaker; delete this comment afterwards Ingen patrulje - + POWER RANK AI-generated, needs review by native speaker; delete this comment afterwards MAKTNIVÅ - + HERO TYPE AI-generated, needs review by native speaker; delete this comment afterwards HELTETYPE - + Hero class AI-generated, needs review by native speaker; delete this comment afterwards Heltklasse - + Portrait AI-generated, needs review by native speaker; delete this comment afterwards Portrett - + Skills AI-generated, needs review by native speaker; delete this comment afterwards Ferdigheter - + Artifacts AI-generated, needs review by native speaker; delete this comment afterwards Gjenstander - - + + %n tile(s) AI-generated, needs review by native speaker; delete this comment afterwards @@ -1973,353 +2024,353 @@ Vil du gjøre det nå? - + Buildings AI-generated, needs review by native speaker; delete this comment afterwards Bygninger - + Events AI-generated, needs review by native speaker; delete this comment afterwards Hendelser - + Resource AI-generated, needs review by native speaker; delete this comment afterwards Ressurs - + Artifact reward AI-generated, needs review by native speaker; delete this comment afterwards Gjenstandsbelønning - + Quest AI-generated, needs review by native speaker; delete this comment afterwards Oppdrag - + Identifier AI-generated, needs review by native speaker; delete this comment afterwards Identifikator - + ID AI-generated, needs review by native speaker; delete this comment afterwards ID - + SubID AI-generated, needs review by native speaker; delete this comment afterwards SubID - + InstanceName AI-generated, needs review by native speaker; delete this comment afterwards InstansNavn - + IsStatic AI-generated, needs review by native speaker; delete this comment afterwards ErStatisk - - + + neutral AI-generated, needs review by native speaker; delete this comment afterwards nøytral - - + + Army AI-generated, needs review by native speaker; delete this comment afterwards Hær - - - + + - - - - - + + + + + + Owner AI-generated, needs review by native speaker; delete this comment afterwards Eier - - + + Same as town AI-generated, needs review by native speaker; delete this comment afterwards Samme som by - - + + Removable units AI-generated, needs review by native speaker; delete this comment afterwards Fjernbare enheter - - + + Placeholder type AI-generated, needs review by native speaker; delete this comment afterwards Plassholdertype - - + + Power rank AI-generated, needs review by native speaker; delete this comment afterwards Maktnivå - - - - + + + + Hero type AI-generated, needs review by native speaker; delete this comment afterwards Helte-type - - + + Experience AI-generated, needs review by native speaker; delete this comment afterwards Erfaring - - + + MALE AI-generated, needs review by native speaker; delete this comment afterwards MANN - - + + FEMALE AI-generated, needs review by native speaker; delete this comment afterwards KVINNE - - + + Gender AI-generated, needs review by native speaker; delete this comment afterwards Kjønn - - + + Name AI-generated, needs review by native speaker; delete this comment afterwards Navn - - + + Biography AI-generated, needs review by native speaker; delete this comment afterwards Biografi - - + + Spells AI-generated, needs review by native speaker; delete this comment afterwards Trylleformularer - - + + Patrol radius AI-generated, needs review by native speaker; delete this comment afterwards Patruljeradius - - + + Town name AI-generated, needs review by native speaker; delete this comment afterwards Bynavn - - + + Same as player AI-generated, needs review by native speaker; delete this comment afterwards Samme som spiller - - - - - - - - - + + + + + + + + + Message AI-generated, needs review by native speaker; delete this comment afterwards Melding - - + + Spell AI-generated, needs review by native speaker; delete this comment afterwards Trylleformular - - + + Productivity AI-generated, needs review by native speaker; delete this comment afterwards Produktivitet - - - - + + + + Amount AI-generated, needs review by native speaker; delete this comment afterwards Mengde - + Character AI-generated, needs review by native speaker; delete this comment afterwards Karakter - + Select town AI-generated, needs review by native speaker; delete this comment afterwards Velg by - - + + Never flees AI-generated, needs review by native speaker; delete this comment afterwards Flykter aldri - - + + Not growing AI-generated, needs review by native speaker; delete this comment afterwards Vokser ikke - - + + Reward AI-generated, needs review by native speaker; delete this comment afterwards Belønning - - + + Remove after AI-generated, needs review by native speaker; delete this comment afterwards Fjern etter - - + + Human trigger AI-generated, needs review by native speaker; delete this comment afterwards Menneskelig utløsning - - + + Cpu trigger AI-generated, needs review by native speaker; delete this comment afterwards CPU-utløsning - - + + First visit text AI-generated, needs review by native speaker; delete this comment afterwards Tekst ved første besøk - - + + Next visit text AI-generated, needs review by native speaker; delete this comment afterwards Tekst ved neste besøk - - + + Completed text AI-generated, needs review by native speaker; delete this comment afterwards Fullført tekst - - - + + + Repeat quest AI-generated, needs review by native speaker; delete this comment afterwards Gjenta oppdrag - - + + Time limit AI-generated, needs review by native speaker; delete this comment afterwards Tidsbegrensning - + UNFLAGGABLE AI-generated, needs review by native speaker; delete this comment afterwards KAN IKKE FLAGGES - + Can't place object AI-generated, needs review by native speaker; delete this comment afterwards Kan ikke plassere objekt - + There can only be one grail object on the map. AI-generated, needs review by native speaker; delete this comment afterwards Det kan kun være én gral på kartet. - + (submod of %1) AI-generated, needs review by native speaker; delete this comment afterwards (under-modifikasjon av %1) - + The mod '%1'%2, is required by an object on the map. Add it to the map's required mods in Map->General settings. should be consistent with Map->General menu entry translation @@ -2367,14 +2418,14 @@ Legg den til i kartets påkrevde modifikasjoner under Kart→Generelle innstilli - + Hero Level: %1 AI-generated, needs review by native speaker; delete this comment afterwards Heltenivå: %1 - + Hero Experience: %1 AI-generated, needs review by native speaker; delete this comment afterwards Helteerfaring: %1 @@ -2387,49 +2438,49 @@ Legg den til i kartets påkrevde modifikasjoner under Kart→Generelle innstilli - + Mana Percentage: %1 AI-generated, needs review by native speaker; delete this comment afterwards Mana-prosent: %1 - + Primary Skills: %1/%2/%3/%4 AI-generated, needs review by native speaker; delete this comment afterwards Primære ferdigheter: %1/%2/%3/%4 - + Resources: %1 AI-generated, needs review by native speaker; delete this comment afterwards Ressurser: %1 - + Artifacts: %1 AI-generated, needs review by native speaker; delete this comment afterwards Gjenstander: %1 - + Spells: %1 AI-generated, needs review by native speaker; delete this comment afterwards Trylleformularer: %1 - + Secondary Skills: %1 AI-generated, needs review by native speaker; delete this comment afterwards Sekundære ferdigheter: %1 - + Creatures: %1 AI-generated, needs review by native speaker; delete this comment afterwards Enheter: %1 @@ -2453,43 +2504,43 @@ Legg den til i kartets påkrevde modifikasjoner under Kart→Generelle innstilli Spillere: %1 - + Rewards: AI-generated, needs review by native speaker; delete this comment afterwards Belønninger: - + Reward Message: %1 AI-generated, needs review by native speaker; delete this comment afterwards Belønningsmelding: %1 - + Mana Diff: %1 AI-generated, needs review by native speaker; delete this comment afterwards Mana-differanse: %1 - + Move Points: %1 AI-generated, needs review by native speaker; delete this comment afterwards Bevegelsespunkter: %1 - + Move Percentage: %1 AI-generated, needs review by native speaker; delete this comment afterwards Bevegelsesprosent: %1 - + Spell Cast: %1 (%2) AI-generated, needs review by native speaker; delete this comment afterwards Trylleformular brukt: %1 (%2) - + Bonuses: %1 AI-generated, needs review by native speaker; delete this comment afterwards Bonuser: %1 @@ -2991,20 +3042,20 @@ Legg den til i kartets påkrevde modifikasjoner under Kart→Generelle innstilli Spillere - + None AI-generated, needs review by native speaker; delete this comment afterwards Ingen - + Day %1 AI-generated, needs review by native speaker; delete this comment afterwards Dag %1 - - + + Reward %1 AI-generated, needs review by native speaker; delete this comment afterwards Belønning %1 @@ -3270,8 +3321,8 @@ Legg den til i kartets påkrevde modifikasjoner under Kart→Generelle innstilli - - + + Player position AI-generated, needs review by native speaker; delete this comment afterwards Spillerposisjon @@ -3331,57 +3382,57 @@ Legg den til i kartets påkrevde modifikasjoner under Kart→Generelle innstilli Spiller - + Open map AI-generated, needs review by native speaker; delete this comment afterwards Åpne kart - + All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) AI-generated, needs review by native speaker; delete this comment afterwards Alle støttede kart (*.vmap *.h3m);;VCMI-kart(*.vmap);;HoMM3-kart(*.h3m) - - + + Error AI-generated, needs review by native speaker; delete this comment afterwards Feil - - + + Could not open the file. AI-generated, needs review by native speaker; delete this comment afterwards Kunne ikke åpne filen. - + Save map AI-generated, needs review by native speaker; delete this comment afterwards Lagre kart - + VCMI maps (*.vmap); AI-generated, needs review by native speaker; delete this comment afterwards VCMI-kart (*.vmap); - + HoMM3 maps (*.h3m); AI-generated, needs review by native speaker; delete this comment afterwards HoMM3-kart (*.h3m); - + Source scenario AI-generated, needs review by native speaker; delete this comment afterwards Kilde-scenario - + Hero AI-generated, needs review by native speaker; delete this comment afterwards Helt @@ -3421,7 +3472,7 @@ Legg den til i kartets påkrevde modifikasjoner under Kart→Generelle innstilli - + Building AI-generated, needs review by native speaker; delete this comment afterwards Bygning @@ -3452,7 +3503,7 @@ Legg den til i kartets påkrevde modifikasjoner under Kart→Generelle innstilli - + Secondary skill AI-generated, needs review by native speaker; delete this comment afterwards Sekundær ferdighet @@ -3460,7 +3511,7 @@ Legg den til i kartets påkrevde modifikasjoner under Kart→Generelle innstilli - + Resource AI-generated, needs review by native speaker; delete this comment afterwards Ressurs @@ -3562,54 +3613,679 @@ Legg den til i kartets påkrevde modifikasjoner under Kart→Generelle innstilli sjeldne (%1, %2, %3, %4) - + strongest hero AI-generated, needs review by native speaker; delete this comment afterwards sterkeste helt - + generated hero AI-generated, needs review by native speaker; delete this comment afterwards generert helt - + random hero AI-generated, needs review by native speaker; delete this comment afterwards tilfeldig helt - + %1 spell for %2 AI-generated, needs review by native speaker; delete this comment afterwards %1 trylleformular for %2 - + %1 %2 for %3 AI-generated, needs review by native speaker; delete this comment afterwards %1 %2 for %3 - + %1 artifact for %2 AI-generated, needs review by native speaker; delete this comment afterwards %1 gjenstand for %2 - + %1 spell scroll for %2 AI-generated, needs review by native speaker; delete this comment afterwards %1 trylleformularrull for %2 - + Primary skill (Attack: %1, Defense: %2, Spell: %3, Knowledge: %4) for %5 AI-generated, needs review by native speaker; delete this comment afterwards Primær ferdighet (Angrep: %1, Forsvar: %2, Trylle: %3, Kunnskap: %4) for %5 + + TemplateEditor + + + + VCMI Template Editor + + + + + File + Fil + + + + Edit + Rediger + + + + View + Vis + + + + Toolbar + Verktøylinje + + + + Selected Template: + + + + + + + Add + Legg til + + + + Remove + Fjern + + + + Rename + + + + + General + Generelt + + + + Name + Navn + + + + Description + + + + + Min Size + + + + + + + X + + + + + + + Y + + + + + + + Z + + + + + Max Size + + + + + + Players + Spillere + + + + Human + + + + + Allowed water content + + + + + + + None + Ingen + + + + + Normal + Normal + + + + Islands + Øyer + + + + Zone + + + + + Visualisation + + + + + Position + + + + + + Size + + + + + ID + ID + + + + + Type + Type + + + + Owner + Eier + + + + Zone link + + + + + + + Mines + Gruver + + + + + Custom objects + + + + + + Towns + Byer + + + + + Terrain + + + + + + + + Treasure + + + + + Town info + + + + + Town count + + + + + + + + Player + Spiller + + + + + + + Neutral + Nøytral + + + + Castle count + + + + + Town density + + + + + Castle density + + + + + Match terrain to town + + + + + Terrain types + + + + + Banned terrain types + + + + + Towns are same type + + + + + Allowed towns + + + + + Banned towns + + + + + Town hints + + + + + Monsters + Monstre + + + + Allowed monsters + + + + + Banned monsters + + + + + Strength + + + + + Objects + Objekter + + + + Connections + + + + + Open + Åpne + + + + Save + Lagre + + + + New + Ny + + + + Save as... + Lagre som... + + + + Ctrl+Shift+S + Ctrl+Shift+S + + + + Add zone + + + + + Remove zone + + + + + + Del + Del + + + + Auto position + + + + + Ctrl+P + Ctrl+P + + + + Zoom in + Zoom inn + + + + Ctrl++ + Ctrl++ + + + + Zoom out + Zoom ut + + + + Ctrl+- + Ctrl+- + + + + Zoom auto + + + + + Ctrl+Shift+: + + + + + Zoom reset + Nullstill zoom + + + + Ctrl+Shift+= + Ctrl+Shift+= + + + + Min + + + + + Max + + + + + Action + + + + + + Delete + + + + + ID: %1 + + + + + Max treasure: %1 + + + + + Player start + + + + + CPU start + + + + + Junction + + + + + Water + + + + + Sealed + + + + + + Random + Tilfeldig + + + + Weak + Svak + + + + Strong + Sterk + + + + Zone A + + + + + Zone B + + + + + Guard + + + + + Road + + + + + Guarded + + + + + Fictive + + + + + Repulsive + + + + + Wide + + + + + Force portal + + + + + Yes + + + + + No + + + + + Zone A: %1 +Zone B: %2 +Guard: %3 + + + + + Confirmation + Bekreftelse + + + + Unsaved changes will be lost, are you sure? + Ulagrede endringer vil gå tapt, er du sikker? + + + + Open template + + + + + VCMI templates(*.json) + + + + + Save template + + + + + VCMI templates (*.json) + + + + + + Enter Name + + + + + + Name: + + + + + Already existing! + + + + + At template with this name is already existing. + + + + + To few templates! + + + + + At least one template should remain after removing. + + + + + + Error + Feil + + + + + Not implemented yet! + + + + + TerrainSelector + + + + Select Terrains + + + + + Terrain Selector + + + TimedEvent @@ -4012,6 +4688,40 @@ Legg den til i kartets påkrevde modifikasjoner under Kart→Generelle innstilli Alle eksisterende tekstoppføringer for dette språket vil bli fjernet. Fortsette? + + TreasureSelector + + + + Select Treasures + + + + + Treasure Selector + + + + + Min + + + + + Max + + + + + Density + + + + + Action + + + Validator @@ -4476,25 +5186,25 @@ Legg den til i kartets påkrevde modifikasjoner under Kart→Generelle innstilli Avbryt - + No template AI-generated, needs review by native speaker; delete this comment afterwards Ingen mal - + No template for parameters specified. Random map cannot be generated. AI-generated, needs review by native speaker; delete this comment afterwards Ingen mal for angitte parametere. Tilfeldig kart kan ikke genereres. - + RMG failure AI-generated, needs review by native speaker; delete this comment afterwards RMG-feil - + [default] AI-generated, needs review by native speaker; delete this comment afterwards [standard] @@ -4503,31 +5213,31 @@ Legg den til i kartets påkrevde modifikasjoner under Kart→Generelle innstilli main - + Filepath of the map to open. AI-generated, needs review by native speaker; delete this comment afterwards Filbane til kartet som skal åpnes. - + Extract original H3 archives into a separate folder. AI-generated, needs review by native speaker; delete this comment afterwards Pakk ut originale H3-arkiver til en egen mappe. - + From an extracted archive, it Splits TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 and Un44 into individual PNG's. AI-generated, needs review by native speaker; delete this comment afterwards Fra et utpakket arkiv deler den opp TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 og Un44 til individuelle PNG-filer. - + From an extracted archive, Converts single Images (found in Images folder) from .pcx to png. AI-generated, needs review by native speaker; delete this comment afterwards Fra et utpakket arkiv konverterer den enkeltbilder (funnet i Images-mappen) fra .pcx til .png. - + Delete original files, for the ones split / converted. AI-generated, needs review by native speaker; delete this comment afterwards Slett originalfiler for de som ble delt eller konvertert. diff --git a/mapeditor/translation/polish.ts b/mapeditor/translation/polish.ts index 2d04f39f6..135b4cf85 100644 --- a/mapeditor/translation/polish.ts +++ b/mapeditor/translation/polish.ts @@ -47,7 +47,7 @@ CampaignEditor - + VCMI Campaign Editor Edytor Kampanii VCMI @@ -115,37 +115,37 @@ Pokaż pełne tło - + Scenario editor Edytor scenariusza - + Confirmation Potwierdzenie - + Unsaved changes will be lost, are you sure? Niezapisane zmiany zostaną utracone, jesteś pewny? - + Open map Otwórz mapę - + All supported campaigns (*.vcmp *.h3c);;VCMI campaigns(*.vcmp);;HoMM3 campaigns(*.h3c) Wszystkie obsługiwane kampanie (*.vcmp *.h3c);;Kampanie VCMI (*.vcmp);;Kampanie HoMM3 (*.h3c) - + Save campaign Zapisz kampanię - + VCMI campaigns (*.vcmp) Kampanie VCMI (*.vcmp) @@ -154,7 +154,7 @@ CampaignProperties - + Campaign Properties Właściwości kampanii @@ -270,42 +270,42 @@ Wideo końcowe - + Custom Niestandardowe - + Infix Wstawka - + X X - + Y Y - + Label Pos X Pozycja etykiety X - + Label Pos Y Pozycja etykiety Y - + Fewer Scenarios Mniej scenariuszy - + New Region setup supports fewer scenarios than before. Some will removed. Continue? Nowe ustawienie regionów obsługuje mniej scenariuszy niż wcześniej. Niektóre zostaną usunięte. Kontynuować? @@ -338,6 +338,20 @@ Nowe zdarzenie + + FactionSelector + + + + Select Factions + + + + + Faction Selector + + + GeneralSettings @@ -421,6 +435,16 @@ Artifact Artefakt + + + Save + Zapisz + + + + Cancel + Anuluj + HeroSkillsWidget @@ -553,7 +577,7 @@ MainWindow - + VCMI Map Editor Edytor map VCMI @@ -564,723 +588,729 @@ - + Open Recent Otwórz ostatnie - + Map Mapa - + Edit Edycja - + View Widok - + Player Gracz - + Toolbar Przybornik - + Minimap Minimapa - + Map Objects View Widok obiektów - + Browser Przeglądarka - + Inspector Inspektor - + Property Właściwość - + Value Wartość - + Tools Narzędzia - + Painting Malowanie - + Terrains Tereny - + Roads Drogi - + Rivers Rzeki - + Preview Podgląd - + Open Otwórz - + Ctrl+O Ctrl+O - + More... Więcej... - + Save Zapisz - + Ctrl+S Ctrl+S - + New Nowy - + Ctrl+N Ctrl+N - + Save as... Zapisz jako... - + Ctrl+Shift+S Ctrl+Shift+S - - + + Campaign editor Edytor kampanii - - - - + + + Template editor + + + + + + + View underground Pokaż podziemia - + Ctrl+U Ctrl+U - + Pass Przejścia - + Ctrl+Shift+P Ctrl+Shift+P - + Cut Wytnij - + Ctrl+X Ctrl+X - + Copy Kopiuj - + Ctrl+C Ctrl+C - + Paste Wklej - + Ctrl+V Ctrl+V - + Fill Wypełnij - + Fills the selection with obstacles Wypełnia zaznaczony obszar przeszkodami - + Grid Siatka - + Ctrl+G Ctrl+G - + General Ogólne - + Map title and description Nazwa i opis mapy - + Ctrl+Enter Ctrl+Enter - + Players settings Ustawienia graczy - + Ctrl+P Ctrl+P - - + + Undo Cofnij - + Ctrl+Z Ctrl+Z - + Redo Przywróć - + Ctrl+Y Ctrl+Y - + Erase Wymaż - + Del Del - + Neutral Neutralny - + Ctrl+0 Ctrl+0 - + Validate Sprawdź - + Ctrl+Shift+V Ctrl+Shift+V - - - - + + + + Update appearance Aktualizuj wygląd - + Recreate obstacles Powtórnie stwórz przeszkody - + Player 1 Gracz 1 - + Ctrl+1 Ctrl+1 - + Player 2 Gracz 2 - + Ctrl+2 Ctrl+2 - + Player 3 Gracz 3 - + Ctrl+3 Ctrl+3 - + Player 4 Gracz 4 - + Ctrl+4 Ctrl+4 - + Player 5 Gracz 5 - + Ctrl+5 Ctrl+5 - + Player 6 Gracz 6 - + Ctrl+6 Ctrl+6 - + Player 7 Gracz 7 - + Ctrl+7 Ctrl+7 - + Player 8 Gracz 8 - + Ctrl+8 Ctrl+8 - + Export as... Eksportuj jako... - + Ctrl+E Ctrl+E - + Translations Tłumaczenia - + Ctrl+T Ctrl+T - - + + h3m converter konwerter h3m - + Ctrl+Shift+M Ctrl+Shift+M - - + + h3c converter konwerter h3c - + Ctrl+Shift+C Ctrl+Shift+C - + Lock Zablokuj - + Lock objects on map to avoid unnecessary changes Zablokuj obiekty na mapie by uniknąć przypadkowych zmian - + Ctrl+L Ctrl+L - + Unlock Odblokuj - + Unlock all objects on the map Odblokuj wszystkie obiekty na mapie - + Ctrl+Shift+L Ctrl+Shift+L - + Zoom in Zbliż widok - + Ctrl++ Ctrl++ - + Zoom out Oddal widok - + Ctrl+- Ctrl+- - + Zoom reset Domyślne oddalenie - + Ctrl+Shift+= Ctrl+Shift+= - + Confirmation Potwierdzenie - + Unsaved changes will be lost, are you sure? Niezapisane zmiany zostaną utracone, jesteś pewny? - + Mods are required Wymagane są mody - + Failed to open map Nie udało się otworzyć mapy - + Open map Otwórz mapę - + All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) Wszystkie wspierane mapy (*.vmap *.h3m);;Mapy VCMI(*.vmap);;Mapy HoMM3(*.h3m) - + Recently Opened Files Ostatnio otwierane pliki - + Map validation Walidacja mapy - + Map has critical problems and most probably will not be playable. Open Validator from the Map menu to see issues found Mapa ma krytyczne problemy i prawdopodobnie nie będzie grywalna. Otwórz Walidator z menu Mapy, aby zobaczyć znalezione problemy. - + Map has some errors. Open Validator from the Map menu to see issues found Mapa zawiera błędy. Otwórz Walidator z menu Mapy, aby zobaczyć znalezione problemy. - + Failed to save map Nie udało się zapisać mapy - + Save map Zapisz mapę - + VCMI maps (*.vmap) Mapy VCMI (*.vmap) - + Type Typ - + Towns Miasta - + Objects Obiekty - + Heroes Bohaterowie - + Artifacts Artefakty - + Resources Zasoby - + Banks Banki - + Dwellings Siedliska - + Grounds Tereny - + Teleports Teleporty - + Mines Kopalnie - + Triggers Wyzwalacze - + Monsters Potwory - + Quests Zadania - + Wog Objects Obiekty WOG - + Obstacles Przeszkody - + Other Inne - + Mods loading problem Problem z ładowaniem modów - + Critical error during Mods loading. Disable invalid mods and restart. Krytyczny błąd podczas ładowania modów. Wyłącz nieprawidłowe mody i uruchom ponownie. - - + + View surface Pokaż powierzchnię - + No objects selected Brak wybranych obiektów - + This operation is irreversible. Do you want to continue? Ta operacja jest nieodwracalna. Czy chcesz kontynuować? - + Errors occurred. %1 objects were not updated Wystąpiły błędy. %1 obiektów nie zostało zaktualizowanych - + Save to image Zapisz jako obraz - + Select maps to convert Wybierz mapy do konwersji - + HoMM3 maps(*.h3m) Mapy HoMM3(*.h3m) - + Choose directory to save converted maps Wybierz folder do zapisu skonwertowanych map - + Operation completed Operacja zakończona - + Successfully converted %1 maps Pomyślnie skonwertowano %1 map - + Failed to convert the map. Abort operation Nieudana konwersja mapy. Przerywanie operacji - + Select campaign to convert Wybierz kampanię do konwersji - + HoMM3 campaigns (*.h3c) Kampanie HoMM3 (*.h3c) - + Select destination file Wybierz plik docelowy - + VCMI campaigns (*.vcmp) Kampanie VCMI (*.vcmp) @@ -1288,17 +1318,17 @@ MapController - + Hero %1 cannot be created as NEUTRAL. Bohater %1 nie może zostać utworzony jako NEUTRALNY - + Missing Required Mod Brakujący wymagany mod - + Do you want to do that now ? @@ -1308,7 +1338,7 @@ Do you want to do that now ? Czy chcesz to zrobić teraz? - + This object's mod is mandatory for map to remain valid. Mod tego obiektu jest wymagany dla zachowania poprawności mapy. @@ -1397,6 +1427,30 @@ Czy chcesz to zrobić teraz? Wiadomość + + MineSelector + + + + Select Mines + + + + + Mine Selector + + + + + Resource + Zasób + + + + Mines + Kopalnie + + ModSettings @@ -1527,26 +1581,26 @@ Czy chcesz to zrobić teraz? - PlayerSettings + PlayerSettingsDialog - + Player settings - Ustawienia gracza + Ustawienia gracza - + Players - Gracze + Gracze - + 1 - 1 + 1 - + Ok - Ok + Ok @@ -1596,69 +1650,69 @@ Czy chcesz to zrobić teraz? Umiejętności drugorzędne: - + Compliant Przyjazny - + Friendly Przychylny - + Aggressive Agresywny - + Hostile Wrogi - + Savage Nienawistny - - + + No patrol Brak patrolu - + POWER RANK RANKING SIŁY - + HERO TYPE TYP BOHATERA - + Hero class Klasa bohatera - + Portrait Portret - + Skills Umiejętności - + Artifacts Artefakty - - + + %n tile(s) %n pole @@ -1667,304 +1721,304 @@ Czy chcesz to zrobić teraz? - + Buildings Budynki - + Events Zdarzenia - + Resource Zasób - + Artifact reward Nagroda: Artefakt - + Quest Misja - + Identifier Identyfikator - + ID ID - + SubID SubID - + InstanceName Nazwa Instancji - + IsStatic Statyczny - - + + neutral neutralny - - + + Army Armia - - - + + - - - - - + + + + + + Owner Właściciel - - + + Same as town Taki sam jak miasto - - + + Removable units Jednostki do usunięcia - - + + Placeholder type Typ zastępczy - - + + Power rank Ranking siły - - - - + + + + Hero type Typ bohatera - - + + Experience Doświadczenie - - + + MALE MĘŻCZYZNA - - + + FEMALE KOBIETA - - + + Gender Płeć - - + + Name Nazwa - - + + Biography Biografia - - + + Spells Zaklęcia - - + + Patrol radius Promień patrolu - - + + Town name Nazwa miasta - - + + Same as player Takie samo jak gracz - - - - - - - - - + + + + + + + + + Message Wiadomość - - + + Spell Zaklęcie - - + + Productivity Produktywność - - - - + + + + Amount Ilość - + Character Charakter - + Select town Wybierz miasto - - + + Never flees Nigdy nie ucieka - - + + Not growing Nie rośnie - - + + Reward Nagroda - - + + Remove after Usuń po - - + + Human trigger Wyzwalacz gracza - - + + Cpu trigger Wyzwalacz SI - - + + First visit text Tekst pierwszej wizyty - - + + Next visit text Tekst następnej wizyty - - + + Completed text Tekst po zakończeniu - - - + + + Repeat quest Powtarzaj misję - - + + Time limit Limit czasu - + UNFLAGGABLE NIEFLAGOWALNY - + Can't place object Nie można umieścić obiektu - + There can only be one grail object on the map. Na mapie może znajdować się tylko jeden Graal. - + (submod of %1) (submod %1) - + The mod '%1'%2, is required by an object on the map. Add it to the map's required mods in Map->General settings. should be consistent with Map->General menu entry translation @@ -2005,13 +2059,13 @@ Dodaj go do wymaganych modów w Ustawieniach ogólnych mapy. - + Hero Level: %1 Poziom bohatera: %1 - + Hero Experience: %1 Doświadczenie bohatera: %1 @@ -2022,43 +2076,43 @@ Dodaj go do wymaganych modów w Ustawieniach ogólnych mapy. - + Mana Percentage: %1 Procent many: %1 - + Primary Skills: %1/%2/%3/%4 Umiejętności podstawowe: %1/%2/%3/%4 - + Resources: %1 Surowce: %1 - + Artifacts: %1 Artefakty: %1 - + Spells: %1 Czary: %1 - + Secondary Skills: %1 Umiejętności drugorzędne: %1 - + Creatures: %1 Stworzenia: %1 @@ -2078,37 +2132,37 @@ Dodaj go do wymaganych modów w Ustawieniach ogólnych mapy. Gracze: %1 - + Rewards: Nagrody: - + Reward Message: %1 Wiadomość o nagrodzie: %1 - + Mana Diff: %1 Różnica many: %1 - + Move Points: %1 Punkty ruchu: %1 - + Move Percentage: %1 Procent ruchu: %1 - + Spell Cast: %1 (%2) Rzucony czar: %1 (%2) - + Bonuses: %1 Premie: %1 @@ -2534,18 +2588,18 @@ Dodaj go do wymaganych modów w Ustawieniach ogólnych mapy. Gracze - + None Brak - + Day %1 Dzień %1 - - + + Reward %1 Nagroda %1 @@ -2769,8 +2823,8 @@ Dodaj go do wymaganych modów w Ustawieniach ogólnych mapy. - - + + Player position Pozycja gracza @@ -2820,49 +2874,49 @@ Dodaj go do wymaganych modów w Ustawieniach ogólnych mapy. Gracz - + Open map Otwórz mapę - + All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) Wszystkie wspierane mapy (*.vmap *.h3m);;Mapy VCMI(*.vmap);;Mapy HoMM3(*.h3m) - - + + Error Błąd - - + + Could not open the file. Nie udało się otworzyć pliku. - + Save map Zapisz mapę - + VCMI maps (*.vmap); Mapy VCMI (*.vmap); - + HoMM3 maps (*.h3m); Mapy HoMM3 (*.h3m); - + Source scenario Źródłowy scenariusz - + Hero Bohater @@ -2897,7 +2951,7 @@ Dodaj go do wymaganych modów w Ustawieniach ogólnych mapy. - + Building Budynek @@ -2924,14 +2978,14 @@ Dodaj go do wymaganych modów w Ustawieniach ogólnych mapy. - + Secondary skill Umiejętność dodatkowa - + Resource Zasób @@ -3017,46 +3071,671 @@ Dodaj go do wymaganych modów w Ustawieniach ogólnych mapy. Rzadki (%1, %2, %3, %4) - + strongest hero najsłynniejszy bohater - + generated hero wygenerowany bohater - + random hero losowy bohater - + %1 spell for %2 czar %1 dla %2 - + %1 %2 for %3 %1 %2 dla %3 - + %1 artifact for %2 artefakt %1 dla %2 - + %1 spell scroll for %2 zwój z czarem %1 dla %2 - + Primary skill (Attack: %1, Defense: %2, Spell: %3, Knowledge: %4) for %5 Umiejętność podstawowa (Atak: %1, Obrona: %2, Magia: %3, Wiedza: %4) dla %5 + + TemplateEditor + + + + VCMI Template Editor + + + + + File + Plik + + + + Edit + Edycja + + + + View + Widok + + + + Toolbar + Przybornik + + + + Selected Template: + + + + + + + Add + Dodaj + + + + Remove + Usuń + + + + Rename + + + + + General + Ogólne + + + + Name + Nazwa + + + + Description + + + + + Min Size + + + + + + + X + X + + + + + + Y + Y + + + + + + Z + + + + + Max Size + + + + + + Players + Gracze + + + + Human + + + + + Allowed water content + + + + + + + None + Brak + + + + + Normal + Normalna + + + + Islands + Wyspy + + + + Zone + + + + + Visualisation + + + + + Position + + + + + + Size + + + + + ID + ID + + + + + Type + Typ + + + + Owner + Właściciel + + + + Zone link + + + + + + + Mines + Kopalnie + + + + + Custom objects + + + + + + Towns + Miasta + + + + + Terrain + + + + + + + + Treasure + + + + + Town info + + + + + Town count + + + + + + + + Player + Gracz + + + + + + + Neutral + Neutralny + + + + Castle count + + + + + Town density + + + + + Castle density + + + + + Match terrain to town + + + + + Terrain types + + + + + Banned terrain types + + + + + Towns are same type + + + + + Allowed towns + + + + + Banned towns + + + + + Town hints + + + + + Monsters + Potwory + + + + Allowed monsters + + + + + Banned monsters + + + + + Strength + + + + + Objects + Obiekty + + + + Connections + + + + + Open + Otwórz + + + + Save + Zapisz + + + + New + Nowy + + + + Save as... + Zapisz jako... + + + + Ctrl+Shift+S + Ctrl+Shift+S + + + + Add zone + + + + + Remove zone + + + + + + Del + Del + + + + Auto position + + + + + Ctrl+P + Ctrl+P + + + + Zoom in + Zbliż widok + + + + Ctrl++ + Ctrl++ + + + + Zoom out + Oddal widok + + + + Ctrl+- + Ctrl+- + + + + Zoom auto + + + + + Ctrl+Shift+: + + + + + Zoom reset + Domyślne oddalenie + + + + Ctrl+Shift+= + Ctrl+Shift+= + + + + Min + + + + + Max + + + + + Action + + + + + + Delete + + + + + ID: %1 + + + + + Max treasure: %1 + + + + + Player start + + + + + CPU start + + + + + Junction + + + + + Water + + + + + Sealed + + + + + + Random + Losowo + + + + Weak + Słaba + + + + Strong + Silna + + + + Zone A + + + + + Zone B + + + + + Guard + + + + + Road + + + + + Guarded + + + + + Fictive + + + + + Repulsive + + + + + Wide + + + + + Force portal + + + + + Yes + + + + + No + + + + + Zone A: %1 +Zone B: %2 +Guard: %3 + + + + + Confirmation + Potwierdzenie + + + + Unsaved changes will be lost, are you sure? + Niezapisane zmiany zostaną utracone, jesteś pewny? + + + + Open template + + + + + VCMI templates(*.json) + + + + + Save template + + + + + VCMI templates (*.json) + + + + + + Enter Name + + + + + + Name: + + + + + Already existing! + + + + + At template with this name is already existing. + + + + + To few templates! + + + + + At least one template should remain after removing. + + + + + + Error + Błąd + + + + + Not implemented yet! + + + + + TerrainSelector + + + + Select Terrains + + + + + Terrain Selector + + + TimedEvent @@ -3397,6 +4076,40 @@ Dodaj go do wymaganych modów w Ustawieniach ogólnych mapy. Wszystkie istniejące wpisy dla tego języka zostaną usunięte. Kontynuować? + + TreasureSelector + + + + Select Treasures + + + + + Treasure Selector + + + + + Min + + + + + Max + + + + + Density + + + + + Action + + + Validator @@ -3786,22 +4499,22 @@ Dodaj go do wymaganych modów w Ustawieniach ogólnych mapy. Anuluj - + No template Brak szablonu - + No template for parameters specified. Random map cannot be generated. Brak szablonu dla wybranych parametrów. Mapa losowa nie może zostać wygenerowana. - + RMG failure Niepowodzenie generatora map losowych - + [default] [domyślny] @@ -3809,27 +4522,27 @@ Dodaj go do wymaganych modów w Ustawieniach ogólnych mapy. main - + Filepath of the map to open. Lokalizacja pliku mapy do otworzenia. - + Extract original H3 archives into a separate folder. Wyodrębnij oryginalne archiwa H3 do osobnego folderu. - + From an extracted archive, it Splits TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 and Un44 into individual PNG's. Z wyodrębnionego archiwum, rozdzielenie TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 i Un44 do poszczególnych plików PNG. - + From an extracted archive, Converts single Images (found in Images folder) from .pcx to png. Z wyodrębnionego archiwum, konwersja pojedynczych obrazków (znalezionych w folderze Images) z .pcx do .png. - + Delete original files, for the ones split / converted. Usuń oryginalne pliki, dla już rozdzielonych / skonwertowanych. diff --git a/mapeditor/translation/portuguese.ts b/mapeditor/translation/portuguese.ts index 795359dbf..b7fb5f8cc 100644 --- a/mapeditor/translation/portuguese.ts +++ b/mapeditor/translation/portuguese.ts @@ -47,7 +47,7 @@ CampaignEditor - + VCMI Campaign Editor Editor de Campanhas VCMI @@ -115,37 +115,37 @@ Mostrar fundo completo - + Scenario editor Editor de Cenário - + Confirmation Confirmação - + Unsaved changes will be lost, are you sure? As alterações não salvas serão perdidas, tem certeza? - + Open map Abrir mapa - + All supported campaigns (*.vcmp *.h3c);;VCMI campaigns(*.vcmp);;HoMM3 campaigns(*.h3c) Todas as campanhas suportadas (*.vcmp *.h3c);;Campanhas VCMI (*.vcmp);;Campanhas HoMM3 (*.h3c) - + Save campaign Salvar campanha - + VCMI campaigns (*.vcmp) Campanhas VCMI (*.vcmp) @@ -154,7 +154,7 @@ CampaignProperties - + Campaign Properties Propriedades da Campanha @@ -270,42 +270,42 @@ Vídeo de finalização - + Custom Personalizado - + Infix Infixo - + X X - + Y Y - + Label Pos X Posição X do Rótulo - + Label Pos Y Posição Y do Rótulo - + Fewer Scenarios Menos Cenários - + New Region setup supports fewer scenarios than before. Some will removed. Continue? A nova configuração de Região suporta menos cenários do que antes. Alguns serão removidos. Continuar? @@ -338,6 +338,20 @@ Novo evento + + FactionSelector + + + + Select Factions + + + + + Faction Selector + + + GeneralSettings @@ -421,6 +435,16 @@ Artifact Artefato + + + Save + Salvar + + + + Cancel + Cancelar + HeroSkillsWidget @@ -553,7 +577,7 @@ MainWindow - + VCMI Map Editor Editor de Mapas do VCMI @@ -564,723 +588,729 @@ - + Open Recent Abrir Recentes - + Map Mapa - + Edit Editar - + View Visualizar - + Player Jogador - + Toolbar Barra de Ferramentas - + Minimap Minimapa - + Map Objects View Visualização de Objetos do Mapa - + Browser Navegador - + Inspector Inspetor - + Property Propriedade - + Value Valor - + Tools Ferramentas - + Painting Pintura - + Terrains Terrenos - + Roads Estradas - + Rivers Rios - + Preview Pré-visualização - + Open Abrir - + Ctrl+O Ctrl+O - + More... Mais... - + Save Salvar - + Ctrl+S Ctrl+S - + New Novo - + Ctrl+N Ctrl+N - + Save as... Salvar como... - + Ctrl+Shift+S Ctrl+Shift+S - - + + Campaign editor Editor de Campanha - - - - + + + Template editor + + + + + + + View underground Visualizar subterrâneo - + Ctrl+U Ctrl+U - + Pass Passar - + Ctrl+Shift+P Ctrl+Shift+P - + Cut Recortar - + Ctrl+X Ctrl+X - + Copy Copiar - + Ctrl+C Ctrl+C - + Paste Colar - + Ctrl+V Ctrl+V - + Fill Preencher - + Fills the selection with obstacles Preenche a seleção com obstáculos - + Grid Grade - + Ctrl+G Ctrl+G - + General Geral - + Map title and description Título e descrição do mapa - + Ctrl+Enter Ctrl+Enter - + Players settings Configurações dos jogadores - + Ctrl+P Ctrl+P - - + + Undo Desfazer - + Ctrl+Z Ctrl+Z - + Redo Refazer - + Ctrl+Y Ctrl+Y - + Erase Apagar - + Del Del - + Neutral Neutro - + Ctrl+0 Ctrl+0 - + Validate Validar - + Ctrl+Shift+V Ctrl+Shift+V - - - - + + + + Update appearance Atualizar aparência - + Recreate obstacles Recriar obstáculos - + Player 1 Jogador 1 - + Ctrl+1 Ctrl+1 - + Player 2 Jogador 2 - + Ctrl+2 Ctrl+2 - + Player 3 Jogador 3 - + Ctrl+3 Ctrl+3 - + Player 4 Jogador 4 - + Ctrl+4 Ctrl+4 - + Player 5 Jogador 5 - + Ctrl+5 Ctrl+5 - + Player 6 Jogador 6 - + Ctrl+6 Ctrl+6 - + Player 7 Jogador 7 - + Ctrl+7 Ctrl+7 - + Player 8 Jogador 8 - + Ctrl+8 Ctrl+8 - + Export as... Exportar como... - + Ctrl+E Ctrl+E - + Translations Traduções - + Ctrl+T Ctrl+T - - + + h3m converter Conversor h3m - + Ctrl+Shift+M Ctrl+Shift+M - - + + h3c converter Conversor h3c - + Ctrl+Shift+C Ctrl+Shift+C - + Lock Bloquear - + Lock objects on map to avoid unnecessary changes Bloquear objetos no mapa para evitar alterações desnecessárias - + Ctrl+L Ctrl+L - + Unlock Desbloquear - + Unlock all objects on the map Desbloquear todos os objetos no mapa - + Ctrl+Shift+L Ctrl+Shift+L - + Zoom in Aumentar zoom - + Ctrl++ Ctrl++ - + Zoom out Diminuir zoom - + Ctrl+- Ctrl+- - + Zoom reset Redefinir zoom - + Ctrl+Shift+= Ctrl+Shift+= - + Confirmation Confirmação - + Unsaved changes will be lost, are you sure? As alterações não salvas serão perdidas, tem certeza? - + Mods are required Mods são necessários - + Failed to open map Falha ao abrir o mapa - + Open map Abrir mapa - + All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) Todos os mapas suportados (*.vmap *.h3m);;Mapas do VCMI (*.vmap);;Mapas do HoMM3 (*.h3m) - + Recently Opened Files Arquivos Abertos Recentemente - + Map validation Validação do mapa - + Map has critical problems and most probably will not be playable. Open Validator from the Map menu to see issues found O mapa tem problemas críticos e provavelmente não será jogável. Abra o Validador no menu Mapa para ver os problemas encontrados. - + Map has some errors. Open Validator from the Map menu to see issues found O mapa tem alguns erros. Abra o Validador no menu Mapa para ver os problemas encontrados. - + Failed to save map Falha ao salvar o mapa - + Save map Salvar mapa - + VCMI maps (*.vmap) Mapas do VCMI (*.vmap) - + Type Tipo - + Towns Cidades - + Objects Objetos - + Heroes Heróis - + Artifacts Artefatos - + Resources Recursos - + Banks Bancos - + Dwellings Moradias - + Grounds Terrenos - + Teleports Teleportes - + Mines Minas - + Triggers Gatilhos - + Monsters Monstros - + Quests Missões - + Wog Objects Objetos Wog - + Obstacles Obstáculos - + Other Outro - + Mods loading problem Problema ao carregar mods - + Critical error during Mods loading. Disable invalid mods and restart. Erro crítico durante o carregamento dos Mods. Desative os mods inválidos e reinicie. - - + + View surface Visualizar superfície - + No objects selected Nenhum objeto selecionado - + This operation is irreversible. Do you want to continue? Esta operação é irreversível. Deseja continuar? - + Errors occurred. %1 objects were not updated Ocorreram erros. %1 objetos não foram atualizados - + Save to image Salvar como imagem - + Select maps to convert Selecionar mapas para converter - + HoMM3 maps(*.h3m) Mapas do HoMM3 (*.h3m) - + Choose directory to save converted maps Escolha o diretório para salvar os mapas convertidos - + Operation completed Operação completa - + Successfully converted %1 maps %1 mapas foram convertidos com sucesso - + Failed to convert the map. Abort operation Falha ao converter o mapa. Abortar operação - + Select campaign to convert Selecionar campanha para converter - + HoMM3 campaigns (*.h3c) Campanhas HoMM3 (*.h3c) - + Select destination file Selecionar arquivo de destino - + VCMI campaigns (*.vcmp) Campanhas VCMI (*.vcmp) @@ -1288,29 +1318,29 @@ MapController - + Hero %1 cannot be created as NEUTRAL. O herói %1 não pode ser criado como NEUTRO. - + Missing Required Mod AI-generated, needs review by native speaker; delete this comment afterwards Mod obrigatório ausente - + Do you want to do that now ? -AI-generated, needs review by native speaker; delete this comment afterwards + AI-generated, needs review by native speaker; delete this comment afterwards Você quer fazer isso agora? - + This object's mod is mandatory for map to remain valid. AI-generated, needs review by native speaker; delete this comment afterwards O mod deste objeto é obrigatório para que o mapa permaneça válido. @@ -1400,6 +1430,30 @@ Você quer fazer isso agora? Mensagem + + MineSelector + + + + Select Mines + + + + + Mine Selector + + + + + Resource + Recurso + + + + Mines + Minas + + ModSettings @@ -1534,26 +1588,26 @@ Você quer fazer isso agora? - PlayerSettings + PlayerSettingsDialog - + Player settings - Configurações do jogador + Configurações do jogador - + Players - Jogadores + Jogadores - + 1 - 1 + 1 - + Ok - Ok + Ok @@ -1603,69 +1657,69 @@ Você quer fazer isso agora? Habilidades secundárias: - + Compliant Complacente - + Friendly Amigável - + Aggressive Agressivo - + Hostile Hostil - + Savage Selvagem - - + + No patrol Sem patrulha - + POWER RANK RANQUE DE PODER - + HERO TYPE TIPO DE HERÓI - + Hero class Classe de herói - + Portrait Retrato - + Skills Habilidades - + Artifacts Artefatos - - + + %n tile(s) %n bloco @@ -1673,305 +1727,305 @@ Você quer fazer isso agora? - + Buildings Estruturas - + Events Eventos - + Resource Recurso - + Artifact reward Recompensa de artefato - + Quest Missão - + Identifier Identificador - + ID ID - + SubID SubID - + InstanceName Nome da Instância - + IsStatic Estático - - + + neutral neutro - - + + Army Exército - - - + + - - - - - + + + + + + Owner Proprietário - - + + Same as town Igual à cidade - - + + Removable units Unidades removíveis - - + + Placeholder type Tipo de marcador - - + + Power rank Ranque de poder - - - - + + + + Hero type Tipo de herói - - + + Experience Experiência - - + + MALE MASCULINO - - + + FEMALE FEMININO - - + + Gender Gênero - - + + Name Nome - - + + Biography Biografia - - + + Spells Feitiços - - + + Patrol radius Raio de patrulha - - + + Town name Nome da cidade - - + + Same as player Igual ao jogador - - - - - - - - - + + + + + + + + + Message Mensagem - - + + Spell Feitiço - - + + Productivity Produtividade - - - - + + + + Amount Quantidade - + Character Personagem - + Select town Selecionar cidade - - + + Never flees Nunca foge - - + + Not growing Não cresce - - + + Reward Recompensa - - + + Remove after Remover depois de - - + + Human trigger Gatilho humano - - + + Cpu trigger Gatilho da CPU - - + + First visit text Texto da primeira visita - - + + Next visit text Texto da próxima visita - - + + Completed text Texto de completado - - - + + + Repeat quest Repetir missão - - + + Time limit Limite de tempo - + UNFLAGGABLE INMARCÁVEL - + Can't place object Não é possível colocar o objeto - + There can only be one grail object on the map. Só pode haver um objeto Graal no mapa. - + (submod of %1) AI-generated, needs review by native speaker; delete this comment afterwards (submod de %1) - + The mod '%1'%2, is required by an object on the map. Add it to the map's required mods in Map->General settings. should be consistent with Map->General menu entry translation @@ -2013,13 +2067,13 @@ Adicione-o aos mods obrigatórios do mapa em Mapa->Configurações gerais. - + Hero Level: %1 Nível do Herói: %1 - + Hero Experience: %1 Experiência do Herói: %1 @@ -2030,43 +2084,43 @@ Adicione-o aos mods obrigatórios do mapa em Mapa->Configurações gerais. - + Mana Percentage: %1 Porcentagem de Mana: %1 - + Primary Skills: %1/%2/%3/%4 Habilidades Primárias: %1/%2/%3/%4 - + Resources: %1 Recursos: %1 - + Artifacts: %1 Artefatos: %1 - + Spells: %1 Feitiços: %1 - + Secondary Skills: %1 Habilidades Secundárias: %1 - + Creatures: %1 Criaturas: %1 @@ -2086,37 +2140,37 @@ Adicione-o aos mods obrigatórios do mapa em Mapa->Configurações gerais.Jogadores: %1 - + Rewards: Recompensas: - + Reward Message: %1 Mensagem de Recompensa: %1 - + Mana Diff: %1 Diferença de Mana: %1 - + Move Points: %1 Pontos de Movimento: %1 - + Move Percentage: %1 Porcentagem de Movimento: %1 - + Spell Cast: %1 (%2) Feitiço Lançado: %1 (%2) - + Bonuses: %1 Bônus: %1 @@ -2542,18 +2596,18 @@ Adicione-o aos mods obrigatórios do mapa em Mapa->Configurações gerais.Jogadores - + None Nenhum - + Day %1 Dia %1 - - + + Reward %1 Recompensa %1 @@ -2777,8 +2831,8 @@ Adicione-o aos mods obrigatórios do mapa em Mapa->Configurações gerais. - - + + Player position Posição do jogador @@ -2828,49 +2882,49 @@ Adicione-o aos mods obrigatórios do mapa em Mapa->Configurações gerais.Jogador - + Open map Abrir mapa - + All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) Todos os mapas suportados (*.vmap *.h3m);;Mapas VCMI (*.vmap);;Mapas HoMM3 (*.h3m) - - + + Error Erro - - + + Could not open the file. Não foi possível abrir o arquivo. - + Save map Salvar mapa - + VCMI maps (*.vmap); Mapas VCMI (*.vmap); - + HoMM3 maps (*.h3m); Mapas HoMM3 (*.h3m); - + Source scenario Cenário de origem - + Hero Herói @@ -2905,7 +2959,7 @@ Adicione-o aos mods obrigatórios do mapa em Mapa->Configurações gerais. - + Building Construção @@ -2932,14 +2986,14 @@ Adicione-o aos mods obrigatórios do mapa em Mapa->Configurações gerais. - + Secondary skill Habilidade secundária - + Resource Recurso @@ -3025,46 +3079,671 @@ Adicione-o aos mods obrigatórios do mapa em Mapa->Configurações gerais.Raro (%1, %2, %3, %4) - + strongest hero herói mais forte - + generated hero herói gerado - + random hero herói aleatório - + %1 spell for %2 Feitiço %1 para %2 - + %1 %2 for %3 %1 %2 para %3 - + %1 artifact for %2 Artefato %1 para %2 - + %1 spell scroll for %2 Pergaminho de feitiço %1 para %2 - + Primary skill (Attack: %1, Defense: %2, Spell: %3, Knowledge: %4) for %5 Habilidade primária (Ataque: %1, Defesa: %2, Poder Mágico: %3, Conhecimento: %4) para %5 + + TemplateEditor + + + + VCMI Template Editor + + + + + File + Arquivo + + + + Edit + Editar + + + + View + Visualizar + + + + Toolbar + Barra de Ferramentas + + + + Selected Template: + + + + + + + Add + Adicionar + + + + Remove + Remover + + + + Rename + + + + + General + Geral + + + + Name + Nome + + + + Description + + + + + Min Size + + + + + + + X + X + + + + + + Y + Y + + + + + + Z + + + + + Max Size + + + + + + Players + Jogadores + + + + Human + + + + + Allowed water content + + + + + + + None + Nenhum + + + + + Normal + Normal + + + + Islands + Ilhas + + + + Zone + + + + + Visualisation + + + + + Position + + + + + + Size + + + + + ID + ID + + + + + Type + Tipo + + + + Owner + Proprietário + + + + Zone link + + + + + + + Mines + Minas + + + + + Custom objects + + + + + + Towns + Cidades + + + + + Terrain + + + + + + + + Treasure + + + + + Town info + + + + + Town count + + + + + + + + Player + Jogador + + + + + + + Neutral + Neutro + + + + Castle count + + + + + Town density + + + + + Castle density + + + + + Match terrain to town + + + + + Terrain types + + + + + Banned terrain types + + + + + Towns are same type + + + + + Allowed towns + + + + + Banned towns + + + + + Town hints + + + + + Monsters + Monstros + + + + Allowed monsters + + + + + Banned monsters + + + + + Strength + + + + + Objects + Objetos + + + + Connections + + + + + Open + Abrir + + + + Save + Salvar + + + + New + Novo + + + + Save as... + Salvar como... + + + + Ctrl+Shift+S + Ctrl+Shift+S + + + + Add zone + + + + + Remove zone + + + + + + Del + Del + + + + Auto position + + + + + Ctrl+P + Ctrl+P + + + + Zoom in + Aumentar zoom + + + + Ctrl++ + Ctrl++ + + + + Zoom out + Diminuir zoom + + + + Ctrl+- + Ctrl+- + + + + Zoom auto + + + + + Ctrl+Shift+: + + + + + Zoom reset + Redefinir zoom + + + + Ctrl+Shift+= + Ctrl+Shift+= + + + + Min + + + + + Max + + + + + Action + + + + + + Delete + + + + + ID: %1 + + + + + Max treasure: %1 + + + + + Player start + + + + + CPU start + + + + + Junction + + + + + Water + + + + + Sealed + + + + + + Random + Aleatório + + + + Weak + Fracos + + + + Strong + Fortes + + + + Zone A + + + + + Zone B + + + + + Guard + + + + + Road + + + + + Guarded + + + + + Fictive + + + + + Repulsive + + + + + Wide + + + + + Force portal + + + + + Yes + + + + + No + + + + + Zone A: %1 +Zone B: %2 +Guard: %3 + + + + + Confirmation + Confirmação + + + + Unsaved changes will be lost, are you sure? + As alterações não salvas serão perdidas, tem certeza? + + + + Open template + + + + + VCMI templates(*.json) + + + + + Save template + + + + + VCMI templates (*.json) + + + + + + Enter Name + + + + + + Name: + + + + + Already existing! + + + + + At template with this name is already existing. + + + + + To few templates! + + + + + At least one template should remain after removing. + + + + + + Error + Erro + + + + + Not implemented yet! + + + + + TerrainSelector + + + + Select Terrains + + + + + Terrain Selector + + + TimedEvent @@ -3405,6 +4084,40 @@ Adicione-o aos mods obrigatórios do mapa em Mapa->Configurações gerais.Todos os registros de texto existentes para este idioma serão removidos. Continuar? + + TreasureSelector + + + + Select Treasures + + + + + Treasure Selector + + + + + Min + + + + + Max + + + + + Density + + + + + Action + + + Validator @@ -3796,22 +4509,22 @@ Adicione-o aos mods obrigatórios do mapa em Mapa->Configurações gerais.Cancelar - + No template Sem modelo - + No template for parameters specified. Random map cannot be generated. Sem modelo para os parâmetros especificados. O mapa aleatório não pode set gerado. - + RMG failure Falha do GMA - + [default] [padrão] @@ -3819,27 +4532,27 @@ Adicione-o aos mods obrigatórios do mapa em Mapa->Configurações gerais. main - + Filepath of the map to open. Caminho do arquivo do mapa a ser aberto. - + Extract original H3 archives into a separate folder. Extrair arquivos originais H3 para uma pasta separada. - + From an extracted archive, it Splits TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 and Un44 into individual PNG's. De um arquivo extraído, divide TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 e Un44 em PNGs individuais. - + From an extracted archive, Converts single Images (found in Images folder) from .pcx to png. De um arquivo extraído, converte imagens únicas (encontradas na pasta Imagens) de .pcx para png. - + Delete original files, for the ones split / converted. Excluir arquivos originais, para os divididos / convertidos. diff --git a/mapeditor/translation/romanian.ts b/mapeditor/translation/romanian.ts index dc69567e9..d6f1d2924 100644 --- a/mapeditor/translation/romanian.ts +++ b/mapeditor/translation/romanian.ts @@ -54,7 +54,7 @@ CampaignEditor - + VCMI Campaign Editor AI-generated, needs review by native speaker; delete this comment afterwards Editor de campanii VCMI @@ -135,43 +135,43 @@ Afișează fundal complet - + Scenario editor AI-generated, needs review by native speaker; delete this comment afterwards Editor de scenarii - + Confirmation AI-generated, needs review by native speaker; delete this comment afterwards Confirmare - + Unsaved changes will be lost, are you sure? AI-generated, needs review by native speaker; delete this comment afterwards Modificările nesalvate vor fi pierdute, ești sigur? - + Open map AI-generated, needs review by native speaker; delete this comment afterwards Deschide hartă - + All supported campaigns (*.vcmp *.h3c);;VCMI campaigns(*.vcmp);;HoMM3 campaigns(*.h3c) AI-generated, needs review by native speaker; delete this comment afterwards Toate campaniile suportate (*.vcmp *.h3c);;Campanii VCMI (*.vcmp);;Campanii HoMM3 (*.h3c) - + Save campaign AI-generated, needs review by native speaker; delete this comment afterwards Salvează campania - + VCMI campaigns (*.vcmp) AI-generated, needs review by native speaker; delete this comment afterwards Campanii VCMI (*.vcmp) @@ -181,7 +181,7 @@ CampaignProperties - + Campaign Properties AI-generated, needs review by native speaker; delete this comment afterwards Proprietăți campanie @@ -320,47 +320,47 @@ Video de încheiere - + Custom AI-generated, needs review by native speaker; delete this comment afterwards Personalizat - + Infix AI-generated, needs review by native speaker; delete this comment afterwards Infix - + X - + Y - + Label Pos X AI-generated, needs review by native speaker; delete this comment afterwards Poziție etichetă X - + Label Pos Y AI-generated, needs review by native speaker; delete this comment afterwards Poziție etichetă Y - + Fewer Scenarios AI-generated, needs review by native speaker; delete this comment afterwards Mai puține scenarii - + New Region setup supports fewer scenarios than before. Some will removed. Continue? AI-generated, needs review by native speaker; delete this comment afterwards Configurarea noii regiuni suportă mai puține scenarii decât înainte. Unele vor fi eliminate. Continuă? @@ -399,6 +399,20 @@ Eveniment nou + + FactionSelector + + + + Select Factions + + + + + Faction Selector + + + GeneralSettings @@ -497,6 +511,16 @@ AI-generated, needs review by native speaker; delete this comment afterwards Artefact + + + Save + Salvează + + + + Cancel + Anulează + HeroSkillsWidget @@ -652,7 +676,7 @@ MainWindow - + VCMI Map Editor Editor de hărți VCMI @@ -664,864 +688,870 @@ - + Open Recent AI-generated, needs review by native speaker; delete this comment afterwards Deschide recente - + Map AI-generated, needs review by native speaker; delete this comment afterwards Hartă - + Edit AI-generated, needs review by native speaker; delete this comment afterwards Editare - + View AI-generated, needs review by native speaker; delete this comment afterwards Vizualizare - + Player AI-generated, needs review by native speaker; delete this comment afterwards Jucător - + Toolbar AI-generated, needs review by native speaker; delete this comment afterwards Bară de unelte - + Minimap AI-generated, needs review by native speaker; delete this comment afterwards Minihartă - + Map Objects View AI-generated, needs review by native speaker; delete this comment afterwards Vizualizare obiecte hartă - + Browser AI-generated, needs review by native speaker; delete this comment afterwards Navigator - + Inspector AI-generated, needs review by native speaker; delete this comment afterwards Inspector - + Property AI-generated, needs review by native speaker; delete this comment afterwards Proprietate - + Value AI-generated, needs review by native speaker; delete this comment afterwards Valoare - + Tools AI-generated, needs review by native speaker; delete this comment afterwards Unelte - + Painting AI-generated, needs review by native speaker; delete this comment afterwards Pictură - + Terrains AI-generated, needs review by native speaker; delete this comment afterwards Terenuri - + Roads AI-generated, needs review by native speaker; delete this comment afterwards Drumuri - + Rivers AI-generated, needs review by native speaker; delete this comment afterwards Râuri - + Preview AI-generated, needs review by native speaker; delete this comment afterwards Previzualizare - + Open AI-generated, needs review by native speaker; delete this comment afterwards Deschide - + Ctrl+O AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+O - + More... AI-generated, needs review by native speaker; delete this comment afterwards Mai mult... - + Save AI-generated, needs review by native speaker; delete this comment afterwards Salvează - + Ctrl+S AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+S - + New AI-generated, needs review by native speaker; delete this comment afterwards Nou - + Ctrl+N AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+N - + Save as... AI-generated, needs review by native speaker; delete this comment afterwards Salvează ca... - + Ctrl+Shift+S AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+S - - + + Campaign editor AI-generated, needs review by native speaker; delete this comment afterwards Editor de campanii - - - - + + + Template editor + + + + + + + View underground AI-generated, needs review by native speaker; delete this comment afterwards Vezi subteran - + Ctrl+U AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+U - + Pass AI-generated, needs review by native speaker; delete this comment afterwards Trecere - + Ctrl+Shift+P AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+P - + Cut AI-generated, needs review by native speaker; delete this comment afterwards Taie - + Ctrl+X AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+X - + Copy AI-generated, needs review by native speaker; delete this comment afterwards Copiază - + Ctrl+C AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+C - + Paste AI-generated, needs review by native speaker; delete this comment afterwards Lipește - + Ctrl+V AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+V - + Fill AI-generated, needs review by native speaker; delete this comment afterwards Umple - + Fills the selection with obstacles AI-generated, needs review by native speaker; delete this comment afterwards Umple selecția cu obstacole - + Grid AI-generated, needs review by native speaker; delete this comment afterwards Grilă - + Ctrl+G AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+G - + General AI-generated, needs review by native speaker; delete this comment afterwards General - + Map title and description AI-generated, needs review by native speaker; delete this comment afterwards Titlu și descriere hartă - + Ctrl+Enter AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Enter - + Players settings AI-generated, needs review by native speaker; delete this comment afterwards Setări jucători - + Ctrl+P AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+P - - + + Undo AI-generated, needs review by native speaker; delete this comment afterwards Anulează - + Ctrl+Z AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Z - + Redo AI-generated, needs review by native speaker; delete this comment afterwards Refă - + Ctrl+Y AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Y - + Erase AI-generated, needs review by native speaker; delete this comment afterwards Șterge - + Del AI-generated, needs review by native speaker; delete this comment afterwards Del - + Neutral AI-generated, needs review by native speaker; delete this comment afterwards Neutru - + Ctrl+0 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+0 - + Validate AI-generated, needs review by native speaker; delete this comment afterwards Validează - + Ctrl+Shift+V AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+V - - - - + + + + Update appearance AI-generated, needs review by native speaker; delete this comment afterwards Actualizează apariția - + Recreate obstacles AI-generated, needs review by native speaker; delete this comment afterwards Recreează obstacolele - + Player 1 AI-generated, needs review by native speaker; delete this comment afterwards Jucător 1 - + Ctrl+1 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+1 - + Player 2 AI-generated, needs review by native speaker; delete this comment afterwards Jucător 2 - + Ctrl+2 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+2 - + Player 3 AI-generated, needs review by native speaker; delete this comment afterwards Jucător 3 - + Ctrl+3 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+3 - + Player 4 AI-generated, needs review by native speaker; delete this comment afterwards Jucător 4 - + Ctrl+4 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+4 - + Player 5 AI-generated, needs review by native speaker; delete this comment afterwards Jucător 5 - + Ctrl+5 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+5 - + Player 6 AI-generated, needs review by native speaker; delete this comment afterwards Jucător 6 - + Ctrl+6 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+6 - + Player 7 AI-generated, needs review by native speaker; delete this comment afterwards Jucător 7 - + Ctrl+7 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+7 - + Player 8 AI-generated, needs review by native speaker; delete this comment afterwards Jucător 8 - + Ctrl+8 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+8 - + Export as... AI-generated, needs review by native speaker; delete this comment afterwards Exportă ca... - + Ctrl+E AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+E - + Translations AI-generated, needs review by native speaker; delete this comment afterwards Traduceri - + Ctrl+T AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+T - - + + h3m converter AI-generated, needs review by native speaker; delete this comment afterwards Convertor h3m - + Ctrl+Shift+M AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+M - - + + h3c converter AI-generated, needs review by native speaker; delete this comment afterwards Convertor h3c - + Ctrl+Shift+C AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+C - + Lock AI-generated, needs review by native speaker; delete this comment afterwards Blochează - + Lock objects on map to avoid unnecessary changes AI-generated, needs review by native speaker; delete this comment afterwards Blochează obiectele pe hartă pentru a evita modificările inutile - + Ctrl+L AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+L - + Unlock AI-generated, needs review by native speaker; delete this comment afterwards Deblochează - + Unlock all objects on the map AI-generated, needs review by native speaker; delete this comment afterwards Deblochează toate obiectele de pe hartă - + Ctrl+Shift+L AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+L - + Zoom in AI-generated, needs review by native speaker; delete this comment afterwards Mărește - + Ctrl++ AI-generated, needs review by native speaker; delete this comment afterwards Ctrl++ - + Zoom out AI-generated, needs review by native speaker; delete this comment afterwards Micșorează - + Ctrl+- AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+- - + Zoom reset AI-generated, needs review by native speaker; delete this comment afterwards Resetare zoom - + Ctrl+Shift+= AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+= - + Confirmation AI-generated, needs review by native speaker; delete this comment afterwards Confirmare - + Unsaved changes will be lost, are you sure? AI-generated, needs review by native speaker; delete this comment afterwards Modificările nesalvate vor fi pierdute, ești sigur? - + Mods are required AI-generated, needs review by native speaker; delete this comment afterwards Sunt necesare moduri - + Failed to open map AI-generated, needs review by native speaker; delete this comment afterwards Nu s-a putut deschide harta - + Open map AI-generated, needs review by native speaker; delete this comment afterwards Deschide hartă - + All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) AI-generated, needs review by native speaker; delete this comment afterwards Toate hărțile suportate (*.vmap *.h3m);;Hărți VCMI(*.vmap);;Hărți HoMM3(*.h3m) - + Recently Opened Files AI-generated, needs review by native speaker; delete this comment afterwards Fișiere deschise recent - + Map validation AI-generated, needs review by native speaker; delete this comment afterwards Validare hartă - + Map has critical problems and most probably will not be playable. Open Validator from the Map menu to see issues found AI-generated, needs review by native speaker; delete this comment afterwards Harta are probleme critice și cel mai probabil nu va fi jucabilă. Deschide Validatorul din meniul Hartă pentru a vedea problemele găsite - + Map has some errors. Open Validator from the Map menu to see issues found AI-generated, needs review by native speaker; delete this comment afterwards Harta are unele erori. Deschide Validatorul din meniul Hartă pentru a vedea problemele găsite - + Failed to save map AI-generated, needs review by native speaker; delete this comment afterwards Nu s-a putut salva harta - + Save map AI-generated, needs review by native speaker; delete this comment afterwards Salvează hartă - + VCMI maps (*.vmap) AI-generated, needs review by native speaker; delete this comment afterwards Hărți VCMI (*.vmap) - + Type AI-generated, needs review by native speaker; delete this comment afterwards Tip - + Towns AI-generated, needs review by native speaker; delete this comment afterwards Orașe - + Objects AI-generated, needs review by native speaker; delete this comment afterwards Obiecte - + Heroes AI-generated, needs review by native speaker; delete this comment afterwards Eroi - + Artifacts AI-generated, needs review by native speaker; delete this comment afterwards Artefacte - + Resources AI-generated, needs review by native speaker; delete this comment afterwards Resurse - + Banks AI-generated, needs review by native speaker; delete this comment afterwards Bănci - + Dwellings AI-generated, needs review by native speaker; delete this comment afterwards Locuințe - + Grounds AI-generated, needs review by native speaker; delete this comment afterwards Terenuri - + Teleports AI-generated, needs review by native speaker; delete this comment afterwards Teleportați - + Mines AI-generated, needs review by native speaker; delete this comment afterwards Mine - + Triggers AI-generated, needs review by native speaker; delete this comment afterwards Declanșatori - + Monsters AI-generated, needs review by native speaker; delete this comment afterwards Monștri - + Quests AI-generated, needs review by native speaker; delete this comment afterwards Misiuni - + Wog Objects AI-generated, needs review by native speaker; delete this comment afterwards Obiecte WoG - + Obstacles AI-generated, needs review by native speaker; delete this comment afterwards Obstacole - + Other AI-generated, needs review by native speaker; delete this comment afterwards Altele - + Mods loading problem AI-generated, needs review by native speaker; delete this comment afterwards Problemă la încărcarea modurilor - + Critical error during Mods loading. Disable invalid mods and restart. AI-generated, needs review by native speaker; delete this comment afterwards Eroare critică în timpul încărcării modurilor. Dezactivează modurile invalide și repornește. - - + + View surface AI-generated, needs review by native speaker; delete this comment afterwards Vezi suprafața - + No objects selected AI-generated, needs review by native speaker; delete this comment afterwards Niciun obiect selectat - + This operation is irreversible. Do you want to continue? AI-generated, needs review by native speaker; delete this comment afterwards Această operațiune este ireversibilă. Vrei să continui? - + Errors occurred. %1 objects were not updated AI-generated, needs review by native speaker; delete this comment afterwards Au apărut erori. %1 obiecte nu au fost actualizate - + Save to image AI-generated, needs review by native speaker; delete this comment afterwards Salvează ca imagine - + Select maps to convert AI-generated, needs review by native speaker; delete this comment afterwards Selectează hărțile de convertit - + HoMM3 maps(*.h3m) AI-generated, needs review by native speaker; delete this comment afterwards Hărți HoMM3 (*.h3m) - + Choose directory to save converted maps AI-generated, needs review by native speaker; delete this comment afterwards Alege directorul pentru a salva hărțile convertite - + Operation completed AI-generated, needs review by native speaker; delete this comment afterwards Operațiune finalizată - + Successfully converted %1 maps AI-generated, needs review by native speaker; delete this comment afterwards %1 hărți convertite cu succes - + Failed to convert the map. Abort operation AI-generated, needs review by native speaker; delete this comment afterwards Conversia hărții a eșuat. Se oprește operațiunea - + Select campaign to convert AI-generated, needs review by native speaker; delete this comment afterwards Selectează campania de convertit - + HoMM3 campaigns (*.h3c) AI-generated, needs review by native speaker; delete this comment afterwards Campanii HoMM3 (*.h3c) - + Select destination file AI-generated, needs review by native speaker; delete this comment afterwards Selectează fișierul de destinație - + VCMI campaigns (*.vcmp) AI-generated, needs review by native speaker; delete this comment afterwards Campanii VCMI (*.vcmp) @@ -1530,30 +1560,30 @@ MapController - + Hero %1 cannot be created as NEUTRAL. AI-generated, needs review by native speaker; delete this comment afterwards Eroul %1 nu poate fi creat ca NEUTRU. - + Missing Required Mod AI-generated, needs review by native speaker; delete this comment afterwards Mod necesar lipsă - + Do you want to do that now ? -AI-generated, needs review by native speaker; delete this comment afterwards + AI-generated, needs review by native speaker; delete this comment afterwards Vrei să faci asta acum? - + This object's mod is mandatory for map to remain valid. AI-generated, needs review by native speaker; delete this comment afterwards Modul acestui obiect este obligatoriu pentru ca harta să rămână validă. @@ -1658,6 +1688,30 @@ Vrei să faci asta acum? Mesaj + + MineSelector + + + + Select Mines + + + + + Mine Selector + + + + + Resource + Resursă + + + + Mines + Mine + + ModSettings @@ -1808,28 +1862,25 @@ Vrei să faci asta acum? - PlayerSettings + PlayerSettingsDialog - + Player settings - AI-generated, needs review by native speaker; delete this comment afterwards Setări jucător - + Players - AI-generated, needs review by native speaker; delete this comment afterwards Jucători - + 1 - + Ok - AI-generated, needs review by native speaker; delete this comment afterwards Ok @@ -1887,81 +1938,81 @@ Vrei să faci asta acum? Abilități secundare: - + Compliant AI-generated, needs review by native speaker; delete this comment afterwards Docil - + Friendly AI-generated, needs review by native speaker; delete this comment afterwards Prietenos - + Aggressive AI-generated, needs review by native speaker; delete this comment afterwards Agresiv - + Hostile AI-generated, needs review by native speaker; delete this comment afterwards Ostil - + Savage AI-generated, needs review by native speaker; delete this comment afterwards Sălbatic - - + + No patrol AI-generated, needs review by native speaker; delete this comment afterwards Fără patrulare - + POWER RANK AI-generated, needs review by native speaker; delete this comment afterwards RANG PUTERE - + HERO TYPE AI-generated, needs review by native speaker; delete this comment afterwards TIP EROU - + Hero class AI-generated, needs review by native speaker; delete this comment afterwards Clasă erou - + Portrait AI-generated, needs review by native speaker; delete this comment afterwards Portret - + Skills AI-generated, needs review by native speaker; delete this comment afterwards Abilități - + Artifacts AI-generated, needs review by native speaker; delete this comment afterwards Artefacte - - + + %n tile(s) AI-generated, needs review by native speaker; delete this comment afterwards @@ -1971,353 +2022,353 @@ Vrei să faci asta acum? - + Buildings AI-generated, needs review by native speaker; delete this comment afterwards Clădiri - + Events AI-generated, needs review by native speaker; delete this comment afterwards Evenimente - + Resource AI-generated, needs review by native speaker; delete this comment afterwards Resursă - + Artifact reward AI-generated, needs review by native speaker; delete this comment afterwards Recompensă artefact - + Quest AI-generated, needs review by native speaker; delete this comment afterwards Misiune - + Identifier AI-generated, needs review by native speaker; delete this comment afterwards Identificator - + ID AI-generated, needs review by native speaker; delete this comment afterwards ID - + SubID AI-generated, needs review by native speaker; delete this comment afterwards SubID - + InstanceName AI-generated, needs review by native speaker; delete this comment afterwards NumeInstanță - + IsStatic AI-generated, needs review by native speaker; delete this comment afterwards EsteStatic - - + + neutral AI-generated, needs review by native speaker; delete this comment afterwards neutru - - + + Army AI-generated, needs review by native speaker; delete this comment afterwards Armată - - - + + - - - - - + + + + + + Owner AI-generated, needs review by native speaker; delete this comment afterwards Proprietar - - + + Same as town AI-generated, needs review by native speaker; delete this comment afterwards La fel ca orașul - - + + Removable units AI-generated, needs review by native speaker; delete this comment afterwards Unități eliminabile - - + + Placeholder type AI-generated, needs review by native speaker; delete this comment afterwards Tip substituent - - + + Power rank AI-generated, needs review by native speaker; delete this comment afterwards Rang putere - - - - + + + + Hero type AI-generated, needs review by native speaker; delete this comment afterwards Tip erou - - + + Experience AI-generated, needs review by native speaker; delete this comment afterwards Experiență - - + + MALE AI-generated, needs review by native speaker; delete this comment afterwards MASCULIN - - + + FEMALE AI-generated, needs review by native speaker; delete this comment afterwards FEMININ - - + + Gender AI-generated, needs review by native speaker; delete this comment afterwards Gen - - + + Name AI-generated, needs review by native speaker; delete this comment afterwards Nume - - + + Biography AI-generated, needs review by native speaker; delete this comment afterwards Biografie - - + + Spells AI-generated, needs review by native speaker; delete this comment afterwards Vrăji - - + + Patrol radius AI-generated, needs review by native speaker; delete this comment afterwards Rază de patrulare - - + + Town name AI-generated, needs review by native speaker; delete this comment afterwards Numele orașului - - + + Same as player AI-generated, needs review by native speaker; delete this comment afterwards La fel ca jucătorul - - - - - - - - - + + + + + + + + + Message AI-generated, needs review by native speaker; delete this comment afterwards Mesaj - - + + Spell AI-generated, needs review by native speaker; delete this comment afterwards Vraja - - + + Productivity AI-generated, needs review by native speaker; delete this comment afterwards Productivitate - - - - + + + + Amount AI-generated, needs review by native speaker; delete this comment afterwards Cantitate - + Character AI-generated, needs review by native speaker; delete this comment afterwards Caracter - + Select town AI-generated, needs review by native speaker; delete this comment afterwards Selectează orașul - - + + Never flees AI-generated, needs review by native speaker; delete this comment afterwards Nu fuge niciodată - - + + Not growing AI-generated, needs review by native speaker; delete this comment afterwards Nu se dezvoltă - - + + Reward AI-generated, needs review by native speaker; delete this comment afterwards Recompensă - - + + Remove after AI-generated, needs review by native speaker; delete this comment afterwards Elimină după - - + + Human trigger AI-generated, needs review by native speaker; delete this comment afterwards Declanșator uman - - + + Cpu trigger AI-generated, needs review by native speaker; delete this comment afterwards Declanșator CPU - - + + First visit text AI-generated, needs review by native speaker; delete this comment afterwards Text la prima vizită - - + + Next visit text AI-generated, needs review by native speaker; delete this comment afterwards Text la următoarea vizită - - + + Completed text AI-generated, needs review by native speaker; delete this comment afterwards Text completat - - - + + + Repeat quest AI-generated, needs review by native speaker; delete this comment afterwards Repetă misiunea - - + + Time limit AI-generated, needs review by native speaker; delete this comment afterwards Limită de timp - + UNFLAGGABLE AI-generated, needs review by native speaker; delete this comment afterwards NEETICHETABIL - + Can't place object AI-generated, needs review by native speaker; delete this comment afterwards Nu se poate plasa obiectul - + There can only be one grail object on the map. AI-generated, needs review by native speaker; delete this comment afterwards Poate exista un singur obiect cu potir pe hartă. - + (submod of %1) AI-generated, needs review by native speaker; delete this comment afterwards (submodul din %1) - + The mod '%1'%2, is required by an object on the map. Add it to the map's required mods in Map->General settings. should be consistent with Map->General menu entry translation @@ -2365,14 +2416,14 @@ Adaugă-l în modurile necesare ale hărții din Hartă->Setări generale. - + Hero Level: %1 AI-generated, needs review by native speaker; delete this comment afterwards Nivel erou: %1 - + Hero Experience: %1 AI-generated, needs review by native speaker; delete this comment afterwards Experiență erou: %1 @@ -2385,49 +2436,49 @@ Adaugă-l în modurile necesare ale hărții din Hartă->Setări generale. - + Mana Percentage: %1 AI-generated, needs review by native speaker; delete this comment afterwards Procentaj mană: %1 - + Primary Skills: %1/%2/%3/%4 AI-generated, needs review by native speaker; delete this comment afterwards Abilități primare: %1/%2/%3/%4 - + Resources: %1 AI-generated, needs review by native speaker; delete this comment afterwards Resurse: %1 - + Artifacts: %1 AI-generated, needs review by native speaker; delete this comment afterwards Artefacte: %1 - + Spells: %1 AI-generated, needs review by native speaker; delete this comment afterwards Vrăji: %1 - + Secondary Skills: %1 AI-generated, needs review by native speaker; delete this comment afterwards Abilități secundare: %1 - + Creatures: %1 AI-generated, needs review by native speaker; delete this comment afterwards Creaturi: %1 @@ -2451,43 +2502,43 @@ Adaugă-l în modurile necesare ale hărții din Hartă->Setări generale.Jucători: %1 - + Rewards: AI-generated, needs review by native speaker; delete this comment afterwards Recompense: - + Reward Message: %1 AI-generated, needs review by native speaker; delete this comment afterwards Mesaj recompensă: %1 - + Mana Diff: %1 AI-generated, needs review by native speaker; delete this comment afterwards Diferență mană: %1 - + Move Points: %1 AI-generated, needs review by native speaker; delete this comment afterwards Puncte de mișcare: %1 - + Move Percentage: %1 AI-generated, needs review by native speaker; delete this comment afterwards Procentaj mișcare: %1 - + Spell Cast: %1 (%2) AI-generated, needs review by native speaker; delete this comment afterwards Vrajă folosită: %1 (%2) - + Bonuses: %1 AI-generated, needs review by native speaker; delete this comment afterwards Bonusuri: %1 @@ -2989,20 +3040,20 @@ Adaugă-l în modurile necesare ale hărții din Hartă->Setări generale.Jucători - + None AI-generated, needs review by native speaker; delete this comment afterwards Niciunul - + Day %1 AI-generated, needs review by native speaker; delete this comment afterwards Ziua %1 - - + + Reward %1 AI-generated, needs review by native speaker; delete this comment afterwards Recompensă %1 @@ -3268,8 +3319,8 @@ Adaugă-l în modurile necesare ale hărții din Hartă->Setări generale. - - + + Player position AI-generated, needs review by native speaker; delete this comment afterwards Poziția jucătorului @@ -3329,57 +3380,57 @@ Adaugă-l în modurile necesare ale hărții din Hartă->Setări generale.Jucător - + Open map AI-generated, needs review by native speaker; delete this comment afterwards Deschide hartă - + All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) AI-generated, needs review by native speaker; delete this comment afterwards Toate hărțile suportate (*.vmap *.h3m);;Hărți VCMI(*.vmap);;Hărți HoMM3(*.h3m) - - + + Error AI-generated, needs review by native speaker; delete this comment afterwards Eroare - - + + Could not open the file. AI-generated, needs review by native speaker; delete this comment afterwards Nu s-a putut deschide fișierul. - + Save map AI-generated, needs review by native speaker; delete this comment afterwards Salvează hartă - + VCMI maps (*.vmap); AI-generated, needs review by native speaker; delete this comment afterwards Hărți VCMI (*.vmap); - + HoMM3 maps (*.h3m); AI-generated, needs review by native speaker; delete this comment afterwards Hărți HoMM3 (*.h3m); - + Source scenario AI-generated, needs review by native speaker; delete this comment afterwards Scenariu sursă - + Hero AI-generated, needs review by native speaker; delete this comment afterwards Erou @@ -3419,7 +3470,7 @@ Adaugă-l în modurile necesare ale hărții din Hartă->Setări generale. - + Building AI-generated, needs review by native speaker; delete this comment afterwards Clădire @@ -3450,7 +3501,7 @@ Adaugă-l în modurile necesare ale hărții din Hartă->Setări generale. - + Secondary skill AI-generated, needs review by native speaker; delete this comment afterwards Abilitate secundară @@ -3458,7 +3509,7 @@ Adaugă-l în modurile necesare ale hărții din Hartă->Setări generale. - + Resource AI-generated, needs review by native speaker; delete this comment afterwards Resursă @@ -3560,54 +3611,679 @@ Adaugă-l în modurile necesare ale hărții din Hartă->Setări generale.Rar (%1, %2, %3, %4) - + strongest hero AI-generated, needs review by native speaker; delete this comment afterwards eroul cel mai puternic - + generated hero AI-generated, needs review by native speaker; delete this comment afterwards erou generat - + random hero AI-generated, needs review by native speaker; delete this comment afterwards erou aleatoriu - + %1 spell for %2 AI-generated, needs review by native speaker; delete this comment afterwards %1 vrajă pentru %2 - + %1 %2 for %3 AI-generated, needs review by native speaker; delete this comment afterwards %1 %2 pentru %3 - + %1 artifact for %2 AI-generated, needs review by native speaker; delete this comment afterwards %1 artefact pentru %2 - + %1 spell scroll for %2 AI-generated, needs review by native speaker; delete this comment afterwards %1 pergament cu vrajă pentru %2 - + Primary skill (Attack: %1, Defense: %2, Spell: %3, Knowledge: %4) for %5 AI-generated, needs review by native speaker; delete this comment afterwards Abilitate primară (Atac: %1, Apărare: %2, Magie: %3, Cunoaștere: %4) pentru %5 + + TemplateEditor + + + + VCMI Template Editor + + + + + File + Fișier + + + + Edit + Editare + + + + View + Vizualizare + + + + Toolbar + Bară de unelte + + + + Selected Template: + + + + + + + Add + Adaugă + + + + Remove + + + + + Rename + + + + + General + General + + + + Name + Nume + + + + Description + + + + + Min Size + + + + + + + X + + + + + + + Y + + + + + + + Z + + + + + Max Size + + + + + + Players + Jucători + + + + Human + + + + + Allowed water content + + + + + + + None + Niciunul + + + + + Normal + Normală + + + + Islands + Insule + + + + Zone + + + + + Visualisation + + + + + Position + + + + + + Size + + + + + ID + ID + + + + + Type + Tip + + + + Owner + Proprietar + + + + Zone link + + + + + + + Mines + Mine + + + + + Custom objects + + + + + + Towns + Orașe + + + + + Terrain + + + + + + + + Treasure + + + + + Town info + + + + + Town count + + + + + + + + Player + Jucător + + + + + + + Neutral + Neutru + + + + Castle count + + + + + Town density + + + + + Castle density + + + + + Match terrain to town + + + + + Terrain types + + + + + Banned terrain types + + + + + Towns are same type + + + + + Allowed towns + + + + + Banned towns + + + + + Town hints + + + + + Monsters + Monștri + + + + Allowed monsters + + + + + Banned monsters + + + + + Strength + + + + + Objects + Obiecte + + + + Connections + + + + + Open + Deschide + + + + Save + Salvează + + + + New + Nou + + + + Save as... + Salvează ca... + + + + Ctrl+Shift+S + Ctrl+Shift+S + + + + Add zone + + + + + Remove zone + + + + + + Del + Del + + + + Auto position + + + + + Ctrl+P + Ctrl+P + + + + Zoom in + Mărește + + + + Ctrl++ + Ctrl++ + + + + Zoom out + Micșorează + + + + Ctrl+- + Ctrl+- + + + + Zoom auto + + + + + Ctrl+Shift+: + + + + + Zoom reset + Resetare zoom + + + + Ctrl+Shift+= + Ctrl+Shift+= + + + + Min + + + + + Max + + + + + Action + + + + + + Delete + + + + + ID: %1 + + + + + Max treasure: %1 + + + + + Player start + + + + + CPU start + + + + + Junction + + + + + Water + + + + + Sealed + + + + + + Random + Aleatoriu + + + + Weak + Slabă + + + + Strong + Puternică + + + + Zone A + + + + + Zone B + + + + + Guard + + + + + Road + + + + + Guarded + + + + + Fictive + + + + + Repulsive + + + + + Wide + + + + + Force portal + + + + + Yes + + + + + No + + + + + Zone A: %1 +Zone B: %2 +Guard: %3 + + + + + Confirmation + Confirmare + + + + Unsaved changes will be lost, are you sure? + Modificările nesalvate vor fi pierdute, ești sigur? + + + + Open template + + + + + VCMI templates(*.json) + + + + + Save template + + + + + VCMI templates (*.json) + + + + + + Enter Name + + + + + + Name: + + + + + Already existing! + + + + + At template with this name is already existing. + + + + + To few templates! + + + + + At least one template should remain after removing. + + + + + + Error + Eroare + + + + + Not implemented yet! + + + + + TerrainSelector + + + + Select Terrains + + + + + Terrain Selector + + + TimedEvent @@ -4010,6 +4686,40 @@ Adaugă-l în modurile necesare ale hărții din Hartă->Setări generale.Toate înregistrările de text existente pentru această limbă vor fi șterse. Continui? + + TreasureSelector + + + + Select Treasures + + + + + Treasure Selector + + + + + Min + + + + + Max + + + + + Density + + + + + Action + + + Validator @@ -4474,25 +5184,25 @@ Adaugă-l în modurile necesare ale hărții din Hartă->Setări generale.Anulează - + No template AI-generated, needs review by native speaker; delete this comment afterwards Fără șablon - + No template for parameters specified. Random map cannot be generated. AI-generated, needs review by native speaker; delete this comment afterwards Nu există șablon pentru parametrii specificați. Harta aleatorie nu poate fi generată. - + RMG failure AI-generated, needs review by native speaker; delete this comment afterwards Eroare RMG - + [default] AI-generated, needs review by native speaker; delete this comment afterwards [implicit] @@ -4501,31 +5211,31 @@ Adaugă-l în modurile necesare ale hărții din Hartă->Setări generale. main - + Filepath of the map to open. AI-generated, needs review by native speaker; delete this comment afterwards Calea fișierului hărții de deschis. - + Extract original H3 archives into a separate folder. AI-generated, needs review by native speaker; delete this comment afterwards Extrage arhivele originale H3 într-un folder separat. - + From an extracted archive, it Splits TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 and Un44 into individual PNG's. AI-generated, needs review by native speaker; delete this comment afterwards Dintr-o arhivă extrasă, separă TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 și Un44 în fișiere PNG individuale. - + From an extracted archive, Converts single Images (found in Images folder) from .pcx to png. AI-generated, needs review by native speaker; delete this comment afterwards Dintr-o arhivă extrasă, convertește imaginile unice (din folderul Images) din .pcx în png. - + Delete original files, for the ones split / converted. AI-generated, needs review by native speaker; delete this comment afterwards Șterge fișierele originale, pentru cele separate / convertite. diff --git a/mapeditor/translation/russian.ts b/mapeditor/translation/russian.ts index fe5685d1e..4e16b7db9 100644 --- a/mapeditor/translation/russian.ts +++ b/mapeditor/translation/russian.ts @@ -47,7 +47,7 @@ CampaignEditor - + VCMI Campaign Editor AI-generated, needs review by native speaker; delete this comment afterwards Редактор кампаний VCMI @@ -119,40 +119,40 @@ Показать полный фон - + Scenario editor AI-generated, needs review by native speaker; delete this comment afterwards Редактор сценариев - + Confirmation Подтверждение - + Unsaved changes will be lost, are you sure? Несохранённые изменения будут потеряны. Вы уверены? - + Open map Открыть карту - + All supported campaigns (*.vcmp *.h3c);;VCMI campaigns(*.vcmp);;HoMM3 campaigns(*.h3c) AI-generated, needs review by native speaker; delete this comment afterwards Все поддерживаемые кампании (*.vcmp *.h3c);;Кампании VCMI (*.vcmp);;Кампании HoMM3 (*.h3c) - + Save campaign AI-generated, needs review by native speaker; delete this comment afterwards Сохранить кампанию - + VCMI campaigns (*.vcmp) AI-generated, needs review by native speaker; delete this comment afterwards Кампании VCMI (*.vcmp) @@ -162,7 +162,7 @@ CampaignProperties - + Campaign Properties AI-generated, needs review by native speaker; delete this comment afterwards Свойства кампании @@ -297,47 +297,47 @@ Заключительное видео - + Custom AI-generated, needs review by native speaker; delete this comment afterwards Пользовательский - + Infix AI-generated, needs review by native speaker; delete this comment afterwards Инфикс - + X - + Y - + Label Pos X AI-generated, needs review by native speaker; delete this comment afterwards Позиция метки X - + Label Pos Y AI-generated, needs review by native speaker; delete this comment afterwards Позиция метки Y - + Fewer Scenarios AI-generated, needs review by native speaker; delete this comment afterwards Меньше сценариев - + New Region setup supports fewer scenarios than before. Some will removed. Continue? AI-generated, needs review by native speaker; delete this comment afterwards Новая настройка региона поддерживает меньше сценариев, чем раньше. Некоторые будут удалены. Продолжить? @@ -371,6 +371,20 @@ Новое событие + + FactionSelector + + + + Select Factions + + + + + Faction Selector + + + GeneralSettings @@ -454,6 +468,16 @@ Artifact Артефакт + + + Save + Сохранить + + + + Cancel + Отмена + HeroSkillsWidget @@ -586,7 +610,7 @@ MainWindow - + VCMI Map Editor Редактор карт VCMI @@ -597,763 +621,769 @@ - + Open Recent Открыть последнее - + Map Карта - + Edit Правка - + View Вид - + Player Игрок - + Toolbar Панель инструментов - + Minimap Мини-карта - + Map Objects View Объекты карты - + Browser Навигатор - + Inspector Инспектор - + Property Свойство - + Value Значение - + Tools Инструменты - + Painting Рисование - + Terrains Земли - + Roads Дороги - + Rivers Реки - + Preview Предпросмотр - + Open Открыть - + Ctrl+O AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+O - + More... Ещё... - + Save Сохранить - + Ctrl+S AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+S - + New Создать - + Ctrl+N AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+N - + Save as... Сохранить как - + Ctrl+Shift+S Ctrl+Shift+S - - + + Campaign editor AI-generated, needs review by native speaker; delete this comment afterwards Редактор кампаний - - - - + + + Template editor + + + + + + + View underground Вид на подземелье - + Ctrl+U AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+U - + Pass Проходимость - + Ctrl+Shift+P AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+P - + Cut Вырезать - + Ctrl+X AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+X - + Copy Копировать - + Ctrl+C AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+C - + Paste Вставить - + Ctrl+V AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+V - + Fill Заливка - + Fills the selection with obstacles Заливает выбранное препятствиями - + Grid Сетка - + Ctrl+G AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+G - + General Общее - + Map title and description Название и описание карты - + Ctrl+Enter AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Enter - + Players settings Настройки игроков - + Ctrl+P AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+P - - + + Undo Отменить - + Ctrl+Z AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Z - + Redo Повторить - + Ctrl+Y AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Y - + Erase Удалить - + Del AI-generated, needs review by native speaker; delete this comment afterwards Del - + Neutral Нейтральный - + Ctrl+0 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+0 - + Validate Проверить - + Ctrl+Shift+V AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+V - - - - + + + + Update appearance Обновить вид - + Recreate obstacles Обновить препятствия - + Player 1 Игрок 1 - + Ctrl+1 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+1 - + Player 2 Игрок 2 - + Ctrl+2 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+2 - + Player 3 Игрок 3 - + Ctrl+3 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+3 - + Player 4 Игрок 4 - + Ctrl+4 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+4 - + Player 5 Игрок 5 - + Ctrl+5 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+5 - + Player 6 Игрок 6 - + Ctrl+6 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+6 - + Player 7 Игрок 7 - + Ctrl+7 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+7 - + Player 8 Игрок 8 - + Ctrl+8 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+8 - + Export as... Экспортировать как... - + Ctrl+E AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+E - + Translations Переводы - + Ctrl+T Ctrl+T - - + + h3m converter Конвертер h3m - + Ctrl+Shift+M AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+M - - + + h3c converter Конвертер h3m {3c?} - + Ctrl+Shift+C AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+C - + Lock Заблокировать - + Lock objects on map to avoid unnecessary changes Заблокировать объекты на карте, чтобы избежать ненужных изменений - + Ctrl+L Ctrl+L - + Unlock Разблокировать - + Unlock all objects on the map Разблокировать все объекты на карте - + Ctrl+Shift+L Ctrl+Shift+L - + Zoom in Приблизить - + Ctrl++ AI-generated, needs review by native speaker; delete this comment afterwards Ctrl++ - + Zoom out Отдалить - + Ctrl+- Ctrl+- - + Zoom reset Сбросить масштаб - + Ctrl+Shift+= Ctrl+Shift+= - + Confirmation Подтверждение - + Unsaved changes will be lost, are you sure? Несохранённые изменения будут потеряны. Вы уверены? - + Mods are required AI-generated, needs review by native speaker; delete this comment afterwards Требуются моды - + Failed to open map AI-generated, needs review by native speaker; delete this comment afterwards Не удалось открыть карту - + Open map Открыть карту - + All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) Все поддерживаемые карты (*.vmap *.h3m);;Карты VCMI (*.vmap);;Карты Героев III (*.h3m) - + Recently Opened Files Недавно открытые файлы - + Map validation AI-generated, needs review by native speaker; delete this comment afterwards Проверка карты - + Map has critical problems and most probably will not be playable. Open Validator from the Map menu to see issues found AI-generated, needs review by native speaker; delete this comment afterwards Карта содержит критические ошибки и, скорее всего, будет непригодна для игры. Откройте Валидатор в меню Карта, чтобы просмотреть найденные проблемы - + Map has some errors. Open Validator from the Map menu to see issues found AI-generated, needs review by native speaker; delete this comment afterwards Карта содержит ошибки. Откройте Валидатор в меню Карта, чтобы просмотреть найденные проблемы - + Failed to save map AI-generated, needs review by native speaker; delete this comment afterwards Не удалось сохранить карту - + Save map Сохранить карту - + VCMI maps (*.vmap) Карты VCMI (*.vmap) - + Type Тип - + Towns Города - + Objects Объекты - + Heroes Герои - + Artifacts Артефакты - + Resources Ресурсы - + Banks Банки - + Dwellings Жилища - + Grounds Покрытия - + Teleports Телепорты - + Mines Шахты - + Triggers Триггеры - + Monsters Монстры - + Quests Квесты - + Wog Objects Объекты WoG - + Obstacles Препятствия - + Other Прочее - + Mods loading problem AI-generated, needs review by native speaker; delete this comment afterwards Проблема загрузки модов - + Critical error during Mods loading. Disable invalid mods and restart. AI-generated, needs review by native speaker; delete this comment afterwards Критическая ошибка при загрузке модов. Отключите неверные моды и перезапустите. - - + + View surface Вид на поверхность - + No objects selected Объекты не выбраны - + This operation is irreversible. Do you want to continue? Эта операция необратима. Хотите продолжить? - + Errors occurred. %1 objects were not updated Произошли ошибки. %1 объектов не было обновлено - + Save to image Сохранить как изображение - + Select maps to convert Выберите карты для конвертации - + HoMM3 maps(*.h3m) Карты HoMM3 (*.h3m) - + Choose directory to save converted maps Выберите каталог для сохранения конвертированных карт - + Operation completed Операция завершена - + Successfully converted %1 maps Успешно конвертировано %1 карт - + Failed to convert the map. Abort operation Не удалось конвертировать карту. Операция прервана - + Select campaign to convert AI-generated, needs review by native speaker; delete this comment afterwards Выберите кампанию для конвертации - + HoMM3 campaigns (*.h3c) AI-generated, needs review by native speaker; delete this comment afterwards Кампании HoMM3 (*.h3c) - + Select destination file AI-generated, needs review by native speaker; delete this comment afterwards Выберите файл назначения - + VCMI campaigns (*.vcmp) AI-generated, needs review by native speaker; delete this comment afterwards Кампании VCMI (*.vcmp) @@ -1362,29 +1392,29 @@ MapController - + Hero %1 cannot be created as NEUTRAL. Герой %1 не может быть создан как НЕЙТРАЛЬНЫЙ. - + Missing Required Mod AI-generated, needs review by native speaker; delete this comment afterwards Отсутствует обязательный мод - + Do you want to do that now ? -AI-generated, needs review by native speaker; delete this comment afterwards + AI-generated, needs review by native speaker; delete this comment afterwards Хотите сделать это сейчас? - + This object's mod is mandatory for map to remain valid. AI-generated, needs review by native speaker; delete this comment afterwards Мод этого объекта обязателен, чтобы карта оставалась допустимой. @@ -1474,6 +1504,30 @@ Do you want to do that now ? Сообщение + + MineSelector + + + + Select Mines + + + + + Mine Selector + + + + + Resource + Ресурс + + + + Mines + Шахты + + ModSettings @@ -1608,26 +1662,26 @@ Do you want to do that now ? - PlayerSettings + PlayerSettingsDialog - + Player settings - Настройки игрока + Настройки игрока - + Players - Игрок + - + 1 - 1 + 1 - + Ok - ОК + ОК @@ -1679,72 +1733,72 @@ Do you want to do that now ? Вторичные навыки: - + Compliant Сговорчивый - + Friendly Дружелюбный - + Aggressive Агрессивный - + Hostile Враждебный - + Savage Дикий - - + + No patrol Без патруля - + POWER RANK AI-generated, needs review by native speaker; delete this comment afterwards РАНГ СИЛЫ - + HERO TYPE AI-generated, needs review by native speaker; delete this comment afterwards ТИП ГЕРОЯ - + Hero class AI-generated, needs review by native speaker; delete this comment afterwards Класс героя - + Portrait Портрет - + Skills Навыки - + Artifacts Артефакты - - + + %n tile(s) AI-generated, needs review by native speaker; delete this comment afterwards @@ -1754,343 +1808,343 @@ Do you want to do that now ? - + Buildings Постройки - + Events События - + Resource AI-generated, needs review by native speaker; delete this comment afterwards Ресурс - + Artifact reward AI-generated, needs review by native speaker; delete this comment afterwards Награда — артефакт - + Quest AI-generated, needs review by native speaker; delete this comment afterwards Задание - + Identifier AI-generated, needs review by native speaker; delete this comment afterwards Идентификатор - + ID AI-generated, needs review by native speaker; delete this comment afterwards ID - + SubID AI-generated, needs review by native speaker; delete this comment afterwards SubID - + InstanceName AI-generated, needs review by native speaker; delete this comment afterwards Имя экземпляра - + IsStatic AI-generated, needs review by native speaker; delete this comment afterwards Статичный - - + + neutral нейтральный - - + + Army AI-generated, needs review by native speaker; delete this comment afterwards Армия - - - + + - - - - - + + + + + + Owner AI-generated, needs review by native speaker; delete this comment afterwards Владелец - - + + Same as town AI-generated, needs review by native speaker; delete this comment afterwards Как у города - - + + Removable units AI-generated, needs review by native speaker; delete this comment afterwards Удаляемые отряды - - + + Placeholder type AI-generated, needs review by native speaker; delete this comment afterwards Тип заполнителя - - + + Power rank AI-generated, needs review by native speaker; delete this comment afterwards Ранг силы - - - - + + + + Hero type AI-generated, needs review by native speaker; delete this comment afterwards Тип героя - - + + Experience AI-generated, needs review by native speaker; delete this comment afterwards Опыт - - + + MALE AI-generated, needs review by native speaker; delete this comment afterwards МУЖСКОЙ - - + + FEMALE AI-generated, needs review by native speaker; delete this comment afterwards ЖЕНСКИЙ - - + + Gender AI-generated, needs review by native speaker; delete this comment afterwards Пол - - + + Name AI-generated, needs review by native speaker; delete this comment afterwards Имя - - + + Biography AI-generated, needs review by native speaker; delete this comment afterwards Биография - - + + Spells Заклинания - - + + Patrol radius AI-generated, needs review by native speaker; delete this comment afterwards Радиус патруля - - + + Town name AI-generated, needs review by native speaker; delete this comment afterwards Название города - - + + Same as player AI-generated, needs review by native speaker; delete this comment afterwards Как у игрока - - - - - - - - - + + + + + + + + + Message Сообщение - - + + Spell Заклинание - - + + Productivity AI-generated, needs review by native speaker; delete this comment afterwards Производительность - - - - + + + + Amount AI-generated, needs review by native speaker; delete this comment afterwards Количество - + Character AI-generated, needs review by native speaker; delete this comment afterwards Персонаж - + Select town AI-generated, needs review by native speaker; delete this comment afterwards Выбрать город - - + + Never flees AI-generated, needs review by native speaker; delete this comment afterwards Никогда не убегает - - + + Not growing AI-generated, needs review by native speaker; delete this comment afterwards Не растёт - - + + Reward Награда - - + + Remove after AI-generated, needs review by native speaker; delete this comment afterwards Удалить после - - + + Human trigger AI-generated, needs review by native speaker; delete this comment afterwards Триггер игрока - - + + Cpu trigger AI-generated, needs review by native speaker; delete this comment afterwards Триггер ИИ - - + + First visit text AI-generated, needs review by native speaker; delete this comment afterwards Текст при первом визите - - + + Next visit text AI-generated, needs review by native speaker; delete this comment afterwards Текст при следующем визите - - + + Completed text AI-generated, needs review by native speaker; delete this comment afterwards Текст при завершении - - - + + + Repeat quest AI-generated, needs review by native speaker; delete this comment afterwards Повторное задание - - + + Time limit AI-generated, needs review by native speaker; delete this comment afterwards Ограничение по времени - + UNFLAGGABLE НЕФЛАГУЕМЫЙ - + Can't place object Невозможно разместить объект - + There can only be one grail object on the map. На карте может быть только один Грааль. - + (submod of %1) AI-generated, needs review by native speaker; delete this comment afterwards (подмод %1) - + The mod '%1'%2, is required by an object on the map. Add it to the map's required mods in Map->General settings. should be consistent with Map->General menu entry translation @@ -2137,14 +2191,14 @@ Add it to the map's required mods in Map->General settings. - + Hero Level: %1 AI-generated, needs review by native speaker; delete this comment afterwards Уровень героя: %1 - + Hero Experience: %1 AI-generated, needs review by native speaker; delete this comment afterwards Опыт героя: %1 @@ -2157,49 +2211,49 @@ Add it to the map's required mods in Map->General settings. - + Mana Percentage: %1 AI-generated, needs review by native speaker; delete this comment afterwards Процент маны: %1 - + Primary Skills: %1/%2/%3/%4 AI-generated, needs review by native speaker; delete this comment afterwards Основные навыки: %1/%2/%3/%4 - + Resources: %1 AI-generated, needs review by native speaker; delete this comment afterwards Ресурсы: %1 - + Artifacts: %1 AI-generated, needs review by native speaker; delete this comment afterwards Артефакты: %1 - + Spells: %1 AI-generated, needs review by native speaker; delete this comment afterwards Заклинания: %1 - + Secondary Skills: %1 AI-generated, needs review by native speaker; delete this comment afterwards Вторичные навыки: %1 - + Creatures: %1 AI-generated, needs review by native speaker; delete this comment afterwards Существа: %1 @@ -2223,43 +2277,43 @@ Add it to the map's required mods in Map->General settings. Игроки: %1 - + Rewards: AI-generated, needs review by native speaker; delete this comment afterwards Награды: - + Reward Message: %1 AI-generated, needs review by native speaker; delete this comment afterwards Сообщение о награде: %1 - + Mana Diff: %1 AI-generated, needs review by native speaker; delete this comment afterwards Разница маны: %1 - + Move Points: %1 AI-generated, needs review by native speaker; delete this comment afterwards Очки передвижения: %1 - + Move Percentage: %1 AI-generated, needs review by native speaker; delete this comment afterwards Процент передвижения: %1 - + Spell Cast: %1 (%2) AI-generated, needs review by native speaker; delete this comment afterwards Заклинание применено: %1 (%2) - + Bonuses: %1 AI-generated, needs review by native speaker; delete this comment afterwards Бонусы: %1 @@ -2691,18 +2745,18 @@ Add it to the map's required mods in Map->General settings. Игроки - + None Нет - + Day %1 День %1 - - + + Reward %1 Награда %1 @@ -2954,8 +3008,8 @@ Add it to the map's required mods in Map->General settings. - - + + Player position AI-generated, needs review by native speaker; delete this comment afterwards Позиция игрока @@ -3013,54 +3067,54 @@ Add it to the map's required mods in Map->General settings. Игрок - + Open map Открыть карту - + All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) Все поддерживаемые карты (*.vmap *.h3m);;Карты VCMI (*.vmap);;Карты Героев III (*.h3m) - - + + Error AI-generated, needs review by native speaker; delete this comment afterwards Ошибка - - + + Could not open the file. AI-generated, needs review by native speaker; delete this comment afterwards Не удалось открыть файл. - + Save map Сохранить карту - + VCMI maps (*.vmap); AI-generated, needs review by native speaker; delete this comment afterwards Карты VCMI (*.vmap); - + HoMM3 maps (*.h3m); AI-generated, needs review by native speaker; delete this comment afterwards Карты HoMM3 (*.h3m); - + Source scenario AI-generated, needs review by native speaker; delete this comment afterwards Исходный сценарий - + Hero AI-generated, needs review by native speaker; delete this comment afterwards Герой @@ -3099,7 +3153,7 @@ Add it to the map's required mods in Map->General settings. - + Building AI-generated, needs review by native speaker; delete this comment afterwards Здание @@ -3129,7 +3183,7 @@ Add it to the map's required mods in Map->General settings. - + Secondary skill AI-generated, needs review by native speaker; delete this comment afterwards Вторичный навык @@ -3137,7 +3191,7 @@ Add it to the map's required mods in Map->General settings. - + Resource AI-generated, needs review by native speaker; delete this comment afterwards Ресурс @@ -3236,54 +3290,679 @@ Add it to the map's required mods in Map->General settings. Редкий (%1, %2, %3, %4) - + strongest hero AI-generated, needs review by native speaker; delete this comment afterwards сильнейший герой - + generated hero AI-generated, needs review by native speaker; delete this comment afterwards сгенерированный герой - + random hero AI-generated, needs review by native speaker; delete this comment afterwards случайный герой - + %1 spell for %2 AI-generated, needs review by native speaker; delete this comment afterwards %1 заклинание для %2 - + %1 %2 for %3 AI-generated, needs review by native speaker; delete this comment afterwards %1 %2 для %3 - + %1 artifact for %2 AI-generated, needs review by native speaker; delete this comment afterwards %1 артефакт для %2 - + %1 spell scroll for %2 AI-generated, needs review by native speaker; delete this comment afterwards %1 свиток заклинания для %2 - + Primary skill (Attack: %1, Defense: %2, Spell: %3, Knowledge: %4) for %5 AI-generated, needs review by native speaker; delete this comment afterwards Основной навык (Атака: %1, Защита: %2, Магия: %3, Знания: %4) для %5 + + TemplateEditor + + + + VCMI Template Editor + + + + + File + Файл + + + + Edit + Правка + + + + View + Вид + + + + Toolbar + Панель инструментов + + + + Selected Template: + + + + + + + Add + Добавить + + + + Remove + Удалить + + + + Rename + + + + + General + Общее + + + + Name + Имя + + + + Description + + + + + Min Size + + + + + + + X + + + + + + + Y + + + + + + + Z + + + + + Max Size + + + + + + Players + + + + + Human + + + + + Allowed water content + + + + + + + None + Нет + + + + + Normal + Нормально + + + + Islands + Острова + + + + Zone + + + + + Visualisation + + + + + Position + + + + + + Size + + + + + ID + ID + + + + + Type + Тип + + + + Owner + Владелец + + + + Zone link + + + + + + + Mines + Шахты + + + + + Custom objects + + + + + + Towns + Города + + + + + Terrain + + + + + + + + Treasure + + + + + Town info + + + + + Town count + + + + + + + + Player + Игрок + + + + + + + Neutral + Нейтральный + + + + Castle count + + + + + Town density + + + + + Castle density + + + + + Match terrain to town + + + + + Terrain types + + + + + Banned terrain types + + + + + Towns are same type + + + + + Allowed towns + + + + + Banned towns + + + + + Town hints + + + + + Monsters + Монстры + + + + Allowed monsters + + + + + Banned monsters + + + + + Strength + + + + + Objects + Объекты + + + + Connections + + + + + Open + Открыть + + + + Save + Сохранить + + + + New + Создать + + + + Save as... + Сохранить как + + + + Ctrl+Shift+S + Ctrl+Shift+S + + + + Add zone + + + + + Remove zone + + + + + + Del + Del + + + + Auto position + + + + + Ctrl+P + Ctrl+P + + + + Zoom in + Приблизить + + + + Ctrl++ + Ctrl++ + + + + Zoom out + Отдалить + + + + Ctrl+- + Ctrl+- + + + + Zoom auto + + + + + Ctrl+Shift+: + + + + + Zoom reset + Сбросить масштаб + + + + Ctrl+Shift+= + Ctrl+Shift+= + + + + Min + + + + + Max + + + + + Action + + + + + + Delete + + + + + ID: %1 + + + + + Max treasure: %1 + + + + + Player start + + + + + CPU start + + + + + Junction + + + + + Water + + + + + Sealed + + + + + + Random + Случайно + + + + Weak + Слабо + + + + Strong + Сильно + + + + Zone A + + + + + Zone B + + + + + Guard + + + + + Road + + + + + Guarded + + + + + Fictive + + + + + Repulsive + + + + + Wide + + + + + Force portal + + + + + Yes + + + + + No + + + + + Zone A: %1 +Zone B: %2 +Guard: %3 + + + + + Confirmation + Подтверждение + + + + Unsaved changes will be lost, are you sure? + Несохранённые изменения будут потеряны. Вы уверены? + + + + Open template + + + + + VCMI templates(*.json) + + + + + Save template + + + + + VCMI templates (*.json) + + + + + + Enter Name + + + + + + Name: + + + + + Already existing! + + + + + At template with this name is already existing. + + + + + To few templates! + + + + + At least one template should remain after removing. + + + + + + Error + Ошибка + + + + + Not implemented yet! + + + + + TerrainSelector + + + + Select Terrains + + + + + Terrain Selector + + + TimedEvent @@ -3624,6 +4303,40 @@ Add it to the map's required mods in Map->General settings. Все существующие текстовые записи для этого языка будут удалены. Продолжить? + + TreasureSelector + + + + Select Treasures + + + + + Treasure Selector + + + + + Min + + + + + Max + + + + + Density + + + + + Action + + + Validator @@ -4021,22 +4734,22 @@ Add it to the map's required mods in Map->General settings. Отмена - + No template Без шаблона - + No template for parameters specified. Random map cannot be generated. Шаблон для указанных параметров отсутствует. Случайная карта не может быть создана. - + RMG failure Ошибка генерации случайной карты - + [default] AI-generated, needs review by native speaker; delete this comment afterwards [по умолчанию] @@ -4045,27 +4758,27 @@ Add it to the map's required mods in Map->General settings. main - + Filepath of the map to open. Путь к файлу карты для открытия. - + Extract original H3 archives into a separate folder. Распаковать архивы оригинальных Героев III в отдельную папку. - + From an extracted archive, it Splits TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 and Un44 into individual PNG's. Разделение в распакованном архиве TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 и Un44 на отдельные PNG. - + From an extracted archive, Converts single Images (found in Images folder) from .pcx to png. Преобразование в расспакованном архиве изображений .pcx в .png. - + Delete original files, for the ones split / converted. Удалить оригиналы для преобразованных файлов. diff --git a/mapeditor/translation/spanish.ts b/mapeditor/translation/spanish.ts index 1091ef13f..f8a71b9de 100644 --- a/mapeditor/translation/spanish.ts +++ b/mapeditor/translation/spanish.ts @@ -47,7 +47,7 @@ CampaignEditor - + VCMI Campaign Editor AI-generated, needs review by native speaker; delete this comment afterwards Editor de Campañas VCMI @@ -119,40 +119,40 @@ Mostrar fondo completo - + Scenario editor AI-generated, needs review by native speaker; delete this comment afterwards Editor de escenarios - + Confirmation Confirmación - + Unsaved changes will be lost, are you sure? Los cambios no guardados se perderán. Está usted seguro ? - + Open map Abrir mapa - + All supported campaigns (*.vcmp *.h3c);;VCMI campaigns(*.vcmp);;HoMM3 campaigns(*.h3c) AI-generated, needs review by native speaker; delete this comment afterwards Todas las campañas soportadas (*.vcmp *.h3c);;Campañas VCMI (*.vcmp);;Campañas HoMM3 (*.h3c) - + Save campaign AI-generated, needs review by native speaker; delete this comment afterwards Guardar campaña - + VCMI campaigns (*.vcmp) Campañas VCMI (*.vcmp) @@ -161,7 +161,7 @@ CampaignProperties - + Campaign Properties AI-generated, needs review by native speaker; delete this comment afterwards Propiedades de la campaña @@ -296,47 +296,47 @@ Video de cierre - + Custom AI-generated, needs review by native speaker; delete this comment afterwards Personalizado - + Infix AI-generated, needs review by native speaker; delete this comment afterwards Infijo - + X - + Y - + Label Pos X AI-generated, needs review by native speaker; delete this comment afterwards Posición de la etiqueta X - + Label Pos Y AI-generated, needs review by native speaker; delete this comment afterwards Posición de la etiqueta Y - + Fewer Scenarios AI-generated, needs review by native speaker; delete this comment afterwards Menos escenarios - + New Region setup supports fewer scenarios than before. Some will removed. Continue? AI-generated, needs review by native speaker; delete this comment afterwards La nueva configuración de la región admite menos escenarios que antes. Algunos serán eliminados. ¿Continuar? @@ -370,6 +370,20 @@ Nuevo evento + + FactionSelector + + + + Select Factions + + + + + Faction Selector + + + GeneralSettings @@ -453,6 +467,16 @@ Artifact Artefacto + + + Save + Guardar + + + + Cancel + Cancelar + HeroSkillsWidget @@ -585,7 +609,7 @@ MainWindow - + VCMI Map Editor Editor de Mapas de VCMI @@ -596,752 +620,758 @@ - + Open Recent Abrir recientes - + Map Mapa - + Edit Editar - + View Ver - + Player Jugador - + Toolbar Barra de herramientas - + Minimap Miniatura del mapa - + Map Objects View Vista de Objetos del Mapa - + Browser Navegador - + Inspector Inspector - + Property Propiedad - + Value Valor - + Tools Herramientas - + Painting Pintura - + Terrains Terrenos - + Roads Caminos - + Rivers Ríos - + Preview Vista previa - + Open Abrir - + Ctrl+O AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+O - + More... Más... - + Save Guardar - + Ctrl+S AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+S - + New Nuevo - + Ctrl+N AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+N - + Save as... Guardar como... - + Ctrl+Shift+S Ctrl+Shift+S - - + + Campaign editor AI-generated, needs review by native speaker; delete this comment afterwards Editor de campañas - - - - + + + Template editor + + + + + + + View underground Ver subterráneo - + Ctrl+U AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+U - + Pass Pasar - + Ctrl+Shift+P AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+P - + Cut Cortar - + Ctrl+X AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+X - + Copy Copiar - + Ctrl+C AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+C - + Paste Pegar - + Ctrl+V AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+V - + Fill Rellenar - + Fills the selection with obstacles Rellena la selección con obstáculos - + Grid Rejilla - + Ctrl+G AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+G - + General General - + Map title and description Título y descripción del mapa - + Ctrl+Enter AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Enter - + Players settings Configuración de jugadores - + Ctrl+P AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+P - - + + Undo Deshacer - + Ctrl+Z AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Z - + Redo Rehacer - + Ctrl+Y AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Y - + Erase Borrar - + Del AI-generated, needs review by native speaker; delete this comment afterwards Del - + Neutral Neutral - + Ctrl+0 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+0 - + Validate Validar - + Ctrl+Shift+V AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+V - - - - + + + + Update appearance Actualizar apariencia - + Recreate obstacles Recrear obstáculos - + Player 1 Jugador 1 - + Ctrl+1 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+1 - + Player 2 Jugador 2 - + Ctrl+2 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+2 - + Player 3 Jugador 3 - + Ctrl+3 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+3 - + Player 4 Jugador 4 - + Ctrl+4 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+4 - + Player 5 Jugador 5 - + Ctrl+5 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+5 - + Player 6 Jugador 6 - + Ctrl+6 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+6 - + Player 7 Jugador 7 - + Ctrl+7 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+7 - + Player 8 Jugador 8 - + Ctrl+8 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+8 - + Export as... Exportar como... - + Ctrl+E AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+E - + Translations Traducciones - + Ctrl+T Ctrl+T - - + + h3m converter Convertidor h3m - + Ctrl+Shift+M AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+M - - + + h3c converter Convertidor h3c - + Ctrl+Shift+C AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+C - + Lock Bloquear - + Lock objects on map to avoid unnecessary changes Bloquear objetos en el mapa para evitar cambios innecesarios - + Ctrl+L Ctrl+L - + Unlock Desbloquear - + Unlock all objects on the map Desbloquear todos los objetos en el mapa - + Ctrl+Shift+L Ctrl+Shift+L - + Zoom in Acercar - + Ctrl++ AI-generated, needs review by native speaker; delete this comment afterwards Ctrl++ - + Zoom out Alejar - + Ctrl+- Ctrl+- - + Zoom reset Restablecer zoom - + Ctrl+Shift+= Ctrl+Shift+= - + Confirmation Confirmación - + Unsaved changes will be lost, are you sure? Los cambios no guardados se perderán. Está usted seguro ? - + Mods are required Se requieren mods - + Failed to open map Error al abrir el mapa - + Open map Abrir mapa - + All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) Todos los mapas soportados (*.vmap *.h3m);;Mapas VCMI (*.vmap);;Mapas HoMM3 (*.h3m) - + Recently Opened Files Archivos abiertos recientemente - + Map validation Validación del mapa - + Map has critical problems and most probably will not be playable. Open Validator from the Map menu to see issues found El mapa tiene problemas críticos y probablemente no será jugable. Abre el Validador en el menú de Mapa para ver los problemas encontrados - + Map has some errors. Open Validator from the Map menu to see issues found El mapa tiene algunos errores. Abre el Validador en el menú de Mapa para ver los problemas encontrados - + Failed to save map Error al guardar el mapa - + Save map Guardar mapa - + VCMI maps (*.vmap) Mapas VCMI (*.vmap) - + Type Tipo - + Towns Ciudades - + Objects Objetos - + Heroes Héroes - + Artifacts Artefactos - + Resources Recursos - + Banks Bancos - + Dwellings Viviendas - + Grounds Terrenos - + Teleports Teletransportes - + Mines Minas - + Triggers Disparadores - + Monsters Monstruos - + Quests Misiones - + Wog Objects Objetos de WoG - + Obstacles Obstáculos - + Other Otros - + Mods loading problem Problema al cargar mods - + Critical error during Mods loading. Disable invalid mods and restart. Error crítico al cargar mods. Desactiva los mods no válidos y reinicia. - - + + View surface Ver superficie - + No objects selected No se han seleccionado objetos - + This operation is irreversible. Do you want to continue? Esta operación es irreversible. ¿Quieres continuar? - + Errors occurred. %1 objects were not updated Se produjeron errores. %1 objetos no fueron actualizados - + Save to image Guardar como imagen - + Select maps to convert Seleccionar mapas para convertir - + HoMM3 maps(*.h3m) Mapas HoMM3 (*.h3m) - + Choose directory to save converted maps Elegir directorio para guardar los mapas convertidos - + Operation completed Operación completada - + Successfully converted %1 maps %1 mapas convertidos exitosamente - + Failed to convert the map. Abort operation Error al convertir el mapa. Operación abortada - + Select campaign to convert Seleccionar campaña para convertir - + HoMM3 campaigns (*.h3c) Campañas HoMM3 (*.h3c) - + Select destination file Seleccionar archivo de destino - + VCMI campaigns (*.vcmp) Campañas VCMI (*.vcmp) @@ -1349,29 +1379,29 @@ MapController - + Hero %1 cannot be created as NEUTRAL. El héroe %1 no puede ser creado como NEUTRAL. - + Missing Required Mod AI-generated, needs review by native speaker; delete this comment afterwards Falta un mod requerido - + Do you want to do that now ? -AI-generated, needs review by native speaker; delete this comment afterwards + AI-generated, needs review by native speaker; delete this comment afterwards ¿Quieres hacerlo ahora? - + This object's mod is mandatory for map to remain valid. AI-generated, needs review by native speaker; delete this comment afterwards El mod de este objeto es obligatorio para que el mapa siga siendo válido. @@ -1461,6 +1491,30 @@ Do you want to do that now ? Mensaje + + MineSelector + + + + Select Mines + + + + + Mine Selector + + + + + Resource + Recurso + + + + Mines + Minas + + ModSettings @@ -1595,26 +1649,26 @@ Do you want to do that now ? - PlayerSettings + PlayerSettingsDialog - + Player settings - Configuracion del jugador + Configuracion del jugador - + Players - Jugadores + Jugadores - + 1 - 1 + 1 - + Ok - Aceptar + Aceptar @@ -1664,69 +1718,69 @@ Do you want to do that now ? Habilidades secundarias: - + Compliant Dócil - + Friendly Amistoso - + Aggressive Agresivo - + Hostile Hostil - + Savage Salvaje - - + + No patrol Sin patrulla - + POWER RANK RANGO DE PODER - + HERO TYPE TIPO DE HÉROE - + Hero class Clase de héroe - + Portrait Retrato - + Skills Habilidades - + Artifacts Artefactos - - + + %n tile(s) %n casilla @@ -1734,305 +1788,305 @@ Do you want to do that now ? - + Buildings Edificios - + Events Eventos - + Resource Recurso - + Artifact reward Recompensa de artefacto - + Quest Misión - + Identifier Identificador - + ID ID - + SubID SubID - + InstanceName Nombre de instancia - + IsStatic Es estático - - + + neutral neutral - - + + Army Ejército - - - + + - - - - - + + + + + + Owner Propietario - - + + Same as town Igual que la ciudad - - + + Removable units Unidades removibles - - + + Placeholder type Tipo de marcador de posición - - + + Power rank Rango de poder - - - - + + + + Hero type Tipo de héroe - - + + Experience Experiencia - - + + MALE MASCULINO - - + + FEMALE FEMENINO - - + + Gender Género - - + + Name Nombre - - + + Biography Biografía - - + + Spells Hechizos - - + + Patrol radius Radio de patrulla - - + + Town name Nombre de la ciudad - - + + Same as player Igual que el jugador - - - - - - - - - + + + + + + + + + Message Mensaje - - + + Spell Hechizo - - + + Productivity Productividad - - - - + + + + Amount Cantidad - + Character Personaje - + Select town Seleccionar ciudad - - + + Never flees Nunca huye - - + + Not growing No crece - - + + Reward Recompensa - - + + Remove after Eliminar después - - + + Human trigger Activador humano - - + + Cpu trigger Activador CPU - - + + First visit text Texto de primera visita - - + + Next visit text Texto de siguiente visita - - + + Completed text Texto completado - - - + + + Repeat quest Repetir misión - - + + Time limit Límite de tiempo - + UNFLAGGABLE INCAPTURABLE - + Can't place object No se puede colocar objeto - + There can only be one grail object on the map. Solo puede haber un objeto de Grial en el mapa. - + (submod of %1) AI-generated, needs review by native speaker; delete this comment afterwards (submod de %1) - + The mod '%1'%2, is required by an object on the map. Add it to the map's required mods in Map->General settings. should be consistent with Map->General menu entry translation @@ -2074,13 +2128,13 @@ Agrégalo a los mods requeridos del mapa en Mapa->Configuración general. - + Hero Level: %1 Nivel del héroe: %1 - + Hero Experience: %1 Experiencia del héroe: %1 @@ -2091,43 +2145,43 @@ Agrégalo a los mods requeridos del mapa en Mapa->Configuración general. - + Mana Percentage: %1 Porcentaje de maná: %1 - + Primary Skills: %1/%2/%3/%4 Habilidades primarias: %1/%2/%3/%4 - + Resources: %1 Recursos: %1 - + Artifacts: %1 Artefactos: %1 - + Spells: %1 Hechizos: %1 - + Secondary Skills: %1 Habilidades secundarias: %1 - + Creatures: %1 Criaturas: %1 @@ -2147,37 +2201,37 @@ Agrégalo a los mods requeridos del mapa en Mapa->Configuración general.Jugadores: %1 - + Rewards: Recompensas: - + Reward Message: %1 Mensaje de recompensa: %1 - + Mana Diff: %1 Diferencia de maná: %1 - + Move Points: %1 Puntos de movimiento: %1 - + Move Percentage: %1 Porcentaje de movimiento: %1 - + Spell Cast: %1 (%2) Hechizo lanzado: %1 (%2) - + Bonuses: %1 Bonificaciones: %1 @@ -2603,18 +2657,18 @@ Agrégalo a los mods requeridos del mapa en Mapa->Configuración general.Jugadores - + None Ninguno - + Day %1 Día %1 - - + + Reward %1 Recompensa %1 @@ -2865,8 +2919,8 @@ Agrégalo a los mods requeridos del mapa en Mapa->Configuración general. - - + + Player position AI-generated, needs review by native speaker; delete this comment afterwards Posición del jugador @@ -2924,54 +2978,54 @@ Agrégalo a los mods requeridos del mapa en Mapa->Configuración general.Jugador - + Open map Abrir mapa - + All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) Todos los mapas soportados (*.vmap *.h3m);;Mapas VCMI (*.vmap);;Mapas HoMM3 (*.h3m) - - + + Error AI-generated, needs review by native speaker; delete this comment afterwards Error - - + + Could not open the file. AI-generated, needs review by native speaker; delete this comment afterwards No se pudo abrir el archivo. - + Save map Guardar mapa - + VCMI maps (*.vmap); AI-generated, needs review by native speaker; delete this comment afterwards Mapas VCMI (*.vmap); - + HoMM3 maps (*.h3m); AI-generated, needs review by native speaker; delete this comment afterwards Mapas HoMM3 (*.h3m); - + Source scenario AI-generated, needs review by native speaker; delete this comment afterwards Escenario fuente - + Hero AI-generated, needs review by native speaker; delete this comment afterwards Héroe @@ -3010,7 +3064,7 @@ Agrégalo a los mods requeridos del mapa en Mapa->Configuración general. - + Building AI-generated, needs review by native speaker; delete this comment afterwards Edificio @@ -3040,7 +3094,7 @@ Agrégalo a los mods requeridos del mapa en Mapa->Configuración general. - + Secondary skill AI-generated, needs review by native speaker; delete this comment afterwards Habilidad secundaria @@ -3048,7 +3102,7 @@ Agrégalo a los mods requeridos del mapa en Mapa->Configuración general. - + Resource Recurso @@ -3146,54 +3200,679 @@ Agrégalo a los mods requeridos del mapa en Mapa->Configuración general.Raro (%1, %2, %3, %4) - + strongest hero AI-generated, needs review by native speaker; delete this comment afterwards héroe más fuerte - + generated hero AI-generated, needs review by native speaker; delete this comment afterwards héroe generado - + random hero AI-generated, needs review by native speaker; delete this comment afterwards héroe aleatorio - + %1 spell for %2 AI-generated, needs review by native speaker; delete this comment afterwards Hechizo %1 para %2 - + %1 %2 for %3 AI-generated, needs review by native speaker; delete this comment afterwards %1 %2 para %3 - + %1 artifact for %2 AI-generated, needs review by native speaker; delete this comment afterwards Artefacto %1 para %2 - + %1 spell scroll for %2 AI-generated, needs review by native speaker; delete this comment afterwards Pergamino de hechizo %1 para %2 - + Primary skill (Attack: %1, Defense: %2, Spell: %3, Knowledge: %4) for %5 AI-generated, needs review by native speaker; delete this comment afterwards Habilidad primaria (Ataque: %1, Defensa: %2, Hechizo: %3, Conocimiento: %4) para %5 + + TemplateEditor + + + + VCMI Template Editor + + + + + File + Archivo + + + + Edit + Editar + + + + View + Ver + + + + Toolbar + Barra de herramientas + + + + Selected Template: + + + + + + + Add + Añadir + + + + Remove + Eliminar + + + + Rename + + + + + General + General + + + + Name + Nombre + + + + Description + + + + + Min Size + + + + + + + X + + + + + + + Y + + + + + + + Z + + + + + Max Size + + + + + + Players + Jugadores + + + + Human + + + + + Allowed water content + + + + + + + None + Ninguno + + + + + Normal + Normal + + + + Islands + Islas + + + + Zone + + + + + Visualisation + + + + + Position + + + + + + Size + + + + + ID + ID + + + + + Type + Tipo + + + + Owner + Propietario + + + + Zone link + + + + + + + Mines + Minas + + + + + Custom objects + + + + + + Towns + Ciudades + + + + + Terrain + + + + + + + + Treasure + + + + + Town info + + + + + Town count + + + + + + + + Player + Jugador + + + + + + + Neutral + Neutral + + + + Castle count + + + + + Town density + + + + + Castle density + + + + + Match terrain to town + + + + + Terrain types + + + + + Banned terrain types + + + + + Towns are same type + + + + + Allowed towns + + + + + Banned towns + + + + + Town hints + + + + + Monsters + Monstruos + + + + Allowed monsters + + + + + Banned monsters + + + + + Strength + + + + + Objects + Objetos + + + + Connections + + + + + Open + Abrir + + + + Save + Guardar + + + + New + Nuevo + + + + Save as... + Guardar como... + + + + Ctrl+Shift+S + Ctrl+Shift+S + + + + Add zone + + + + + Remove zone + + + + + + Del + Del + + + + Auto position + + + + + Ctrl+P + Ctrl+P + + + + Zoom in + Acercar + + + + Ctrl++ + Ctrl++ + + + + Zoom out + Alejar + + + + Ctrl+- + Ctrl+- + + + + Zoom auto + + + + + Ctrl+Shift+: + + + + + Zoom reset + Restablecer zoom + + + + Ctrl+Shift+= + Ctrl+Shift+= + + + + Min + + + + + Max + + + + + Action + + + + + + Delete + + + + + ID: %1 + + + + + Max treasure: %1 + + + + + Player start + + + + + CPU start + + + + + Junction + + + + + Water + + + + + Sealed + + + + + + Random + Aleatorio + + + + Weak + Débil + + + + Strong + Fuerte + + + + Zone A + + + + + Zone B + + + + + Guard + + + + + Road + + + + + Guarded + + + + + Fictive + + + + + Repulsive + + + + + Wide + + + + + Force portal + + + + + Yes + + + + + No + + + + + Zone A: %1 +Zone B: %2 +Guard: %3 + + + + + Confirmation + Confirmación + + + + Unsaved changes will be lost, are you sure? + Los cambios no guardados se perderán. Está usted seguro ? + + + + Open template + + + + + VCMI templates(*.json) + + + + + Save template + + + + + VCMI templates (*.json) + + + + + + Enter Name + + + + + + Name: + + + + + Already existing! + + + + + At template with this name is already existing. + + + + + To few templates! + + + + + At least one template should remain after removing. + + + + + + Error + Error + + + + + Not implemented yet! + + + + + TerrainSelector + + + + Select Terrains + + + + + Terrain Selector + + + TimedEvent @@ -3534,6 +4213,40 @@ Agrégalo a los mods requeridos del mapa en Mapa->Configuración general.Todos los registros de texto existentes para este idioma serán eliminados. ¿Continuar? + + TreasureSelector + + + + Select Treasures + + + + + Treasure Selector + + + + + Min + + + + + Max + + + + + Density + + + + + Action + + + Validator @@ -3925,22 +4638,22 @@ Agrégalo a los mods requeridos del mapa en Mapa->Configuración general.Cancelar - + No template Sin plantilla - + No template for parameters specified. Random map cannot be generated. No hay plantilla para los parámetros especificados. No se puede generar un mapa aleatorio. - + RMG failure Error en el generador de mapas aleatorios - + [default] [predeterminado] @@ -3948,27 +4661,27 @@ Agrégalo a los mods requeridos del mapa en Mapa->Configuración general. main - + Filepath of the map to open. Ruta del archivo del mapa a abrir. - + Extract original H3 archives into a separate folder. Extraer archivos originales de H3 en una carpeta separada. - + From an extracted archive, it Splits TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 and Un44 into individual PNG's. Desde un archivo extraído, separa TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 y Un44 en imágenes PNG individuales. - + From an extracted archive, Converts single Images (found in Images folder) from .pcx to png. Desde un archivo extraído, convierte imágenes individuales (encontradas en la carpeta Imágenes) de .pcx a png. - + Delete original files, for the ones split / converted. Eliminar archivos originales, por los que se han separado / convertido. diff --git a/mapeditor/translation/swedish.ts b/mapeditor/translation/swedish.ts index 486d70558..1fa28e89c 100644 --- a/mapeditor/translation/swedish.ts +++ b/mapeditor/translation/swedish.ts @@ -54,7 +54,7 @@ CampaignEditor - + VCMI Campaign Editor AI-generated, needs review by native speaker; delete this comment afterwards VCMI Kampanjredigerare @@ -135,43 +135,43 @@ Visa full bakgrund - + Scenario editor AI-generated, needs review by native speaker; delete this comment afterwards Scenarioredigerare - + Confirmation AI-generated, needs review by native speaker; delete this comment afterwards Bekräftelse - + Unsaved changes will be lost, are you sure? AI-generated, needs review by native speaker; delete this comment afterwards Osparade ändringar kommer gå förlorade, är du säker? - + Open map AI-generated, needs review by native speaker; delete this comment afterwards Öppna karta - + All supported campaigns (*.vcmp *.h3c);;VCMI campaigns(*.vcmp);;HoMM3 campaigns(*.h3c) AI-generated, needs review by native speaker; delete this comment afterwards Alla stödda kampanjer (*.vcmp *.h3c);;VCMI-kampanjer (*.vcmp);;HoMM3-kampanjer (*.h3c) - + Save campaign AI-generated, needs review by native speaker; delete this comment afterwards Spara kampanj - + VCMI campaigns (*.vcmp) AI-generated, needs review by native speaker; delete this comment afterwards VCMI-kampanjer (*.vcmp) @@ -181,7 +181,7 @@ CampaignProperties - + Campaign Properties AI-generated, needs review by native speaker; delete this comment afterwards Kampanjegenskaper @@ -320,47 +320,47 @@ Outrovideo - + Custom AI-generated, needs review by native speaker; delete this comment afterwards Anpassad - + Infix AI-generated, needs review by native speaker; delete this comment afterwards Infogning - + X - + Y - + Label Pos X AI-generated, needs review by native speaker; delete this comment afterwards Etikett Pos X - + Label Pos Y AI-generated, needs review by native speaker; delete this comment afterwards Etikett Pos Y - + Fewer Scenarios AI-generated, needs review by native speaker; delete this comment afterwards Färre scenarier - + New Region setup supports fewer scenarios than before. Some will removed. Continue? AI-generated, needs review by native speaker; delete this comment afterwards Den nya regionsinställningen stöder färre scenarier än tidigare. Vissa kommer tas bort. Fortsätta? @@ -399,6 +399,20 @@ Ny händelse + + FactionSelector + + + + Select Factions + + + + + Faction Selector + + + GeneralSettings @@ -497,6 +511,16 @@ AI-generated, needs review by native speaker; delete this comment afterwards Artefakt + + + Save + Spara + + + + Cancel + Avbryt + HeroSkillsWidget @@ -652,7 +676,7 @@ MainWindow - + VCMI Map Editor VCMI kartredigerare @@ -664,864 +688,870 @@ - + Open Recent AI-generated, needs review by native speaker; delete this comment afterwards Öppna senaste - + Map AI-generated, needs review by native speaker; delete this comment afterwards Karta - + Edit AI-generated, needs review by native speaker; delete this comment afterwards Redigera - + View AI-generated, needs review by native speaker; delete this comment afterwards Visa - + Player AI-generated, needs review by native speaker; delete this comment afterwards Spelare - + Toolbar AI-generated, needs review by native speaker; delete this comment afterwards Verktygsfält - + Minimap AI-generated, needs review by native speaker; delete this comment afterwards Minikarta - + Map Objects View AI-generated, needs review by native speaker; delete this comment afterwards Kartobjektvy - + Browser AI-generated, needs review by native speaker; delete this comment afterwards Bläddrare - + Inspector AI-generated, needs review by native speaker; delete this comment afterwards Inspektör - + Property AI-generated, needs review by native speaker; delete this comment afterwards Egenskap - + Value AI-generated, needs review by native speaker; delete this comment afterwards Värde - + Tools AI-generated, needs review by native speaker; delete this comment afterwards Verktyg - + Painting AI-generated, needs review by native speaker; delete this comment afterwards Målning - + Terrains AI-generated, needs review by native speaker; delete this comment afterwards Terränger - + Roads AI-generated, needs review by native speaker; delete this comment afterwards Vägar - + Rivers AI-generated, needs review by native speaker; delete this comment afterwards Floder - + Preview AI-generated, needs review by native speaker; delete this comment afterwards Förhandsgranska - + Open AI-generated, needs review by native speaker; delete this comment afterwards Öppna - + Ctrl+O AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+O - + More... AI-generated, needs review by native speaker; delete this comment afterwards Mer... - + Save AI-generated, needs review by native speaker; delete this comment afterwards Spara - + Ctrl+S AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+S - + New AI-generated, needs review by native speaker; delete this comment afterwards Ny - + Ctrl+N AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+N - + Save as... AI-generated, needs review by native speaker; delete this comment afterwards Spara som... - + Ctrl+Shift+S AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+S - - + + Campaign editor AI-generated, needs review by native speaker; delete this comment afterwards Kampanjredigerare - - - - + + + Template editor + + + + + + + View underground AI-generated, needs review by native speaker; delete this comment afterwards Visa underjord - + Ctrl+U AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+U - + Pass AI-generated, needs review by native speaker; delete this comment afterwards Passera - + Ctrl+Shift+P AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+P - + Cut AI-generated, needs review by native speaker; delete this comment afterwards Klipp ut - + Ctrl+X AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+X - + Copy AI-generated, needs review by native speaker; delete this comment afterwards Kopiera - + Ctrl+C AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+C - + Paste AI-generated, needs review by native speaker; delete this comment afterwards Klistra in - + Ctrl+V AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+V - + Fill AI-generated, needs review by native speaker; delete this comment afterwards Fyll - + Fills the selection with obstacles AI-generated, needs review by native speaker; delete this comment afterwards Fyller markeringen med hinder - + Grid AI-generated, needs review by native speaker; delete this comment afterwards Rutnät - + Ctrl+G AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+G - + General AI-generated, needs review by native speaker; delete this comment afterwards Allmänt - + Map title and description AI-generated, needs review by native speaker; delete this comment afterwards Karttitel och beskrivning - + Ctrl+Enter AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Enter - + Players settings AI-generated, needs review by native speaker; delete this comment afterwards Spelarinställningar - + Ctrl+P AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+P - - + + Undo AI-generated, needs review by native speaker; delete this comment afterwards Ångra - + Ctrl+Z AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Z - + Redo AI-generated, needs review by native speaker; delete this comment afterwards Gör om - + Ctrl+Y AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Y - + Erase AI-generated, needs review by native speaker; delete this comment afterwards Radera - + Del AI-generated, needs review by native speaker; delete this comment afterwards Del - + Neutral AI-generated, needs review by native speaker; delete this comment afterwards Neutral - + Ctrl+0 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+0 - + Validate AI-generated, needs review by native speaker; delete this comment afterwards Validera - + Ctrl+Shift+V AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+V - - - - + + + + Update appearance AI-generated, needs review by native speaker; delete this comment afterwards Uppdatera utseende - + Recreate obstacles AI-generated, needs review by native speaker; delete this comment afterwards Återskapa hinder - + Player 1 AI-generated, needs review by native speaker; delete this comment afterwards Spelare 1 - + Ctrl+1 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+1 - + Player 2 AI-generated, needs review by native speaker; delete this comment afterwards Spelare 2 - + Ctrl+2 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+2 - + Player 3 AI-generated, needs review by native speaker; delete this comment afterwards Spelare 3 - + Ctrl+3 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+3 - + Player 4 AI-generated, needs review by native speaker; delete this comment afterwards Spelare 4 - + Ctrl+4 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+4 - + Player 5 AI-generated, needs review by native speaker; delete this comment afterwards Spelare 5 - + Ctrl+5 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+5 - + Player 6 AI-generated, needs review by native speaker; delete this comment afterwards Spelare 6 - + Ctrl+6 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+6 - + Player 7 AI-generated, needs review by native speaker; delete this comment afterwards Spelare 7 - + Ctrl+7 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+7 - + Player 8 AI-generated, needs review by native speaker; delete this comment afterwards Spelare 8 - + Ctrl+8 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+8 - + Export as... AI-generated, needs review by native speaker; delete this comment afterwards Exportera som... - + Ctrl+E AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+E - + Translations AI-generated, needs review by native speaker; delete this comment afterwards Översättningar - + Ctrl+T AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+T - - + + h3m converter AI-generated, needs review by native speaker; delete this comment afterwards h3m-omvandlare - + Ctrl+Shift+M AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+M - - + + h3c converter AI-generated, needs review by native speaker; delete this comment afterwards h3c-omvandlare - + Ctrl+Shift+C AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+C - + Lock AI-generated, needs review by native speaker; delete this comment afterwards Lås - + Lock objects on map to avoid unnecessary changes AI-generated, needs review by native speaker; delete this comment afterwards Lås objekt på kartan för att undvika onödiga ändringar - + Ctrl+L AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+L - + Unlock AI-generated, needs review by native speaker; delete this comment afterwards Lås upp - + Unlock all objects on the map AI-generated, needs review by native speaker; delete this comment afterwards Lås upp alla objekt på kartan - + Ctrl+Shift+L AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+L - + Zoom in AI-generated, needs review by native speaker; delete this comment afterwards Zooma in - + Ctrl++ AI-generated, needs review by native speaker; delete this comment afterwards Ctrl++ - + Zoom out AI-generated, needs review by native speaker; delete this comment afterwards Zooma ut - + Ctrl+- AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+- - + Zoom reset AI-generated, needs review by native speaker; delete this comment afterwards Återställ zoom - + Ctrl+Shift+= AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+= - + Confirmation AI-generated, needs review by native speaker; delete this comment afterwards Bekräftelse - + Unsaved changes will be lost, are you sure? AI-generated, needs review by native speaker; delete this comment afterwards Osparade ändringar kommer att gå förlorade, är du säker? - + Mods are required AI-generated, needs review by native speaker; delete this comment afterwards Moddar krävs - + Failed to open map AI-generated, needs review by native speaker; delete this comment afterwards Det gick inte att öppna kartan - + Open map AI-generated, needs review by native speaker; delete this comment afterwards Öppna karta - + All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) AI-generated, needs review by native speaker; delete this comment afterwards Alla stödda kartor (*.vmap *.h3m);;VCMI-kartor (*.vmap);;HoMM3-kartor (*.h3m) - + Recently Opened Files AI-generated, needs review by native speaker; delete this comment afterwards Senast öppnade filer - + Map validation AI-generated, needs review by native speaker; delete this comment afterwards Kartvalidering - + Map has critical problems and most probably will not be playable. Open Validator from the Map menu to see issues found AI-generated, needs review by native speaker; delete this comment afterwards Kartan har kritiska problem och kommer troligen inte att kunna spelas. Öppna validatorn från Kart-menyn för att se upptäckta problem - + Map has some errors. Open Validator from the Map menu to see issues found AI-generated, needs review by native speaker; delete this comment afterwards Kartan har några fel. Öppna validatorn från Kart-menyn för att se upptäckta problem - + Failed to save map AI-generated, needs review by native speaker; delete this comment afterwards Det gick inte att spara kartan - + Save map AI-generated, needs review by native speaker; delete this comment afterwards Spara karta - + VCMI maps (*.vmap) AI-generated, needs review by native speaker; delete this comment afterwards VCMI-kartor (*.vmap) - + Type AI-generated, needs review by native speaker; delete this comment afterwards Typ - + Towns AI-generated, needs review by native speaker; delete this comment afterwards Städer - + Objects AI-generated, needs review by native speaker; delete this comment afterwards Objekt - + Heroes AI-generated, needs review by native speaker; delete this comment afterwards Hjältar - + Artifacts AI-generated, needs review by native speaker; delete this comment afterwards Artefakter - + Resources AI-generated, needs review by native speaker; delete this comment afterwards Resurser - + Banks AI-generated, needs review by native speaker; delete this comment afterwards Banker - + Dwellings AI-generated, needs review by native speaker; delete this comment afterwards Boningshus - + Grounds AI-generated, needs review by native speaker; delete this comment afterwards Marktyper - + Teleports AI-generated, needs review by native speaker; delete this comment afterwards Teleportörer - + Mines AI-generated, needs review by native speaker; delete this comment afterwards Gruvor - + Triggers AI-generated, needs review by native speaker; delete this comment afterwards Utlösare - + Monsters AI-generated, needs review by native speaker; delete this comment afterwards Monster - + Quests AI-generated, needs review by native speaker; delete this comment afterwards Uppdrag - + Wog Objects AI-generated, needs review by native speaker; delete this comment afterwards WoG-objekt - + Obstacles AI-generated, needs review by native speaker; delete this comment afterwards Hinder - + Other AI-generated, needs review by native speaker; delete this comment afterwards Annat - + Mods loading problem AI-generated, needs review by native speaker; delete this comment afterwards Problem med att ladda moddar - + Critical error during Mods loading. Disable invalid mods and restart. AI-generated, needs review by native speaker; delete this comment afterwards Kritiskt fel under modd-laddning. Inaktivera ogiltiga moddar och starta om. - - + + View surface AI-generated, needs review by native speaker; delete this comment afterwards Visa yta - + No objects selected AI-generated, needs review by native speaker; delete this comment afterwards Inga objekt valda - + This operation is irreversible. Do you want to continue? AI-generated, needs review by native speaker; delete this comment afterwards Denna åtgärd kan inte ångras. Vill du fortsätta? - + Errors occurred. %1 objects were not updated AI-generated, needs review by native speaker; delete this comment afterwards Fel inträffade. %1 objekt uppdaterades inte - + Save to image AI-generated, needs review by native speaker; delete this comment afterwards Spara som bild - + Select maps to convert AI-generated, needs review by native speaker; delete this comment afterwards Välj kartor att konvertera - + HoMM3 maps(*.h3m) AI-generated, needs review by native speaker; delete this comment afterwards HoMM3-kartor (*.h3m) - + Choose directory to save converted maps AI-generated, needs review by native speaker; delete this comment afterwards Välj katalog för att spara konverterade kartor - + Operation completed AI-generated, needs review by native speaker; delete this comment afterwards Åtgärd slutförd - + Successfully converted %1 maps AI-generated, needs review by native speaker; delete this comment afterwards Lyckades konvertera %1 kartor - + Failed to convert the map. Abort operation AI-generated, needs review by native speaker; delete this comment afterwards Det gick inte att konvertera kartan. Avbryter åtgärden - + Select campaign to convert AI-generated, needs review by native speaker; delete this comment afterwards Välj kampanj att konvertera - + HoMM3 campaigns (*.h3c) AI-generated, needs review by native speaker; delete this comment afterwards HoMM3-kampanjer (*.h3c) - + Select destination file AI-generated, needs review by native speaker; delete this comment afterwards Välj destinationsfil - + VCMI campaigns (*.vcmp) AI-generated, needs review by native speaker; delete this comment afterwards VCMI-kampanjer (*.vcmp) @@ -1530,30 +1560,30 @@ MapController - + Hero %1 cannot be created as NEUTRAL. AI-generated, needs review by native speaker; delete this comment afterwards Hjälte %1 kan inte skapas som NEUTRAL. - + Missing Required Mod AI-generated, needs review by native speaker; delete this comment afterwards Saknad nödvändig mod - + Do you want to do that now ? -AI-generated, needs review by native speaker; delete this comment afterwards + AI-generated, needs review by native speaker; delete this comment afterwards Vill du göra det nu? - + This object's mod is mandatory for map to remain valid. AI-generated, needs review by native speaker; delete this comment afterwards Denna mod är nödvändig för objektet och kartan för att vara giltig. @@ -1658,6 +1688,30 @@ Vill du göra det nu? Meddelande + + MineSelector + + + + Select Mines + + + + + Mine Selector + + + + + Resource + Resurs + + + + Mines + Gruvor + + ModSettings @@ -1811,28 +1865,25 @@ Vill du göra det nu? - PlayerSettings + PlayerSettingsDialog - + Player settings - AI-generated, needs review by native speaker; delete this comment afterwards Spelarinställningar - + Players - AI-generated, needs review by native speaker; delete this comment afterwards Spelare - + 1 - + Ok - AI-generated, needs review by native speaker; delete this comment afterwards Ok @@ -1890,81 +1941,81 @@ Vill du göra det nu? Sekundära färdigheter: - + Compliant AI-generated, needs review by native speaker; delete this comment afterwards Vänlig - + Friendly AI-generated, needs review by native speaker; delete this comment afterwards Vänskaplig - + Aggressive AI-generated, needs review by native speaker; delete this comment afterwards Aggressiv - + Hostile AI-generated, needs review by native speaker; delete this comment afterwards Fientlig - + Savage AI-generated, needs review by native speaker; delete this comment afterwards Vild - - + + No patrol AI-generated, needs review by native speaker; delete this comment afterwards Ingen patrull - + POWER RANK AI-generated, needs review by native speaker; delete this comment afterwards STYRKERANKNING - + HERO TYPE AI-generated, needs review by native speaker; delete this comment afterwards HJÄLTETYP - + Hero class AI-generated, needs review by native speaker; delete this comment afterwards Hjälteklass - + Portrait AI-generated, needs review by native speaker; delete this comment afterwards Porträtt - + Skills AI-generated, needs review by native speaker; delete this comment afterwards Färdigheter - + Artifacts AI-generated, needs review by native speaker; delete this comment afterwards Artefakter - - + + %n tile(s) AI-generated, needs review by native speaker; delete this comment afterwards @@ -1973,353 +2024,353 @@ Vill du göra det nu? - + Buildings AI-generated, needs review by native speaker; delete this comment afterwards Byggnader - + Events AI-generated, needs review by native speaker; delete this comment afterwards Händelser - + Resource AI-generated, needs review by native speaker; delete this comment afterwards Resurs - + Artifact reward AI-generated, needs review by native speaker; delete this comment afterwards Artefaktbelöning - + Quest AI-generated, needs review by native speaker; delete this comment afterwards Uppdrag - + Identifier AI-generated, needs review by native speaker; delete this comment afterwards Identifierare - + ID AI-generated, needs review by native speaker; delete this comment afterwards ID - + SubID AI-generated, needs review by native speaker; delete this comment afterwards SubID - + InstanceName AI-generated, needs review by native speaker; delete this comment afterwards InstansNamn - + IsStatic AI-generated, needs review by native speaker; delete this comment afterwards ÄrStatisk - - + + neutral AI-generated, needs review by native speaker; delete this comment afterwards neutral - - + + Army AI-generated, needs review by native speaker; delete this comment afterwards Armé - - - + + - - - - - + + + + + + Owner AI-generated, needs review by native speaker; delete this comment afterwards Ägare - - + + Same as town AI-generated, needs review by native speaker; delete this comment afterwards Samma som stad - - + + Removable units AI-generated, needs review by native speaker; delete this comment afterwards Borttagbara enheter - - + + Placeholder type AI-generated, needs review by native speaker; delete this comment afterwards Platshållartyp - - + + Power rank AI-generated, needs review by native speaker; delete this comment afterwards Styrkerankning - - - - + + + + Hero type AI-generated, needs review by native speaker; delete this comment afterwards Hjältetyp - - + + Experience AI-generated, needs review by native speaker; delete this comment afterwards Erfarenhet - - + + MALE AI-generated, needs review by native speaker; delete this comment afterwards MAN - - + + FEMALE AI-generated, needs review by native speaker; delete this comment afterwards KVINNA - - + + Gender AI-generated, needs review by native speaker; delete this comment afterwards Kön - - + + Name AI-generated, needs review by native speaker; delete this comment afterwards Namn - - + + Biography AI-generated, needs review by native speaker; delete this comment afterwards Biografi - - + + Spells AI-generated, needs review by native speaker; delete this comment afterwards Besvärjelser - - + + Patrol radius AI-generated, needs review by native speaker; delete this comment afterwards Patrullradie - - + + Town name AI-generated, needs review by native speaker; delete this comment afterwards Stadsnamn - - + + Same as player AI-generated, needs review by native speaker; delete this comment afterwards Samma som spelare - - - - - - - - - + + + + + + + + + Message AI-generated, needs review by native speaker; delete this comment afterwards Meddelande - - + + Spell AI-generated, needs review by native speaker; delete this comment afterwards Besvärjelse - - + + Productivity AI-generated, needs review by native speaker; delete this comment afterwards Produktivitet - - - - + + + + Amount AI-generated, needs review by native speaker; delete this comment afterwards Mängd - + Character AI-generated, needs review by native speaker; delete this comment afterwards Karaktär - + Select town AI-generated, needs review by native speaker; delete this comment afterwards Välj stad - - + + Never flees AI-generated, needs review by native speaker; delete this comment afterwards Flyr aldrig - - + + Not growing AI-generated, needs review by native speaker; delete this comment afterwards Växer inte - - + + Reward AI-generated, needs review by native speaker; delete this comment afterwards Belöning - - + + Remove after AI-generated, needs review by native speaker; delete this comment afterwards Ta bort efter - - + + Human trigger AI-generated, needs review by native speaker; delete this comment afterwards Mänsklig utlösare - - + + Cpu trigger AI-generated, needs review by native speaker; delete this comment afterwards AI-utlösare - - + + First visit text AI-generated, needs review by native speaker; delete this comment afterwards Text vid första besöket - - + + Next visit text AI-generated, needs review by native speaker; delete this comment afterwards Text vid nästa besök - - + + Completed text AI-generated, needs review by native speaker; delete this comment afterwards Text efter slutförande - - - + + + Repeat quest AI-generated, needs review by native speaker; delete this comment afterwards Upprepa uppdrag - - + + Time limit AI-generated, needs review by native speaker; delete this comment afterwards Tidsgräns - + UNFLAGGABLE AI-generated, needs review by native speaker; delete this comment afterwards KAN INTE FLAGGAS - + Can't place object AI-generated, needs review by native speaker; delete this comment afterwards Kan inte placera objekt - + There can only be one grail object on the map. AI-generated, needs review by native speaker; delete this comment afterwards Det kan bara finnas ett graalobjekt på kartan. - + (submod of %1) AI-generated, needs review by native speaker; delete this comment afterwards (undermodul till %1) - + The mod '%1'%2, is required by an object on the map. Add it to the map's required mods in Map->General settings. should be consistent with Map->General menu entry translation @@ -2367,14 +2418,14 @@ Lägg till den i kartans obligatoriska moduler i Karta->Allmänna inställnin - + Hero Level: %1 AI-generated, needs review by native speaker; delete this comment afterwards Hjältenivå: %1 - + Hero Experience: %1 AI-generated, needs review by native speaker; delete this comment afterwards Hjälteerfarenhet: %1 @@ -2387,49 +2438,49 @@ Lägg till den i kartans obligatoriska moduler i Karta->Allmänna inställnin - + Mana Percentage: %1 AI-generated, needs review by native speaker; delete this comment afterwards Manaprocent: %1 - + Primary Skills: %1/%2/%3/%4 AI-generated, needs review by native speaker; delete this comment afterwards Primära färdigheter: %1/%2/%3/%4 - + Resources: %1 AI-generated, needs review by native speaker; delete this comment afterwards Resurser: %1 - + Artifacts: %1 AI-generated, needs review by native speaker; delete this comment afterwards Artefakter: %1 - + Spells: %1 AI-generated, needs review by native speaker; delete this comment afterwards Besvärjelser: %1 - + Secondary Skills: %1 AI-generated, needs review by native speaker; delete this comment afterwards Sekundära färdigheter: %1 - + Creatures: %1 AI-generated, needs review by native speaker; delete this comment afterwards Varelser: %1 @@ -2453,43 +2504,43 @@ Lägg till den i kartans obligatoriska moduler i Karta->Allmänna inställnin Spelare: %1 - + Rewards: AI-generated, needs review by native speaker; delete this comment afterwards Belöningar: - + Reward Message: %1 AI-generated, needs review by native speaker; delete this comment afterwards Belöningsmeddelande: %1 - + Mana Diff: %1 AI-generated, needs review by native speaker; delete this comment afterwards Manaskillnad: %1 - + Move Points: %1 AI-generated, needs review by native speaker; delete this comment afterwards Rörelsepoäng: %1 - + Move Percentage: %1 AI-generated, needs review by native speaker; delete this comment afterwards Rörelseprocent: %1 - + Spell Cast: %1 (%2) AI-generated, needs review by native speaker; delete this comment afterwards Besvärjelse kastad: %1 (%2) - + Bonuses: %1 AI-generated, needs review by native speaker; delete this comment afterwards Bonusar: %1 @@ -2991,20 +3042,20 @@ Lägg till den i kartans obligatoriska moduler i Karta->Allmänna inställnin Spelare - + None AI-generated, needs review by native speaker; delete this comment afterwards Ingen - + Day %1 AI-generated, needs review by native speaker; delete this comment afterwards Dag %1 - - + + Reward %1 AI-generated, needs review by native speaker; delete this comment afterwards Belöning %1 @@ -3270,8 +3321,8 @@ Lägg till den i kartans obligatoriska moduler i Karta->Allmänna inställnin - - + + Player position AI-generated, needs review by native speaker; delete this comment afterwards Spelarposition @@ -3331,57 +3382,57 @@ Lägg till den i kartans obligatoriska moduler i Karta->Allmänna inställnin Spelare - + Open map AI-generated, needs review by native speaker; delete this comment afterwards Öppna karta - + All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) AI-generated, needs review by native speaker; delete this comment afterwards Alla stödda kartor (*.vmap *.h3m);;VCMI-kartor(*.vmap);;HoMM3-kartor(*.h3m) - - + + Error AI-generated, needs review by native speaker; delete this comment afterwards Fel - - + + Could not open the file. AI-generated, needs review by native speaker; delete this comment afterwards Kunde inte öppna filen. - + Save map AI-generated, needs review by native speaker; delete this comment afterwards Spara karta - + VCMI maps (*.vmap); AI-generated, needs review by native speaker; delete this comment afterwards VCMI-kartor (*.vmap); - + HoMM3 maps (*.h3m); AI-generated, needs review by native speaker; delete this comment afterwards HoMM3-kartor (*.h3m); - + Source scenario AI-generated, needs review by native speaker; delete this comment afterwards Källscenario - + Hero AI-generated, needs review by native speaker; delete this comment afterwards Hjälte @@ -3421,7 +3472,7 @@ Lägg till den i kartans obligatoriska moduler i Karta->Allmänna inställnin - + Building AI-generated, needs review by native speaker; delete this comment afterwards Byggnad @@ -3452,7 +3503,7 @@ Lägg till den i kartans obligatoriska moduler i Karta->Allmänna inställnin - + Secondary skill AI-generated, needs review by native speaker; delete this comment afterwards Sekundär färdighet @@ -3460,7 +3511,7 @@ Lägg till den i kartans obligatoriska moduler i Karta->Allmänna inställnin - + Resource AI-generated, needs review by native speaker; delete this comment afterwards Resurs @@ -3562,54 +3613,679 @@ Lägg till den i kartans obligatoriska moduler i Karta->Allmänna inställnin Sällsynt (%1, %2, %3, %4) - + strongest hero AI-generated, needs review by native speaker; delete this comment afterwards starkaste hjälten - + generated hero AI-generated, needs review by native speaker; delete this comment afterwards genererad hjälte - + random hero AI-generated, needs review by native speaker; delete this comment afterwards slumpmässig hjälte - + %1 spell for %2 AI-generated, needs review by native speaker; delete this comment afterwards %1 besvärjelse för %2 - + %1 %2 for %3 AI-generated, needs review by native speaker; delete this comment afterwards %1 %2 för %3 - + %1 artifact for %2 AI-generated, needs review by native speaker; delete this comment afterwards %1 artefakt för %2 - + %1 spell scroll for %2 AI-generated, needs review by native speaker; delete this comment afterwards %1 besvärjelse-rulle för %2 - + Primary skill (Attack: %1, Defense: %2, Spell: %3, Knowledge: %4) for %5 AI-generated, needs review by native speaker; delete this comment afterwards Primär färdighet (Attack: %1, Försvar: %2, Magi: %3, Kunskap: %4) för %5 + + TemplateEditor + + + + VCMI Template Editor + + + + + File + Fil + + + + Edit + Redigera + + + + View + Visa + + + + Toolbar + Verktygsfält + + + + Selected Template: + + + + + + + Add + Lägg till + + + + Remove + Ta bort + + + + Rename + + + + + General + Allmänt + + + + Name + Namn + + + + Description + + + + + Min Size + + + + + + + X + + + + + + + Y + + + + + + + Z + + + + + Max Size + + + + + + Players + Spelare + + + + Human + + + + + Allowed water content + + + + + + + None + Ingen + + + + + Normal + Normal + + + + Islands + Öar + + + + Zone + + + + + Visualisation + + + + + Position + + + + + + Size + + + + + ID + ID + + + + + Type + Typ + + + + Owner + Ägare + + + + Zone link + + + + + + + Mines + Gruvor + + + + + Custom objects + + + + + + Towns + Städer + + + + + Terrain + + + + + + + + Treasure + + + + + Town info + + + + + Town count + + + + + + + + Player + Spelare + + + + + + + Neutral + Neutral + + + + Castle count + + + + + Town density + + + + + Castle density + + + + + Match terrain to town + + + + + Terrain types + + + + + Banned terrain types + + + + + Towns are same type + + + + + Allowed towns + + + + + Banned towns + + + + + Town hints + + + + + Monsters + Monster + + + + Allowed monsters + + + + + Banned monsters + + + + + Strength + + + + + Objects + Objekt + + + + Connections + + + + + Open + Öppna + + + + Save + Spara + + + + New + Ny + + + + Save as... + Spara som... + + + + Ctrl+Shift+S + Ctrl+Shift+S + + + + Add zone + + + + + Remove zone + + + + + + Del + Del + + + + Auto position + + + + + Ctrl+P + Ctrl+P + + + + Zoom in + Zooma in + + + + Ctrl++ + Ctrl++ + + + + Zoom out + Zooma ut + + + + Ctrl+- + Ctrl+- + + + + Zoom auto + + + + + Ctrl+Shift+: + + + + + Zoom reset + Återställ zoom + + + + Ctrl+Shift+= + Ctrl+Shift+= + + + + Min + + + + + Max + + + + + Action + + + + + + Delete + + + + + ID: %1 + + + + + Max treasure: %1 + + + + + Player start + + + + + CPU start + + + + + Junction + + + + + Water + + + + + Sealed + + + + + + Random + Slumpmässig + + + + Weak + Svag + + + + Strong + Stark + + + + Zone A + + + + + Zone B + + + + + Guard + + + + + Road + + + + + Guarded + + + + + Fictive + + + + + Repulsive + + + + + Wide + + + + + Force portal + + + + + Yes + + + + + No + + + + + Zone A: %1 +Zone B: %2 +Guard: %3 + + + + + Confirmation + Bekräftelse + + + + Unsaved changes will be lost, are you sure? + + + + + Open template + + + + + VCMI templates(*.json) + + + + + Save template + + + + + VCMI templates (*.json) + + + + + + Enter Name + + + + + + Name: + + + + + Already existing! + + + + + At template with this name is already existing. + + + + + To few templates! + + + + + At least one template should remain after removing. + + + + + + Error + Fel + + + + + Not implemented yet! + + + + + TerrainSelector + + + + Select Terrains + + + + + Terrain Selector + + + TimedEvent @@ -4012,6 +4688,40 @@ Lägg till den i kartans obligatoriska moduler i Karta->Allmänna inställnin Alla befintliga textrader för detta språk kommer att tas bort. Fortsätta? + + TreasureSelector + + + + Select Treasures + + + + + Treasure Selector + + + + + Min + + + + + Max + + + + + Density + + + + + Action + + + Validator @@ -4476,25 +5186,25 @@ Lägg till den i kartans obligatoriska moduler i Karta->Allmänna inställnin Avbryt - + No template AI-generated, needs review by native speaker; delete this comment afterwards Ingen mall - + No template for parameters specified. Random map cannot be generated. AI-generated, needs review by native speaker; delete this comment afterwards Ingen mall för angivna parametrar. Slumpmässig karta kan inte genereras. - + RMG failure AI-generated, needs review by native speaker; delete this comment afterwards RMG-fel - + [default] AI-generated, needs review by native speaker; delete this comment afterwards [standard] @@ -4503,31 +5213,31 @@ Lägg till den i kartans obligatoriska moduler i Karta->Allmänna inställnin main - + Filepath of the map to open. AI-generated, needs review by native speaker; delete this comment afterwards Sökväg till kartan som ska öppnas. - + Extract original H3 archives into a separate folder. AI-generated, needs review by native speaker; delete this comment afterwards Extrahera originalarkiv från H3 till separat mapp. - + From an extracted archive, it Splits TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 and Un44 into individual PNG's. AI-generated, needs review by native speaker; delete this comment afterwards Från ett extraherat arkiv: Dela upp TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 och Un44 till individuella PNG-filer. - + From an extracted archive, Converts single Images (found in Images folder) from .pcx to png. AI-generated, needs review by native speaker; delete this comment afterwards Från ett extraherat arkiv: Konvertera enskilda bilder (i Images-mappen) från .pcx till .png. - + Delete original files, for the ones split / converted. AI-generated, needs review by native speaker; delete this comment afterwards Ta bort originalfilerna för de som delades upp/konverterades. diff --git a/mapeditor/translation/turkish.ts b/mapeditor/translation/turkish.ts index 71e8d0fcc..e4bd97591 100644 --- a/mapeditor/translation/turkish.ts +++ b/mapeditor/translation/turkish.ts @@ -54,7 +54,7 @@ CampaignEditor - + VCMI Campaign Editor AI-generated, needs review by native speaker; delete this comment afterwards VCMI Kampanya Editörü @@ -135,43 +135,43 @@ Tam arka planı göster - + Scenario editor AI-generated, needs review by native speaker; delete this comment afterwards Senaryo editörü - + Confirmation AI-generated, needs review by native speaker; delete this comment afterwards Onay - + Unsaved changes will be lost, are you sure? AI-generated, needs review by native speaker; delete this comment afterwards Kaydedilmemiş değişiklikler kaybolacak, emin misiniz? - + Open map AI-generated, needs review by native speaker; delete this comment afterwards Haritayı aç - + All supported campaigns (*.vcmp *.h3c);;VCMI campaigns(*.vcmp);;HoMM3 campaigns(*.h3c) AI-generated, needs review by native speaker; delete this comment afterwards Tüm desteklenen kampanyalar (*.vcmp *.h3c);;VCMI kampanyaları (*.vcmp);;HoMM3 kampanyaları (*.h3c) - + Save campaign AI-generated, needs review by native speaker; delete this comment afterwards Kampanyayı kaydet - + VCMI campaigns (*.vcmp) AI-generated, needs review by native speaker; delete this comment afterwards VCMI kampanyaları (*.vcmp) @@ -181,7 +181,7 @@ CampaignProperties - + Campaign Properties AI-generated, needs review by native speaker; delete this comment afterwards Kampanya Özellikleri @@ -320,47 +320,47 @@ Çıkış videosu - + Custom AI-generated, needs review by native speaker; delete this comment afterwards Özel - + Infix AI-generated, needs review by native speaker; delete this comment afterwards İnfiks - + X - + Y - + Label Pos X AI-generated, needs review by native speaker; delete this comment afterwards Etiket X konumu - + Label Pos Y AI-generated, needs review by native speaker; delete this comment afterwards Etiket Y konumu - + Fewer Scenarios AI-generated, needs review by native speaker; delete this comment afterwards Daha az senaryo - + New Region setup supports fewer scenarios than before. Some will removed. Continue? AI-generated, needs review by native speaker; delete this comment afterwards Yeni bölge ayarı önceye göre daha az senaryoyu destekliyor. Bazıları kaldırılacak. Devam edilsin mi? @@ -399,6 +399,20 @@ Yeni olay + + FactionSelector + + + + Select Factions + + + + + Faction Selector + + + GeneralSettings @@ -497,6 +511,16 @@ AI-generated, needs review by native speaker; delete this comment afterwards Ekipman + + + Save + Kaydet + + + + Cancel + İptal + HeroSkillsWidget @@ -652,7 +676,7 @@ MainWindow - + VCMI Map Editor VCMI harita düzenleyicisi @@ -664,864 +688,870 @@ - + Open Recent AI-generated, needs review by native speaker; delete this comment afterwards Son açılanlar - + Map AI-generated, needs review by native speaker; delete this comment afterwards Harita - + Edit AI-generated, needs review by native speaker; delete this comment afterwards Düzenle - + View AI-generated, needs review by native speaker; delete this comment afterwards Görünüm - + Player AI-generated, needs review by native speaker; delete this comment afterwards Oyuncu - + Toolbar AI-generated, needs review by native speaker; delete this comment afterwards Araç çubuğu - + Minimap AI-generated, needs review by native speaker; delete this comment afterwards Mini harita - + Map Objects View AI-generated, needs review by native speaker; delete this comment afterwards Harita Nesne Görünümü - + Browser AI-generated, needs review by native speaker; delete this comment afterwards Tarayıcı - + Inspector AI-generated, needs review by native speaker; delete this comment afterwards İnceleyici - + Property AI-generated, needs review by native speaker; delete this comment afterwards Özellik - + Value AI-generated, needs review by native speaker; delete this comment afterwards Değer - + Tools AI-generated, needs review by native speaker; delete this comment afterwards Araçlar - + Painting AI-generated, needs review by native speaker; delete this comment afterwards Boya - + Terrains AI-generated, needs review by native speaker; delete this comment afterwards Araziler - + Roads AI-generated, needs review by native speaker; delete this comment afterwards Yollar - + Rivers AI-generated, needs review by native speaker; delete this comment afterwards Nehirler - + Preview AI-generated, needs review by native speaker; delete this comment afterwards Önizleme - + Open AI-generated, needs review by native speaker; delete this comment afterwards - + Ctrl+O AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+O - + More... AI-generated, needs review by native speaker; delete this comment afterwards Daha fazla... - + Save AI-generated, needs review by native speaker; delete this comment afterwards Kaydet - + Ctrl+S AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+S - + New AI-generated, needs review by native speaker; delete this comment afterwards Yeni - + Ctrl+N AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+N - + Save as... AI-generated, needs review by native speaker; delete this comment afterwards Farklı kaydet... - + Ctrl+Shift+S AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+S - - + + Campaign editor AI-generated, needs review by native speaker; delete this comment afterwards Kampanya editörü - - - - + + + Template editor + + + + + + + View underground AI-generated, needs review by native speaker; delete this comment afterwards Yeraltını göster - + Ctrl+U AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+U - + Pass AI-generated, needs review by native speaker; delete this comment afterwards Geçiş - + Ctrl+Shift+P AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+P - + Cut AI-generated, needs review by native speaker; delete this comment afterwards Kes - + Ctrl+X AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+X - + Copy AI-generated, needs review by native speaker; delete this comment afterwards Kopyala - + Ctrl+C AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+C - + Paste AI-generated, needs review by native speaker; delete this comment afterwards Yapıştır - + Ctrl+V AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+V - + Fill AI-generated, needs review by native speaker; delete this comment afterwards Doldur - + Fills the selection with obstacles AI-generated, needs review by native speaker; delete this comment afterwards Seçimi engellerle doldurur - + Grid AI-generated, needs review by native speaker; delete this comment afterwards Izgara - + Ctrl+G AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+G - + General AI-generated, needs review by native speaker; delete this comment afterwards Genel - + Map title and description AI-generated, needs review by native speaker; delete this comment afterwards Harita başlığı ve açıklaması - + Ctrl+Enter AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Enter - + Players settings AI-generated, needs review by native speaker; delete this comment afterwards Oyuncu ayarları - + Ctrl+P AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+P - - + + Undo AI-generated, needs review by native speaker; delete this comment afterwards Geri al - + Ctrl+Z AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Z - + Redo AI-generated, needs review by native speaker; delete this comment afterwards Yinele - + Ctrl+Y AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Y - + Erase AI-generated, needs review by native speaker; delete this comment afterwards Sil - + Del AI-generated, needs review by native speaker; delete this comment afterwards Del - + Neutral AI-generated, needs review by native speaker; delete this comment afterwards Tarafsız - + Ctrl+0 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+0 - + Validate AI-generated, needs review by native speaker; delete this comment afterwards Doğrula - + Ctrl+Shift+V AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+V - - - - + + + + Update appearance AI-generated, needs review by native speaker; delete this comment afterwards Görünümü güncelle - + Recreate obstacles AI-generated, needs review by native speaker; delete this comment afterwards Engelleri yeniden oluştur - + Player 1 AI-generated, needs review by native speaker; delete this comment afterwards Oyuncu 1 - + Ctrl+1 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+1 - + Player 2 AI-generated, needs review by native speaker; delete this comment afterwards Oyuncu 2 - + Ctrl+2 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+2 - + Player 3 AI-generated, needs review by native speaker; delete this comment afterwards Oyuncu 3 - + Ctrl+3 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+3 - + Player 4 AI-generated, needs review by native speaker; delete this comment afterwards Oyuncu 4 - + Ctrl+4 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+4 - + Player 5 AI-generated, needs review by native speaker; delete this comment afterwards Oyuncu 5 - + Ctrl+5 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+5 - + Player 6 AI-generated, needs review by native speaker; delete this comment afterwards Oyuncu 6 - + Ctrl+6 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+6 - + Player 7 AI-generated, needs review by native speaker; delete this comment afterwards Oyuncu 7 - + Ctrl+7 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+7 - + Player 8 AI-generated, needs review by native speaker; delete this comment afterwards Oyuncu 8 - + Ctrl+8 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+8 - + Export as... AI-generated, needs review by native speaker; delete this comment afterwards Dışa aktar... - + Ctrl+E AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+E - + Translations AI-generated, needs review by native speaker; delete this comment afterwards Çeviriler - + Ctrl+T AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+T - - + + h3m converter AI-generated, needs review by native speaker; delete this comment afterwards h3m dönüştürücü - + Ctrl+Shift+M AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+M - - + + h3c converter AI-generated, needs review by native speaker; delete this comment afterwards h3c dönüştürücü - + Ctrl+Shift+C AI-generated, needs review by native speaker; delete this comment afterwards Kilitle - + Lock AI-generated, needs review by native speaker; delete this comment afterwards Haritadaki nesneleri yanlışlıkla değişiklik yapılmasını önlemek için kilitle - + Lock objects on map to avoid unnecessary changes AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+L - + Ctrl+L AI-generated, needs review by native speaker; delete this comment afterwards Kilidi kaldır - + Unlock AI-generated, needs review by native speaker; delete this comment afterwards Kilidi Aç - + Unlock all objects on the map AI-generated, needs review by native speaker; delete this comment afterwards Haritadaki tüm nesnelerin kilidini aç - + Ctrl+Shift+L AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+L - + Zoom in AI-generated, needs review by native speaker; delete this comment afterwards Yakınlaştır - + Ctrl++ AI-generated, needs review by native speaker; delete this comment afterwards Ctrl++ - + Zoom out AI-generated, needs review by native speaker; delete this comment afterwards Uzaklaştır - + Ctrl+- AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+- - + Zoom reset AI-generated, needs review by native speaker; delete this comment afterwards Yakınlaştırmayı sıfırla - + Ctrl+Shift+= AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+= - + Confirmation AI-generated, needs review by native speaker; delete this comment afterwards Onay - + Unsaved changes will be lost, are you sure? AI-generated, needs review by native speaker; delete this comment afterwards Kaydedilmemiş değişiklikler kaybolacak, emin misiniz? - + Mods are required AI-generated, needs review by native speaker; delete this comment afterwards Modlar gerekli - + Failed to open map AI-generated, needs review by native speaker; delete this comment afterwards Harita açılamadı - + Open map AI-generated, needs review by native speaker; delete this comment afterwards Harita aç - + All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) AI-generated, needs review by native speaker; delete this comment afterwards Tüm desteklenen haritalar (*.vmap *.h3m);;VCMI haritaları(*.vmap);;HoMM3 haritaları(*.h3m) - + Recently Opened Files AI-generated, needs review by native speaker; delete this comment afterwards Son açılan dosyalar - + Map validation AI-generated, needs review by native speaker; delete this comment afterwards Harita doğrulama - + Map has critical problems and most probably will not be playable. Open Validator from the Map menu to see issues found AI-generated, needs review by native speaker; delete this comment afterwards Harita kritik sorunlar içeriyor ve büyük ihtimalle oynanamaz. Tespit edilen hataları görmek için Harita menüsünden Doğrulayıcıyı açın - + Map has some errors. Open Validator from the Map menu to see issues found AI-generated, needs review by native speaker; delete this comment afterwards Haritada bazı hatalar var. Tespit edilen hataları görmek için Harita menüsünden Doğrulayıcıyı açın - + Failed to save map AI-generated, needs review by native speaker; delete this comment afterwards Harita kaydedilemedi - + Save map AI-generated, needs review by native speaker; delete this comment afterwards Haritayı kaydet - + VCMI maps (*.vmap) AI-generated, needs review by native speaker; delete this comment afterwards VCMI haritaları (*.vmap) - + Type AI-generated, needs review by native speaker; delete this comment afterwards Tür - + Towns AI-generated, needs review by native speaker; delete this comment afterwards Şehirler - + Objects AI-generated, needs review by native speaker; delete this comment afterwards Nesneler - + Heroes AI-generated, needs review by native speaker; delete this comment afterwards Kahramanlar - + Artifacts AI-generated, needs review by native speaker; delete this comment afterwards Eşyalar - + Resources AI-generated, needs review by native speaker; delete this comment afterwards Kaynaklar - + Banks AI-generated, needs review by native speaker; delete this comment afterwards Bankalar - + Dwellings AI-generated, needs review by native speaker; delete this comment afterwards Yerleşimler - + Grounds AI-generated, needs review by native speaker; delete this comment afterwards Zeminler - + Teleports AI-generated, needs review by native speaker; delete this comment afterwards Işınlanmalar - + Mines AI-generated, needs review by native speaker; delete this comment afterwards Madenler - + Triggers AI-generated, needs review by native speaker; delete this comment afterwards Tetikleyiciler - + Monsters AI-generated, needs review by native speaker; delete this comment afterwards Canavarlar - + Quests AI-generated, needs review by native speaker; delete this comment afterwards Görevler - + Wog Objects AI-generated, needs review by native speaker; delete this comment afterwards Wog Nesneleri - + Obstacles AI-generated, needs review by native speaker; delete this comment afterwards Engeller - + Other AI-generated, needs review by native speaker; delete this comment afterwards Diğer - + Mods loading problem AI-generated, needs review by native speaker; delete this comment afterwards Mod yükleme hatası - + Critical error during Mods loading. Disable invalid mods and restart. AI-generated, needs review by native speaker; delete this comment afterwards Modlar yüklenirken kritik bir hata oluştu. Geçersiz modları devre dışı bırakıp yeniden başlatın. - - + + View surface AI-generated, needs review by native speaker; delete this comment afterwards Yüzeyi göster - + No objects selected AI-generated, needs review by native speaker; delete this comment afterwards Hiçbir nesne seçilmedi - + This operation is irreversible. Do you want to continue? AI-generated, needs review by native speaker; delete this comment afterwards Bu işlem geri alınamaz. Devam etmek istiyor musunuz? - + Errors occurred. %1 objects were not updated AI-generated, needs review by native speaker; delete this comment afterwards Hatalar oluştu. %1 nesne güncellenemedi - + Save to image AI-generated, needs review by native speaker; delete this comment afterwards Görüntü olarak kaydet - + Select maps to convert AI-generated, needs review by native speaker; delete this comment afterwards Dönüştürülecek haritaları seç - + HoMM3 maps(*.h3m) AI-generated, needs review by native speaker; delete this comment afterwards HoMM3 haritaları (*.h3m) - + Choose directory to save converted maps AI-generated, needs review by native speaker; delete this comment afterwards Dönüştürülmüş haritaların kaydedileceği dizini seçin - + Operation completed AI-generated, needs review by native speaker; delete this comment afterwards İşlem tamamlandı - + Successfully converted %1 maps AI-generated, needs review by native speaker; delete this comment afterwards %1 harita başarıyla dönüştürüldü - + Failed to convert the map. Abort operation AI-generated, needs review by native speaker; delete this comment afterwards Harita dönüştürülemedi. İşlem iptal edildi - + Select campaign to convert AI-generated, needs review by native speaker; delete this comment afterwards Dönüştürülecek kampanyayı seç - + HoMM3 campaigns (*.h3c) AI-generated, needs review by native speaker; delete this comment afterwards HoMM3 kampanyaları (*.h3c) - + Select destination file AI-generated, needs review by native speaker; delete this comment afterwards Hedef dosyayı seç - + VCMI campaigns (*.vcmp) AI-generated, needs review by native speaker; delete this comment afterwards VCMI kampanyaları (*.vcmp) @@ -1530,30 +1560,30 @@ MapController - + Hero %1 cannot be created as NEUTRAL. AI-generated, needs review by native speaker; delete this comment afterwards %1 kahramanı NEUTRAL olarak oluşturulamaz. - + Missing Required Mod AI-generated, needs review by native speaker; delete this comment afterwards Gerekli mod eksik - + Do you want to do that now ? -AI-generated, needs review by native speaker; delete this comment afterwards + AI-generated, needs review by native speaker; delete this comment afterwards Bunu şimdi yapmak ister misiniz? - + This object's mod is mandatory for map to remain valid. AI-generated, needs review by native speaker; delete this comment afterwards Bu nesnenin mod'u haritanın geçerli kalması için zorunludur. @@ -1658,6 +1688,30 @@ Bunu şimdi yapmak ister misiniz? Mesaj + + MineSelector + + + + Select Mines + + + + + Mine Selector + + + + + Resource + Kaynak + + + + Mines + Madenler + + ModSettings @@ -1811,28 +1865,25 @@ Bunu şimdi yapmak ister misiniz? - PlayerSettings + PlayerSettingsDialog - + Player settings - AI-generated, needs review by native speaker; delete this comment afterwards Oyuncu ayarları - + Players - AI-generated, needs review by native speaker; delete this comment afterwards Oyuncular - + 1 - + Ok - AI-generated, needs review by native speaker; delete this comment afterwards Tamam @@ -1890,434 +1941,434 @@ Bunu şimdi yapmak ister misiniz? İkincil yetenekler: - + Compliant AI-generated, needs review by native speaker; delete this comment afterwards Uysal - + Friendly AI-generated, needs review by native speaker; delete this comment afterwards Dostça - + Aggressive AI-generated, needs review by native speaker; delete this comment afterwards Agresif - + Hostile AI-generated, needs review by native speaker; delete this comment afterwards Düşmanca - + Savage AI-generated, needs review by native speaker; delete this comment afterwards Vahşi - - + + No patrol AI-generated, needs review by native speaker; delete this comment afterwards Devriye yok - + POWER RANK AI-generated, needs review by native speaker; delete this comment afterwards GÜÇ SIRALAMASI - + HERO TYPE AI-generated, needs review by native speaker; delete this comment afterwards KAHRAMAN TÜRÜ - + Hero class AI-generated, needs review by native speaker; delete this comment afterwards Kahraman sınıfı - + Portrait AI-generated, needs review by native speaker; delete this comment afterwards Portre - + Skills AI-generated, needs review by native speaker; delete this comment afterwards Yetenekler - + Artifacts AI-generated, needs review by native speaker; delete this comment afterwards Eşyalar - - + + %n tile(s) - + Buildings AI-generated, needs review by native speaker; delete this comment afterwards Binalar - + Events AI-generated, needs review by native speaker; delete this comment afterwards Olaylar - + Resource AI-generated, needs review by native speaker; delete this comment afterwards Kaynak - + Artifact reward AI-generated, needs review by native speaker; delete this comment afterwards Ekipman ödülü - + Quest AI-generated, needs review by native speaker; delete this comment afterwards Görev - + Identifier AI-generated, needs review by native speaker; delete this comment afterwards Tanımlayıcı - + ID AI-generated, needs review by native speaker; delete this comment afterwards Kimlik (ID) - + SubID AI-generated, needs review by native speaker; delete this comment afterwards Alt Kimlik (SubID) - + InstanceName AI-generated, needs review by native speaker; delete this comment afterwards Örnek Adı - + IsStatic AI-generated, needs review by native speaker; delete this comment afterwards Statik mi - - + + neutral AI-generated, needs review by native speaker; delete this comment afterwards tarafsız - - + + Army AI-generated, needs review by native speaker; delete this comment afterwards Ordu - - - + + - - - - - + + + + + + Owner AI-generated, needs review by native speaker; delete this comment afterwards Sahibi - - + + Same as town AI-generated, needs review by native speaker; delete this comment afterwards Şehirle aynı - - + + Removable units AI-generated, needs review by native speaker; delete this comment afterwards Kaldırılabilir birimler - - + + Placeholder type AI-generated, needs review by native speaker; delete this comment afterwards Yer tutucu türü - - + + Power rank AI-generated, needs review by native speaker; delete this comment afterwards Güç sıralaması - - - - + + + + Hero type AI-generated, needs review by native speaker; delete this comment afterwards Kahraman türü - - + + Experience AI-generated, needs review by native speaker; delete this comment afterwards Deneyim - - + + MALE AI-generated, needs review by native speaker; delete this comment afterwards ERKEK - - + + FEMALE AI-generated, needs review by native speaker; delete this comment afterwards KADIN - - + + Gender AI-generated, needs review by native speaker; delete this comment afterwards Cinsiyet - - + + Name AI-generated, needs review by native speaker; delete this comment afterwards İsim - - + + Biography AI-generated, needs review by native speaker; delete this comment afterwards Biyografi - - + + Spells AI-generated, needs review by native speaker; delete this comment afterwards Büyüler - - + + Patrol radius AI-generated, needs review by native speaker; delete this comment afterwards Devriye yarıçapı - - + + Town name AI-generated, needs review by native speaker; delete this comment afterwards Şehir adı - - + + Same as player AI-generated, needs review by native speaker; delete this comment afterwards Oyuncu ile aynı - - - - - - - - - + + + + + + + + + Message AI-generated, needs review by native speaker; delete this comment afterwards Mesaj - - + + Spell AI-generated, needs review by native speaker; delete this comment afterwards Büyü - - + + Productivity AI-generated, needs review by native speaker; delete this comment afterwards Üretkenlik - - - - + + + + Amount AI-generated, needs review by native speaker; delete this comment afterwards Miktar - + Character AI-generated, needs review by native speaker; delete this comment afterwards Karakter - + Select town AI-generated, needs review by native speaker; delete this comment afterwards Şehir seç - - + + Never flees AI-generated, needs review by native speaker; delete this comment afterwards Asla kaçmaz - - + + Not growing AI-generated, needs review by native speaker; delete this comment afterwards Büyümez - - + + Reward AI-generated, needs review by native speaker; delete this comment afterwards Ödül - - + + Remove after AI-generated, needs review by native speaker; delete this comment afterwards Sonra kaldır - - + + Human trigger AI-generated, needs review by native speaker; delete this comment afterwards İnsan tetikleyicisi - - + + Cpu trigger AI-generated, needs review by native speaker; delete this comment afterwards YZ tetikleyicisi - - + + First visit text AI-generated, needs review by native speaker; delete this comment afterwards İlk ziyaret metni - - + + Next visit text AI-generated, needs review by native speaker; delete this comment afterwards Sonraki ziyaret metni - - + + Completed text AI-generated, needs review by native speaker; delete this comment afterwards Tamamlandığında gösterilen metin - - - + + + Repeat quest AI-generated, needs review by native speaker; delete this comment afterwards Görevi tekrar et - - + + Time limit AI-generated, needs review by native speaker; delete this comment afterwards Zaman sınırı - + UNFLAGGABLE AI-generated, needs review by native speaker; delete this comment afterwards BAYRAKLANAMAZ - + Can't place object AI-generated, needs review by native speaker; delete this comment afterwards Nesne yerleştirilemiyor - + There can only be one grail object on the map. AI-generated, needs review by native speaker; delete this comment afterwards Haritada yalnızca bir kutsal emanet (grail) nesnesi olabilir. - + (submod of %1) AI-generated, needs review by native speaker; delete this comment afterwards (%1 modunun alt modülü) - + The mod '%1'%2, is required by an object on the map. Add it to the map's required mods in Map->General settings. should be consistent with Map->General menu entry translation @@ -2365,14 +2416,14 @@ Harita → Genel ayarlar kısmından gerekli modlar listesine ekleyin. - + Hero Level: %1 AI-generated, needs review by native speaker; delete this comment afterwards Kahraman Seviyesi: %1 - + Hero Experience: %1 AI-generated, needs review by native speaker; delete this comment afterwards Kahraman Deneyimi: %1 @@ -2385,49 +2436,49 @@ Harita → Genel ayarlar kısmından gerekli modlar listesine ekleyin. - + Mana Percentage: %1 AI-generated, needs review by native speaker; delete this comment afterwards Mana Yüzdesi: %1 - + Primary Skills: %1/%2/%3/%4 AI-generated, needs review by native speaker; delete this comment afterwards Birincil Yetenekler: %1/%2/%3/%4 - + Resources: %1 AI-generated, needs review by native speaker; delete this comment afterwards Kaynaklar: %1 - + Artifacts: %1 AI-generated, needs review by native speaker; delete this comment afterwards Eşyalar: %1 - + Spells: %1 AI-generated, needs review by native speaker; delete this comment afterwards Büyüler: %1 - + Secondary Skills: %1 AI-generated, needs review by native speaker; delete this comment afterwards İkincil Yetenekler: %1 - + Creatures: %1 AI-generated, needs review by native speaker; delete this comment afterwards Yaratıklar: %1 @@ -2451,43 +2502,43 @@ Harita → Genel ayarlar kısmından gerekli modlar listesine ekleyin.Oyuncular: %1 - + Rewards: AI-generated, needs review by native speaker; delete this comment afterwards Ödüller: - + Reward Message: %1 AI-generated, needs review by native speaker; delete this comment afterwards Ödül Mesajı: %1 - + Mana Diff: %1 AI-generated, needs review by native speaker; delete this comment afterwards Mana Farkı: %1 - + Move Points: %1 AI-generated, needs review by native speaker; delete this comment afterwards Hareket Puanı: %1 - + Move Percentage: %1 AI-generated, needs review by native speaker; delete this comment afterwards Hareket Yüzdesi: %1 - + Spell Cast: %1 (%2) AI-generated, needs review by native speaker; delete this comment afterwards Büyü Kullanımı: %1 (%2) - + Bonuses: %1 AI-generated, needs review by native speaker; delete this comment afterwards Bonuslar: %1 @@ -2989,20 +3040,20 @@ Harita → Genel ayarlar kısmından gerekli modlar listesine ekleyin.Oyuncular - + None AI-generated, needs review by native speaker; delete this comment afterwards Yok - + Day %1 AI-generated, needs review by native speaker; delete this comment afterwards Gün %1 - - + + Reward %1 AI-generated, needs review by native speaker; delete this comment afterwards Ödül %1 @@ -3268,8 +3319,8 @@ Harita → Genel ayarlar kısmından gerekli modlar listesine ekleyin. - - + + Player position AI-generated, needs review by native speaker; delete this comment afterwards Oyuncu konumu @@ -3329,57 +3380,57 @@ Harita → Genel ayarlar kısmından gerekli modlar listesine ekleyin.Oyuncu - + Open map AI-generated, needs review by native speaker; delete this comment afterwards Harita aç - + All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) AI-generated, needs review by native speaker; delete this comment afterwards Tüm desteklenen haritalar (*.vmap *.h3m);;VCMI haritaları (*.vmap);;HoMM3 haritaları (*.h3m) - - + + Error AI-generated, needs review by native speaker; delete this comment afterwards Hata - - + + Could not open the file. AI-generated, needs review by native speaker; delete this comment afterwards Dosya açılamadı. - + Save map AI-generated, needs review by native speaker; delete this comment afterwards Haritayı kaydet - + VCMI maps (*.vmap); AI-generated, needs review by native speaker; delete this comment afterwards VCMI haritaları (*.vmap); - + HoMM3 maps (*.h3m); AI-generated, needs review by native speaker; delete this comment afterwards HoMM3 haritaları (*.h3m); - + Source scenario AI-generated, needs review by native speaker; delete this comment afterwards Kaynak senaryo - + Hero AI-generated, needs review by native speaker; delete this comment afterwards Kahraman @@ -3419,7 +3470,7 @@ Harita → Genel ayarlar kısmından gerekli modlar listesine ekleyin. - + Building AI-generated, needs review by native speaker; delete this comment afterwards Bina @@ -3450,7 +3501,7 @@ Harita → Genel ayarlar kısmından gerekli modlar listesine ekleyin. - + Secondary skill AI-generated, needs review by native speaker; delete this comment afterwards İkincil beceri @@ -3458,7 +3509,7 @@ Harita → Genel ayarlar kısmından gerekli modlar listesine ekleyin. - + Resource AI-generated, needs review by native speaker; delete this comment afterwards Kaynak @@ -3560,54 +3611,679 @@ Harita → Genel ayarlar kısmından gerekli modlar listesine ekleyin.Nadir (%1, %2, %3, %4) - + strongest hero AI-generated, needs review by native speaker; delete this comment afterwards en güçlü kahraman - + generated hero AI-generated, needs review by native speaker; delete this comment afterwards oluşturulmuş kahraman - + random hero AI-generated, needs review by native speaker; delete this comment afterwards rastgele kahraman - + %1 spell for %2 AI-generated, needs review by native speaker; delete this comment afterwards %2 için %1 büyüsü - + %1 %2 for %3 AI-generated, needs review by native speaker; delete this comment afterwards %3 için %1 %2 - + %1 artifact for %2 AI-generated, needs review by native speaker; delete this comment afterwards %2 için %1 eseri - + %1 spell scroll for %2 AI-generated, needs review by native speaker; delete this comment afterwards %2 için %1 büyü parşömeni - + Primary skill (Attack: %1, Defense: %2, Spell: %3, Knowledge: %4) for %5 AI-generated, needs review by native speaker; delete this comment afterwards %5 için Birincil beceri (Saldırı: %1, Savunma: %2, Büyü: %3, Bilgi: %4) + + TemplateEditor + + + + VCMI Template Editor + + + + + File + Dosya + + + + Edit + Düzenle + + + + View + Görünüm + + + + Toolbar + Araç çubuğu + + + + Selected Template: + + + + + + + Add + Ekle + + + + Remove + Kaldır + + + + Rename + + + + + General + Genel + + + + Name + İsim + + + + Description + + + + + Min Size + + + + + + + X + + + + + + + Y + + + + + + + Z + + + + + Max Size + + + + + + Players + Oyuncular + + + + Human + + + + + Allowed water content + + + + + + + None + + + + + + Normal + Normal + + + + Islands + Adalar + + + + Zone + + + + + Visualisation + + + + + Position + + + + + + Size + + + + + ID + Kimlik (ID) + + + + + Type + Tür + + + + Owner + Sahibi + + + + Zone link + + + + + + + Mines + Madenler + + + + + Custom objects + + + + + + Towns + Şehirler + + + + + Terrain + + + + + + + + Treasure + + + + + Town info + + + + + Town count + + + + + + + + Player + Oyuncu + + + + + + + Neutral + Tarafsız + + + + Castle count + + + + + Town density + + + + + Castle density + + + + + Match terrain to town + + + + + Terrain types + + + + + Banned terrain types + + + + + Towns are same type + + + + + Allowed towns + + + + + Banned towns + + + + + Town hints + + + + + Monsters + Canavarlar + + + + Allowed monsters + + + + + Banned monsters + + + + + Strength + + + + + Objects + Nesneler + + + + Connections + + + + + Open + + + + + Save + Kaydet + + + + New + Yeni + + + + Save as... + Farklı kaydet... + + + + Ctrl+Shift+S + Ctrl+Shift+S + + + + Add zone + + + + + Remove zone + + + + + + Del + Del + + + + Auto position + + + + + Ctrl+P + Ctrl+P + + + + Zoom in + Yakınlaştır + + + + Ctrl++ + Ctrl++ + + + + Zoom out + Uzaklaştır + + + + Ctrl+- + Ctrl+- + + + + Zoom auto + + + + + Ctrl+Shift+: + + + + + Zoom reset + Yakınlaştırmayı sıfırla + + + + Ctrl+Shift+= + Ctrl+Shift+= + + + + Min + + + + + Max + + + + + Action + + + + + + Delete + + + + + ID: %1 + + + + + Max treasure: %1 + + + + + Player start + + + + + CPU start + + + + + Junction + + + + + Water + + + + + Sealed + + + + + + Random + Rastgele + + + + Weak + Zayıf + + + + Strong + Güçlü + + + + Zone A + + + + + Zone B + + + + + Guard + + + + + Road + + + + + Guarded + + + + + Fictive + + + + + Repulsive + + + + + Wide + + + + + Force portal + + + + + Yes + + + + + No + + + + + Zone A: %1 +Zone B: %2 +Guard: %3 + + + + + Confirmation + Onay + + + + Unsaved changes will be lost, are you sure? + Kaydedilmemiş değişiklikler kaybolacak, emin misiniz? + + + + Open template + + + + + VCMI templates(*.json) + + + + + Save template + + + + + VCMI templates (*.json) + + + + + + Enter Name + + + + + + Name: + + + + + Already existing! + + + + + At template with this name is already existing. + + + + + To few templates! + + + + + At least one template should remain after removing. + + + + + + Error + Hata + + + + + Not implemented yet! + + + + + TerrainSelector + + + + Select Terrains + + + + + Terrain Selector + + + TimedEvent @@ -4010,6 +4686,40 @@ Harita → Genel ayarlar kısmından gerekli modlar listesine ekleyin.Bu dile ait tüm mevcut metin kayıtları silinecek. Devam edilsin mi? + + TreasureSelector + + + + Select Treasures + + + + + Treasure Selector + + + + + Min + + + + + Max + + + + + Density + + + + + Action + + + Validator @@ -4052,13 +4762,13 @@ Harita → Genel ayarlar kısmından gerekli modlar listesine ekleyin. Object %1 is assigned to non-playable player %2 AI-generated, needs review by native speaker; delete this comment afterwards - Nesne %1 oynanamaz oyuncu %2'ye atanmış + Nesne %1 oynanamaz oyuncu %2'ye atanmış Spell scroll %1 doesn't have instance assigned and must be removed AI-generated, needs review by native speaker; delete this comment afterwards - Büyü parşömeni %1'in atanmış örneği yok ve kaldırılmalı + Büyü parşömeni %1'in atanmış örneği yok ve kaldırılmalı @@ -4070,7 +4780,7 @@ Harita → Genel ayarlar kısmından gerekli modlar listesine ekleyin. Player %1 has no towns and heroes assigned AI-generated, needs review by native speaker; delete this comment afterwards - Oyuncu %1'in atanmış şehir ve kahramanı yok + Oyuncu %1'in atanmış şehir ve kahramanı yok @@ -4118,7 +4828,7 @@ Harita → Genel ayarlar kısmından gerekli modlar listesine ekleyin. Player %1 doesn't have any starting town AI-generated, needs review by native speaker; delete this comment afterwards - Oyuncu %1'in hiç başlangıç şehri yok + Oyuncu %1'in hiç başlangıç şehri yok @@ -4474,25 +5184,25 @@ Harita → Genel ayarlar kısmından gerekli modlar listesine ekleyin.İptal - + No template AI-generated, needs review by native speaker; delete this comment afterwards Şablon yok - + No template for parameters specified. Random map cannot be generated. AI-generated, needs review by native speaker; delete this comment afterwards Belirtilen parametreler için şablon yok. Rastgele harita oluşturulamaz. - + RMG failure AI-generated, needs review by native speaker; delete this comment afterwards RMG hatası - + [default] AI-generated, needs review by native speaker; delete this comment afterwards [varsayılan] @@ -4501,31 +5211,31 @@ Harita → Genel ayarlar kısmından gerekli modlar listesine ekleyin. main - + Filepath of the map to open. AI-generated, needs review by native speaker; delete this comment afterwards Açılacak haritanın dosya yolu. - + Extract original H3 archives into a separate folder. AI-generated, needs review by native speaker; delete this comment afterwards Orijinal H3 arşivlerini ayrı bir klasöre çıkar. - + From an extracted archive, it Splits TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 and Un44 into individual PNG's. AI-generated, needs review by native speaker; delete this comment afterwards Çıkarılan arşivden, TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 ve Un44'ü ayrı PNG'lere ayırır. - + From an extracted archive, Converts single Images (found in Images folder) from .pcx to png. AI-generated, needs review by native speaker; delete this comment afterwards Çıkarılan arşivden, Görseller klasöründe bulunan tekli resimleri .pcx'ten png'ye dönüştürür. - + Delete original files, for the ones split / converted. AI-generated, needs review by native speaker; delete this comment afterwards Bölünmüş / dönüştürülmüş dosyaların orijinallerini sil. diff --git a/mapeditor/translation/ukrainian.ts b/mapeditor/translation/ukrainian.ts index 03ff88a5b..2e6583bbf 100644 --- a/mapeditor/translation/ukrainian.ts +++ b/mapeditor/translation/ukrainian.ts @@ -47,7 +47,7 @@ CampaignEditor - + VCMI Campaign Editor AI-generated, needs review by native speaker; delete this comment afterwards Редактор кампаній VCMI @@ -119,42 +119,42 @@ Показати повний фон - + Scenario editor AI-generated, needs review by native speaker; delete this comment afterwards Редактор сценарію - + Confirmation AI-generated, needs review by native speaker; delete this comment afterwards Підтвердження - + Unsaved changes will be lost, are you sure? AI-generated, needs review by native speaker; delete this comment afterwards Незбережені зміни буде втрачено, ви впевнені? - + Open map Відкрити мапу - + All supported campaigns (*.vcmp *.h3c);;VCMI campaigns(*.vcmp);;HoMM3 campaigns(*.h3c) AI-generated, needs review by native speaker; delete this comment afterwards Всі підтримувані кампанії (*.vcmp *.h3c);;Кампанії VCMI (*.vcmp);;Кампанії HoMM3 (*.h3c) - + Save campaign AI-generated, needs review by native speaker; delete this comment afterwards Зберегти кампанію - + VCMI campaigns (*.vcmp) AI-generated, needs review by native speaker; delete this comment afterwards Кампанії VCMI (*.vcmp) @@ -164,7 +164,7 @@ CampaignProperties - + Campaign Properties AI-generated, needs review by native speaker; delete this comment afterwards Властивості кампанії @@ -299,47 +299,47 @@ Фінальне відео - + Custom AI-generated, needs review by native speaker; delete this comment afterwards Користувацьке - + Infix AI-generated, needs review by native speaker; delete this comment afterwards Інфікс - + X - + Y - + Label Pos X AI-generated, needs review by native speaker; delete this comment afterwards Позиція мітки X - + Label Pos Y AI-generated, needs review by native speaker; delete this comment afterwards Позиція мітки Y - + Fewer Scenarios AI-generated, needs review by native speaker; delete this comment afterwards Менше сценаріїв - + New Region setup supports fewer scenarios than before. Some will removed. Continue? AI-generated, needs review by native speaker; delete this comment afterwards Налаштування нового регіону підтримує менше сценаріїв, ніж раніше. Деякі будуть видалені. Продовжити? @@ -373,6 +373,20 @@ Нова подія + + FactionSelector + + + + Select Factions + + + + + Faction Selector + + + GeneralSettings @@ -456,6 +470,16 @@ Artifact Артефакт + + + Save + Зберегти + + + + Cancel + Скасувати + HeroSkillsWidget @@ -589,7 +613,7 @@ MainWindow - + VCMI Map Editor Редактор мап VCMI @@ -600,804 +624,810 @@ - + Open Recent Відкрити останні - + Map Мапа - + Edit Редагування - + View Вигляд - + Player Гравець - + Toolbar Панель інструментів - + Minimap Мінімапа - + Map Objects View Перегляд об'єктів мапи - + Browser Навігатор - + Inspector Інспектор - + Property Властивість - + Value Значення - + Tools Інструменти - + Painting Малювання - + Terrains Землі - + Roads Шляхи - + Rivers Річки - + Preview Попередній перегляд - + Open Відкрити - + Ctrl+O AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+O - + More... Ще... - + Save Зберегти - + Ctrl+S AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+S - + New Створити - + Ctrl+N AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+N - + Save as... Зберегти як... - + Ctrl+Shift+S Ctrl+Shift+S - - + + Campaign editor AI-generated, needs review by native speaker; delete this comment afterwards Редактор кампанії - - - - + + + Template editor + + + + + + + View underground Дивитись підземелля - + Ctrl+U AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+U - + Pass Прохідність - + Ctrl+Shift+P AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+P - + Cut Вирізати - + Ctrl+X AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+X - + Copy Скопіювати - + Ctrl+C AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+C - + Paste Вставити - + Ctrl+V AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+V - + Fill Заповнити - + Fills the selection with obstacles Заповнити перешкодами - + Grid Сітка - + Ctrl+G AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+G - + General Загальний - + Map title and description Назва та опис мапи - + Ctrl+Enter AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Enter - + Players settings Налаштування гравців - + Ctrl+P AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+P - - + + Undo Відмінити - + Ctrl+Z AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Z - + Redo Повторити - + Ctrl+Y AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Y - + Erase Стерти - + Del AI-generated, needs review by native speaker; delete this comment afterwards Del - + Neutral Нейтральний - + Ctrl+0 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+0 - + Validate Перевірити - + Ctrl+Shift+V AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+V - - - - + + + + Update appearance Оновити вигляд - + Recreate obstacles Оновити перешкоди - + Player 1 Гравець 1 - + Ctrl+1 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+1 - + Player 2 Гравець 2 - + Ctrl+2 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+2 - + Player 3 Гравець 3 - + Ctrl+3 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+3 - + Player 4 Гравець 4 - + Ctrl+4 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+4 - + Player 5 Гравець 5 - + Ctrl+5 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+5 - + Player 6 Гравець 6 - + Ctrl+6 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+6 - + Player 7 Гравець 7 - + Ctrl+7 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+7 - + Player 8 Гравець 8 - + Ctrl+8 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+8 - + Export as... Експортувати як... - + Ctrl+E AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+E - + Translations Переклади - + Ctrl+T AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+T - - + + h3m converter AI-generated, needs review by native speaker; delete this comment afterwards конвертер h3m - + Ctrl+Shift+M AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+M - - + + h3c converter AI-generated, needs review by native speaker; delete this comment afterwards конвертер h3c - + Ctrl+Shift+C AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+C - + Lock AI-generated, needs review by native speaker; delete this comment afterwards Заблокувати - + Lock objects on map to avoid unnecessary changes AI-generated, needs review by native speaker; delete this comment afterwards Заблокувати об’єкти на карті, щоб уникнути небажаних змін - + Ctrl+L AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+L - + Unlock AI-generated, needs review by native speaker; delete this comment afterwards Розблокувати - + Unlock all objects on the map AI-generated, needs review by native speaker; delete this comment afterwards Розблокувати всі об’єкти на карті - + Ctrl+Shift+L AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+L - + Zoom in AI-generated, needs review by native speaker; delete this comment afterwards Збільшити - + Ctrl++ AI-generated, needs review by native speaker; delete this comment afterwards Ctrl++ - + Zoom out AI-generated, needs review by native speaker; delete this comment afterwards Зменшити - + Ctrl+- AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+- - + Zoom reset AI-generated, needs review by native speaker; delete this comment afterwards Скидання масштабу - + Ctrl+Shift+= AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+= - + Confirmation AI-generated, needs review by native speaker; delete this comment afterwards Підтвердження - + Unsaved changes will be lost, are you sure? AI-generated, needs review by native speaker; delete this comment afterwards Незбережені зміни буде втрачено, ви впевнені? - + Mods are required AI-generated, needs review by native speaker; delete this comment afterwards Необхідні моди - + Failed to open map AI-generated, needs review by native speaker; delete this comment afterwards Не вдалося відкрити карту - + Open map Відкрити мапу - + All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) Всі підтримувані мапи (*.vmap *.h3m);;Мапи VCMI (*.vmap);;Мапи HoMM3 (*.h3m) - + Recently Opened Files AI-generated, needs review by native speaker; delete this comment afterwards Останні файли - + Map validation AI-generated, needs review by native speaker; delete this comment afterwards Валідація карти - + Map has critical problems and most probably will not be playable. Open Validator from the Map menu to see issues found AI-generated, needs review by native speaker; delete this comment afterwards На карті знайдено критичні помилки і, ймовірно, вона не буде придатна для гри. Відкрийте Валідатор у меню Карта, щоб побачити знайдені проблеми - + Map has some errors. Open Validator from the Map menu to see issues found AI-generated, needs review by native speaker; delete this comment afterwards На карті знайдено деякі помилки. Відкрийте Валідатор у меню Карта, щоб побачити знайдені проблеми - + Failed to save map AI-generated, needs review by native speaker; delete this comment afterwards Не вдалося зберегти карту - + Save map Зберегти мапу - + VCMI maps (*.vmap) Мапи VCMI - + Type Тип - + Towns AI-generated, needs review by native speaker; delete this comment afterwards Міста - + Objects AI-generated, needs review by native speaker; delete this comment afterwards Об’єкти - + Heroes Герої - + Artifacts Артефакти - + Resources AI-generated, needs review by native speaker; delete this comment afterwards Ресурси - + Banks AI-generated, needs review by native speaker; delete this comment afterwards Банки - + Dwellings AI-generated, needs review by native speaker; delete this comment afterwards Житла - + Grounds AI-generated, needs review by native speaker; delete this comment afterwards Місцевості - + Teleports AI-generated, needs review by native speaker; delete this comment afterwards Телепорти - + Mines AI-generated, needs review by native speaker; delete this comment afterwards Шахти - + Triggers AI-generated, needs review by native speaker; delete this comment afterwards Тригери - + Monsters AI-generated, needs review by native speaker; delete this comment afterwards Монстри - + Quests AI-generated, needs review by native speaker; delete this comment afterwards Квести - + Wog Objects AI-generated, needs review by native speaker; delete this comment afterwards Wog‑об’єкти - + Obstacles AI-generated, needs review by native speaker; delete this comment afterwards Перешкоди - + Other AI-generated, needs review by native speaker; delete this comment afterwards Інше - + Mods loading problem AI-generated, needs review by native speaker; delete this comment afterwards Проблема з завантаженням модів - + Critical error during Mods loading. Disable invalid mods and restart. AI-generated, needs review by native speaker; delete this comment afterwards Критична помилка під час завантаження модів. Вимкніть невірні моди та перезапустіть. - - + + View surface Дивитись поверхню - + No objects selected AI-generated, needs review by native speaker; delete this comment afterwards Об’єкти не вибрані - + This operation is irreversible. Do you want to continue? AI-generated, needs review by native speaker; delete this comment afterwards Ця операція незворотна. Продовжити? - + Errors occurred. %1 objects were not updated AI-generated, needs review by native speaker; delete this comment afterwards Сталися помилки. %1 об’єкт(ів) не було оновлено - + Save to image AI-generated, needs review by native speaker; delete this comment afterwards Зберегти як зображення - + Select maps to convert AI-generated, needs review by native speaker; delete this comment afterwards Виберіть карти для конвертації - + HoMM3 maps(*.h3m) AI-generated, needs review by native speaker; delete this comment afterwards Карти HoMM3 (*.h3m) - + Choose directory to save converted maps AI-generated, needs review by native speaker; delete this comment afterwards Виберіть каталог для збереження конвертованих карт - + Operation completed AI-generated, needs review by native speaker; delete this comment afterwards Операція завершена - + Successfully converted %1 maps AI-generated, needs review by native speaker; delete this comment afterwards Успішно конвертовано %1 карту(и) - + Failed to convert the map. Abort operation AI-generated, needs review by native speaker; delete this comment afterwards Не вдалося конвертувати карту. Аварійне завершення операції - + Select campaign to convert AI-generated, needs review by native speaker; delete this comment afterwards Виберіть кампанію для конвертації - + HoMM3 campaigns (*.h3c) AI-generated, needs review by native speaker; delete this comment afterwards Кампанії HoMM3 (*.h3c) - + Select destination file AI-generated, needs review by native speaker; delete this comment afterwards Виберіть файл призначення - + VCMI campaigns (*.vcmp) AI-generated, needs review by native speaker; delete this comment afterwards Кампанії VCMI (*.vcmp) @@ -1406,30 +1436,30 @@ MapController - + Hero %1 cannot be created as NEUTRAL. AI-generated, needs review by native speaker; delete this comment afterwards Герой %1 не може бути створений як НЕЙТРАЛЬНИЙ. - + Missing Required Mod AI-generated, needs review by native speaker; delete this comment afterwards Відсутній необхідний мод - + Do you want to do that now ? -AI-generated, needs review by native speaker; delete this comment afterwards + AI-generated, needs review by native speaker; delete this comment afterwards Бажаєте зробити це зараз? - + This object's mod is mandatory for map to remain valid. AI-generated, needs review by native speaker; delete this comment afterwards Мод цього об’єкта обов’язковий для того, щоб карта залишалася дійсною. @@ -1519,6 +1549,30 @@ Do you want to do that now ? Повідомлення + + MineSelector + + + + Select Mines + + + + + Mine Selector + + + + + Resource + Ресурс + + + + Mines + Шахти + + ModSettings @@ -1655,26 +1709,26 @@ Do you want to do that now ? - PlayerSettings + PlayerSettingsDialog - + Player settings - Налаштування гравця + Налаштування гравця - + Players - Гравці + - + 1 - 1 + 1 - + Ok - Підтвердити + Підтвердити @@ -1731,79 +1785,79 @@ Do you want to do that now ? Вторинні навички: - + Compliant AI-generated, needs review by native speaker; delete this comment afterwards Сумісний - + Friendly AI-generated, needs review by native speaker; delete this comment afterwards Дружній - + Aggressive AI-generated, needs review by native speaker; delete this comment afterwards Агресивний - + Hostile AI-generated, needs review by native speaker; delete this comment afterwards Ворожий - + Savage AI-generated, needs review by native speaker; delete this comment afterwards Жорстокий - - + + No patrol AI-generated, needs review by native speaker; delete this comment afterwards Без патрулювання - + POWER RANK AI-generated, needs review by native speaker; delete this comment afterwards РАНГ СИЛИ - + HERO TYPE AI-generated, needs review by native speaker; delete this comment afterwards ТИП ГЕРОЯ - + Hero class AI-generated, needs review by native speaker; delete this comment afterwards Клас героя - + Portrait AI-generated, needs review by native speaker; delete this comment afterwards Портрет - + Skills Вміння - + Artifacts Артефакти - - + + %n tile(s) AI-generated, needs review by native speaker; delete this comment afterwards @@ -1813,348 +1867,348 @@ Do you want to do that now ? - + Buildings Будівлі - + Events Події - + Resource AI-generated, needs review by native speaker; delete this comment afterwards Ресурс - + Artifact reward AI-generated, needs review by native speaker; delete this comment afterwards Нагорода — артефакт - + Quest AI-generated, needs review by native speaker; delete this comment afterwards Квест - + Identifier AI-generated, needs review by native speaker; delete this comment afterwards Ідентифікатор - + ID AI-generated, needs review by native speaker; delete this comment afterwards ID - + SubID AI-generated, needs review by native speaker; delete this comment afterwards SubID - + InstanceName AI-generated, needs review by native speaker; delete this comment afterwards InstanceName - + IsStatic AI-generated, needs review by native speaker; delete this comment afterwards IsStatic - - + + neutral AI-generated, needs review by native speaker; delete this comment afterwards нейтральний - - + + Army AI-generated, needs review by native speaker; delete this comment afterwards Армія - - - + + - - - - - + + + + + + Owner AI-generated, needs review by native speaker; delete this comment afterwards Власник - - + + Same as town AI-generated, needs review by native speaker; delete this comment afterwards Як у міста - - + + Removable units AI-generated, needs review by native speaker; delete this comment afterwards Видаляємі юніти - - + + Placeholder type AI-generated, needs review by native speaker; delete this comment afterwards Тип-заповнювач - - + + Power rank AI-generated, needs review by native speaker; delete this comment afterwards Ранг сили - - - - + + + + Hero type AI-generated, needs review by native speaker; delete this comment afterwards Тип героя - - + + Experience AI-generated, needs review by native speaker; delete this comment afterwards Досвід - - + + MALE AI-generated, needs review by native speaker; delete this comment afterwards ЧОЛОВІК - - + + FEMALE AI-generated, needs review by native speaker; delete this comment afterwards ЖІНКА - - + + Gender AI-generated, needs review by native speaker; delete this comment afterwards Стать - - + + Name AI-generated, needs review by native speaker; delete this comment afterwards Ім'я - - + + Biography AI-generated, needs review by native speaker; delete this comment afterwards Біографія - - + + Spells Закляття - - + + Patrol radius AI-generated, needs review by native speaker; delete this comment afterwards Радіус патруля - - + + Town name AI-generated, needs review by native speaker; delete this comment afterwards Назва міста - - + + Same as player AI-generated, needs review by native speaker; delete this comment afterwards Як у гравця - - - - - - - - - + + + + + + + + + Message Повідомлення - - + + Spell AI-generated, needs review by native speaker; delete this comment afterwards Закляття - - + + Productivity AI-generated, needs review by native speaker; delete this comment afterwards Продуктивність - - - - + + + + Amount AI-generated, needs review by native speaker; delete this comment afterwards Кількість - + Character AI-generated, needs review by native speaker; delete this comment afterwards Персонаж - + Select town AI-generated, needs review by native speaker; delete this comment afterwards Вибрати місто - - + + Never flees AI-generated, needs review by native speaker; delete this comment afterwards Ніколи не тікає - - + + Not growing AI-generated, needs review by native speaker; delete this comment afterwards Не розмножується - - + + Reward AI-generated, needs review by native speaker; delete this comment afterwards Нагорода - - + + Remove after AI-generated, needs review by native speaker; delete this comment afterwards Видалити після - - + + Human trigger AI-generated, needs review by native speaker; delete this comment afterwards Тригер гравця - - + + Cpu trigger AI-generated, needs review by native speaker; delete this comment afterwards Тригер ІІ - - + + First visit text AI-generated, needs review by native speaker; delete this comment afterwards Текст при першому візиті - - + + Next visit text AI-generated, needs review by native speaker; delete this comment afterwards Текст при наступному візиті - - + + Completed text AI-generated, needs review by native speaker; delete this comment afterwards Текст при виконанні - - - + + + Repeat quest AI-generated, needs review by native speaker; delete this comment afterwards Повторюваний квест - - + + Time limit AI-generated, needs review by native speaker; delete this comment afterwards Обмеження за часом - + UNFLAGGABLE AI-generated, needs review by native speaker; delete this comment afterwards НЕПРАПОРОПОСТАВНИЙ - + Can't place object Неможливо розмістити об'єкт - + There can only be one grail object on the map. AI-generated, needs review by native speaker; delete this comment afterwards На карті може бути лише один Грааль. - + (submod of %1) AI-generated, needs review by native speaker; delete this comment afterwards (субмод моду %1) - + The mod '%1'%2, is required by an object on the map. Add it to the map's required mods in Map->General settings. should be consistent with Map->General menu entry translation @@ -2202,14 +2256,14 @@ Add it to the map's required mods in Map->General settings. - + Hero Level: %1 AI-generated, needs review by native speaker; delete this comment afterwards Рівень героя: %1 - + Hero Experience: %1 AI-generated, needs review by native speaker; delete this comment afterwards Досвід героя: %1 @@ -2222,49 +2276,49 @@ Add it to the map's required mods in Map->General settings. - + Mana Percentage: %1 AI-generated, needs review by native speaker; delete this comment afterwards Відсоток мани: %1 - + Primary Skills: %1/%2/%3/%4 AI-generated, needs review by native speaker; delete this comment afterwards Основні навички: %1/%2/%3/%4 - + Resources: %1 AI-generated, needs review by native speaker; delete this comment afterwards Ресурси: %1 - + Artifacts: %1 AI-generated, needs review by native speaker; delete this comment afterwards Артефакти: %1 - + Spells: %1 AI-generated, needs review by native speaker; delete this comment afterwards Закляття: %1 - + Secondary Skills: %1 AI-generated, needs review by native speaker; delete this comment afterwards Вторинні навички: %1 - + Creatures: %1 AI-generated, needs review by native speaker; delete this comment afterwards Істоти: %1 @@ -2288,43 +2342,43 @@ Add it to the map's required mods in Map->General settings. Гравці: %1 - + Rewards: AI-generated, needs review by native speaker; delete this comment afterwards Нагороди: - + Reward Message: %1 AI-generated, needs review by native speaker; delete this comment afterwards Повідомлення про нагороду: %1 - + Mana Diff: %1 AI-generated, needs review by native speaker; delete this comment afterwards Різниця мани: %1 - + Move Points: %1 AI-generated, needs review by native speaker; delete this comment afterwards Очки руху: %1 - + Move Percentage: %1 AI-generated, needs review by native speaker; delete this comment afterwards Відсоток руху: %1 - + Spell Cast: %1 (%2) AI-generated, needs review by native speaker; delete this comment afterwards Закляття застосовано: %1 (%2) - + Bonuses: %1 AI-generated, needs review by native speaker; delete this comment afterwards Бонуси: %1 @@ -2804,19 +2858,19 @@ Add it to the map's required mods in Map->General settings. Гравці - + None Відсутня - + Day %1 AI-generated, needs review by native speaker; delete this comment afterwards День %1 - - + + Reward %1 AI-generated, needs review by native speaker; delete this comment afterwards Нагорода %1 @@ -3076,8 +3130,8 @@ Add it to the map's required mods in Map->General settings. - - + + Player position AI-generated, needs review by native speaker; delete this comment afterwards Позиція гравця @@ -3135,54 +3189,54 @@ Add it to the map's required mods in Map->General settings. Гравець - + Open map Відкрити мапу - + All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) Всі підтримувані мапи (*.vmap *.h3m);;Мапи VCMI (*.vmap);;Мапи HoMM3 (*.h3m) - - + + Error AI-generated, needs review by native speaker; delete this comment afterwards Помилка - - + + Could not open the file. AI-generated, needs review by native speaker; delete this comment afterwards Не вдалося відкрити файл. - + Save map Зберегти мапу - + VCMI maps (*.vmap); AI-generated, needs review by native speaker; delete this comment afterwards Карти VCMI (*.vmap); - + HoMM3 maps (*.h3m); AI-generated, needs review by native speaker; delete this comment afterwards Карти HoMM3 (*.h3m); - + Source scenario AI-generated, needs review by native speaker; delete this comment afterwards Початковий сценарій - + Hero AI-generated, needs review by native speaker; delete this comment afterwards Герой @@ -3222,7 +3276,7 @@ Add it to the map's required mods in Map->General settings. - + Building AI-generated, needs review by native speaker; delete this comment afterwards Будівля @@ -3252,7 +3306,7 @@ Add it to the map's required mods in Map->General settings. - + Secondary skill AI-generated, needs review by native speaker; delete this comment afterwards Вторинна навичка @@ -3260,7 +3314,7 @@ Add it to the map's required mods in Map->General settings. - + Resource AI-generated, needs review by native speaker; delete this comment afterwards Ресурс @@ -3361,54 +3415,679 @@ Add it to the map's required mods in Map->General settings. Рідкісні (%1, %2, %3, %4) - + strongest hero AI-generated, needs review by native speaker; delete this comment afterwards найсильніший герой - + generated hero AI-generated, needs review by native speaker; delete this comment afterwards згенерований герой - + random hero AI-generated, needs review by native speaker; delete this comment afterwards випадковий герой - + %1 spell for %2 AI-generated, needs review by native speaker; delete this comment afterwards %1 закляття для %2 - + %1 %2 for %3 AI-generated, needs review by native speaker; delete this comment afterwards %1 %2 для %3 - + %1 artifact for %2 AI-generated, needs review by native speaker; delete this comment afterwards %1 артефакт для %2 - + %1 spell scroll for %2 AI-generated, needs review by native speaker; delete this comment afterwards %1 сувій закляття для %2 - + Primary skill (Attack: %1, Defense: %2, Spell: %3, Knowledge: %4) for %5 AI-generated, needs review by native speaker; delete this comment afterwards Основна навичка (Атака: %1, Захист: %2, Магія: %3, Знання: %4) для %5 + + TemplateEditor + + + + VCMI Template Editor + + + + + File + Файл + + + + Edit + Редагування + + + + View + Вигляд + + + + Toolbar + Панель інструментів + + + + Selected Template: + + + + + + + Add + Додати + + + + Remove + Видалити + + + + Rename + + + + + General + Загальний + + + + Name + Ім'я + + + + Description + + + + + Min Size + + + + + + + X + + + + + + + Y + + + + + + + Z + + + + + Max Size + + + + + + Players + + + + + Human + + + + + Allowed water content + + + + + + + None + + + + + + Normal + Типова + + + + Islands + Острови + + + + Zone + + + + + Visualisation + + + + + Position + + + + + + Size + + + + + ID + ID + + + + + Type + Тип + + + + Owner + Власник + + + + Zone link + + + + + + + Mines + Шахти + + + + + Custom objects + + + + + + Towns + Міста + + + + + Terrain + + + + + + + + Treasure + + + + + Town info + + + + + Town count + + + + + + + + Player + Гравець + + + + + + + Neutral + Нейтральний + + + + Castle count + + + + + Town density + + + + + Castle density + + + + + Match terrain to town + + + + + Terrain types + + + + + Banned terrain types + + + + + Towns are same type + + + + + Allowed towns + + + + + Banned towns + + + + + Town hints + + + + + Monsters + Монстри + + + + Allowed monsters + + + + + Banned monsters + + + + + Strength + + + + + Objects + Об’єкти + + + + Connections + + + + + Open + Відкрити + + + + Save + Зберегти + + + + New + Створити + + + + Save as... + Зберегти як... + + + + Ctrl+Shift+S + Ctrl+Shift+S + + + + Add zone + + + + + Remove zone + + + + + + Del + Del + + + + Auto position + + + + + Ctrl+P + Ctrl+P + + + + Zoom in + Збільшити + + + + Ctrl++ + Ctrl++ + + + + Zoom out + Зменшити + + + + Ctrl+- + Ctrl+- + + + + Zoom auto + + + + + Ctrl+Shift+: + + + + + Zoom reset + Скидання масштабу + + + + Ctrl+Shift+= + Ctrl+Shift+= + + + + Min + + + + + Max + + + + + Action + + + + + + Delete + + + + + ID: %1 + + + + + Max treasure: %1 + + + + + Player start + + + + + CPU start + + + + + Junction + + + + + Water + + + + + Sealed + + + + + + Random + Випадково + + + + Weak + Слабкі + + + + Strong + Сильні + + + + Zone A + + + + + Zone B + + + + + Guard + + + + + Road + + + + + Guarded + + + + + Fictive + + + + + Repulsive + + + + + Wide + + + + + Force portal + + + + + Yes + + + + + No + + + + + Zone A: %1 +Zone B: %2 +Guard: %3 + + + + + Confirmation + Підтвердження + + + + Unsaved changes will be lost, are you sure? + Незбережені зміни буде втрачено, ви впевнені? + + + + Open template + + + + + VCMI templates(*.json) + + + + + Save template + + + + + VCMI templates (*.json) + + + + + + Enter Name + + + + + + Name: + + + + + Already existing! + + + + + At template with this name is already existing. + + + + + To few templates! + + + + + At least one template should remain after removing. + + + + + + Error + Помилка + + + + + Not implemented yet! + + + + + TerrainSelector + + + + Select Terrains + + + + + Terrain Selector + + + TimedEvent @@ -3792,6 +4471,40 @@ Add it to the map's required mods in Map->General settings. Усі наявні текстові записи для цієї мови буде видалено. Продовжити? + + TreasureSelector + + + + Select Treasures + + + + + Treasure Selector + + + + + Min + + + + + Max + + + + + Density + + + + + Action + + + Validator @@ -4221,25 +4934,25 @@ Add it to the map's required mods in Map->General settings. Скасувати - + No template AI-generated, needs review by native speaker; delete this comment afterwards Шаблон відсутній - + No template for parameters specified. Random map cannot be generated. AI-generated, needs review by native speaker; delete this comment afterwards Немає шаблону для вказаних параметрів. Неможливо згенерувати випадкову карту. - + RMG failure AI-generated, needs review by native speaker; delete this comment afterwards Помилка генерації випадкової карти - + [default] AI-generated, needs review by native speaker; delete this comment afterwards [типово] @@ -4248,31 +4961,31 @@ Add it to the map's required mods in Map->General settings. main - + Filepath of the map to open. AI-generated, needs review by native speaker; delete this comment afterwards Шлях до файлу карти, яку слід відкрити. - + Extract original H3 archives into a separate folder. AI-generated, needs review by native speaker; delete this comment afterwards Розпакувати оригінальні архіви H3 у окрему папку. - + From an extracted archive, it Splits TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 and Un44 into individual PNG's. AI-generated, needs review by native speaker; delete this comment afterwards З розпакованого архіву розділяє TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 та Un44 на окремі PNG'шки. - + From an extracted archive, Converts single Images (found in Images folder) from .pcx to png. AI-generated, needs review by native speaker; delete this comment afterwards З розпакованого архіву конвертує окремі зображення (з папки Images) з .pcx у .png. - + Delete original files, for the ones split / converted. AI-generated, needs review by native speaker; delete this comment afterwards Видалити оригінальні файли для тих, які були розділені або конвертовані. diff --git a/mapeditor/translation/vietnamese.ts b/mapeditor/translation/vietnamese.ts index 6c052d42b..bb6e1180f 100644 --- a/mapeditor/translation/vietnamese.ts +++ b/mapeditor/translation/vietnamese.ts @@ -49,7 +49,7 @@ CampaignEditor - + VCMI Campaign Editor AI-generated, needs review by native speaker; delete this comment afterwards Trình chỉnh sửa chiến dịch VCMI @@ -122,40 +122,40 @@ Hiển thị toàn bộ nền - + Scenario editor AI-generated, needs review by native speaker; delete this comment afterwards Trình chỉnh sửa kịch bản - + Confirmation Xác nhận - + Unsaved changes will be lost, are you sure? Thay đổi chưa lưu sẽ bị mất, bạn có chắc chắn? - + Open map Mở bản đồ - + All supported campaigns (*.vcmp *.h3c);;VCMI campaigns(*.vcmp);;HoMM3 campaigns(*.h3c) AI-generated, needs review by native speaker; delete this comment afterwards Tất cả chiến dịch được hỗ trợ (*.vcmp *.h3c);;Chiến dịch VCMI(*.vcmp);;Chiến dịch HoMM3(*.h3c) - + Save campaign AI-generated, needs review by native speaker; delete this comment afterwards Lưu chiến dịch - + VCMI campaigns (*.vcmp) AI-generated, needs review by native speaker; delete this comment afterwards Chiến dịch VCMI (*.vcmp) @@ -165,7 +165,7 @@ CampaignProperties - + Campaign Properties AI-generated, needs review by native speaker; delete this comment afterwards Thuộc tính chiến dịch @@ -303,47 +303,47 @@ Video kết thúc - + Custom AI-generated, needs review by native speaker; delete this comment afterwards Tùy chỉnh - + Infix AI-generated, needs review by native speaker; delete this comment afterwards Chèn giữa - + X - + Y - + Label Pos X AI-generated, needs review by native speaker; delete this comment afterwards Vị trí nhãn X - + Label Pos Y AI-generated, needs review by native speaker; delete this comment afterwards Vị trí nhãn Y - + Fewer Scenarios AI-generated, needs review by native speaker; delete this comment afterwards Ít kịch bản hơn - + New Region setup supports fewer scenarios than before. Some will removed. Continue? AI-generated, needs review by native speaker; delete this comment afterwards Thiết lập khu vực mới hỗ trợ ít kịch bản hơn trước. Một số sẽ bị xoá. Tiếp tục? @@ -382,6 +382,20 @@ Sự kiện mới + + FactionSelector + + + + Select Factions + + + + + Faction Selector + + + GeneralSettings @@ -474,6 +488,16 @@ AI-generated, needs review by native speaker; delete this comment afterwards Di vật + + + Save + Lưu + + + + Cancel + Hủy + HeroSkillsWidget @@ -620,7 +644,7 @@ MainWindow - + VCMI Map Editor Bộ tạo bản đồ VCMI @@ -630,806 +654,812 @@ Tập tin - + Map Bản đồ - + Edit Hiệu chỉnh - + View Xem - + Player Người chơi - + Toolbar Thanh công cụ - + Minimap Bản đồ nhỏ - + Map Objects View Xem đối tượng bản đồ - + Browser Duyệt - + Inspector Giám định - + Property Đặc tính - + Value Giá trị - + Terrains Địa hình - + Roads Đường - + Rivers Sông - + Open Mở - + Ctrl+O AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+O - + Save Lưu - + Ctrl+S AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+S - + New Tạo mới - + Tools AI-generated, needs review by native speaker; delete this comment afterwards Công cụ - + Open Recent AI-generated, needs review by native speaker; delete this comment afterwards Mở gần đây - + Painting AI-generated, needs review by native speaker; delete this comment afterwards Vẽ - + Preview AI-generated, needs review by native speaker; delete this comment afterwards Xem trước - + More... AI-generated, needs review by native speaker; delete this comment afterwards Thêm... - + Ctrl+N AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+N - + Save as... AI-generated, needs review by native speaker; delete this comment afterwards Lưu thành... - + Ctrl+Shift+S Ctrl+Shift+S - - + + Campaign editor AI-generated, needs review by native speaker; delete this comment afterwards Trình chỉnh sửa chiến dịch - - - - + + + Template editor + + + + + + + View underground Xem hang ngầm - + Ctrl+U AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+U - + Pass Đi qua - + Ctrl+Shift+P AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+P - + Cut Cắt - + Ctrl+X AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+X - + Copy Sao chép - + Ctrl+C AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+C - + Paste Dán - + Ctrl+V AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+V - + Fill Làm đầy - + Fills the selection with obstacles Làm đầy vùng chọn với vật cản - + Grid Đường kẻ - + Ctrl+G AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+G - + General Chung - + Map title and description Tên bản đồ và mô tả - + Ctrl+Enter AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Enter - + Players settings Cài đặt người chơi - + Ctrl+P AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+P - - + + Undo Hoàn tác - + Ctrl+Z AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Z - + Redo Làm lại - + Ctrl+Y AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Y - + Erase Xóa - + Del AI-generated, needs review by native speaker; delete this comment afterwards Del - + Neutral Trung lập - + Ctrl+0 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+0 - + Validate Hiệu lực - + Ctrl+Shift+V AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+V - - - - + + + + Update appearance Cập nhật hiện thị - + Recreate obstacles Tạo lại vật cản - + Player 1 Người chơi 1 - + Ctrl+1 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+1 - + Player 2 Người chơi 2 - + Ctrl+2 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+2 - + Player 3 Người chơi 3 - + Ctrl+3 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+3 - + Player 4 Người chơi 4 - + Ctrl+4 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+4 - + Player 5 Người chơi 5 - + Ctrl+5 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+5 - + Player 6 Người chơi 6 - + Ctrl+6 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+6 - + Player 7 Người chơi 7 - + Ctrl+7 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+7 - + Player 8 Người chơi 8 - + Ctrl+8 AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+8 - + Export as... Xuất thành... - + Ctrl+E AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+E - + Translations AI-generated, needs review by native speaker; delete this comment afterwards Bản dịch - + Ctrl+T AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+T - - + + h3m converter AI-generated, needs review by native speaker; delete this comment afterwards Trình chuyển đổi h3m - + Ctrl+Shift+M AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+M - - + + h3c converter AI-generated, needs review by native speaker; delete this comment afterwards Trình chuyển đổi h3c - + Ctrl+Shift+C AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+C - + Lock AI-generated, needs review by native speaker; delete this comment afterwards Khoá - + Lock objects on map to avoid unnecessary changes AI-generated, needs review by native speaker; delete this comment afterwards Khoá đối tượng trên bản đồ để tránh thay đổi không mong muốn - + Ctrl+L AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+L - + Unlock AI-generated, needs review by native speaker; delete this comment afterwards Mở khoá - + Unlock all objects on the map AI-generated, needs review by native speaker; delete this comment afterwards Mở khoá tất cả đối tượng trên bản đồ - + Ctrl+Shift+L AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+L - + Zoom in AI-generated, needs review by native speaker; delete this comment afterwards Phóng to - + Ctrl++ AI-generated, needs review by native speaker; delete this comment afterwards Ctrl++ - + Zoom out AI-generated, needs review by native speaker; delete this comment afterwards Thu nhỏ - + Ctrl+- AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+- - + Zoom reset AI-generated, needs review by native speaker; delete this comment afterwards Đặt lại thu phóng - + Ctrl+Shift+= AI-generated, needs review by native speaker; delete this comment afterwards Ctrl+Shift+= - + Confirmation Xác nhận - + Unsaved changes will be lost, are you sure? Thay đổi chưa lưu sẽ bị mất, bạn có chắc chắn? - + Mods are required AI-generated, needs review by native speaker; delete this comment afterwards Cần có các mod - + Failed to open map AI-generated, needs review by native speaker; delete this comment afterwards Không mở được bản đồ - + Open map Mở bản đồ - + All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) Tất cả bản đồ hỗ trợ (*.vmap *.h3m);;Bản đồ VCMI (*.vmap);;Bản đồ HoMM3 (*.h3m) - + Recently Opened Files AI-generated, needs review by native speaker; delete this comment afterwards Tệp đã mở gần đây - + Map validation AI-generated, needs review by native speaker; delete this comment afterwards Xác minh bản đồ - + Map has critical problems and most probably will not be playable. Open Validator from the Map menu to see issues found AI-generated, needs review by native speaker; delete this comment afterwards Bản đồ có lỗi nghiêm trọng và rất có thể sẽ không thể chơi được. Mở Trình xác minh từ menu Bản đồ để xem lỗi. - + Map has some errors. Open Validator from the Map menu to see issues found AI-generated, needs review by native speaker; delete this comment afterwards Bản đồ có một số lỗi. Mở Trình xác minh từ menu Bản đồ để xem lỗi. - + Failed to save map AI-generated, needs review by native speaker; delete this comment afterwards Lưu bản đồ thất bại - + Save map Lưu bản đồ - + VCMI maps (*.vmap) Bản đồ VCMI (*.vmap) - + Type Loại - + Towns AI-generated, needs review by native speaker; delete this comment afterwards Thành phố - + Objects AI-generated, needs review by native speaker; delete this comment afterwards Đối tượng - + Heroes Tướng - + Artifacts Vật phẩm - + Resources AI-generated, needs review by native speaker; delete this comment afterwards Tài nguyên - + Banks AI-generated, needs review by native speaker; delete this comment afterwards Ngân hàng - + Dwellings AI-generated, needs review by native speaker; delete this comment afterwards Nơi cư trú - + Grounds AI-generated, needs review by native speaker; delete this comment afterwards Địa hình - + Teleports AI-generated, needs review by native speaker; delete this comment afterwards Dịch chuyển - + Mines AI-generated, needs review by native speaker; delete this comment afterwards Mỏ - + Triggers AI-generated, needs review by native speaker; delete this comment afterwards Kích hoạt - + Monsters AI-generated, needs review by native speaker; delete this comment afterwards Quái vật - + Quests AI-generated, needs review by native speaker; delete this comment afterwards Nhiệm vụ - + Wog Objects AI-generated, needs review by native speaker; delete this comment afterwards Đối tượng WoG - + Obstacles AI-generated, needs review by native speaker; delete this comment afterwards Chướng ngại vật - + Other AI-generated, needs review by native speaker; delete this comment afterwards Khác - + Mods loading problem AI-generated, needs review by native speaker; delete this comment afterwards Lỗi tải mod - + Critical error during Mods loading. Disable invalid mods and restart. AI-generated, needs review by native speaker; delete this comment afterwards Lỗi nghiêm trọng khi tải mod. Vô hiệu hóa các mod không hợp lệ và khởi động lại. - - + + View surface Xem bề mặt - + No objects selected Không mục tiêu được chọn - + This operation is irreversible. Do you want to continue? Thao tác này không thể đảo ngược. Bạn muốn tiếp tục? - + Errors occurred. %1 objects were not updated Xảy ra lỗi. %1 mục tiêu không được cập nhật - + Save to image Lưu thành ảnh - + Select maps to convert AI-generated, needs review by native speaker; delete this comment afterwards Chọn bản đồ để chuyển đổi - + HoMM3 maps(*.h3m) AI-generated, needs review by native speaker; delete this comment afterwards Bản đồ HoMM3 (*.h3m) - + Choose directory to save converted maps AI-generated, needs review by native speaker; delete this comment afterwards Chọn thư mục để lưu bản đồ đã chuyển đổi - + Operation completed AI-generated, needs review by native speaker; delete this comment afterwards Hoàn tất thao tác - + Successfully converted %1 maps AI-generated, needs review by native speaker; delete this comment afterwards Đã chuyển đổi thành công %1 bản đồ - + Failed to convert the map. Abort operation AI-generated, needs review by native speaker; delete this comment afterwards Không thể chuyển đổi bản đồ. Huỷ thao tác - + Select campaign to convert AI-generated, needs review by native speaker; delete this comment afterwards Chọn chiến dịch để chuyển đổi - + HoMM3 campaigns (*.h3c) AI-generated, needs review by native speaker; delete this comment afterwards Chiến dịch HoMM3 (*.h3c) - + Select destination file AI-generated, needs review by native speaker; delete this comment afterwards Chọn tệp đích - + VCMI campaigns (*.vcmp) AI-generated, needs review by native speaker; delete this comment afterwards Chiến dịch VCMI (*.vcmp) @@ -1438,30 +1468,30 @@ MapController - + Hero %1 cannot be created as NEUTRAL. AI-generated, needs review by native speaker; delete this comment afterwards Không thể tạo anh hùng %1 là TRUNG LẬP. - + Missing Required Mod AI-generated, needs review by native speaker; delete this comment afterwards Thiếu mod cần thiết - + Do you want to do that now ? -AI-generated, needs review by native speaker; delete this comment afterwards + AI-generated, needs review by native speaker; delete this comment afterwards Bạn có muốn làm điều đó ngay bây giờ không? - + This object's mod is mandatory for map to remain valid. AI-generated, needs review by native speaker; delete this comment afterwards Mod của đối tượng này là bắt buộc để bản đồ hợp lệ. @@ -1553,6 +1583,30 @@ Bạn có muốn làm điều đó ngay bây giờ không? Thông báo + + MineSelector + + + + Select Mines + + + + + Mine Selector + + + + + Resource + Tài nguyên + + + + Mines + Mỏ + + ModSettings @@ -1690,26 +1744,26 @@ Bạn có muốn làm điều đó ngay bây giờ không? - PlayerSettings + PlayerSettingsDialog - + Player settings - Cài đặt người chơi + Cài đặt người chơi - + Players - Người chơi + Người chơi - + 1 - 1 + 1 - + Ok - Đồng ý + Đồng ý @@ -1766,428 +1820,428 @@ Bạn có muốn làm điều đó ngay bây giờ không? Kỹ năng phụ: - + Compliant AI-generated, needs review by native speaker; delete this comment afterwards Tuân thủ - + Friendly AI-generated, needs review by native speaker; delete this comment afterwards Thân thiện - + Aggressive AI-generated, needs review by native speaker; delete this comment afterwards Hung hãn - + Hostile AI-generated, needs review by native speaker; delete this comment afterwards Thù địch - + Savage AI-generated, needs review by native speaker; delete this comment afterwards Tàn bạo - - + + No patrol AI-generated, needs review by native speaker; delete this comment afterwards Không tuần tra - + POWER RANK AI-generated, needs review by native speaker; delete this comment afterwards XẾP HẠNG SỨC MẠNH - + HERO TYPE AI-generated, needs review by native speaker; delete this comment afterwards LOẠI ANH HÙNG - + Hero class AI-generated, needs review by native speaker; delete this comment afterwards Lớp anh hùng - + Portrait AI-generated, needs review by native speaker; delete this comment afterwards Chân dung - + Skills AI-generated, needs review by native speaker; delete this comment afterwards Kỹ năng - + Artifacts Vật phẩm - - + + %n tile(s) - + Buildings Công trình - + Events Sự kiện - + Resource AI-generated, needs review by native speaker; delete this comment afterwards Tài nguyên - + Artifact reward AI-generated, needs review by native speaker; delete this comment afterwards Phần thưởng di vật - + Quest AI-generated, needs review by native speaker; delete this comment afterwards Nhiệm vụ - + Identifier AI-generated, needs review by native speaker; delete this comment afterwards Định danh - + ID AI-generated, needs review by native speaker; delete this comment afterwards ID - + SubID AI-generated, needs review by native speaker; delete this comment afterwards SubID - + InstanceName AI-generated, needs review by native speaker; delete this comment afterwards Tên thể hiện - + IsStatic AI-generated, needs review by native speaker; delete this comment afterwards Tĩnh - - + + neutral AI-generated, needs review by native speaker; delete this comment afterwards trung lập - - + + Army AI-generated, needs review by native speaker; delete this comment afterwards Quân đội - - - + + - - - - - + + + + + + Owner AI-generated, needs review by native speaker; delete this comment afterwards Chủ sở hữu - - + + Same as town AI-generated, needs review by native speaker; delete this comment afterwards Giống như thành phố - - + + Removable units AI-generated, needs review by native speaker; delete this comment afterwards Đơn vị có thể gỡ bỏ - - + + Placeholder type AI-generated, needs review by native speaker; delete this comment afterwards Loại trình giữ chỗ - - + + Power rank AI-generated, needs review by native speaker; delete this comment afterwards Xếp hạng sức mạnh - - - - + + + + Hero type AI-generated, needs review by native speaker; delete this comment afterwards Loại anh hùng - - + + Experience AI-generated, needs review by native speaker; delete this comment afterwards Kinh nghiệm - - + + MALE AI-generated, needs review by native speaker; delete this comment afterwards NAM - - + + FEMALE AI-generated, needs review by native speaker; delete this comment afterwards NỮ - - + + Gender AI-generated, needs review by native speaker; delete this comment afterwards Giới tính - - + + Name AI-generated, needs review by native speaker; delete this comment afterwards Tên - - + + Biography AI-generated, needs review by native speaker; delete this comment afterwards Tiểu sử - - + + Spells Phép - - + + Patrol radius AI-generated, needs review by native speaker; delete this comment afterwards Bán kính tuần tra - - + + Town name AI-generated, needs review by native speaker; delete this comment afterwards Tên thành phố - - + + Same as player AI-generated, needs review by native speaker; delete this comment afterwards Giống như người chơi - - - - - - - - - + + + + + + + + + Message Thông báo - - + + Spell AI-generated, needs review by native speaker; delete this comment afterwards Phép thuật - - + + Productivity AI-generated, needs review by native speaker; delete this comment afterwards Năng suất - - - - + + + + Amount AI-generated, needs review by native speaker; delete this comment afterwards Số lượng - + Character AI-generated, needs review by native speaker; delete this comment afterwards Ký tự - + Select town AI-generated, needs review by native speaker; delete this comment afterwards Chọn thành phố - - + + Never flees AI-generated, needs review by native speaker; delete this comment afterwards Không bao giờ bỏ chạy - - + + Not growing AI-generated, needs review by native speaker; delete this comment afterwards Không tăng trưởng - - + + Reward AI-generated, needs review by native speaker; delete this comment afterwards Phần thưởng - - + + Remove after AI-generated, needs review by native speaker; delete this comment afterwards Xoá sau - - + + Human trigger AI-generated, needs review by native speaker; delete this comment afterwards Kích hoạt bởi người chơi - - + + Cpu trigger AI-generated, needs review by native speaker; delete this comment afterwards Kích hoạt bởi AI - - + + First visit text AI-generated, needs review by native speaker; delete this comment afterwards Văn bản lần ghé đầu tiên - - + + Next visit text AI-generated, needs review by native speaker; delete this comment afterwards Văn bản lần ghé tiếp theo - - + + Completed text AI-generated, needs review by native speaker; delete this comment afterwards Văn bản hoàn thành - - - + + + Repeat quest AI-generated, needs review by native speaker; delete this comment afterwards Lặp lại nhiệm vụ - - + + Time limit AI-generated, needs review by native speaker; delete this comment afterwards Giới hạn thời gian - + UNFLAGGABLE AI-generated, needs review by native speaker; delete this comment afterwards KHÔNG GẮN CỜ - + Can't place object Không thể đặt vật thể - + There can only be one grail object on the map. AI-generated, needs review by native speaker; delete this comment afterwards Chỉ có thể có một vật phẩm chén thánh trên bản đồ. - + (submod of %1) AI-generated, needs review by native speaker; delete this comment afterwards (mod con của %1) - + The mod '%1'%2, is required by an object on the map. Add it to the map's required mods in Map->General settings. should be consistent with Map->General menu entry translation @@ -2235,14 +2289,14 @@ Thêm nó vào danh sách mod yêu cầu trong Bản đồ → Thiết lập chu - + Hero Level: %1 AI-generated, needs review by native speaker; delete this comment afterwards Cấp độ anh hùng: %1 - + Hero Experience: %1 AI-generated, needs review by native speaker; delete this comment afterwards Kinh nghiệm anh hùng: %1 @@ -2255,49 +2309,49 @@ Thêm nó vào danh sách mod yêu cầu trong Bản đồ → Thiết lập chu - + Mana Percentage: %1 AI-generated, needs review by native speaker; delete this comment afterwards Tỷ lệ năng lượng: %1 - + Primary Skills: %1/%2/%3/%4 AI-generated, needs review by native speaker; delete this comment afterwards Kỹ năng chính: %1/%2/%3/%4 - + Resources: %1 AI-generated, needs review by native speaker; delete this comment afterwards Tài nguyên: %1 - + Artifacts: %1 AI-generated, needs review by native speaker; delete this comment afterwards Di vật: %1 - + Spells: %1 AI-generated, needs review by native speaker; delete this comment afterwards Phép thuật: %1 - + Secondary Skills: %1 AI-generated, needs review by native speaker; delete this comment afterwards Kỹ năng phụ: %1 - + Creatures: %1 AI-generated, needs review by native speaker; delete this comment afterwards Sinh vật: %1 @@ -2321,43 +2375,43 @@ Thêm nó vào danh sách mod yêu cầu trong Bản đồ → Thiết lập chu Người chơi: %1 - + Rewards: AI-generated, needs review by native speaker; delete this comment afterwards Phần thưởng: - + Reward Message: %1 AI-generated, needs review by native speaker; delete this comment afterwards Tin nhắn phần thưởng: %1 - + Mana Diff: %1 AI-generated, needs review by native speaker; delete this comment afterwards Khác biệt mana: %1 - + Move Points: %1 AI-generated, needs review by native speaker; delete this comment afterwards Điểm di chuyển: %1 - + Move Percentage: %1 AI-generated, needs review by native speaker; delete this comment afterwards Tỷ lệ di chuyển: %1 - + Spell Cast: %1 (%2) AI-generated, needs review by native speaker; delete this comment afterwards Phép đã sử dụng: %1 (%2) - + Bonuses: %1 AI-generated, needs review by native speaker; delete this comment afterwards Thưởng: %1 @@ -2846,19 +2900,19 @@ Thêm nó vào danh sách mod yêu cầu trong Bản đồ → Thiết lập chu Người chơi - + None Không - + Day %1 AI-generated, needs review by native speaker; delete this comment afterwards Ngày %1 - - + + Reward %1 AI-generated, needs review by native speaker; delete this comment afterwards Phần thưởng %1 @@ -3120,8 +3174,8 @@ Thêm nó vào danh sách mod yêu cầu trong Bản đồ → Thiết lập chu - - + + Player position AI-generated, needs review by native speaker; delete this comment afterwards Vị trí người chơi @@ -3179,54 +3233,54 @@ Thêm nó vào danh sách mod yêu cầu trong Bản đồ → Thiết lập chu Người chơi - + Open map Mở bản đồ - + All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) Tất cả bản đồ hỗ trợ (*.vmap *.h3m);;Bản đồ VCMI (*.vmap);;Bản đồ HoMM3 (*.h3m) - - + + Error AI-generated, needs review by native speaker; delete this comment afterwards Lỗi - - + + Could not open the file. AI-generated, needs review by native speaker; delete this comment afterwards Không thể mở tệp. - + Save map Lưu bản đồ - + VCMI maps (*.vmap); AI-generated, needs review by native speaker; delete this comment afterwards Bản đồ VCMI (*.vmap); - + HoMM3 maps (*.h3m); AI-generated, needs review by native speaker; delete this comment afterwards Bản đồ HoMM3 (*.h3m); - + Source scenario AI-generated, needs review by native speaker; delete this comment afterwards Kịch bản nguồn - + Hero AI-generated, needs review by native speaker; delete this comment afterwards Anh hùng @@ -3266,7 +3320,7 @@ Thêm nó vào danh sách mod yêu cầu trong Bản đồ → Thiết lập chu - + Building AI-generated, needs review by native speaker; delete this comment afterwards Công trình @@ -3297,7 +3351,7 @@ Thêm nó vào danh sách mod yêu cầu trong Bản đồ → Thiết lập chu - + Secondary skill AI-generated, needs review by native speaker; delete this comment afterwards Kỹ năng phụ @@ -3305,7 +3359,7 @@ Thêm nó vào danh sách mod yêu cầu trong Bản đồ → Thiết lập chu - + Resource AI-generated, needs review by native speaker; delete this comment afterwards Tài nguyên @@ -3406,54 +3460,679 @@ Thêm nó vào danh sách mod yêu cầu trong Bản đồ → Thiết lập chu Hiếm (%1, %2, %3, %4) - + strongest hero AI-generated, needs review by native speaker; delete this comment afterwards anh hùng mạnh nhất - + generated hero AI-generated, needs review by native speaker; delete this comment afterwards anh hùng được tạo - + random hero AI-generated, needs review by native speaker; delete this comment afterwards anh hùng ngẫu nhiên - + %1 spell for %2 AI-generated, needs review by native speaker; delete this comment afterwards phép %1 cho %2 - + %1 %2 for %3 AI-generated, needs review by native speaker; delete this comment afterwards %1 %2 cho %3 - + %1 artifact for %2 AI-generated, needs review by native speaker; delete this comment afterwards di vật %1 cho %2 - + %1 spell scroll for %2 AI-generated, needs review by native speaker; delete this comment afterwards cuộn phép %1 cho %2 - + Primary skill (Attack: %1, Defense: %2, Spell: %3, Knowledge: %4) for %5 AI-generated, needs review by native speaker; delete this comment afterwards Kỹ năng chính (Tấn công: %1, Phòng thủ: %2, Phép: %3, Kiến thức: %4) cho %5 + + TemplateEditor + + + + VCMI Template Editor + + + + + File + Tập tin + + + + Edit + Hiệu chỉnh + + + + View + Xem + + + + Toolbar + Thanh công cụ + + + + Selected Template: + + + + + + + Add + Thêm + + + + Remove + Xoá + + + + Rename + + + + + General + Chung + + + + Name + Tên + + + + Description + + + + + Min Size + + + + + + + X + + + + + + + Y + + + + + + + Z + + + + + Max Size + + + + + + Players + Người chơi + + + + Human + + + + + Allowed water content + + + + + + + None + Không + + + + + Normal + Trung bình + + + + Islands + Các đảo + + + + Zone + + + + + Visualisation + + + + + Position + + + + + + Size + + + + + ID + ID + + + + + Type + Loại + + + + Owner + Chủ sở hữu + + + + Zone link + + + + + + + Mines + Mỏ + + + + + Custom objects + + + + + + Towns + Thành phố + + + + + Terrain + + + + + + + + Treasure + + + + + Town info + + + + + Town count + + + + + + + + Player + Người chơi + + + + + + + Neutral + Trung lập + + + + Castle count + + + + + Town density + + + + + Castle density + + + + + Match terrain to town + + + + + Terrain types + + + + + Banned terrain types + + + + + Towns are same type + + + + + Allowed towns + + + + + Banned towns + + + + + Town hints + + + + + Monsters + Quái vật + + + + Allowed monsters + + + + + Banned monsters + + + + + Strength + + + + + Objects + Đối tượng + + + + Connections + + + + + Open + Mở + + + + Save + Lưu + + + + New + Tạo mới + + + + Save as... + Lưu thành... + + + + Ctrl+Shift+S + Ctrl+Shift+S + + + + Add zone + + + + + Remove zone + + + + + + Del + Del + + + + Auto position + + + + + Ctrl+P + Ctrl+P + + + + Zoom in + Phóng to + + + + Ctrl++ + Ctrl++ + + + + Zoom out + Thu nhỏ + + + + Ctrl+- + Ctrl+- + + + + Zoom auto + + + + + Ctrl+Shift+: + + + + + Zoom reset + Đặt lại thu phóng + + + + Ctrl+Shift+= + Ctrl+Shift+= + + + + Min + + + + + Max + + + + + Action + + + + + + Delete + + + + + ID: %1 + + + + + Max treasure: %1 + + + + + Player start + + + + + CPU start + + + + + Junction + + + + + Water + + + + + Sealed + + + + + + Random + Ngẫu nhiên + + + + Weak + Yếu + + + + Strong + Mạnh + + + + Zone A + + + + + Zone B + + + + + Guard + + + + + Road + + + + + Guarded + + + + + Fictive + + + + + Repulsive + + + + + Wide + + + + + Force portal + + + + + Yes + + + + + No + + + + + Zone A: %1 +Zone B: %2 +Guard: %3 + + + + + Confirmation + Xác nhận + + + + Unsaved changes will be lost, are you sure? + Thay đổi chưa lưu sẽ bị mất, bạn có chắc chắn? + + + + Open template + + + + + VCMI templates(*.json) + + + + + Save template + + + + + VCMI templates (*.json) + + + + + + Enter Name + + + + + + Name: + + + + + Already existing! + + + + + At template with this name is already existing. + + + + + To few templates! + + + + + At least one template should remain after removing. + + + + + + Error + Lỗi + + + + + Not implemented yet! + + + + + TerrainSelector + + + + Select Terrains + + + + + Terrain Selector + + + TimedEvent @@ -3850,6 +4529,40 @@ Thêm nó vào danh sách mod yêu cầu trong Bản đồ → Thiết lập chu Tất cả văn bản hiện có cho ngôn ngữ này sẽ bị xoá. Tiếp tục? + + TreasureSelector + + + + Select Treasures + + + + + Treasure Selector + + + + + Min + + + + + Max + + + + + Density + + + + + Action + + + Validator @@ -4262,22 +4975,22 @@ Thêm nó vào danh sách mod yêu cầu trong Bản đồ → Thiết lập chu Hủy - + No template Không dùng mẫu - + No template for parameters specified. Random map cannot be generated. Không có mẫu cho tham số chỉ định. Bản đồ ngẫu nhiên không thể tạo - + RMG failure Tạo bản đồ ngẫu nhiên thất bại - + [default] AI-generated, needs review by native speaker; delete this comment afterwards [mặc định] @@ -4286,27 +4999,27 @@ Thêm nó vào danh sách mod yêu cầu trong Bản đồ → Thiết lập chu main - + Filepath of the map to open. Đường dẫn bản đồ - + Extract original H3 archives into a separate folder. Giải nén dữ liệu H3 gốc vào 1 thư mục riêng. - + From an extracted archive, it Splits TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 and Un44 into individual PNG's. Từ dữ liệu giải nén, chia TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 và Un44 thành những hình PNG riêng lẻ. - + From an extracted archive, Converts single Images (found in Images folder) from .pcx to png. Từ dữ liệu giải nén, chuyển đổi các hình đơn (được tìm thấy trong thư mục Images) từ .pcx sang .png. - + Delete original files, for the ones split / converted. Xóa các tập tin gốc đã được phân chia / chuyển đổi. From 6ea21f6b812d3c5c4f1922415e845f12bbbd05b4 Mon Sep 17 00:00:00 2001 From: Laserlicht <13953785+Laserlicht@users.noreply.github.com> Date: Sun, 22 Jun 2025 14:53:41 +0200 Subject: [PATCH 16/60] update qt translation --- mapeditor/templateeditor/templateeditor.cpp | 2 +- mapeditor/translation/belarusian.ts | 2 +- mapeditor/translation/bulgarian.ts | 6 +- mapeditor/translation/chinese.ts | 2 +- mapeditor/translation/czech.ts | 2 +- mapeditor/translation/english.ts | 2 +- mapeditor/translation/finnish.ts | 2 +- mapeditor/translation/french.ts | 2 +- mapeditor/translation/german.ts | 312 ++++++++++---------- mapeditor/translation/greek.ts | 2 +- mapeditor/translation/hungarian.ts | 2 +- mapeditor/translation/italian.ts | 2 +- mapeditor/translation/japanese.ts | 2 +- mapeditor/translation/korean.ts | 2 +- mapeditor/translation/norwegian.ts | 2 +- mapeditor/translation/polish.ts | 2 +- mapeditor/translation/portuguese.ts | 2 +- mapeditor/translation/romanian.ts | 2 +- mapeditor/translation/russian.ts | 6 +- mapeditor/translation/spanish.ts | 2 +- mapeditor/translation/swedish.ts | 2 +- mapeditor/translation/turkish.ts | 2 +- mapeditor/translation/ukrainian.ts | 2 +- mapeditor/translation/vietnamese.ts | 2 +- 24 files changed, 178 insertions(+), 188 deletions(-) diff --git a/mapeditor/templateeditor/templateeditor.cpp b/mapeditor/templateeditor/templateeditor.cpp index ec64739ca..89703f1bf 100644 --- a/mapeditor/templateeditor/templateeditor.cpp +++ b/mapeditor/templateeditor/templateeditor.cpp @@ -748,7 +748,7 @@ void TemplateEditor::on_pushButtonAddSubTemplate_clicked() if(templates.count(text.toStdString())) { - QMessageBox::critical(this, tr("Already existing!"), tr("At template with this name is already existing.")); + QMessageBox::critical(this, tr("Already existing!"), tr("A template with this name is already existing.")); return; } diff --git a/mapeditor/translation/belarusian.ts b/mapeditor/translation/belarusian.ts index fcd06d7a6..1a8be617a 100644 --- a/mapeditor/translation/belarusian.ts +++ b/mapeditor/translation/belarusian.ts @@ -4254,7 +4254,7 @@ Guard: %3 - At template with this name is already existing. + A template with this name is already existing. diff --git a/mapeditor/translation/bulgarian.ts b/mapeditor/translation/bulgarian.ts index d3a58afbd..5abd51b46 100644 --- a/mapeditor/translation/bulgarian.ts +++ b/mapeditor/translation/bulgarian.ts @@ -1874,7 +1874,7 @@ Do you want to do that now ? Players - + Играч(и) @@ -3761,7 +3761,7 @@ Add it to the map's required mods in Map->General settings. Players - + Играч(и) @@ -4246,7 +4246,7 @@ Guard: %3 - At template with this name is already existing. + A template with this name is already existing. diff --git a/mapeditor/translation/chinese.ts b/mapeditor/translation/chinese.ts index 3022360b3..ff6179ec3 100644 --- a/mapeditor/translation/chinese.ts +++ b/mapeditor/translation/chinese.ts @@ -3704,7 +3704,7 @@ Guard: %3 - At template with this name is already existing. + A template with this name is already existing. diff --git a/mapeditor/translation/czech.ts b/mapeditor/translation/czech.ts index 1383dcf34..f92f51dea 100644 --- a/mapeditor/translation/czech.ts +++ b/mapeditor/translation/czech.ts @@ -3706,7 +3706,7 @@ Guard: %3 - At template with this name is already existing. + A template with this name is already existing. diff --git a/mapeditor/translation/english.ts b/mapeditor/translation/english.ts index 39513e0b6..59ebecf31 100644 --- a/mapeditor/translation/english.ts +++ b/mapeditor/translation/english.ts @@ -3691,7 +3691,7 @@ Guard: %3 - At template with this name is already existing. + A template with this name is already existing. diff --git a/mapeditor/translation/finnish.ts b/mapeditor/translation/finnish.ts index a6e34d8fd..756792efb 100644 --- a/mapeditor/translation/finnish.ts +++ b/mapeditor/translation/finnish.ts @@ -4253,7 +4253,7 @@ Guard: %3 - At template with this name is already existing. + A template with this name is already existing. diff --git a/mapeditor/translation/french.ts b/mapeditor/translation/french.ts index 1e9ebc1dc..b91af30db 100644 --- a/mapeditor/translation/french.ts +++ b/mapeditor/translation/french.ts @@ -3955,7 +3955,7 @@ Guard: %3 - At template with this name is already existing. + A template with this name is already existing. diff --git a/mapeditor/translation/german.ts b/mapeditor/translation/german.ts index 55c4ab3cd..bf38cbf03 100644 --- a/mapeditor/translation/german.ts +++ b/mapeditor/translation/german.ts @@ -344,12 +344,12 @@ Select Factions - + Fraktionen auswählen Faction Selector - + Fraktions-Wähler @@ -438,12 +438,12 @@ Save - Speichern + Speichern Cancel - Abbrechen + Abbrechen @@ -732,7 +732,7 @@ Template editor - + Template-Editor @@ -1320,30 +1320,26 @@ Hero %1 cannot be created as NEUTRAL. - Held %1 kann nicht als NEUTRAL erstellt werden. + Held %1 kann nicht als NEUTRAL erstellt werden. Missing Required Mod - AI-generated, needs review by native speaker; delete this comment afterwards - Erforderliches Mod fehlt + Erforderliche Mod fehlt Do you want to do that now ? - AI-generated, needs review by native speaker; delete this comment afterwards - - + Möchten Sie das jetzt tun? This object's mod is mandatory for map to remain valid. - AI-generated, needs review by native speaker; delete this comment afterwards - Das Mod dieses Objekts ist erforderlich, damit die Karte gültig bleibt. + Die Mod dieses Objekts ist erforderlich, damit die Karte gültig bleibt. @@ -1436,22 +1432,22 @@ Möchten Sie das jetzt tun? Select Mines - + Minen auswählen Mine Selector - + Minen-Wähler Resource - Ressource + Ressource Mines - Minen + Minen @@ -1565,26 +1561,22 @@ Möchten Sie das jetzt tun? Select Player - AI-generated, needs review by native speaker; delete this comment afterwards - Spieler auswählen + Spieler auswählen Hero cannot be created as NEUTRAL - AI-generated, needs review by native speaker; delete this comment afterwards - Held kann nicht als NEUTRAL erstellt werden + Held kann nicht als NEUTRAL erstellt werden Switch to one of the available players: - AI-generated, needs review by native speaker; delete this comment afterwards - Wechseln Sie zu einem der verfügbaren Spieler: + Wechsele zu einem der verfügbaren Spieler: Shortcut: %1 - AI-generated, needs review by native speaker; delete this comment afterwards - Tastenkombination: %1 + Tastenkombination: %1 @@ -1592,22 +1584,22 @@ Möchten Sie das jetzt tun? Player settings - Spieler-Einstellungen + Spieler-Einstellungen Players - Spieler + Spieler 1 - 1 + 1 Ok - Ok + Ok @@ -2021,17 +2013,15 @@ Möchten Sie das jetzt tun? (submod of %1) - AI-generated, needs review by native speaker; delete this comment afterwards - (Submodul von %1) + (Submodul von %1) The mod '%1'%2, is required by an object on the map. Add it to the map's required mods in Map->General settings. should be consistent with Map->General menu entry translation - AI-generated, needs review by native speaker; delete this comment afterwards - Das Mod „%1“%2 wird von einem Objekt auf der Karte benötigt. -Fügen Sie es zu den erforderlichen Mods unter Karte → Allgemeine Einstellungen hinzu. + Die Mod „%1“%2 wird von einem Objekt auf der Karte benötigt. +Fügen Sie sie zu den erforderlichen Mods unter Karte → Allgemeine Einstellungen hinzu. @@ -3125,196 +3115,196 @@ Fügen Sie es zu den erforderlichen Mods unter Karte → Allgemeine Einstellunge VCMI Template Editor - + VCMI Template-Editor File - Datei + Datei Edit - Bearbeiten + Bearbeiten View - Ansicht + Ansicht Toolbar - Werkzeugleiste + Werkzeugleiste Selected Template: - + Ausgewähltes Template: Add - Hinzufügen + Hinzufügen Remove - Entfernen + Entfernen Rename - + Umbenennen General - Allgemein + Allgemein Name - Name + Name Description - + Beschreibung Min Size - + Min Größe X - X + X Y - Y + Y Z - + Z Max Size - + Max Größe Players - Spieler + Spieler Human - + Mensch Allowed water content - + Wasser-Inhalt erlaubt None - Keine + Keine Normal - Normal + Normal Islands - Inseln + Inseln Zone - + Zone Visualisation - + Visualisierung Position - + Position Size - + Größe ID - ID + ID Type - Typ + Typ Owner - Besitzer + Besitzer Zone link - + Zonen-Verknüpfung Mines - Minen + Minen Custom objects - + Benutzerdefinierte Objekte Towns - Städte + Städte Terrain - + Terrain @@ -3322,17 +3312,17 @@ Fügen Sie es zu den erforderlichen Mods unter Karte → Allgemeine Einstellunge Treasure - + Schatz Town info - + Stadtinfo Town count - + Stadtanzahl @@ -3340,7 +3330,7 @@ Fügen Sie es zu den erforderlichen Mods unter Karte → Allgemeine Einstellunge Player - Spieler + Spieler @@ -3348,386 +3338,388 @@ Fügen Sie es zu den erforderlichen Mods unter Karte → Allgemeine Einstellunge Neutral - Neutral + Neutral Castle count - + Schlossanzahl Town density - + Stadtdichte Castle density - + Schlossdichte Match terrain to town - + Terrain der Stadt anpassen Terrain types - + Terraintypen Banned terrain types - + Verbotene Terraintypen Towns are same type - + Städte sind vom gleichen Typ Allowed towns - + Erlaubte Städte Banned towns - + Verbotene STädte Town hints - + Stadt-Hinweise Monsters - Monster + Monster Allowed monsters - + Erlaubte Monster Banned monsters - + Verbotene Monster Strength - + Stärke Objects - Objekte + Objekte Connections - + Verbindungen Open - Öffnen + Öffnen Save - Speichern + Speichern New - Neu + Neu Save as... - Speichern unter... + Speichern unter... Ctrl+Shift+S - Strg+Shift+S + Strg+Shift+S Add zone - + Zone hinzufügen Remove zone - + Zone entfernen Del - Entf + Entf Auto position - + Auto-Positionierung Ctrl+P - Strg+P + Strg+P Zoom in - Heranzoomen + Heranzoomen Ctrl++ - Strg++ + Strg++ Zoom out - Herauszoomen + Herauszoomen Ctrl+- - Strg+- + Strg+- Zoom auto - + Autozoom Ctrl+Shift+: - + Strg+Shift+: Zoom reset - Zoom zurücksetzen + Zoom zurücksetzen Ctrl+Shift+= - Strg+Umschalt+= + Strg+Umschalt+= Min - + Min Max - + Max Action - + Aktion Delete - + Entfernen ID: %1 - + ID: %1 Max treasure: %1 - + Max Schatz: %1 Player start - + Spieler-Start CPU start - + CPU-Start Junction - + Kreuzung Water - + Wasser Sealed - + Versiegelt Random - Zufall + Zufall Weak - Schwach + Schwach Strong - Stark + Stark Zone A - + Zone A Zone B - + Zone B Guard - + Wächter Road - + Straße Guarded - + Bewacht Fictive - + Fiktiv Repulsive - + Abstoßend Wide - + Weit Force portal - + Portal erzwingen Yes - + Ja No - + Nein Zone A: %1 Zone B: %2 Guard: %3 - + Zone A: %1 +Zone B: %2 +Wächter: %3 Confirmation - Bestätigung + Bestätigung Unsaved changes will be lost, are you sure? - + Nicht gespeicherte Änderungen gehen verloren, seid Ihr sicher? Open template - + Template öffnen VCMI templates(*.json) - + VCMI-Templates(*.json) Save template - + Template speichern VCMI templates (*.json) - + VCMI-Templates (*.json) Enter Name - + Namen eingeben Name: - + Name: Already existing! - + Bereits vorhanden! - At template with this name is already existing. - + A template with this name is already existing. + Ein Template mit diesem Namen ist bereits vorhanden. To few templates! - + Zu wenig Templates! At least one template should remain after removing. - + Nach dem Entfernen sollte mindestens ein Template übrig bleiben. Error - Fehler + Fehler Not implemented yet! - + Noch nicht implementiert! @@ -3736,12 +3728,12 @@ Guard: %3 Select Terrains - + Terrain auswählen Terrain Selector - + Terrain-Wähler @@ -4090,32 +4082,32 @@ Guard: %3 Select Treasures - + Schätze auswählen Treasure Selector - + Schätze-Wähler Min - + Min Max - + Max Density - + Dichte Action - + Aktion @@ -4178,8 +4170,7 @@ Guard: %3 Ownable object %1 is UNFLAGGABLE but must have NEUTRAL or player owner - AI-generated, needs review by native speaker; delete this comment afterwards - Besitzbares Objekt %1 kann nicht markiert werden, muss aber NEUTRAL oder einem Spieler gehören + Besitzbares Objekt %1 kann nicht markiert werden, muss aber NEUTRAL oder einem Spieler gehören @@ -4224,8 +4215,7 @@ Guard: %3 The map is valid and has no issues. - AI-generated, needs review by native speaker; delete this comment afterwards - Die Karte ist gültig und weist keine Probleme auf. + Die Karte ist gültig und weist keine Probleme auf. diff --git a/mapeditor/translation/greek.ts b/mapeditor/translation/greek.ts index b3acfc175..e80b8e28b 100644 --- a/mapeditor/translation/greek.ts +++ b/mapeditor/translation/greek.ts @@ -4246,7 +4246,7 @@ Guard: %3 - At template with this name is already existing. + A template with this name is already existing. diff --git a/mapeditor/translation/hungarian.ts b/mapeditor/translation/hungarian.ts index 68b03c1cb..577eac67b 100644 --- a/mapeditor/translation/hungarian.ts +++ b/mapeditor/translation/hungarian.ts @@ -3832,7 +3832,7 @@ Guard: %3 - At template with this name is already existing. + A template with this name is already existing. diff --git a/mapeditor/translation/italian.ts b/mapeditor/translation/italian.ts index 04d299f6b..4a054b769 100644 --- a/mapeditor/translation/italian.ts +++ b/mapeditor/translation/italian.ts @@ -3833,7 +3833,7 @@ Guard: %3 - At template with this name is already existing. + A template with this name is already existing. diff --git a/mapeditor/translation/japanese.ts b/mapeditor/translation/japanese.ts index 3f1a036cc..09cc99d39 100644 --- a/mapeditor/translation/japanese.ts +++ b/mapeditor/translation/japanese.ts @@ -4244,7 +4244,7 @@ Guard: %3 - At template with this name is already existing. + A template with this name is already existing. diff --git a/mapeditor/translation/korean.ts b/mapeditor/translation/korean.ts index e56b215aa..5a2137271 100644 --- a/mapeditor/translation/korean.ts +++ b/mapeditor/translation/korean.ts @@ -4223,7 +4223,7 @@ Guard: %3 - At template with this name is already existing. + A template with this name is already existing. diff --git a/mapeditor/translation/norwegian.ts b/mapeditor/translation/norwegian.ts index e87e69d6e..30b115382 100644 --- a/mapeditor/translation/norwegian.ts +++ b/mapeditor/translation/norwegian.ts @@ -4246,7 +4246,7 @@ Guard: %3 - At template with this name is already existing. + A template with this name is already existing. diff --git a/mapeditor/translation/polish.ts b/mapeditor/translation/polish.ts index 135b4cf85..2031bb2b3 100644 --- a/mapeditor/translation/polish.ts +++ b/mapeditor/translation/polish.ts @@ -3696,7 +3696,7 @@ Guard: %3 - At template with this name is already existing. + A template with this name is already existing. diff --git a/mapeditor/translation/portuguese.ts b/mapeditor/translation/portuguese.ts index b7fb5f8cc..7671c57d1 100644 --- a/mapeditor/translation/portuguese.ts +++ b/mapeditor/translation/portuguese.ts @@ -3704,7 +3704,7 @@ Guard: %3 - At template with this name is already existing. + A template with this name is already existing. diff --git a/mapeditor/translation/romanian.ts b/mapeditor/translation/romanian.ts index d6f1d2924..f97b6ef14 100644 --- a/mapeditor/translation/romanian.ts +++ b/mapeditor/translation/romanian.ts @@ -4244,7 +4244,7 @@ Guard: %3 - At template with this name is already existing. + A template with this name is already existing. diff --git a/mapeditor/translation/russian.ts b/mapeditor/translation/russian.ts index 4e16b7db9..d0a849a79 100644 --- a/mapeditor/translation/russian.ts +++ b/mapeditor/translation/russian.ts @@ -1671,7 +1671,7 @@ Do you want to do that now ? Players - + Игроки @@ -3438,7 +3438,7 @@ Add it to the map's required mods in Map->General settings. Players - + Игроки @@ -3923,7 +3923,7 @@ Guard: %3 - At template with this name is already existing. + A template with this name is already existing. diff --git a/mapeditor/translation/spanish.ts b/mapeditor/translation/spanish.ts index f8a71b9de..711a096b6 100644 --- a/mapeditor/translation/spanish.ts +++ b/mapeditor/translation/spanish.ts @@ -3833,7 +3833,7 @@ Guard: %3 - At template with this name is already existing. + A template with this name is already existing. diff --git a/mapeditor/translation/swedish.ts b/mapeditor/translation/swedish.ts index 1fa28e89c..d58c347c3 100644 --- a/mapeditor/translation/swedish.ts +++ b/mapeditor/translation/swedish.ts @@ -4246,7 +4246,7 @@ Guard: %3 - At template with this name is already existing. + A template with this name is already existing. diff --git a/mapeditor/translation/turkish.ts b/mapeditor/translation/turkish.ts index e4bd97591..b587cee70 100644 --- a/mapeditor/translation/turkish.ts +++ b/mapeditor/translation/turkish.ts @@ -4244,7 +4244,7 @@ Guard: %3 - At template with this name is already existing. + A template with this name is already existing. diff --git a/mapeditor/translation/ukrainian.ts b/mapeditor/translation/ukrainian.ts index 2e6583bbf..af02ab313 100644 --- a/mapeditor/translation/ukrainian.ts +++ b/mapeditor/translation/ukrainian.ts @@ -4048,7 +4048,7 @@ Guard: %3 - At template with this name is already existing. + A template with this name is already existing. diff --git a/mapeditor/translation/vietnamese.ts b/mapeditor/translation/vietnamese.ts index bb6e1180f..3343d85e1 100644 --- a/mapeditor/translation/vietnamese.ts +++ b/mapeditor/translation/vietnamese.ts @@ -4093,7 +4093,7 @@ Guard: %3 - At template with this name is already existing. + A template with this name is already existing. From b28ff0e7b327dbdb3c48e5773a98bdb0b725bea7 Mon Sep 17 00:00:00 2001 From: Laserlicht <13953785+Laserlicht@users.noreply.github.com> Date: Sun, 22 Jun 2025 15:18:52 +0200 Subject: [PATCH 17/60] update german --- Mods/vcmi/Content/config/german.json | 137 +++++++++++++++++---------- 1 file changed, 89 insertions(+), 48 deletions(-) diff --git a/Mods/vcmi/Content/config/german.json b/Mods/vcmi/Content/config/german.json index aaa82c3d1..026386b98 100644 --- a/Mods/vcmi/Content/config/german.json +++ b/Mods/vcmi/Content/config/german.json @@ -28,6 +28,18 @@ "vcmi.adventureMap.movementPointsHeroInfo" : "(Bewegungspunkte: %REMAINING / %POINTS)", "vcmi.adventureMap.replayOpponentTurnNotImplemented" : "Das Wiederholen des gegnerischen Zuges ist aktuell noch nicht implementiert!", + "vcmi.adventureMap.dwelling2" : "{%s}\r\n\r\nWürdet Ihr gerne %s oder %s rekrutieren?", + "vcmi.adventureMap.dwelling3" : "{%s}\r\n\r\nWürdet Ihr gerne %s, %s oder %s rekrutieren?", + + "vcmi.artifact.charges" : "Geladene", + + "vcmi.battle.action.move" : "Bewegen der Einheit an einen bestimmten Ort", + "vcmi.battle.action.info" : "Informationen zur Einheit anzeigen", + "vcmi.battle.action.shoot" : "Fernkampfangriff verwenden", + "vcmi.battle.action.attack" : "Nahkampfangriff verwenden", + "vcmi.battle.action.return" : "Nahkampfangriff verwenden und zurückkehren", + "vcmi.battle.action.genie" : "Zufälliger nützlicher Zauberspruch", + "vcmi.bonusSource.artifact" : "Artefakt", "vcmi.bonusSource.creature" : "Fähigkeit", "vcmi.bonusSource.spell" : "Zauber", @@ -332,44 +344,46 @@ "vcmi.adventureOptions.smoothDragging.help" : "{Nahtloses Ziehen der Karte}\n\nWenn aktiviert hat das Ziehen der Karte einen sanften Auslaufeffekt.", "vcmi.adventureOptions.skipAdventureMapAnimations.hover" : "Fading-Effekte überspringen", "vcmi.adventureOptions.skipAdventureMapAnimations.help" : "{Fading-Effekte überspringen}\n\nWenn diese Funktion aktiviert ist, werden das Ausblenden von Objekten und ähnliche Effekte übersprungen (Ressourcensammlung, Anlegen von Schiffen usw.). Macht die Benutzeroberfläche in einigen Fällen auf Kosten der Ästhetik reaktiver. Besonders nützlich in PvP-Spielen. Für maximale Bewegungsgeschwindigkeit ist das Überspringen unabhängig von dieser Einstellung aktiv.", - "vcmi.adventureOptions.mapScrollSpeed1.hover": "", - "vcmi.adventureOptions.mapScrollSpeed5.hover": "", - "vcmi.adventureOptions.mapScrollSpeed6.hover": "", - "vcmi.adventureOptions.mapScrollSpeed1.help": "Geschwindigkeit des Kartenbildlaufs auf sehr langsam einstellen", - "vcmi.adventureOptions.mapScrollSpeed5.help": "Geschwindigkeit des Kartenbildlaufs auf sehr schnell einstellen", - "vcmi.adventureOptions.mapScrollSpeed6.help": "Geschwindigkeit des Kartenbildlaufs auf sofort einstellen", + "vcmi.adventureOptions.mapScrollSpeed1.hover" : "", + "vcmi.adventureOptions.mapScrollSpeed5.hover" : "", + "vcmi.adventureOptions.mapScrollSpeed6.hover" : "", + "vcmi.adventureOptions.mapScrollSpeed1.help" : "Geschwindigkeit des Kartenbildlaufs auf sehr langsam einstellen", + "vcmi.adventureOptions.mapScrollSpeed5.help" : "Geschwindigkeit des Kartenbildlaufs auf sehr schnell einstellen", + "vcmi.adventureOptions.mapScrollSpeed6.help" : "Geschwindigkeit des Kartenbildlaufs auf sofort einstellen", "vcmi.adventureOptions.hideBackground.hover" : "Hintergrund ausblenden", "vcmi.adventureOptions.hideBackground.help" : "{Hintergrund ausblenden}\n\nDie Abenteuerkarte im Hintergrund ausblenden und stattdessen eine Textur anzeigen.", + "vcmi.adventureOptions.minimapShowHeroes.hover" : "Helden auf der Minimap anzeigen", + "vcmi.adventureOptions.minimapShowHeroes.help" : "{Helden auf der Minimap anzeigen}\n\nZusätzliches Symbol für alle Helden auf der Minimap anzeigen, damit sie auf großen Karten besser zu sehen sind", - "vcmi.battleOptions.queueSizeLabel.hover": "Reihenfolge der Kreaturen anzeigen", - "vcmi.battleOptions.queueSizeNoneButton.hover": "AUS", - "vcmi.battleOptions.queueSizeAutoButton.hover": "AUTO", - "vcmi.battleOptions.queueSizeSmallButton.hover": "KLEIN", - "vcmi.battleOptions.queueSizeBigButton.hover": "GROß", - "vcmi.battleOptions.queueSizeNoneButton.help": "Vollständige Deaktivierung der Sichtbarkeit der Reihenfolge der Kreaturen im Kampf", - "vcmi.battleOptions.queueSizeAutoButton.help": "Stellt die Größe der Zugreihenfolge abhängig von der Spielauflösung ein (klein, wenn mit einer Bildschirmauflösung unter 700 Pixeln gespielt wird, ansonsten groß)", - "vcmi.battleOptions.queueSizeSmallButton.help": "Setzt die Zugreihenfolge auf klein", - "vcmi.battleOptions.queueSizeBigButton.help": "Setzt die Größe der Zugreihenfolge auf groß (nicht unterstützt, wenn die Spielauflösung weniger als 700 Pixel hoch ist)", - "vcmi.battleOptions.animationsSpeed1.hover": "", - "vcmi.battleOptions.animationsSpeed5.hover": "", - "vcmi.battleOptions.animationsSpeed6.hover": "", - "vcmi.battleOptions.animationsSpeed1.help": "Setzt die Animationsgeschwindigkeit auf sehr langsam", - "vcmi.battleOptions.animationsSpeed5.help": "Setzt die Animationsgeschwindigkeit auf sehr schnell", - "vcmi.battleOptions.animationsSpeed6.help": "Setzt die Animationsgeschwindigkeit auf sofort", - "vcmi.battleOptions.movementHighlightOnHover.hover": "Hervorhebung der Bewegung bei Hover", - "vcmi.battleOptions.movementHighlightOnHover.help": "{Hervorhebung der Bewegung bei Hover}\n\nHebt die Bewegungsreichweite der Einheit hervor, wenn man mit dem Mauszeiger über sie fährt.", - "vcmi.battleOptions.rangeLimitHighlightOnHover.hover": "Bereichsgrenzen für Schützen anzeigen", - "vcmi.battleOptions.rangeLimitHighlightOnHover.help": "{Bereichsgrenzen für Schützen anzeigen}\n\nZeigt die Entfernungsgrenzen des Schützen an, wenn man mit dem Mauszeiger über ihn fährt.", - "vcmi.battleOptions.showStickyHeroInfoWindows.hover": "Statistikfenster für Helden anzeigen", - "vcmi.battleOptions.showStickyHeroInfoWindows.help": "{Statistikfenster für Helden anzeigen}\n\nDauerhaftes Einschalten des Statistikfenster für Helden, das die primären Werte und Zauberpunkte anzeigt.", - "vcmi.battleOptions.skipBattleIntroMusic.hover": "Intro-Musik überspringen", - "vcmi.battleOptions.skipBattleIntroMusic.help": "{Intro-Musik überspringen}\n\n Überspringe die kurze Musik, die zu Beginn eines jeden Kampfes gespielt wird, bevor die Action beginnt. Kann auch durch Drücken der ESC-Taste übersprungen werden.", - "vcmi.battleOptions.endWithAutocombat.hover": "Kampf beenden", - "vcmi.battleOptions.endWithAutocombat.help": "{Kampf beenden}\n\nAutokampf spielt den Kampf sofort zu Ende", - "vcmi.battleOptions.showQuickSpell.hover": "Schnellzauber-Panel anzeigen", - "vcmi.battleOptions.showQuickSpell.help": "{Schnellzauber-Panel anzeigen}\n\nZeigt ein Panel, auf dem schnell Zauber ausgewählt werden können", - "vcmi.battleOptions.showHealthBar.hover": "Gesundheits-Balken anzeigen", - "vcmi.battleOptions.showHealthBar.help": "{Gesundheits-Balken anzeigen}\n\nAnzeige eines Gesundheitsbalkens, der die verbleibende Gesundheit anzeigt, bevor eine Einheit stirbt.", + "vcmi.battleOptions.queueSizeLabel.hover" : "Reihenfolge der Kreaturen anzeigen", + "vcmi.battleOptions.queueSizeNoneButton.hover" : "AUS", + "vcmi.battleOptions.queueSizeAutoButton.hover" : "AUTO", + "vcmi.battleOptions.queueSizeSmallButton.hover" : "KLEIN", + "vcmi.battleOptions.queueSizeBigButton.hover" : "GROß", + "vcmi.battleOptions.queueSizeNoneButton.help" : "Vollständige Deaktivierung der Sichtbarkeit der Reihenfolge der Kreaturen im Kampf", + "vcmi.battleOptions.queueSizeAutoButton.help" : "Stellt die Größe der Zugreihenfolge abhängig von der Spielauflösung ein (klein, wenn mit einer Bildschirmauflösung unter 700 Pixeln gespielt wird, ansonsten groß)", + "vcmi.battleOptions.queueSizeSmallButton.help" : "Setzt die Zugreihenfolge auf klein", + "vcmi.battleOptions.queueSizeBigButton.help" : "Setzt die Größe der Zugreihenfolge auf groß (nicht unterstützt, wenn die Spielauflösung weniger als 700 Pixel hoch ist)", + "vcmi.battleOptions.animationsSpeed1.hover" : "", + "vcmi.battleOptions.animationsSpeed5.hover" : "", + "vcmi.battleOptions.animationsSpeed6.hover" : "", + "vcmi.battleOptions.animationsSpeed1.help" : "Setzt die Animationsgeschwindigkeit auf sehr langsam", + "vcmi.battleOptions.animationsSpeed5.help" : "Setzt die Animationsgeschwindigkeit auf sehr schnell", + "vcmi.battleOptions.animationsSpeed6.help" : "Setzt die Animationsgeschwindigkeit auf sofort", + "vcmi.battleOptions.movementHighlightOnHover.hover" : "Hervorhebung der Bewegung bei Hover", + "vcmi.battleOptions.movementHighlightOnHover.help" : "{Hervorhebung der Bewegung bei Hover}\n\nHebt die Bewegungsreichweite der Einheit hervor, wenn man mit dem Mauszeiger über sie fährt.", + "vcmi.battleOptions.rangeLimitHighlightOnHover.hover" : "Bereichsgrenzen für Schützen anzeigen", + "vcmi.battleOptions.rangeLimitHighlightOnHover.help" : "{Bereichsgrenzen für Schützen anzeigen}\n\nZeigt die Entfernungsgrenzen des Schützen an, wenn man mit dem Mauszeiger über ihn fährt.", + "vcmi.battleOptions.showStickyHeroInfoWindows.hover" : "Statistikfenster für Helden anzeigen", + "vcmi.battleOptions.showStickyHeroInfoWindows.help" : "{Statistikfenster für Helden anzeigen}\n\nDauerhaftes Einschalten des Statistikfenster für Helden, das die primären Werte und Zauberpunkte anzeigt.", + "vcmi.battleOptions.skipBattleIntroMusic.hover" : "Intro-Musik überspringen", + "vcmi.battleOptions.skipBattleIntroMusic.help" : "{Intro-Musik überspringen}\n\n Überspringe die kurze Musik, die zu Beginn eines jeden Kampfes gespielt wird, bevor die Action beginnt. Kann auch durch Drücken der ESC-Taste übersprungen werden.", + "vcmi.battleOptions.endWithAutocombat.hover" : "Kampf beenden", + "vcmi.battleOptions.endWithAutocombat.help" : "{Kampf beenden}\n\nAutokampf spielt den Kampf sofort zu Ende", + "vcmi.battleOptions.showQuickSpell.hover" : "Schnellzauber-Panel anzeigen", + "vcmi.battleOptions.showQuickSpell.help" : "{Schnellzauber-Panel anzeigen}\n\nZeigt ein Panel, auf dem schnell Zauber ausgewählt werden können", + "vcmi.battleOptions.showHealthBar.hover" : "Gesundheits-Balken anzeigen", + "vcmi.battleOptions.showHealthBar.help" : "{Gesundheits-Balken anzeigen}\n\nAnzeige eines Gesundheitsbalkens, der die verbleibende Gesundheit anzeigt, bevor eine Einheit stirbt.", "vcmi.adventureMap.revisitObject.hover" : "Objekt erneut besuchen", "vcmi.adventureMap.revisitObject.help" : "{Objekt erneut besuchen}\n\nSteht ein Held gerade auf einem Kartenobjekt, kann er den Ort erneut aufsuchen.", @@ -399,6 +413,9 @@ "vcmi.battleWindow.endWithAutocombat" : "Seid Ihr sicher, dass Ihr den Kampf mit Auto-Kampf beenden wollt?", "vcmi.battleResultsWindow.applyResultsLabel" : "Kampfergebnis übernehmen", + "vcmi.battleResultsWindow.spellDurationRemaining.0" : "Verbleibende Dauer: %d Kampfrunden", + "vcmi.battleResultsWindow.spellDurationRemaining.1" : "Verbleibende Dauer: %d Kampfrunde", + "vcmi.battleResultsWindow.spellDurationRemaining.2" : "Verbleibende Dauer: %d Kampfrunden", "vcmi.tutorialWindow.title" : "Touchscreen Einführung", "vcmi.tutorialWindow.decription.RightClick" : "Berührt und haltet das Element, auf das mit der rechten Maustaste geklickt werden soll. Berührt den freien Bereich, um zu schließen.", @@ -413,8 +430,8 @@ "vcmi.otherOptions.availableCreaturesAsDwellingLabel.help" : "{Verfügbare Kreaturen anzeigen}\n\n Zeigt in der Stadtübersicht (linke untere Ecke) die zum Kauf verfügbaren Kreaturen anstelle ihres Wachstums an.", "vcmi.otherOptions.creatureGrowthAsDwellingLabel.hover" : "Wöchentl. Wachstum der Kreaturen anz.", "vcmi.otherOptions.creatureGrowthAsDwellingLabel.help" : "{Wöchentliches Wachstum der Kreaturen anzeigen}\n\n Zeigt das wöchentliche Wachstum der Kreaturen anstelle der verfügbaren Menge in der Stadtübersicht (unten links).", - "vcmi.otherOptions.compactTownCreatureInfo.hover": "Kompakte Kreatur-Infos", - "vcmi.otherOptions.compactTownCreatureInfo.help": "{Kompakte Kreatur-Infos}\n\n Kleinere Stadt-Kreaturen Informationen in der Stadtübersicht.", + "vcmi.otherOptions.compactTownCreatureInfo.hover" : "Kompakte Kreatur-Infos", + "vcmi.otherOptions.compactTownCreatureInfo.help" : "{Kompakte Kreatur-Infos}\n\n Kleinere Stadt-Kreaturen Informationen in der Stadtübersicht.", "vcmi.townHall.missingBase" : "Basis Gebäude %s muss als erstes gebaut werden", "vcmi.townHall.noCreaturesToRecruit" : "Es gibt keine Kreaturen zu rekrutieren!", @@ -621,11 +638,16 @@ "core.seerhut.quest.reachDate.visit.5" : "Geschlossen bis %s.", "mapObject.core.hillFort.object.description" : "Aufwertungen von Kreaturen. Die Stufen 1 - 4 sind billiger als in der zugehörigen Stadt.", - + + "artifact.core.orbOfVulnerability.bonus.noResistance" : "{Kugel der Verwundbarkeit}\nNegiert die natürliche Magieresistenz aller Kreaturen auf dem Schlachtfeld", + "creatures.core.angel.bonus.raisesMorale" : "{Steigert die Moral der Verbündeten}\nEngel und Erzengel erhöhen die Moral der Verbündeten um eins", + "creatures.core.devil.bonus.decreaseLuck" : "{Verringert feindliches Glück}\nTeufel und Erzteufel reduzieren das Glück des Gegners um eins", + "creatures.core.boneDragon.bonus.decreaseMorale" : "{Senkt die Moral des Gegners}\nKnochendrachen und Geisterdrachen senken die Moral von gegnerischen Einheiten um eins", + "creatures.core.marksman.bonus.extraAttack" : "{Schießt zweimal}\nDiese Einheit kann zweimal schießen", "creatures.core.azureDragon.bonus.fearful" : "{Furcht}\nVerursacht Furcht bei einem gegnerischen Stapel", "creatures.core.azureDragon.bonus.fearless" : "{Furchtlos}\nimmun gegen die Fähigkeit Furcht", - "core.bonus.ADDITIONAL_ATTACK.description" : "{Doppelschlag}\nGreift zweimal an", + "core.bonus.ADDITIONAL_ATTACK.description" : "{Doppelschlag}\nGreift zweimal an", // TODO: alternative descriptions for melee/ranged effect range "core.bonus.ADDITIONAL_RETALIATION.description" : "{Zusätzliche Vergeltungsmaßnahmen}\nKann ${val} zusätzliche Male vergelten", "core.bonus.ATTACKS_ALL_ADJACENT.description" : "{Rundum angreifen}\nGreift alle benachbarten Gegner an", "core.bonus.BLOCKS_RANGED_RETALIATION.description" : "{Keine Reichweitenverschiebung}\nFeind kann nicht durch Schießen vergelten", @@ -646,17 +668,24 @@ "core.bonus.ENEMY_DEFENCE_REDUCTION.description" : "{Ignoriere Verteidigung (${val}%)}\nIgnoriert einen Teil der Verteidigung für den Angriff", "core.bonus.FEROCITY.description" : "{Wildheit}\nGreift ${val} zusätzliche Male an, wenn jemand getötet wird", "core.bonus.FIRE_SHIELD.description" : "{Feuerschild (${val}%)}\nReflektiert einen Teil des Nahkampfschadens", + "core.bonus.FIRST_STRIKE.description.bonusSubtype.damageTypeMelee" : "{Erstschlag}\nDie Einheit erwidert den Angriff, bevor sie im Nahkampf angegriffen wird", + "core.bonus.FIRST_STRIKE.description.bonusSubtype.damageTypeRanged" : "{Erstschlag}\nDie Einheit erwidert den Angriff, bevor sie mit einem Fernkampfangriff angegriffen wird", "core.bonus.FIRST_STRIKE.description" : "{Erstschlag}\nDiese Kreatur greift zuerst an, anstatt zu vergelten", + "core.bonus.FLYING.description.bonusSubtype.movementTeleporting" : "{Teleportation}\nDiese Einheit kann sich in ein beliebiges Feld teleportieren und ignoriert Hindernisse auf dem Schlachtfeld", "core.bonus.FLYING.description" : "{Fliegen}\nKann fliegen (ignoriert Hindernisse)", "core.bonus.FREE_SHOOTING.description" : "{Nah schießen}\nKann im Nahkampf schießen", "core.bonus.GARGOYLE.description" : "{Gargoyle}\nKann nicht aufgerichtet oder geheilt werden", + "core.bonus.GENERAL_DAMAGE_REDUCTION.description.bonusSubtype.damageTypeMelee" : "{Schaden mindern (${val}%) }\nVerringert physischen Schaden durch Nahkampfangriffe um ${val}%", + "core.bonus.GENERAL_DAMAGE_REDUCTION.description.bonusSubtype.damageTypeRanged" : "{Schaden mindern (${val}%) }\nVerringert den physischen Schaden von Fernkampfangriffen um ${val}%", "core.bonus.GENERAL_DAMAGE_REDUCTION.description" : "{Schaden vermindern (${val}%)}\nReduziert physischen Schaden aus dem Fern- oder Nahkampf", "core.bonus.HATE.description" : "{Hasst ${subtype.creature}}\nMacht ${val}% mehr Schaden", "core.bonus.HEALER.description" : "{Heiler}\nHeilt verbündete Einheiten", "core.bonus.HP_REGENERATION.description" : "{Regeneration}\nHeilt ${val} Trefferpunkte jede Runde", "core.bonus.INVINCIBLE.description" : "{Unbesiegbar}\nKann durch nichts beeinflusst werden", "core.bonus.JOUSTING.description" : "{Champion Charge}\n+${val}% Schaden pro zurückgelegtem Feld", - "core.bonus.KING.description" : "{König}\nAnfällig für Drachentöter Level ${val} oder höher", + "core.bonus.KING.description.2" : "{König verbessert}\nErhält zusätzlichen Schaden von Einheiten, die unter dem Zauber Drachentöter verbessert stehen", + "core.bonus.KING.description.3" : "{König Meisterhaft}\nErhält zusätzlichen Schaden von Einheiten, die unter dem Zauber Drachentöter Meisterhaft stehen", + "core.bonus.KING.description" : "{König}\nErhält zusätzlichen Schaden von Einheiten, die unter dem Zauber Drachentöter stehen", "core.bonus.LEVEL_SPELL_IMMUNITY.description" : "{Zauberimmunität 1-${val}}\nImmun gegen Zaubersprüche der Stufen 1-${val}", "core.bonus.LIFE_DRAIN.description" : "{Leben entziehen (${val}%)}\nDrainiert ${val}% des zugefügten Schadens", "core.bonus.LIMITED_SHOOTING_RANGE.description" : "{Begrenzte Schussweite}\nKann nicht auf Ziele schießen, die weiter als ${val} Felder entfernt sind", @@ -680,23 +709,24 @@ "core.bonus.REVENGE.description" : "{Rache}\nVerursacht zusätzlichen Schaden basierend auf der verlorenen Gesundheit des Angreifers im Kampf", "core.bonus.SHOOTER.description" : "{Fernkämpfer}\nKreatur kann schießen", "core.bonus.SHOOTS_ALL_ADJACENT.description" : "{Schießt rundherum}\nDie Fernkampfangriffe dieser Kreatur treffen alle Ziele in einem kleinen Bereich", + "core.bonus.SKELETON_TRANSFORMER_TARGET.description" : "{Skelett Transformation}\nDer Skeleton Transformer verwandelt diese Einheit in ein ${subtype.creature}", "core.bonus.SOUL_STEAL.description" : "{Seelenraub}\nGewinnt ${val} neue Kreaturen für jeden getöteten Gegner", "core.bonus.SPELL_AFTER_ATTACK.description" : "{Nach Angriff zaubern}\n${val}%, um ${subtype.spell} nach dem Angriff zu wirken", "core.bonus.SPELL_BEFORE_ATTACK.description" : "{Zauber vor Angriff}\n${val}% um ${subtype.spell} vor dem Angriff zu wirken", "core.bonus.SPELLCASTER.description" : "{Zauberer}\nKann ${subtype.spell} zaubern", + "core.bonus.SPELL_DAMAGE_REDUCTION.description" : "{Zauberwiderstand}\nSchaden von allen Zaubern um ${val}% reduziert.", "core.bonus.SPELL_DAMAGE_REDUCTION.description.spellSchool.air" : "{Luft-Zauberwiderstand}\nSchaden von Luft-Zaubern um ${val}% reduziert.", "core.bonus.SPELL_DAMAGE_REDUCTION.description.spellSchool.earth" : "{Erde-Zauberwiderstand}\nSchaden von Erde-Zaubern um ${val}% reduziert.", "core.bonus.SPELL_DAMAGE_REDUCTION.description.spellSchool.fire" : "{Feuer-Zauberwiderstand}\nSchaden von Feuer-Zaubern um ${val}% reduziert.", "core.bonus.SPELL_DAMAGE_REDUCTION.description.spellSchool.water" : "{Wasser-Zauberwiderstand}\nSchaden von Wasser-Zaubern um ${val}% reduziert.", - "core.bonus.SPELL_DAMAGE_REDUCTION.description" : "{Zauberwiderstand}\nSchaden von allen Zaubern um ${val}% reduziert.", "core.bonus.SPELL_IMMUNITY.description" : "{Zauberimmunität}\nImmun gegen ${subtype.spell}", - "core.bonus.SPELL_LIKE_ATTACK.description" : "{zauberähnlicher Angriff}\nAngriffe mit ${subtype.spell}", + "core.bonus.SPELL_LIKE_ATTACK.description" : "{Zauberähnlicher Angriff}\nAngriffe mit ${subtype.spell}", "core.bonus.SPELL_RESISTANCE_AURA.description" : "{Aura des Widerstands}\nStapel in der Nähe erhalten ${val}% Widerstand", - "core.bonus.SPELL_SCHOOL_IMMUNITY.description.spellSchool.air" : "{Luft-Immunität}\nImmunität gegen Zauber der Luft-Schule", - "core.bonus.SPELL_SCHOOL_IMMUNITY.description.spellSchool.earth" : "{Erde-Immunität}\nImmunität gegen Zauber der Erde-Schule", - "core.bonus.SPELL_SCHOOL_IMMUNITY.description.spellSchool.fire" : "{Feuer-Immunität}\nImmunität gegen Zauber der Feuer-Schule", - "core.bonus.SPELL_SCHOOL_IMMUNITY.description.spellSchool.water" : "{Wasser-Immunität}\nImmunität gegen Zauber der Wasser-Schule", "core.bonus.SPELL_SCHOOL_IMMUNITY.description" : "{Zauber-Immunität}\nImmunität gegen alle Zauber-Schulen", + "core.bonus.SPELL_SCHOOL_IMMUNITY.description.spellSchool.air" : "{Luft-Immunität}\nImmunität gegen Zauber der Luft-Schule", + "core.bonus.SPELL_SCHOOL_IMMUNITY.description.spellSchool.earth" : "{Erde-Immunität}\nImmunität gegen Zauber der Erde-Schule", + "core.bonus.SPELL_SCHOOL_IMMUNITY.description.spellSchool.fire" : "{Feuer-Immunität}\nImmunität gegen Zauber der Feuer-Schule", + "core.bonus.SPELL_SCHOOL_IMMUNITY.description.spellSchool.water" : "{Wasser-Immunität}\nImmunität gegen Zauber der Wasser-Schule", "core.bonus.SUMMON_GUARDIANS.description" : "{Wächter beschwören}\nBeschwört bei Kampfbeginn ${subtype.creature} (${val}%)", "core.bonus.THREE_HEADED_ATTACK.description" : "{Dreiköpfiger Angriff}\nGreift drei benachbarte Einheiten an", "core.bonus.TRANSMUTATION.description" : "{Transmutation}\n${val}% Chance, angegriffene Einheit in einen anderen Typ zu verwandeln", @@ -725,5 +755,16 @@ "spell.core.strongholdMoat.name" : "Holzspieße", "spell.core.strongholdMoatTrigger.name" : "Holzspieße", "spell.core.summonDemons.name" : "Dämonen beschwören", - "spell.core.towerMoat.name" : "Landmine" -} + "spell.core.towerMoat.name" : "Landmine", + + "spell.core.stoneGaze.description.none" : "{Steinerner Blick}\n\nDie anvisierte Einheit wird versteinert und kann sich drei Kampfrunden lang nicht bewegen. Wenn sie angegriffen wird, erleidet sie 50% Schaden und wird wieder aufgetaut", + "spell.core.poison.description.none" : "{Gift}\n\nWenn die Kreatur vergiftet ist, wird die maximale Gesundheit des Zielstapels drei Runden lang in jeder Kampfrunde um 10% verringert. Nach drei Runden ist die Kreatur nicht mehr vergiftet, aber die maximale Gesundheit bleibt verringert", + "spell.core.bind.description.none" : "{Binden}\n\nDie betroffene Einheit ist an den Boden gefesselt und kann sich nicht bewegen, bis sich der Stapel, der sie gefesselt hat, bewegt oder untergeht", + "spell.core.disease.description.none" : "{Krankheit}\n\nDas lebende Ziel wird krank, wodurch seine Angriffs- und Verteidigungswerte drei Runden lang um zwei reduziert werden", + "spell.core.paralyze.description.none" : "{Lähmen}\n\nDas Ziel ist gelähmt und verzichtet für den Rest der aktuellen Kampfrunde und die beiden darauf folgenden Kampfrunden auf seinen Zug, es sei denn, es wird in der Zwischenzeit angegriffen. Gelähmte Kreaturen erleiden bei Angriffen den vollen Schaden, können aber nur mit einem Viertel ihrer Stärke zurückschlagen", + "spell.core.age.description.none" : "{Alter}\n\nAltern senkt die maximale Gesundheit jeder Kreatur im Zielstapel drei Kampfrunden lang auf 50%", + "spell.core.deathCloud.description.none" : "{Death Cloud}\n\nZusätzlich zum normalen Fernkampfschaden im Zielfeld wirkt die Todeswolke auch auf alle 6 angrenzenden Felder um das Zielfeld und fügt allen Lebewesen im Radius Schaden zu.", + "spell.core.thunderbolt.description.none" : "{Donnerblitz}\n\nWenn der Stapel angreift, besteht eine 20-prozentige Chance, dass ein Blitzschlag erfolgt, bevor der Feind die Chance hat, zurückzuschlagen. Tritt dieser Fall ein, verursacht der Blitzschlag Schaden in Höhe der zehnfachen Anzahl der angreifenden Donnervögel", + "spell.core.dispelHelpful.description.none" : "{Hilfreiche Zaubersprüche bannen}\n\nEntfernt alle Zaubereffekte von der anvisierten Einheit", + "spell.core.acidBreath.description.none" : "{Saurer Atem}\n\nDer Atem reduziert die Verteidigung des Zielstapels um 3 und hat eine 20%ige Chance, zusätzlichen Schaden in Höhe von 25 Punkten pro angreifender Einheit zu verursachen", +} \ No newline at end of file From 36420794c7fa125f3c5c47b82727596ad0cdcb82 Mon Sep 17 00:00:00 2001 From: Laserlicht <13953785+Laserlicht@users.noreply.github.com> Date: Sun, 22 Jun 2025 16:49:28 +0200 Subject: [PATCH 18/60] translation of credit titles from HoMM3 --- Mods/vcmi/Content/config/english.json | 23 ++++++++++++++++++++ Mods/vcmi/Content/config/german.json | 23 ++++++++++++++++++++ client/mainmenu/CreditsScreen.cpp | 31 +++++++++++++++++++++++++++ 3 files changed, 77 insertions(+) diff --git a/Mods/vcmi/Content/config/english.json b/Mods/vcmi/Content/config/english.json index 36edf1aef..e82a32ab9 100644 --- a/Mods/vcmi/Content/config/english.json +++ b/Mods/vcmi/Content/config/english.json @@ -416,6 +416,29 @@ "vcmi.credits.idea" : "Idea", "vcmi.credits.developing" : "Developing", "vcmi.credits.testing" : "Testing", + "core.credits.createdBy" : "Created By", + "core.credits.executiveProducer" : "Executive Producer", + "core.credits.producer" : "Producer", + "core.credits.director" : "Director", + "core.credits.designers" : "Designers", + "core.credits.leadProgrammers" : "Lead Programmers", + "core.credits.programmers" : "Programmers", + "core.credits.installerProgrammer" : "Installer Programmer", + "core.credits.leadArtists" : "Lead Artists", + "core.credits.artists" : "Artists", + "core.credits.assetCoordinator" : "Asset Coordinator", + "core.credits.levelDesigners" : "Level Designers", + "core.credits.musicProducer" : "Music Producer", + "core.credits.townThemes" : "Town Themes", + "core.credits.music" : "Music", + "core.credits.soundDesign" : "Sound Design", + "core.credits.voiceProduction" : "Voice Production", + "core.credits.voiceTalent" : "Voice Talent", + "core.credits.leadTester" : "Lead Tester", + "core.credits.seniorTester" : "Senior Tester", + "core.credits.testers" : "Testers", + "core.credits.specialThanks" : "Special Thanks", + "core.credits.visitUsOnTheWeb" : "Visit us on the Web", "vcmi.tutorialWindow.title" : "Touchscreen Introduction", "vcmi.tutorialWindow.decription.RightClick" : "Touch and hold the element on which you want to right-click. Touch the free area to close.", diff --git a/Mods/vcmi/Content/config/german.json b/Mods/vcmi/Content/config/german.json index 2160f0920..a7bd6b190 100644 --- a/Mods/vcmi/Content/config/german.json +++ b/Mods/vcmi/Content/config/german.json @@ -406,6 +406,29 @@ "vcmi.credits.idea" : "Idee", "vcmi.credits.developing" : "Entwicklung", "vcmi.credits.testing" : "Tester", + "core.credits.createdBy" : "Erstellt von", + "core.credits.executiveProducer" : "Ausführender Produzent", + "core.credits.producer" : "Produzent", + "core.credits.director" : "Regisseur", + "core.credits.designers" : "Designer", + "core.credits.leadProgrammers" : "Leitende Programmierer", + "core.credits.programmers" : "Programmierer", + "core.credits.installerProgrammer" : "Installationsprogrammierer", + "core.credits.leadArtists" : "Leitende Künstler", + "core.credits.artists" : "Künstler", + "core.credits.assetCoordinator" : "Asset-Koordinator", + "core.credits.levelDesigners" : "Level-Designer", + "core.credits.musicProducer" : "Musikproduzent", + "core.credits.townThemes" : "Stadtthemen", + "core.credits.music" : "Musik", + "core.credits.soundDesign" : "Sounddesign", + "core.credits.voiceProduction" : "Sprachproduktion", + "core.credits.voiceTalent" : "Sprechertalente", + "core.credits.leadTester" : "Leitender Tester", + "core.credits.seniorTester" : "Senior-Tester", + "core.credits.testers" : "Tester", + "core.credits.specialThanks" : "Besonderer Dank", + "core.credits.visitUsOnTheWeb" : "Besuchen Sie uns im Internet", "vcmi.tutorialWindow.title" : "Touchscreen Einführung", "vcmi.tutorialWindow.decription.RightClick" : "Berührt und haltet das Element, auf das mit der rechten Maustaste geklickt werden soll. Berührt den freien Bereich, um zu schließen.", diff --git a/client/mainmenu/CreditsScreen.cpp b/client/mainmenu/CreditsScreen.cpp index e47afd3c5..778f0a729 100644 --- a/client/mainmenu/CreditsScreen.cpp +++ b/client/mainmenu/CreditsScreen.cpp @@ -47,6 +47,37 @@ CreditsScreen::CreditsScreen(Rect rect) std::string text((char *)textFile.first.get(), textFile.second); size_t firstQuote = text.find('\"') + 1; text = text.substr(firstQuote, text.find('\"', firstQuote) - firstQuote); + + auto translateCredits = [&text](std::map replacements){ + for(auto & item : replacements) + boost::replace_first(text, "{" + item.second + ":}", "{" + LIBRARY->generaltexth->translate(item.first) + ":}"); + }; + translateCredits({ + { "core.credits.createdBy", "Created By" }, + { "core.credits.executiveProducer", "Executive Producer" }, + { "core.credits.producer", "Producer" }, + { "core.credits.director", "Director" }, + { "core.credits.designers", "Designers" }, + { "core.credits.leadProgrammers", "Lead Programmers" }, + { "core.credits.programmers", "Programmers" }, + { "core.credits.installerProgrammer", "Installer Programmer" }, + { "core.credits.leadArtists", "Lead Artists" }, + { "core.credits.artists", "Artists" }, + { "core.credits.assetCoordinator", "Asset Coordinator" }, + { "core.credits.levelDesigners", "Level Designers" }, + { "core.credits.musicProducer", "Music Producer" }, + { "core.credits.townThemes", "Town Themes" }, + { "core.credits.music", "Music" }, + { "core.credits.soundDesign", "Sound Design" }, + { "core.credits.voiceProduction", "Voice Production" }, + { "core.credits.voiceTalent", "Voice Talent" }, + { "core.credits.leadTester", "Lead Tester" }, + { "core.credits.seniorTester", "Senior Tester" }, + { "core.credits.testers", "Testers" }, + { "core.credits.specialThanks", "Special Thanks" }, + { "core.credits.visitUsOnTheWeb", "Visit us on the Web" } + }); + text = "{- " + LIBRARY->generaltexth->translate("vcmi.credits.vcmi") + " -}\r\n" + contributorsText + "\r\n\r\n{" + LIBRARY->generaltexth->translate("vcmi.credits.website") + ":}\r\nhttps://vcmi.eu\r\n\r\n\r\n\r\n\r\n{- " + LIBRARY->generaltexth->translate("vcmi.credits.heroes") + " -}\r\n\r\n\r\n" + text; credits = std::make_shared(Rect(pos.w - 350, 0, 350, 600), FONT_CREDITS, ETextAlignment::CENTER, Colors::WHITE, text); credits->scrollTextTo(-600); // move all text below the screen From bcd95dcde53227cf8ce0434dc0abec30347e67ce Mon Sep 17 00:00:00 2001 From: Laserlicht <13953785+Laserlicht@users.noreply.github.com> Date: Sun, 22 Jun 2025 16:50:35 +0200 Subject: [PATCH 19/60] alphabetical order --- AUTHORS.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AUTHORS.h b/AUTHORS.h index fb6552959..a81715fb2 100644 --- a/AUTHORS.h +++ b/AUTHORS.h @@ -27,6 +27,7 @@ const std::vector> contributors = { { "Developing", "Henning Koehler", "henningkoehlernz", "henning.koehler.nz@gmail.com" }, { "Developing", "Ivan Savenko", "", "saven.ivan@gmail.com" }, { "Developing", "", "kambala-decapitator", "decapitator@ukr.net" }, + { "Developing", "Fenghuang Rumeng", "kdmcser", "zqtndfj@gmail.com" }, { "Developing", "", "krs0", "" }, { "Developing", "", "Laserlicht", "" }, { "Developing", "Alexey", "Macron1Robot", "" }, @@ -46,7 +47,6 @@ const std::vector> contributors = { { "Developing", "", "vmarkovtsev", "" }, { "Developing", "Tom Zielinski", "Warmonger", "Warmonger@vp.pl" }, { "Developing", "Xiaomin Ding", "", "dingding303@gmail.com" }, - { "Developing", "Fenghuang Rumeng", "kdmcser", "zqtndfj@gmail.com" }, { "Testing", "Ben Yan", "by003", "benyan9110@gmail.com," }, { "Testing", "", "Misiokles", "" }, From e58e287be5b88cf31f6e30b2c9c474f4a39835e0 Mon Sep 17 00:00:00 2001 From: Laserlicht <13953785+Laserlicht@users.noreply.github.com> Date: Sun, 22 Jun 2025 17:32:47 +0200 Subject: [PATCH 20/60] reorder list + show name if avail. (same as H3) --- AUTHORS.h | 78 ++++++++++++++++--------------- client/mainmenu/CreditsScreen.cpp | 2 +- 2 files changed, 41 insertions(+), 39 deletions(-) diff --git a/AUTHORS.h b/AUTHORS.h index a81715fb2..b9ddbc5ac 100644 --- a/AUTHORS.h +++ b/AUTHORS.h @@ -11,44 +11,46 @@ //VCMI PROJECT CODE CONTRIBUTORS: const std::vector> contributors = { -// Task Name Aka E-Mail - { "Idea", "Michał Urbańczyk", "Tow", "impono@gmail.com" }, - { "Idea", "Mateusz B.", "Tow dragon", "matcio1@gmail.com" }, + //Task Name Aka E-Mail + { "Idea" , "Mateusz B." , "Tow dragon" , "matcio1@gmail.com" }, + { "Idea" , "Michał Urbańczyk" , "Tow" , "impono@gmail.com" }, - { "Developing", "Andrea Palmate", "afxgroup", "andrea@amigasoft.net" }, - { "Developing", "Alexander Shishkin", "alexvins", "" }, - { "Developing", "Rafal R.", "ambtrip", "ambtrip@wp.pl" }, - { "Developing", "Andrii Danylchenko", "", "" }, - { "Developing", "Benjamin Gentner", "beegee", "" }, - { "Developing", "Piotr Wójcik", "Chocimier", "chocimier@tlen.pl" }, - { "Developing", "Dmitry Orlov", "", "shubus.corporation@gmail.com" }, - { "Developing", "", "Dydzio", "blood990@gmail.com" }, - { "Developing", "Andrzej Żak", "godric3", "" }, - { "Developing", "Henning Koehler", "henningkoehlernz", "henning.koehler.nz@gmail.com" }, - { "Developing", "Ivan Savenko", "", "saven.ivan@gmail.com" }, - { "Developing", "", "kambala-decapitator", "decapitator@ukr.net" }, - { "Developing", "Fenghuang Rumeng", "kdmcser", "zqtndfj@gmail.com" }, - { "Developing", "", "krs0", "" }, - { "Developing", "", "Laserlicht", "" }, - { "Developing", "Alexey", "Macron1Robot", "" }, - { "Developing", "Michał Kalinowski", "", "feniks_fire@o2.pl" }, - { "Developing", "Vadim Glazunov", "neweagle", "neweagle@gmail.com" }, - { "Developing", "Andrey Cherkas", "nordsoft", "nordsoft@yahoo.com" }, - { "Developing", "Rickard Westerlund", "Onion Knight", "onionknigh@gmail.com" }, - { "Developing", "Yifeng Sun", "phoebus118", "pkusunyifeng@gmail.com" }, - { "Developing", "", "rilian-la-te", "" }, - { "Developing", "", "SoundSSGood", "" }, - { "Developing", "Stefan Pavlov", "Ste", "mailste@gmail.com" }, - { "Developing", "Arseniy Shestakov", "SXX", "me@arseniyshestakov.com" }, - { "Developing", "Lukasz Wychrystenko", "tezeriusz", "t0@czlug.icis.pcz.pl" }, - { "Developing", "Trevor Standley", "tstandley", "" }, - { "Developing", "Vadim Markovtsev", "", "gmarkhor@gmail.com" }, - { "Developing", "Frank Zago", "ubuntux", "" }, - { "Developing", "", "vmarkovtsev", "" }, - { "Developing", "Tom Zielinski", "Warmonger", "Warmonger@vp.pl" }, - { "Developing", "Xiaomin Ding", "", "dingding303@gmail.com" }, + { "Developing", "Alexander Shishkin" , "alexvins" , "" }, + { "Developing", "Alexey" , "Macron1Robot" , "" }, + { "Developing", "Andrea Palmate" , "afxgroup" , "andrea@amigasoft.net" }, + { "Developing", "Andrey Cherkas" , "nordsoft" , "nordsoft@yahoo.com" }, + { "Developing", "Andrii Danylchenko" , "" , "" }, + { "Developing", "Andrzej Żak" , "godric3" , "" }, + { "Developing", "Arseniy Shestakov" , "SXX" , "me@arseniyshestakov.com" }, + { "Developing", "Benjamin Gentner" , "beegee" , "" }, + { "Developing", "Dmitry Orlov" , "" , "shubus.corporation@gmail.com" }, + { "Developing", "" , "Dydzio" , "blood990@gmail.com" }, + { "Developing", "Fenghuang Rumeng" , "kdmcser" , "zqtndfj@gmail.com" }, + { "Developing", "Frank Zago" , "ubuntux" , "" }, + { "Developing", "Henning Koehler" , "henningkoehlernz" , "henning.koehler.nz@gmail.com" }, + { "Developing", "Ivan Savenko" , "" , "saven.ivan@gmail.com" }, + { "Developing", "" , "Laserlicht" , "" }, + { "Developing", "Lukasz Wychrystenko", "tezeriusz" , "t0@czlug.icis.pcz.pl" }, + { "Developing", "Michał Kalinowski" , "" , "feniks_fire@o2.pl" }, + { "Developing", "Piotr Wójcik" , "Chocimier" , "chocimier@tlen.pl" }, + { "Developing", "Rafal R." , "ambtrip" , "ambtrip@wp.pl" }, + { "Developing", "Rickard Westerlund" , "Onion Knight" , "onionknigh@gmail.com" }, + { "Developing", "" , "SoundSSGood" , "" }, + { "Developing", "Stefan Pavlov" , "Ste" , "mailste@gmail.com" }, + { "Developing", "Tom Zielinski" , "Warmonger" , "Warmonger@vp.pl" }, + { "Developing", "Trevor Standley" , "tstandley" , "" }, + { "Developing", "Vadim Glazunov" , "neweagle" , "neweagle@gmail.com" }, + { "Developing", "Vadim Markovtsev" , "" , "gmarkhor@gmail.com" }, + { "Developing", "Xiaomin Ding" , "" , "dingding303@gmail.com" }, + { "Developing", "Yifeng Sun" , "phoebus118" , "pkusunyifeng@gmail.com" }, + { "Developing", "" , "kambala-decapitator", "decapitator@ukr.net" }, + { "Developing", "" , "krs0" , "" }, + { "Developing", "" , "rilian-la-te" , "" }, + { "Developing", "" , "vmarkovtsev" , "" }, - { "Testing", "Ben Yan", "by003", "benyan9110@gmail.com," }, - { "Testing", "", "Misiokles", "" }, - { "Testing", "", "Povelitel", "" }, + { "Testing" , "Ben Yan" , "by003" , "benyan9110@gmail.com" }, + { "Testing" , "" , "Misiokles" , "" }, + { "Testing" , "" , "Povelitel" , "" }, + + // List is ordered by "Name" (if empty than "Aka" will used as sorting key) }; diff --git a/client/mainmenu/CreditsScreen.cpp b/client/mainmenu/CreditsScreen.cpp index 778f0a729..d2ab5a482 100644 --- a/client/mainmenu/CreditsScreen.cpp +++ b/client/mainmenu/CreditsScreen.cpp @@ -39,7 +39,7 @@ CreditsScreen::CreditsScreen(Rect rect) { if(element[0] != contributorsTask) contributorsText += "\r\n\r\n{" + LIBRARY->generaltexth->translate("vcmi.credits." + boost::to_lower_copy(element[0])) + ":}\r\n"; - contributorsText += (element[2] != "" ? element[2] : element[1]) + "\r\n"; + contributorsText += (element[1] != "" ? element[1] : element[2]) + "\r\n"; contributorsTask = element[0]; } From 72338a65958731405f2664cffbf93f7b99c85d58 Mon Sep 17 00:00:00 2001 From: Laserlicht <13953785+Laserlicht@users.noreply.github.com> Date: Sun, 22 Jun 2025 17:38:49 +0200 Subject: [PATCH 21/60] fix order --- AUTHORS.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/AUTHORS.h b/AUTHORS.h index b9ddbc5ac..adbbe3900 100644 --- a/AUTHORS.h +++ b/AUTHORS.h @@ -29,24 +29,24 @@ const std::vector> contributors = { { "Developing", "Frank Zago" , "ubuntux" , "" }, { "Developing", "Henning Koehler" , "henningkoehlernz" , "henning.koehler.nz@gmail.com" }, { "Developing", "Ivan Savenko" , "" , "saven.ivan@gmail.com" }, + { "Developing", "" , "kambala-decapitator", "decapitator@ukr.net" }, + { "Developing", "" , "krs0" , "" }, { "Developing", "" , "Laserlicht" , "" }, { "Developing", "Lukasz Wychrystenko", "tezeriusz" , "t0@czlug.icis.pcz.pl" }, { "Developing", "Michał Kalinowski" , "" , "feniks_fire@o2.pl" }, { "Developing", "Piotr Wójcik" , "Chocimier" , "chocimier@tlen.pl" }, { "Developing", "Rafal R." , "ambtrip" , "ambtrip@wp.pl" }, { "Developing", "Rickard Westerlund" , "Onion Knight" , "onionknigh@gmail.com" }, + { "Developing", "" , "rilian-la-te" , "" }, { "Developing", "" , "SoundSSGood" , "" }, { "Developing", "Stefan Pavlov" , "Ste" , "mailste@gmail.com" }, { "Developing", "Tom Zielinski" , "Warmonger" , "Warmonger@vp.pl" }, { "Developing", "Trevor Standley" , "tstandley" , "" }, { "Developing", "Vadim Glazunov" , "neweagle" , "neweagle@gmail.com" }, { "Developing", "Vadim Markovtsev" , "" , "gmarkhor@gmail.com" }, + { "Developing", "" , "vmarkovtsev" , "" }, { "Developing", "Xiaomin Ding" , "" , "dingding303@gmail.com" }, { "Developing", "Yifeng Sun" , "phoebus118" , "pkusunyifeng@gmail.com" }, - { "Developing", "" , "kambala-decapitator", "decapitator@ukr.net" }, - { "Developing", "" , "krs0" , "" }, - { "Developing", "" , "rilian-la-te" , "" }, - { "Developing", "" , "vmarkovtsev" , "" }, { "Testing" , "Ben Yan" , "by003" , "benyan9110@gmail.com" }, { "Testing" , "" , "Misiokles" , "" }, From 4f970fcaa6862c976e6214f093440fce18d6a08f Mon Sep 17 00:00:00 2001 From: Laserlicht <13953785+Laserlicht@users.noreply.github.com> Date: Sun, 22 Jun 2025 20:21:01 +0200 Subject: [PATCH 22/60] fine tune quick exchange positions --- client/windows/CExchangeWindow.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/client/windows/CExchangeWindow.cpp b/client/windows/CExchangeWindow.cpp index 9234b5ec7..b2eb05559 100644 --- a/client/windows/CExchangeWindow.cpp +++ b/client/windows/CExchangeWindow.cpp @@ -62,8 +62,8 @@ CExchangeWindow::CExchangeWindow(ObjectInstanceID hero1, ObjectInstanceID hero2, return boost::str(fmt); }; - titles[0] = std::make_shared(147, 25, FONT_SMALL, ETextAlignment::CENTER, Colors::WHITE, genTitle(heroInst[0])); - titles[1] = std::make_shared(653, 25, FONT_SMALL, ETextAlignment::CENTER, Colors::WHITE, genTitle(heroInst[1])); + titles[0] = std::make_shared(147, qeLayout ? 21 : 25, FONT_SMALL, ETextAlignment::CENTER, Colors::WHITE, genTitle(heroInst[0])); + titles[1] = std::make_shared(653, qeLayout ? 21 : 25, FONT_SMALL, ETextAlignment::CENTER, Colors::WHITE, genTitle(heroInst[1])); for(int g = 0; g < 4; ++g) { @@ -82,7 +82,7 @@ CExchangeWindow::CExchangeWindow(ObjectInstanceID hero1, ObjectInstanceID hero2, for(int m=0; m < std::min(static_cast(hero->secSkills.size()), 8); ++m) - secSkills[leftRight].push_back(std::make_shared(Point(32 + 36 * m + 454 * leftRight, qeLayout ? 83 : 88), CSecSkillPlace::ImageSize::SMALL, + secSkills[leftRight].push_back(std::make_shared(Point(32 + 36 * m + 454 * leftRight, qeLayout ? 80 : 88), CSecSkillPlace::ImageSize::SMALL, hero->secSkills[m].first, hero->secSkills[m].second)); specImages[leftRight] = std::make_shared(AnimationPath::builtin("UN32"), hero->getHeroType()->imageIndex, 0, 67 + 490 * leftRight, qeLayout ? 41 : 45); @@ -127,7 +127,7 @@ CExchangeWindow::CExchangeWindow(ObjectInstanceID hero1, ObjectInstanceID hero2, { const CGHeroInstance * hero = heroInst.at(b); - heroAreas[b] = std::make_shared(257 + 228 * b, 13, hero); + heroAreas[b] = std::make_shared(257 + 228 * b + (qeLayout ? 1 : 0), qeLayout ? 10 : 13, hero); heroAreas[b]->addClickCallback([this, hero]() -> void { if(getPickedArtifact() == nullptr) @@ -163,7 +163,7 @@ CExchangeWindow::CExchangeWindow(ObjectInstanceID hero1, ObjectInstanceID hero2, if(queryID.getNum() > 0) quit->addCallback([=](){ GAME->interface()->cb->selectionMade(0, queryID); }); - questlogButton[0] = std::make_shared(Point( 10, qeLayout ? 39 : 44), AnimationPath::builtin("hsbtns4.def"), CButton::tooltip(LIBRARY->generaltexth->heroscrn[0]), std::bind(&CExchangeWindow::questLogShortcut, this)); + questlogButton[0] = std::make_shared(Point( qeLayout ? 8 : 10, qeLayout ? 39 : 44), AnimationPath::builtin("hsbtns4.def"), CButton::tooltip(LIBRARY->generaltexth->heroscrn[0]), std::bind(&CExchangeWindow::questLogShortcut, this)); questlogButton[1] = std::make_shared(Point(740, qeLayout ? 39 : 44), AnimationPath::builtin("hsbtns4.def"), CButton::tooltip(LIBRARY->generaltexth->heroscrn[0]), std::bind(&CExchangeWindow::questLogShortcut, this)); Rect barRect(5, 578, 725, 18); @@ -171,7 +171,7 @@ CExchangeWindow::CExchangeWindow(ObjectInstanceID hero1, ObjectInstanceID hero2, //garrison interface - garr = std::make_shared(Point(69, qeLayout ? 122 : 131), 4, Point(418,0), heroInst[0], heroInst[1], true, true); + garr = std::make_shared(Point(69, qeLayout ? 120 : 131), 4, Point(418,0), heroInst[0], heroInst[1], true, true); auto splitButtonCallback = [&](){ garr->splitClick(); }; garr->addSplitBtn(std::make_shared( Point( 10, qeLayout ? 122 : 132), AnimationPath::builtin("TSBTNS.DEF"), CButton::tooltip(LIBRARY->generaltexth->tcommands[3]), splitButtonCallback, EShortcut::HERO_ARMY_SPLIT)); garr->addSplitBtn(std::make_shared( Point(744, qeLayout ? 122 : 132), AnimationPath::builtin("TSBTNS.DEF"), CButton::tooltip(LIBRARY->generaltexth->tcommands[3]), splitButtonCallback, EShortcut::HERO_ARMY_SPLIT)); @@ -245,7 +245,7 @@ CExchangeWindow::CExchangeWindow(ObjectInstanceID hero1, ObjectInstanceID hero2, { moveUnitFromRightToLeftButtons.push_back( std::make_shared( - Point(484 + 35 * i, 154), + Point(484 + 36 * i, 155), AnimationPath::builtin("quick-exchange/unitLeft.DEF"), CButton::tooltip(LIBRARY->generaltexth->translate("vcmi.quickExchange.moveUnit")), [this, i]() { creatureArrowButtonCallback(false, SlotID(i)); })); @@ -253,7 +253,7 @@ CExchangeWindow::CExchangeWindow(ObjectInstanceID hero1, ObjectInstanceID hero2, moveUnitFromLeftToRightButtons.push_back( std::make_shared( - Point(66 + 35 * i, 154), + Point(66 + 36 * i, 155), AnimationPath::builtin("quick-exchange/unitRight.DEF"), CButton::tooltip(LIBRARY->generaltexth->translate("vcmi.quickExchange.moveUnit")), [this, i]() { creatureArrowButtonCallback(true, SlotID(i)); })); From 59c05cd1a3c1a99552981e36557a359347198c56 Mon Sep 17 00:00:00 2001 From: Laserlicht <13953785+Laserlicht@users.noreply.github.com> Date: Mon, 23 Jun 2025 01:11:20 +0200 Subject: [PATCH 23/60] move buttons 1 pixel left --- client/windows/CExchangeWindow.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/windows/CExchangeWindow.cpp b/client/windows/CExchangeWindow.cpp index b2eb05559..f44d3957d 100644 --- a/client/windows/CExchangeWindow.cpp +++ b/client/windows/CExchangeWindow.cpp @@ -245,7 +245,7 @@ CExchangeWindow::CExchangeWindow(ObjectInstanceID hero1, ObjectInstanceID hero2, { moveUnitFromRightToLeftButtons.push_back( std::make_shared( - Point(484 + 36 * i, 155), + Point(483 + 36 * i, 155), AnimationPath::builtin("quick-exchange/unitLeft.DEF"), CButton::tooltip(LIBRARY->generaltexth->translate("vcmi.quickExchange.moveUnit")), [this, i]() { creatureArrowButtonCallback(false, SlotID(i)); })); @@ -253,7 +253,7 @@ CExchangeWindow::CExchangeWindow(ObjectInstanceID hero1, ObjectInstanceID hero2, moveUnitFromLeftToRightButtons.push_back( std::make_shared( - Point(66 + 36 * i, 155), + Point(65 + 36 * i, 155), AnimationPath::builtin("quick-exchange/unitRight.DEF"), CButton::tooltip(LIBRARY->generaltexth->translate("vcmi.quickExchange.moveUnit")), [this, i]() { creatureArrowButtonCallback(true, SlotID(i)); })); From 517d17a032f8cfbc4fbf262d673cb00fea27dbd4 Mon Sep 17 00:00:00 2001 From: Ivan Savenko Date: Tue, 24 Jun 2025 11:18:16 +0300 Subject: [PATCH 24/60] Added description for new TRANSMUTATION_IMMUNITY bonus --- Mods/vcmi/Content/config/english.json | 1 + 1 file changed, 1 insertion(+) diff --git a/Mods/vcmi/Content/config/english.json b/Mods/vcmi/Content/config/english.json index 7fa4c7d91..21c9c78ff 100644 --- a/Mods/vcmi/Content/config/english.json +++ b/Mods/vcmi/Content/config/english.json @@ -730,6 +730,7 @@ "core.bonus.SUMMON_GUARDIANS.description" : "{Summon guardians}\nAt the start of battle summons ${subtype.creature} (${val}%)", "core.bonus.THREE_HEADED_ATTACK.description" : "{Three-headed attack}\nAttacks three adjacent units", "core.bonus.TRANSMUTATION.description" : "{Transmutation}\n${val}% chance to transform attacked unit to a different type", + "core.bonus.TRANSMUTATION_IMMUNITY.description" : "{Transmutation Immunity}\nThis unit cannot be transformed into another unit by enemy attack", "core.bonus.TWO_HEX_ATTACK_BREATH.description" : "{Breath Attack}\nAttacks by this unit will also hit any unit positioned immediately behind the target", "core.bonus.UNDEAD.description" : "{Undead}\nCreature is Undead and is immune to effects that only affect living", "core.bonus.UNLIMITED_RETALIATIONS.description" : "{Unlimited retaliations}\nThis unit can retaliate against an unlimited number of attacks", From c00ce0eaae09bb0d31384778627fbdb7c01e08b9 Mon Sep 17 00:00:00 2001 From: Ivan Savenko Date: Tue, 24 Jun 2025 11:18:40 +0300 Subject: [PATCH 25/60] Fix damage estimation in UI when target has VULNERABLE_FROM_BACK bonus --- client/battle/BattleActionsController.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/client/battle/BattleActionsController.cpp b/client/battle/BattleActionsController.cpp index ef4f37c43..3fcee2ce8 100644 --- a/client/battle/BattleActionsController.cpp +++ b/client/battle/BattleActionsController.cpp @@ -530,6 +530,7 @@ std::string BattleActionsController::actionGetStatusMessage(PossiblePlayerBattle int distance = attacker->position.isValid() ? owner.getBattle()->battleGetDistances(attacker, attacker->getPosition())[attackFromHex.toInt()] : 0; DamageEstimation retaliation; BattleAttackInfo attackInfo(attacker, targetStack, distance, false ); + attackInfo.attackerPos = attackFromHex; DamageEstimation estimation = owner.getBattle()->battleEstimateDamage(attackInfo, &retaliation); estimation.kills.max = std::min(estimation.kills.max, targetStack->getCount()); estimation.kills.min = std::min(estimation.kills.min, targetStack->getCount()); From f9c8071537953ec8b2f6f29a1782596f1c912467 Mon Sep 17 00:00:00 2001 From: Ivan Savenko Date: Tue, 24 Jun 2025 11:19:24 +0300 Subject: [PATCH 26/60] Do not show bonuses for which unit only has percentage bonuses --- client/windows/CCreatureWindow.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/client/windows/CCreatureWindow.cpp b/client/windows/CCreatureWindow.cpp index ebc0e7f3e..8834e1720 100644 --- a/client/windows/CCreatureWindow.cpp +++ b/client/windows/CCreatureWindow.cpp @@ -900,9 +900,12 @@ void CStackWindow::initBonusesList() BonusList groupIndepMin = group; BonusList groupIndepMax = group; BonusList groupNoMinMax = group; + BonusList groupBaseOnly = group; + groupIndepMin.remove_if([](const Bonus * b) { return b->valType != BonusValueType::INDEPENDENT_MIN; }); groupIndepMax.remove_if([](const Bonus * b) { return b->valType != BonusValueType::INDEPENDENT_MAX; }); groupNoMinMax.remove_if([](const Bonus * b) { return b->valType == BonusValueType::INDEPENDENT_MAX || b->valType == BonusValueType::INDEPENDENT_MIN; }); + groupBaseOnly.remove_if([](const Bonus * b) { return b->valType != BonusValueType::ADDITIVE_VALUE || b->valType == BonusValueType::BASE_NUMBER; }); int valIndepMin = groupIndepMin.totalValue(); int valIndepMax = groupIndepMax.totalValue(); @@ -914,8 +917,8 @@ void CStackWindow::initBonusesList() usedGroup = groupIndepMin; // bonus value was limited due to INDEPENDENT_MIN bonus -> show this bonus else if (!groupIndepMax.empty() && valNoMinMax != valIndepMax) usedGroup = groupIndepMax; // bonus value was limited due to INDEPENDENT_MAX bonus -> show this bonus - else - usedGroup = groupNoMinMax; // bonus value is not limited - show first non-independent bonus + else if (!groupBaseOnly.empty()) + usedGroup = groupNoMinMax; // bonus value is not limited and has bonuses other than percent to base / percent to all - show first non-independent bonus // It is possible that empty group was selected. For example, there is only INDEPENDENT effect with value of 0, which does not actually has any effect on this unit // For example, orb of vulnerability on unit without any resistances From 0ebe9bd41447ba6b4854652a4037305464c21781 Mon Sep 17 00:00:00 2001 From: Ivan Savenko Date: Tue, 24 Jun 2025 11:27:34 +0300 Subject: [PATCH 27/60] Fix invalidation of bonus propagation updaters --- lib/CCreatureSet.cpp | 1 + lib/bonuses/CBonusSystemNode.cpp | 35 ++++++++++++++++++++++---------- lib/bonuses/CBonusSystemNode.h | 3 ++- 3 files changed, 27 insertions(+), 12 deletions(-) diff --git a/lib/CCreatureSet.cpp b/lib/CCreatureSet.cpp index bfa23bbfc..1f9fc533e 100644 --- a/lib/CCreatureSet.cpp +++ b/lib/CCreatureSet.cpp @@ -833,6 +833,7 @@ void CStackInstance::setCount(TQuantity newCount) } CStackBasicDescriptor::setCount(newCount); + nodeHasChanged(); } std::string CStackInstance::bonusToString(const std::shared_ptr& bonus) const diff --git a/lib/bonuses/CBonusSystemNode.cpp b/lib/bonuses/CBonusSystemNode.cpp index 3448185ac..53d726de9 100644 --- a/lib/bonuses/CBonusSystemNode.cpp +++ b/lib/bonuses/CBonusSystemNode.cpp @@ -64,22 +64,18 @@ void CBonusSystemNode::getAllParents(TCNodes & out) const //retrieves list of pa } } -void CBonusSystemNode::getAllBonusesRec(BonusList &out, const CSelector & selector) const +void CBonusSystemNode::getAllBonusesRec(BonusList &out) const { BonusList beforeUpdate; for(const auto * parent : parentsToInherit) - parent->getAllBonusesRec(beforeUpdate, selector); + parent->getAllBonusesRec(beforeUpdate); bonuses.getAllBonuses(beforeUpdate); for(const auto & b : beforeUpdate) { - //We should not run updaters on non-selected bonuses - auto updated = selector(b.get()) && b->updater - ? getUpdatedBonus(b, b->updater) - : b; - + auto updated = b->updater ? getUpdatedBonus(b, b->updater) : b; out.push_back(updated); } } @@ -126,7 +122,7 @@ TConstBonusListPtr CBonusSystemNode::getAllBonuses(const CSelector &selector, co cachedBonuses.clear(); - getAllBonusesRec(allBonuses, Selector::all); + getAllBonusesRec(allBonuses); limitBonuses(allBonuses, cachedBonuses); cachedBonuses.stackBonuses(); cachedLast = nodeChanged; @@ -162,7 +158,7 @@ TConstBonusListPtr CBonusSystemNode::getAllBonusesWithoutCaching(const CSelector // Get bonus results without caching enabled. BonusList beforeLimiting; BonusList afterLimiting; - getAllBonusesRec(beforeLimiting, selector); + getAllBonusesRec(beforeLimiting); limitBonuses(beforeLimiting, afterLimiting); afterLimiting.getBonuses(*ret, selector, limit); ret->stackBonuses(); @@ -382,7 +378,7 @@ void CBonusSystemNode::propagateBonus(const std::shared_ptr & b, const CB : b; bonuses.push_back(propagated); logBonus->trace("#$# %s #propagated to# %s", propagated->Description(nullptr), nodeName()); - nodeHasChanged(); + invalidateChildrenNodes(nodeChanged); } TNodes lchildren; @@ -404,7 +400,7 @@ void CBonusSystemNode::unpropagateBonus(const std::shared_ptr & b) { if (bonus->propagationUpdater && bonus->propagationUpdater == b->propagationUpdater) { - nodeHasChanged(); + invalidateChildrenNodes(nodeChanged); return true; } return false; @@ -617,6 +613,18 @@ void CBonusSystemNode::nodeHasChanged() invalidateChildrenNodes(++globalCounter); } +void CBonusSystemNode::recomputePropagationUpdaters(const CBonusSystemNode & source) +{ + for(const auto & b : exportedBonuses) + { + if (b->propagator && b->propagationUpdater) + { + unpropagateBonus(b); + propagateBonus(b, source); + } + } +} + void CBonusSystemNode::invalidateChildrenNodes(int32_t changeCounter) { if (nodeChanged == changeCounter) @@ -624,6 +632,11 @@ void CBonusSystemNode::invalidateChildrenNodes(int32_t changeCounter) nodeChanged = changeCounter; + recomputePropagationUpdaters(*this); + for(const CBonusSystemNode * parent : parentsToInherit) + if (parent->actsAsBonusSourceOnly()) + recomputePropagationUpdaters(*parent); + for(CBonusSystemNode * child : children) child->invalidateChildrenNodes(changeCounter); } diff --git a/lib/bonuses/CBonusSystemNode.h b/lib/bonuses/CBonusSystemNode.h index a249c5d2e..096a41d56 100644 --- a/lib/bonuses/CBonusSystemNode.h +++ b/lib/bonuses/CBonusSystemNode.h @@ -69,7 +69,7 @@ private: mutable RequestsMap cachedRequests; mutable std::shared_mutex sync; - void getAllBonusesRec(BonusList &out, const CSelector & selector) const; + void getAllBonusesRec(BonusList &out) const; TConstBonusListPtr getAllBonusesWithoutCaching(const CSelector &selector, const CSelector &limit) const; std::shared_ptr getUpdatedBonus(const std::shared_ptr & b, const TUpdaterPtr & updater) const; void limitBonuses(const BonusList &allBonuses, BonusList &out) const; //out will bo populed with bonuses that are not limited here @@ -82,6 +82,7 @@ private: void propagateBonus(const std::shared_ptr & b, const CBonusSystemNode & source); void unpropagateBonus(const std::shared_ptr & b); + void recomputePropagationUpdaters(const CBonusSystemNode & source); bool actsAsBonusSourceOnly() const; void newRedDescendant(CBonusSystemNode & descendant) const; //propagation needed From 2d24c289962d916b1b07778f5277c12f3f5c4c6f Mon Sep 17 00:00:00 2001 From: Ivan Savenko Date: Tue, 24 Jun 2025 11:31:38 +0300 Subject: [PATCH 28/60] Fix potential edge cases in TIMES_STACK_SIZE updater --- config/schemas/bonusInstance.json | 2 +- docs/modders/Bonus/Bonus_Updaters.md | 14 ++++++++++++-- lib/bonuses/Updaters.cpp | 1 - lib/bonuses/Updaters.h | 6 +++--- lib/json/JsonBonus.cpp | 1 + 5 files changed, 17 insertions(+), 7 deletions(-) diff --git a/config/schemas/bonusInstance.json b/config/schemas/bonusInstance.json index 477b04122..a0d20e1a3 100644 --- a/config/schemas/bonusInstance.json +++ b/config/schemas/bonusInstance.json @@ -43,7 +43,7 @@ "anyOf" : [ { "type" : "string", - "enum" : [ "TIMES_HERO_LEVEL", "TIMES_STACK_LEVEL", "DIVIDE_STACK_LEVEL", "BONUS_OWNER_UPDATER", "TIMES_HERO_LEVEL_DIVIDE_STACK_LEVEL" ] + "enum" : [ "TIMES_HERO_LEVEL", "TIMES_STACK_LEVEL", "DIVIDE_STACK_LEVEL", "BONUS_OWNER_UPDATER", "TIMES_STACK_SIZE", "TIMES_HERO_LEVEL_DIVIDE_STACK_LEVEL" ] }, { "description" : "GROWS_WITH_LEVEL updater", diff --git a/docs/modders/Bonus/Bonus_Updaters.md b/docs/modders/Bonus/Bonus_Updaters.md index 429baeab8..c6cfbb7d2 100644 --- a/docs/modders/Bonus/Bonus_Updaters.md +++ b/docs/modders/Bonus/Bonus_Updaters.md @@ -84,15 +84,25 @@ Usage: Effect: Updates val to `val = clamp(val * floor(stackSize / stepSize), minimum, maximum)`, where stackSize is total number of creatures in current unit stack -Parameters `minimum` and `maximum` are optional and can be dropped if not needed +Example of short form with default parameters: -Example: +```json +"updater" : "TIMES_STACK_SIZE" +``` + +Example of long form with custom parameters: ```json "updater" : { "type" : "TIMES_STACK_SIZE", + + // Optional, by default - unlimited "minimum" : 0, + + // Optional, by default - unlimited "maximum" : 100, + + // Optional, by default - 1 "stepSize" : 2 } ``` diff --git a/lib/bonuses/Updaters.cpp b/lib/bonuses/Updaters.cpp index 778e87ac7..e5bf33a03 100644 --- a/lib/bonuses/Updaters.cpp +++ b/lib/bonuses/Updaters.cpp @@ -119,7 +119,6 @@ std::shared_ptr TimesStackSizeUpdater::apply(const std::shared_ptr { auto newBonus = std::make_shared(*b); newBonus->val *= std::clamp(count / stepSize, minimum, maximum); - newBonus->updater = nullptr; // prevent double-apply return newBonus; } diff --git a/lib/bonuses/Updaters.h b/lib/bonuses/Updaters.h index f79bb4322..c5c35808e 100644 --- a/lib/bonuses/Updaters.h +++ b/lib/bonuses/Updaters.h @@ -89,9 +89,9 @@ class DLL_LINKAGE TimesStackSizeUpdater : public IUpdater { std::shared_ptr apply(const std::shared_ptr & b, int count) const; - int minimum; - int maximum; - int stepSize; + int minimum = std::numeric_limits::min(); + int maximum = std::numeric_limits::max(); + int stepSize = 1; public: TimesStackSizeUpdater() = default; TimesStackSizeUpdater(int minimum, int maximum, int stepSize) diff --git a/lib/json/JsonBonus.cpp b/lib/json/JsonBonus.cpp index 2ace906b6..4e1e910ab 100644 --- a/lib/json/JsonBonus.cpp +++ b/lib/json/JsonBonus.cpp @@ -386,6 +386,7 @@ static TUpdaterPtr parseUpdater(const JsonNode & updaterJson) {"TIMES_HERO_LEVEL_DIVIDE_STACK_LEVEL", std::make_shared()}, {"DIVIDE_STACK_LEVEL", std::make_shared()}, {"TIMES_STACK_LEVEL", std::make_shared()}, + {"TIMES_STACK_SIZE", std::make_shared()}, {"BONUS_OWNER_UPDATER", std::make_shared()} }; From 1e3e2f665c9d3bfceead3e9d712c14f645f54824 Mon Sep 17 00:00:00 2001 From: Ivan Savenko Date: Tue, 24 Jun 2025 12:06:23 +0300 Subject: [PATCH 29/60] Remove strange & unused double-selector logic --- AI/BattleAI/StackWithBonuses.cpp | 9 ++++----- AI/BattleAI/StackWithBonuses.h | 3 +-- AI/Nullkiller/AIUtility.cpp | 2 +- client/ClientCommandManager.cpp | 4 ++-- client/battle/BattleStacksController.cpp | 2 +- client/windows/CCreatureWindow.cpp | 2 +- lib/CCreatureHandler.cpp | 2 +- lib/CStack.cpp | 2 +- lib/battle/CBattleInfoCallback.cpp | 2 +- lib/battle/CUnitState.cpp | 6 +++--- lib/battle/CUnitState.h | 2 +- lib/battle/DamageCalculator.cpp | 2 +- lib/bonuses/BonusList.cpp | 7 +++---- lib/bonuses/BonusList.h | 2 +- lib/bonuses/CBonusSystemNode.cpp | 18 +++++++++--------- lib/bonuses/CBonusSystemNode.h | 4 ++-- lib/bonuses/IBonusBearer.cpp | 16 +++------------- lib/bonuses/IBonusBearer.h | 4 +--- lib/spells/AdventureSpellMechanics.cpp | 2 +- scripting/lua/api/BonusSystem.cpp | 15 ++++++++------- test/battle/CBattleInfoCallbackTest.cpp | 4 ++-- test/battle/CHealthTest.cpp | 4 ++-- test/mock/BattleFake.cpp | 4 ++-- test/mock/mock_BonusBearer.cpp | 4 ++-- test/mock/mock_BonusBearer.h | 2 +- test/mock/mock_battle_Unit.h | 2 +- test/spells/AbilityCasterTest.cpp | 6 +++--- .../AbsoluteLevelConditionTest.cpp | 2 +- .../AbsoluteSpellConditionTest.cpp | 2 +- .../targetConditions/BonusConditionTest.cpp | 2 +- .../targetConditions/CreatureConditionTest.cpp | 2 +- .../ElementalConditionTest.cpp | 2 +- .../HealthValueConditionTest.cpp | 2 +- .../ImmunityNegationConditionTest.cpp | 2 +- .../NormalLevelConditionTest.cpp | 2 +- .../NormalSpellConditionTest.cpp | 2 +- .../ReceptiveFeatureConditionTest.cpp | 2 +- .../SpellEffectConditionTest.cpp | 2 +- .../TargetConditionItemFixture.h | 2 +- 39 files changed, 71 insertions(+), 85 deletions(-) diff --git a/AI/BattleAI/StackWithBonuses.cpp b/AI/BattleAI/StackWithBonuses.cpp index 2f72fb7b0..d89ed8cdc 100644 --- a/AI/BattleAI/StackWithBonuses.cpp +++ b/AI/BattleAI/StackWithBonuses.cpp @@ -133,11 +133,10 @@ SlotID StackWithBonuses::unitSlot() const return slot; } -TConstBonusListPtr StackWithBonuses::getAllBonuses(const CSelector & selector, const CSelector & limit, - const std::string & cachingStr) const +TConstBonusListPtr StackWithBonuses::getAllBonuses(const CSelector & selector, const std::string & cachingStr) const { auto ret = std::make_shared(); - TConstBonusListPtr originalList = origBearer->getAllBonuses(selector, limit, cachingStr); + TConstBonusListPtr originalList = origBearer->getAllBonuses(selector, cachingStr); vstd::copy_if(*originalList, std::back_inserter(*ret), [this](const std::shared_ptr & b) { @@ -147,7 +146,7 @@ TConstBonusListPtr StackWithBonuses::getAllBonuses(const CSelector & selector, c for(const Bonus & bonus : bonusesToUpdate) { - if(selector(&bonus) && (!limit || limit(&bonus))) + if(selector(&bonus)) { if(ret->getFirst(Selector::source(BonusSource::SPELL_EFFECT, bonus.sid).And(Selector::typeSubtype(bonus.type, bonus.subtype)))) { @@ -164,7 +163,7 @@ TConstBonusListPtr StackWithBonuses::getAllBonuses(const CSelector & selector, c for(auto & bonus : bonusesToAdd) { auto b = std::make_shared(bonus); - if(selector(b.get()) && (!limit || !limit(b.get()))) + if(selector(b.get())) ret->push_back(b); } //TODO limiters? diff --git a/AI/BattleAI/StackWithBonuses.h b/AI/BattleAI/StackWithBonuses.h index 2f04fcb9c..58398a019 100644 --- a/AI/BattleAI/StackWithBonuses.h +++ b/AI/BattleAI/StackWithBonuses.h @@ -90,8 +90,7 @@ public: SlotID unitSlot() const override; ///IBonusBearer - TConstBonusListPtr getAllBonuses(const CSelector & selector, const CSelector & limit, - const std::string & cachingStr = "") const override; + TConstBonusListPtr getAllBonuses(const CSelector & selector, const std::string & cachingStr = "") const override; int32_t getTreeVersion() const override; diff --git a/AI/Nullkiller/AIUtility.cpp b/AI/Nullkiller/AIUtility.cpp index f5d18552e..6ad010b96 100644 --- a/AI/Nullkiller/AIUtility.cpp +++ b/AI/Nullkiller/AIUtility.cpp @@ -290,7 +290,7 @@ double getArtifactBonusRelevance(const CGHeroInstance * hero, const std::shared_ for (const auto & slot : hero->Slots()) { - const auto allBonuses = slot.second->getAllBonuses(Selector::all, Selector::all); + const auto allBonuses = slot.second->getAllBonuses(Selector::all); BonusLimitationContext context = {*bonus, *slot.second, *allBonuses, stillUndecided}; uint64_t unitStrength = slot.second->getPower(); diff --git a/client/ClientCommandManager.cpp b/client/ClientCommandManager.cpp index dfe775eca..5f7676884 100644 --- a/client/ClientCommandManager.cpp +++ b/client/ClientCommandManager.cpp @@ -440,14 +440,14 @@ void ClientCommandManager::handleBonusesCommand(std::istringstream & singleWordB return ss.str(); }; printCommandMessage("Bonuses of " + GAME->interface()->localState->getCurrentArmy()->getObjectName() + "\n"); - printCommandMessage(format(*GAME->interface()->localState->getCurrentArmy()->getAllBonuses(Selector::all, Selector::all)) + "\n"); + printCommandMessage(format(*GAME->interface()->localState->getCurrentArmy()->getAllBonuses(Selector::all)) + "\n"); printCommandMessage("\nInherited bonuses:\n"); TCNodes parents; GAME->interface()->localState->getCurrentArmy()->getParents(parents); for(const CBonusSystemNode *parent : parents) { - printCommandMessage(std::string("\nBonuses from ") + typeid(*parent).name() + "\n" + format(*parent->getAllBonuses(Selector::all, Selector::all)) + "\n"); + printCommandMessage(std::string("\nBonuses from ") + typeid(*parent).name() + "\n" + format(*parent->getAllBonuses(Selector::all)) + "\n"); } } diff --git a/client/battle/BattleStacksController.cpp b/client/battle/BattleStacksController.cpp index f9da75258..9de834b7d 100644 --- a/client/battle/BattleStacksController.cpp +++ b/client/battle/BattleStacksController.cpp @@ -805,7 +805,7 @@ void BattleStacksController::removeExpiredColorFilters() { if (!filter.persistent) { - if (filter.source && !filter.target->hasBonus(Selector::source(BonusSource::SPELL_EFFECT, BonusSourceID(filter.source->id)), Selector::all)) + if (filter.source && !filter.target->hasBonus(Selector::source(BonusSource::SPELL_EFFECT, BonusSourceID(filter.source->id)))) return true; if (filter.effectColor == Colors::TRANSPARENCY && filter.transparency == 255) return true; diff --git a/client/windows/CCreatureWindow.cpp b/client/windows/CCreatureWindow.cpp index 8834e1720..b31d8c0f6 100644 --- a/client/windows/CCreatureWindow.cpp +++ b/client/windows/CCreatureWindow.cpp @@ -848,7 +848,7 @@ void CStackWindow::init() void CStackWindow::initBonusesList() { - BonusList receivedBonuses = *info->stackNode->getBonuses(CSelector(Bonus::Permanent), Selector::all); + BonusList receivedBonuses = *info->stackNode->getBonuses(CSelector(Bonus::Permanent)); BonusList abilities = info->creature->getExportedBonusList(); // remove all bonuses that are not propagated away diff --git a/lib/CCreatureHandler.cpp b/lib/CCreatureHandler.cpp index c8c3c2eaa..1318aac3f 100644 --- a/lib/CCreatureHandler.cpp +++ b/lib/CCreatureHandler.cpp @@ -329,7 +329,7 @@ void CCreature::addBonus(int val, BonusType type, BonusSubtypeID subtype) BonusList & exported = getExportedBonusList(); BonusList existing; - exported.getBonuses(existing, selector, Selector::all); + exported.getBonuses(existing, selector); if(existing.empty()) { diff --git a/lib/CStack.cpp b/lib/CStack.cpp index c3d5aee97..37d97b438 100644 --- a/lib/CStack.cpp +++ b/lib/CStack.cpp @@ -134,7 +134,7 @@ std::vector CStack::activeSpells() const return b->type != BonusType::NONE && b->sid.as().toSpell() && !b->sid.as().toSpell()->isAdventure(); })); - TConstBonusListPtr spellEffects = getBonuses(selector, Selector::all, cachingStr.str()); + TConstBonusListPtr spellEffects = getBonuses(selector, cachingStr.str()); for(const auto & it : *spellEffects) { if(!vstd::contains(ret, it->sid.as())) //do not duplicate spells with multiple effects diff --git a/lib/battle/CBattleInfoCallback.cpp b/lib/battle/CBattleInfoCallback.cpp index ac1bedb5c..1078b39a4 100644 --- a/lib/battle/CBattleInfoCallback.cpp +++ b/lib/battle/CBattleInfoCallback.cpp @@ -1797,7 +1797,7 @@ SpellID CBattleInfoCallback::getRandomBeneficialSpell(vstd::RNG & rand, const ba std::stringstream cachingStr; cachingStr << "source_" << vstd::to_underlying(BonusSource::SPELL_EFFECT) << "id_" << spellID.num; - if(subject->hasBonus(Selector::source(BonusSource::SPELL_EFFECT, BonusSourceID(spellID)), Selector::all, cachingStr.str())) + if(subject->hasBonus(Selector::source(BonusSource::SPELL_EFFECT, BonusSourceID(spellID)), cachingStr.str())) continue; auto spellPtr = spellID.toSpell(); diff --git a/lib/battle/CUnitState.cpp b/lib/battle/CUnitState.cpp index 7ca727153..ab8b8e8c4 100644 --- a/lib/battle/CUnitState.cpp +++ b/lib/battle/CUnitState.cpp @@ -495,7 +495,7 @@ bool CUnitState::isGhost() const bool CUnitState::isFrozen() const { - return hasBonus(Selector::source(BonusSource::SPELL_EFFECT, BonusSourceID(SpellID(SpellID::STONE_GAZE))), Selector::all); + return hasBonus(Selector::source(BonusSource::SPELL_EFFECT, BonusSourceID(SpellID(SpellID::STONE_GAZE)))); } bool CUnitState::isValidTarget(bool allowDead) const @@ -948,9 +948,9 @@ CUnitStateDetached::CUnitStateDetached(const IUnitInfo * unit_, const IBonusBear { } -TConstBonusListPtr CUnitStateDetached::getAllBonuses(const CSelector & selector, const CSelector & limit, const std::string & cachingStr) const +TConstBonusListPtr CUnitStateDetached::getAllBonuses(const CSelector & selector, const std::string & cachingStr) const { - return bonus->getAllBonuses(selector, limit, cachingStr); + return bonus->getAllBonuses(selector, cachingStr); } int32_t CUnitStateDetached::getTreeVersion() const diff --git a/lib/battle/CUnitState.h b/lib/battle/CUnitState.h index 03665abd8..414c5029e 100644 --- a/lib/battle/CUnitState.h +++ b/lib/battle/CUnitState.h @@ -278,7 +278,7 @@ public: CUnitStateDetached & operator= (const CUnitState & other); - TConstBonusListPtr getAllBonuses(const CSelector & selector, const CSelector & limit, const std::string & cachingStr = "") const override; + TConstBonusListPtr getAllBonuses(const CSelector & selector, const std::string & cachingStr = "") const override; int32_t getTreeVersion() const override; diff --git a/lib/battle/DamageCalculator.cpp b/lib/battle/DamageCalculator.cpp index eaf07c3a7..2d8020d2d 100644 --- a/lib/battle/DamageCalculator.cpp +++ b/lib/battle/DamageCalculator.cpp @@ -523,7 +523,7 @@ int DamageCalculator::battleBonusValue(const IBonusBearer * bearer, const CSelec : Selector::effectRange()(BonusLimitEffect::ONLY_MELEE_FIGHT); //any regular bonuses or just ones for melee/ranged - return bearer->getBonuses(selector, noLimit.Or(limitMatches))->totalValue(); + return bearer->getBonuses(selector)->valOfBonuses(noLimit.Or(limitMatches)); }; DamageEstimation DamageCalculator::calculateDmgRange() const diff --git a/lib/bonuses/BonusList.cpp b/lib/bonuses/BonusList.cpp index ed7b88d06..c1b45610c 100644 --- a/lib/bonuses/BonusList.cpp +++ b/lib/bonuses/BonusList.cpp @@ -172,11 +172,11 @@ std::shared_ptr BonusList::getFirst(const CSelector &selector) cons return nullptr; } -void BonusList::getBonuses(BonusList & out, const CSelector &selector, const CSelector &limit) const +void BonusList::getBonuses(BonusList & out, const CSelector &selector) const { for(const auto & b : bonuses) { - if(selector(b.get()) && (!limit || ((bool)limit && limit(b.get())))) + if(selector(b.get())) out.push_back(b); } } @@ -190,8 +190,7 @@ void BonusList::getAllBonuses(BonusList &out) const int BonusList::valOfBonuses(const CSelector &select, int baseValue) const { BonusList ret; - CSelector limit = nullptr; - getBonuses(ret, select, limit); + getBonuses(ret, select); return ret.totalValue(baseValue); } diff --git a/lib/bonuses/BonusList.h b/lib/bonuses/BonusList.h index 0de0e3cb3..dd12db3ac 100644 --- a/lib/bonuses/BonusList.h +++ b/lib/bonuses/BonusList.h @@ -54,7 +54,7 @@ public: // BonusList functions void stackBonuses(); int totalValue(int baseValue = 0) const; - void getBonuses(BonusList &out, const CSelector &selector, const CSelector &limit = nullptr) const; + void getBonuses(BonusList &out, const CSelector &selector) const; void getAllBonuses(BonusList &out) const; //special find functions diff --git a/lib/bonuses/CBonusSystemNode.cpp b/lib/bonuses/CBonusSystemNode.cpp index 53d726de9..ba693ff53 100644 --- a/lib/bonuses/CBonusSystemNode.cpp +++ b/lib/bonuses/CBonusSystemNode.cpp @@ -80,7 +80,7 @@ void CBonusSystemNode::getAllBonusesRec(BonusList &out) const } } -TConstBonusListPtr CBonusSystemNode::getAllBonuses(const CSelector &selector, const CSelector &limit, const std::string &cachingStr) const +TConstBonusListPtr CBonusSystemNode::getAllBonuses(const CSelector &selector, const std::string &cachingStr) const { if (cachingEnabled) { @@ -103,7 +103,7 @@ TConstBonusListPtr CBonusSystemNode::getAllBonuses(const CSelector &selector, co { // Cached bonuses are up-to-date - use shared/read access and compute results std::shared_lock lock(sync); - cachedBonuses.getBonuses(*ret, selector, limit); + cachedBonuses.getBonuses(*ret, selector); } else { @@ -113,7 +113,7 @@ TConstBonusListPtr CBonusSystemNode::getAllBonuses(const CSelector &selector, co if (cachedLast == nodeChanged) { // While our thread was waiting, another one have updated bonus tree. Use cached bonuses. - cachedBonuses.getBonuses(*ret, selector, limit); + cachedBonuses.getBonuses(*ret, selector); } else { @@ -126,7 +126,7 @@ TConstBonusListPtr CBonusSystemNode::getAllBonuses(const CSelector &selector, co limitBonuses(allBonuses, cachedBonuses); cachedBonuses.stackBonuses(); cachedLast = nodeChanged; - cachedBonuses.getBonuses(*ret, selector, limit); + cachedBonuses.getBonuses(*ret, selector); } } @@ -147,11 +147,11 @@ TConstBonusListPtr CBonusSystemNode::getAllBonuses(const CSelector &selector, co } else { - return getAllBonusesWithoutCaching(selector, limit); + return getAllBonusesWithoutCaching(selector); } } -TConstBonusListPtr CBonusSystemNode::getAllBonusesWithoutCaching(const CSelector &selector, const CSelector &limit) const +TConstBonusListPtr CBonusSystemNode::getAllBonusesWithoutCaching(const CSelector &selector) const { auto ret = std::make_shared(); @@ -160,7 +160,7 @@ TConstBonusListPtr CBonusSystemNode::getAllBonusesWithoutCaching(const CSelector BonusList afterLimiting; getAllBonusesRec(beforeLimiting); limitBonuses(beforeLimiting, afterLimiting); - afterLimiting.getBonuses(*ret, selector, limit); + afterLimiting.getBonuses(*ret, selector); ret->stackBonuses(); return ret; } @@ -300,7 +300,7 @@ void CBonusSystemNode::removeBonusesRecursive(const CSelector & s) void CBonusSystemNode::reduceBonusDurations(const CSelector &s) { BonusList bl; - exportedBonuses.getBonuses(bl, s, Selector::all); + exportedBonuses.getBonuses(bl, s); for(const auto & b : bl) { b->turnsRemain--; @@ -351,7 +351,7 @@ void CBonusSystemNode::removeBonus(const std::shared_ptr& b) void CBonusSystemNode::removeBonuses(const CSelector & selector) { BonusList toRemove; - exportedBonuses.getBonuses(toRemove, selector, Selector::all); + exportedBonuses.getBonuses(toRemove, selector); for(const auto & bonus : toRemove) removeBonus(bonus); } diff --git a/lib/bonuses/CBonusSystemNode.h b/lib/bonuses/CBonusSystemNode.h index 096a41d56..ac0f29e98 100644 --- a/lib/bonuses/CBonusSystemNode.h +++ b/lib/bonuses/CBonusSystemNode.h @@ -70,7 +70,7 @@ private: mutable std::shared_mutex sync; void getAllBonusesRec(BonusList &out) const; - TConstBonusListPtr getAllBonusesWithoutCaching(const CSelector &selector, const CSelector &limit) const; + TConstBonusListPtr getAllBonusesWithoutCaching(const CSelector &selector) const; std::shared_ptr getUpdatedBonus(const std::shared_ptr & b, const TUpdaterPtr & updater) const; void limitBonuses(const BonusList &allBonuses, BonusList &out) const; //out will bo populed with bonuses that are not limited here @@ -101,7 +101,7 @@ public: explicit CBonusSystemNode(ENodeTypes NodeType); virtual ~CBonusSystemNode(); - TConstBonusListPtr getAllBonuses(const CSelector &selector, const CSelector &limit, const std::string &cachingStr = "") const override; + TConstBonusListPtr getAllBonuses(const CSelector &selector, const std::string &cachingStr = "") const override; void getParents(TCNodes &out) const; //retrieves list of parent nodes (nodes to inherit bonuses from), /// Returns first bonus matching selector diff --git a/lib/bonuses/IBonusBearer.cpp b/lib/bonuses/IBonusBearer.cpp index 47db5f7e8..51296d599 100644 --- a/lib/bonuses/IBonusBearer.cpp +++ b/lib/bonuses/IBonusBearer.cpp @@ -17,7 +17,7 @@ VCMI_LIB_NAMESPACE_BEGIN int IBonusBearer::valOfBonuses(const CSelector &selector, const std::string &cachingStr, int baseValue) const { - TConstBonusListPtr hlp = getAllBonuses(selector, nullptr, cachingStr); + TConstBonusListPtr hlp = getAllBonuses(selector, cachingStr); return hlp->totalValue(baseValue); } @@ -27,19 +27,9 @@ bool IBonusBearer::hasBonus(const CSelector &selector, const std::string &cachin return !getBonuses(selector, cachingStr)->empty(); } -bool IBonusBearer::hasBonus(const CSelector &selector, const CSelector &limit, const std::string &cachingStr) const -{ - return !getBonuses(selector, limit, cachingStr)->empty(); -} - TConstBonusListPtr IBonusBearer::getBonuses(const CSelector &selector, const std::string &cachingStr) const { - return getAllBonuses(selector, nullptr, cachingStr); -} - -TConstBonusListPtr IBonusBearer::getBonuses(const CSelector &selector, const CSelector &limit, const std::string &cachingStr) const -{ - return getAllBonuses(selector, limit, cachingStr); + return getAllBonuses(selector, cachingStr); } TConstBonusListPtr IBonusBearer::getBonusesFrom(BonusSource source) const @@ -120,7 +110,7 @@ bool IBonusBearer::hasBonusFrom(BonusSource source) const std::shared_ptr IBonusBearer::getBonus(const CSelector &selector) const { - auto bonuses = getAllBonuses(selector, Selector::all); + auto bonuses = getAllBonuses(selector); return bonuses->getFirst(Selector::all); } diff --git a/lib/bonuses/IBonusBearer.h b/lib/bonuses/IBonusBearer.h index d38b3db1b..a909e703e 100644 --- a/lib/bonuses/IBonusBearer.h +++ b/lib/bonuses/IBonusBearer.h @@ -20,11 +20,9 @@ public: // * selector is predicate that tests if Bonus matches our criteria IBonusBearer() = default; virtual ~IBonusBearer() = default; - virtual TConstBonusListPtr getAllBonuses(const CSelector &selector, const CSelector &limit, const std::string &cachingStr = {}) const = 0; + virtual TConstBonusListPtr getAllBonuses(const CSelector &selector, const std::string &cachingStr = {}) const = 0; int valOfBonuses(const CSelector &selector, const std::string &cachingStr = {}, int baseValue = 0) const; bool hasBonus(const CSelector &selector, const std::string &cachingStr = {}) const; - bool hasBonus(const CSelector &selector, const CSelector &limit, const std::string &cachingStr = {}) const; - TConstBonusListPtr getBonuses(const CSelector &selector, const CSelector &limit, const std::string &cachingStr = {}) const; TConstBonusListPtr getBonuses(const CSelector &selector, const std::string &cachingStr = {}) const; std::shared_ptr getBonus(const CSelector &selector) const; //returns any bonus visible on node that matches (or nullptr if none matches) diff --git a/lib/spells/AdventureSpellMechanics.cpp b/lib/spells/AdventureSpellMechanics.cpp index 326bc0d8f..e57f7c3b0 100644 --- a/lib/spells/AdventureSpellMechanics.cpp +++ b/lib/spells/AdventureSpellMechanics.cpp @@ -317,7 +317,7 @@ bool DimensionDoorMechanics::canBeCastImpl(spells::Problem & problem, const IGam std::stringstream cachingStr; cachingStr << "source_" << vstd::to_underlying(BonusSource::SPELL_EFFECT) << "id_" << owner->id.num; - int castsAlreadyPerformedThisTurn = caster->getHeroCaster()->getBonuses(Selector::source(BonusSource::SPELL_EFFECT, BonusSourceID(owner->id)), Selector::all, cachingStr.str())->size(); + int castsAlreadyPerformedThisTurn = caster->getHeroCaster()->getBonuses(Selector::source(BonusSource::SPELL_EFFECT, BonusSourceID(owner->id)), cachingStr.str())->size(); int castsLimit = owner->getLevelPower(schoolLevel); bool isTournamentRulesLimitEnabled = cb->getSettings().getBoolean(EGameSettings::DIMENSION_DOOR_TOURNAMENT_RULES_LIMIT); diff --git a/scripting/lua/api/BonusSystem.cpp b/scripting/lua/api/BonusSystem.cpp index 2a998646c..c3d9a7579 100644 --- a/scripting/lua/api/BonusSystem.cpp +++ b/scripting/lua/api/BonusSystem.cpp @@ -246,21 +246,22 @@ int BonusBearerProxy::getBonuses(lua_State * L) if(hasRangeSelector) { - auto rangeSelector = [](const Bonus * b) - { - return false;//TODO: BonusBearerProxy::getBonuses rangeSelector - }; + //TODO: BonusBearerProxy::getBonuses rangeSelector + //auto rangeSelector = [](const Bonus * b) + //{ + // return false; + //}; - ret = object->getBonuses(selector, rangeSelector); + ret = object->getBonuses(selector); } else { - ret = object->getBonuses(selector, Selector::all); + ret = object->getBonuses(selector); } } else { - ret = object->getBonuses(Selector::all, Selector::all); + ret = object->getBonuses(Selector::all); } S.clear(); diff --git a/test/battle/CBattleInfoCallbackTest.cpp b/test/battle/CBattleInfoCallbackTest.cpp index 89096931c..c309483aa 100644 --- a/test/battle/CBattleInfoCallbackTest.cpp +++ b/test/battle/CBattleInfoCallbackTest.cpp @@ -83,13 +83,13 @@ public: void redirectBonusesToFake() { - ON_CALL(*this, getAllBonuses(_, _, _)).WillByDefault(Invoke(&bonusFake, &BonusBearerMock::getAllBonuses)); + ON_CALL(*this, getAllBonuses(_, _)).WillByDefault(Invoke(&bonusFake, &BonusBearerMock::getAllBonuses)); ON_CALL(*this, getTreeVersion()).WillByDefault(Invoke(&bonusFake, &BonusBearerMock::getTreeVersion)); } void expectAnyBonusSystemCall() { - EXPECT_CALL(*this, getAllBonuses(_, _, _)).Times(AtLeast(0)); + EXPECT_CALL(*this, getAllBonuses(_, _)).Times(AtLeast(0)); EXPECT_CALL(*this, getTreeVersion()).Times(AtLeast(0)); } diff --git a/test/battle/CHealthTest.cpp b/test/battle/CHealthTest.cpp index 98aa95bf6..4c7cf1805 100644 --- a/test/battle/CHealthTest.cpp +++ b/test/battle/CHealthTest.cpp @@ -29,7 +29,7 @@ public: void setDefaultExpectations() { - EXPECT_CALL(mock, getAllBonuses(_, _, _)).WillRepeatedly(Invoke(&bonusMock, &BonusBearerMock::getAllBonuses)); + EXPECT_CALL(mock, getAllBonuses(_, _)).WillRepeatedly(Invoke(&bonusMock, &BonusBearerMock::getAllBonuses)); EXPECT_CALL(mock, getTreeVersion()).WillRepeatedly(Return(1)); bonusMock.addNewBonus(std::make_shared(BonusDuration::PERMANENT, BonusType::STACK_HEALTH, BonusSource::CREATURE_ABILITY, UNIT_HEALTH, BonusSourceID())); @@ -235,7 +235,7 @@ TEST_F(HealthTest, singleUnitStack) //one Titan - EXPECT_CALL(mock, getAllBonuses(_, _, _)).WillRepeatedly(Invoke(&bonusMock, &BonusBearerMock::getAllBonuses)); + EXPECT_CALL(mock, getAllBonuses(_, _)).WillRepeatedly(Invoke(&bonusMock, &BonusBearerMock::getAllBonuses)); EXPECT_CALL(mock, getTreeVersion()).WillRepeatedly(Return(1)); bonusMock.addNewBonus(std::make_shared(BonusDuration::PERMANENT, BonusType::STACK_HEALTH, BonusSource::CREATURE_ABILITY, 300, BonusSourceID())); diff --git a/test/mock/BattleFake.cpp b/test/mock/BattleFake.cpp index ad66cbaf2..00cc858a3 100644 --- a/test/mock/BattleFake.cpp +++ b/test/mock/BattleFake.cpp @@ -34,13 +34,13 @@ void UnitFake::makeDead() void UnitFake::redirectBonusesToFake() { - ON_CALL(*this, getAllBonuses(_, _, _)).WillByDefault(Invoke(&bonusFake, &BonusBearerMock::getAllBonuses)); + ON_CALL(*this, getAllBonuses(_, _)).WillByDefault(Invoke(&bonusFake, &BonusBearerMock::getAllBonuses)); ON_CALL(*this, getTreeVersion()).WillByDefault(Invoke(&bonusFake, &BonusBearerMock::getTreeVersion)); } void UnitFake::expectAnyBonusSystemCall() { - EXPECT_CALL(*this, getAllBonuses(_, _, _)).Times(AtLeast(0)); + EXPECT_CALL(*this, getAllBonuses(_, _)).Times(AtLeast(0)); EXPECT_CALL(*this, getTreeVersion()).Times(AtLeast(0)); } diff --git a/test/mock/mock_BonusBearer.cpp b/test/mock/mock_BonusBearer.cpp index c97c0873f..faed0901a 100644 --- a/test/mock/mock_BonusBearer.cpp +++ b/test/mock/mock_BonusBearer.cpp @@ -25,7 +25,7 @@ void BonusBearerMock::addNewBonus(const std::shared_ptr & b) treeVersion++; } -TConstBonusListPtr BonusBearerMock::getAllBonuses(const CSelector & selector, const CSelector & limit, const std::string & cachingStr) const +TConstBonusListPtr BonusBearerMock::getAllBonuses(const CSelector & selector, const std::string & cachingStr) const { if(cachedLast != treeVersion) { @@ -34,7 +34,7 @@ TConstBonusListPtr BonusBearerMock::getAllBonuses(const CSelector & selector, co } auto ret = std::make_shared(); - bonuses.getBonuses(*ret, selector, limit); + bonuses.getBonuses(*ret, selector); return ret; } diff --git a/test/mock/mock_BonusBearer.h b/test/mock/mock_BonusBearer.h index c4406c9e9..9b0a76c45 100644 --- a/test/mock/mock_BonusBearer.h +++ b/test/mock/mock_BonusBearer.h @@ -23,7 +23,7 @@ public: void addNewBonus(const std::shared_ptr & b); - TConstBonusListPtr getAllBonuses(const CSelector & selector, const CSelector & limit, const std::string & cachingStr = "") const override; + TConstBonusListPtr getAllBonuses(const CSelector & selector, const std::string & cachingStr = "") const override; int32_t getTreeVersion() const override; private: diff --git a/test/mock/mock_battle_Unit.h b/test/mock/mock_battle_Unit.h index fb53da28b..49367fd69 100644 --- a/test/mock/mock_battle_Unit.h +++ b/test/mock/mock_battle_Unit.h @@ -15,7 +15,7 @@ class UnitMock : public battle::Unit { public: - MOCK_CONST_METHOD3(getAllBonuses, TConstBonusListPtr(const CSelector &, const CSelector &, const std::string &)); + MOCK_CONST_METHOD2(getAllBonuses, TConstBonusListPtr(const CSelector &, const std::string &)); MOCK_CONST_METHOD0(getTreeVersion, int32_t()); MOCK_CONST_METHOD0(getCasterUnitId, int32_t()); diff --git a/test/spells/AbilityCasterTest.cpp b/test/spells/AbilityCasterTest.cpp index 922142d72..6a0690099 100644 --- a/test/spells/AbilityCasterTest.cpp +++ b/test/spells/AbilityCasterTest.cpp @@ -33,7 +33,7 @@ public: protected: void SetUp() override { - ON_CALL(actualCaster, getAllBonuses(_, _, _)).WillByDefault(Invoke(&casterBonuses, &BonusBearerMock::getAllBonuses)); + ON_CALL(actualCaster, getAllBonuses(_, _)).WillByDefault(Invoke(&casterBonuses, &BonusBearerMock::getAllBonuses)); ON_CALL(actualCaster, getTreeVersion()).WillByDefault(Invoke(&casterBonuses, &BonusBearerMock::getTreeVersion)); } @@ -57,7 +57,7 @@ TEST_F(AbilityCasterTest, MagicAbilityAffectedByGenericBonus) casterBonuses.addNewBonus(std::make_shared(BonusDuration::ONE_BATTLE, BonusType::MAGIC_SCHOOL_SKILL, BonusSource::OTHER, 2, BonusSourceID(), BonusSubtypeID(SpellSchool::ANY))); - EXPECT_CALL(actualCaster, getAllBonuses(_, _, _)).Times(AtLeast(1)); + EXPECT_CALL(actualCaster, getAllBonuses(_, _)).Times(AtLeast(1)); EXPECT_CALL(actualCaster, getTreeVersion()).Times(AtLeast(0)); setupSubject(1); @@ -71,7 +71,7 @@ TEST_F(AbilityCasterTest, MagicAbilityIgnoresSchoolBonus) casterBonuses.addNewBonus(std::make_shared(BonusDuration::ONE_BATTLE, BonusType::MAGIC_SCHOOL_SKILL, BonusSource::OTHER, 2, BonusSourceID(), BonusSubtypeID(SpellSchool::AIR))); - EXPECT_CALL(actualCaster, getAllBonuses(_, _, _)).Times(AtLeast(1)); + EXPECT_CALL(actualCaster, getAllBonuses(_, _)).Times(AtLeast(1)); EXPECT_CALL(actualCaster, getTreeVersion()).Times(AtLeast(0)); setupSubject(1); diff --git a/test/spells/targetConditions/AbsoluteLevelConditionTest.cpp b/test/spells/targetConditions/AbsoluteLevelConditionTest.cpp index 358561c49..e271e58a8 100644 --- a/test/spells/targetConditions/AbsoluteLevelConditionTest.cpp +++ b/test/spells/targetConditions/AbsoluteLevelConditionTest.cpp @@ -24,7 +24,7 @@ public: void setDefaultExpectations() { EXPECT_CALL(mechanicsMock, isMagicalEffect()).WillRepeatedly(Return(true)); - EXPECT_CALL(unitMock, getAllBonuses(_, _, _)).Times(AtLeast(1)); + EXPECT_CALL(unitMock, getAllBonuses(_, _)).Times(AtLeast(1)); EXPECT_CALL(unitMock, getTreeVersion()).Times(AtLeast(0)); } diff --git a/test/spells/targetConditions/AbsoluteSpellConditionTest.cpp b/test/spells/targetConditions/AbsoluteSpellConditionTest.cpp index fa77c64dd..010a2f1c6 100644 --- a/test/spells/targetConditions/AbsoluteSpellConditionTest.cpp +++ b/test/spells/targetConditions/AbsoluteSpellConditionTest.cpp @@ -24,7 +24,7 @@ public: void setDefaultExpectations() { - EXPECT_CALL(unitMock, getAllBonuses(_, _, _)).Times(AtLeast(1)); + EXPECT_CALL(unitMock, getAllBonuses(_, _)).Times(AtLeast(1)); EXPECT_CALL(unitMock, getTreeVersion()).Times(AtLeast(0)); EXPECT_CALL(mechanicsMock, getSpellIndex()).WillRepeatedly(Return(castSpell)); } diff --git a/test/spells/targetConditions/BonusConditionTest.cpp b/test/spells/targetConditions/BonusConditionTest.cpp index 388db8389..16fa33bef 100644 --- a/test/spells/targetConditions/BonusConditionTest.cpp +++ b/test/spells/targetConditions/BonusConditionTest.cpp @@ -21,7 +21,7 @@ class BonusConditionTest : public TargetConditionItemTest public: void setDefaultExpectations() { - EXPECT_CALL(unitMock, getAllBonuses(_, _, _)).Times(AtLeast(1)); + EXPECT_CALL(unitMock, getAllBonuses(_, _)).Times(AtLeast(1)); EXPECT_CALL(unitMock, getTreeVersion()).Times(AtLeast(0)); } diff --git a/test/spells/targetConditions/CreatureConditionTest.cpp b/test/spells/targetConditions/CreatureConditionTest.cpp index 83e5eed3f..b4c7c4a6f 100644 --- a/test/spells/targetConditions/CreatureConditionTest.cpp +++ b/test/spells/targetConditions/CreatureConditionTest.cpp @@ -21,7 +21,7 @@ class CreatureConditionTest : public TargetConditionItemTest public: void setDefaultExpectations() { - EXPECT_CALL(unitMock, getAllBonuses(_, _, _)).Times(0); + EXPECT_CALL(unitMock, getAllBonuses(_, _)).Times(0); EXPECT_CALL(unitMock, getTreeVersion()).Times(0); } diff --git a/test/spells/targetConditions/ElementalConditionTest.cpp b/test/spells/targetConditions/ElementalConditionTest.cpp index aab797aca..5d7dd0cbb 100644 --- a/test/spells/targetConditions/ElementalConditionTest.cpp +++ b/test/spells/targetConditions/ElementalConditionTest.cpp @@ -23,7 +23,7 @@ public: void setDefaultExpectations() { - EXPECT_CALL(unitMock, getAllBonuses(_, _, _)).Times(AtLeast(1)); + EXPECT_CALL(unitMock, getAllBonuses(_, _)).Times(AtLeast(1)); EXPECT_CALL(unitMock, getTreeVersion()).Times(AtLeast(0)); EXPECT_CALL(mechanicsMock, getSpell()).Times(AtLeast(1)).WillRepeatedly(Return(&spellMock)); diff --git a/test/spells/targetConditions/HealthValueConditionTest.cpp b/test/spells/targetConditions/HealthValueConditionTest.cpp index 0754fe4f2..d119bfc2a 100644 --- a/test/spells/targetConditions/HealthValueConditionTest.cpp +++ b/test/spells/targetConditions/HealthValueConditionTest.cpp @@ -23,7 +23,7 @@ public: const int64_t EFFECT_VALUE = 101; void setDefaultExpectations() { - EXPECT_CALL(unitMock, getAllBonuses(_, _, _)).Times(0); + EXPECT_CALL(unitMock, getAllBonuses(_, _)).Times(0); EXPECT_CALL(unitMock, getTreeVersion()).Times(0); EXPECT_CALL(unitMock, getAvailableHealth()).WillOnce(Return(UNIT_HP)); EXPECT_CALL(mechanicsMock, getEffectValue()).WillOnce(Return(EFFECT_VALUE)); diff --git a/test/spells/targetConditions/ImmunityNegationConditionTest.cpp b/test/spells/targetConditions/ImmunityNegationConditionTest.cpp index 748b5a6de..d8a773e10 100644 --- a/test/spells/targetConditions/ImmunityNegationConditionTest.cpp +++ b/test/spells/targetConditions/ImmunityNegationConditionTest.cpp @@ -30,7 +30,7 @@ public: { ownerMatches = ::testing::get<0>(GetParam()); isMagicalEffect = ::testing::get<1>(GetParam()); - EXPECT_CALL(unitMock, getAllBonuses(_, _, _)).Times(AtLeast(0)); + EXPECT_CALL(unitMock, getAllBonuses(_, _)).Times(AtLeast(0)); EXPECT_CALL(unitMock, getTreeVersion()).Times(AtLeast(0)); EXPECT_CALL(mechanicsMock, isMagicalEffect()).Times(AtLeast(0)).WillRepeatedly(Return(isMagicalEffect)); EXPECT_CALL(mechanicsMock, ownerMatches(Eq(&unitMock), Field(&boost::logic::tribool::value, boost::logic::tribool::false_value))).WillRepeatedly(Return(ownerMatches)); diff --git a/test/spells/targetConditions/NormalLevelConditionTest.cpp b/test/spells/targetConditions/NormalLevelConditionTest.cpp index 5abe9f595..7419fb113 100644 --- a/test/spells/targetConditions/NormalLevelConditionTest.cpp +++ b/test/spells/targetConditions/NormalLevelConditionTest.cpp @@ -27,7 +27,7 @@ public: isMagicalEffect = GetParam(); EXPECT_CALL(mechanicsMock, isMagicalEffect()).WillRepeatedly(Return(isMagicalEffect)); if(isMagicalEffect) - EXPECT_CALL(unitMock, getAllBonuses(_, _, _)).Times(AtLeast(1)); + EXPECT_CALL(unitMock, getAllBonuses(_, _)).Times(AtLeast(1)); EXPECT_CALL(unitMock, getTreeVersion()).Times(AtLeast(0)); } diff --git a/test/spells/targetConditions/NormalSpellConditionTest.cpp b/test/spells/targetConditions/NormalSpellConditionTest.cpp index 7add7cf08..2bbda882b 100644 --- a/test/spells/targetConditions/NormalSpellConditionTest.cpp +++ b/test/spells/targetConditions/NormalSpellConditionTest.cpp @@ -24,7 +24,7 @@ public: void setDefaultExpectations() { - EXPECT_CALL(unitMock, getAllBonuses(_, _, _)).Times(AtLeast(1)); + EXPECT_CALL(unitMock, getAllBonuses(_, _)).Times(AtLeast(1)); EXPECT_CALL(unitMock, getTreeVersion()).Times(AtLeast(0)); EXPECT_CALL(mechanicsMock, getSpellIndex()).WillRepeatedly(Return(castSpell)); } diff --git a/test/spells/targetConditions/ReceptiveFeatureConditionTest.cpp b/test/spells/targetConditions/ReceptiveFeatureConditionTest.cpp index 8a6e6bb17..ee88a3a0f 100644 --- a/test/spells/targetConditions/ReceptiveFeatureConditionTest.cpp +++ b/test/spells/targetConditions/ReceptiveFeatureConditionTest.cpp @@ -27,7 +27,7 @@ public: isPositive = ::testing::get<0>(GetParam()); hasBonus = ::testing::get<1>(GetParam()); - EXPECT_CALL(unitMock, getAllBonuses(_, _, _)).Times(AtLeast(0)); + EXPECT_CALL(unitMock, getAllBonuses(_, _)).Times(AtLeast(0)); EXPECT_CALL(unitMock, getTreeVersion()).Times(AtLeast(0)); EXPECT_CALL(mechanicsMock, isPositiveSpell()).WillRepeatedly(Return(isPositive)); if(hasBonus) diff --git a/test/spells/targetConditions/SpellEffectConditionTest.cpp b/test/spells/targetConditions/SpellEffectConditionTest.cpp index 466f6ef87..4b3f84801 100644 --- a/test/spells/targetConditions/SpellEffectConditionTest.cpp +++ b/test/spells/targetConditions/SpellEffectConditionTest.cpp @@ -21,7 +21,7 @@ class SpellEffectConditionTest : public TargetConditionItemTest public: void setDefaultExpectations() { - EXPECT_CALL(unitMock, getAllBonuses(_, _, _)).Times(AtLeast(1)); + EXPECT_CALL(unitMock, getAllBonuses(_, _)).Times(AtLeast(1)); EXPECT_CALL(unitMock, getTreeVersion()).Times(AtLeast(0)); } diff --git a/test/spells/targetConditions/TargetConditionItemFixture.h b/test/spells/targetConditions/TargetConditionItemFixture.h index 0099b1b93..8b374d8e8 100644 --- a/test/spells/targetConditions/TargetConditionItemFixture.h +++ b/test/spells/targetConditions/TargetConditionItemFixture.h @@ -37,7 +37,7 @@ protected: void SetUp() override { using namespace ::testing; - ON_CALL(unitMock, getAllBonuses(_, _, _)).WillByDefault(Invoke(&unitBonuses, &BonusBearerMock::getAllBonuses)); + ON_CALL(unitMock, getAllBonuses(_, _)).WillByDefault(Invoke(&unitBonuses, &BonusBearerMock::getAllBonuses)); ON_CALL(unitMock, getTreeVersion()).WillByDefault(Invoke(&unitBonuses, &BonusBearerMock::getTreeVersion)); } }; From e3adae7fbdd59baebbb0a23edb41eecff86fc695 Mon Sep 17 00:00:00 2001 From: Laserlicht <13953785+Laserlicht@users.noreply.github.com> Date: Tue, 24 Jun 2025 13:13:32 +0200 Subject: [PATCH 30/60] Mage guild configurable doc update --- docs/modders/Entities_Format/Faction_Format.md | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/docs/modders/Entities_Format/Faction_Format.md b/docs/modders/Entities_Format/Faction_Format.md index 829f1ccbf..fdf25045b 100644 --- a/docs/modders/Entities_Format/Faction_Format.md +++ b/docs/modders/Entities_Format/Faction_Format.md @@ -250,7 +250,19 @@ Each town requires a set of buildings (Around 30-45 buildings) "primaryResource" : "gems", // maximum level of mage guild - "mageGuild" : 4, + "mageGuild" : 5, + + // Coordinates of spell images in mage guild screen. Should contain the maximum level of mage guild amount of elements. Example are HoMM3 defaults: + "guildSpellPositions" : [ + [ { "x": 222, "y": 445 }, { "x": 312, "y": 445 }, { "x": 402, "y": 445 }, { "x": 520, "y": 445 }, { "x": 610, "y": 445 }, { "x": 700, "y": 445 } ], + [ { "x": 48, "y": 53 }, { "x": 48, "y": 147 }, { "x": 48, "y": 241 }, { "x": 48, "y": 335 }, { "x": 48, "y": 429 } ], + [ { "x": 570, "y": 82 }, { "x": 672, "y": 82 }, { "x": 570, "y": 157 }, { "x": 672, "y": 157 } ], + [ { "x": 183, "y": 42 }, { "x": 183, "y": 148 }, { "x": 183, "y": 253 } ], + [ { "x": 491, "y": 325 }, { "x": 591, "y": 325 } ] + ], + + // Coordinates of window image in mage guild screen. Example is HoMM3 default: + "guildWindowPosition": { "x": 332, "y": 76 }, // Identifier of spell that will create effects for town moat during siege "moatAbility" : "castleMoat" From 9fb671f5f328946603261368c084916082e75ed8 Mon Sep 17 00:00:00 2001 From: Laserlicht <13953785+Laserlicht@users.noreply.github.com> Date: Tue, 24 Jun 2025 13:16:09 +0200 Subject: [PATCH 31/60] docs --- docs/modders/Entities_Format/Faction_Format.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/modders/Entities_Format/Faction_Format.md b/docs/modders/Entities_Format/Faction_Format.md index fdf25045b..78e80ab3d 100644 --- a/docs/modders/Entities_Format/Faction_Format.md +++ b/docs/modders/Entities_Format/Faction_Format.md @@ -177,11 +177,11 @@ Each town requires a set of buildings (Around 30-45 buildings) // Background scenery for town screen, size must be 800x374 "townBackground": "", - // Small scenery for window in mage guild screen - "guildWindow": "", + // Small scenery for window in mage guild screen; each element of array is for seperate mage guild level image (if only one element, then this will always used) + "guildWindow": [""], - // Background image for window in mage guild screen - "guildBackground" : "", + // Background image for window in mage guild screen; each element of array is for seperate mage guild level image (if only one element, then this will always used) + "guildBackground" : [""], // Video for tavern window "tavernVideo" : "", From 30521bbc8f511822857530b7e7de14ea06adf125 Mon Sep 17 00:00:00 2001 From: Laserlicht <13953785+Laserlicht@users.noreply.github.com> Date: Tue, 24 Jun 2025 13:48:36 +0200 Subject: [PATCH 32/60] code review --- client/mapView/IMapRendererContext.h | 4 +-- client/mapView/MapRenderer.cpp | 28 +++++++++++++------ client/mapView/MapRenderer.h | 4 ++- client/mapView/MapRendererContext.cpp | 6 ++-- client/mapView/MapRendererContext.h | 2 +- .../Entities_Format/Creature_Format.md | 4 +++ 6 files changed, 32 insertions(+), 16 deletions(-) diff --git a/client/mapView/IMapRendererContext.h b/client/mapView/IMapRendererContext.h index 1c5f9e6ee..c1ff9bfc6 100644 --- a/client/mapView/IMapRendererContext.h +++ b/client/mapView/IMapRendererContext.h @@ -56,8 +56,8 @@ public: /// returns true if specified object is the currently active hero virtual bool isActiveHero(const CGObjectInstance* obj) const = 0; - /// returns direction of attacker if specified object is a monster and currently attacked - virtual int monsterAttacked(const CGObjectInstance * obj) const = 0; + /// Returns moveDir of hero that attacked this wandering monster, or -1 on failure + virtual int attackedMonsterDirection(const CGObjectInstance * wanderingMonster) const = 0; virtual size_t objectGroupIndex(ObjectInstanceID objectID) const = 0; virtual Point objectImageOffset(ObjectInstanceID objectID, const int3 & coordinates) const = 0; diff --git a/client/mapView/MapRenderer.cpp b/client/mapView/MapRenderer.cpp index b0462cf60..26a282ceb 100644 --- a/client/mapView/MapRenderer.cpp +++ b/client/mapView/MapRenderer.cpp @@ -420,6 +420,19 @@ std::shared_ptr MapRendererObjects::getAnimation(const AnimationPath return ret; } +std::shared_ptr MapRendererObjects::getImage(const ImagePath & filename) const +{ + auto it = images.find(filename); + + if(it != images.end()) + return it->second; + + auto ret = ENGINE->renderHandler().loadImage(filename, EImageBlitMode::SIMPLE); + images[filename] = ret; + + return ret; +} + std::shared_ptr MapRendererObjects::getFlagAnimation(const CGObjectInstance* obj) { //TODO: relocate to config file? @@ -456,7 +469,7 @@ std::shared_ptr MapRendererObjects::getOverlayAnimation(const CGObje return nullptr; } -std::shared_ptr MapRendererObjects::getImage(IMapRendererContext & context, const CGObjectInstance * obj, const std::shared_ptr& animation) const +std::shared_ptr MapRendererObjects::getImageToRender(IMapRendererContext & context, const CGObjectInstance * obj, const std::shared_ptr& animation) const { if(!animation) return nullptr; @@ -466,7 +479,7 @@ std::shared_ptr MapRendererObjects::getImage(IMapRendererContext & conte if(animation->size(groupIndex) == 0) return nullptr; - auto attackerPos = context.monsterAttacked(obj); + auto attackerPos = context.attackedMonsterDirection(obj); if(attackerPos != -1) { const auto * creature = dynamic_cast(obj); @@ -474,10 +487,7 @@ std::shared_ptr MapRendererObjects::getImage(IMapRendererContext & conte auto dir = std::vector({1, 2, 7, 8}); ImagePath imgPath = std::count(dir.begin(), dir.end(), attackerPos) ? creatureType->mapAttackFromRight : creatureType->mapAttackFromLeft; if(!imgPath.empty()) - { - auto img = ENGINE->renderHandler().loadImage(imgPath, EImageBlitMode::SIMPLE); - return img; - } + return getImage(imgPath); } size_t frameIndex = context.objectImageIndex(obj->id, animation->size(groupIndex)); @@ -516,9 +526,9 @@ void MapRendererObjects::renderImage(IMapRendererContext & context, Canvas & tar void MapRendererObjects::renderObject(IMapRendererContext & context, Canvas & target, const int3 & coordinates, const CGObjectInstance * instance) { - renderImage(context, target, coordinates, instance, getImage(context, instance, getBaseAnimation(instance))); - renderImage(context, target, coordinates, instance, getImage(context, instance, getFlagAnimation(instance))); - renderImage(context, target, coordinates, instance, getImage(context, instance, getOverlayAnimation(instance))); + renderImage(context, target, coordinates, instance, getImageToRender(context, instance, getBaseAnimation(instance))); + renderImage(context, target, coordinates, instance, getImageToRender(context, instance, getFlagAnimation(instance))); + renderImage(context, target, coordinates, instance, getImageToRender(context, instance, getOverlayAnimation(instance))); } void MapRendererObjects::renderTile(IMapRendererContext & context, Canvas & target, const int3 & coordinates) diff --git a/client/mapView/MapRenderer.h b/client/mapView/MapRenderer.h index 085846c63..9a69bc24a 100644 --- a/client/mapView/MapRenderer.h +++ b/client/mapView/MapRenderer.h @@ -73,14 +73,16 @@ public: class MapRendererObjects { std::map> animations; + mutable std::map> images; std::shared_ptr getBaseAnimation(const CGObjectInstance * obj); std::shared_ptr getFlagAnimation(const CGObjectInstance * obj); std::shared_ptr getOverlayAnimation(const CGObjectInstance * obj); std::shared_ptr getAnimation(const AnimationPath & filename, bool generateMovementGroups, bool enableOverlay); + std::shared_ptr getImage(const ImagePath & filename) const; - std::shared_ptr getImage(IMapRendererContext & context, const CGObjectInstance * obj, const std::shared_ptr & animation) const; + std::shared_ptr getImageToRender(IMapRendererContext & context, const CGObjectInstance * obj, const std::shared_ptr & animation) const; void renderImage(IMapRendererContext & context, Canvas & target, const int3 & coordinates, const CGObjectInstance * object, const std::shared_ptr & image); void renderObject(IMapRendererContext & context, Canvas & target, const int3 & coordinates, const CGObjectInstance * obj); diff --git a/client/mapView/MapRendererContext.cpp b/client/mapView/MapRendererContext.cpp index 3fa9811da..f1c23c76a 100644 --- a/client/mapView/MapRendererContext.cpp +++ b/client/mapView/MapRendererContext.cpp @@ -87,13 +87,13 @@ bool MapRendererBaseContext::isActiveHero(const CGObjectInstance * obj) const return false; } -int MapRendererBaseContext::monsterAttacked(const CGObjectInstance * obj) const +int MapRendererBaseContext::attackedMonsterDirection(const CGObjectInstance * wanderingMonster) const { - if(obj->ID != Obj::MONSTER) + if(wanderingMonster->ID != Obj::MONSTER) return -1; for(auto & battle : GAME->interface()->cb->getActiveBattles()) - if(obj->pos == battle.second->getBattle()->getLocation()) + if(wanderingMonster->pos == battle.second->getBattle()->getLocation()) return battle.second->getBattle()->getSideHero(BattleSide::ATTACKER)->moveDir; return -1; diff --git a/client/mapView/MapRendererContext.h b/client/mapView/MapRendererContext.h index 35d891cc5..cc71fbc5d 100644 --- a/client/mapView/MapRendererContext.h +++ b/client/mapView/MapRendererContext.h @@ -36,7 +36,7 @@ public: bool tileAnimated(const int3 & coordinates) const override; bool isActiveHero(const CGObjectInstance* obj) const override; - int monsterAttacked(const CGObjectInstance * obj) const override; + int attackedMonsterDirection(const CGObjectInstance * wanderingMonster) const override; const TerrainTile & getMapTile(const int3 & coordinates) const override; const MapObjectsList & getObjects(const int3 & coordinates) const override; diff --git a/docs/modders/Entities_Format/Creature_Format.md b/docs/modders/Entities_Format/Creature_Format.md index 66cb5a83d..b308e4c7c 100644 --- a/docs/modders/Entities_Format/Creature_Format.md +++ b/docs/modders/Entities_Format/Creature_Format.md @@ -128,6 +128,10 @@ In order to make functional creature you also need: "iconSmall" : "", // Large icon for this creature, used for example in town screen "iconLarge" : "", + + // Optional. Images of creatures when attacked on adventure map + "mapAttackFromRight": "", + "mapAttackFromLeft": "", // animation parameters From 4181514c3fe732adfc04fdb1b4c080e09551a356 Mon Sep 17 00:00:00 2001 From: Ivan Savenko Date: Tue, 24 Jun 2025 15:49:55 +0300 Subject: [PATCH 33/60] Fix incorrect movement gain from objects like Rally Flag Checked all possible places that can change move points - looks like all of them expect absolute values --- lib/callback/IGameEventCallback.h | 2 +- lib/gameState/GameStatePackVisitor.cpp | 7 +------ lib/networkPacks/PacksForClient.h | 5 +---- server/CGameHandler.cpp | 3 +-- server/CGameHandler.h | 2 +- server/processors/NewTurnProcessor.cpp | 2 +- test/mock/mock_IGameEventCallback.h | 2 +- 7 files changed, 7 insertions(+), 16 deletions(-) diff --git a/lib/callback/IGameEventCallback.h b/lib/callback/IGameEventCallback.h index 08a0fafc5..518acba04 100644 --- a/lib/callback/IGameEventCallback.h +++ b/lib/callback/IGameEventCallback.h @@ -104,7 +104,7 @@ public: virtual bool moveHero(ObjectInstanceID hid, int3 dst, EMovementMode moveMove, bool transit = false, PlayerColor asker = PlayerColor::NEUTRAL)=0; virtual void giveHeroBonus(GiveBonus * bonus)=0; virtual void setMovePoints(SetMovePoints * smp)=0; - virtual void setMovePoints(ObjectInstanceID hid, int val, ChangeValueMode mode)=0; + virtual void setMovePoints(ObjectInstanceID hid, int val)=0; virtual void setManaPoints(ObjectInstanceID hid, int val)=0; virtual void giveHero(ObjectInstanceID id, PlayerColor player, ObjectInstanceID boatId = ObjectInstanceID()) = 0; virtual void changeObjPos(ObjectInstanceID objid, int3 newPos, const PlayerColor & initiator)=0; diff --git a/lib/gameState/GameStatePackVisitor.cpp b/lib/gameState/GameStatePackVisitor.cpp index 309b15cd2..248599025 100644 --- a/lib/gameState/GameStatePackVisitor.cpp +++ b/lib/gameState/GameStatePackVisitor.cpp @@ -176,13 +176,8 @@ void GameStatePackVisitor::visitSetMana(SetMana & pack) void GameStatePackVisitor::visitSetMovePoints(SetMovePoints & pack) { CGHeroInstance *hero = gs.getHero(pack.hid); - assert(hero); - - if(pack.mode == ChangeValueMode::ABSOLUTE) - hero->setMovementPoints(pack.val); - else - hero->setMovementPoints(hero->movementPointsRemaining() + pack.val); + hero->setMovementPoints(pack.val); } void GameStatePackVisitor::visitFoWChange(FoWChange & pack) diff --git a/lib/networkPacks/PacksForClient.h b/lib/networkPacks/PacksForClient.h index 68af639e4..7a1165c5a 100644 --- a/lib/networkPacks/PacksForClient.h +++ b/lib/networkPacks/PacksForClient.h @@ -351,15 +351,13 @@ struct DLL_LINKAGE SetMana : public CPackForClient struct DLL_LINKAGE SetMovePoints : public CPackForClient { SetMovePoints() = default; - SetMovePoints(ObjectInstanceID hid, si32 val, ChangeValueMode mode) + SetMovePoints(ObjectInstanceID hid, si32 val) : hid(hid) , val(val) - , mode(mode) {} ObjectInstanceID hid; si32 val = 0; - ChangeValueMode mode = ChangeValueMode::RELATIVE; void visitTyped(ICPackVisitor & visitor) override; @@ -367,7 +365,6 @@ struct DLL_LINKAGE SetMovePoints : public CPackForClient { h & val; h & hid; - h & mode; } }; diff --git a/server/CGameHandler.cpp b/server/CGameHandler.cpp index 686a861b0..ef091714d 100644 --- a/server/CGameHandler.cpp +++ b/server/CGameHandler.cpp @@ -1335,12 +1335,11 @@ void CGameHandler::setMovePoints(SetMovePoints * smp) sendAndApply(*smp); } -void CGameHandler::setMovePoints(ObjectInstanceID hid, int val, ChangeValueMode mode) +void CGameHandler::setMovePoints(ObjectInstanceID hid, int val) { SetMovePoints smp; smp.hid = hid; smp.val = val; - smp.mode = mode; sendAndApply(smp); } diff --git a/server/CGameHandler.h b/server/CGameHandler.h index 318c65a06..21aec9795 100644 --- a/server/CGameHandler.h +++ b/server/CGameHandler.h @@ -166,7 +166,7 @@ public: bool moveHero(ObjectInstanceID hid, int3 dst, EMovementMode movementMode, bool transit = false, PlayerColor asker = PlayerColor::NEUTRAL) override; void giveHeroBonus(GiveBonus * bonus) override; void setMovePoints(SetMovePoints * smp) override; - void setMovePoints(ObjectInstanceID hid, int val, ChangeValueMode mode) override; + void setMovePoints(ObjectInstanceID hid, int val) override; void setManaPoints(ObjectInstanceID hid, int val) override; void giveHero(ObjectInstanceID id, PlayerColor player, ObjectInstanceID boatId = ObjectInstanceID()) override; void changeObjPos(ObjectInstanceID objid, int3 newPos, const PlayerColor & initiator) override; diff --git a/server/processors/NewTurnProcessor.cpp b/server/processors/NewTurnProcessor.cpp index 8373fd426..33bb8eb03 100644 --- a/server/processors/NewTurnProcessor.cpp +++ b/server/processors/NewTurnProcessor.cpp @@ -590,7 +590,7 @@ std::vector NewTurnProcessor::updateHeroesMovementPoints() int32_t newMovementPoints = h->movementPointsLimitCached(gameHandler->gameState().getMap().getTile(h->visitablePos()).isLand(), ti.get()); if (newMovementPoints != h->movementPointsRemaining()) - result.emplace_back(h->id, newMovementPoints, ChangeValueMode::ABSOLUTE); + result.emplace_back(h->id, newMovementPoints); } } return result; diff --git a/test/mock/mock_IGameEventCallback.h b/test/mock/mock_IGameEventCallback.h index d9707d738..1a5ca4ae2 100644 --- a/test/mock/mock_IGameEventCallback.h +++ b/test/mock/mock_IGameEventCallback.h @@ -74,7 +74,7 @@ public: bool moveHero(ObjectInstanceID hid, int3 dst, EMovementMode movementMode, bool transit, PlayerColor asker) override {return false;} void giveHeroBonus(GiveBonus * bonus) override {} void setMovePoints(SetMovePoints * smp) override {} - void setMovePoints(ObjectInstanceID hid, int val, ChangeValueMode mode) override {}; + void setMovePoints(ObjectInstanceID hid, int val) override {}; void setManaPoints(ObjectInstanceID hid, int val) override {} void giveHero(ObjectInstanceID id, PlayerColor player, ObjectInstanceID boatId) override {} void changeObjPos(ObjectInstanceID objid, int3 newPos, const PlayerColor & initiator) override {} From 17def4d853cde426b91f76e2789bf0fda55592d4 Mon Sep 17 00:00:00 2001 From: Laserlicht <13953785+Laserlicht@users.noreply.github.com> Date: Wed, 25 Jun 2025 02:38:50 +0200 Subject: [PATCH 34/60] fix path not updated after cheat --- client/CPlayerInterface.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/client/CPlayerInterface.cpp b/client/CPlayerInterface.cpp index 3962a554e..f1a0b139b 100644 --- a/client/CPlayerInterface.cpp +++ b/client/CPlayerInterface.cpp @@ -498,6 +498,7 @@ void CPlayerInterface::heroMovePointsChanged(const CGHeroInstance * hero) if (makingTurn && hero->tempOwner == playerID) adventureInt->onHeroChanged(hero); invalidatePaths(); + GAME->interface()->localState->verifyPath(hero); } void CPlayerInterface::receivedResource() { From 9c2e49f95f023cff63cdbc8d4cdf02fe646e2463 Mon Sep 17 00:00:00 2001 From: Ivan Savenko Date: Wed, 25 Jun 2025 11:49:34 +0300 Subject: [PATCH 35/60] Fix propagation of Legion artifact pieces when hero moves out of town --- lib/bonuses/CBonusSystemNode.cpp | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/lib/bonuses/CBonusSystemNode.cpp b/lib/bonuses/CBonusSystemNode.cpp index ba693ff53..bb2827fa5 100644 --- a/lib/bonuses/CBonusSystemNode.cpp +++ b/lib/bonuses/CBonusSystemNode.cpp @@ -18,6 +18,7 @@ VCMI_LIB_NAMESPACE_BEGIN constexpr bool cachingEnabled = true; +static std::atomic globalCounter = 1; std::shared_ptr CBonusSystemNode::getLocalBonus(const CSelector & selector) { @@ -214,7 +215,7 @@ void CBonusSystemNode::attachTo(CBonusSystemNode & parent) parent.children.push_back(this); } - nodeHasChanged(); + parent.nodeHasChanged(); } void CBonusSystemNode::attachToSource(const CBonusSystemNode & parent) @@ -263,7 +264,7 @@ void CBonusSystemNode::detachFrom(CBonusSystemNode & parent) , nodeShortInfo(), nodeType, parent.nodeShortInfo(), parent.nodeType); } } - nodeHasChanged(); + parent.nodeHasChanged(); } @@ -378,7 +379,7 @@ void CBonusSystemNode::propagateBonus(const std::shared_ptr & b, const CB : b; bonuses.push_back(propagated); logBonus->trace("#$# %s #propagated to# %s", propagated->Description(nullptr), nodeName()); - invalidateChildrenNodes(nodeChanged); + invalidateChildrenNodes(globalCounter); } TNodes lchildren; @@ -396,15 +397,17 @@ void CBonusSystemNode::unpropagateBonus(const std::shared_ptr & b) else logBonus->warn("Attempt to remove #$# %s, which is not propagated to %s", b->Description(nullptr), nodeName()); - bonuses.remove_if([this, b](const auto & bonus) + bonuses.remove_if([b](const auto & bonus) { if (bonus->propagationUpdater && bonus->propagationUpdater == b->propagationUpdater) { - invalidateChildrenNodes(nodeChanged); + return true; } return false; }); + + invalidateChildrenNodes(globalCounter); } TNodes lchildren; @@ -608,8 +611,6 @@ void CBonusSystemNode::limitBonuses(const BonusList &allBonuses, BonusList &out) void CBonusSystemNode::nodeHasChanged() { - static std::atomic globalCounter = 1; - invalidateChildrenNodes(++globalCounter); } @@ -623,6 +624,11 @@ void CBonusSystemNode::recomputePropagationUpdaters(const CBonusSystemNode & sou propagateBonus(b, source); } } + + for(const CBonusSystemNode * parent : source.parentsToInherit) + if (parent->actsAsBonusSourceOnly()) + recomputePropagationUpdaters(*parent); + } void CBonusSystemNode::invalidateChildrenNodes(int32_t changeCounter) @@ -633,9 +639,6 @@ void CBonusSystemNode::invalidateChildrenNodes(int32_t changeCounter) nodeChanged = changeCounter; recomputePropagationUpdaters(*this); - for(const CBonusSystemNode * parent : parentsToInherit) - if (parent->actsAsBonusSourceOnly()) - recomputePropagationUpdaters(*parent); for(CBonusSystemNode * child : children) child->invalidateChildrenNodes(changeCounter); From 099053437a07493ce9e11605f71acc3be0c516ad Mon Sep 17 00:00:00 2001 From: Ivan Savenko Date: Wed, 25 Jun 2025 11:50:33 +0300 Subject: [PATCH 36/60] Update unit growth in town screen UI when unequipping Legion pieces --- client/ArtifactsUIController.cpp | 20 ++++++++++---------- client/gui/CIntObject.h | 6 ++++++ client/windows/CCastleInterface.cpp | 7 +++++++ client/windows/CCastleInterface.h | 3 ++- client/windows/CExchangeWindow.cpp | 8 ++++---- client/windows/CExchangeWindow.h | 2 +- client/windows/CHeroWindow.cpp | 10 +++++----- client/windows/CHeroWindow.h | 2 +- client/windows/CMarketWindow.cpp | 2 +- client/windows/CMarketWindow.h | 3 ++- client/windows/CWindowWithArtifacts.cpp | 2 +- client/windows/CWindowWithArtifacts.h | 4 ++-- 12 files changed, 42 insertions(+), 27 deletions(-) diff --git a/client/ArtifactsUIController.cpp b/client/ArtifactsUIController.cpp index b6ffc9dae..617e36d16 100644 --- a/client/ArtifactsUIController.cpp +++ b/client/ArtifactsUIController.cpp @@ -127,8 +127,8 @@ bool ArtifactsUIController::askToDisassemble(const CGHeroInstance * hero, const void ArtifactsUIController::artifactRemoved() { - for(const auto & artWin : ENGINE->windows().findWindows()) - artWin->update(); + for(const auto & artWin : ENGINE->windows().findWindows()) + artWin->updateArtifacts(); GAME->interface()->waitWhileDialog(); } @@ -139,10 +139,10 @@ void ArtifactsUIController::artifactMoved() numOfMovedArts--; if(numOfMovedArts == 0) - for(const auto & artWin : ENGINE->windows().findWindows()) - { - artWin->update(); - } + { + for(const auto & artWin : ENGINE->windows().findWindows()) + artWin->updateArtifacts(); + } GAME->interface()->waitWhileDialog(); } @@ -160,12 +160,12 @@ void ArtifactsUIController::bulkArtMovementStart(size_t totalNumOfArts, size_t p void ArtifactsUIController::artifactAssembled() { - for(const auto & artWin : ENGINE->windows().findWindows()) - artWin->update(); + for(const auto & artWin : ENGINE->windows().findWindows()) + artWin->updateArtifacts(); } void ArtifactsUIController::artifactDisassembled() { - for(const auto & artWin : ENGINE->windows().findWindows()) - artWin->update(); + for(const auto & artWin : ENGINE->windows().findWindows()) + artWin->updateArtifacts(); } diff --git a/client/gui/CIntObject.h b/client/gui/CIntObject.h index 7e137c410..816aeaea7 100644 --- a/client/gui/CIntObject.h +++ b/client/gui/CIntObject.h @@ -162,6 +162,12 @@ public: virtual void updateGarrisons() = 0; }; +class IArtifactsHolder +{ +public: + virtual void updateArtifacts() = 0; +}; + class IMarketHolder { public: diff --git a/client/windows/CCastleInterface.cpp b/client/windows/CCastleInterface.cpp index 7e20f97f4..d497fdcf5 100644 --- a/client/windows/CCastleInterface.cpp +++ b/client/windows/CCastleInterface.cpp @@ -1473,6 +1473,13 @@ CCastleInterface::~CCastleInterface() GAME->interface()->castleInt = nullptr; } +void CCastleInterface::updateArtifacts() +{ + // handle equipping / unequipping Legion pieces + for(auto creatureInfoBox : creainfo) + creatureInfoBox->update(); +} + void CCastleInterface::updateGarrisons() { garr->setArmy(town->getUpperArmy(), EGarrisonType::UPPER); diff --git a/client/windows/CCastleInterface.h b/client/windows/CCastleInterface.h index 0ed1edf49..46a546b5e 100644 --- a/client/windows/CCastleInterface.h +++ b/client/windows/CCastleInterface.h @@ -223,7 +223,7 @@ public: }; /// Class which manages the castle window -class CCastleInterface : public CStatusbarWindow, public IGarrisonHolder +class CCastleInterface final : public CStatusbarWindow, public IGarrisonHolder, public IArtifactsHolder { std::shared_ptr title; std::shared_ptr income; @@ -257,6 +257,7 @@ public: CCastleInterface(const CGTownInstance * Town, const CGTownInstance * from = nullptr); ~CCastleInterface(); + void updateArtifacts() override; void updateGarrisons() override; bool holdsGarrison(const CArmedInstance * army) override; diff --git a/client/windows/CExchangeWindow.cpp b/client/windows/CExchangeWindow.cpp index 9234b5ec7..66285ddcc 100644 --- a/client/windows/CExchangeWindow.cpp +++ b/client/windows/CExchangeWindow.cpp @@ -261,7 +261,7 @@ CExchangeWindow::CExchangeWindow(ObjectInstanceID hero1, ObjectInstanceID hero2, } } - CExchangeWindow::update(); + CExchangeWindow::updateArtifacts(); } void CExchangeWindow::creatureArrowButtonCallback(bool leftToRight, SlotID slotId) @@ -361,7 +361,7 @@ void CExchangeWindow::updateGarrisons() { garr->recreateSlots(); - update(); + updateArtifacts(); } bool CExchangeWindow::holdsGarrison(const CArmedInstance * army) @@ -375,13 +375,13 @@ void CExchangeWindow::questLogShortcut() GAME->interface()->showQuestLog(); } -void CExchangeWindow::update() +void CExchangeWindow::updateArtifacts() { const bool qeLayout = isQuickExchangeLayoutAvailable(); OBJECT_CONSTRUCTION; - CWindowWithArtifacts::update(); + CWindowWithArtifacts::updateArtifacts(); for(size_t leftRight : {0, 1}) { diff --git a/client/windows/CExchangeWindow.h b/client/windows/CExchangeWindow.h index 499eeb3a4..7a062ed1f 100644 --- a/client/windows/CExchangeWindow.h +++ b/client/windows/CExchangeWindow.h @@ -75,7 +75,7 @@ public: void keyPressed(EShortcut key) override; - void update() override; + void updateArtifacts() override; // IGarrisonHolder impl void updateGarrisons() override; diff --git a/client/windows/CHeroWindow.cpp b/client/windows/CHeroWindow.cpp index d806de045..51390616a 100644 --- a/client/windows/CHeroWindow.cpp +++ b/client/windows/CHeroWindow.cpp @@ -46,7 +46,7 @@ void CHeroSwitcher::clickPressed(const Point & cursorPosition) //TODO: do not recreate window if (false) { - owner->update(); + owner->updateArtifacts(); } else { @@ -153,7 +153,7 @@ CHeroWindow::CHeroWindow(const CGHeroInstance * hero) { auto divisionRoundUp = [](int x, int y){ return (x + (y - 1)) / y; }; int lines = divisionRoundUp(hero->secSkills.size(), 2); - secSkillSlider = std::make_shared(Point(284, 276), 189, [this](int val){ CHeroWindow::update(); }, 4, lines, 0, Orientation::VERTICAL, CSlider::BROWN); + secSkillSlider = std::make_shared(Point(284, 276), 189, [this](int val){ CHeroWindow::updateArtifacts(); }, 4, lines, 0, Orientation::VERTICAL, CSlider::BROWN); secSkillSlider->setPanningStep(48); secSkillSlider->setScrollBounds(Rect(-266, 0, secSkillSlider->pos.x - pos.x + secSkillSlider->pos.w, secSkillSlider->pos.h)); } @@ -182,14 +182,14 @@ CHeroWindow::CHeroWindow(const CGHeroInstance * hero) labels.push_back(std::make_shared(69, 232, FONT_SMALL, ETextAlignment::TOPLEFT, Colors::YELLOW, LIBRARY->generaltexth->jktexts[6])); labels.push_back(std::make_shared(213, 232, FONT_SMALL, ETextAlignment::TOPLEFT, Colors::YELLOW, LIBRARY->generaltexth->jktexts[7])); - CHeroWindow::update(); + CHeroWindow::updateArtifacts(); } -void CHeroWindow::update() +void CHeroWindow::updateArtifacts() { OBJECT_CONSTRUCTION; - CWindowWithArtifacts::update(); + CWindowWithArtifacts::updateArtifacts(); auto & heroscrn = LIBRARY->generaltexth->heroscrn; assert(curHero); diff --git a/client/windows/CHeroWindow.h b/client/windows/CHeroWindow.h index 9524262ff..c9471733f 100644 --- a/client/windows/CHeroWindow.h +++ b/client/windows/CHeroWindow.h @@ -101,7 +101,7 @@ public: CHeroWindow(const CGHeroInstance * hero); - void update() override; + void updateArtifacts() override; void dismissCurrent(); //dismissed currently displayed hero (curHero) void commanderWindow(); diff --git a/client/windows/CMarketWindow.cpp b/client/windows/CMarketWindow.cpp index 7e78e7efb..dbd4ae4c5 100644 --- a/client/windows/CMarketWindow.cpp +++ b/client/windows/CMarketWindow.cpp @@ -85,7 +85,7 @@ void CMarketWindow::updateExperience() void CMarketWindow::update() { - CWindowWithArtifacts::update(); + CWindowWithArtifacts::updateArtifacts(); assert(marketWidget); marketWidget->update(); } diff --git a/client/windows/CMarketWindow.h b/client/windows/CMarketWindow.h index 27b1026bc..f2874918e 100644 --- a/client/windows/CMarketWindow.h +++ b/client/windows/CMarketWindow.h @@ -20,7 +20,8 @@ public: void updateArtifacts() override; void updateGarrisons() override; void updateExperience() override; - void update() override; + + void update(); void close() override; bool holdsGarrison(const CArmedInstance * army) override; diff --git a/client/windows/CWindowWithArtifacts.cpp b/client/windows/CWindowWithArtifacts.cpp index 66780c4e7..3a091d51e 100644 --- a/client/windows/CWindowWithArtifacts.cpp +++ b/client/windows/CWindowWithArtifacts.cpp @@ -164,7 +164,7 @@ void CWindowWithArtifacts::enableKeyboardShortcuts() const artSet->enableKeyboardShortcuts(); } -void CWindowWithArtifacts::update() +void CWindowWithArtifacts::updateArtifacts() { for(const auto & artSet : artSets) { diff --git a/client/windows/CWindowWithArtifacts.h b/client/windows/CWindowWithArtifacts.h index cd6a42484..72b184cc5 100644 --- a/client/windows/CWindowWithArtifacts.h +++ b/client/windows/CWindowWithArtifacts.h @@ -16,7 +16,7 @@ #include "../widgets/CArtifactsOfHeroBackpack.h" #include "CWindowObject.h" -class CWindowWithArtifacts : virtual public CWindowObject +class CWindowWithArtifacts : virtual public CWindowObject, public IArtifactsHolder { public: using CArtifactsOfHeroPtr = std::shared_ptr; @@ -36,7 +36,7 @@ public: void deactivate() override; void enableKeyboardShortcuts() const; - virtual void update(); + void updateArtifacts() override; protected: void markPossibleSlots() const; From 6ac57a7cfc24a2b5d56259c1e092cc813e29b2b8 Mon Sep 17 00:00:00 2001 From: Ivan Savenko Date: Wed, 25 Jun 2025 17:34:20 +0300 Subject: [PATCH 37/60] Improvements to bonus system node types / propagators - Node type is now set on construction and never changes - Added army propagator that also checks for TOWN and HERO - Renamed existing propagators to be in sync with enumeration --- AI/Nullkiller/AIUtility.cpp | 4 +-- AI/Nullkiller/Analyzers/ArmyManager.cpp | 2 +- AI/Nullkiller/Pathfinding/Actors.h | 2 +- lib/CCreatureHandler.cpp | 2 +- lib/CCreatureSet.cpp | 17 ++++----- lib/CCreatureSet.h | 3 +- lib/CPlayerState.cpp | 2 +- lib/CStack.cpp | 8 ++--- lib/battle/BattleInfo.cpp | 4 +-- lib/bonuses/BonusEnum.h | 23 ++++++++++++ lib/bonuses/CBonusSystemNode.cpp | 40 +++++++++------------ lib/bonuses/CBonusSystemNode.h | 16 +++------ lib/bonuses/Limiters.cpp | 18 +++++----- lib/bonuses/Propagators.cpp | 38 +++++++++++++------- lib/bonuses/Propagators.h | 8 ++--- lib/bonuses/Updaters.cpp | 18 +++++----- lib/entities/artifact/CArtifact.cpp | 4 +-- lib/entities/artifact/CArtifactInstance.cpp | 2 +- lib/entities/faction/CTownHandler.cpp | 4 +-- lib/gameState/CGameState.cpp | 7 ++-- lib/mapObjects/CArmedInstance.cpp | 6 ++-- lib/mapObjects/CArmedInstance.h | 2 +- lib/mapObjects/CGDwelling.cpp | 6 +++- lib/mapObjects/CGDwelling.h | 1 + lib/mapObjects/CGHeroInstance.cpp | 3 +- lib/mapObjects/CGTownInstance.cpp | 9 ++--- lib/mapObjects/CGTownInstance.h | 8 +---- lib/mapObjects/FlaggableMapObject.cpp | 5 +++ lib/mapObjects/FlaggableMapObject.h | 2 +- lib/mapObjects/MiscObjects.cpp | 3 +- lib/serializer/RegisterTypes.h | 2 +- 31 files changed, 145 insertions(+), 124 deletions(-) diff --git a/AI/Nullkiller/AIUtility.cpp b/AI/Nullkiller/AIUtility.cpp index 6ad010b96..f6919ef46 100644 --- a/AI/Nullkiller/AIUtility.cpp +++ b/AI/Nullkiller/AIUtility.cpp @@ -271,7 +271,7 @@ bool compareArmyStrength(const CArmedInstance * a1, const CArmedInstance * a2) double getArtifactBonusRelevance(const CGHeroInstance * hero, const std::shared_ptr & bonus) { - if (bonus->propagator && bonus->limiter && bonus->propagator->getPropagatorType() == CBonusSystemNode::BATTLE) + if (bonus->propagator && bonus->limiter && bonus->propagator->getPropagatorType() == BonusNodeType::BATTLE_WIDE) { // assume that this is battle wide / other side propagator+limiter // consider it as fully relevant since we don't know about future combat when equipping artifacts @@ -526,7 +526,7 @@ int32_t getArtifactBonusScoreImpl(const std::shared_ptr & bonus) int32_t getArtifactBonusScore(const std::shared_ptr & bonus) { - if (bonus->propagator && bonus->propagator->getPropagatorType() == CBonusSystemNode::BATTLE) + if (bonus->propagator && bonus->propagator->getPropagatorType() == BonusNodeType::BATTLE_WIDE) { if (bonus->limiter) { diff --git a/AI/Nullkiller/Analyzers/ArmyManager.cpp b/AI/Nullkiller/Analyzers/ArmyManager.cpp index 5c1538443..fd0951568 100644 --- a/AI/Nullkiller/Analyzers/ArmyManager.cpp +++ b/AI/Nullkiller/Analyzers/ArmyManager.cpp @@ -172,7 +172,7 @@ class TemporaryArmy : public CArmedInstance public: void armyChanged() override {} TemporaryArmy() - :CArmedInstance(nullptr, true) + :CArmedInstance(nullptr, BonusNodeType::UNKNOWN, true) { } }; diff --git a/AI/Nullkiller/Pathfinding/Actors.h b/AI/Nullkiller/Pathfinding/Actors.h index 8b0d4debf..d73f01ac3 100644 --- a/AI/Nullkiller/Pathfinding/Actors.h +++ b/AI/Nullkiller/Pathfinding/Actors.h @@ -31,7 +31,7 @@ public: bool needsLastStack() const override; std::shared_ptr getActorAction() const; - HeroExchangeArmy(): CArmedInstance(nullptr, true), requireBuyArmy(false) {} + HeroExchangeArmy(): CArmedInstance(nullptr, BonusNodeType::UNKNOWN, true), requireBuyArmy(false) {} }; struct ExchangeResult diff --git a/lib/CCreatureHandler.cpp b/lib/CCreatureHandler.cpp index 1318aac3f..9e56b8c82 100644 --- a/lib/CCreatureHandler.cpp +++ b/lib/CCreatureHandler.cpp @@ -313,8 +313,8 @@ si32 CCreature::maxAmount(const TResources &res) const //how many creatures can } CCreature::CCreature() + :CBonusSystemNode(BonusNodeType::CREATURE) { - setNodeType(CBonusSystemNode::CREATURE); fightValue = AIValue = growth = hordeGrowth = ammMin = ammMax = 0; } diff --git a/lib/CCreatureSet.cpp b/lib/CCreatureSet.cpp index 1f9fc533e..80d8ac5b6 100644 --- a/lib/CCreatureSet.cpp +++ b/lib/CCreatureSet.cpp @@ -707,20 +707,22 @@ void CCreatureSet::serializeJson(JsonSerializeFormat & handler, const std::strin } } -CStackInstance::CStackInstance(IGameInfoCallback *cb, bool isHypothetic) - : CBonusSystemNode(isHypothetic) +CStackInstance::CStackInstance(IGameInfoCallback *cb) + : CStackInstance(cb, BonusNodeType::STACK_INSTANCE, false) +{} + +CStackInstance::CStackInstance(IGameInfoCallback *cb, BonusNodeType nodeType, bool isHypothetic) + : CBonusSystemNode(nodeType, isHypothetic) , CStackBasicDescriptor(nullptr, 0) , CArtifactSet(cb) , GameCallbackHolder(cb) , nativeTerrain(this, Selector::type()(BonusType::TERRAIN_NATIVE)) , initiative(this, Selector::type()(BonusType::STACKS_SPEED)) , totalExperience(0) -{ - setNodeType(STACK_INSTANCE); -} +{} CStackInstance::CStackInstance(IGameInfoCallback *cb, const CreatureID & id, TQuantity Count, bool isHypothetic) - : CStackInstance(cb, false) + : CStackInstance(cb, BonusNodeType::STACK_INSTANCE, false) { setType(id); setCount(Count); @@ -1040,14 +1042,13 @@ CCommanderInstance::CCommanderInstance(IGameInfoCallback *cb) {} CCommanderInstance::CCommanderInstance(IGameInfoCallback *cb, const CreatureID & id) - : CStackInstance(cb) + : CStackInstance(cb, BonusNodeType::COMMANDER, false) , name("Commando") { alive = true; level = 1; setCount(1); setType(nullptr); - setNodeType (CBonusSystemNode::COMMANDER); secondarySkills.resize (ECommander::SPELL_POWER + 1); setType(id); //TODO - parse them diff --git a/lib/CCreatureSet.h b/lib/CCreatureSet.h index 7a1a9017b..b90c34378 100644 --- a/lib/CCreatureSet.h +++ b/lib/CCreatureSet.h @@ -146,7 +146,8 @@ public: virtual int getLevel() const; //different for regular stack and commander CreatureID getCreatureID() const; //-1 if not available std::string getName() const; //plural or singular - CStackInstance(IGameInfoCallback *cb, bool isHypothetic = false); + CStackInstance(IGameInfoCallback *cb); + CStackInstance(IGameInfoCallback *cb, BonusNodeType nodeType, bool isHypothetic = false); CStackInstance(IGameInfoCallback *cb, const CreatureID & id, TQuantity count, bool isHypothetic = false); virtual ~CStackInstance() = default; diff --git a/lib/CPlayerState.cpp b/lib/CPlayerState.cpp index 889f1d074..7a92d325d 100644 --- a/lib/CPlayerState.cpp +++ b/lib/CPlayerState.cpp @@ -22,7 +22,7 @@ VCMI_LIB_NAMESPACE_BEGIN PlayerState::PlayerState(IGameInfoCallback *cb) - : CBonusSystemNode(PLAYER) + : CBonusSystemNode(BonusNodeType::PLAYER) , GameCallbackHolder(cb) , color(-1) , human(false) diff --git a/lib/CStack.cpp b/lib/CStack.cpp index 37d97b438..d53f7936b 100644 --- a/lib/CStack.cpp +++ b/lib/CStack.cpp @@ -26,7 +26,7 @@ VCMI_LIB_NAMESPACE_BEGIN ///CStack CStack::CStack(const CStackInstance * Base, const PlayerColor & O, int I, BattleSide Side, const SlotID & S): - CBonusSystemNode(STACK_BATTLE), + CBonusSystemNode(BonusNodeType::STACK_BATTLE), base(Base), ID(I), typeID(Base->getId()), @@ -40,7 +40,7 @@ CStack::CStack(const CStackInstance * Base, const PlayerColor & O, int I, Battle } CStack::CStack(): - CBonusSystemNode(STACK_BATTLE), + CBonusSystemNode(BonusNodeType::STACK_BATTLE), owner(PlayerColor::NEUTRAL), slot(SlotID(255)), initialPosition(BattleHex()) @@ -48,7 +48,7 @@ CStack::CStack(): } CStack::CStack(const CStackBasicDescriptor * stack, const PlayerColor & O, int I, BattleSide Side, const SlotID & S): - CBonusSystemNode(STACK_BATTLE), + CBonusSystemNode(BonusNodeType::STACK_BATTLE), ID(I), typeID(stack->getId()), baseAmount(stack->getCount()), @@ -155,7 +155,7 @@ const CGHeroInstance * CStack::getMyHero() const return dynamic_cast(base->getArmy()); else //we are attached directly? for(const CBonusSystemNode * n : getParentNodes()) - if(n->getNodeType() == HERO) + if(n->getNodeType() == BonusNodeType::HERO) return dynamic_cast(n); return nullptr; diff --git a/lib/battle/BattleInfo.cpp b/lib/battle/BattleInfo.cpp index d952a7e01..40f6fa002 100644 --- a/lib/battle/BattleInfo.cpp +++ b/lib/battle/BattleInfo.cpp @@ -467,7 +467,8 @@ BattleInfo::BattleInfo(IGameInfoCallback *cb, const BattleLayout & layout): } BattleInfo::BattleInfo(IGameInfoCallback *cb) - :GameCallbackHolder(cb), + :CBonusSystemNode(BonusNodeType::BATTLE_WIDE), + GameCallbackHolder(cb), sides({SideInBattle(cb), SideInBattle(cb)}), layout(std::make_unique()), round(-1), @@ -477,7 +478,6 @@ BattleInfo::BattleInfo(IGameInfoCallback *cb) tacticsSide(BattleSide::NONE), tacticDistance(0) { - setNodeType(BATTLE); } BattleLayout BattleInfo::getLayout() const diff --git a/lib/bonuses/BonusEnum.h b/lib/bonuses/BonusEnum.h index 33ff90c51..4430bc1f7 100644 --- a/lib/bonuses/BonusEnum.h +++ b/lib/bonuses/BonusEnum.h @@ -276,6 +276,29 @@ enum class BonusValueType : uint8_t #undef BONUS_VALUE }; +enum class BonusNodeType +{ + NONE = -1, + UNKNOWN, + STACK_INSTANCE, + STACK_BATTLE, + ARMY, + ARTIFACT, + CREATURE, + ARTIFACT_INSTANCE, + HERO, + PLAYER, + TEAM, + TOWN_AND_VISITOR, + BATTLE_WIDE, + COMMANDER, + GLOBAL_EFFECTS, + BOAT, + TOWN +}; + + + extern DLL_LINKAGE const std::map bonusValueMap; extern DLL_LINKAGE const std::map bonusSourceMap; extern DLL_LINKAGE const std::map bonusDurationMap; diff --git a/lib/bonuses/CBonusSystemNode.cpp b/lib/bonuses/CBonusSystemNode.cpp index bb2827fa5..b0fe30c6d 100644 --- a/lib/bonuses/CBonusSystemNode.cpp +++ b/lib/bonuses/CBonusSystemNode.cpp @@ -172,21 +172,17 @@ std::shared_ptr CBonusSystemNode::getUpdatedBonus(const std::shared_ptrcreateUpdatedBonus(b, * this); } -CBonusSystemNode::CBonusSystemNode(bool isHypotetic): - nodeType(UNKNOWN), +CBonusSystemNode::CBonusSystemNode(BonusNodeType NodeType, bool isHypotetic): + nodeType(NodeType), cachedLast(0), nodeChanged(0), isHypotheticNode(isHypotetic) { } -CBonusSystemNode::CBonusSystemNode(ENodeTypes NodeType): - nodeType(NodeType), - cachedLast(0), - nodeChanged(0), - isHypotheticNode(false) -{ -} +CBonusSystemNode::CBonusSystemNode(BonusNodeType NodeType): + CBonusSystemNode(NodeType, false) +{} CBonusSystemNode::~CBonusSystemNode() { @@ -250,8 +246,8 @@ void CBonusSystemNode::detachFrom(CBonusSystemNode & parent) } else { - logBonus->error("Error on Detach. Node %s (nodeType=%d) has not parent %s (nodeType=%d)" - , nodeShortInfo(), nodeType, parent.nodeShortInfo(), parent.nodeType); + logBonus->error("Error on Detach. Node %s (nodeType=%d) has not parent %s (nodeType=%d)", + nodeShortInfo(), static_cast(nodeType), parent.nodeShortInfo(), static_cast(parent.nodeType)); } if(!isHypothetic()) @@ -260,8 +256,8 @@ void CBonusSystemNode::detachFrom(CBonusSystemNode & parent) parent.children -= this; else { - logBonus->error("Error on Detach. Node %s (nodeType=%d) is not a child of %s (nodeType=%d)" - , nodeShortInfo(), nodeType, parent.nodeShortInfo(), parent.nodeType); + logBonus->error("Error on Detach. Node %s (nodeType=%d) is not a child of %s (nodeType=%d)", + nodeShortInfo(), static_cast(nodeType), parent.nodeShortInfo(), static_cast(parent.nodeType)); } } parent.nodeHasChanged(); @@ -284,8 +280,8 @@ void CBonusSystemNode::detachFromSource(const CBonusSystemNode & parent) } else { - logBonus->error("Error on Detach. Node %s (nodeType=%d) has not parent %s (nodeType=%d)" - , nodeShortInfo(), nodeType, parent.nodeShortInfo(), parent.nodeType); + logBonus->error("Error on Detach. Node %s (nodeType=%d) has not parent %s (nodeType=%d)", + nodeShortInfo(), static_cast(nodeType), parent.nodeShortInfo(), static_cast(parent.nodeType)); } nodeHasChanged(); @@ -361,9 +357,10 @@ bool CBonusSystemNode::actsAsBonusSourceOnly() const { switch(nodeType) { - case CREATURE: - case ARTIFACT: - case ARTIFACT_INSTANCE: + case BonusNodeType::CREATURE: + case BonusNodeType::ARTIFACT: + case BonusNodeType::ARTIFACT_INSTANCE: + case BonusNodeType::BOAT: return true; default: return false; @@ -549,7 +546,7 @@ void CBonusSystemNode::exportBonuses() exportBonus(b); } -CBonusSystemNode::ENodeTypes CBonusSystemNode::getNodeType() const +BonusNodeType CBonusSystemNode::getNodeType() const { return nodeType; } @@ -559,11 +556,6 @@ const TCNodesVector& CBonusSystemNode::getParentNodes() const return parentsToInherit; } -void CBonusSystemNode::setNodeType(CBonusSystemNode::ENodeTypes type) -{ - nodeType = type; -} - BonusList & CBonusSystemNode::getExportedBonusList() { return exportedBonuses; diff --git a/lib/bonuses/CBonusSystemNode.h b/lib/bonuses/CBonusSystemNode.h index ac0f29e98..b9ff66285 100644 --- a/lib/bonuses/CBonusSystemNode.h +++ b/lib/bonuses/CBonusSystemNode.h @@ -26,13 +26,6 @@ using TCNodesVector = std::vector; class DLL_LINKAGE CBonusSystemNode : public virtual IBonusBearer, public virtual Serializeable, public boost::noncopyable { public: - enum ENodeTypes - { - NONE = -1, - UNKNOWN, STACK_INSTANCE, STACK_BATTLE, SPECIALTY, ARTIFACT, CREATURE, ARTIFACT_INSTANCE, HERO, PLAYER, TEAM, - TOWN_AND_VISITOR, BATTLE, COMMANDER, GLOBAL_EFFECTS, ALL_CREATURES, TOWN - }; - struct HashStringCompare { static size_t hash(const std::string& data) { @@ -53,7 +46,7 @@ private: TNodesVector parentsToPropagate; // we may attach our bonuses to them TNodesVector children; - ENodeTypes nodeType; + BonusNodeType nodeType; bool isHypotheticNode; mutable BonusList cachedBonuses; @@ -97,8 +90,8 @@ protected: void exportBonuses(); public: - explicit CBonusSystemNode(bool isHypotetic = false); - explicit CBonusSystemNode(ENodeTypes NodeType); + explicit CBonusSystemNode(BonusNodeType nodeType, bool isHypotetic); + explicit CBonusSystemNode(BonusNodeType nodeType); virtual ~CBonusSystemNode(); TConstBonusListPtr getAllBonuses(const CSelector &selector, const std::string &cachingStr = "") const override; @@ -130,8 +123,7 @@ public: BonusList & getExportedBonusList(); const BonusList & getExportedBonusList() const; - CBonusSystemNode::ENodeTypes getNodeType() const; - void setNodeType(CBonusSystemNode::ENodeTypes type); + BonusNodeType getNodeType() const; const TCNodesVector & getParentNodes() const; void nodeHasChanged(); diff --git a/lib/bonuses/Limiters.cpp b/lib/bonuses/Limiters.cpp index 4943b7907..83c654103 100644 --- a/lib/bonuses/Limiters.cpp +++ b/lib/bonuses/Limiters.cpp @@ -45,7 +45,7 @@ static const CStack * retrieveStackBattle(const CBonusSystemNode * node) { switch(node->getNodeType()) { - case CBonusSystemNode::STACK_BATTLE: + case BonusNodeType::STACK_BATTLE: return dynamic_cast(node); default: return nullptr; @@ -56,9 +56,9 @@ static const CStackInstance * retrieveStackInstance(const CBonusSystemNode * nod { switch(node->getNodeType()) { - case CBonusSystemNode::STACK_INSTANCE: + case BonusNodeType::STACK_INSTANCE: return (dynamic_cast(node)); - case CBonusSystemNode::STACK_BATTLE: + case BonusNodeType::STACK_BATTLE: return (dynamic_cast(node))->base; default: return nullptr; @@ -69,9 +69,9 @@ static const CCreature * retrieveCreature(const CBonusSystemNode *node) { switch(node->getNodeType()) { - case CBonusSystemNode::CREATURE: + case BonusNodeType::CREATURE: return (dynamic_cast(node)); - case CBonusSystemNode::STACK_BATTLE: + case BonusNodeType::STACK_BATTLE: return (dynamic_cast(node))->unitType(); default: const CStackInstance * csi = retrieveStackInstance(node); @@ -262,7 +262,7 @@ CreatureTerrainLimiter::CreatureTerrainLimiter(TerrainId terrain): ILimiter::EDecision CreatureTerrainLimiter::limit(const BonusLimitationContext &context) const { - if (context.node.getNodeType() != CBonusSystemNode::STACK_BATTLE && context.node.getNodeType() != CBonusSystemNode::STACK_INSTANCE) + if (context.node.getNodeType() != BonusNodeType::STACK_BATTLE && context.node.getNodeType() != BonusNodeType::STACK_INSTANCE) return ILimiter::EDecision::NOT_APPLICABLE; if (terrainType == ETerrainId::NATIVE_TERRAIN) @@ -277,7 +277,7 @@ ILimiter::EDecision CreatureTerrainLimiter::limit(const BonusLimitationContext & // TODO: CStack and CStackInstance need some common base type that represents any stack // Closest existing class is ACreature, however it is also used as base for CCreature, which is not a stack - if (context.node.getNodeType() == CBonusSystemNode::STACK_BATTLE) + if (context.node.getNodeType() == BonusNodeType::STACK_BATTLE) { const auto * unit = dynamic_cast(&context.node); auto unitNativeTerrain = unit->getFactionID().toEntity(LIBRARY)->getNativeTerrain(); @@ -294,7 +294,7 @@ ILimiter::EDecision CreatureTerrainLimiter::limit(const BonusLimitationContext & } else { - if (context.node.getNodeType() == CBonusSystemNode::STACK_BATTLE) + if (context.node.getNodeType() == BonusNodeType::STACK_BATTLE) { const auto * unit = dynamic_cast(&context.node); if (unit->getCurrentTerrain() == terrainType) @@ -462,7 +462,7 @@ ILimiter::EDecision RankRangeLimiter::limit(const BonusLimitationContext &contex const CStackInstance * csi = retrieveStackInstance(&context.node); if(csi) { - if (csi->getNodeType() == CBonusSystemNode::COMMANDER) //no stack exp bonuses for commander creatures + if (csi->getNodeType() == BonusNodeType::COMMANDER) //no stack exp bonuses for commander creatures return ILimiter::EDecision::DISCARD; if (csi->getExpRank() > minRank && csi->getExpRank() < maxRank) return ILimiter::EDecision::ACCEPT; diff --git a/lib/bonuses/Propagators.cpp b/lib/bonuses/Propagators.cpp index a453cae63..9f328bbfa 100644 --- a/lib/bonuses/Propagators.cpp +++ b/lib/bonuses/Propagators.cpp @@ -16,37 +16,51 @@ VCMI_LIB_NAMESPACE_BEGIN const std::map bonusPropagatorMap = { - {"BATTLE_WIDE", std::make_shared(CBonusSystemNode::BATTLE)}, - {"VISITED_TOWN_AND_VISITOR", std::make_shared(CBonusSystemNode::TOWN_AND_VISITOR)}, - {"PLAYER_PROPAGATOR", std::make_shared(CBonusSystemNode::PLAYER)}, - {"HERO", std::make_shared(CBonusSystemNode::HERO)}, - {"TEAM_PROPAGATOR", std::make_shared(CBonusSystemNode::TEAM)}, //untested - {"GLOBAL_EFFECT", std::make_shared(CBonusSystemNode::GLOBAL_EFFECTS)} -}; //untested + {"BATTLE_WIDE", std::make_shared(BonusNodeType::BATTLE_WIDE)}, + {"TOWN_AND_VISITOR", std::make_shared(BonusNodeType::TOWN_AND_VISITOR)}, + {"PLAYER", std::make_shared(BonusNodeType::PLAYER)}, + {"HERO", std::make_shared(BonusNodeType::HERO)}, + {"TOWN", std::make_shared(BonusNodeType::TOWN)}, + {"ARMY", std::make_shared(BonusNodeType::ARMY)}, + {"TEAM", std::make_shared(BonusNodeType::TEAM)}, + {"GLOBAL_EFFECT", std::make_shared(BonusNodeType::GLOBAL_EFFECTS)}, + + // deprecated, for compatibility + {"VISITED_TOWN_AND_VISITOR", std::make_shared(BonusNodeType::TOWN_AND_VISITOR)}, + {"PLAYER_PROPAGATOR", std::make_shared(BonusNodeType::PLAYER)}, + {"TEAM_PROPAGATOR", std::make_shared(BonusNodeType::TEAM)}, + +}; bool IPropagator::shouldBeAttached(CBonusSystemNode *dest) const { return false; } -CBonusSystemNode::ENodeTypes IPropagator::getPropagatorType() const +BonusNodeType IPropagator::getPropagatorType() const { - return CBonusSystemNode::ENodeTypes::NONE; + return BonusNodeType::NONE; } -CPropagatorNodeType::CPropagatorNodeType(CBonusSystemNode::ENodeTypes NodeType) +CPropagatorNodeType::CPropagatorNodeType(BonusNodeType NodeType) : nodeType(NodeType) { } -CBonusSystemNode::ENodeTypes CPropagatorNodeType::getPropagatorType() const +BonusNodeType CPropagatorNodeType::getPropagatorType() const { return nodeType; } bool CPropagatorNodeType::shouldBeAttached(CBonusSystemNode *dest) const { - return nodeType == dest->getNodeType(); + if (nodeType == dest->getNodeType()) + return true; + + if (nodeType == BonusNodeType::ARMY) + return dest->getNodeType() == BonusNodeType::HERO || dest->getNodeType() == BonusNodeType::TOWN; + + return false; } VCMI_LIB_NAMESPACE_END diff --git a/lib/bonuses/Propagators.h b/lib/bonuses/Propagators.h index e30e86256..cfa9cedea 100644 --- a/lib/bonuses/Propagators.h +++ b/lib/bonuses/Propagators.h @@ -23,7 +23,7 @@ class DLL_LINKAGE IPropagator : public Serializeable public: virtual ~IPropagator() = default; virtual bool shouldBeAttached(CBonusSystemNode *dest) const; - virtual CBonusSystemNode::ENodeTypes getPropagatorType() const; + virtual BonusNodeType getPropagatorType() const; template void serialize(Handler &h) {} @@ -31,12 +31,12 @@ public: class DLL_LINKAGE CPropagatorNodeType : public IPropagator { - CBonusSystemNode::ENodeTypes nodeType; + BonusNodeType nodeType; public: - CPropagatorNodeType(CBonusSystemNode::ENodeTypes NodeType = CBonusSystemNode::ENodeTypes::UNKNOWN); + CPropagatorNodeType(BonusNodeType NodeType = BonusNodeType::UNKNOWN); bool shouldBeAttached(CBonusSystemNode *dest) const override; - CBonusSystemNode::ENodeTypes getPropagatorType() const override; + BonusNodeType getPropagatorType() const override; template void serialize(Handler &h) { diff --git a/lib/bonuses/Updaters.cpp b/lib/bonuses/Updaters.cpp index e5bf33a03..e4b0f8aef 100644 --- a/lib/bonuses/Updaters.cpp +++ b/lib/bonuses/Updaters.cpp @@ -41,7 +41,7 @@ GrowsWithLevelUpdater::GrowsWithLevelUpdater(int valPer20, int stepSize) std::shared_ptr GrowsWithLevelUpdater::createUpdatedBonus(const std::shared_ptr & b, const CBonusSystemNode & context) const { - if(context.getNodeType() == CBonusSystemNode::HERO) + if(context.getNodeType() == BonusNodeType::HERO) { int level = dynamic_cast(context).level; int steps = stepSize ? level / stepSize : level; @@ -74,7 +74,7 @@ JsonNode GrowsWithLevelUpdater::toJsonNode() const std::shared_ptr TimesHeroLevelUpdater::createUpdatedBonus(const std::shared_ptr & b, const CBonusSystemNode & context) const { - if(context.getNodeType() == CBonusSystemNode::HERO) + if(context.getNodeType() == BonusNodeType::HERO) { int level = dynamic_cast(context).level; auto newBonus = std::make_shared(*b); @@ -96,7 +96,7 @@ JsonNode TimesHeroLevelUpdater::toJsonNode() const std::shared_ptr TimesHeroLevelDivideStackLevelUpdater::createUpdatedBonus(const std::shared_ptr & b, const CBonusSystemNode & context) const { - if(context.getNodeType() == CBonusSystemNode::HERO) + if(context.getNodeType() == BonusNodeType::HERO) { auto newBonus = TimesHeroLevelUpdater::createUpdatedBonus(b, context); newBonus->updater = divideStackLevel; @@ -124,13 +124,13 @@ std::shared_ptr TimesStackSizeUpdater::apply(const std::shared_ptr std::shared_ptr TimesStackSizeUpdater::createUpdatedBonus(const std::shared_ptr & b, const CBonusSystemNode & context) const { - if(context.getNodeType() == CBonusSystemNode::STACK_INSTANCE || context.getNodeType() == CBonusSystemNode::COMMANDER) + if(context.getNodeType() == BonusNodeType::STACK_INSTANCE || context.getNodeType() == BonusNodeType::COMMANDER) { int count = dynamic_cast(context).getCount(); return apply(b, count); } - if(context.getNodeType() == CBonusSystemNode::STACK_BATTLE) + if(context.getNodeType() == BonusNodeType::STACK_BATTLE) { const auto & stack = dynamic_cast(context); return apply(b, stack.getCount()); @@ -158,13 +158,13 @@ std::shared_ptr TimesStackLevelUpdater::apply(const std::shared_ptr TimesStackLevelUpdater::createUpdatedBonus(const std::shared_ptr & b, const CBonusSystemNode & context) const { - if(context.getNodeType() == CBonusSystemNode::STACK_INSTANCE || context.getNodeType() == CBonusSystemNode::COMMANDER) + if(context.getNodeType() == BonusNodeType::STACK_INSTANCE || context.getNodeType() == BonusNodeType::COMMANDER) { int level = dynamic_cast(context).getLevel(); return apply(b, level); } - if(context.getNodeType() == CBonusSystemNode::STACK_BATTLE) + if(context.getNodeType() == BonusNodeType::STACK_BATTLE) { const auto & stack = dynamic_cast(context); //update if stack doesn't have an instance (summons, war machines) @@ -202,13 +202,13 @@ std::shared_ptr DivideStackLevelUpdater::apply(const std::shared_ptr DivideStackLevelUpdater::createUpdatedBonus(const std::shared_ptr & b, const CBonusSystemNode & context) const { - if(context.getNodeType() == CBonusSystemNode::STACK_INSTANCE || context.getNodeType() == CBonusSystemNode::COMMANDER) + if(context.getNodeType() == BonusNodeType::STACK_INSTANCE || context.getNodeType() == BonusNodeType::COMMANDER) { int level = dynamic_cast(context).getLevel(); return apply(b, level); } - if(context.getNodeType() == CBonusSystemNode::STACK_BATTLE) + if(context.getNodeType() == BonusNodeType::STACK_BATTLE) { const auto & stack = dynamic_cast(context); //update if stack doesn't have an instance (summons, war machines) diff --git a/lib/entities/artifact/CArtifact.cpp b/lib/entities/artifact/CArtifact.cpp index cd33ea4fc..7996d6565 100644 --- a/lib/entities/artifact/CArtifact.cpp +++ b/lib/entities/artifact/CArtifact.cpp @@ -293,10 +293,10 @@ bool CChargedArtifact::getRemoveOnDepletion() const } CArtifact::CArtifact() - : iconIndex(ArtifactID::NONE), + : CBonusSystemNode(BonusNodeType::ARTIFACT), + iconIndex(ArtifactID::NONE), price(0) { - setNodeType(ARTIFACT); possibleSlots[ArtBearer::HERO]; //we want to generate map entry even if it will be empty possibleSlots[ArtBearer::CREATURE]; //we want to generate map entry even if it will be empty possibleSlots[ArtBearer::COMMANDER]; diff --git a/lib/entities/artifact/CArtifactInstance.cpp b/lib/entities/artifact/CArtifactInstance.cpp index 3d0e124c3..622735a29 100644 --- a/lib/entities/artifact/CArtifactInstance.cpp +++ b/lib/entities/artifact/CArtifactInstance.cpp @@ -224,7 +224,7 @@ CArtifactInstance::CArtifactInstance(IGameInfoCallback *cb, const CArtifact * ar } CArtifactInstance::CArtifactInstance(IGameInfoCallback *cb) - : CBonusSystemNode(ARTIFACT_INSTANCE) + : CBonusSystemNode(BonusNodeType::ARTIFACT_INSTANCE) , CCombinedArtifactInstance(cb) { } diff --git a/lib/entities/faction/CTownHandler.cpp b/lib/entities/faction/CTownHandler.cpp index cb5649c24..819325383 100644 --- a/lib/entities/faction/CTownHandler.cpp +++ b/lib/entities/faction/CTownHandler.cpp @@ -251,10 +251,10 @@ void CTownHandler::loadBuildingBonuses(const JsonNode & source, BonusList & bonu bonus->description.appendTextID(building->getNameTextID()); //JsonUtils::parseBuildingBonus produces UNKNOWN type propagator instead of empty. - assert(bonus->propagator == nullptr || bonus->propagator->getPropagatorType() != CBonusSystemNode::ENodeTypes::UNKNOWN); + assert(bonus->propagator == nullptr || bonus->propagator->getPropagatorType() != BonusNodeType::UNKNOWN); if(bonus->propagator != nullptr - && bonus->propagator->getPropagatorType() == CBonusSystemNode::ENodeTypes::UNKNOWN) + && bonus->propagator->getPropagatorType() == BonusNodeType::UNKNOWN) bonus->addPropagator(emptyPropagator()); building->addNewBonus(bonus, bonusList); } diff --git a/lib/gameState/CGameState.cpp b/lib/gameState/CGameState.cpp index 75cc3b4dd..82af19c03 100644 --- a/lib/gameState/CGameState.cpp +++ b/lib/gameState/CGameState.cpp @@ -152,9 +152,9 @@ int CGameState::getDate(Date mode) const } CGameState::CGameState() + :globalEffects(BonusNodeType::GLOBAL_EFFECTS) { heroesPool = std::make_unique(this); - globalEffects.setNodeType(CBonusSystemNode::GLOBAL_EFFECTS); } CGameState::~CGameState() @@ -1596,9 +1596,8 @@ CGHeroInstance * CGameState::getUsedHero(const HeroTypeID & hid) const } TeamState::TeamState() -{ - setNodeType(TEAM); -} + :CBonusSystemNode(BonusNodeType::TEAM) +{} CArtifactInstance * CGameState::createScroll(const SpellID & spellId) { diff --git a/lib/mapObjects/CArmedInstance.cpp b/lib/mapObjects/CArmedInstance.cpp index 169c135e2..ac0d54f50 100644 --- a/lib/mapObjects/CArmedInstance.cpp +++ b/lib/mapObjects/CArmedInstance.cpp @@ -42,13 +42,13 @@ void CArmedInstance::randomizeArmy(FactionID type) } CArmedInstance::CArmedInstance(IGameInfoCallback *cb) - :CArmedInstance(cb, false) + :CArmedInstance(cb, BonusNodeType::ARMY, false) { } -CArmedInstance::CArmedInstance(IGameInfoCallback *cb, bool isHypothetic): +CArmedInstance::CArmedInstance(IGameInfoCallback *cb, BonusNodeType nodeType, bool isHypothetic): CGObjectInstance(cb), - CBonusSystemNode(isHypothetic), + CBonusSystemNode(nodeType, isHypothetic), nonEvilAlignmentMix(this, Selector::type()(BonusType::NONEVIL_ALIGNMENT_MIX)), // Take Angelic Alliance troop-mixing freedom of non-evil units into account. battle(nullptr) { diff --git a/lib/mapObjects/CArmedInstance.h b/lib/mapObjects/CArmedInstance.h index d0f157837..a5da54ee1 100644 --- a/lib/mapObjects/CArmedInstance.h +++ b/lib/mapObjects/CArmedInstance.h @@ -51,7 +51,7 @@ public: ////////////////////////////////////////////////////////////////////////// CArmedInstance(IGameInfoCallback *cb); - CArmedInstance(IGameInfoCallback *cb, bool isHypothetic); + CArmedInstance(IGameInfoCallback *cb, BonusNodeType nodeType, bool isHypothetic); PlayerColor getOwner() const override { diff --git a/lib/mapObjects/CGDwelling.cpp b/lib/mapObjects/CGDwelling.cpp index 69ebdff4c..34599c211 100644 --- a/lib/mapObjects/CGDwelling.cpp +++ b/lib/mapObjects/CGDwelling.cpp @@ -50,7 +50,11 @@ void CGDwellingRandomizationInfo::serializeJson(JsonSerializeFormat & handler) } CGDwelling::CGDwelling(IGameInfoCallback *cb): - CArmedInstance(cb) + CGDwelling(cb, BonusNodeType::ARMY) +{} + +CGDwelling::CGDwelling(IGameInfoCallback *cb, BonusNodeType nodeType): + CArmedInstance(cb, nodeType, false) {} CGDwelling::~CGDwelling() = default; diff --git a/lib/mapObjects/CGDwelling.h b/lib/mapObjects/CGDwelling.h index 3bb78f31a..bf578f1d7 100644 --- a/lib/mapObjects/CGDwelling.h +++ b/lib/mapObjects/CGDwelling.h @@ -39,6 +39,7 @@ public: std::optional randomizationInfo; //random dwelling options; not serialized TCreaturesSet creatures; //creatures[level] -> + CGDwelling(IGameInfoCallback *cb, BonusNodeType nodeType); CGDwelling(IGameInfoCallback *cb); ~CGDwelling() override; diff --git a/lib/mapObjects/CGHeroInstance.cpp b/lib/mapObjects/CGHeroInstance.cpp index 7efbf9a76..112b4c0e0 100644 --- a/lib/mapObjects/CGHeroInstance.cpp +++ b/lib/mapObjects/CGHeroInstance.cpp @@ -244,7 +244,7 @@ int CGHeroInstance::movementPointsLimitCached(bool onLand, const TurnInfo * ti) } CGHeroInstance::CGHeroInstance(IGameInfoCallback * cb) - : CArmedInstance(cb), + : CArmedInstance(cb, BonusNodeType::HERO, false), CArtifactSet(cb), tacticFormationEnabled(false), inTownGarrison(false), @@ -259,7 +259,6 @@ CGHeroInstance::CGHeroInstance(IGameInfoCallback * cb) turnInfoCache(std::make_unique(this)), manaPerKnowledgeCached(this, Selector::type()(BonusType::MANA_PER_KNOWLEDGE_PERCENTAGE)) { - setNodeType(HERO); ID = Obj::HERO; secSkills.emplace_back(SecondarySkill::NONE, -1); } diff --git a/lib/mapObjects/CGTownInstance.cpp b/lib/mapObjects/CGTownInstance.cpp index d31e683f5..a49c3279f 100644 --- a/lib/mapObjects/CGTownInstance.cpp +++ b/lib/mapObjects/CGTownInstance.cpp @@ -261,8 +261,9 @@ TownFortifications CGTownInstance::fortificationsLevel() const } CGTownInstance::CGTownInstance(IGameInfoCallback *cb): - CGDwelling(cb), + CGDwelling(cb, BonusNodeType::TOWN), IMarket(cb), + townAndVis(BonusNodeType::TOWN_AND_VISITOR), built(0), destroyed(0), identifier(0), @@ -271,7 +272,6 @@ CGTownInstance::CGTownInstance(IGameInfoCallback *cb): spellResearchAcceptedCounter(0), spellResearchAllowed(true) { - setNodeType(CBonusSystemNode::TOWN); attachTo(townAndVis); } @@ -1209,11 +1209,6 @@ GrowthInfo::Entry::Entry(int _count, std::string fullDescription): { } -CTownAndVisitingHero::CTownAndVisitingHero() -{ - setNodeType(TOWN_AND_VISITOR); -} - int GrowthInfo::totalGrowth() const { int ret = 0; diff --git a/lib/mapObjects/CGTownInstance.h b/lib/mapObjects/CGTownInstance.h index 876df4206..ff436df35 100644 --- a/lib/mapObjects/CGTownInstance.h +++ b/lib/mapObjects/CGTownInstance.h @@ -26,12 +26,6 @@ struct DamageRange; template class LogicalExpression; -class DLL_LINKAGE CTownAndVisitingHero : public CBonusSystemNode -{ -public: - CTownAndVisitingHero(); -}; - struct DLL_LINKAGE GrowthInfo { struct Entry @@ -61,7 +55,7 @@ class DLL_LINKAGE CGTownInstance : public CGDwelling, public IShipyard, public I public: enum EFortLevel {NONE = 0, FORT = 1, CITADEL = 2, CASTLE = 3}; - CTownAndVisitingHero townAndVis; + CBonusSystemNode townAndVis; si32 built; //how many buildings has been built this turn si32 destroyed; //how many buildings has been destroyed this turn ui32 identifier; //special identifier from h3m (only > RoE maps) diff --git a/lib/mapObjects/FlaggableMapObject.cpp b/lib/mapObjects/FlaggableMapObject.cpp index 50c872875..1a6e7b976 100644 --- a/lib/mapObjects/FlaggableMapObject.cpp +++ b/lib/mapObjects/FlaggableMapObject.cpp @@ -22,6 +22,11 @@ VCMI_LIB_NAMESPACE_BEGIN +FlaggableMapObject::FlaggableMapObject(IGameInfoCallback *cb) + :CGObjectInstance(cb) + ,CBonusSystemNode(BonusNodeType::UNKNOWN) +{} + const IOwnableObject * FlaggableMapObject::asOwnable() const { return this; diff --git a/lib/mapObjects/FlaggableMapObject.h b/lib/mapObjects/FlaggableMapObject.h index bbcf0260f..add5f9454 100644 --- a/lib/mapObjects/FlaggableMapObject.h +++ b/lib/mapObjects/FlaggableMapObject.h @@ -25,7 +25,7 @@ class DLL_LINKAGE FlaggableMapObject final : public CGObjectInstance, public IOw void initBonuses(); public: - using CGObjectInstance::CGObjectInstance; + FlaggableMapObject(IGameInfoCallback *cb); void onHeroVisit(IGameEventCallback & gameEvents, const CGHeroInstance * h) const override; void initObj(IGameRandomizer & gameRandomizer) override; diff --git a/lib/mapObjects/MiscObjects.cpp b/lib/mapObjects/MiscObjects.cpp index 43e790c72..69df9400e 100644 --- a/lib/mapObjects/MiscObjects.cpp +++ b/lib/mapObjects/MiscObjects.cpp @@ -930,7 +930,7 @@ void CGGarrison::addAntimagicGarrisonBonus() bonus->type = BonusType::BLOCK_ALL_MAGIC; bonus->source = BonusSource::OBJECT_TYPE; bonus->sid = BonusSourceID(this->ID); - bonus->propagator = std::make_shared(CBonusSystemNode::BATTLE); + bonus->propagator = std::make_shared(BonusNodeType::BATTLE_WIDE); bonus->duration = BonusDuration::PERMANENT; this->addNewBonus(bonus); } @@ -987,6 +987,7 @@ void CGMagi::onHeroVisit(IGameEventCallback & gameEvents, const CGHeroInstance * CGBoat::CGBoat(IGameInfoCallback * cb) : CGObjectInstance(cb) + , CBonusSystemNode(BonusNodeType::BOAT) { direction = 4; layer = EPathfindingLayer::SAIL; diff --git a/lib/serializer/RegisterTypes.h b/lib/serializer/RegisterTypes.h index 28cc95d52..668f5d388 100644 --- a/lib/serializer/RegisterTypes.h +++ b/lib/serializer/RegisterTypes.h @@ -86,7 +86,7 @@ void registerTypes(Serializer &s) s.template registerType(23); s.template registerType(24); s.template registerType(25); - s.template registerType(26); +// s.template registerType(26); s.template registerType(27); s.template registerType(28); s.template registerType(30); From 50151444fc21a7b0d2d75fdc5e006a4c59e01d60 Mon Sep 17 00:00:00 2001 From: Laserlicht <13953785+Laserlicht@users.noreply.github.com> Date: Wed, 25 Jun 2025 17:25:19 +0200 Subject: [PATCH 38/60] show path --- client/adventureMap/AdventureMapInterface.cpp | 6 ++++++ client/mapView/MapRenderer.cpp | 3 ++- client/windows/settings/AdventureOptionsTab.cpp | 13 +++++++++++++ config/schemas/settings.json | 7 +++++-- config/widgets/settings/adventureOptionsTab.json | 7 ++++--- 5 files changed, 30 insertions(+), 6 deletions(-) diff --git a/client/adventureMap/AdventureMapInterface.cpp b/client/adventureMap/AdventureMapInterface.cpp index 60081585a..18b6b96af 100644 --- a/client/adventureMap/AdventureMapInterface.cpp +++ b/client/adventureMap/AdventureMapInterface.cpp @@ -562,6 +562,12 @@ void AdventureMapInterface::onTileLeftClicked(const int3 &targetPosition) if(topBlocking && topBlocking->isVisitable() && !topBlocking->visitableAt(destinationTile) && settings["gameTweaks"]["simpleObjectSelection"].Bool()) destinationTile = topBlocking->visitablePos(); + if(!settings["adventure"]["showMovePath"].Bool()) + { + GAME->interface()->localState->setPath(currentHero, destinationTile); + onHeroChanged(currentHero); + } + if(GAME->interface()->localState->hasPath(currentHero) && GAME->interface()->localState->getPath(currentHero).endPos() == destinationTile && !ENGINE->isKeyboardShiftDown())//we'll be moving diff --git a/client/mapView/MapRenderer.cpp b/client/mapView/MapRenderer.cpp index 9c157b264..3b97aac91 100644 --- a/client/mapView/MapRenderer.cpp +++ b/client/mapView/MapRenderer.cpp @@ -22,6 +22,7 @@ #include "../render/Colors.h" #include "../render/Graphics.h" +#include "../../lib/CConfigHandler.h" #include "../../lib/RiverHandler.h" #include "../../lib/RoadHandler.h" #include "../../lib/TerrainHandler.h" @@ -677,7 +678,7 @@ void MapRendererPath::renderTile(IMapRendererContext & context, Canvas & target, { size_t imageID = selectImage(context, coordinates); - if (imageID < pathNodes->size()) + if (imageID < pathNodes->size() && settings["adventure"]["showMovePath"].Bool()) target.draw(pathNodes->getImage(imageID), Point(0,0)); } diff --git a/client/windows/settings/AdventureOptionsTab.cpp b/client/windows/settings/AdventureOptionsTab.cpp index 840cc81b2..b8533153a 100644 --- a/client/windows/settings/AdventureOptionsTab.cpp +++ b/client/windows/settings/AdventureOptionsTab.cpp @@ -12,6 +12,9 @@ #include "AdventureOptionsTab.h" #include "../../GameEngine.h" +#include "../../GameInstance.h" +#include "../../CPlayerInterface.h" +#include "../../PlayerLocalState.h" #include "../../eventsSDL/InputHandler.h" #include "../../gui/WindowHandler.h" #include "../../widgets/Buttons.h" @@ -153,6 +156,13 @@ AdventureOptionsTab::AdventureOptionsTab() setBoolSetting("adventure", "minimapShowHeroes", value); ENGINE->windows().totalRedraw(); }); + addCallback("showMovePathChanged", [](bool value) + { + setBoolSetting("adventure", "showMovePath", value); + if (GAME->interface()->makingTurn && GAME->interface()->localState->getCurrentHero()) + GAME->interface()->localState->erasePath(GAME->interface()->localState->getCurrentHero()); + ENGINE->windows().totalRedraw(); + }); build(config); std::shared_ptr playerHeroSpeedToggle = widget("heroMovementSpeedPicker"); @@ -208,4 +218,7 @@ AdventureOptionsTab::AdventureOptionsTab() std::shared_ptr minimapShowHeroesCheckbox = widget("minimapShowHeroesCheckbox"); minimapShowHeroesCheckbox->setSelected(settings["adventure"]["minimapShowHeroes"].Bool()); + + std::shared_ptr showMovePathCheckbox = widget("showMovePathCheckbox"); + showMovePathCheckbox->setSelected(settings["adventure"]["showMovePath"].Bool()); } diff --git a/config/schemas/settings.json b/config/schemas/settings.json index 04caaae09..7cdf9f685 100644 --- a/config/schemas/settings.json +++ b/config/schemas/settings.json @@ -387,7 +387,7 @@ "type" : "object", "additionalProperties" : false, "default" : {}, - "required" : [ "heroMoveTime", "enemyMoveTime", "scrollSpeedPixels", "heroReminder", "quickCombat", "objectAnimation", "terrainAnimation", "forceQuickCombat", "borderScroll", "leftButtonDrag", "rightButtonDrag", "smoothDragging", "backgroundDimLevel", "hideBackground", "backgroundDimSmallWindows", "tileZoom", "minimapShowHeroes" ], + "required" : [ "heroMoveTime", "enemyMoveTime", "scrollSpeedPixels", "heroReminder", "quickCombat", "objectAnimation", "terrainAnimation", "forceQuickCombat", "borderScroll", "leftButtonDrag", "rightButtonDrag", "smoothDragging", "backgroundDimLevel", "hideBackground", "backgroundDimSmallWindows", "tileZoom", "minimapShowHeroes", "showMovePath" ], "properties" : { "heroMoveTime" : { "type" : "number", @@ -456,10 +456,13 @@ "type" : "boolean", "default" : true }, - "tileZoom" : { "type" : "number", "default" : 32 + }, + "showMovePath" : { + "type" : "boolean", + "default" : true } } }, diff --git a/config/widgets/settings/adventureOptionsTab.json b/config/widgets/settings/adventureOptionsTab.json index 8e4b8e154..7640b4ee1 100644 --- a/config/widgets/settings/adventureOptionsTab.json +++ b/config/widgets/settings/adventureOptionsTab.json @@ -289,7 +289,7 @@ "items": [ { - "text": "core.genrltxt.572" // TODO: show move path + "text": "core.genrltxt.572" // show move path }, { "text": "core.genrltxt.573" // show hero reminder @@ -315,8 +315,9 @@ "items": [ { - "name": "showMovePathPlaceholder", - "type": "checkboxFake" + "name": "showMovePathCheckbox", + "help": "core.help.360", + "callback": "showMovePathChanged" }, { "name": "heroReminderCheckbox", From dec4826b545aaab5f7efa258f9e3a2c5737f06fa Mon Sep 17 00:00:00 2001 From: Ivan Savenko Date: Thu, 26 Jun 2025 15:10:39 +0300 Subject: [PATCH 39/60] Update docs, remove old propagator names --- config/artifacts.json | 12 ++++---- config/buildingsLibrary.json | 8 ++--- config/creatures/castle.json | 4 +-- config/factions/castle.json | 6 ++-- config/factions/necropolis.json | 4 +-- config/factions/rampart.json | 2 +- config/objects/lighthouse.json | 2 +- config/schemas/bonusInstance.json | 39 ++++++++++++++++++++++++- docs/modders/Bonus/Bonus_Propagators.md | 24 +++++++++++---- 9 files changed, 75 insertions(+), 26 deletions(-) diff --git a/config/artifacts.json b/config/artifacts.json index d0addb117..e78fa7159 100644 --- a/config/artifacts.json +++ b/config/artifacts.json @@ -1733,7 +1733,7 @@ "type" : "CREATURE_GROWTH", "subtype" : "creatureLevel2", "val" : 5, - "propagator": "VISITED_TOWN_AND_VISITOR" + "propagator": "TOWN_AND_VISITOR" } } }, @@ -1746,7 +1746,7 @@ "type" : "CREATURE_GROWTH", "subtype" : "creatureLevel3", "val" : 4, - "propagator": "VISITED_TOWN_AND_VISITOR" + "propagator": "TOWN_AND_VISITOR" } } }, @@ -1759,7 +1759,7 @@ "type" : "CREATURE_GROWTH", "subtype" : "creatureLevel4", "val" : 3, - "propagator": "VISITED_TOWN_AND_VISITOR" + "propagator": "TOWN_AND_VISITOR" } } }, @@ -1772,7 +1772,7 @@ "type" : "CREATURE_GROWTH", "subtype" : "creatureLevel5", "val" : 2, - "propagator": "VISITED_TOWN_AND_VISITOR" + "propagator": "TOWN_AND_VISITOR" } } }, @@ -1785,7 +1785,7 @@ "type" : "CREATURE_GROWTH", "subtype" : "creatureLevel6", "val" : 1, - "propagator": "VISITED_TOWN_AND_VISITOR" + "propagator": "TOWN_AND_VISITOR" } } }, @@ -2094,7 +2094,7 @@ "growth" : { "type" : "CREATURE_GROWTH_PERCENT", "val" : 50, - "propagator": "PLAYER_PROPAGATOR" + "propagator": "PLAYER" } } }, diff --git a/config/buildingsLibrary.json b/config/buildingsLibrary.json index 2bcb3b598..aeadafa94 100644 --- a/config/buildingsLibrary.json +++ b/config/buildingsLibrary.json @@ -12,7 +12,7 @@ "val": 1 }, { - "propagator": "PLAYER_PROPAGATOR", + "propagator": "PLAYER", "type": "THIEVES_GUILD_ACCESS", "val": 1 } @@ -130,7 +130,7 @@ "lighthouse" : { "bonuses": [ { - "propagator": "PLAYER_PROPAGATOR", + "propagator": "PLAYER", "type": "MOVEMENT", "subtype": "heroMovementSea", "val": 500 @@ -257,10 +257,10 @@ "thievesGuild" : { "bonuses": [ { - "propagator": "PLAYER_PROPAGATOR", + "propagator": "PLAYER", "type": "THIEVES_GUILD_ACCESS", "val": 2 } ] } -} \ No newline at end of file +} diff --git a/config/creatures/castle.json b/config/creatures/castle.json index a703d486d..d5020df1f 100644 --- a/config/creatures/castle.json +++ b/config/creatures/castle.json @@ -359,7 +359,7 @@ { "type" : "MORALE", "val" : 1, - "propagator" : "HERO", + "propagator" : "ARMY", "description" : "PLACEHOLDER", "stacking" : "Angels" }, @@ -427,7 +427,7 @@ "raisesMorale" : { "type" : "MORALE", "val" : 1, - "propagator" : "HERO", + "propagator" : "ARMY", "description" : "@creatures.core.angel.bonus.raisesMorale", "stacking" : "Angels" }, diff --git a/config/factions/castle.json b/config/factions/castle.json index 150f0d84d..3a856220b 100644 --- a/config/factions/castle.json +++ b/config/factions/castle.json @@ -172,7 +172,7 @@ "special1": { "bonuses": [ { - "propagator": "PLAYER_PROPAGATOR", + "propagator": "PLAYER", "type": "MOVEMENT", "subtype": "heroMovementSea", "val": 500 @@ -205,14 +205,14 @@ "val": 2 }, { - "propagator": "PLAYER_PROPAGATOR", + "propagator": "PLAYER", "type": "THIEVES_GUILD_ACCESS", "val": 1 } ], "upgrades" : "tavern" }, - "grail": { "id" : 26, "mode" : "grail", "produce": { "gold": 5000 }, "bonuses": [ { "type": "MORALE", "val": 2, "propagator": "PLAYER_PROPAGATOR" } ] }, + "grail": { "id" : 26, "mode" : "grail", "produce": { "gold": 5000 }, "bonuses": [ { "type": "MORALE", "val": 2, "propagator": "PLAYER" } ] }, "dwellingLvl1": { "id" : 30, "requires" : [ "fort" ] }, "dwellingLvl2": { "id" : 31, "requires" : [ "dwellingLvl1" ] }, diff --git a/config/factions/necropolis.json b/config/factions/necropolis.json index 6cc148671..31f092ce5 100644 --- a/config/factions/necropolis.json +++ b/config/factions/necropolis.json @@ -180,10 +180,10 @@ "horde1Upgr": { "id" : 19, "upgrades" : "dwellingUpLvl1", "requires" : [ "horde1" ], "mode" : "auto" }, "ship": { "id" : 20, "upgrades" : "shipyard" }, "special2": { "requires" : [ "mageGuild1" ], - "bonuses": [ { "type": "UNDEAD_RAISE_PERCENTAGE", "val": 10, "propagator": "PLAYER_PROPAGATOR" } ] }, + "bonuses": [ { "type": "UNDEAD_RAISE_PERCENTAGE", "val": 10, "propagator": "PLAYER" } ] }, "special3": { "requires" : [ "dwellingLvl1" ], "marketModes" : ["creature-undead"] }, "grail": { "id" : 26, "mode" : "grail", "produce": { "gold": 5000 }, - "bonuses": [ { "type": "UNDEAD_RAISE_PERCENTAGE", "val": 20, "propagator": "PLAYER_PROPAGATOR" } ] }, + "bonuses": [ { "type": "UNDEAD_RAISE_PERCENTAGE", "val": 20, "propagator": "PLAYER" } ] }, "extraTownHall": { "id" : 27, "requires" : [ "townHall" ], "mode" : "auto" }, "extraCityHall": { "id" : 28, "requires" : [ "cityHall" ], "mode" : "auto" }, diff --git a/config/factions/rampart.json b/config/factions/rampart.json index b840776c6..8d1c5c0b5 100644 --- a/config/factions/rampart.json +++ b/config/factions/rampart.json @@ -188,7 +188,7 @@ "special3": { "type" : "treasury", "requires" : [ "horde1" ] }, "horde2": { "id" : 24, "upgrades" : "dwellingLvl5" }, "horde2Upgr": { "id" : 25, "upgrades" : "dwellingUpLvl5", "requires" : [ "horde2" ], "mode" : "auto" }, - "grail": { "id" : 26, "mode" : "grail", "produce": { "gold": 5000 }, "bonuses": [ { "type": "LUCK", "val": 2, "propagator": "PLAYER_PROPAGATOR" } ] }, + "grail": { "id" : 26, "mode" : "grail", "produce": { "gold": 5000 }, "bonuses": [ { "type": "LUCK", "val": 2, "propagator": "PLAYER" } ] }, "extraTownHall": { "id" : 27, "requires" : [ "townHall" ], "mode" : "auto" }, "extraCityHall": { "id" : 28, "requires" : [ "cityHall" ], "mode" : "auto" }, diff --git a/config/objects/lighthouse.json b/config/objects/lighthouse.json index e3949e829..518244b70 100644 --- a/config/objects/lighthouse.json +++ b/config/objects/lighthouse.json @@ -21,7 +21,7 @@ "type" : "MOVEMENT", "subtype" : "heroMovementSea", "val" : 500, - "propagator": "PLAYER_PROPAGATOR" + "propagator": "PLAYER" } } } diff --git a/config/schemas/bonusInstance.json b/config/schemas/bonusInstance.json index a0d20e1a3..4e32454f9 100644 --- a/config/schemas/bonusInstance.json +++ b/config/schemas/bonusInstance.json @@ -107,6 +107,43 @@ "description" : "Maximal bonus value" } } + }, + { + "description" : "TIMES_ARMY_SIZE updater", + "type" : "object", + "required" : ["type"], + "additionalProperties" : false, + "properties" : { + "type" : { + "type" : "string", + "const" : "TIMES_ARMY_SIZE", + }, + "stepSize" : { + "type" : "integer", + "minimum" : 1, + "description" : "Size of each step, in levels" + }, + "minimum" : { + "type" : "integer", + "description" : "Minimal bonus value" + }, + "maximum" : { + "type" : "integer", + "description" : "Maximal bonus value" + }, + "filteredLevel" : { + "type" : "integer", + "description" : "Level of units to count" + }, + "filteredFaction" : { + "type" : "string", + "description" : "Faction of units to count" + }, + "filteredCreature" : { + "type" : "string", + "description" : "Specific unit to count" + } + } } ] } @@ -138,7 +175,7 @@ "propagator" : { "description" : "propagator", "type" : "string", - "enum" : [ "BATTLE_WIDE", "VISITED_TOWN_AND_VISITOR", "PLAYER_PROPAGATOR", "HERO", "TEAM_PROPAGATOR", "GLOBAL_EFFECT" ] + "enum" : [ "BATTLE_WIDE", "TOWN_AND_VISITOR", "PLAYER", "HERO", "TOWN", "ARMY", "TEAM", "GLOBAL_EFFECT" ] }, "updater" : { "$ref" : "#/definitions/updater" diff --git a/docs/modders/Bonus/Bonus_Propagators.md b/docs/modders/Bonus/Bonus_Propagators.md index 2a3e93e20..c82ef2e78 100644 --- a/docs/modders/Bonus/Bonus_Propagators.md +++ b/docs/modders/Bonus/Bonus_Propagators.md @@ -1,10 +1,22 @@ # Bonus Propagators +Propagators allow to propagate bonus effect "upwards". For example, they can be used to make unit ability battle-wide, or to provide some bonuses to hero. See [Bonus System Guide](../Guides/Bonus_System.md) for more information. + ## Available propagators -- BATTLE_WIDE: Affects both sides during battle -- VISITED_TOWN_AND_VISITOR: Used with Legion artifacts (town visited by hero) -- PLAYER_PROPAGATOR: Bonus will affect all objects owned by player. Used by Statue of Legion. -- HERO: Bonus will be transferred to hero (for example from stacks in his army). -- TEAM_PROPAGATOR: Bonus will affect all objects owned by player and his allies. -- GLOBAL_EFFECT: This effect will influence all creatures, heroes and towns on the map. +- `ARMY`: Propagators that allow bonuses to be transferred to an army. It is typically used by creature abilities to affect the army that the creature is part of. +- `HERO`: Similar to `ARMY`, but works only with armies led by heroes. +- `TOWN`: Similar to `ARMY`, but only affects units that are part of the town garrison. +- `TOWN_AND_VISITOR`: Propagator that allows the town and the visiting hero to interact. It can be used to propagate the effects of town buildings to the visiting hero outside of combat or the effects of the hero to the town (e.g. Legion artifacts) +- `BATTLE_WIDE` - Propagator that allows bonuses to affect all entities in battles. It is typically used for creature abilities or artifacts that need to affect either both sides or only the enemy side in combat. +- `PLAYER`: The bonus affects all objects owned by the player. Used by the Statue of Legion. +- `TEAM`: The bonus affects all objects owned by the player and their allies. +- `GLOBAL_EFFECT`: This effect influences all creatures, towns and recruited heroes on the map. + +## Deprecated propagators + +These propagators are still supported, but in future they may be removed. + +- `VISITED_TOWN_AND_VISITOR`: Replaced by `TOWN_AND_VISITOR` +- `PLAYER_PROPAGATOR`: Replaced by `PLAYER` +- `TEAM_PROPAGATOR`: Replaced by `TEAM` From 135768e763b84b67821a65502a64f92342a7ba5a Mon Sep 17 00:00:00 2001 From: Ivan Savenko Date: Thu, 26 Jun 2025 15:10:55 +0300 Subject: [PATCH 40/60] Added TIMES_ARMY_SIZE updater --- docs/modders/Bonus/Bonus_Updaters.md | 48 ++++++++++++++++++++++++++++ lib/bonuses/Updaters.cpp | 38 ++++++++++++++++++++++ lib/bonuses/Updaters.h | 24 ++++++++++++++ lib/json/JsonBonus.cpp | 29 +++++++++++++++++ lib/serializer/RegisterTypes.h | 2 ++ 5 files changed, 141 insertions(+) diff --git a/docs/modders/Bonus/Bonus_Updaters.md b/docs/modders/Bonus/Bonus_Updaters.md index c6cfbb7d2..19124ae48 100644 --- a/docs/modders/Bonus/Bonus_Updaters.md +++ b/docs/modders/Bonus/Bonus_Updaters.md @@ -107,6 +107,54 @@ Example of long form with custom parameters: } ``` +## TIMES_ARMY_SIZE + +Effect: Updates val to `val = clamp(val * floor(stackSize / stepSize), minimum, maximum)`, where stackSize is total number of creatures in hero army that fulful filter + +Parameters: +- `minimum`: minimum possible value of the bonus value. Unlimited by default +- `minimum`: maximum possible value of the bonus value. Unlimited by default +- `stepSize`: number of units needed to increase updater multiplier by 1 +- `filteredCreature`: identifier of specific unit to filter +- `filteredLevel`: level of units that need to be counted. Redundant if `filteredCreature` is used +- `filteredFaction`: faction of units that need to be counted. Redundant if `filteredCreature` is used + +Filtering for specific unit: + +```json +"updater" : { + "type" : "TIMES_ARMY_SIZE", + "filteredCreature" : "pikeman", + + // Optional, by default - unlimited + "minimum" : 0, + + // Optional, by default - unlimited + "maximum" : 100, + + // Optional, by default - 1 + "stepSize" : 2 +} +``` + +Filtering for specific faction: + +```json +"updater" : { + "type" : "TIMES_STACK_SIZE", + "filteredFaction" : "castle" +} +``` + +Filtering for specific unit level: + +```json +"updater" : { + "type" : "TIMES_STACK_SIZE", + "filteredLevel" : 2 +} +``` + ## BONUS_OWNER_UPDATER Helper updater for proper functionality of `OPPOSITE_SIDE` limiter diff --git a/lib/bonuses/Updaters.cpp b/lib/bonuses/Updaters.cpp index e4b0f8aef..161b2d3f0 100644 --- a/lib/bonuses/Updaters.cpp +++ b/lib/bonuses/Updaters.cpp @@ -148,6 +148,44 @@ JsonNode TimesStackSizeUpdater::toJsonNode() const return JsonNode("TIMES_STACK_SIZE"); } +std::shared_ptr TimesArmySizeUpdater::createUpdatedBonus(const std::shared_ptr & b, const CBonusSystemNode & context) const +{ + if(context.getNodeType() == BonusNodeType::ARMY || context.getNodeType() == BonusNodeType::HERO || context.getNodeType() == BonusNodeType::TOWN) + { + const auto & army = dynamic_cast(context); + int totalSize = 0; + for (const auto & unit : army.Slots()) + { + if (filteredCreature.hasValue() && filteredCreature != unit.second->getCreatureID()) + continue; + + if (filteredFaction.hasValue() && filteredFaction != unit.second->getFactionID()) + continue; + + if (filteredLevel != -1 && filteredLevel != unit.second->getLevel()) + continue; + + totalSize += unit.second->getCount(); + } + + auto newBonus = std::make_shared(*b); + newBonus->val *= std::clamp(totalSize / stepSize, minimum, maximum); + return newBonus; + } + return b; +} + +std::string TimesArmySizeUpdater::toString() const +{ + return "TimesArmySizeUpdater"; +} + +JsonNode TimesArmySizeUpdater::toJsonNode() const +{ + return JsonNode("TIMES_ARMY_SIZE"); +} + + std::shared_ptr TimesStackLevelUpdater::apply(const std::shared_ptr & b, int level) const { auto newBonus = std::make_shared(*b); diff --git a/lib/bonuses/Updaters.h b/lib/bonuses/Updaters.h index c5c35808e..f764850fe 100644 --- a/lib/bonuses/Updaters.h +++ b/lib/bonuses/Updaters.h @@ -113,6 +113,30 @@ public: } }; +class DLL_LINKAGE TimesArmySizeUpdater : public IUpdater +{ +public: + int minimum = std::numeric_limits::min(); + int maximum = std::numeric_limits::max(); + int stepSize = 1; + int filteredLevel = -1; + CreatureID filteredCreature; + FactionID filteredFaction; + TimesArmySizeUpdater() = default; + + std::shared_ptr createUpdatedBonus(const std::shared_ptr & b, const CBonusSystemNode & context) const override; + std::string toString() const override; + JsonNode toJsonNode() const override; + + template void serialize(Handler & h) + { + h & static_cast(*this); + h & minimum; + h & maximum; + h & stepSize; + } +}; + class DLL_LINKAGE TimesStackLevelUpdater : public IUpdater { std::shared_ptr apply(const std::shared_ptr & b, int level) const; diff --git a/lib/json/JsonBonus.cpp b/lib/json/JsonBonus.cpp index 4e1e910ab..8866419d3 100644 --- a/lib/json/JsonBonus.cpp +++ b/lib/json/JsonBonus.cpp @@ -428,6 +428,35 @@ static TUpdaterPtr parseUpdater(const JsonNode & updaterJson) } return std::make_shared(minimum, maximum, std::max(1, stepSize)); } + if(updaterJson["type"].String() == "TIMES_ARMY_SIZE") + { + auto result = std::make_shared(); + + result->minimum = updaterJson["minimum"].isNull() ? std::numeric_limits::min() : updaterJson["minimum"].Integer(); + result->maximum = updaterJson["maximum"].isNull() ? std::numeric_limits::max() : updaterJson["maximum"].Integer(); + result->stepSize = updaterJson["stepSize"].isNull() ? 1 : updaterJson["stepSize"].Integer(); + result->filteredLevel = updaterJson["filteredLevel"].isNull() ? -1 : updaterJson["filteredLevel"].Integer(); + if (result->minimum > result->maximum) + { + logMod->warn("TIMES_ARMY_SIZE updater: minimum value (%d) is above maximum value(%d)!", result->minimum, result->maximum); + std::swap(result->minimum, result->maximum); + } + if (!updaterJson["filteredFaction"].isNull()) + { + LIBRARY->identifiers()->requestIdentifier( "faction", updaterJson["filteredFaction"], [result](int32_t identifier) + { + result->filteredFaction = FactionID(identifier); + }); + } + if (!updaterJson["filteredCreature"].isNull()) + { + LIBRARY->identifiers()->requestIdentifier( "creature", updaterJson["filteredCreature"], [result](int32_t identifier) + { + result->filteredCreature = CreatureID(identifier); + }); + } + return result; + } else logMod->warn("Unknown updater type \"%s\"", updaterJson["type"].String()); break; diff --git a/lib/serializer/RegisterTypes.h b/lib/serializer/RegisterTypes.h index 668f5d388..b124656ca 100644 --- a/lib/serializer/RegisterTypes.h +++ b/lib/serializer/RegisterTypes.h @@ -298,6 +298,8 @@ void registerTypes(Serializer &s) s.template registerType(246); s.template registerType(247); s.template registerType(248); + s.template registerType(249); + s.template registerType(250); } VCMI_LIB_NAMESPACE_END From 31786c81357fbce5dc0d1f994b4c7f3d06f855d6 Mon Sep 17 00:00:00 2001 From: Ivan Savenko Date: Thu, 26 Jun 2025 15:20:45 +0300 Subject: [PATCH 41/60] Town, mines and garrison now use GENERATE_RESOURCE bonus for income --- lib/mapObjects/CGTownInstance.cpp | 6 +++++- lib/mapObjects/MiscObjects.cpp | 10 +++++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/lib/mapObjects/CGTownInstance.cpp b/lib/mapObjects/CGTownInstance.cpp index a49c3279f..0ad298a90 100644 --- a/lib/mapObjects/CGTownInstance.cpp +++ b/lib/mapObjects/CGTownInstance.cpp @@ -206,7 +206,11 @@ int CGTownInstance::getDwellingBonus(const std::vector& creatureIds, TResources CGTownInstance::dailyIncome() const { - TResources ret; + ResourceSet ret; + + for (GameResID k : GameResID::ALL_RESOURCES()) + ret[k] += valOfBonuses(BonusType::GENERATE_RESOURCE, BonusSubtypeID(k)); + for(const auto & p : getTown()->buildings) { BuildingID buildingUpgrade; diff --git a/lib/mapObjects/MiscObjects.cpp b/lib/mapObjects/MiscObjects.cpp index 69df9400e..f5fda550b 100644 --- a/lib/mapObjects/MiscObjects.cpp +++ b/lib/mapObjects/MiscObjects.cpp @@ -142,6 +142,10 @@ std::vector CGMine::providedCreatures() const ResourceSet CGMine::dailyIncome() const { ResourceSet result; + + for (GameResID k : GameResID::ALL_RESOURCES()) + result[k] += valOfBonuses(BonusType::GENERATE_RESOURCE, BonusSubtypeID(k)); + result[producedResource] += defaultResProduction(); const auto & playerSettings = cb->getPlayerSettings(getOwner()); @@ -867,7 +871,11 @@ const IOwnableObject * CGGarrison::asOwnable() const ResourceSet CGGarrison::dailyIncome() const { - return {}; + ResourceSet result; + for (GameResID k : GameResID::ALL_RESOURCES()) + result[k] += valOfBonuses(BonusType::GENERATE_RESOURCE, BonusSubtypeID(k)); + + return result; } std::vector CGGarrison::providedCreatures() const From 385c50fd85d2a89fe7099717b1a1e3b2934f4a44 Mon Sep 17 00:00:00 2001 From: altiereslima Date: Thu, 26 Jun 2025 19:27:33 -0300 Subject: [PATCH 42/60] Update portuguese.ts --- mapeditor/translation/portuguese.ts | 316 ++++++++++++++-------------- 1 file changed, 153 insertions(+), 163 deletions(-) diff --git a/mapeditor/translation/portuguese.ts b/mapeditor/translation/portuguese.ts index 7671c57d1..227f9d4bd 100644 --- a/mapeditor/translation/portuguese.ts +++ b/mapeditor/translation/portuguese.ts @@ -344,12 +344,12 @@ Select Factions - + Selecionar facções Faction Selector - + Seletor de facções @@ -438,12 +438,12 @@ Save - Salvar + Salvar Cancel - Cancelar + Cancelar @@ -726,13 +726,13 @@ Campaign editor - Editor de Campanha + Editor de campanha Template editor - + Editor de modelo @@ -1320,30 +1320,26 @@ Hero %1 cannot be created as NEUTRAL. - O herói %1 não pode ser criado como NEUTRO. + O herói %1 não pode ser criado como NEUTRO. Missing Required Mod - AI-generated, needs review by native speaker; delete this comment afterwards - Mod obrigatório ausente + Mod obrigatório ausente Do you want to do that now ? - AI-generated, needs review by native speaker; delete this comment afterwards - - + Você quer fazer isso agora? This object's mod is mandatory for map to remain valid. - AI-generated, needs review by native speaker; delete this comment afterwards - O mod deste objeto é obrigatório para que o mapa permaneça válido. + O mod deste objeto é obrigatório para que o mapa permaneça válido. @@ -1436,22 +1432,22 @@ Você quer fazer isso agora? Select Mines - + Selecionar Minas Mine Selector - + Seletor de Minas Resource - Recurso + Recurso Mines - Minas + Minas @@ -1565,26 +1561,22 @@ Você quer fazer isso agora? Select Player - AI-generated, needs review by native speaker; delete this comment afterwards - Selecionar jogador + Selecionar jogador Hero cannot be created as NEUTRAL - AI-generated, needs review by native speaker; delete this comment afterwards - Herói não pode ser criado como NEUTRO + Herói não pode ser criado como NEUTRO Switch to one of the available players: - AI-generated, needs review by native speaker; delete this comment afterwards - Mude para um dos jogadores disponíveis: + Mude para um dos jogadores disponíveis: Shortcut: %1 - AI-generated, needs review by native speaker; delete this comment afterwards - Atalho: %1 + Atalho: %1 @@ -1592,22 +1584,22 @@ Você quer fazer isso agora? Player settings - Configurações do jogador + Configurações do jogador Players - Jogadores + Jogadores 1 - 1 + 1 Ok - Ok + Ok @@ -2021,16 +2013,14 @@ Você quer fazer isso agora? (submod of %1) - AI-generated, needs review by native speaker; delete this comment afterwards - (submod de %1) + (submod de %1) The mod '%1'%2, is required by an object on the map. Add it to the map's required mods in Map->General settings. should be consistent with Map->General menu entry translation - AI-generated, needs review by native speaker; delete this comment afterwards - O mod '%1'%2 é necessário para um objeto no mapa. + O mod '%1'%2 é necessário para um objeto no mapa. Adicione-o aos mods obrigatórios do mapa em Mapa->Configurações gerais. @@ -3125,196 +3115,196 @@ Adicione-o aos mods obrigatórios do mapa em Mapa->Configurações gerais. VCMI Template Editor - + Editor de Modelos VCMI File - Arquivo + Arquivo Edit - Editar + Editar View - Visualizar + Visualizar Toolbar - Barra de Ferramentas + Barra de Ferramentas Selected Template: - + Modelo Selecionado: Add - Adicionar + Adicionar Remove - Remover + Remover Rename - + Renomear General - Geral + Geral Name - Nome + Nome Description - + Descrição Min Size - + Tamanho Mínimo X - X + X Y - Y + Y Z - + Z Max Size - + Tamanho Máximo Players - Jogadores + Jogadores Human - + Humano Allowed water content - + Conteúdo de água permitido None - Nenhum + Nenhum Normal - Normal + Normal Islands - Ilhas + Ilhas Zone - + Zona Visualisation - + Visualização Position - + Posição Size - + Tamanho ID - ID + ID Type - Tipo + Tipo Owner - Proprietário + Proprietário Zone link - + Conexão da zona Mines - Minas + Minas Custom objects - + Objetos personalizados Towns - Cidades + Cidades Terrain - + Terreno @@ -3322,17 +3312,17 @@ Adicione-o aos mods obrigatórios do mapa em Mapa->Configurações gerais. Treasure - + Tesouro Town info - + Informações da cidade Town count - + Contagem de cidades @@ -3340,7 +3330,7 @@ Adicione-o aos mods obrigatórios do mapa em Mapa->Configurações gerais. Player - Jogador + Jogador @@ -3348,386 +3338,388 @@ Adicione-o aos mods obrigatórios do mapa em Mapa->Configurações gerais. Neutral - Neutro + Neutro Castle count - + Contagem de castelos Town density - + Densidade de cidades Castle density - + Densidade de castelos Match terrain to town - + Combinar terreno com a cidade Terrain types - + Tipos de terreno Banned terrain types - + Tipos de terreno proibidos Towns are same type - + Cidades são do mesmo tipo Allowed towns - + Cidades permitidas Banned towns - + Cidades proibidas Town hints - + Dicas da cidade Monsters - Monstros + Monstros Allowed monsters - + Monstros permitidos Banned monsters - + Monstros proibidos Strength - + Força Objects - Objetos + Objetos Connections - + Conexões Open - Abrir + Abrir Save - Salvar + Salvar New - Novo + Novo Save as... - Salvar como... + Salvar como... Ctrl+Shift+S - Ctrl+Shift+S + Ctrl+Shift+S Add zone - + Adicionar zona Remove zone - + Remover zona Del - Del + Del Auto position - + Posição automática Ctrl+P - Ctrl+P + Ctrl+P Zoom in - Aumentar zoom + Aumentar zoom Ctrl++ - Ctrl++ + Ctrl++ Zoom out - Diminuir zoom + Diminuir zoom Ctrl+- - Ctrl+- + Ctrl+- Zoom auto - + Zoom automático Ctrl+Shift+: - + Ctrl+Shift+: Zoom reset - Redefinir zoom + Redefinir zoom Ctrl+Shift+= - Ctrl+Shift+= + Ctrl+Shift+= Min - + Mín Max - + Máx Action - + Ação Delete - + Excluir ID: %1 - + ID: %1 Max treasure: %1 - + Tesouro máximo: %1 Player start - + Início do jogador CPU start - + Início da CPU Junction - + Junção Water - + Água Sealed - + Selado Random - Aleatório + Aleatório Weak - Fracos + Fraco Strong - Fortes + Forte Zone A - + Zona A Zone B - + Zona B Guard - + Guarda Road - + Estrada Guarded - + Guardado Fictive - + Fictício Repulsive - + Repulsivo Wide - + Largo Force portal - + Forçar portal Yes - + Sim No - + Não Zone A: %1 Zone B: %2 Guard: %3 - + Zona A: %1 +Zona B: %2 +Guarda: %3 Confirmation - Confirmação + Confirmação Unsaved changes will be lost, are you sure? - As alterações não salvas serão perdidas, tem certeza? + As alterações não salvas serão perdidas, tem certeza? Open template - + Abrir modelo VCMI templates(*.json) - + Modelos VCMI (*.json) Save template - + Salvar modelo VCMI templates (*.json) - + Modelos VCMI (*.json) Enter Name - + Insira o Nome Name: - + Nome: Already existing! - + Já existe! A template with this name is already existing. - + Já existe um modelo com este nome. To few templates! - + Modelos insuficientes! At least one template should remain after removing. - + Pelo menos um modelo deve permanecer após a remoção. Error - Erro + Erro Not implemented yet! - + Ainda não implementado! @@ -3736,12 +3728,12 @@ Guard: %3 Select Terrains - + Selecionar Terrenos Terrain Selector - + Seletor de Terreno @@ -4090,32 +4082,32 @@ Guard: %3 Select Treasures - + Selecionar Tesouros Treasure Selector - + Seletor de Tesouros Min - + Mín Max - + Máx Density - + Densidade Action - + Ação @@ -4173,13 +4165,12 @@ Guard: %3 Prison %1 must be a NEUTRAL - A prisão %1 deve set NEUTRA + A prisão %1 deve ser NEUTRA Ownable object %1 is UNFLAGGABLE but must have NEUTRAL or player owner - AI-generated, needs review by native speaker; delete this comment afterwards - O objeto possuído %1 não pode ser MARCADO, mas deve ter NEUTRO ou jogador como dono + O objeto possuído %1 não pode ser MARCADO, mas deve ter NEUTRO ou jogador como dono @@ -4199,7 +4190,7 @@ Guard: %3 Hero %1 has an empty type and must be removed - O herói %1 possui um tipo vazio e deve set removido + O herói %1 possui um tipo vazio e deve ser removido @@ -4224,8 +4215,7 @@ Guard: %3 The map is valid and has no issues. - AI-generated, needs review by native speaker; delete this comment afterwards - O mapa é válido e não possui problemas. + O mapa é válido e não possui problemas. @@ -4501,7 +4491,7 @@ Guard: %3 OK - OK + OK From d1f9c497a3e6d5a7cd99d8c8ae1bb6b0b9caefee Mon Sep 17 00:00:00 2001 From: Ivan Savenko Date: Thu, 26 Jun 2025 15:45:04 +0300 Subject: [PATCH 43/60] Fix handling of bonuses with negative values --- Global.h | 14 ++++++++++---- docs/modders/Bonus/Bonus_Updaters.md | 3 ++- lib/bonuses/BonusList.cpp | 5 ++++- lib/bonuses/Updaters.h | 3 +++ 4 files changed, 19 insertions(+), 6 deletions(-) diff --git a/Global.h b/Global.h index a1f469eb6..ade90503c 100644 --- a/Global.h +++ b/Global.h @@ -712,13 +712,16 @@ namespace vstd return a + (b - a) * f; } - /// Divides dividend by divisor and rounds result up + /// Divides dividend by divisor and rounds result away from zero /// For use with integer-only arithmetic template Integer1 divideAndCeil(const Integer1 & dividend, const Integer2 & divisor) { static_assert(std::is_integral_v && std::is_integral_v, "This function should only be used with integral types"); - return (dividend + divisor - 1) / divisor; + if (dividend >= 0) + return (dividend + divisor - 1) / divisor; + else + return (dividend - divisor + 1) / divisor; } /// Divides dividend by divisor and rounds result to nearest @@ -727,10 +730,13 @@ namespace vstd Integer1 divideAndRound(const Integer1 & dividend, const Integer2 & divisor) { static_assert(std::is_integral_v && std::is_integral_v, "This function should only be used with integral types"); - return (dividend + divisor / 2 - 1) / divisor; + if (dividend >= 0) + return (dividend + divisor / 2 - 1) / divisor; + else + return (dividend - divisor / 2 + 1) / divisor; } - /// Divides dividend by divisor and rounds result down + /// Divides dividend by divisor and rounds result towards zero /// For use with integer-only arithmetic template Integer1 divideAndFloor(const Integer1 & dividend, const Integer2 & divisor) diff --git a/docs/modders/Bonus/Bonus_Updaters.md b/docs/modders/Bonus/Bonus_Updaters.md index 19124ae48..9bfd1da29 100644 --- a/docs/modders/Bonus/Bonus_Updaters.md +++ b/docs/modders/Bonus/Bonus_Updaters.md @@ -112,8 +112,9 @@ Example of long form with custom parameters: Effect: Updates val to `val = clamp(val * floor(stackSize / stepSize), minimum, maximum)`, where stackSize is total number of creatures in hero army that fulful filter Parameters: + - `minimum`: minimum possible value of the bonus value. Unlimited by default -- `minimum`: maximum possible value of the bonus value. Unlimited by default +- `maximum`: maximum possible value of the bonus value. Unlimited by default - `stepSize`: number of units needed to increase updater multiplier by 1 - `filteredCreature`: identifier of specific unit to filter - `filteredLevel`: level of units that need to be counted. Redundant if `filteredCreature` is used diff --git a/lib/bonuses/BonusList.cpp b/lib/bonuses/BonusList.cpp index c1b45610c..092a5a41d 100644 --- a/lib/bonuses/BonusList.cpp +++ b/lib/bonuses/BonusList.cpp @@ -70,7 +70,10 @@ int BonusList::totalValue(int baseValue) const }; auto applyPercentageRoundUp = [](int base, int percent) -> int { - return (static_cast(base) * (100 + percent) + 99) / 100; + if (base >= 0) + return (static_cast(base) * (100 + percent) + 99) / 100; + else + return (static_cast(base) * (100 + percent) - 99) / 100; }; auto applyPercentageRoundDown = [](int base, int percent) -> int { diff --git a/lib/bonuses/Updaters.h b/lib/bonuses/Updaters.h index f764850fe..4a023eecd 100644 --- a/lib/bonuses/Updaters.h +++ b/lib/bonuses/Updaters.h @@ -134,6 +134,9 @@ public: h & minimum; h & maximum; h & stepSize; + h & filteredLevel; + h & filteredCreature; + h & filteredFaction; } }; From 26b8af88c4b2e4542f2cb74938aef324f7f370b0 Mon Sep 17 00:00:00 2001 From: altiereslima Date: Fri, 27 Jun 2025 06:15:25 -0300 Subject: [PATCH 44/60] Update portuguese.json --- Mods/vcmi/Content/config/portuguese.json | 125 +++++++++++++---------- 1 file changed, 69 insertions(+), 56 deletions(-) diff --git a/Mods/vcmi/Content/config/portuguese.json b/Mods/vcmi/Content/config/portuguese.json index 8f5f72386..2c03c92ee 100644 --- a/Mods/vcmi/Content/config/portuguese.json +++ b/Mods/vcmi/Content/config/portuguese.json @@ -12,7 +12,7 @@ "vcmi.adventureMap.monsterThreat.levels.9" : "Avassaladora", "vcmi.adventureMap.monsterThreat.levels.10" : "Mortal", "vcmi.adventureMap.monsterThreat.levels.11" : "Impossível", - "vcmi.adventureMap.monsterLevel" : "\n\nNível %LEVEL, unidade %TOWN de ataque %ATTACK_TYPE", + "vcmi.adventureMap.monsterLevel" : "\n\nUnidade %TOWN de nível %LEVEL de ataque %ATTACK_TYPE", "vcmi.adventureMap.monsterMeleeType" : "corpo a corpo", "vcmi.adventureMap.monsterRangedType" : "à distância", "vcmi.adventureMap.search.hover" : "Procurar objeto no mapa", @@ -32,6 +32,13 @@ "vcmi.adventureMap.dwelling3" : "{%s}\n\nVocê gostaria de recrutar %s, %s ou %s?", "vcmi.artifact.charges" : "Cargas", + + "vcmi.battle.action.move" : "Mover unidade para o local especificado", + "vcmi.battle.action.info" : "Mostrar informações da unidade", + "vcmi.battle.action.shoot" : "Usar ataque à distância", + "vcmi.battle.action.attack" : "Usar ataque corpo a corpo", + "vcmi.battle.action.return" : "Usar ataque corpo a corpo e retornar", + "vcmi.battle.action.genie" : "Lançar feitiço benéfico aleatório", "vcmi.bonusSource.artifact" : "Artefato", "vcmi.bonusSource.creature" : "Habilidade", @@ -154,10 +161,10 @@ "vcmi.broadcast.vote.yes" : "sim", "vcmi.broadcast.vote.no" : "não", "vcmi.broadcast.vote.notRecognized" : "Comando de votação não reconhecido!", - "vcmi.broadcast.vote.success.untilContacts" : "Votação concluída com sucesso. Os turnos simultâneos ocorrerão por mais %s dias, ou até o contato", - "vcmi.broadcast.vote.success.contactsBlocked" : "Votação concluída com sucesso. Os turnos simultâneos ocorrerão por mais %s dias. Os contatos estão bloqueados", - "vcmi.broadcast.vote.success.nextDay" : "Votação concluída com sucesso. Os turnos simultâneos serão encerrados no próximo dia", - "vcmi.broadcast.vote.success.timer" : "Votação concluída com sucesso. O cronômetro para todos os jogadores foi prolongado em %s segundos", + "vcmi.broadcast.vote.success.untilContacts" : "Votação bem-sucedida. Os turnos simultâneos ocorrerão por mais %s dias, ou até o contato", + "vcmi.broadcast.vote.success.contactsBlocked" : "Votação bem-sucedida. Os turnos simultâneos ocorrerão por mais %s dias. Os contatos estão bloqueados", + "vcmi.broadcast.vote.success.nextDay" : "Votação bem-sucedida. Os turnos simultâneos serão encerrados no próximo dia", + "vcmi.broadcast.vote.success.timer" : "Votação bem-sucedida. O cronômetro para todos os jogadores foi prolongado em %s segundos", "vcmi.broadcast.vote.aborted" : "O jogador votou contra a mudança. Votação abortada", "vcmi.broadcast.vote.start.untilContacts" : "Votação iniciada para permitir turnos simultâneos por mais %s dias", "vcmi.broadcast.vote.start.contactsBlocked" : "Votação iniciada para forçar turnos simultâneos por mais %s dias", @@ -180,7 +187,7 @@ "vcmi.lobby.header.chat.player" : "Bate-papo privado com %s", // %s -> apelido de outro jogador "vcmi.lobby.header.history" : "Seus Jogos Anteriores", "vcmi.lobby.header.players" : "Jogadores Online - %d", - "vcmi.lobby.match.solo" : "Jogo para um Jogador", + "vcmi.lobby.match.solo" : "Jogo para Um Jogador", "vcmi.lobby.match.duel" : "Jogo com %s", // %s -> apelido de outro jogador "vcmi.lobby.match.multi" : "%d jogadores", "vcmi.lobby.room.create.hover" : "Criar Nova Sala", @@ -197,7 +204,7 @@ "vcmi.lobby.preview.subtitle" : "Jogo em %s, hospedado por %s", //TL Note: 1) name of map or RMG template 2) nickname of game host "vcmi.lobby.preview.version" : "Versão do jogo:", "vcmi.lobby.preview.players" : "Jogadores:", - "vcmi.lobby.preview.mods" : "Mods utilizados:", + "vcmi.lobby.preview.mods" : "Mods usados:", "vcmi.lobby.preview.allowed" : "Deseja entrar na sala de jogo?", "vcmi.lobby.preview.error.header" : "Não foi possível entrar nesta sala.", "vcmi.lobby.preview.error.playing" : "Você precisa sair do seu jogo atual primeiro.", @@ -230,7 +237,7 @@ "vcmi.lobby.pvp.randomTownVs.help" : "Escreve duas cidades aleatórias no bate-papo", "vcmi.lobby.pvp.versus" : "vs.", - "vcmi.client.errors.invalidMap" : "{Mapa ou campanha inválido}\n\nFalha ao iniciar o jogo! O mapa ou campanha selecionado pode ser inválido ou corrompido. Motivo:\n%s", + "vcmi.client.errors.invalidMap" : "{Mapa ou campanha inválida}\n\nFalha ao iniciar o jogo! O mapa ou campanha selecionado pode ser inválido ou corrompido. Motivo:\n%s", "vcmi.client.errors.modLoadingFailure" : "{Falha ao carregar mod}\n\nProblemas críticos encontrados ao carregar mods! O jogo pode não funcionar corretamente ou travar! Por favor, atualize ou desative os seguintes mods:\n\n", "vcmi.server.errors.disconnected" : "{Erro de Rede}\n\nA conexão com o servidor do jogo foi perdida!", "vcmi.server.errors.playerLeft" : "{Jogador Saiu}\n\nO jogador %s desconectou-se do jogo!", //%s -> player color @@ -337,40 +344,42 @@ "vcmi.adventureOptions.smoothDragging.help" : "{Arrasto Suave do Mapa}\n\nQuando ativado, o arrasto do mapa tem um efeito de movimento moderno.", "vcmi.adventureOptions.skipAdventureMapAnimations.hover" : "Omitir Efeitos de Desvanecimento", "vcmi.adventureOptions.skipAdventureMapAnimations.help" : "{Omite os Efeitos de Desvanecimento}\n\nQuando ativado, omite o desvanecimento de objetos e efeitos semelhantes (coleta de recursos, embarque em navios etc.). Torna a interface do usuário mais reativa em alguns casos, em detrimento da estética. Especialmente útil em jogos PvP. Para obter velocidade de movimento máxima, o pulo está ativo independentemente desta configuração.", - "vcmi.adventureOptions.mapScrollSpeed1.hover": "", - "vcmi.adventureOptions.mapScrollSpeed5.hover": "", - "vcmi.adventureOptions.mapScrollSpeed6.hover": "", + "vcmi.adventureOptions.mapScrollSpeed1.hover" : "", + "vcmi.adventureOptions.mapScrollSpeed5.hover" : "", + "vcmi.adventureOptions.mapScrollSpeed6.hover" : "", "vcmi.adventureOptions.mapScrollSpeed1.help" : "Define a velocidade de rolagem do mapa como muito lenta.", "vcmi.adventureOptions.mapScrollSpeed5.help" : "Define a velocidade de rolagem do mapa como muito rápida.", "vcmi.adventureOptions.mapScrollSpeed6.help" : "Define a velocidade de rolagem do mapa como instantânea.", "vcmi.adventureOptions.hideBackground.hover" : "Ocultar Fundo", "vcmi.adventureOptions.hideBackground.help" : "{Oculta o Fundo}\n\nOculta o mapa de aventura no fundo e mostra uma textura em vez disso.", + "vcmi.adventureOptions.minimapShowHeroes.hover" : "Mostrar Heróis no Minimapa", + "vcmi.adventureOptions.minimapShowHeroes.help" : "{Mostrar Heróis no Minimapa}\n\nMostra um ícone adicional para todos os heróis visíveis no minimapa, facilitando a visualização deles em mapas grandes.", - "vcmi.battleOptions.queueSizeLabel.hover": "Mostrar Fila de Ordem de Turno", - "vcmi.battleOptions.queueSizeNoneButton.hover": "DESL.", - "vcmi.battleOptions.queueSizeAutoButton.hover": "AUTO.", - "vcmi.battleOptions.queueSizeSmallButton.hover": "PEQU.", - "vcmi.battleOptions.queueSizeBigButton.hover": "GRAN.", - "vcmi.battleOptions.queueSizeNoneButton.help": "Não exibir Fila de Ordem de Turno.", - "vcmi.battleOptions.queueSizeAutoButton.help": "Ajusta automaticamente o tamanho da fila de ordem de turno com base na resolução do jogo (o tamanho PEQUENO é usado ao jogar em uma resolução com altura inferior a 700 pixels; o tamanho GRANDE é usado caso contrário).", - "vcmi.battleOptions.queueSizeSmallButton.help": "Define o tamanho da fila de ordem de turno como PEQUENO.", - "vcmi.battleOptions.queueSizeBigButton.help": "Define o tamanho da fila de ordem de turno como GRANDE (não suportado se a altura da resolução do jogo for inferior a 700 pixels).", - "vcmi.battleOptions.animationsSpeed1.hover": "", - "vcmi.battleOptions.animationsSpeed5.hover": "", - "vcmi.battleOptions.animationsSpeed6.hover": "", - "vcmi.battleOptions.animationsSpeed1.help": "Define a velocidade da animação como muito lenta.", - "vcmi.battleOptions.animationsSpeed5.help": "Define a velocidade da animação como muito rápida.", - "vcmi.battleOptions.animationsSpeed6.help": "Define a velocidade da animação como instantânea.", - "vcmi.battleOptions.movementHighlightOnHover.hover": "Destacar Movimento ao Passar o Mouse", - "vcmi.battleOptions.movementHighlightOnHover.help": "{Destaca o Movimento ao Passar o Mouse}\n\nDestaca o alcance de movimento da unidade quando você passa o mouse sobre ela.", - "vcmi.battleOptions.rangeLimitHighlightOnHover.hover": "Mostrar Limites de Alcance de Atiradores", - "vcmi.battleOptions.rangeLimitHighlightOnHover.help": "{Mostra os Limites de Alcance dos Atiradores ao Passar o Mouse}\n\nMostra os limites de alcance do atirador quando você passa o mouse sobre ele.", - "vcmi.battleOptions.showStickyHeroInfoWindows.hover": "Mostrar Janelas de Estatísticas de Heróis", - "vcmi.battleOptions.showStickyHeroInfoWindows.help": "{Mostra as Janelas de Estatísticas de Heróis}\n\nAlterna permanentemente as janelas de estatísticas dos heróis que mostram estatísticas primárias e pontos de mana.", - "vcmi.battleOptions.skipBattleIntroMusic.hover": "Pular Música de Introdução", - "vcmi.battleOptions.skipBattleIntroMusic.help": "{Pula a Música de Introdução}\n\nPermite ações durante a música de introdução que toca no início de cada batalha.", - "vcmi.battleOptions.endWithAutocombat.hover": "Terminar a batalha", - "vcmi.battleOptions.endWithAutocombat.help": "{Termina a batalha}\n\nO Combate Automático reproduz a batalha até o final instantâneo.", + "vcmi.battleOptions.queueSizeLabel.hover" : "Mostrar Fila de Ordem de Turno", + "vcmi.battleOptions.queueSizeNoneButton.hover" : "DESL.", + "vcmi.battleOptions.queueSizeAutoButton.hover" : "AUTO.", + "vcmi.battleOptions.queueSizeSmallButton.hover" : "PEQU.", + "vcmi.battleOptions.queueSizeBigButton.hover" : "GRAN.", + "vcmi.battleOptions.queueSizeNoneButton.help" : "Não exibir Fila de Ordem de Turno.", + "vcmi.battleOptions.queueSizeAutoButton.help" : "Ajusta automaticamente o tamanho da fila de ordem de turno com base na resolução do jogo (o tamanho PEQUENO é usado ao jogar em uma resolução com altura inferior a 700 pixels; o tamanho GRANDE é usado caso contrário).", + "vcmi.battleOptions.queueSizeSmallButton.help" : "Define o tamanho da fila de ordem de turno como PEQUENO.", + "vcmi.battleOptions.queueSizeBigButton.help" : "Define o tamanho da fila de ordem de turno como GRANDE (não suportado se a altura da resolução do jogo for inferior a 700 pixels).", + "vcmi.battleOptions.animationsSpeed1.hover" : "", + "vcmi.battleOptions.animationsSpeed5.hover" : "", + "vcmi.battleOptions.animationsSpeed6.hover" : "", + "vcmi.battleOptions.animationsSpeed1.help" : "Define a velocidade da animação como muito lenta.", + "vcmi.battleOptions.animationsSpeed5.help" : "Define a velocidade da animação como muito rápida.", + "vcmi.battleOptions.animationsSpeed6.help" : "Define a velocidade da animação como instantânea.", + "vcmi.battleOptions.movementHighlightOnHover.hover" : "Destacar Movimento ao Passar o Mouse", + "vcmi.battleOptions.movementHighlightOnHover.help" : "{Destaca o Movimento ao Passar o Mouse}\n\nDestaca o alcance de movimento da unidade quando você passa o mouse sobre ela.", + "vcmi.battleOptions.rangeLimitHighlightOnHover.hover" : "Mostrar Limites de Alcance de Atiradores", + "vcmi.battleOptions.rangeLimitHighlightOnHover.help" : "{Mostra os Limites de Alcance dos Atiradores ao Passar o Mouse}\n\nMostra os limites de alcance do atirador quando você passa o mouse sobre ele.", + "vcmi.battleOptions.showStickyHeroInfoWindows.hover" : "Mostrar Janelas de Estatísticas de Heróis", + "vcmi.battleOptions.showStickyHeroInfoWindows.help" : "{Mostra as Janelas de Estatísticas de Heróis}\n\nAlterna permanentemente as janelas de estatísticas dos heróis que mostram estatísticas primárias e pontos de mana.", + "vcmi.battleOptions.skipBattleIntroMusic.hover" : "Pular Música de Introdução", + "vcmi.battleOptions.skipBattleIntroMusic.help" : "{Pula a Música de Introdução}\n\nPermite ações durante a música de introdução que toca no início de cada batalha.", + "vcmi.battleOptions.endWithAutocombat.hover" : "Terminar a batalha", + "vcmi.battleOptions.endWithAutocombat.help" : "{Termina a batalha}\n\nO Combate Automático reproduz a batalha até o final instantâneo.", "vcmi.battleOptions.showQuickSpell.hover" : "Mostrar painel de Feitiços Rápidos", "vcmi.battleOptions.showQuickSpell.help" : "{Mostra o painel de Feitiços Rápidos}\n\nMostra um painel para seleção rápida de feitiços", "vcmi.battleOptions.showHealthBar.hover" : "Mostrar barra de vida", @@ -433,6 +442,9 @@ "vcmi.townWindow.upgradeAll.notAllUpgradable" : "Recursos insuficientes para atualizar todas as criaturas. Deseja atualizar as seguintes criaturas?", "vcmi.townWindow.upgradeAll.notUpgradable" : "Recursos insuficientes para atualizar qualquer criatura.", + "vcmi.kingdomOverview.secSkillOverflow.hover" : "Mais habilidades", + "vcmi.kingdomOverview.secSkillOverflow.help" : "{Mais habilidades}\n\nEste herói possui mais habilidades.\nVocê pode vê-las na visão geral do herói.", + "vcmi.logicalExpressions.anyOf" : "Qualquer um dos seguintes:", "vcmi.logicalExpressions.allOf" : "Todos os seguintes:", "vcmi.logicalExpressions.noneOf" : "Nenhum dos seguintes:", @@ -535,7 +547,7 @@ "vcmi.optionsTab.cheatAllowed.hover" : "Permitir trapaças", "vcmi.optionsTab.unlimitedReplay.hover" : "Repetição de batalha ilimitada", - "vcmi.optionsTab.cheatAllowed.help" : "{Permitir trapaças}\nPermite a entrada de trapaças durante o jogo.", + "vcmi.optionsTab.cheatAllowed.help" : "{Permitir trapaças}\nPermite a inserção de códigos de trapaça durante o jogo.", "vcmi.optionsTab.unlimitedReplay.help" : "{Repetição de batalha ilimitada}\nSem limite de repetição de batalhas.", // Custom victory conditions for H3 campaigns and HotA maps @@ -632,12 +644,12 @@ "creatures.core.devil.bonus.decreaseLuck" : "{Reduz a sorte do inimigo}\nDiabos e Arquidiabos reduzem a sorte do inimigo em um", "creatures.core.boneDragon.bonus.decreaseMorale" : "{Reduz a moral do inimigo}\nDragões Esqueletos e Dragões Fantasmas diminuem a moral das unidades inimigas em um", "creatures.core.marksman.bonus.extraAttack" : "{Atira duas vezes}\nEsta unidade pode atirar duas vezes", - "creatures.core.azureDragon.bonus.fearful" : "{Medo}\nCausa Medo em uma pilha inimiga", - "creatures.core.azureDragon.bonus.fearless" : "{Destemido}\nImune à habilidade de Medo", + "creatures.core.azureDragon.bonus.fearful" : "{Medo}\nUnidades inimigas têm 10% de chance de congelar de medo", + "creatures.core.azureDragon.bonus.fearless" : "{Destemido}\nImune à habilidade Medo", - "core.bonus.ADDITIONAL_ATTACK.description" : "{Ataque Duplo}\nAtaca duas vezes", - "core.bonus.ADDITIONAL_RETALIATION.description" : "{Contra-ataques Adicionais}\nPode contra-atacar ${val} vezes extras", - "core.bonus.ATTACKS_ALL_ADJACENT.description" : "{Ataque em Todas as Direções}\nAtaca todos os inimigos adjacentes", + "core.bonus.ADDITIONAL_ATTACK.description" : "{Ataques Adicionais}\nA unidade pode atacar {$val} vezes adicionais", + "core.bonus.ADDITIONAL_RETALIATION.description" : "{Contra-ataques Adicionais}\nA unidade pode contra-atacar ${val} vezes extras", + "core.bonus.ATTACKS_ALL_ADJACENT.description" : "{Ataque em Área}\nAtaca todos os inimigos adjacentes além do alvo principal", "core.bonus.BLOCKS_RANGED_RETALIATION.description" : "{Evita Contra-ataques à Distância}\nO inimigo não pode contra-atacar usando um ataque à distância", "core.bonus.BLOCKS_RETALIATION.description" : "{Evita Contra-ataques}\nO inimigo não pode contra-atacar", "core.bonus.CATAPULT.description" : "{Catapulta}\nAtaca as muralhas de cerco", @@ -655,7 +667,7 @@ "core.bonus.ENEMY_ATTACK_REDUCTION.description" : "{Ignorar Ataque (${val}%)}\nAo ser atacado, ${val}% do ataque do agressor é ignorado", "core.bonus.ENEMY_DEFENCE_REDUCTION.description" : "{Ignorar Defesa (${val}%)}\nAo atacar, ${val}% da defesa do defensor é ignorada", "core.bonus.FEROCITY.description" : "{Ferocidade}\nAtaca ${val} vezes adicionais se matar alguém", - "core.bonus.FIRE_SHIELD.description" : "{Escudo de Fogo (${val}%)}\nReflete parte do dano corpo a corpo", + "core.bonus.FIRE_SHIELD.description" : "{Escudo de Fogo (${val}%) }\nA unidade reflete ${val} do dano corpo a corpo recebido", "core.bonus.FIRST_STRIKE.description.bonusSubtype.damageTypeMelee" : "{Primeiro Ataque}\nA unidade contra-atacará antes de ser atacada em combate corpo a corpo", "core.bonus.FIRST_STRIKE.description.bonusSubtype.damageTypeRanged" : "{Primeiro Ataque}\nA unidade contra-atacará antes de ser atacada por um ataque à distância", "core.bonus.FIRST_STRIKE.description" : "{Primeiro Ataque}\nA unidade contra-atacará antes de ser atacada", @@ -670,23 +682,23 @@ "core.bonus.HEALER.description" : "{Curandeiro}\nCura unidades aliadas", "core.bonus.HP_REGENERATION.description" : "{Regeneração}\nCura ${val} pontos de vida a cada turno", "core.bonus.INVINCIBLE.description" : "{Invencível}\nNão pode ser afetado por nada", - "core.bonus.JOUSTING.description" : "{Carga do Campeão}\n+${val}% de dano para cada hexágono percorrido", + "core.bonus.JOUSTING.description" : "{Carga do Campeão}\nMover antes de um ataque aumenta o dano em ${val}% para cada hexágono percorrido", "core.bonus.KING.description.2" : "{Rei Nv. Avançado}\nRecebe dano adicional de unidades sob o feitiço Matador Nv. Avançado", "core.bonus.KING.description.3" : "{Rei Nv. Experiente}\nRecebe dano adicional de unidades sob o feitiço Matador Nv. Experiente", "core.bonus.KING.description" : "{Rei}\nRecebe dano adicional de unidades sob o feitiço Matador", "core.bonus.LEVEL_SPELL_IMMUNITY.description" : "{Imune a Feitiços 1-${val}}\nImunidade a feitiços dos níveis 1-${val}", - "core.bonus.LIFE_DRAIN.description" : "{Drenar Vida (${val}%)}\nDrena ${val}% do dano causado", + "core.bonus.LIFE_DRAIN.description" : "{Drenar Vida}\nDrena ${val}% do dano causado", "core.bonus.LIMITED_SHOOTING_RANGE.description" : "{Alcance de Tiro Limitado}\nIncapaz de mirar unidades a mais de ${val} hexágonos de distância", - "core.bonus.MAGIC_MIRROR.description" : "{Espelho Mágico (${val}%)}\nTem ${val}% de chance de redirecionar um feitiço ofensivo para uma unidade inimiga", + "core.bonus.MAGIC_MIRROR.description" : "{Espelho Mágico}\nTem ${val}% de chance de redirecionar um feitiço ofensivo para uma unidade inimiga", "core.bonus.MAGIC_RESISTANCE.description" : "{Resistência Mágica (${val}%)}\nTem ${val}% de chance de resistir a um feitiço inimigo", - "core.bonus.MANA_CHANNELING.description" : "{Canalização Mágica ${val}%}\nDá ao seu herói ${val}% da mana gasta pelo inimigo", + "core.bonus.MANA_CHANNELING.description" : "{Canalização Mágica}\nDá ao seu herói ${val}% da mana gasta pelo inimigo", "core.bonus.MANA_DRAIN.description" : "{Drenagem de Mana}\nDrena ${val} de mana a cada turno", "core.bonus.MECHANICAL.description" : "{Mecânico}\nImunidade a muitos efeitos, reparável", "core.bonus.MIND_IMMUNITY.description" : "{Imune a Feitiços Mentais}\nImunidade a feitiços do tipo Mental", "core.bonus.NO_DISTANCE_PENALTY.description" : "{Sem Penal. à Distância}\nCausa dano total a qualquer distância", "core.bonus.NO_MELEE_PENALTY.description" : "{Sem Penal. em Comb.}\nSem penalidade no corpo a corpo", "core.bonus.NO_MORALE.description" : "{Moral Neutra}\nA criatura é imune aos efeitos de moral", - "core.bonus.NON_LIVING.description" : "{Não Vivo}\nImune a muitos efeitos", + "core.bonus.NON_LIVING.description" : "{Não-Vivo}\nImune a muitos efeitos", "core.bonus.NO_WALL_PENALTY.description" : "{Sem Penal. por Muralha}\nCausa dano total\ndurante cerco", "core.bonus.PRISM_HEX_ATTACK_BREATH.description" : "{Sopro Prismático}\nAtaque de Sopro Prismático (três direções)", "core.bonus.RANDOM_SPELLCASTER.description" : "{Conjurador Aleatório}\nPode lançar um feitiço aleatório", @@ -696,7 +708,8 @@ "core.bonus.RETURN_AFTER_STRIKE.description" : "{Atacar e Voltar}\nVolta após o ataque corpo a corpo", "core.bonus.REVENGE.description" : "{Vingança}\nCausa dano extra com base na saúde perdida do atacante em batalha", "core.bonus.SHOOTER.description" : "{Longo Alcance}\nA criatura pode atirar", - "core.bonus.SHOOTS_ALL_ADJACENT.description" : "{Atirar em Tudo ao Redor}\nOs ataques à distância desta criatura atingem todos os alvos em uma pequena área", + "core.bonus.SHOOTS_ALL_ADJACENT.description" : "{Atirar em Área}\nOs ataques à distância desta unidade atingem todos os alvos em uma pequena área", + "core.bonus.SKELETON_TRANSFORMER_TARGET.description" : "{Transformação de Esqueleto}\nO Transformador Esquelético transformará esta unidade em um ${subtype.creature}", "core.bonus.SOUL_STEAL.description" : "{Roubo de Alma}\nGanha ${val} novas criaturas para cada inimigo morto", "core.bonus.SPELL_AFTER_ATTACK.description" : "{Lançar Após Ataque}\nTem ${val}% de chance de lançar ${subtype.spell} após atacar", "core.bonus.SPELL_BEFORE_ATTACK.description" : "{Lançar Antes do Ataque}\nTem ${val}% de chance de lançar ${subtype.spell} antes de atacar", @@ -714,13 +727,13 @@ "core.bonus.SPELL_SCHOOL_IMMUNITY.description.spellSchool.fire" : "{Imunidade a Fogo}\nEsta unidade é imune a todos os feitiços da escola de Fogo", "core.bonus.SPELL_SCHOOL_IMMUNITY.description" : "{Imunidade a Feitiços}\nEsta unidade é imune a todos os feitiços", "core.bonus.SPELL_SCHOOL_IMMUNITY.description.spellSchool.water" : "{Imunidade a Água}\nEsta unidade é imune a todos os feitiços da escola de Água", - "core.bonus.SUMMON_GUARDIANS.description" : "{Invocar Guardas}\nNo início da batalha, invoca ${subtype.creature} (${val}%)", + "core.bonus.SUMMON_GUARDIANS.description" : "{Invocar Guardiões}\nNo início da batalha, invoca ${subtype.creature} (${val}%)", "core.bonus.THREE_HEADED_ATTACK.description" : "{Ataque das Três Cabeças}\nAtaca três unidades adjacentes", "core.bonus.TRANSMUTATION.description" : "{Transmutação}\n${val}% de chance de transformar a unidade atacada em um tipo diferente", - "core.bonus.TWO_HEX_ATTACK_BREATH.description" : "{Sopro}\nAtaque de Sopro (alcança 2 hexágonos)", - "core.bonus.UNDEAD.description" : "{Morto-vivo}\nA criatura é um Morto-vivo", - "core.bonus.UNLIMITED_RETALIATIONS.description" : "{Contra-ataques Ilimitados}\nPode contra-atacar um número ilimitado de vezes", - "core.bonus.WIDE_BREATH.description" : "{Sopro Amplo}\nAtaque de sopro amplo (vários hexágonos)", + "core.bonus.TWO_HEX_ATTACK_BREATH.description" : "{Ataque de Sopro}\nOs ataques desta unidade também atingirão qualquer unidade posicionada imediatamente atrás do alvo", + "core.bonus.UNDEAD.description" : "{Morto-vivo}\nA criatura é um Morto-vivo e é imune a efeitos que afetam apenas os vivos", + "core.bonus.UNLIMITED_RETALIATIONS.description" : "{Contra-ataques Ilimitados}\nEsta unidade pode contra-atacar um número ilimitado de vezes", + "core.bonus.WIDE_BREATH.description" : "{Sopro Amplo}\nEsta unidade ataca todas as unidades ao redor de seu alvo", "spell.core.castleMoat.name" : "Fosso", "spell.core.castleMoatTrigger.name" : "Fosso", @@ -737,8 +750,8 @@ "spell.core.landMineTrigger.name" : "Mina Terrestre", "spell.core.necropolisMoat.name" : "Cemitério", "spell.core.necropolisMoatTrigger.name" : "Cemitério", - "spell.core.rampartMoat.name" : "Espraiamento", - "spell.core.rampartMoatTrigger.name" : "Espraiamento", + "spell.core.rampartMoat.name" : "Espinhos", + "spell.core.rampartMoatTrigger.name" : "Espinhos", "spell.core.strongholdMoat.name" : "Estacas de Madeira", "spell.core.strongholdMoatTrigger.name" : "Estacas de Madeira", "spell.core.summonDemons.name" : "Invocar Demônios", From 8ec2f5e11b3f268bea110f9146b40ebec8901f20 Mon Sep 17 00:00:00 2001 From: Laserlicht <13953785+Laserlicht@users.noreply.github.com> Date: Sat, 28 Jun 2025 00:08:32 +0200 Subject: [PATCH 45/60] fix popup in kingdom overview --- client/windows/CKingdomInterface.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/client/windows/CKingdomInterface.cpp b/client/windows/CKingdomInterface.cpp index 856f903be..002c8cc27 100644 --- a/client/windows/CKingdomInterface.cpp +++ b/client/windows/CKingdomInterface.cpp @@ -27,6 +27,7 @@ #include "../widgets/MiscWidgets.h" #include "../widgets/Buttons.h" #include "../widgets/ObjectLists.h" +#include "../windows/CHeroWindow.h" #include "../windows/CMarketWindow.h" #include "../../lib/CConfigHandler.h" @@ -101,6 +102,7 @@ void InfoBox::showPopupWindow(const Point & cursorPosition) std::shared_ptr comp; std::string text; data->prepareMessage(text, comp); + if (comp) CRClickPopup::createAndPush(text, CInfoWindow::TCompsInfo(1, comp)); else if (!text.empty()) @@ -115,6 +117,8 @@ void InfoBox::clickPressed(const Point & cursorPosition) if(comp) GAME->interface()->showInfoDialog(text, CInfoWindow::TCompsInfo(1, comp)); + else if (!text.empty()) + GAME->interface()->showInfoDialog(text); } IInfoBoxData::IInfoBoxData(InfoType Type) @@ -974,6 +978,7 @@ CHeroItem::CHeroItem(const CGHeroInstance * Hero) portrait = std::make_shared(AnimationPath::builtin("PortraitsLarge"), hero->getIconIndex(), 0, 5, 6); heroArea = std::make_shared(5, 6, hero); + heroArea->addRClickCallback([this](){ ENGINE->windows().createAndPushWindow(std::make_shared(hero)); }); name = std::make_shared(73, 7, FONT_SMALL, ETextAlignment::TOPLEFT, Colors::WHITE, hero->getNameTranslated()); artsText = std::make_shared(320, 55, FONT_SMALL, ETextAlignment::CENTER, Colors::WHITE, LIBRARY->generaltexth->overview[2]); From 269044090143656e5738e7c03d02d4a61460f6fe Mon Sep 17 00:00:00 2001 From: Laserlicht <13953785+Laserlicht@users.noreply.github.com> Date: Mon, 30 Jun 2025 15:50:23 +0200 Subject: [PATCH 46/60] Update client/CPlayerInterface.cpp Co-authored-by: Ivan Savenko --- client/CPlayerInterface.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/CPlayerInterface.cpp b/client/CPlayerInterface.cpp index f1a0b139b..59a538548 100644 --- a/client/CPlayerInterface.cpp +++ b/client/CPlayerInterface.cpp @@ -498,7 +498,7 @@ void CPlayerInterface::heroMovePointsChanged(const CGHeroInstance * hero) if (makingTurn && hero->tempOwner == playerID) adventureInt->onHeroChanged(hero); invalidatePaths(); - GAME->interface()->localState->verifyPath(hero); + localState->verifyPath(hero); } void CPlayerInterface::receivedResource() { From 6752ab3a756d3001271ed325f3a56de7fa3fb70b Mon Sep 17 00:00:00 2001 From: SoundSSGood <87084363+SoundSSGood@users.noreply.github.com> Date: Tue, 20 May 2025 16:29:14 +0200 Subject: [PATCH 47/60] HAS_CHARGES_LIMITER --- docs/modders/Bonus/Bonus_Limiters.md | 15 ++++++ lib/bonuses/Bonus.h | 2 +- lib/bonuses/CBonusSystemNode.h | 1 + lib/bonuses/Limiters.cpp | 27 ++++++++++ lib/bonuses/Limiters.h | 18 +++++++ lib/constants/EntityIdentifiers.cpp | 5 ++ lib/constants/EntityIdentifiers.h | 2 + lib/entities/artifact/CArtHandler.cpp | 2 - lib/entities/artifact/CArtifact.cpp | 16 ++++++ lib/entities/artifact/CArtifact.h | 1 + lib/entities/artifact/CArtifactInstance.cpp | 56 +-------------------- lib/entities/artifact/CArtifactInstance.h | 2 - lib/gameState/GameStatePackVisitor.cpp | 3 ++ lib/json/JsonBonus.cpp | 10 ++++ lib/mapping/CMap.cpp | 9 +++- lib/serializer/RegisterTypes.h | 1 + server/CGameHandler.cpp | 38 ++++++++------ server/CGameHandler.h | 2 +- server/battles/BattleActionProcessor.cpp | 2 +- server/battles/BattleResultProcessor.cpp | 2 +- 20 files changed, 136 insertions(+), 78 deletions(-) diff --git a/docs/modders/Bonus/Bonus_Limiters.md b/docs/modders/Bonus/Bonus_Limiters.md index 674e9a8b1..cbc87b02d 100644 --- a/docs/modders/Bonus/Bonus_Limiters.md +++ b/docs/modders/Bonus/Bonus_Limiters.md @@ -128,6 +128,21 @@ Parameters: For reference on tiles indexes see image below: +### HAS_CHARGES_LIMITER + +Currently works only with spells. Sets the cost of use in charges + +Parameters: + +- use cost (charges) + +```json +"limiters" : [ { + "type" : "HAS_CHARGES_LIMITER", + "parameters" : [2] +} ] +``` + ![Battlefield Hexes Layout](../../images/Battle_Field_Hexes.svg) ## Aggregate Limiters diff --git a/lib/bonuses/Bonus.h b/lib/bonuses/Bonus.h index aa88d09ba..7fda0c23b 100644 --- a/lib/bonuses/Bonus.h +++ b/lib/bonuses/Bonus.h @@ -30,7 +30,7 @@ class CSelector; class IGameInfoCallback; using BonusSubtypeID = VariantIdentifier; -using BonusSourceID = VariantIdentifier; +using BonusSourceID = VariantIdentifier; using TBonusListPtr = std::shared_ptr; using TConstBonusListPtr = std::shared_ptr; using TLimiterPtr = std::shared_ptr; diff --git a/lib/bonuses/CBonusSystemNode.h b/lib/bonuses/CBonusSystemNode.h index b9ff66285..347f69c68 100644 --- a/lib/bonuses/CBonusSystemNode.h +++ b/lib/bonuses/CBonusSystemNode.h @@ -120,6 +120,7 @@ public: virtual std::string bonusToString(const std::shared_ptr& bonus) const {return "";}; //description or bonus name virtual std::string nodeName() const; bool isHypothetic() const { return isHypotheticNode; } + void setHypothetic(const bool hypothetic); BonusList & getExportedBonusList(); const BonusList & getExportedBonusList() const; diff --git a/lib/bonuses/Limiters.cpp b/lib/bonuses/Limiters.cpp index 83c654103..e5e0d0352 100644 --- a/lib/bonuses/Limiters.cpp +++ b/lib/bonuses/Limiters.cpp @@ -591,4 +591,31 @@ ILimiter::EDecision NoneOfLimiter::limit(const BonusLimitationContext & context) return wasntSure ? ILimiter::EDecision::NOT_SURE : ILimiter::EDecision::ACCEPT; } +HasChargesLimiter::HasChargesLimiter(const uint16_t cost) + : chargeCost(cost) +{ +} + +HasChargesLimiter::HasChargesLimiter(const HasChargesLimiter & inst, const BonusSourceID & id) + : HasChargesLimiter(inst) +{ + chargesSourceId = id; +} + +ILimiter::EDecision HasChargesLimiter::limit(const BonusLimitationContext & context) const +{ + for(const auto & bonus : context.stillUndecided) + { + if(bonus->type == BonusType::ARTIFACT_CHARGE && bonus->sid == chargesSourceId) + return ILimiter::EDecision::NOT_SURE; + } + + for(const auto & bonus : context.alreadyAccepted) + { + if(bonus->type == BonusType::ARTIFACT_CHARGE && bonus->sid == chargesSourceId) + return bonus->val >= chargeCost ? ILimiter::EDecision::ACCEPT : ILimiter::EDecision::DISCARD; + } + return ILimiter::EDecision::DISCARD; +} + VCMI_LIB_NAMESPACE_END diff --git a/lib/bonuses/Limiters.h b/lib/bonuses/Limiters.h index bb73117db..adc05f2f6 100644 --- a/lib/bonuses/Limiters.h +++ b/lib/bonuses/Limiters.h @@ -276,4 +276,22 @@ public: } }; +class DLL_LINKAGE HasChargesLimiter : public ILimiter // works with bonuses that consume charges +{ +public: + uint16_t chargeCost; + BonusSourceID chargesSourceId; + + HasChargesLimiter(const uint16_t cost = 1); + HasChargesLimiter(const HasChargesLimiter & inst, const BonusSourceID & id); + EDecision limit(const BonusLimitationContext & context) const override; + + template void serialize(Handler &h) + { + h & static_cast(*this); + h & chargeCost; + h & chargesSourceId; + } +}; + VCMI_LIB_NAMESPACE_END diff --git a/lib/constants/EntityIdentifiers.cpp b/lib/constants/EntityIdentifiers.cpp index d246da948..4f03c5935 100644 --- a/lib/constants/EntityIdentifiers.cpp +++ b/lib/constants/EntityIdentifiers.cpp @@ -134,6 +134,11 @@ BuildingTypeUniqueID::BuildingTypeUniqueID(FactionID factionID, BuildingID build assert(buildingID.getNum() < 0x10000); } +std::string ArtifactInstanceID::encode(const si32 index) +{ + return ""; +} + BuildingID BuildingTypeUniqueID::getBuilding() const { return BuildingID(getNum() % 0x10000); diff --git a/lib/constants/EntityIdentifiers.h b/lib/constants/EntityIdentifiers.h index a2794cbf4..def1e1a43 100644 --- a/lib/constants/EntityIdentifiers.h +++ b/lib/constants/EntityIdentifiers.h @@ -51,6 +51,8 @@ class ArtifactInstanceID : public StaticIdentifier { public: using StaticIdentifier::StaticIdentifier; + + DLL_LINKAGE static std::string encode(const si32 index); }; class QueryID : public StaticIdentifier diff --git a/lib/entities/artifact/CArtHandler.cpp b/lib/entities/artifact/CArtHandler.cpp index 31495f19a..b508200aa 100644 --- a/lib/entities/artifact/CArtHandler.cpp +++ b/lib/entities/artifact/CArtHandler.cpp @@ -254,8 +254,6 @@ std::shared_ptr CArtHandler::loadFromJson(const std::string & scope, else art->setDefaultStartCharges(charges); } - if(art->getDischargeCondition() == DischargeArtifactCondition::SPELLCAST && art->getBonusesOfType(BonusType::SPELL)->size() == 0) - logMod->warn("Warning! %s condition of discharge is \"SPELLCAST\", but there is not a single spell.", art->getNameTranslated()); } return art; diff --git a/lib/entities/artifact/CArtifact.cpp b/lib/entities/artifact/CArtifact.cpp index 7996d6565..13afd1e3f 100644 --- a/lib/entities/artifact/CArtifact.cpp +++ b/lib/entities/artifact/CArtifact.cpp @@ -14,6 +14,7 @@ #include "ArtifactUtils.h" #include "CArtifactFittingSet.h" +#include "../../bonuses/Limiters.h" #include "../../texts/CGeneralTextHandler.h" #include "../../GameLibrary.h" @@ -292,6 +293,21 @@ bool CChargedArtifact::getRemoveOnDepletion() const return removeOnDepletion; } +std::optional CChargedArtifact::getChargeCost(const SpellID & id) const +{ + auto art = static_cast(this); + + for(const auto & bonus : art->instanceBonuses) + { + if(bonus->type == BonusType::SPELL && bonus->subtype.as() == id) + { + if(const auto chargesLimiter = std::static_pointer_cast(bonus->limiter)) + return chargesLimiter->chargeCost; + } + } + return std::nullopt; +} + CArtifact::CArtifact() : CBonusSystemNode(BonusNodeType::ARTIFACT), iconIndex(ArtifactID::NONE), diff --git a/lib/entities/artifact/CArtifact.h b/lib/entities/artifact/CArtifact.h index 2c9e5d46f..636cf6551 100644 --- a/lib/entities/artifact/CArtifact.h +++ b/lib/entities/artifact/CArtifact.h @@ -83,6 +83,7 @@ public: uint16_t getDefaultStartCharges() const; DischargeArtifactCondition getDischargeCondition() const; bool getRemoveOnDepletion() const; + std::optional getChargeCost(const SpellID & id) const; }; // Container for artifacts. Not for instances. diff --git a/lib/entities/artifact/CArtifactInstance.cpp b/lib/entities/artifact/CArtifactInstance.cpp index 622735a29..74be4d763 100644 --- a/lib/entities/artifact/CArtifactInstance.cpp +++ b/lib/entities/artifact/CArtifactInstance.cpp @@ -120,44 +120,6 @@ void CGrowingArtifactInstance::growingUp() artInst->addNewBonus(std::make_shared(*bonus.second)); } } - - if(artType->isCharged()) - artInst->onChargesChanged(); - } -} - -void CChargedArtifactInstance::onChargesChanged() -{ - auto artInst = static_cast(this); - const auto artType = artInst->getType(); - - if(!artType->isCharged()) - return; - - const auto bonusSelector = artType->getDischargeCondition() == DischargeArtifactCondition::SPELLCAST ? - Selector::type()(BonusType::SPELL) : Selector::all; - - auto instBonuses = artInst->getAllBonuses(bonusSelector, nullptr); - - if(artInst->getCharges() == 0) - { - for(const auto & bonus : *instBonuses) - if(bonus->type != BonusType::ARTIFACT_GROWING && bonus->type != BonusType::ARTIFACT_CHARGE) - artInst->removeBonus(bonus); - } - else - { - for(const auto & refBonus : *artType->getAllBonuses(bonusSelector, nullptr)) - { - if(const auto bonusFound = std::find_if(instBonuses->begin(), instBonuses->end(), - [refBonus](const auto & instBonus) - { - return refBonus->type == instBonus->type; - }); bonusFound == instBonuses->end()) - { - artInst->accumulateBonus(refBonus); - } - } } } @@ -171,7 +133,6 @@ void CChargedArtifactInstance::discharge(const uint16_t charges) chargedBonus->front()->val -= charges; else chargedBonus->front()->val = 0; - onChargesChanged(); } } @@ -184,7 +145,6 @@ void CChargedArtifactInstance::addCharges(const uint16_t charges) const auto chargedBonus = artInst->getBonusesOfType(BonusType::ARTIFACT_CHARGE); assert(!chargedBonus->empty()); chargedBonus->front()->val += charges; - onChargesChanged(); } } @@ -199,21 +159,7 @@ void CArtifactInstance::init() { const auto art = artTypeID.toArtifact(); assert(art); - - if(art->isCharged()) - { - // Charged artifacts contain all bonuses inside instance bonus node - if(art->getDischargeCondition() == DischargeArtifactCondition::SPELLCAST) - { - for(const auto & bonus : *art->getAllBonuses(Selector::all, nullptr)) - if(bonus->type != BonusType::SPELL) - accumulateBonus(bonus); - } - } - else - { - attachToSource(*art); - } + attachToSource(*art); } CArtifactInstance::CArtifactInstance(IGameInfoCallback *cb, const CArtifact * art) diff --git a/lib/entities/artifact/CArtifactInstance.h b/lib/entities/artifact/CArtifactInstance.h index 9a83738fd..5df973375 100644 --- a/lib/entities/artifact/CArtifactInstance.h +++ b/lib/entities/artifact/CArtifactInstance.h @@ -80,7 +80,6 @@ class DLL_LINKAGE CChargedArtifactInstance protected: CChargedArtifactInstance() = default; public: - void onChargesChanged(); void discharge(const uint16_t charges); void addCharges(const uint16_t charges); uint16_t getCharges() const; @@ -122,7 +121,6 @@ public: if(!h.saving && h.loadingGamestate) { init(); - onChargesChanged(); } } }; diff --git a/lib/gameState/GameStatePackVisitor.cpp b/lib/gameState/GameStatePackVisitor.cpp index 248599025..41752b014 100644 --- a/lib/gameState/GameStatePackVisitor.cpp +++ b/lib/gameState/GameStatePackVisitor.cpp @@ -946,6 +946,9 @@ void GameStatePackVisitor::visitDischargeArtifact(DischargeArtifact & pack) ePack.posPack.push_back(pack.artLoc.value().slot); ePack.visit(*this); } + // Workaround to inform hero bonus node about changes. Obviously this has to be done somehow differently. + if(pack.artLoc.has_value()) + gs.getHero(pack.artLoc.value().artHolder)->nodeHasChanged(); } void GameStatePackVisitor::visitAssembledArtifact(AssembledArtifact & pack) diff --git a/lib/json/JsonBonus.cpp b/lib/json/JsonBonus.cpp index 8866419d3..0b907d599 100644 --- a/lib/json/JsonBonus.cpp +++ b/lib/json/JsonBonus.cpp @@ -641,6 +641,16 @@ std::shared_ptr JsonUtils::parseLimiter(const JsonNode & limiter } return hexLimiter; } + else if(limiterType == "HAS_CHARGES_LIMITER") + { + auto hasChargesLimiter = std::make_shared(); + if(!parameters.Vector().empty()) + { + if(parameters.Vector().size() == 1 && parameters.Vector().front().isNumber()) + hasChargesLimiter->chargeCost = parameters.Vector().front().Integer(); + } + return hasChargesLimiter; + } else { logMod->error("Error: invalid customizable limiter type %s.", limiterType); diff --git a/lib/mapping/CMap.cpp b/lib/mapping/CMap.cpp index 1f187bef8..0944a7d50 100644 --- a/lib/mapping/CMap.cpp +++ b/lib/mapping/CMap.cpp @@ -21,6 +21,7 @@ #include "../RoadHandler.h" #include "../TerrainHandler.h" +#include "../bonuses/Limiters.h" #include "../callback/IGameInfoCallback.h" #include "../entities/artifact/CArtHandler.h" #include "../entities/hero/CHeroHandler.h" @@ -863,13 +864,19 @@ CArtifactInstance * CMap::createArtifact(const ArtifactID & artID, const SpellID { auto bonus = std::make_shared(); bonus->type = BonusType::ARTIFACT_CHARGE; + bonus->sid = artInst->getId(); bonus->val = 0; artInst->addNewBonus(bonus); artInst->addCharges(art->getDefaultStartCharges()); } for (const auto & bonus : art->instanceBonuses) - artInst->addNewBonus(std::make_shared(*bonus)); + { + auto instBonus = std::make_shared(*bonus); + if(const auto srcLimiter = std::static_pointer_cast(bonus->limiter)) + instBonus->limiter = std::make_shared(*srcLimiter, artInst->getId()); + artInst->addNewBonus(instBonus); + } return artInst; } diff --git a/lib/serializer/RegisterTypes.h b/lib/serializer/RegisterTypes.h index b124656ca..14b147c19 100644 --- a/lib/serializer/RegisterTypes.h +++ b/lib/serializer/RegisterTypes.h @@ -111,6 +111,7 @@ void registerTypes(Serializer &s) s.template registerType(51); s.template registerType(52); s.template registerType(53); + s.template registerType(55); s.template registerType(56); s.template registerType(57); s.template registerType(58); diff --git a/server/CGameHandler.cpp b/server/CGameHandler.cpp index ef091714d..a803934c3 100644 --- a/server/CGameHandler.cpp +++ b/server/CGameHandler.cpp @@ -3938,7 +3938,7 @@ void CGameHandler::castSpell(const spells::Caster * caster, SpellID spellID, con s->adventureCast(spellEnv.get(), p); if(const auto * hero = caster->getHeroCaster()) - useChargedArtifactUsed(hero->id, spellID); + useChargeBasedSpell(hero->id, spellID); } bool CGameHandler::swapStacks(const StackLocation & sl1, const StackLocation & sl2) @@ -4331,33 +4331,43 @@ void CGameHandler::startBattle(const CArmedInstance *army1, const CArmedInstance battles->startBattle(army1, army2); } -void CGameHandler::useChargedArtifactUsed(const ObjectInstanceID & heroObjectID, const SpellID & spellID) +void CGameHandler::useChargeBasedSpell(const ObjectInstanceID & heroObjectID, const SpellID & spellID) { const auto * hero = gameInfo().getHero(heroObjectID); assert(hero); assert(hero->canCastThisSpell(spellID.toSpell())); - if(vstd::contains(hero->getSpellsInSpellbook(), spellID)) - return; + std::optional> chargedArt; - std::vector> chargedArts; + // Check if hero used charge based spell + // To do this, we create a local copy of the hero with the necessary magical bonuses, except for the bonuses of charged artifacts + CGHeroInstance caster(&gameInfo()); + caster.setHypothetic(true); + for(const auto & b : *hero->getAllBonuses(Selector::type()(BonusType::SPELLS_OF_LEVEL), nullptr)) + caster.addNewBonus(b); + for(const auto & b : *hero->getAllBonuses(Selector::type()(BonusType::SPELLS_OF_SCHOOL), nullptr)) + caster.addNewBonus(b); + for(const auto & spell : hero->getSpellsInSpellbook()) + caster.addSpellToSpellbook(spell); for(const auto & [slot, slotInfo] : hero->artifactsWorn) { const auto * artInst = slotInfo.getArt(); const auto * artType = artInst->getType(); if(artType->getDischargeCondition() == DischargeArtifactCondition::SPELLCAST) { - chargedArts.emplace_back(slot, artInst->getId()); - } - else - { - if(const auto bonuses = artInst->getBonusesOfType(BonusType::SPELL, spellID); !bonuses->empty()) - return; + if(const auto spellCost = artType->getChargeCost(spellID)) + { + chargedArt.emplace(slot, artInst->getId(), spellCost.value()); + continue; + } } + caster.putArtifact(slot, artInst); } + if(caster.canCastThisSpell(spellID.toSpell())) + return; - assert(!chargedArts.empty()); - DischargeArtifact msg(chargedArts.front().second, 1); - msg.artLoc.emplace(hero->id, chargedArts.front().first); + assert(chargedArt.has_value()); + DischargeArtifact msg(std::get<1>(chargedArt.value()), std::get<2>(chargedArt.value())); + msg.artLoc.emplace(hero->id, std::get<0>(chargedArt.value())); sendAndApply(msg); } diff --git a/server/CGameHandler.h b/server/CGameHandler.h index 21aec9795..4e467baa6 100644 --- a/server/CGameHandler.h +++ b/server/CGameHandler.h @@ -176,7 +176,7 @@ public: void changeFogOfWar(const std::unordered_set &tiles, PlayerColor player,ETileVisibility mode) override; void castSpell(const spells::Caster * caster, SpellID spellID, const int3 &pos) override; - void useChargedArtifactUsed(const ObjectInstanceID & heroObjectID, const SpellID & spellID); + void useChargeBasedSpell(const ObjectInstanceID & heroObjectID, const SpellID & spellID); /// Returns hero that is currently visiting this object, or nullptr if no visit is active const CGHeroInstance * getVisitingHero(const CGObjectInstance *obj); diff --git a/server/battles/BattleActionProcessor.cpp b/server/battles/BattleActionProcessor.cpp index 8aff0418c..cf9340efb 100644 --- a/server/battles/BattleActionProcessor.cpp +++ b/server/battles/BattleActionProcessor.cpp @@ -124,7 +124,7 @@ bool BattleActionProcessor::doHeroSpellAction(const CBattleInfoCallback & battle } parameters.cast(gameHandler->spellcastEnvironment(), ba.getTarget(&battle)); - gameHandler->useChargedArtifactUsed(h->id, ba.spell); + gameHandler->useChargeBasedSpell(h->id, ba.spell); return true; } diff --git a/server/battles/BattleResultProcessor.cpp b/server/battles/BattleResultProcessor.cpp index 84c1eddb3..ffb883e26 100644 --- a/server/battles/BattleResultProcessor.cpp +++ b/server/battles/BattleResultProcessor.cpp @@ -436,7 +436,7 @@ void BattleResultProcessor::battleFinalize(const BattleID & battleID, const Batt pack.artsPack0.emplace_back(MoveArtifactInfo(srcSlot, dstSlot)); if(ArtifactUtils::isSlotEquipment(dstSlot)) pack.artsPack0.back().askAssemble = true; - artFittingSet.putArtifact(dstSlot, const_cast(art)); + artFittingSet.putArtifact(dstSlot, art); } }; From 7f9936cf10a9ce62cde3b40aebf9cd8ef8550a32 Mon Sep 17 00:00:00 2001 From: SoundSSGood <87084363+SoundSSGood@users.noreply.github.com> Date: Sun, 22 Jun 2025 23:08:18 +0200 Subject: [PATCH 48/60] getSourcesForSpell --- lib/bonuses/Bonus.cpp | 6 ++++ lib/bonuses/Bonus.h | 1 + lib/bonuses/CBonusSystemNode.h | 1 - lib/entities/artifact/CArtHandler.cpp | 3 ++ lib/mapObjects/CGHeroInstance.cpp | 50 +++++++++++++++------------ lib/mapObjects/CGHeroInstance.h | 1 + lib/mapping/CMap.cpp | 2 +- server/CGameHandler.cpp | 37 +++++++++----------- 8 files changed, 55 insertions(+), 46 deletions(-) diff --git a/lib/bonuses/Bonus.cpp b/lib/bonuses/Bonus.cpp index 7d7634d7c..19bb36bfb 100644 --- a/lib/bonuses/Bonus.cpp +++ b/lib/bonuses/Bonus.cpp @@ -236,6 +236,12 @@ Bonus::Bonus(BonusDuration::Type Duration, BonusType Type, BonusSource Src, si32 targetSourceType = BonusSource::OTHER; } +Bonus::Bonus(const Bonus & inst, const BonusSourceID & sourceId) + : Bonus(inst) +{ + sid = sourceId; +} + std::shared_ptr Bonus::addPropagator(const TPropagatorPtr & Propagator) { propagator = Propagator; diff --git a/lib/bonuses/Bonus.h b/lib/bonuses/Bonus.h index 7fda0c23b..dbab0204a 100644 --- a/lib/bonuses/Bonus.h +++ b/lib/bonuses/Bonus.h @@ -86,6 +86,7 @@ struct DLL_LINKAGE Bonus : public std::enable_shared_from_this, public Se Bonus(BonusDuration::Type Duration, BonusType Type, BonusSource Src, si32 Val, BonusSourceID sourceID); Bonus(BonusDuration::Type Duration, BonusType Type, BonusSource Src, si32 Val, BonusSourceID sourceID, BonusSubtypeID subtype); Bonus(BonusDuration::Type Duration, BonusType Type, BonusSource Src, si32 Val, BonusSourceID sourceID, BonusSubtypeID subtype, BonusValueType ValType); + Bonus(const Bonus & inst, const BonusSourceID & sourceId); Bonus() = default; template void serialize(Handler &h) diff --git a/lib/bonuses/CBonusSystemNode.h b/lib/bonuses/CBonusSystemNode.h index 347f69c68..b9ff66285 100644 --- a/lib/bonuses/CBonusSystemNode.h +++ b/lib/bonuses/CBonusSystemNode.h @@ -120,7 +120,6 @@ public: virtual std::string bonusToString(const std::shared_ptr& bonus) const {return "";}; //description or bonus name virtual std::string nodeName() const; bool isHypothetic() const { return isHypotheticNode; } - void setHypothetic(const bool hypothetic); BonusList & getExportedBonusList(); const BonusList & getExportedBonusList() const; diff --git a/lib/entities/artifact/CArtHandler.cpp b/lib/entities/artifact/CArtHandler.cpp index b508200aa..94e553c27 100644 --- a/lib/entities/artifact/CArtHandler.cpp +++ b/lib/entities/artifact/CArtHandler.cpp @@ -181,6 +181,7 @@ std::shared_ptr CArtHandler::loadFromJson(const std::string & scope, for(const auto & b : node["bonuses"].Vector()) { auto bonus = JsonUtils::parseBonus(b); + bonus->sid = art->getId(); art->addNewBonus(bonus); } } @@ -191,6 +192,7 @@ std::shared_ptr CArtHandler::loadFromJson(const std::string & scope, if (b.second.isNull()) continue; auto bonus = JsonUtils::parseBonus(b.second, art->getBonusTextID(b.first)); + bonus->sid = art->getId(); art->addNewBonus(bonus); } } @@ -200,6 +202,7 @@ std::shared_ptr CArtHandler::loadFromJson(const std::string & scope, if (b.second.isNull()) continue; auto bonus = JsonUtils::parseBonus(b.second, art->getBonusTextID(b.first)); + bonus->sid = art->getId(); bonus->source = BonusSource::ARTIFACT; bonus->duration = BonusDuration::PERMANENT; bonus->description.appendTextID(art->getNameTextID()); diff --git a/lib/mapObjects/CGHeroInstance.cpp b/lib/mapObjects/CGHeroInstance.cpp index 112b4c0e0..191fb1b87 100644 --- a/lib/mapObjects/CGHeroInstance.cpp +++ b/lib/mapObjects/CGHeroInstance.cpp @@ -902,22 +902,7 @@ void CGHeroInstance::spendMana(ServerCallback * server, const int spellCost) con bool CGHeroInstance::canCastThisSpell(const spells::Spell * spell) const { - const bool isAllowed = cb->isAllowed(spell->getId()); - - const bool inSpellBook = vstd::contains(spells, spell->getId()) && hasSpellbook(); - const bool specificBonus = hasBonusOfType(BonusType::SPELL, BonusSubtypeID(spell->getId())); - - bool schoolBonus = false; - - spell->forEachSchool([this, &schoolBonus](const SpellSchool & cnf, bool & stop) - { - if(hasBonusOfType(BonusType::SPELLS_OF_SCHOOL, BonusSubtypeID(cnf))) - { - schoolBonus = stop = true; - } - }); - - const bool levelBonus = hasBonusOfType(BonusType::SPELLS_OF_LEVEL, BonusCustomSubtype::spellLevel(spell->getLevel())); + const bool inSpellBook = spellbookContainsSpell(spell->getId()) && hasSpellbook(); if(spell->isSpecial()) { @@ -925,9 +910,9 @@ bool CGHeroInstance::canCastThisSpell(const spells::Spell * spell) const {//hero has this spell in spellbook logGlobal->error("Special spell %s in spellbook.", spell->getNameTranslated()); } - return specificBonus; + return hasBonusOfType(BonusType::SPELL, BonusSubtypeID(spell->getId())); } - else if(!isAllowed) + else if(!cb->isAllowed(spell->getId())) { if(inSpellBook) { @@ -935,12 +920,8 @@ bool CGHeroInstance::canCastThisSpell(const spells::Spell * spell) const //it is normal if set in map editor, but trace it to possible debug of magic guild logGlobal->trace("Banned spell %s in spellbook.", spell->getNameTranslated()); } - return inSpellBook || specificBonus || schoolBonus || levelBonus; - } - else - { - return inSpellBook || schoolBonus || specificBonus || levelBonus; } + return !getSourcesForSpell(spell->getId()).empty(); } bool CGHeroInstance::canLearnSpell(const spells::Spell * spell, bool allowBanned) const @@ -1254,6 +1235,29 @@ bool CGHeroInstance::spellbookContainsSpell(const SpellID & spell) const return vstd::contains(spells, spell); } +std::vector CGHeroInstance::getSourcesForSpell(const SpellID & spellId) const +{ + std::vector sources; + + if(hasSpellbook() && spellbookContainsSpell(spellId)) + sources.emplace_back(getArt(ArtifactPosition::SPELLBOOK)->getId()); + + for(const auto & bonus : *getBonusesOfType(BonusType::SPELL, spellId)) + sources.emplace_back(bonus->sid); + + const auto spell = spellId.toSpell(); + spell->forEachSchool([this, &sources](const SpellSchool & cnf, bool & stop) + { + for(const auto & bonus : *getBonusesOfType(BonusType::SPELLS_OF_SCHOOL, cnf)) + sources.emplace_back(bonus->sid); + }); + + for(const auto & bonus : *getBonusesOfType(BonusType::SPELLS_OF_LEVEL, BonusCustomSubtype::spellLevel(spell->getLevel()))) + sources.emplace_back(bonus->sid); + + return sources; +} + void CGHeroInstance::removeSpellbook() { spells.clear(); diff --git a/lib/mapObjects/CGHeroInstance.h b/lib/mapObjects/CGHeroInstance.h index e2b12718f..ed15184ff 100644 --- a/lib/mapObjects/CGHeroInstance.h +++ b/lib/mapObjects/CGHeroInstance.h @@ -153,6 +153,7 @@ public: void addSpellToSpellbook(const SpellID & spell); void removeSpellFromSpellbook(const SpellID & spell); bool spellbookContainsSpell(const SpellID & spell) const; + std::vector getSourcesForSpell(const SpellID & spell) const; void removeSpellbook(); const std::set & getSpellsInSpellbook() const; EAlignment getAlignment() const; diff --git a/lib/mapping/CMap.cpp b/lib/mapping/CMap.cpp index 0944a7d50..8cdb0806c 100644 --- a/lib/mapping/CMap.cpp +++ b/lib/mapping/CMap.cpp @@ -872,7 +872,7 @@ CArtifactInstance * CMap::createArtifact(const ArtifactID & artID, const SpellID for (const auto & bonus : art->instanceBonuses) { - auto instBonus = std::make_shared(*bonus); + auto instBonus = std::make_shared(*bonus, artInst->getId()); if(const auto srcLimiter = std::static_pointer_cast(bonus->limiter)) instBonus->limiter = std::make_shared(*srcLimiter, artInst->getId()); artInst->addNewBonus(instBonus); diff --git a/server/CGameHandler.cpp b/server/CGameHandler.cpp index a803934c3..1ffd65618 100644 --- a/server/CGameHandler.cpp +++ b/server/CGameHandler.cpp @@ -4337,34 +4337,29 @@ void CGameHandler::useChargeBasedSpell(const ObjectInstanceID & heroObjectID, co assert(hero); assert(hero->canCastThisSpell(spellID.toSpell())); - std::optional> chargedArt; - // Check if hero used charge based spell - // To do this, we create a local copy of the hero with the necessary magical bonuses, except for the bonuses of charged artifacts - CGHeroInstance caster(&gameInfo()); - caster.setHypothetic(true); - for(const auto & b : *hero->getAllBonuses(Selector::type()(BonusType::SPELLS_OF_LEVEL), nullptr)) - caster.addNewBonus(b); - for(const auto & b : *hero->getAllBonuses(Selector::type()(BonusType::SPELLS_OF_SCHOOL), nullptr)) - caster.addNewBonus(b); - for(const auto & spell : hero->getSpellsInSpellbook()) - caster.addSpellToSpellbook(spell); - for(const auto & [slot, slotInfo] : hero->artifactsWorn) + // Try to find other sources of the spell besides the charged artifacts. If there are any, we use them. + std::optional> chargedArt; + for(const auto & source : hero->getSourcesForSpell(spellID)) { - const auto * artInst = slotInfo.getArt(); - const auto * artType = artInst->getType(); - if(artType->getDischargeCondition() == DischargeArtifactCondition::SPELLCAST) + if(const auto * artInst = hero->getArtByInstanceId(source.as())) { - if(const auto spellCost = artType->getChargeCost(spellID)) + const auto * artType = artInst->getType(); + const auto spellCost = artType->getChargeCost(spellID); + if(spellCost.has_value() && artType->getDischargeCondition()== DischargeArtifactCondition::SPELLCAST) { - chargedArt.emplace(slot, artInst->getId(), spellCost.value()); - continue; + chargedArt.emplace(hero->getArtPos(artInst), artInst->getId(), spellCost.value()); + } + else + { + return; } } - caster.putArtifact(slot, artInst); + else + { + return; + } } - if(caster.canCastThisSpell(spellID.toSpell())) - return; assert(chargedArt.has_value()); DischargeArtifact msg(std::get<1>(chargedArt.value()), std::get<2>(chargedArt.value())); From 76debab846c6f83687975db6dbb67f24f29d0caa Mon Sep 17 00:00:00 2001 From: SoundSSGood <87084363+SoundSSGood@users.noreply.github.com> Date: Tue, 24 Jun 2025 01:23:07 +0200 Subject: [PATCH 49/60] HasChargesLimiter now works in "bonuses" json section --- lib/bonuses/Bonus.h | 10 +--------- lib/bonuses/BonusCustomTypes.h | 4 ++++ lib/bonuses/Limiters.cpp | 16 +++------------- lib/bonuses/Limiters.h | 19 +++++++++++-------- lib/entities/artifact/CArtHandler.cpp | 14 ++++++++++++++ lib/mapping/CMap.cpp | 7 +------ server/CGameHandler.cpp | 2 +- 7 files changed, 35 insertions(+), 37 deletions(-) diff --git a/lib/bonuses/Bonus.h b/lib/bonuses/Bonus.h index dbab0204a..fdd19f524 100644 --- a/lib/bonuses/Bonus.h +++ b/lib/bonuses/Bonus.h @@ -11,29 +11,21 @@ #include "BonusEnum.h" #include "BonusCustomTypes.h" -#include "../constants/VariantIdentifier.h" -#include "../constants/EntityIdentifiers.h" +#include "Limiters.h" #include "../serializer/Serializeable.h" #include "../texts/MetaString.h" #include "../filesystem/ResourcePath.h" VCMI_LIB_NAMESPACE_BEGIN -struct Bonus; class IBonusBearer; -class CBonusSystemNode; -class ILimiter; class IPropagator; class IUpdater; -class BonusList; class CSelector; class IGameInfoCallback; -using BonusSubtypeID = VariantIdentifier; -using BonusSourceID = VariantIdentifier; using TBonusListPtr = std::shared_ptr; using TConstBonusListPtr = std::shared_ptr; -using TLimiterPtr = std::shared_ptr; using TPropagatorPtr = std::shared_ptr; using TUpdaterPtr = std::shared_ptr; diff --git a/lib/bonuses/BonusCustomTypes.h b/lib/bonuses/BonusCustomTypes.h index 824561929..2520549ad 100644 --- a/lib/bonuses/BonusCustomTypes.h +++ b/lib/bonuses/BonusCustomTypes.h @@ -10,6 +10,7 @@ #pragma once #include "../constants/EntityIdentifiers.h" +#include "../constants/VariantIdentifier.h" VCMI_LIB_NAMESPACE_BEGIN @@ -76,4 +77,7 @@ public: static BonusCustomSubtype creatureLevel(int level); }; +using BonusSubtypeID = VariantIdentifier; +using BonusSourceID = VariantIdentifier; + VCMI_LIB_NAMESPACE_END diff --git a/lib/bonuses/Limiters.cpp b/lib/bonuses/Limiters.cpp index e5e0d0352..70f9db377 100644 --- a/lib/bonuses/Limiters.cpp +++ b/lib/bonuses/Limiters.cpp @@ -14,13 +14,9 @@ #include "../CBonusTypeHandler.h" #include "../GameLibrary.h" -#include "../entities/faction/CFaction.h" #include "../entities/faction/CTownHandler.h" -#include "../spells/CSpellHandler.h" #include "../CCreatureHandler.h" #include "../CCreatureSet.h" -#include "../texts/CGeneralTextHandler.h" -#include "../CSkillHandler.h" #include "../CStack.h" #include "../TerrainHandler.h" #include "../constants/StringConstants.h" @@ -81,7 +77,7 @@ static const CCreature * retrieveCreature(const CBonusSystemNode *node) } } -ILimiter::EDecision ILimiter::limit(const BonusLimitationContext &context) const /*return true to drop the bonus */ +ILimiter::EDecision ILimiter::limit(const BonusLimitationContext &context) const { return ILimiter::EDecision::ACCEPT; } @@ -596,23 +592,17 @@ HasChargesLimiter::HasChargesLimiter(const uint16_t cost) { } -HasChargesLimiter::HasChargesLimiter(const HasChargesLimiter & inst, const BonusSourceID & id) - : HasChargesLimiter(inst) -{ - chargesSourceId = id; -} - ILimiter::EDecision HasChargesLimiter::limit(const BonusLimitationContext & context) const { for(const auto & bonus : context.stillUndecided) { - if(bonus->type == BonusType::ARTIFACT_CHARGE && bonus->sid == chargesSourceId) + if(bonus->type == BonusType::ARTIFACT_CHARGE && bonus->sid == context.b.sid) return ILimiter::EDecision::NOT_SURE; } for(const auto & bonus : context.alreadyAccepted) { - if(bonus->type == BonusType::ARTIFACT_CHARGE && bonus->sid == chargesSourceId) + if(bonus->type == BonusType::ARTIFACT_CHARGE && bonus->sid == context.b.sid) return bonus->val >= chargeCost ? ILimiter::EDecision::ACCEPT : ILimiter::EDecision::DISCARD; } return ILimiter::EDecision::DISCARD; diff --git a/lib/bonuses/Limiters.h b/lib/bonuses/Limiters.h index adc05f2f6..89ba3ea4c 100644 --- a/lib/bonuses/Limiters.h +++ b/lib/bonuses/Limiters.h @@ -7,18 +7,21 @@ * Full text of license available in license.txt file, in main folder * */ +#pragma once -#include "Bonus.h" - +#include "BonusCustomTypes.h" +#include "BonusEnum.h" #include "../battle/BattleHexArray.h" #include "../serializer/Serializeable.h" #include "../constants/Enumerations.h" VCMI_LIB_NAMESPACE_BEGIN +struct Bonus; +class BonusList; +class CBonusSystemNode; class CCreature; - -extern DLL_LINKAGE const std::map bonusLimiterMap; +class JsonNode; struct BonusLimitationContext { @@ -41,7 +44,7 @@ public: virtual ~ILimiter() = default; - virtual EDecision limit(const BonusLimitationContext &context) const; //0 - accept bonus; 1 - drop bonus; 2 - delay (drops eventually) + virtual EDecision limit(const BonusLimitationContext &context) const; virtual std::string toString() const; virtual JsonNode toJsonNode() const; @@ -50,6 +53,9 @@ public: } }; +using TLimiterPtr = std::shared_ptr; +extern DLL_LINKAGE const std::map bonusLimiterMap; + class DLL_LINKAGE AggregateLimiter : public ILimiter { protected: @@ -280,17 +286,14 @@ class DLL_LINKAGE HasChargesLimiter : public ILimiter // works with bonuses that { public: uint16_t chargeCost; - BonusSourceID chargesSourceId; HasChargesLimiter(const uint16_t cost = 1); - HasChargesLimiter(const HasChargesLimiter & inst, const BonusSourceID & id); EDecision limit(const BonusLimitationContext & context) const override; template void serialize(Handler &h) { h & static_cast(*this); h & chargeCost; - h & chargesSourceId; } }; diff --git a/lib/entities/artifact/CArtHandler.cpp b/lib/entities/artifact/CArtHandler.cpp index 94e553c27..47b9f0ffd 100644 --- a/lib/entities/artifact/CArtHandler.cpp +++ b/lib/entities/artifact/CArtHandler.cpp @@ -259,6 +259,20 @@ std::shared_ptr CArtHandler::loadFromJson(const std::string & scope, } } + // Some bonuses must be located in the instance. + for(const auto & b : art->getExportedBonusList()) + { + if(std::dynamic_pointer_cast(b->limiter)) + { + b->source = BonusSource::ARTIFACT; + b->duration = BonusDuration::PERMANENT; + b->description.appendTextID(art->getNameTextID()); + b->description.appendRawString(" %+d"); + art->instanceBonuses.push_back(b); + art->removeBonus(b); + } + } + return art; } diff --git a/lib/mapping/CMap.cpp b/lib/mapping/CMap.cpp index 8cdb0806c..fabc7b167 100644 --- a/lib/mapping/CMap.cpp +++ b/lib/mapping/CMap.cpp @@ -871,12 +871,7 @@ CArtifactInstance * CMap::createArtifact(const ArtifactID & artID, const SpellID } for (const auto & bonus : art->instanceBonuses) - { - auto instBonus = std::make_shared(*bonus, artInst->getId()); - if(const auto srcLimiter = std::static_pointer_cast(bonus->limiter)) - instBonus->limiter = std::make_shared(*srcLimiter, artInst->getId()); - artInst->addNewBonus(instBonus); - } + artInst->addNewBonus(std::make_shared(*bonus, artInst->getId())); return artInst; } diff --git a/server/CGameHandler.cpp b/server/CGameHandler.cpp index 1ffd65618..e96e826c5 100644 --- a/server/CGameHandler.cpp +++ b/server/CGameHandler.cpp @@ -4346,7 +4346,7 @@ void CGameHandler::useChargeBasedSpell(const ObjectInstanceID & heroObjectID, co { const auto * artType = artInst->getType(); const auto spellCost = artType->getChargeCost(spellID); - if(spellCost.has_value() && artType->getDischargeCondition()== DischargeArtifactCondition::SPELLCAST) + if(spellCost.has_value() && spellCost.value() <= artInst->getCharges() && artType->getDischargeCondition() == DischargeArtifactCondition::SPELLCAST) { chargedArt.emplace(hero->getArtPos(artInst), artInst->getId(), spellCost.value()); } From 91b5a5bb3a94eb805dc1fc50e3fcfddd46ede3bc Mon Sep 17 00:00:00 2001 From: Laserlicht <13953785+Laserlicht@users.noreply.github.com> Date: Mon, 30 Jun 2025 21:47:47 +0200 Subject: [PATCH 50/60] fixed mage guild validation --- config/schemas/faction.json | 76 +++++++++++++++++++++---------------- 1 file changed, 44 insertions(+), 32 deletions(-) diff --git a/config/schemas/faction.json b/config/schemas/faction.json index 55217a336..894c86b30 100644 --- a/config/schemas/faction.json +++ b/config/schemas/faction.json @@ -166,32 +166,47 @@ "format" : "imageFile" }, "guildWindow" : { - "type" : "array", - "description" : "Image with small view on town from mage guild (each array element for different mage guild level; if one element only this will be always selected)", - "minItems" : 1, - "items" : { - "type" : "string", - "format" : "imageFile" - } + "anyOf" : [ + { + "type" : "array", + "description" : "Image with small view on town from mage guild (each array element for different mage guild level; if one element only this will be always selected)", + "minItems" : 1, + "items" : { + "type" : "string", + "format" : "imageFile" + } + }, + { + "type" : "string", + "description" : "Image with small view on town from mage guild", + "format" : "imageFile" + } + ] }, "guildBackground" : { - "type" : "array", - "description" : "Image with background of mage guild (each array element for different mage guild level; if one element only this will be always selected)", - "minItems" : 1, - "items" : { - "type" : "string", - "format" : "imageFile" - } - }, - "guildWindowPosition" : { - "type" : "array", - "items" : { - "type" : "object", - "additionalProperties" : false, - "properties" : { - "x" : { "type" : "number", "description" : "X coordinate on screen" }, - "y" : { "type" : "number", "description" : "Y coordinate on screen" } + "anyOf" : [ + { + "type" : "array", + "description" : "Image with background of mage guild (each array element for different mage guild level; if one element only this will be always selected)", + "minItems" : 1, + "items" : { + "type" : "string", + "format" : "imageFile" + } + }, + { + "type" : "string", + "description" : "Image with background of mage guild", + "format" : "imageFile" } + ] + }, + "guildWindowPosition" : { + "type" : "object", + "additionalProperties" : false, + "properties" : { + "x" : { "type" : "number", "description" : "X coordinate on screen" }, + "y" : { "type" : "number", "description" : "Y coordinate on screen" } } }, "guildSpellPositions" : { @@ -199,15 +214,12 @@ "description" : "Positions of spells in mage guild", "items" : { "type" : "array", - "items" : { - "type" : "array", - "items" : { - "type" : "object", - "additionalProperties" : false, - "properties" : { - "x" : { "type" : "number", "description" : "X coordinate on screen" }, - "y" : { "type" : "number", "description" : "Y coordinate on screen" } - } + "items" : { + "type" : "object", + "additionalProperties" : false, + "properties" : { + "x" : { "type" : "number", "description" : "X coordinate on screen" }, + "y" : { "type" : "number", "description" : "Y coordinate on screen" } } } } From e88153c8395dd15c6f262fdf7ed1cb658acd6257 Mon Sep 17 00:00:00 2001 From: Laserlicht <13953785+Laserlicht@users.noreply.github.com> Date: Mon, 30 Jun 2025 21:58:40 +0200 Subject: [PATCH 51/60] fix german text length --- Mods/vcmi/Content/config/german.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Mods/vcmi/Content/config/german.json b/Mods/vcmi/Content/config/german.json index 026386b98..42a4a0e20 100644 --- a/Mods/vcmi/Content/config/german.json +++ b/Mods/vcmi/Content/config/german.json @@ -352,7 +352,7 @@ "vcmi.adventureOptions.mapScrollSpeed6.help" : "Geschwindigkeit des Kartenbildlaufs auf sofort einstellen", "vcmi.adventureOptions.hideBackground.hover" : "Hintergrund ausblenden", "vcmi.adventureOptions.hideBackground.help" : "{Hintergrund ausblenden}\n\nDie Abenteuerkarte im Hintergrund ausblenden und stattdessen eine Textur anzeigen.", - "vcmi.adventureOptions.minimapShowHeroes.hover" : "Helden auf der Minimap anzeigen", + "vcmi.adventureOptions.minimapShowHeroes.hover" : "Helden auf Minimap anz.", "vcmi.adventureOptions.minimapShowHeroes.help" : "{Helden auf der Minimap anzeigen}\n\nZusätzliches Symbol für alle Helden auf der Minimap anzeigen, damit sie auf großen Karten besser zu sehen sind", "vcmi.battleOptions.queueSizeLabel.hover" : "Reihenfolge der Kreaturen anzeigen", From bc4a1b06fc1e49c8d4703c589cf1b8b559e5236b Mon Sep 17 00:00:00 2001 From: Ivan Savenko Date: Tue, 1 Jul 2025 12:34:53 +0300 Subject: [PATCH 52/60] Fix crash on moving double-wide units in some obstacle configurations --- client/battle/BattleActionsController.cpp | 15 +++++++++------ client/battle/BattleFieldController.cpp | 10 ++++++---- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/client/battle/BattleActionsController.cpp b/client/battle/BattleActionsController.cpp index 3fcee2ce8..1aba3a286 100644 --- a/client/battle/BattleActionsController.cpp +++ b/client/battle/BattleActionsController.cpp @@ -731,15 +731,18 @@ void BattleActionsController::actionRealize(PossiblePlayerBattleAction action, c case PossiblePlayerBattleAction::MOVE_STACK: { const auto * activeStack = owner.stacksController->getActiveStack(); - const bool backwardsMove = activeStack->unitSide() == BattleSide::ATTACKER ? - targetHex.getX() < activeStack->getPosition().getX(): - targetHex.getX() > activeStack->getPosition().getX(); - if(activeStack->doubleWide() && backwardsMove) + if(activeStack->doubleWide()) { - BattleHexArray acc = owner.getBattle()->battleGetAvailableHexes(activeStack, false); + BattleHexArray availableHexes = owner.getBattle()->battleGetAvailableHexes(activeStack, false); BattleHex shiftedDest = targetHex.cloneInDirection(activeStack->destShiftDir(), false); - if(acc.contains(shiftedDest)) + const bool canMoveHeadHere = availableHexes.contains(targetHex); + const bool canMoveTailHere = availableHexes.contains(shiftedDest); + const bool backwardsMove = activeStack->unitSide() == BattleSide::ATTACKER ? + targetHex.getX() < activeStack->getPosition().getX(): + targetHex.getX() > activeStack->getPosition().getX(); + + if(canMoveTailHere && (backwardsMove || !canMoveHeadHere)) owner.giveCommand(EActionType::WALK, shiftedDest); else owner.giveCommand(EActionType::WALK, targetHex); diff --git a/client/battle/BattleFieldController.cpp b/client/battle/BattleFieldController.cpp index e71b6a7ca..f016b36d3 100644 --- a/client/battle/BattleFieldController.cpp +++ b/client/battle/BattleFieldController.cpp @@ -392,14 +392,16 @@ BattleHexArray BattleFieldController::getHighlightedHexesForMovementTarget() if (stack->doubleWide()) { + const bool canMoveHeadHere = availableHexes.contains(hoveredHex); + const bool canMoveTailHere = availableHexes.contains(hoveredHex.cloneInDirection(stack->destShiftDir())); const bool backwardsMove = stack->unitSide() == BattleSide::ATTACKER ? - hoveredHex.getX() < stack->getPosition().getX(): - hoveredHex.getX() > stack->getPosition().getX(); + hoveredHex.getX() < stack->getPosition().getX(): + hoveredHex.getX() > stack->getPosition().getX(); - if (backwardsMove && availableHexes.contains(hoveredHex.cloneInDirection(stack->destShiftDir()))) + if(canMoveTailHere && (backwardsMove || !canMoveHeadHere)) return {hoveredHex, hoveredHex.cloneInDirection(stack->destShiftDir())}; - if (availableHexes.contains(hoveredHex)) + if (canMoveHeadHere) return {hoveredHex, stack->occupiedHex(hoveredHex)}; return {}; From 27f78907840b32496e47fd5f88c61747694acde3 Mon Sep 17 00:00:00 2001 From: Ivan Savenko Date: Tue, 1 Jul 2025 13:33:30 +0300 Subject: [PATCH 53/60] Fix possible crash on swithing to another player in hotseat while having different visible heroes on minimap --- client/adventureMap/AdventureMapInterface.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/client/adventureMap/AdventureMapInterface.cpp b/client/adventureMap/AdventureMapInterface.cpp index 18b6b96af..ebe264fcd 100644 --- a/client/adventureMap/AdventureMapInterface.cpp +++ b/client/adventureMap/AdventureMapInterface.cpp @@ -362,6 +362,7 @@ void AdventureMapInterface::onHotseatWaitStarted(PlayerColor playerID) { backgroundDimLevel = 255; + widget->getMinimap()->setAIRadar(true); onCurrentPlayerChanged(playerID); setState(EAdventureState::HOTSEAT_WAIT); } From 2d00d8a5859610f152d1d7b96b9d942a4113b0d7 Mon Sep 17 00:00:00 2001 From: Ivan Savenko Date: Tue, 1 Jul 2025 13:33:55 +0300 Subject: [PATCH 54/60] Adjust creature schema to detect misconfigured adventure map amounts --- config/schemas/creature.json | 45 +++++++++++++++++++++++++++++++----- 1 file changed, 39 insertions(+), 6 deletions(-) diff --git a/config/schemas/creature.json b/config/schemas/creature.json index dee7b063b..b466b42e5 100644 --- a/config/schemas/creature.json +++ b/config/schemas/creature.json @@ -4,15 +4,47 @@ "title" : "VCMI creature format", "description" : "Json format for defining new creatures in VCMI", "required" : [ "faction" ], - "anyOf" : [ + "allOf" : [ { - "disabled" : { "enum" : [ true ] } + "if" : { + "properties" : { + "disabled" : { + "const" : false + } + } + }, + "then" : { + "required" : [ + "name", "level", "cost", "speed", "hitPoints", "attack", "defense", "damage", "fightValue", "aiValue", "graphics", "sound" + ] + } }, { - "required" : [ - "name", "level", "cost", "speed", "hitPoints", "attack", "defense", "damage", - "fightValue", "aiValue", "advMapAmount", "graphics", "sound" - ] + "if" : { + "properties" : { + "special" : { + "const" : false + }, + "disabled" : { + "const" : false + } + } + }, + "then" : { + "required" : [ "advMapAmount" ], + "properties" : { + "advMapAmount" : { + "type" : "object", + "additionalProperties" : false, + "description" : "Initial size of random stacks on adventure map", + "required" : [ "min", "max" ], + "properties" : { + "min" : { "type" : "number", "minimum" : 1 }, + "max" : { "type" : "number", "minimum" : 1 } + } + } + } + } } ], "additionalProperties" : false, @@ -80,6 +112,7 @@ "damage" : { "type" : "object", "additionalProperties" : false, + "required" : [ "min", "max" ], "properties" : { "max" : { "type" : "number" }, "min" : { "type" : "number" } From 8fcbc09b8ea9c7f387fffd6f59e92232bf91dd5b Mon Sep 17 00:00:00 2001 From: Ivan Savenko Date: Tue, 1 Jul 2025 13:34:15 +0300 Subject: [PATCH 55/60] Fix crash on removing town with garrisoned hero from map --- lib/gameState/GameStatePackVisitor.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/gameState/GameStatePackVisitor.cpp b/lib/gameState/GameStatePackVisitor.cpp index 248599025..65629fb9b 100644 --- a/lib/gameState/GameStatePackVisitor.cpp +++ b/lib/gameState/GameStatePackVisitor.cpp @@ -420,8 +420,8 @@ void GameStatePackVisitor::visitRemoveObject(RemoveObject & pack) if (town->getGarrisonHero()) { - town->setGarrisonedHero(nullptr); gs.getMap().showObject(gs.getHero(town->getGarrisonHero()->id)); + town->setGarrisonedHero(nullptr); } } From 74e697d41ce48f6474dd9b9c8790e02f3abb59a5 Mon Sep 17 00:00:00 2001 From: Ivan Savenko Date: Tue, 1 Jul 2025 13:34:30 +0300 Subject: [PATCH 56/60] Fix regression from bonus system changes --- lib/mapping/MapFormatH3M.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/mapping/MapFormatH3M.cpp b/lib/mapping/MapFormatH3M.cpp index a8c0e60f6..c4d785d14 100644 --- a/lib/mapping/MapFormatH3M.cpp +++ b/lib/mapping/MapFormatH3M.cpp @@ -2127,7 +2127,7 @@ std::shared_ptr CMapLoaderH3M::readHero(const int3 & mapPositi bool hasCustomPrimSkills = reader->readBool(); if(hasCustomPrimSkills) { - auto ps = object->getAllBonuses(Selector::type()(BonusType::PRIMARY_SKILL).And(Selector::sourceType()(BonusSource::HERO_BASE_SKILL)), nullptr); + auto ps = object->getAllBonuses(Selector::type()(BonusType::PRIMARY_SKILL).And(Selector::sourceType()(BonusSource::HERO_BASE_SKILL)), ""); if(ps->size()) { logGlobal->debug("Hero %s has set primary skills twice (in map properties and on adventure map instance). Using the latter set...", object->getHeroTypeID().getNum() ); From 1daf9d3a4423416615eeed823f98d7fd4e984e7c Mon Sep 17 00:00:00 2001 From: Ivan Savenko Date: Tue, 1 Jul 2025 13:35:30 +0300 Subject: [PATCH 57/60] Fix possible crash on hovering over inaccessible hexes on other side of the battlefield when war machine is making turn --- client/battle/BattleFieldController.cpp | 6 +++--- lib/battle/BattleHex.h | 13 +++++++++++-- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/client/battle/BattleFieldController.cpp b/client/battle/BattleFieldController.cpp index f016b36d3..536f02ee1 100644 --- a/client/battle/BattleFieldController.cpp +++ b/client/battle/BattleFieldController.cpp @@ -392,8 +392,8 @@ BattleHexArray BattleFieldController::getHighlightedHexesForMovementTarget() if (stack->doubleWide()) { - const bool canMoveHeadHere = availableHexes.contains(hoveredHex); - const bool canMoveTailHere = availableHexes.contains(hoveredHex.cloneInDirection(stack->destShiftDir())); + const bool canMoveHeadHere = hoveredHex.isAvailable() && availableHexes.contains(hoveredHex); + const bool canMoveTailHere = hoveredHex.isAvailable() && availableHexes.contains(hoveredHex.cloneInDirection(stack->destShiftDir())); const bool backwardsMove = stack->unitSide() == BattleSide::ATTACKER ? hoveredHex.getX() < stack->getPosition().getX(): hoveredHex.getX() > stack->getPosition().getX(); @@ -822,7 +822,7 @@ bool BattleFieldController::isTileAttackable(const BattleHex & number) const for (auto & elem : occupiableHexes) { - if (BattleHex::mutualPosition(elem, number) != -1 || elem == number) + if (BattleHex::mutualPosition(elem, number) != BattleHex::EDir::NONE || elem == number) return true; } return false; diff --git a/lib/battle/BattleHex.h b/lib/battle/BattleHex.h index 33f2a4d5f..9c3d25f07 100644 --- a/lib/battle/BattleHex.h +++ b/lib/battle/BattleHex.h @@ -212,8 +212,17 @@ public: [[nodiscard]] static EDir mutualPosition(const BattleHex & hex1, const BattleHex & hex2) { for(auto dir : hexagonalDirections()) - if(hex2 == hex1.cloneInDirection(dir, false)) - return dir; + { + try + { + if(hex2 == hex1.cloneInDirection(dir, true)) + return dir; + } + catch (const std::out_of_range &) + { + continue; + } + } return NONE; } From 24ad703f866cfec1c105e2d22e73db1e1780f577 Mon Sep 17 00:00:00 2001 From: Ivan Savenko Date: Tue, 1 Jul 2025 17:49:25 +0300 Subject: [PATCH 58/60] Fix possible crash on re-recruiting hero that transferred in campaign --- lib/gameState/CGameStateCampaign.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/gameState/CGameStateCampaign.cpp b/lib/gameState/CGameStateCampaign.cpp index 4e7e5ed93..d89f26165 100644 --- a/lib/gameState/CGameStateCampaign.cpp +++ b/lib/gameState/CGameStateCampaign.cpp @@ -389,6 +389,7 @@ void CGameStateCampaign::replaceHeroesPlaceholders() heroToPlace->setAnchorPos(heroPlaceholder->anchorPos()); heroToPlace->setHeroType(heroToPlace->getHeroTypeID()); heroToPlace->appearance = heroToPlace->getObjectHandler()->getTemplates().front(); + heroToPlace->instanceName = heroPlaceholder->instanceName; gameState->map->replaceObject(campaignHeroReplacement.heroPlaceholderId, heroToPlace); } From 9d2cf288fbfb8f173226e43a89a0d34eba56385f Mon Sep 17 00:00:00 2001 From: Ivan Savenko Date: Tue, 1 Jul 2025 17:49:43 +0300 Subject: [PATCH 59/60] Fix possible crash on accessing no longer existing submod --- lib/modding/ModManager.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/lib/modding/ModManager.cpp b/lib/modding/ModManager.cpp index 2835c204a..01e961197 100644 --- a/lib/modding/ModManager.cpp +++ b/lib/modding/ModManager.cpp @@ -285,6 +285,13 @@ void ModsPresetState::removeOldMods(const TModList & modsToKeep) vstd::erase_if(currentPreset["settings"].Struct(), [&](const auto & entry){ return !vstd::contains(modsToKeep, entry.first); }); + + for (auto & modSettings : currentPreset["settings"].Struct()) + { + vstd::erase_if(modSettings.second.Struct(), [&](const auto & entry){ + return !vstd::contains(modsToKeep, modSettings.first + "." + entry.first); + }); + } } void ModsPresetState::eraseRootMod(const TModID & modName) From 1c0ef3bdf415398af046b17a367a874a07c16228 Mon Sep 17 00:00:00 2001 From: SoundSSGood <87084363+SoundSSGood@users.noreply.github.com> Date: Wed, 2 Jul 2025 11:56:47 +0200 Subject: [PATCH 60/60] Captured artifacts msg fix --- server/battles/BattleResultProcessor.cpp | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/server/battles/BattleResultProcessor.cpp b/server/battles/BattleResultProcessor.cpp index 84c1eddb3..60ad634e4 100644 --- a/server/battles/BattleResultProcessor.cpp +++ b/server/battles/BattleResultProcessor.cpp @@ -442,7 +442,7 @@ void BattleResultProcessor::battleFinalize(const BattleID & battleID, const Batt if(loserHero) { - auto & packHero = resultsApplied.movingArtifacts.emplace_back(finishingBattle->victor, finishingBattle->loserId, finishingBattle->winnerId, false); + BulkMoveArtifacts packHero(finishingBattle->victor, finishingBattle->loserId, finishingBattle->winnerId, false); packHero.srcArtHolder = finishingBattle->loserId; for(const auto & slot : ArtifactUtils::commonWornSlots()) { @@ -456,22 +456,31 @@ void BattleResultProcessor::battleFinalize(const BattleID & battleID, const Batt if(const auto art = artSlot.getArt(); art->getTypeId() != ArtifactID::GRAIL) addArtifactToTransfer(packHero, loserHero->getArtPos(art), art); } + if(!packHero.artsPack0.empty()) + resultsApplied.movingArtifacts.emplace_back(std::move(packHero)); if(loserHero->getCommander()) { - auto & packCommander = resultsApplied.movingArtifacts.emplace_back(finishingBattle->victor, finishingBattle->loserId, finishingBattle->winnerId, false); + BulkMoveArtifacts packCommander(finishingBattle->victor, finishingBattle->loserId, finishingBattle->winnerId, false); packCommander.srcCreature = loserHero->findStack(loserHero->getCommander()); for(const auto & artSlot : loserHero->getCommander()->artifactsWorn) addArtifactToTransfer(packCommander, artSlot.first, artSlot.second.getArt()); + + if(!packCommander.artsPack0.empty()) + resultsApplied.movingArtifacts.emplace_back(std::move(packCommander)); } + auto armyObj = dynamic_cast(gameHandler->gameInfo().getObj(finishingBattle->loserId)); for(const auto & armySlot : armyObj->stacks) { - auto & packsArmy = resultsApplied.movingArtifacts.emplace_back(finishingBattle->victor, finishingBattle->loserId, finishingBattle->winnerId, false); - packsArmy.srcArtHolder = armyObj->id; - packsArmy.srcCreature = armySlot.first; + BulkMoveArtifacts packArmy(finishingBattle->victor, finishingBattle->loserId, finishingBattle->winnerId, false); + packArmy.srcArtHolder = armyObj->id; + packArmy.srcCreature = armySlot.first; for(const auto & artSlot : armySlot.second->artifactsWorn) - addArtifactToTransfer(packsArmy, artSlot.first, armySlot.second->getArt(artSlot.first)); + addArtifactToTransfer(packArmy, artSlot.first, armySlot.second->getArt(artSlot.first)); + + if(!packArmy.artsPack0.empty()) + resultsApplied.movingArtifacts.emplace_back(std::move(packArmy)); } } }