1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-01-02 00:10:22 +02:00

Merge pull request #4166 from IvanSavenko/release_153

Preparation for 1.5.3 release
This commit is contained in:
Ivan Savenko 2024-06-20 14:07:44 +03:00 committed by GitHub
commit 650dfcbed8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
13 changed files with 123 additions and 98 deletions

View File

@ -621,6 +621,9 @@ BattleScore BattleExchangeEvaluator::calculateExchange(
if(!exchangeBattle->getForUpdate(u->unitId())->alive())
return false;
if (!u->getPosition().isValid())
return false; // e.g. tower shooters
return vstd::contains_if(reachabilityMap.at(u->getPosition()), [&attacker](const battle::Unit * other) -> bool
{
return attacker->unitId() == other->unitId();

View File

@ -9,6 +9,8 @@
* Game should now generate crash dump on uncaught c++ exception throw
* Fixed crash when player finishes game with negative score
* Fixed crash when opening tavern window in some localisations
* Fixed crash on loading previously generated random map when mods that add object with same name are used
* Game will now display an error message instead of silent crash if game data directory is not accessible
### Mechanics
* Transport Artefact victory condition will no longer trigger if another player has completed it.
@ -18,6 +20,7 @@
* Fixed hero not being able to learn spells from a mod in some cases, even if they are available from the town's mage guild.
* The game will now actually take resources from seers' huts with the Gather Resources mission instead of awarding them.
* Heroes with double spell points will no longer trigger the Mana Vortex.
* If turn timer runs out during pve battle game will end player turn after a battle instead of forcing retreat
### Interface
* Fixed reversed button functions in Exchange Window
@ -58,6 +61,7 @@
* Fixed potential crash when Nullkiller AI has access to Town Portal spell
* Fixed potential crash when Battle AI selects a spell to cast from a hero with summon spells.
* Several fixes to Nullkiller AI exploration logic
* Fixed bug leading to Battle AI doing nothing if targeted unit is unreachable
### Random Maps Generator
* Fixed crash when player selects a random number of players and selects a different colour to play, resulting in a non-continuous list of players.

View File

@ -55,7 +55,7 @@
"vcmi.radialWheel.moveDown" : "Mover para baixo",
"vcmi.radialWheel.moveBottom" : "Mover para o fundo",
"vcmi.spellBook.search" : "procurar...",
"vcmi.spellBook.search" : "Procurar...",
"vcmi.mainMenu.serverConnecting" : "Conectando...",
"vcmi.mainMenu.serverAddressEnter" : "Insira o endereço:",
@ -139,9 +139,9 @@
"vcmi.server.errors.existingProcess" : "Outro processo do servidor VCMI está em execução. Por favor, termine-o antes de iniciar um novo jogo.",
"vcmi.server.errors.modsToEnable" : "{Os seguintes mods são necessários}",
"vcmi.server.errors.modsToDisable" : "{Os seguintes mods devem ser desativados}",
"vcmi.server.errors.modNoDependency" : "Falha ao carregar mod {'%s'}!\n Ele depende do mod {'%s'} que não está ativo!\n",
"vcmi.server.errors.modConflict" : "Falha ao carregar mod {'%s'}!\n Conflita com o mod ativo {'%s'}!\n",
"vcmi.server.errors.unknownEntity" : "Falha ao carregar salvamento! Entidade desconhecida '%s' encontrada no jogo salvo! O salvamento pode não ser compatível com a versão atualmente instalada dos mods!",
"vcmi.server.errors.modNoDependency" : "Falha ao carregar o mod {'%s'}!\n Ele depende do mod {'%s'} que não está ativo!\n",
"vcmi.server.errors.modConflict" : "Falha ao carregar o mod {'%s'}!\n Conflita com o mod ativo {'%s'}!\n",
"vcmi.server.errors.unknownEntity" : "Falha ao carregar o salvamento! Entidade desconhecida '%s' encontrada no jogo salvo! O salvamento pode não ser compatível com a versão atualmente instalada dos mods!",
"vcmi.dimensionDoor.seaToLandError" : "Não é possível teleportar do mar para a terra ou vice-versa com uma Porta Dimensional.",
@ -189,8 +189,8 @@
"vcmi.adventureOptions.infoBarPick.help" : "{Mostra as Mensagens no Painel de Informações}\n\nSempre que possível, as mensagens do jogo provenientes de objetos no mapa serão mostradas no painel de informações, em vez de aparecerem em uma janela separada.",
"vcmi.adventureOptions.numericQuantities.hover" : "Quantidades Numéricas de Criaturas",
"vcmi.adventureOptions.numericQuantities.help" : "{Quantidades Numéricas de Criaturas}\n\nMostra as quantidades aproximadas de criaturas inimigas no formato numérico A-B.",
"vcmi.adventureOptions.forceMovementInfo.hover" : "Mostrar Sempre o Custo de Movimento",
"vcmi.adventureOptions.forceMovementInfo.help" : "{Mostrar Sempre o Custo de Movimento}\n\nSempre mostra os dados de pontos de movimento na barra de status (em vez de apenas visualizá-los enquanto você mantém pressionada a tecla ALT).",
"vcmi.adventureOptions.forceMovementInfo.hover" : "Sempre Mostrar o Custo de Movimento",
"vcmi.adventureOptions.forceMovementInfo.help" : "{Sempre Mostrar o Custo de Movimento}\n\nSempre mostra os dados de pontos de movimento na barra de status (em vez de apenas visualizá-los enquanto você mantém pressionada a tecla ALT).",
"vcmi.adventureOptions.showGrid.hover" : "Mostrar Grade",
"vcmi.adventureOptions.showGrid.help" : "{Mostrar Grade}\n\nMostra a sobreposição da grade, destacando as fronteiras entre as telhas do mapa de aventura.",
"vcmi.adventureOptions.borderScroll.hover" : "Rolagem de Borda",
@ -235,8 +235,8 @@
"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 feitiço.",
"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.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.adventureMap.revisitObject.hover" : "Revisitar Objeto",
"vcmi.adventureMap.revisitObject.help" : "{Revisitar Objeto}\n\nSe um herói estiver atualmente em um Objeto do Mapa, ele pode revisitar o local.",
@ -277,9 +277,9 @@
"vcmi.tutorialWindow.decription.AbortSpell" : "Toque e mantenha pressionado para cancelar um feitiço.",
"vcmi.otherOptions.availableCreaturesAsDwellingLabel.hover" : "Mostrar Criaturas Disponíveis",
"vcmi.otherOptions.availableCreaturesAsDwellingLabel.help" : "{Mostrar Criaturas Disponíveis}\n\nMostra o número de criaturas disponíveis para compra em vez de seu crescimento no resumo da cidade (canto inferior esquerdo da tela da cidade).",
"vcmi.otherOptions.creatureGrowthAsDwellingLabel.hover" : "Mostrar Crescimento Semanal de Criaturas",
"vcmi.otherOptions.creatureGrowthAsDwellingLabel.help" : "{Mostrar Crescimento Semanal de Criaturas}\n\nMostra o crescimento semanal das criaturas em vez da quantidade disponível no resumo da cidade (canto inferior esquerdo da tela da cidade).",
"vcmi.otherOptions.availableCreaturesAsDwellingLabel.help" : "{Mostrar Criaturas Disponíveis}\n\nMostra o número de criaturas disponíveis para compra em vez de sua produção no resumo da cidade (canto inferior esquerdo da tela da cidade).",
"vcmi.otherOptions.creatureGrowthAsDwellingLabel.hover" : "Mostrar Produção Semanal de Criaturas",
"vcmi.otherOptions.creatureGrowthAsDwellingLabel.help" : "{Mostrar Produção Semanal de Criaturas}\n\nMostra a produção semanal das criaturas em vez da quantidade disponível no resumo da cidade (canto inferior esquerdo da tela da cidade).",
"vcmi.otherOptions.compactTownCreatureInfo.hover" : "Informações Compactas de Criaturas",
"vcmi.otherOptions.compactTownCreatureInfo.help" : "{Informações Compactas de Criaturas}\n\nMostra informações menores para criaturas da cidade no resumo da cidade (canto inferior esquerdo da tela da cidade).",
@ -352,18 +352,18 @@
"vcmi.optionsTab.turnTime.select" : "Selecionar cronômetro do turno",
"vcmi.optionsTab.turnTime.unlimited" : "Tempo de turno ilimitado",
"vcmi.optionsTab.turnTime.classic.1" : "Cronômetro clássico: 1 minuto",
"vcmi.optionsTab.turnTime.classic.2" : "Cronômetro clássico: 2 minutos",
"vcmi.optionsTab.turnTime.classic.5" : "Cronômetro clássico: 5 minutos",
"vcmi.optionsTab.turnTime.classic.10" : "Cronômetro clássico: 10 minutos",
"vcmi.optionsTab.turnTime.classic.20" : "Cronômetro clássico: 20 minutos",
"vcmi.optionsTab.turnTime.classic.30" : "Cronômetro clássico: 30 minutos",
"vcmi.optionsTab.turnTime.chess.20" : "Xadrez: 20:00 + 10:00 + 02:00 + 00:00",
"vcmi.optionsTab.turnTime.chess.16" : "Xadrez: 16:00 + 08:00 + 01:30 + 00:00",
"vcmi.optionsTab.turnTime.chess.8" : "Xadrez: 08:00 + 04:00 + 01:00 + 00:00",
"vcmi.optionsTab.turnTime.chess.4" : "Xadrez: 04:00 + 02:00 + 00:30 + 00:00",
"vcmi.optionsTab.turnTime.chess.2" : "Xadrez: 02:00 + 01:00 + 00:15 + 00:00",
"vcmi.optionsTab.turnTime.chess.1" : "Xadrez: 01:00 + 01:00 + 00:00 + 00:00",
"vcmi.optionsTab.turnTime.classic.1" : "Cronômetro clássico 1 minuto",
"vcmi.optionsTab.turnTime.classic.2" : "Cronômetro clássico 2 minutos",
"vcmi.optionsTab.turnTime.classic.5" : "Cronômetro clássico 5 minutos",
"vcmi.optionsTab.turnTime.classic.10" : "Cronômetro clássico 10 minutos",
"vcmi.optionsTab.turnTime.classic.20" : "Cronômetro clássico 20 minutos",
"vcmi.optionsTab.turnTime.classic.30" : "Cronômetro clássico 30 minutos",
"vcmi.optionsTab.turnTime.chess.20" : "Xadrez 20:00 + 10:00 + 02:00 + 00:00",
"vcmi.optionsTab.turnTime.chess.16" : "Xadrez 16:00 + 08:00 + 01:30 + 00:00",
"vcmi.optionsTab.turnTime.chess.8" : "Xadrez 08:00 + 04:00 + 01:00 + 00:00",
"vcmi.optionsTab.turnTime.chess.4" : "Xadrez 04:00 + 02:00 + 00:30 + 00:00",
"vcmi.optionsTab.turnTime.chess.2" : "Xadrez 02:00 + 01:00 + 00:15 + 00:00",
"vcmi.optionsTab.turnTime.chess.1" : "Xadrez 01:00 + 01:00 + 00:00 + 00:00",
"vcmi.optionsTab.simturns.select" : "Selecionar turnos simultâneos",
"vcmi.optionsTab.simturns.none" : "Sem turnos simultâneos",
@ -490,13 +490,13 @@
"core.bonus.AIR_IMMUNITY.description" : "Imune a todos os feitiços da escola de magia do Ar",
"core.bonus.ATTACKS_ALL_ADJACENT.name" : "Ataque em Todas as Direções",
"core.bonus.ATTACKS_ALL_ADJACENT.description" : "Ataca todos os inimigos adjacentes",
"core.bonus.BLOCKS_RETALIATION.name" : "Sem Contra-ataques",
"core.bonus.BLOCKS_RETALIATION.name" : "Evita Contra-ataques",
"core.bonus.BLOCKS_RETALIATION.description" : "O inimigo não pode contra-atacar",
"core.bonus.BLOCKS_RANGED_RETALIATION.name" : "Sem Contra-ataques à Distância",
"core.bonus.BLOCKS_RANGED_RETALIATION.name" : "Evita Contra-ataques à Distância",
"core.bonus.BLOCKS_RANGED_RETALIATION.description" : "O inimigo não pode contra-atacar usando um ataque à distância",
"core.bonus.CATAPULT.name" : "Catapulta",
"core.bonus.CATAPULT.description" : "Ataca as muralhas de cerco",
"core.bonus.CHANGES_SPELL_COST_FOR_ALLY.name" : "Reduz Custo de Conjuração (${val})",
"core.bonus.CHANGES_SPELL_COST_FOR_ALLY.name" : "Custo de Conjuração (${val})",
"core.bonus.CHANGES_SPELL_COST_FOR_ALLY.description" : "Reduz o custo de conjuração de feitiços para o herói em ${val}",
"core.bonus.CHANGES_SPELL_COST_FOR_ENEMY.name" : "Absorvedor Mágico (${val})",
"core.bonus.CHANGES_SPELL_COST_FOR_ENEMY.description" : "Aumenta o custo de conjuração dos feitiços inimigos em ${val}",
@ -507,7 +507,7 @@
"core.bonus.DEATH_STARE.name" : "Olhar da Morte (${val}%)",
"core.bonus.DEATH_STARE.description" : "Tem ${val}% de chance de matar uma única criatura",
"core.bonus.DEFENSIVE_STANCE.name" : "Bônus de Defesa",
"core.bonus.DEFENSIVE_STANCE.description" : "+${val} de defesa ao se defender",
"core.bonus.DEFENSIVE_STANCE.description" : "+${val} de Defesa ao se defender",
"core.bonus.DESTRUCTION.name" : "Destruição",
"core.bonus.DESTRUCTION.description" : "Tem ${val}% de chance de matar unidades extras após o ataque",
"core.bonus.DOUBLE_DAMAGE_CHANCE.name" : "Golpe Mortal",
@ -521,7 +521,7 @@
"core.bonus.ENCHANTED.name" : "Encantado",
"core.bonus.ENCHANTED.description" : "Afetado por ${subtype.spell} permanente",
"core.bonus.ENEMY_ATTACK_REDUCTION.name" : "Ignorar Ataque (${val}%)",
"core.bonus.ENEMY_ATTACK_REDUCTION.description" : "Ao ser atacado, ${val}% do ataque do atacante é ignorado",
"core.bonus.ENEMY_ATTACK_REDUCTION.description" : "Ao ser atacado, ${val}% do ataque do agressor é ignorado",
"core.bonus.ENEMY_DEFENCE_REDUCTION.name" : "Ignorar Defesa (${val}%)",
"core.bonus.ENEMY_DEFENCE_REDUCTION.description" : "Ao atacar, ${val}% da defesa do defensor é ignorada",
"core.bonus.FIRE_IMMUNITY.name" : "Imunidade ao Fogo",
@ -545,7 +545,7 @@
"core.bonus.GENERAL_DAMAGE_REDUCTION.name" : "Redução de Dano (${val}%)",
"core.bonus.GENERAL_DAMAGE_REDUCTION.description" : "Reduz o dano físico de ataques à distância ou corpo a corpo",
"core.bonus.HATE.name" : "Odeia ${subtype.creature}",
"core.bonus.HATE.description" : "Causa ${val}% a mais de dano a ${subtype.creature}",
"core.bonus.HATE.description" : "${val}% a mais de dano a ${subtype.creature}",
"core.bonus.HEALER.name" : "Curandeiro",
"core.bonus.HEALER.description" : "Cura unidades aliadas",
"core.bonus.HP_REGENERATION.name" : "Regeneração",

View File

@ -208,7 +208,14 @@ int main(int argc, char * argv[])
logGlobal->info("The log file will be saved to %s", logPath);
// Init filesystem and settings
preinitDLL(::console, false);
try
{
preinitDLL(::console, false);
}
catch (const DataLoadingException & e)
{
handleFatalError(e.what(), true);
}
Settings session = settings.write["session"];
auto setSettingBool = [&](std::string key, std::string arg) {

View File

@ -1540,6 +1540,9 @@ CHallInterface::CHallInterface(const CGTownInstance * Town):
const CBuilding * building = nullptr;
for(auto & buildingID : boxList[row][col])//we are looking for the first not built structure
{
if (town->town->buildings.count(buildingID) == 0)
throw std::runtime_error("Town " + Town->town->faction->getJsonKey() + " has no building with ID " + std::to_string(buildingID.getNum()));
const CBuilding * current = town->town->buildings.at(buildingID);
if(vstd::contains(town->builtBuildings, buildingID))
{

View File

@ -2,6 +2,7 @@
[![Github Downloads](https://img.shields.io/github/downloads/vcmi/vcmi/1.5.0/total)](https://github.com/vcmi/vcmi/releases/tag/1.5.0)
[![Github Downloads](https://img.shields.io/github/downloads/vcmi/vcmi/1.5.1/total)](https://github.com/vcmi/vcmi/releases/tag/1.5.1)
[![Github Downloads](https://img.shields.io/github/downloads/vcmi/vcmi/1.5.2/total)](https://github.com/vcmi/vcmi/releases/tag/1.5.2)
[![Github Downloads](https://img.shields.io/github/downloads/vcmi/vcmi/1.5.3/total)](https://github.com/vcmi/vcmi/releases/tag/1.5.3)
[![Github Downloads](https://img.shields.io/github/downloads/vcmi/vcmi/total)](https://github.com/vcmi/vcmi/releases)
# VCMI Project

View File

@ -349,10 +349,10 @@ Negates all natural immunities for affected stacks. (Orb of Vulnerability)
### OPENING_BATTLE_SPELL
In battle, army affected by this bonus will cast spell at the very start of the battle
In battle, army affected by this bonus will cast spell at the very start of the battle. Spell is always cast at expert level.
- subtype: spell identifer
- val: spell mastery level
- val: duration of the spell, in rounds
### FREE_SHIP_BOARDING

View File

@ -79,7 +79,7 @@
<message>
<location filename="../aboutProject/aboutproject_moc.ui" line="234"/>
<source>Configuration files directory</source>
<translation type="unfinished"></translation>
<translation>Diretório de arquivos de configuração</translation>
</message>
<message>
<location filename="../aboutProject/aboutproject_moc.ui" line="297"/>
@ -294,7 +294,7 @@
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="105"/>
<source>Reload repositories</source>
<translation type="unfinished"></translation>
<translation>Recarregar repositórios</translation>
</message>
<message>
<location filename="../modManager/cmodlistview_moc.ui" line="340"/>
@ -574,7 +574,7 @@ Instalar o download realizado com sucesso?</translation>
<message>
<location filename="../modManager/cmodmanager.cpp" line="204"/>
<source>Required mod %1 is not enabled</source>
<translation>O mod necessário %1 não está habilitado</translation>
<translation>O mod necessário %1 não está ativado</translation>
</message>
<message>
<location filename="../modManager/cmodmanager.cpp" line="213"/>
@ -664,132 +664,132 @@ Instalar o download realizado com sucesso?</translation>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="507"/>
<source>Adventure Map Allies</source>
<translation>Aliados do mapa de aventura</translation>
<translation>Aliados do Mapa de Aventura</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="59"/>
<source>Online Lobby port</source>
<translation type="unfinished"></translation>
<translation>Porta da Sala de Espera On-line</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="66"/>
<source>Autocombat AI in battles</source>
<translation type="unfinished"></translation>
<translation>IA de combate automático nas batalhas</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="73"/>
<source>Sticks Sensitivity</source>
<translation type="unfinished"></translation>
<translation>Sensibilidade dos Analógicos</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="87"/>
<source>Haptic Feedback</source>
<translation type="unfinished"></translation>
<translation>Resposta Tátil</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="94"/>
<source>Software Cursor</source>
<translation type="unfinished"></translation>
<translation>Cursor por Software</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="108"/>
<source>Online Lobby address</source>
<translation type="unfinished"></translation>
<translation>Endereço da Sala de Espera On-line</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="115"/>
<source>Upscaling Filter</source>
<translation type="unfinished"></translation>
<translation>Filtro de Aumento de Escala</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="122"/>
<source>Use Relative Pointer Mode</source>
<translation type="unfinished"></translation>
<translation>Usar Modo de Ponteiro Relativo</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="195"/>
<source>Nearest</source>
<translation type="unfinished"></translation>
<translation>Mais Próximo</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="200"/>
<source>Linear</source>
<translation type="unfinished"></translation>
<translation>Linear</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="205"/>
<source>Best (Linear)</source>
<translation type="unfinished"></translation>
<translation>Melhor (Linear)</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="231"/>
<source>Input - Touchscreen</source>
<translation type="unfinished"></translation>
<translation>Entrada - Tela de Toque</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="440"/>
<source>Adventure Map Enemies</source>
<translation>Inimigos do mapa de aventura</translation>
<translation>Inimigos do Mapa de Aventura</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="474"/>
<source>Network</source>
<translation type="unfinished"></translation>
<translation>Linear</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="540"/>
<source>Audio</source>
<translation type="unfinished"></translation>
<translation>Áudio</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="578"/>
<source>Relative Pointer Speed</source>
<translation type="unfinished"></translation>
<translation>Velocidade do Ponteiro Relativo</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="585"/>
<source>Music Volume</source>
<translation type="unfinished"></translation>
<translation>Volume da Música</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="606"/>
<source>Ignore SSL errors</source>
<translation type="unfinished"></translation>
<translation>Ignorar erros SSL</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="618"/>
<source>Input - Mouse</source>
<translation type="unfinished"></translation>
<translation>Entrada - Mouse</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="628"/>
<source>Long Touch Duration</source>
<translation type="unfinished"></translation>
<translation>Duração do Toque Longo</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="635"/>
<source>%</source>
<translation type="unfinished"></translation>
<translation>%</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="658"/>
<source>Controller Click Tolerance</source>
<translation type="unfinished"></translation>
<translation>Tolerância de Clique do Controle</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="665"/>
<source>Touch Tap Tolerance</source>
<translation type="unfinished"></translation>
<translation>Tolerância de Toque Tátil</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="704"/>
<source>Input - Controller</source>
<translation type="unfinished"></translation>
<translation>Entrada - Controle</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="771"/>
<source>Sound Volume</source>
<translation type="unfinished"></translation>
<translation>Volume do Som</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="801"/>
@ -818,7 +818,7 @@ Instalar o download realizado com sucesso?</translation>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="514"/>
<source>Framerate Limit</source>
<translation>Limite de taxa de quadros</translation>
<translation>Limite de Taxa de Quadros</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="778"/>
@ -828,12 +828,12 @@ Instalar o download realizado com sucesso?</translation>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="839"/>
<source>Mouse Click Tolerance</source>
<translation type="unfinished"></translation>
<translation>Tolerância de Clique do Mouse</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="853"/>
<source>Sticks Acceleration</source>
<translation type="unfinished"></translation>
<translation>Aceleração dos Analógicos</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="995"/>
@ -1064,12 +1064,12 @@ Heroes® of Might and Magic® III HD atualmente não é suportado!</translation>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="304"/>
<source>Use offline installer from gog.com</source>
<translation type="unfinished"></translation>
<translation>Usar instalador offline do gog.com</translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="317"/>
<source>You can manually copy directories Maps, Data and Mp3 from the original game directory to VCMI data directory that you can see on top of this page</source>
<translation type="unfinished"></translation>
<translation>Você pode copiar manualmente os diretórios Mapas, Dados e Mp3 do diretório do jogo original para o diretório de dados do VCMI que você pode ver no topo desta página</translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="336"/>
@ -1106,23 +1106,24 @@ Heroes® of Might and Magic® III HD atualmente não é suportado!</translation>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="395"/>
<source>Installing... %p%</source>
<translation type="unfinished"></translation>
<translation>Instalando... %p%</translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="424"/>
<source>If you already have Heroes III files on your device, you can select this directory and VCMI will copy the existing data automatically.</source>
<translation type="unfinished"></translation>
<translation>Se você tem arquivos do Heroes III no seu dispositivo, você pode selecionar este diretório e o VCMI irá copiar os dados existentes automaticamente.</translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="466"/>
<source>Copy existing files</source>
<translation type="unfinished"></translation>
<translation>Copiar arquivos existentes</translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="511"/>
<source>If you own Heroes III on gog.com you can download backup offline installer from gog.com, and VCMI will import Heroes III data using offline installer.
Offline installer consists of two parts, .exe and .bin. Make sure you download both of them.</source>
<translation type="unfinished"></translation>
<translation>Se você possui o Heroes III no gog.com, você pode baixar o instalador offline de backup do gog.com, e o VCMI irá importar os dados do Heroes III usando o instalador offline.
O instalador offline consiste em duas partes, .exe e .bin. Certifique-se de baixar ambas.</translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="696"/>
@ -1173,7 +1174,7 @@ Offline installer consists of two parts, .exe and .bin. Make sure you download b
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="354"/>
<source>Manual Installation</source>
<translation type="unfinished"></translation>
<translation>Instalação Manual</translation>
</message>
<message>
<location filename="../firstLaunch/firstlaunch_moc.ui" line="367"/>
@ -1487,13 +1488,14 @@ Por favor, selecione o diretório com Heroes III: Complete Edition ou Heroes III
<message>
<location filename="../main.cpp" line="121"/>
<source>Error starting executable</source>
<translation type="unfinished"></translation>
<translation>Erro ao iniciar o executável</translation>
</message>
<message>
<location filename="../main.cpp" line="122"/>
<source>Failed to start %1
Reason: %2</source>
<translation type="unfinished"></translation>
<translation>Falha ao iniciar %1
Motivo: %2</translation>
</message>
</context>
<context>

View File

@ -10,6 +10,8 @@
#include "StdInc.h"
#include "CFileInputStream.h"
#include "../ExceptionsCommon.h"
VCMI_LIB_NAMESPACE_BEGIN
CFileInputStream::CFileInputStream(const boost::filesystem::path & file, si64 start, si64 size)
@ -18,7 +20,7 @@ CFileInputStream::CFileInputStream(const boost::filesystem::path & file, si64 st
fileStream{file.c_str(), std::ios::in | std::ios::binary}
{
if (fileStream.fail())
throw std::runtime_error("File " + file.string() + " isn't available.");
throw DataLoadingException("Failed to open file '" + file.string() + "'. Reason: " + strerror(errno) );
if (dataSize == 0)
{

View File

@ -12,14 +12,22 @@
#include "CFileInputStream.h"
#include "../ExceptionsCommon.h"
VCMI_LIB_NAMESPACE_BEGIN
CFilesystemLoader::CFilesystemLoader(std::string _mountPoint, boost::filesystem::path baseDirectory, size_t depth, bool initial):
baseDirectory(std::move(baseDirectory)),
mountPoint(std::move(_mountPoint)),
fileList(listFiles(mountPoint, depth, initial)),
recursiveDepth(depth)
{
try {
fileList = listFiles(mountPoint, depth, initial);
}
catch (const boost::filesystem::filesystem_error & e) {
throw DataLoadingException("Failed to load content of '" + baseDirectory.string() + "'. Reason: " + e.what());
}
logGlobal->trace("File system loaded, %d files found", fileList.size());
}

View File

@ -226,10 +226,7 @@ void CModHandler::loadOneMod(std::string modName, const std::string & parent, co
if(CResourceHandler::get("initial")->existsResource(CModInfo::getModFile(modFullName)))
{
JsonParsingSettings settings;
settings.mode = JsonParsingSettings::JsonFormatMode::JSON; // TODO: remove once Android launcher with its strict parser is gone
CModInfo mod(modFullName, modSettings[modName], JsonNode(CModInfo::getModFile(modFullName), settings));
CModInfo mod(modFullName, modSettings[modName], JsonNode(CModInfo::getModFile(modFullName)));
if (!parent.empty()) // this is submod, add parent to dependencies
mod.dependencies.insert(parent);

View File

@ -129,37 +129,37 @@
<message>
<location filename="../inspector/herospellwidget.ui" line="29"/>
<source>Spells</source>
<translation type="unfinished">Feitiços</translation>
<translation>Feitiços</translation>
</message>
<message>
<location filename="../inspector/herospellwidget.ui" line="47"/>
<source>Customize spells</source>
<translation type="unfinished"></translation>
<translation>Personalizar feitiços</translation>
</message>
<message>
<location filename="../inspector/herospellwidget.ui" line="76"/>
<source>Level 1</source>
<translation type="unfinished"></translation>
<translation>Nível 1</translation>
</message>
<message>
<location filename="../inspector/herospellwidget.ui" line="114"/>
<source>Level 2</source>
<translation type="unfinished"></translation>
<translation>Nível 2</translation>
</message>
<message>
<location filename="../inspector/herospellwidget.ui" line="152"/>
<source>Level 3</source>
<translation type="unfinished"></translation>
<translation>Nível 3</translation>
</message>
<message>
<location filename="../inspector/herospellwidget.ui" line="190"/>
<source>Level 4</source>
<translation type="unfinished"></translation>
<translation>Nível 4</translation>
</message>
<message>
<location filename="../inspector/herospellwidget.ui" line="228"/>
<source>Level 5</source>
<translation type="unfinished"></translation>
<translation>Nível 5</translation>
</message>
</context>
<context>
@ -1555,12 +1555,12 @@
<message>
<location filename="../validator.cpp" line="146"/>
<source>Spell scroll %1 is prohibited by map settings</source>
<translation>O pergaminho de feitiço %1 é proibido pelas configurações do mapa</translation>
<translation>O pergaminho mágico %1 é proibido pelas configurações do mapa</translation>
</message>
<message>
<location filename="../validator.cpp" line="149"/>
<source>Spell scroll %1 doesn&apos;t have instance assigned and must be removed</source>
<translation>O pergaminho de feitiço %1 não tem instância atribuída e deve ser removido</translation>
<translation>O pergaminho mágico %1 não tem instância atribuída e deve ser removido</translation>
</message>
<message>
<location filename="../validator.cpp" line="155"/>
@ -1738,32 +1738,32 @@
<message>
<location filename="../windownewmap.ui" line="164"/>
<source>S (36x36)</source>
<translation type="unfinished"></translation>
<translation>S (36x36)</translation>
</message>
<message>
<location filename="../windownewmap.ui" line="169"/>
<source>M (72x72)</source>
<translation type="unfinished"></translation>
<translation>M (72x72)</translation>
</message>
<message>
<location filename="../windownewmap.ui" line="174"/>
<source>L (108x108)</source>
<translation type="unfinished"></translation>
<translation>L (108x108)</translation>
</message>
<message>
<location filename="../windownewmap.ui" line="184"/>
<source>H (180x180)</source>
<translation type="unfinished"></translation>
<translation>H (180x180)</translation>
</message>
<message>
<location filename="../windownewmap.ui" line="189"/>
<source>XH (216x216)</source>
<translation type="unfinished"></translation>
<translation>XH (216x216)</translation>
</message>
<message>
<location filename="../windownewmap.ui" line="194"/>
<source>G (252x252)</source>
<translation type="unfinished"></translation>
<translation>G (252x252)</translation>
</message>
<message>
<location filename="../windownewmap.ui" line="248"/>

View File

@ -313,10 +313,8 @@ void TurnTimerHandler::onBattleLoop(const BattleID & battleID, int waitTime)
}
else
{
BattleAction retreat;
retreat.side = side;
retreat.actionType = EActionType::RETREAT; //harsh punishment
gameHandler.battles->makePlayerBattleAction(battleID, player, retreat);
// battle vs neutrals - no-op, let battle run till the end
// once battle is over player turn will be over due to running out of timer on adventure map
}
}
}