mirror of
				https://github.com/vcmi/vcmi.git
				synced 2025-10-31 00:07:39 +02:00 
			
		
		
		
	Merge branch 'vcmi/master' into 'vcmi/develop'
This commit is contained in:
		
							
								
								
									
										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 | # 1.5.3 -> 1.5.4 | ||||||
|  |  | ||||||
| ### Stability | ### Stability | ||||||
|   | |||||||
| @@ -33,7 +33,7 @@ | |||||||
| 	 | 	 | ||||||
| 	"vcmi.heroOverview.startingArmy" : "Unidades Iniciais", | 	"vcmi.heroOverview.startingArmy" : "Unidades Iniciais", | ||||||
| 	"vcmi.heroOverview.warMachine" : "Máquinas de Guerra", | 	"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.heroOverview.spells" : "Feitiços", | ||||||
| 	 | 	 | ||||||
| 	"vcmi.radialWheel.mergeSameUnit" : "Mesclar criaturas iguais", | 	"vcmi.radialWheel.mergeSameUnit" : "Mesclar criaturas iguais", | ||||||
| @@ -259,7 +259,7 @@ | |||||||
| 	"vcmi.battleWindow.damageRetaliation.damage" : "(%DAMAGE).", | 	"vcmi.battleWindow.damageRetaliation.damage" : "(%DAMAGE).", | ||||||
| 	"vcmi.battleWindow.damageRetaliation.damageKills" : "(%DAMAGE, %KILLS).", | 	"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.0" : "%d %s morreram por tiros precisos!", | ||||||
| 	"vcmi.battleWindow.accurateShot.resultDescription.1" : "%d %s morreu com um tiro preciso!", | 	"vcmi.battleWindow.accurateShot.resultDescription.1" : "%d %s morreu com um tiro preciso!", | ||||||
| 	"vcmi.battleWindow.accurateShot.resultDescription.2" : "%d %s morreram por tiros precisos!", | 	"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_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.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.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.SUMMON_GUARDIANS.description" : "No início da batalha, invoca ${subtype.creature} (${val}%)", | ||||||
| 	"core.bonus.SYNERGY_TARGET.name" : "Alvo Sinergizável", | 	"core.bonus.SYNERGY_TARGET.name" : "Alvo Sinergizável", | ||||||
| 	"core.bonus.SYNERGY_TARGET.description" : "Esta criatura é vulnerável ao efeito de sinergia", | 	"core.bonus.SYNERGY_TARGET.description" : "Esta criatura é vulnerável ao efeito de sinergia", | ||||||
|   | |||||||
| @@ -444,7 +444,7 @@ void AdventureMapInterface::onPlayerTurnStarted(PlayerColor playerID) | |||||||
| 		LOCPLINT->localState->setSelection(LOCPLINT->localState->getWanderingHero(0)); | 		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 | 	//show new day animation and sound on infobar, except for 1st day of the game | ||||||
| 	if (LOCPLINT->cb->getDate(Date::DAY) != 1) | 	if (LOCPLINT->cb->getDate(Date::DAY) != 1) | ||||||
|   | |||||||
| @@ -985,26 +985,27 @@ void BattleActionsController::activateStack() | |||||||
| 		std::list<PossiblePlayerBattleAction> actionsToSelect; | 		std::list<PossiblePlayerBattleAction> actionsToSelect; | ||||||
| 		if(!possibleActions.empty()) | 		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(possibleActions.front()); | ||||||
| 					actionsToSelect.push_back(PossiblePlayerBattleAction::ATTACK); |  | ||||||
| 					break; |  | ||||||
|  |  | ||||||
| 				case PossiblePlayerBattleAction::ATTACK_AND_RETURN: | 				auto shootActionPredicate = [](const PossiblePlayerBattleAction& action) | ||||||
| 					actionsToSelect.push_back(possibleActions.front()); | 				{ | ||||||
| 					actionsToSelect.push_back(PossiblePlayerBattleAction::WALK_AND_ATTACK); | 					return action.get() == PossiblePlayerBattleAction::SHOOT; | ||||||
| 					break; | 				}; | ||||||
|  | 				bool hasShootSecondaryAction = std::any_of(possibleActions.begin() + 1, possibleActions.end(), shootActionPredicate); | ||||||
|  |  | ||||||
| 				case PossiblePlayerBattleAction::AIMED_SPELL_CREATURE: | 				if(hasShootSecondaryAction) //casters may have shooting capabilities, for example storm elementals | ||||||
| 					actionsToSelect.push_back(possibleActions.front()); | 					actionsToSelect.emplace_back(PossiblePlayerBattleAction::SHOOT); | ||||||
| 					actionsToSelect.push_back(PossiblePlayerBattleAction::ATTACK); |  | ||||||
| 					break; | 				/* TODO: maybe it would also make sense to check spellcast as non-top priority action ("NO_SPELLCAST_BY_DEFAULT" bonus)? | ||||||
| 				case PossiblePlayerBattleAction::ANY_LOCATION: | 				 * it would require going beyond this "if" block for melee casters | ||||||
| 					actionsToSelect.push_back(possibleActions.front()); | 				 * F button helps, but some mod creatures may have that bonus and more than 1 castable spell */ | ||||||
| 					actionsToSelect.push_back(PossiblePlayerBattleAction::ATTACK); |  | ||||||
| 					break; | 				actionsToSelect.emplace_back(PossiblePlayerBattleAction::ATTACK); //always allow melee attack as last option | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 		owner.windowObject->setAlternativeActions(actionsToSelect); | 		owner.windowObject->setAlternativeActions(actionsToSelect); | ||||||
| @@ -1071,3 +1072,8 @@ void BattleActionsController::pushFrontPossibleAction(PossiblePlayerBattleAction | |||||||
| { | { | ||||||
| 	possibleActions.insert(possibleActions.begin(), action); | 	possibleActions.insert(possibleActions.begin(), action); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | void BattleActionsController::resetCurrentStackPossibleActions() | ||||||
|  | { | ||||||
|  | 	possibleActions = getPossibleActionsForStack(owner.stacksController->getActiveStack()); | ||||||
|  | } | ||||||
|   | |||||||
| @@ -122,4 +122,7 @@ public: | |||||||
| 	 | 	 | ||||||
| 	/// inserts possible action in the beginning in order to prioritize it | 	/// inserts possible action in the beginning in order to prioritize it | ||||||
| 	void pushFrontPossibleAction(PossiblePlayerBattleAction); | 	void pushFrontPossibleAction(PossiblePlayerBattleAction); | ||||||
|  |  | ||||||
|  | 	/// resets possible actions to original state | ||||||
|  | 	void resetCurrentStackPossibleActions(); | ||||||
| }; | }; | ||||||
|   | |||||||
| @@ -47,7 +47,7 @@ | |||||||
|  |  | ||||||
| BattleWindow::BattleWindow(BattleInterface & owner): | BattleWindow::BattleWindow(BattleInterface & owner): | ||||||
| 	owner(owner), | 	owner(owner), | ||||||
| 	defaultAction(PossiblePlayerBattleAction::INVALID) | 	lastAlternativeAction(PossiblePlayerBattleAction::INVALID) | ||||||
| { | { | ||||||
| 	OBJ_CONSTRUCTION_CAPTURING_ALL_NO_DISPOSE; | 	OBJ_CONSTRUCTION_CAPTURING_ALL_NO_DISPOSE; | ||||||
| 	pos.w = 800; | 	pos.w = 800; | ||||||
| @@ -567,14 +567,18 @@ void BattleWindow::showAlternativeActionIcon(PossiblePlayerBattleAction action) | |||||||
|  |  | ||||||
| void BattleWindow::setAlternativeActions(const std::list<PossiblePlayerBattleAction> & actions) | void BattleWindow::setAlternativeActions(const std::list<PossiblePlayerBattleAction> & actions) | ||||||
| { | { | ||||||
|  | 	assert(actions.size() != 1); | ||||||
|  |  | ||||||
| 	alternativeActions = actions; | 	alternativeActions = actions; | ||||||
| 	defaultAction = PossiblePlayerBattleAction::INVALID; | 	lastAlternativeAction = PossiblePlayerBattleAction::INVALID; | ||||||
|  |  | ||||||
| 	if(alternativeActions.size() > 1) | 	if(alternativeActions.size() > 1) | ||||||
| 		defaultAction = alternativeActions.back(); | 	{ | ||||||
| 	if(!alternativeActions.empty()) | 		lastAlternativeAction = alternativeActions.back(); | ||||||
| 		showAlternativeActionIcon(alternativeActions.front()); | 		showAlternativeActionIcon(alternativeActions.front()); | ||||||
|  | 	} | ||||||
| 	else | 	else | ||||||
| 		showAlternativeActionIcon(defaultAction); | 		showAlternativeActionIcon(PossiblePlayerBattleAction::INVALID); | ||||||
| } | } | ||||||
|  |  | ||||||
| void BattleWindow::bAutofightf() | void BattleWindow::bAutofightf() | ||||||
| @@ -670,22 +674,17 @@ void BattleWindow::bSwitchActionf() | |||||||
| 	if(alternativeActions.empty()) | 	if(alternativeActions.empty()) | ||||||
| 		return; | 		return; | ||||||
|  |  | ||||||
| 	if(alternativeActions.front() == defaultAction) |  | ||||||
| 	{ |  | ||||||
| 		alternativeActions.push_back(alternativeActions.front()); |  | ||||||
| 		alternativeActions.pop_front(); |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	auto actions = owner.actionsController->getPossibleActions(); | 	auto actions = owner.actionsController->getPossibleActions(); | ||||||
| 	if(!actions.empty() && actions.front() == alternativeActions.front()) |  | ||||||
|  | 	if(!actions.empty() && actions.front() != lastAlternativeAction) | ||||||
| 	{ | 	{ | ||||||
| 		owner.actionsController->removePossibleAction(alternativeActions.front()); | 		owner.actionsController->removePossibleAction(alternativeActions.front()); | ||||||
| 		showAlternativeActionIcon(defaultAction); | 		showAlternativeActionIcon(*std::next(alternativeActions.begin())); | ||||||
| 	} | 	} | ||||||
| 	else | 	else | ||||||
| 	{ | 	{ | ||||||
| 		owner.actionsController->pushFrontPossibleAction(alternativeActions.front()); | 		owner.actionsController->resetCurrentStackPossibleActions(); | ||||||
| 		showAlternativeActionIcon(alternativeActions.front()); | 		showAlternativeActionIcon(owner.actionsController->getPossibleActions().front()); | ||||||
| 	} | 	} | ||||||
| 	 | 	 | ||||||
| 	alternativeActions.push_back(alternativeActions.front()); | 	alternativeActions.push_back(alternativeActions.front()); | ||||||
|   | |||||||
| @@ -65,7 +65,7 @@ class BattleWindow : public InterfaceObjectConfigurable | |||||||
| 	 | 	 | ||||||
| 	/// management of alternative actions | 	/// management of alternative actions | ||||||
| 	std::list<PossiblePlayerBattleAction> alternativeActions; | 	std::list<PossiblePlayerBattleAction> alternativeActions; | ||||||
| 	PossiblePlayerBattleAction defaultAction; | 	PossiblePlayerBattleAction lastAlternativeAction; | ||||||
| 	void showAlternativeActionIcon(PossiblePlayerBattleAction); | 	void showAlternativeActionIcon(PossiblePlayerBattleAction); | ||||||
|  |  | ||||||
| 	/// flip battle queue visibility to opposite | 	/// flip battle queue visibility to opposite | ||||||
|   | |||||||
| @@ -430,7 +430,7 @@ void CHeroGSlot::clickPressed(const Point & cursorPosition) | |||||||
| 	{ | 	{ | ||||||
| 		setHighlight(false); | 		setHighlight(false); | ||||||
|  |  | ||||||
| 		if(other->hero) | 		if(other->hero && !GH.isKeyboardShiftDown()) | ||||||
| 			LOCPLINT->showHeroExchange(hero->id, other->hero->id); | 			LOCPLINT->showHeroExchange(hero->id, other->hero->id); | ||||||
| 		else | 		else | ||||||
| 			LOCPLINT->openHeroWindow(hero); | 			LOCPLINT->openHeroWindow(hero); | ||||||
|   | |||||||
| @@ -40,6 +40,12 @@ | |||||||
| 				"$ref" : "objectTemplate.json" | 				"$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" : { | 		"sounds" : { | ||||||
| 			"type" : "object", | 			"type" : "object", | ||||||
| 			"additionalProperties" : false, | 			"additionalProperties" : false, | ||||||
|   | |||||||
| @@ -55,7 +55,7 @@ | |||||||
| 		"adventureZoomOut":         "Keypad -", | 		"adventureZoomOut":         "Keypad -", | ||||||
| 		"adventureZoomReset":       "Backspace", | 		"adventureZoomReset":       "Backspace", | ||||||
| 		"battleAutocombat":         "A", | 		"battleAutocombat":         "A", | ||||||
| 		"battleAutocombatEnd":      "E", | 		"battleAutocombatEnd":      "Q", | ||||||
| 		"battleCastSpell":          "C", | 		"battleCastSpell":          "C", | ||||||
| 		"battleConsoleDown":        "Down", | 		"battleConsoleDown":        "Down", | ||||||
| 		"battleConsoleUp":          "Up", | 		"battleConsoleUp":          "Up", | ||||||
| @@ -68,8 +68,8 @@ | |||||||
| 		"battleTacticsEnd":         [ "Return", "Keypad Enter"], | 		"battleTacticsEnd":         [ "Return", "Keypad Enter"], | ||||||
| 		"battleTacticsNext":        "Space", | 		"battleTacticsNext":        "Space", | ||||||
| 		"battleToggleHeroesStats":  [], | 		"battleToggleHeroesStats":  [], | ||||||
| 		"battleToggleQueue":        "Q", | 		"battleToggleQueue":        "Z", | ||||||
| 		"battleUseCreatureSpell":   "F", | 		"battleUseCreatureSpell":   ["F", "G"], | ||||||
| 		"battleWait":               "W", | 		"battleWait":               "W", | ||||||
| 		"exchangeArmySwap":         "F10", | 		"exchangeArmySwap":         "F10", | ||||||
| 		"exchangeArmyToLeft":       [], | 		"exchangeArmyToLeft":       [], | ||||||
|   | |||||||
							
								
								
									
										6
									
								
								debian/changelog
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								debian/changelog
									
									
									
									
										vendored
									
									
								
							| @@ -4,6 +4,12 @@ vcmi (1.6.0) jammy; urgency=medium | |||||||
|  |  | ||||||
|  -- Ivan Savenko <saven.ivan@gmail.com>  Fri, 30 Aug 2024 12:00:00 +0200 |  -- Ivan Savenko <saven.ivan@gmail.com>  Fri, 30 Aug 2024 12:00:00 +0200 | ||||||
|  |  | ||||||
|  | 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 | vcmi (1.5.4) jammy; urgency=medium | ||||||
|  |  | ||||||
|   * New upstream release |   * New upstream release | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| [](https://github.com/vcmi/vcmi/actions/workflows/github.yml?query=branch%3Adevelop+event%3Apush) | [](https://github.com/vcmi/vcmi/actions/workflows/github.yml?query=branch%3Adevelop+event%3Apush) | ||||||
| [](https://github.com/vcmi/vcmi/releases/tag/1.5.0) | [](https://github.com/vcmi/vcmi/releases/tag/1.5.0) | ||||||
| [](https://github.com/vcmi/vcmi/releases/tag/1.5.3) |  | ||||||
| [](https://github.com/vcmi/vcmi/releases/tag/1.5.4) | [](https://github.com/vcmi/vcmi/releases/tag/1.5.4) | ||||||
|  | [](https://github.com/vcmi/vcmi/releases/tag/1.5.5) | ||||||
| [](https://github.com/vcmi/vcmi/releases) | [](https://github.com/vcmi/vcmi/releases) | ||||||
|  |  | ||||||
| # VCMI Project | # VCMI Project | ||||||
|   | |||||||
| @@ -60,6 +60,9 @@ Full object consists from 3 parts: | |||||||
| 		// How valuable this object is to AI | 		// How valuable this object is to AI | ||||||
| 		"aiValue" : 1000, | 		"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 assigned to this object | ||||||
| 		"sounds" : { | 		"sounds" : { | ||||||
| 			// Ambient sounds that plays when current hero is near this object | 			// Ambient sounds that plays when current hero is near this object | ||||||
|   | |||||||
| @@ -91,6 +91,7 @@ | |||||||
| 	<launchable type="desktop-id">vcmilauncher.desktop</launchable> | 	<launchable type="desktop-id">vcmilauncher.desktop</launchable> | ||||||
| 	<releases> | 	<releases> | ||||||
| 		<release version="1.6.0" date="2024-08-30" type="development"/> | 		<release version="1.6.0" date="2024-08-30" type="development"/> | ||||||
|  | 		<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.4" date="2024-07-12" type="stable"/> | ||||||
| 		<release version="1.5.3" date="2024-06-21" type="stable"/> | 		<release version="1.5.3" date="2024-06-21" type="stable"/> | ||||||
| 		<release version="1.5.2" date="2024-05-31" type="stable"/> | 		<release version="1.5.2" date="2024-05-31" type="stable"/> | ||||||
|   | |||||||
| @@ -465,11 +465,11 @@ | |||||||
|     <message> |     <message> | ||||||
|         <location filename="../modManager/cmodlistview_moc.cpp" line="701"/> |         <location filename="../modManager/cmodlistview_moc.cpp" line="701"/> | ||||||
|         <source>Downloading %1. %p% (%v MB out of %m MB) finished</source> |         <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> | ||||||
|     <message> |     <message> | ||||||
|         <source>Downloading %s%. %p% (%v MB out of %m MB) finished</source> |         <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> | ||||||
|     <message> |     <message> | ||||||
|         <location filename="../modManager/cmodlistview_moc.cpp" line="726"/> |         <location filename="../modManager/cmodlistview_moc.cpp" line="726"/> | ||||||
| @@ -738,12 +738,12 @@ Install successfully downloaded?</source> | |||||||
|     <message> |     <message> | ||||||
|         <location filename="../settingsView/csettingsview_moc.ui" line="1152"/> |         <location filename="../settingsView/csettingsview_moc.ui" line="1152"/> | ||||||
|         <source>Show Tutorial again</source> |         <source>Show Tutorial again</source> | ||||||
|         <translation type="unfinished"></translation> |         <translation>重新显示教程</translation> | ||||||
|     </message> |     </message> | ||||||
|     <message> |     <message> | ||||||
|         <location filename="../settingsView/csettingsview_moc.ui" line="1159"/> |         <location filename="../settingsView/csettingsview_moc.ui" line="1159"/> | ||||||
|         <source>Reset</source> |         <source>Reset</source> | ||||||
|         <translation type="unfinished"></translation> |         <translation>重置</translation> | ||||||
|     </message> |     </message> | ||||||
|     <message> |     <message> | ||||||
|         <location filename="../settingsView/csettingsview_moc.ui" line="860"/> |         <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> |     <message> | ||||||
|         <location filename="../firstLaunch/firstlaunch_moc.cpp" line="330"/> |         <location filename="../firstLaunch/firstlaunch_moc.cpp" line="330"/> | ||||||
|         <source>File cannot opened</source> |         <source>File cannot opened</source> | ||||||
|         <translation type="unfinished"></translation> |         <translation>打开文件失败</translation> | ||||||
|     </message> |     </message> | ||||||
|     <message> |     <message> | ||||||
|         <location filename="../firstLaunch/firstlaunch_moc.cpp" line="336"/> |         <location filename="../firstLaunch/firstlaunch_moc.cpp" line="336"/> | ||||||
| @@ -1324,23 +1324,24 @@ Please select directory with installed Heroes III data.</source> | |||||||
|     <message> |     <message> | ||||||
|         <location filename="../firstLaunch/firstlaunch_moc.cpp" line="387"/> |         <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> |         <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> | ||||||
|     <message> |     <message> | ||||||
|         <location filename="../firstLaunch/firstlaunch_moc.cpp" line="412"/> |         <location filename="../firstLaunch/firstlaunch_moc.cpp" line="412"/> | ||||||
|         <source>Stream error while extracting files! |         <source>Stream error while extracting files! | ||||||
| error reason: </source> | error reason: </source> | ||||||
|         <translation type="unfinished"></translation> |         <translation>提取文件时遭遇文件流错误! | ||||||
|  | 错误原因: </translation> | ||||||
|     </message> |     </message> | ||||||
|     <message> |     <message> | ||||||
|         <location filename="../firstLaunch/firstlaunch_moc.cpp" line="425"/> |         <location filename="../firstLaunch/firstlaunch_moc.cpp" line="425"/> | ||||||
|         <source>Not a supported Inno Setup installer!</source> |         <source>Not a supported Inno Setup installer!</source> | ||||||
|         <translation type="unfinished"></translation> |         <translation>这不是一个支持的Inno Setup安装器!</translation> | ||||||
|     </message> |     </message> | ||||||
|     <message> |     <message> | ||||||
|         <location filename="../firstLaunch/firstlaunch_moc.cpp" line="436"/> |         <location filename="../firstLaunch/firstlaunch_moc.cpp" line="436"/> | ||||||
|         <source>Extracting error!</source> |         <source>Extracting error!</source> | ||||||
|         <translation type="unfinished"></translation> |         <translation>提取错误!</translation> | ||||||
|     </message> |     </message> | ||||||
|     <message> |     <message> | ||||||
|         <location filename="../firstLaunch/firstlaunch_moc.cpp" line="506"/> |         <location filename="../firstLaunch/firstlaunch_moc.cpp" line="506"/> | ||||||
|   | |||||||
| @@ -461,7 +461,7 @@ | |||||||
|     <message> |     <message> | ||||||
|         <location filename="../modManager/cmodlistview_moc.cpp" line="701"/> |         <location filename="../modManager/cmodlistview_moc.cpp" line="701"/> | ||||||
|         <source>Downloading %1. %p% (%v MB out of %m MB) finished</source> |         <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> | ||||||
|     <message> |     <message> | ||||||
|         <source>Downloading %s%. %p% (%v MB out of %m MB) finished</source> |         <source>Downloading %s%. %p% (%v MB out of %m MB) finished</source> | ||||||
| @@ -733,12 +733,12 @@ Instalar o download realizado com sucesso?</translation> | |||||||
|     <message> |     <message> | ||||||
|         <location filename="../settingsView/csettingsview_moc.ui" line="1152"/> |         <location filename="../settingsView/csettingsview_moc.ui" line="1152"/> | ||||||
|         <source>Show Tutorial again</source> |         <source>Show Tutorial again</source> | ||||||
|         <translation type="unfinished"></translation> |         <translation>Mostrar o Tutorial novamente</translation> | ||||||
|     </message> |     </message> | ||||||
|     <message> |     <message> | ||||||
|         <location filename="../settingsView/csettingsview_moc.ui" line="1159"/> |         <location filename="../settingsView/csettingsview_moc.ui" line="1159"/> | ||||||
|         <source>Reset</source> |         <source>Reset</source> | ||||||
|         <translation type="unfinished"></translation> |         <translation>Redefinir</translation> | ||||||
|     </message> |     </message> | ||||||
|     <message> |     <message> | ||||||
|         <location filename="../settingsView/csettingsview_moc.ui" line="860"/> |         <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> |     <message> | ||||||
|         <location filename="../settingsView/csettingsview_moc.ui" line="796"/> |         <location filename="../settingsView/csettingsview_moc.ui" line="796"/> | ||||||
|         <source>Autosave</source> |         <source>Autosave</source> | ||||||
|         <translation>Salvar automaticamente</translation> |         <translation>Salvamento automático</translation> | ||||||
|     </message> |     </message> | ||||||
|     <message> |     <message> | ||||||
|         <location filename="../settingsView/csettingsview_moc.ui" line="597"/> |         <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> |     <message> | ||||||
|         <location filename="../firstLaunch/firstlaunch_moc.cpp" line="330"/> |         <location filename="../firstLaunch/firstlaunch_moc.cpp" line="330"/> | ||||||
|         <source>File cannot opened</source> |         <source>File cannot opened</source> | ||||||
|         <translation type="unfinished"></translation> |         <translation>O arquivo não pode ser aberto</translation> | ||||||
|     </message> |     </message> | ||||||
|     <message> |     <message> | ||||||
|         <location filename="../firstLaunch/firstlaunch_moc.cpp" line="336"/> |         <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> |     <message> | ||||||
|         <location filename="../firstLaunch/firstlaunch_moc.cpp" line="387"/> |         <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> |         <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> | ||||||
|     <message> |     <message> | ||||||
|         <location filename="../firstLaunch/firstlaunch_moc.cpp" line="412"/> |         <location filename="../firstLaunch/firstlaunch_moc.cpp" line="412"/> | ||||||
|         <source>Stream error while extracting files! |         <source>Stream error while extracting files! | ||||||
| error reason: </source> | error reason: </source> | ||||||
|         <translation type="unfinished"></translation> |         <translation>Erro de fluxo ao extrair arquivos! | ||||||
|  | Motivo do erro: </translation> | ||||||
|     </message> |     </message> | ||||||
|     <message> |     <message> | ||||||
|         <location filename="../firstLaunch/firstlaunch_moc.cpp" line="425"/> |         <location filename="../firstLaunch/firstlaunch_moc.cpp" line="425"/> | ||||||
|         <source>Not a supported Inno Setup installer!</source> |         <source>Not a supported Inno Setup installer!</source> | ||||||
|         <translation type="unfinished"></translation> |         <translation>Instalador do Inno Setup não suportado!</translation> | ||||||
|     </message> |     </message> | ||||||
|     <message> |     <message> | ||||||
|         <location filename="../firstLaunch/firstlaunch_moc.cpp" line="436"/> |         <location filename="../firstLaunch/firstlaunch_moc.cpp" line="436"/> | ||||||
|         <source>Extracting error!</source> |         <source>Extracting error!</source> | ||||||
|         <translation type="unfinished"></translation> |         <translation>Erro ao extrair!</translation> | ||||||
|     </message> |     </message> | ||||||
|     <message> |     <message> | ||||||
|         <location filename="../firstLaunch/firstlaunch_moc.cpp" line="506"/> |         <location filename="../firstLaunch/firstlaunch_moc.cpp" line="506"/> | ||||||
|   | |||||||
| @@ -74,6 +74,11 @@ public: | |||||||
| 	{ | 	{ | ||||||
| 		return action == other.action && spellToCast == other.spellToCast; | 		return action == other.action && spellToCast == other.spellToCast; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | 	bool operator != (const PossiblePlayerBattleAction & other) const | ||||||
|  | 	{ | ||||||
|  | 		return action != other.action || spellToCast != other.spellToCast; | ||||||
|  | 	} | ||||||
| }; | }; | ||||||
|  |  | ||||||
| VCMI_LIB_NAMESPACE_END | VCMI_LIB_NAMESPACE_END | ||||||
|   | |||||||
| @@ -120,6 +120,11 @@ void CGameStateCampaign::trimCrossoverHeroesParameters(const CampaignTravel & tr | |||||||
| 				if(!info) | 				if(!info) | ||||||
| 					return false; | 					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? | 				// TODO: why would there be nullptr artifacts? | ||||||
| 				const CArtifactInstance *art = info->artifact; | 				const CArtifactInstance *art = info->artifact; | ||||||
| 				if(!art) | 				if(!art) | ||||||
|   | |||||||
| @@ -6,17 +6,17 @@ | |||||||
|     <message> |     <message> | ||||||
|         <location filename="../inspector/armywidget.ui" line="23"/> |         <location filename="../inspector/armywidget.ui" line="23"/> | ||||||
|         <source>Army settings</source> |         <source>Army settings</source> | ||||||
|         <translation>Configurações do Exército</translation> |         <translation>Configurações do exército</translation> | ||||||
|     </message> |     </message> | ||||||
|     <message> |     <message> | ||||||
|         <location filename="../inspector/armywidget.ui" line="142"/> |         <location filename="../inspector/armywidget.ui" line="142"/> | ||||||
|         <source>Wide formation</source> |         <source>Wide formation</source> | ||||||
|         <translation>Formação Aberta</translation> |         <translation>Formação aberta</translation> | ||||||
|     </message> |     </message> | ||||||
|     <message> |     <message> | ||||||
|         <location filename="../inspector/armywidget.ui" line="129"/> |         <location filename="../inspector/armywidget.ui" line="129"/> | ||||||
|         <source>Tight formation</source> |         <source>Tight formation</source> | ||||||
|         <translation>Formação Compacta</translation> |         <translation>Formação compacta</translation> | ||||||
|     </message> |     </message> | ||||||
| </context> | </context> | ||||||
| <context> | <context> | ||||||
| @@ -29,7 +29,7 @@ | |||||||
|     <message> |     <message> | ||||||
|         <location filename="../mapsettings/eventsettings.ui" line="34"/> |         <location filename="../mapsettings/eventsettings.ui" line="34"/> | ||||||
|         <source>Timed events</source> |         <source>Timed events</source> | ||||||
|         <translation>Eventos Temporizados</translation> |         <translation>Eventos temporizados</translation> | ||||||
|     </message> |     </message> | ||||||
|     <message> |     <message> | ||||||
|         <location filename="../mapsettings/eventsettings.ui" line="60"/> |         <location filename="../mapsettings/eventsettings.ui" line="60"/> | ||||||
| @@ -44,7 +44,7 @@ | |||||||
|     <message> |     <message> | ||||||
|         <location filename="../mapsettings/eventsettings.cpp" line="101"/> |         <location filename="../mapsettings/eventsettings.cpp" line="101"/> | ||||||
|         <source>New event</source> |         <source>New event</source> | ||||||
|         <translation>Novo Evento</translation> |         <translation>Novo evento</translation> | ||||||
|     </message> |     </message> | ||||||
| </context> | </context> | ||||||
| <context> | <context> | ||||||
| @@ -57,12 +57,12 @@ | |||||||
|     <message> |     <message> | ||||||
|         <location filename="../mapsettings/generalsettings.ui" line="32"/> |         <location filename="../mapsettings/generalsettings.ui" line="32"/> | ||||||
|         <source>Map name</source> |         <source>Map name</source> | ||||||
|         <translation>Nome do Mapa</translation> |         <translation>Nome do mapa</translation> | ||||||
|     </message> |     </message> | ||||||
|     <message> |     <message> | ||||||
|         <location filename="../mapsettings/generalsettings.ui" line="42"/> |         <location filename="../mapsettings/generalsettings.ui" line="42"/> | ||||||
|         <source>Map description</source> |         <source>Map description</source> | ||||||
|         <translation>Descrição do Mapa</translation> |         <translation>Descrição do mapa</translation> | ||||||
|     </message> |     </message> | ||||||
|     <message> |     <message> | ||||||
|         <location filename="../mapsettings/generalsettings.ui" line="76"/> |         <location filename="../mapsettings/generalsettings.ui" line="76"/> | ||||||
| @@ -88,7 +88,7 @@ | |||||||
|     <message> |     <message> | ||||||
|         <location filename="../inspector/heroskillswidget.ui" line="14"/> |         <location filename="../inspector/heroskillswidget.ui" line="14"/> | ||||||
|         <source>Hero skills</source> |         <source>Hero skills</source> | ||||||
|         <translation>Habilidades do Herói</translation> |         <translation>Habilidades do herói</translation> | ||||||
|     </message> |     </message> | ||||||
|     <message> |     <message> | ||||||
|         <location filename="../inspector/heroskillswidget.ui" line="28"/> |         <location filename="../inspector/heroskillswidget.ui" line="28"/> | ||||||
| @@ -172,7 +172,7 @@ | |||||||
|     <message> |     <message> | ||||||
|         <location filename="../mapsettings/loseconditions.ui" line="40"/> |         <location filename="../mapsettings/loseconditions.ui" line="40"/> | ||||||
|         <source>Defeat message</source> |         <source>Defeat message</source> | ||||||
|         <translation>Mensagem de Derrota</translation> |         <translation>Mensagem de derrota</translation> | ||||||
|     </message> |     </message> | ||||||
|     <message> |     <message> | ||||||
|         <location filename="../mapsettings/loseconditions.ui" line="59"/> |         <location filename="../mapsettings/loseconditions.ui" line="59"/> | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user