mirror of
https://github.com/vcmi/vcmi.git
synced 2024-11-24 08:32:34 +02:00
commit
c9fb2d6aab
10
ChangeLog.md
10
ChangeLog.md
@ -1,3 +1,13 @@
|
||||
# 1.5.4 -> 1.5.5
|
||||
|
||||
* Fixed crash when advancing to the next scenario in campaigns when the hero not transferring has a combination artefact that can be transferred to the next scenario.
|
||||
* Fixed game not updating information such as hero path and current music on new day
|
||||
* Changed default battle queue hotkey from Q to Z to match HD Mod / HotA
|
||||
* Changed default hotkey for finishing battle with quick combat from E to Z to match HD Mod / HotA
|
||||
* Creature casting now uses both F and G keyboard hotkeys
|
||||
* Shift+left click now directly opens the hero window when two heroes are in town
|
||||
* Fixed handling of alternative actions for creatures that have more than two potential actions, such as move, shoot, and cast spells.
|
||||
|
||||
# 1.5.3 -> 1.5.4
|
||||
|
||||
### Stability
|
||||
|
@ -33,7 +33,7 @@
|
||||
|
||||
"vcmi.heroOverview.startingArmy" : "Unidades Iniciais",
|
||||
"vcmi.heroOverview.warMachine" : "Máquinas de Guerra",
|
||||
"vcmi.heroOverview.secondarySkills" : "Habilidades Secundárias",
|
||||
"vcmi.heroOverview.secondarySkills" : "Habilid. Secundárias",
|
||||
"vcmi.heroOverview.spells" : "Feitiços",
|
||||
|
||||
"vcmi.radialWheel.mergeSameUnit" : "Mesclar criaturas iguais",
|
||||
@ -259,7 +259,7 @@
|
||||
"vcmi.battleWindow.damageRetaliation.damage" : "(%DAMAGE).",
|
||||
"vcmi.battleWindow.damageRetaliation.damageKills" : "(%DAMAGE, %KILLS).",
|
||||
|
||||
"vcmi.battleWindow.killed" : "Eliminados",
|
||||
"vcmi.battleWindow.killed" : "Mortos",
|
||||
"vcmi.battleWindow.accurateShot.resultDescription.0" : "%d %s morreram por tiros precisos!",
|
||||
"vcmi.battleWindow.accurateShot.resultDescription.1" : "%d %s morreu com um tiro preciso!",
|
||||
"vcmi.battleWindow.accurateShot.resultDescription.2" : "%d %s morreram por tiros precisos!",
|
||||
@ -612,7 +612,7 @@
|
||||
"core.bonus.SPELL_LIKE_ATTACK.description" : "Ataques com ${subtype.spell}",
|
||||
"core.bonus.SPELL_RESISTANCE_AURA.name" : "Aura de Resistência a Feitiços",
|
||||
"core.bonus.SPELL_RESISTANCE_AURA.description" : "Pilhas próximas ganham ${val}% de resistência a magia",
|
||||
"core.bonus.SUMMON_GUARDIANS.name" : "Invocar Guardiões",
|
||||
"core.bonus.SUMMON_GUARDIANS.name" : "Invocar Guardas",
|
||||
"core.bonus.SUMMON_GUARDIANS.description" : "No início da batalha, invoca ${subtype.creature} (${val}%)",
|
||||
"core.bonus.SYNERGY_TARGET.name" : "Alvo Sinergizável",
|
||||
"core.bonus.SYNERGY_TARGET.description" : "Esta criatura é vulnerável ao efeito de sinergia",
|
||||
|
@ -26,8 +26,8 @@ android {
|
||||
minSdk = qtMinSdkVersion as Integer
|
||||
targetSdk = qtTargetSdkVersion as Integer // ANDROID_TARGET_SDK_VERSION in the CMake project
|
||||
|
||||
versionCode 1540
|
||||
versionName "1.5.4"
|
||||
versionCode 1550
|
||||
versionName "1.5.5"
|
||||
|
||||
setProperty("archivesBaseName", "vcmi")
|
||||
}
|
||||
|
@ -444,7 +444,7 @@ void AdventureMapInterface::onPlayerTurnStarted(PlayerColor playerID)
|
||||
LOCPLINT->localState->setSelection(LOCPLINT->localState->getWanderingHero(0));
|
||||
}
|
||||
|
||||
centerOnObject(LOCPLINT->localState->getCurrentArmy());
|
||||
onSelectionChanged(LOCPLINT->localState->getCurrentArmy());
|
||||
|
||||
//show new day animation and sound on infobar, except for 1st day of the game
|
||||
if (LOCPLINT->cb->getDate(Date::DAY) != 1)
|
||||
|
@ -985,26 +985,27 @@ void BattleActionsController::activateStack()
|
||||
std::list<PossiblePlayerBattleAction> actionsToSelect;
|
||||
if(!possibleActions.empty())
|
||||
{
|
||||
switch(possibleActions.front().get())
|
||||
auto primaryAction = possibleActions.front().get();
|
||||
|
||||
if(primaryAction == PossiblePlayerBattleAction::SHOOT || primaryAction == PossiblePlayerBattleAction::AIMED_SPELL_CREATURE
|
||||
|| primaryAction == PossiblePlayerBattleAction::ANY_LOCATION || primaryAction == PossiblePlayerBattleAction::ATTACK_AND_RETURN)
|
||||
{
|
||||
case PossiblePlayerBattleAction::SHOOT:
|
||||
actionsToSelect.push_back(possibleActions.front());
|
||||
actionsToSelect.push_back(PossiblePlayerBattleAction::ATTACK);
|
||||
break;
|
||||
|
||||
case PossiblePlayerBattleAction::ATTACK_AND_RETURN:
|
||||
actionsToSelect.push_back(possibleActions.front());
|
||||
actionsToSelect.push_back(PossiblePlayerBattleAction::WALK_AND_ATTACK);
|
||||
break;
|
||||
|
||||
case PossiblePlayerBattleAction::AIMED_SPELL_CREATURE:
|
||||
actionsToSelect.push_back(possibleActions.front());
|
||||
actionsToSelect.push_back(PossiblePlayerBattleAction::ATTACK);
|
||||
break;
|
||||
case PossiblePlayerBattleAction::ANY_LOCATION:
|
||||
actionsToSelect.push_back(possibleActions.front());
|
||||
actionsToSelect.push_back(PossiblePlayerBattleAction::ATTACK);
|
||||
break;
|
||||
actionsToSelect.push_back(possibleActions.front());
|
||||
|
||||
auto shootActionPredicate = [](const PossiblePlayerBattleAction& action)
|
||||
{
|
||||
return action.get() == PossiblePlayerBattleAction::SHOOT;
|
||||
};
|
||||
bool hasShootSecondaryAction = std::any_of(possibleActions.begin() + 1, possibleActions.end(), shootActionPredicate);
|
||||
|
||||
if(hasShootSecondaryAction) //casters may have shooting capabilities, for example storm elementals
|
||||
actionsToSelect.emplace_back(PossiblePlayerBattleAction::SHOOT);
|
||||
|
||||
/* TODO: maybe it would also make sense to check spellcast as non-top priority action ("NO_SPELLCAST_BY_DEFAULT" bonus)?
|
||||
* it would require going beyond this "if" block for melee casters
|
||||
* F button helps, but some mod creatures may have that bonus and more than 1 castable spell */
|
||||
|
||||
actionsToSelect.emplace_back(PossiblePlayerBattleAction::ATTACK); //always allow melee attack as last option
|
||||
}
|
||||
}
|
||||
owner.windowObject->setAlternativeActions(actionsToSelect);
|
||||
@ -1071,3 +1072,8 @@ void BattleActionsController::pushFrontPossibleAction(PossiblePlayerBattleAction
|
||||
{
|
||||
possibleActions.insert(possibleActions.begin(), action);
|
||||
}
|
||||
|
||||
void BattleActionsController::resetCurrentStackPossibleActions()
|
||||
{
|
||||
possibleActions = getPossibleActionsForStack(owner.stacksController->getActiveStack());
|
||||
}
|
||||
|
@ -122,4 +122,7 @@ public:
|
||||
|
||||
/// inserts possible action in the beggining in order to prioritize it
|
||||
void pushFrontPossibleAction(PossiblePlayerBattleAction);
|
||||
|
||||
/// resets possible actions to original state
|
||||
void resetCurrentStackPossibleActions();
|
||||
};
|
||||
|
@ -48,7 +48,7 @@
|
||||
|
||||
BattleWindow::BattleWindow(BattleInterface & owner):
|
||||
owner(owner),
|
||||
defaultAction(PossiblePlayerBattleAction::INVALID)
|
||||
lastAlternativeAction(PossiblePlayerBattleAction::INVALID)
|
||||
{
|
||||
OBJ_CONSTRUCTION_CAPTURING_ALL_NO_DISPOSE;
|
||||
pos.w = 800;
|
||||
@ -568,14 +568,18 @@ void BattleWindow::showAlternativeActionIcon(PossiblePlayerBattleAction action)
|
||||
|
||||
void BattleWindow::setAlternativeActions(const std::list<PossiblePlayerBattleAction> & actions)
|
||||
{
|
||||
assert(actions.size() != 1);
|
||||
|
||||
alternativeActions = actions;
|
||||
defaultAction = PossiblePlayerBattleAction::INVALID;
|
||||
lastAlternativeAction = PossiblePlayerBattleAction::INVALID;
|
||||
|
||||
if(alternativeActions.size() > 1)
|
||||
defaultAction = alternativeActions.back();
|
||||
if(!alternativeActions.empty())
|
||||
{
|
||||
lastAlternativeAction = alternativeActions.back();
|
||||
showAlternativeActionIcon(alternativeActions.front());
|
||||
}
|
||||
else
|
||||
showAlternativeActionIcon(defaultAction);
|
||||
showAlternativeActionIcon(PossiblePlayerBattleAction::INVALID);
|
||||
}
|
||||
|
||||
void BattleWindow::bAutofightf()
|
||||
@ -670,23 +674,18 @@ void BattleWindow::bSwitchActionf()
|
||||
{
|
||||
if(alternativeActions.empty())
|
||||
return;
|
||||
|
||||
if(alternativeActions.front() == defaultAction)
|
||||
{
|
||||
alternativeActions.push_back(alternativeActions.front());
|
||||
alternativeActions.pop_front();
|
||||
}
|
||||
|
||||
|
||||
auto actions = owner.actionsController->getPossibleActions();
|
||||
if(!actions.empty() && actions.front() == alternativeActions.front())
|
||||
|
||||
if(!actions.empty() && actions.front() != lastAlternativeAction)
|
||||
{
|
||||
owner.actionsController->removePossibleAction(alternativeActions.front());
|
||||
showAlternativeActionIcon(defaultAction);
|
||||
showAlternativeActionIcon(*std::next(alternativeActions.begin()));
|
||||
}
|
||||
else
|
||||
{
|
||||
owner.actionsController->pushFrontPossibleAction(alternativeActions.front());
|
||||
showAlternativeActionIcon(alternativeActions.front());
|
||||
owner.actionsController->resetCurrentStackPossibleActions();
|
||||
showAlternativeActionIcon(owner.actionsController->getPossibleActions().front());
|
||||
}
|
||||
|
||||
alternativeActions.push_back(alternativeActions.front());
|
||||
|
@ -65,7 +65,7 @@ class BattleWindow : public InterfaceObjectConfigurable
|
||||
|
||||
/// management of alternative actions
|
||||
std::list<PossiblePlayerBattleAction> alternativeActions;
|
||||
PossiblePlayerBattleAction defaultAction;
|
||||
PossiblePlayerBattleAction lastAlternativeAction;
|
||||
void showAlternativeActionIcon(PossiblePlayerBattleAction);
|
||||
|
||||
/// flip battle queue visibility to opposite
|
||||
|
@ -428,7 +428,7 @@ void CHeroGSlot::clickPressed(const Point & cursorPosition)
|
||||
{
|
||||
setHighlight(false);
|
||||
|
||||
if(other->hero)
|
||||
if(other->hero && !GH.isKeyboardShiftDown())
|
||||
LOCPLINT->showHeroExchange(hero->id, other->hero->id);
|
||||
else
|
||||
LOCPLINT->openHeroWindow(hero);
|
||||
|
@ -1,6 +1,6 @@
|
||||
set(VCMI_VERSION_MAJOR 1)
|
||||
set(VCMI_VERSION_MINOR 5)
|
||||
set(VCMI_VERSION_PATCH 4)
|
||||
set(VCMI_VERSION_PATCH 5)
|
||||
add_definitions(
|
||||
-DVCMI_VERSION_MAJOR=${VCMI_VERSION_MAJOR}
|
||||
-DVCMI_VERSION_MINOR=${VCMI_VERSION_MINOR}
|
||||
|
@ -40,6 +40,12 @@
|
||||
"$ref" : "objectTemplate.json"
|
||||
}
|
||||
},
|
||||
|
||||
"battleground" : {
|
||||
"description" : "Battleground that will be used for combats in this object. Overrides terrain this object was placed on",
|
||||
"type" : "string"
|
||||
},
|
||||
|
||||
"sounds" : {
|
||||
"type" : "object",
|
||||
"additionalProperties" : false,
|
||||
|
@ -55,7 +55,7 @@
|
||||
"adventureZoomOut": "Keypad -",
|
||||
"adventureZoomReset": "Backspace",
|
||||
"battleAutocombat": "A",
|
||||
"battleAutocombatEnd": "E",
|
||||
"battleAutocombatEnd": "Q",
|
||||
"battleCastSpell": "C",
|
||||
"battleConsoleDown": "Down",
|
||||
"battleConsoleUp": "Up",
|
||||
@ -68,8 +68,8 @@
|
||||
"battleTacticsEnd": [ "Return", "Keypad Enter"],
|
||||
"battleTacticsNext": "Space",
|
||||
"battleToggleHeroesStats": [],
|
||||
"battleToggleQueue": "Q",
|
||||
"battleUseCreatureSpell": "F",
|
||||
"battleToggleQueue": "Z",
|
||||
"battleUseCreatureSpell": ["F", "G"],
|
||||
"battleWait": "W",
|
||||
"exchangeArmySwap": "F10",
|
||||
"exchangeArmyToLeft": [],
|
||||
|
6
debian/changelog
vendored
6
debian/changelog
vendored
@ -1,3 +1,9 @@
|
||||
vcmi (1.5.5) jammy; urgency=medium
|
||||
|
||||
* New upstream release
|
||||
|
||||
-- Ivan Savenko <saven.ivan@gmail.com> Wed, 17 Jul 2024 12:00:00 +0200
|
||||
|
||||
vcmi (1.5.4) jammy; urgency=medium
|
||||
|
||||
* New upstream release
|
||||
|
@ -1,7 +1,7 @@
|
||||
[![VCMI](https://github.com/vcmi/vcmi/actions/workflows/github.yml/badge.svg?branch=develop&event=push)](https://github.com/vcmi/vcmi/actions/workflows/github.yml?query=branch%3Adevelop+event%3Apush)
|
||||
[![Github Downloads](https://img.shields.io/github/downloads/vcmi/vcmi/1.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.3/total)](https://github.com/vcmi/vcmi/releases/tag/1.5.3)
|
||||
[![Github Downloads](https://img.shields.io/github/downloads/vcmi/vcmi/1.5.4/total)](https://github.com/vcmi/vcmi/releases/tag/1.5.4)
|
||||
[![Github Downloads](https://img.shields.io/github/downloads/vcmi/vcmi/1.5.5/total)](https://github.com/vcmi/vcmi/releases/tag/1.5.5)
|
||||
[![Github Downloads](https://img.shields.io/github/downloads/vcmi/vcmi/total)](https://github.com/vcmi/vcmi/releases)
|
||||
|
||||
# VCMI Project
|
||||
|
@ -58,6 +58,9 @@ Full object consists from 3 parts:
|
||||
// How valuable this object is to AI
|
||||
"aiValue" : 1000,
|
||||
|
||||
// Battleground that will be used for combats in this object. Overrides terrain this object was placed on
|
||||
"battleground" : "cursed_ground",
|
||||
|
||||
// Sounds assigned to this object
|
||||
"sounds" : {
|
||||
// Ambient sounds that plays when current hero is near this object
|
||||
|
@ -90,6 +90,7 @@
|
||||
</screenshots>
|
||||
<launchable type="desktop-id">vcmilauncher.desktop</launchable>
|
||||
<releases>
|
||||
<release version="1.5.5" date="2024-07-17" type="stable"/>
|
||||
<release version="1.5.4" date="2024-07-12" type="stable"/>
|
||||
<release version="1.5.3" date="2024-06-21" type="stable"/>
|
||||
<release version="1.5.2" date="2024-05-31" type="stable"/>
|
||||
|
@ -465,11 +465,11 @@
|
||||
<message>
|
||||
<location filename="../modManager/cmodlistview_moc.cpp" line="701"/>
|
||||
<source>Downloading %1. %p% (%v MB out of %m MB) finished</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>正在下载 %1. %p% (%v MB 共 %m MB) 已完成</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Downloading %s%. %p% (%v MB out of %m MB) finished</source>
|
||||
<translation type="vanished">下载进度 %s%. %p% (%v MB 共 %m MB) 已完成</translation>
|
||||
<translation type="vanished">正在下载 %s%. %p% (%v MB 共 %m MB) 已完成</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../modManager/cmodlistview_moc.cpp" line="726"/>
|
||||
@ -738,12 +738,12 @@ Install successfully downloaded?</source>
|
||||
<message>
|
||||
<location filename="../settingsView/csettingsview_moc.ui" line="1152"/>
|
||||
<source>Show Tutorial again</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>重新显示教程</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../settingsView/csettingsview_moc.ui" line="1159"/>
|
||||
<source>Reset</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>重置</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../settingsView/csettingsview_moc.ui" line="860"/>
|
||||
@ -1275,7 +1275,7 @@ Offline installer consists of two parts, .exe and .bin. Make sure you download b
|
||||
<message>
|
||||
<location filename="../firstLaunch/firstlaunch_moc.cpp" line="330"/>
|
||||
<source>File cannot opened</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>打开文件失败</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../firstLaunch/firstlaunch_moc.cpp" line="336"/>
|
||||
@ -1324,23 +1324,24 @@ Please select directory with installed Heroes III data.</source>
|
||||
<message>
|
||||
<location filename="../firstLaunch/firstlaunch_moc.cpp" line="387"/>
|
||||
<source>You've provided GOG Galaxy installer! This file doesn't contain the game. Please download the offline backup game installer!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>您提供的是GOG Galaxy安装器!这个文件不包含游戏内容,请下载离线游戏安装器!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../firstLaunch/firstlaunch_moc.cpp" line="412"/>
|
||||
<source>Stream error while extracting files!
|
||||
error reason: </source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>提取文件时遭遇文件流错误!
|
||||
错误原因: </translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../firstLaunch/firstlaunch_moc.cpp" line="425"/>
|
||||
<source>Not a supported Inno Setup installer!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>这不是一个支持的Inno Setup安装器!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../firstLaunch/firstlaunch_moc.cpp" line="436"/>
|
||||
<source>Extracting error!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>提取错误!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../firstLaunch/firstlaunch_moc.cpp" line="506"/>
|
||||
|
@ -461,7 +461,7 @@
|
||||
<message>
|
||||
<location filename="../modManager/cmodlistview_moc.cpp" line="701"/>
|
||||
<source>Downloading %1. %p% (%v MB out of %m MB) finished</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Baixando %1. %p% (%v MB de %m MB) concluído</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Downloading %s%. %p% (%v MB out of %m MB) finished</source>
|
||||
@ -733,12 +733,12 @@ Instalar o download realizado com sucesso?</translation>
|
||||
<message>
|
||||
<location filename="../settingsView/csettingsview_moc.ui" line="1152"/>
|
||||
<source>Show Tutorial again</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Mostrar o Tutorial novamente</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../settingsView/csettingsview_moc.ui" line="1159"/>
|
||||
<source>Reset</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Redefinir</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../settingsView/csettingsview_moc.ui" line="860"/>
|
||||
@ -940,7 +940,7 @@ Modo de tela cheia exclusivo - o jogo cobrirá toda a sua tela e usará a resolu
|
||||
<message>
|
||||
<location filename="../settingsView/csettingsview_moc.ui" line="796"/>
|
||||
<source>Autosave</source>
|
||||
<translation>Salvar automaticamente</translation>
|
||||
<translation>Salvamento automático</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../settingsView/csettingsview_moc.ui" line="597"/>
|
||||
@ -1268,7 +1268,7 @@ O instalador offline consiste em duas partes, .exe e .bin. Certifique-se de baix
|
||||
<message>
|
||||
<location filename="../firstLaunch/firstlaunch_moc.cpp" line="330"/>
|
||||
<source>File cannot opened</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>O arquivo não pode ser aberto</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../firstLaunch/firstlaunch_moc.cpp" line="336"/>
|
||||
@ -1317,23 +1317,24 @@ Por favor, selecione o diretório com os dados do Heroes III instalados.</transl
|
||||
<message>
|
||||
<location filename="../firstLaunch/firstlaunch_moc.cpp" line="387"/>
|
||||
<source>You've provided GOG Galaxy installer! This file doesn't contain the game. Please download the offline backup game installer!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Você forneceu o instalador do GOG Galaxy! Este arquivo não contém o jogo. Por favor, faça o download do instalador offline de backup do jogo!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../firstLaunch/firstlaunch_moc.cpp" line="412"/>
|
||||
<source>Stream error while extracting files!
|
||||
error reason: </source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Erro de fluxo ao extrair arquivos!
|
||||
Motivo do erro: </translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../firstLaunch/firstlaunch_moc.cpp" line="425"/>
|
||||
<source>Not a supported Inno Setup installer!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Instalador do Inno Setup não suportado!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../firstLaunch/firstlaunch_moc.cpp" line="436"/>
|
||||
<source>Extracting error!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Erro ao extrair!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../firstLaunch/firstlaunch_moc.cpp" line="506"/>
|
||||
|
@ -74,6 +74,11 @@ public:
|
||||
{
|
||||
return action == other.action && spellToCast == other.spellToCast;
|
||||
}
|
||||
|
||||
bool operator != (const PossiblePlayerBattleAction & other) const
|
||||
{
|
||||
return action != other.action || spellToCast != other.spellToCast;
|
||||
}
|
||||
};
|
||||
|
||||
VCMI_LIB_NAMESPACE_END
|
||||
|
@ -120,6 +120,11 @@ void CGameStateCampaign::trimCrossoverHeroesParameters(const CampaignTravel & tr
|
||||
if(!info)
|
||||
return false;
|
||||
|
||||
// FIXME: double-check how H3 handles case of transferring components of a combined artifact if entire combined artifact is not transferrable
|
||||
// For example, what happens if hero has assembled Angelic Alliance, AA is not marked is transferrable, but Sandals can be transferred? Should artifact be disassembled?
|
||||
if (info->locked)
|
||||
return false;
|
||||
|
||||
// TODO: why would there be nullptr artifacts?
|
||||
const CArtifactInstance *art = info->artifact;
|
||||
if(!art)
|
||||
|
@ -6,17 +6,17 @@
|
||||
<message>
|
||||
<location filename="../inspector/armywidget.ui" line="23"/>
|
||||
<source>Army settings</source>
|
||||
<translation>Configurações do Exército</translation>
|
||||
<translation>Configurações do exército</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../inspector/armywidget.ui" line="142"/>
|
||||
<source>Wide formation</source>
|
||||
<translation>Formação Aberta</translation>
|
||||
<translation>Formação aberta</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../inspector/armywidget.ui" line="129"/>
|
||||
<source>Tight formation</source>
|
||||
<translation>Formação Compacta</translation>
|
||||
<translation>Formação compacta</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -29,7 +29,7 @@
|
||||
<message>
|
||||
<location filename="../mapsettings/eventsettings.ui" line="34"/>
|
||||
<source>Timed events</source>
|
||||
<translation>Eventos Temporizados</translation>
|
||||
<translation>Eventos temporizados</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mapsettings/eventsettings.ui" line="60"/>
|
||||
@ -44,7 +44,7 @@
|
||||
<message>
|
||||
<location filename="../mapsettings/eventsettings.cpp" line="101"/>
|
||||
<source>New event</source>
|
||||
<translation>Novo Evento</translation>
|
||||
<translation>Novo evento</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -57,12 +57,12 @@
|
||||
<message>
|
||||
<location filename="../mapsettings/generalsettings.ui" line="32"/>
|
||||
<source>Map name</source>
|
||||
<translation>Nome do Mapa</translation>
|
||||
<translation>Nome do mapa</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mapsettings/generalsettings.ui" line="42"/>
|
||||
<source>Map description</source>
|
||||
<translation>Descrição do Mapa</translation>
|
||||
<translation>Descrição do mapa</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mapsettings/generalsettings.ui" line="76"/>
|
||||
@ -88,7 +88,7 @@
|
||||
<message>
|
||||
<location filename="../inspector/heroskillswidget.ui" line="14"/>
|
||||
<source>Hero skills</source>
|
||||
<translation>Habilidades do Herói</translation>
|
||||
<translation>Habilidades do herói</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../inspector/heroskillswidget.ui" line="28"/>
|
||||
@ -172,7 +172,7 @@
|
||||
<message>
|
||||
<location filename="../mapsettings/loseconditions.ui" line="40"/>
|
||||
<source>Defeat message</source>
|
||||
<translation>Mensagem de Derrota</translation>
|
||||
<translation>Mensagem de derrota</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mapsettings/loseconditions.ui" line="59"/>
|
||||
|
Loading…
Reference in New Issue
Block a user