1
0
mirror of https://github.com/vcmi/vcmi.git synced 2024-12-22 22:13:35 +02:00

Merge branch 'release_131' into master

This commit is contained in:
Ivan Savenko 2023-08-17 16:19:20 +03:00
commit daa8a494fc
61 changed files with 1269 additions and 957 deletions

View File

@ -254,6 +254,13 @@ void CBattleAI::yourTacticPhase(int distance)
cb->battleMakeTacticAction(BattleAction::makeEndOFTacticPhase(cb->battleGetTacticsSide())); cb->battleMakeTacticAction(BattleAction::makeEndOFTacticPhase(cb->battleGetTacticsSide()));
} }
uint64_t timeElapsed(std::chrono::time_point<std::chrono::high_resolution_clock> start)
{
auto end = std::chrono::high_resolution_clock::now();
return std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count();
}
void CBattleAI::activeStack( const CStack * stack ) void CBattleAI::activeStack( const CStack * stack )
{ {
LOG_TRACE_PARAMS(logAi, "stack: %s", stack->nodeName()); LOG_TRACE_PARAMS(logAi, "stack: %s", stack->nodeName());
@ -261,6 +268,8 @@ void CBattleAI::activeStack( const CStack * stack )
BattleAction result = BattleAction::makeDefend(stack); BattleAction result = BattleAction::makeDefend(stack);
setCbc(cb); //TODO: make solid sure that AIs always use their callbacks (need to take care of event handlers too) setCbc(cb); //TODO: make solid sure that AIs always use their callbacks (need to take care of event handlers too)
auto start = std::chrono::high_resolution_clock::now();
try try
{ {
if(stack->creatureId() == CreatureID::CATAPULT) if(stack->creatureId() == CreatureID::CATAPULT)
@ -276,6 +285,8 @@ void CBattleAI::activeStack( const CStack * stack )
attemptCastingSpell(); attemptCastingSpell();
logAi->trace("Spellcast attempt completed in %lld", timeElapsed(start));
if(cb->battleIsFinished() || !stack->alive()) if(cb->battleIsFinished() || !stack->alive())
{ {
//spellcast may finish battle or kill active stack //spellcast may finish battle or kill active stack
@ -312,6 +323,8 @@ void CBattleAI::activeStack( const CStack * stack )
movesSkippedByDefense = 0; movesSkippedByDefense = 0;
} }
logAi->trace("BattleAI decission made in %lld", timeElapsed(start));
cb->battleMakeUnitAction(result); cb->battleMakeUnitAction(result);
} }
@ -494,7 +507,12 @@ void CBattleAI::attemptCastingSpell()
{ {
spells::BattleCast temp(cb.get(), hero, spells::Mode::HERO, spell); spells::BattleCast temp(cb.get(), hero, spells::Mode::HERO, spell);
for(auto & target : temp.findPotentialTargets()) if(!spell->isDamage() && spell->getTargetType() == spells::AimType::LOCATION)
continue;
const bool FAST = true;
for(auto & target : temp.findPotentialTargets(FAST))
{ {
PossibleSpellcast ps; PossibleSpellcast ps;
ps.dest = target; ps.dest = target;

View File

@ -600,6 +600,8 @@ void BattleExchangeEvaluator::updateReachabilityMap(HypotheticBattle & hb)
if(unit->isTurret()) if(unit->isTurret())
continue; continue;
auto unitSpeed = unit->speed(turn);
if(turnBattle.battleCanShoot(unit)) if(turnBattle.battleCanShoot(unit))
{ {
for(BattleHex hex = BattleHex::TOP_LEFT; hex.isValid(); hex = hex + 1) for(BattleHex hex = BattleHex::TOP_LEFT; hex.isValid(); hex = hex + 1)
@ -614,7 +616,7 @@ void BattleExchangeEvaluator::updateReachabilityMap(HypotheticBattle & hb)
for(BattleHex hex = BattleHex::TOP_LEFT; hex.isValid(); hex = hex + 1) for(BattleHex hex = BattleHex::TOP_LEFT; hex.isValid(); hex = hex + 1)
{ {
bool reachable = unitReachability.distances[hex] <= unit->speed(turn); bool reachable = unitReachability.distances[hex] <= unitSpeed;
if(!reachable && unitReachability.accessibility[hex] == EAccessibility::ALIVE_STACK) if(!reachable && unitReachability.accessibility[hex] == EAccessibility::ALIVE_STACK)
{ {
@ -624,7 +626,7 @@ void BattleExchangeEvaluator::updateReachabilityMap(HypotheticBattle & hb)
{ {
for(BattleHex neighbor : hex.neighbouringTiles()) for(BattleHex neighbor : hex.neighbouringTiles())
{ {
reachable = unitReachability.distances[neighbor] <= unit->speed(turn); reachable = unitReachability.distances[neighbor] <= unitSpeed;
if(reachable) break; if(reachable) break;
} }

View File

@ -84,17 +84,6 @@ PotentialTargets::PotentialTargets(const battle::Unit * attacker, const Hypothet
{ {
return lhs.damageDiff() > rhs.damageDiff(); return lhs.damageDiff() > rhs.damageDiff();
}); });
if (!possibleAttacks.empty())
{
auto & bestAp = possibleAttacks[0];
logGlobal->debug("Battle AI best: %s -> %s at %d from %d, affects %d units: d:%lld a:%lld c:%lld s:%lld",
bestAp.attack.attacker->unitType()->getJsonKey(),
state.battleGetUnitByPos(bestAp.dest)->unitType()->getJsonKey(),
(int)bestAp.dest, (int)bestAp.from, (int)bestAp.affectedUnits.size(),
bestAp.defenderDamageReduce, bestAp.attackerDamageReduce, bestAp.collateralDamageReduce, bestAp.shootersBlockedDmg);
}
} }
int64_t PotentialTargets::bestActionValue() const int64_t PotentialTargets::bestActionValue() const

View File

@ -170,7 +170,7 @@ std::vector<SlotInfo> ArmyManager::getBestArmy(const IBonusBearer * armyCarrier,
std::vector<SlotInfo> newArmy; std::vector<SlotInfo> newArmy;
uint64_t newValue = 0; uint64_t newValue = 0;
newArmyInstance.clear(); newArmyInstance.clearSlots();
for(auto & slot : sortedSlots) for(auto & slot : sortedSlots)
{ {

View File

@ -84,7 +84,7 @@ Goals::TGoalVec RecruitHeroBehavior::decompose() const
} }
} }
if(treasureSourcesCount < 5) if(treasureSourcesCount < 5 && (town->garrisonHero || town->getUpperArmy()->getArmyStrength() < 10000))
continue; continue;
if(cb->getHeroesInfo().size() < cb->getTownsInfo().size() + 1 if(cb->getHeroesInfo().size() < cb->getTownsInfo().size() + 1

View File

@ -1,3 +1,51 @@
# 1.3.0 -> 1.3.1
### GENERAL:
* Fixed framerate drops on hero movement with active hota mod
* Fade-out animations will now be skipped when instant hero movement speed is used
* Restarting loaded campaing scenario will now correctly reapply starting bonus
* Reverted FPS limit on mobile systems back to 60 fps
* Fixed loading of translations for maps and campaigns
* Fixed loading of preconfigured starting army for heroes with preconfigured spells
* Background battlefield obstacles will now appear below creatures
* it is now possible to load save game located inside mod
* Added option to configure reserved screen area in Launcher on iOS
* Fixed border scrolling when game window is maximized
### AI PLAYER:
* BattleAI: Improved performance of AI spell selection
* NKAI: Fixed freeze on attempt to exchange army between garrisoned and visiting hero
* NKAI: Fixed town threat calculation
* NKAI: Fixed recruitment of new heroes
* VCAI: Added workaround to avoid freeze on attempting to reach unreachable location
* VCAI: Fixed spellcasting by Archangels
### RANDOM MAP GENERATOR:
* Fixed placement of roads inside rock in underground
* Fixed placement of shifted creature animations from HotA
* Fixed placement of treasures at the boundary of wide connections
* Added more potential locations for quest artifacts in zone
### STABILITY:
* When starting client without H3 data game will now show message instead of silently crashing
* When starting invalid map in campaign, game will now show message instead of silently crashing
* Blocked loading of saves made with different set of mods to prevent crashes
* Fixed crash on starting game with outdated mods
* Fixed crash on attempt to sacrifice all your artifacts in Altar of Sacrifice
* Fixed crash on leveling up after winning battle as defender
* Fixed possible crash on end of battle opening sound
* Fixed crash on accepting battle result after winning battle as defender
* Fixed possible crash on casting spell in battle by AI
* Fixed multiple possible crashes on managing mods on Android
* Fixed multiple possible crashes on importing data on Android
* Fixed crash on refusing rewards from town building
* Fixed possible crash on threat evaluation by NKAI
* Fixed crash on using haptic feedback on some Android systems
* Fixed crash on right-clicking flags area in RMG setup mode
* Fixed crash on opening Blacksmith window and Build Structure dialogs in some localizations
* Fixed possible crash on displaying animated main menu
* Fixed crash on recruiting hero in town located on the border of map
# 1.2.1 -> 1.3.0 # 1.2.1 -> 1.3.0
### GENERAL: ### GENERAL:

View File

@ -118,6 +118,7 @@ static_assert(sizeof(bool) == 1, "Bool needs to be 1 byte in size.");
#include <memory> #include <memory>
#include <mutex> #include <mutex>
#include <numeric> #include <numeric>
#include <optional>
#include <queue> #include <queue>
#include <random> #include <random>
#include <set> #include <set>
@ -126,6 +127,7 @@ static_assert(sizeof(bool) == 1, "Bool needs to be 1 byte in size.");
#include <unordered_map> #include <unordered_map>
#include <unordered_set> #include <unordered_set>
#include <utility> #include <utility>
#include <variant>
#include <vector> #include <vector>
//The only available version is 3, as of Boost 1.50 //The only available version is 3, as of Boost 1.50

View File

@ -1,6 +1,7 @@
[![GitHub](https://github.com/vcmi/vcmi/actions/workflows/github.yml/badge.svg)](https://github.com/vcmi/vcmi/actions/workflows/github.yml) [![GitHub](https://github.com/vcmi/vcmi/actions/workflows/github.yml/badge.svg)](https://github.com/vcmi/vcmi/actions/workflows/github.yml)
[![Coverity Scan Build Status](https://scan.coverity.com/projects/vcmi/badge.svg)](https://scan.coverity.com/projects/vcmi) [![Coverity Scan Build Status](https://scan.coverity.com/projects/vcmi/badge.svg)](https://scan.coverity.com/projects/vcmi)
[![Github Downloads](https://img.shields.io/github/downloads/vcmi/vcmi/1.3.0/total)](https://github.com/vcmi/vcmi/releases/tag/1.3.0) [![Github Downloads](https://img.shields.io/github/downloads/vcmi/vcmi/1.3.0/total)](https://github.com/vcmi/vcmi/releases/tag/1.3.0)
[![Github Downloads](https://img.shields.io/github/downloads/vcmi/vcmi/1.3.1/total)](https://github.com/vcmi/vcmi/releases/tag/1.3.1)
[![Github Downloads](https://img.shields.io/github/downloads/vcmi/vcmi/total)](https://github.com/vcmi/vcmi/releases) [![Github Downloads](https://img.shields.io/github/downloads/vcmi/vcmi/total)](https://github.com/vcmi/vcmi/releases)
# VCMI Project # VCMI Project
VCMI is work-in-progress attempt to recreate engine for Heroes III, giving it new and extended possibilities. VCMI is work-in-progress attempt to recreate engine for Heroes III, giving it new and extended possibilities.

View File

@ -10,8 +10,8 @@ android {
applicationId "is.xyz.vcmi" applicationId "is.xyz.vcmi"
minSdk 19 minSdk 19
targetSdk 31 targetSdk 31
versionCode 1306 versionCode 1310
versionName "1.3.0" versionName "1.3.1"
setProperty("archivesBaseName", "vcmi") setProperty("archivesBaseName", "vcmi")
} }

View File

@ -54,6 +54,7 @@
#include <boost/uuid/uuid.hpp> #include <boost/uuid/uuid.hpp>
#include <boost/uuid/uuid_io.hpp> #include <boost/uuid/uuid_io.hpp>
#include <boost/uuid/uuid_generators.hpp> #include <boost/uuid/uuid_generators.hpp>
#include <boost/asio.hpp>
#include "../lib/serializer/Cast.h" #include "../lib/serializer/Cast.h"
#include "LobbyClientNetPackVisitors.h" #include "LobbyClientNetPackVisitors.h"

View File

@ -219,7 +219,7 @@ void CClient::loadGame(CGameState * initializedGameState)
// try to deserialize client data including sleepingHeroes // try to deserialize client data including sleepingHeroes
try try
{ {
boost::filesystem::path clientSaveName = *CResourceHandler::get("local")->getResourceName(ResourceID(CSH->si->mapname, EResType::CLIENT_SAVEGAME)); boost::filesystem::path clientSaveName = *CResourceHandler::get()->getResourceName(ResourceID(CSH->si->mapname, EResType::CLIENT_SAVEGAME));
if(clientSaveName.empty()) if(clientSaveName.empty())
throw std::runtime_error("Cannot open client part of " + CSH->si->mapname); throw std::runtime_error("Cannot open client part of " + CSH->si->mapname);

View File

@ -169,10 +169,10 @@ void AdventureMapInterface::tick(uint32_t msPassed)
void AdventureMapInterface::handleMapScrollingUpdate(uint32_t timePassed) void AdventureMapInterface::handleMapScrollingUpdate(uint32_t timePassed)
{ {
/// Width of window border, in pixels, that triggers map scrolling /// Width of window border, in pixels, that triggers map scrolling
static constexpr uint32_t borderScrollWidth = 15; static constexpr int32_t borderScrollWidth = 15;
uint32_t scrollSpeedPixels = settings["adventure"]["scrollSpeedPixels"].Float(); int32_t scrollSpeedPixels = settings["adventure"]["scrollSpeedPixels"].Float();
uint32_t scrollDistance = scrollSpeedPixels * timePassed / 1000; int32_t scrollDistance = scrollSpeedPixels * timePassed / 1000;
Point cursorPosition = GH.getCursorPosition(); Point cursorPosition = GH.getCursorPosition();
Point scrollDirection; Point scrollDirection;
@ -822,6 +822,15 @@ void AdventureMapInterface::hotkeyZoom(int delta)
void AdventureMapInterface::onScreenResize() void AdventureMapInterface::onScreenResize()
{ {
OBJ_CONSTRUCTION_CAPTURING_ALL_NO_DISPOSE; OBJ_CONSTRUCTION_CAPTURING_ALL_NO_DISPOSE;
// remember our activation state and reactive after reconstruction
// since othervice activate() calls for created elements will bypass virtual dispatch
// and will call directly CIntObject::activate() instead of dispatching virtual function call
bool widgetActive = isActive();
if (widgetActive)
deactivate();
widget.reset(); widget.reset();
pos.x = pos.y = 0; pos.x = pos.y = 0;
pos.w = GH.screenDimensions().x; pos.w = GH.screenDimensions().x;
@ -838,4 +847,7 @@ void AdventureMapInterface::onScreenResize()
widget->getMapView()->onCenteredObject(LOCPLINT->localState->getCurrentArmy()); widget->getMapView()->onCenteredObject(LOCPLINT->localState->getCurrentArmy());
adjustActiveness(); adjustActiveness();
if (widgetActive)
activate();
} }

View File

@ -445,6 +445,8 @@ void BattleInterface::spellCast(const BattleSpellCast * sc)
stacksController->addNewAnim(new EffectAnimation(*this, side ? "SP07_B.DEF" : "SP07_A.DEF", rightHero)); stacksController->addNewAnim(new EffectAnimation(*this, side ? "SP07_B.DEF" : "SP07_A.DEF", rightHero));
}); });
} }
// animations will be executed by spell effects
} }
void BattleInterface::battleStacksEffectsSet(const SetStackEffect & sse) void BattleInterface::battleStacksEffectsSet(const SetStackEffect & sse)

View File

@ -127,13 +127,26 @@ void BattleObstacleController::obstaclePlaced(const std::vector<std::shared_ptr<
void BattleObstacleController::showAbsoluteObstacles(Canvas & canvas) void BattleObstacleController::showAbsoluteObstacles(Canvas & canvas)
{ {
//Blit absolute obstacles //Blit absolute obstacles
for(auto & oi : owner.curInt->cb->battleGetAllObstacles()) for(auto & obstacle : owner.curInt->cb->battleGetAllObstacles())
{ {
if(oi->obstacleType == CObstacleInstance::ABSOLUTE_OBSTACLE) if(obstacle->obstacleType == CObstacleInstance::ABSOLUTE_OBSTACLE)
{ {
auto img = getObstacleImage(*oi); auto img = getObstacleImage(*obstacle);
if(img) if(img)
canvas.draw(img, Point(oi->getInfo().width, oi->getInfo().height)); canvas.draw(img, Point(obstacle->getInfo().width, obstacle->getInfo().height));
}
if (obstacle->obstacleType == CObstacleInstance::USUAL)
{
if (obstacle->getInfo().isForegroundObstacle)
continue;
auto img = getObstacleImage(*obstacle);
if(img)
{
Point p = getObstaclePosition(img, *obstacle);
canvas.draw(img, p);
}
} }
} }
} }
@ -148,11 +161,10 @@ void BattleObstacleController::collectRenderableObjects(BattleRenderer & rendere
if (obstacle->obstacleType == CObstacleInstance::MOAT) if (obstacle->obstacleType == CObstacleInstance::MOAT)
continue; continue;
bool isForeground = obstacle->obstacleType == CObstacleInstance::USUAL && obstacle->getInfo().isForegroundObstacle; if (obstacle->obstacleType == CObstacleInstance::USUAL && !obstacle->getInfo().isForegroundObstacle)
continue;
auto layer = isForeground ? EBattleFieldLayer::OBSTACLES_FG : EBattleFieldLayer::OBSTACLES_BG; renderer.insert(EBattleFieldLayer::OBSTACLES, obstacle->pos, [this, obstacle]( BattleRenderer::RendererRef canvas ){
renderer.insert(layer, obstacle->pos, [this, obstacle]( BattleRenderer::RendererRef canvas ){
auto img = getObstacleImage(*obstacle); auto img = getObstacleImage(*obstacle);
if(img) if(img)
{ {

View File

@ -16,12 +16,11 @@ class BattleInterface;
enum class EBattleFieldLayer { enum class EBattleFieldLayer {
// confirmed ordering requirements: // confirmed ordering requirements:
OBSTACLES_BG = 0,
CORPSES = 0, CORPSES = 0,
WALLS = 1, WALLS = 1,
HEROES = 2, HEROES = 2,
STACKS = 2, // after corpses, obstacles, walls STACKS = 2, // after corpses, obstacles, walls
OBSTACLES_FG = 3, // after stacks OBSTACLES = 3, // after stacks
STACK_AMOUNTS = 3, // after stacks, obstacles, corpses STACK_AMOUNTS = 3, // after stacks, obstacles, corpses
EFFECTS = 4, // after obstacles, battlements EFFECTS = 4, // after obstacles, battlements
}; };

View File

@ -307,15 +307,13 @@ void BattleSiegeController::collectRenderableObjects(BattleRenderer & renderer)
renderer.insert( EBattleFieldLayer::STACKS, getWallPiecePosition(wallPiece), [this, wallPiece](BattleRenderer::RendererRef canvas){ renderer.insert( EBattleFieldLayer::STACKS, getWallPiecePosition(wallPiece), [this, wallPiece](BattleRenderer::RendererRef canvas){
owner.stacksController->showStack(canvas, getTurretStack(wallPiece)); owner.stacksController->showStack(canvas, getTurretStack(wallPiece));
}); });
renderer.insert( EBattleFieldLayer::OBSTACLES_FG, getWallPiecePosition(wallPiece), [this, wallPiece](BattleRenderer::RendererRef canvas){ renderer.insert( EBattleFieldLayer::OBSTACLES, getWallPiecePosition(wallPiece), [this, wallPiece](BattleRenderer::RendererRef canvas){
showWallPiece(canvas, wallPiece); showWallPiece(canvas, wallPiece);
}); });
} }
renderer.insert( EBattleFieldLayer::WALLS, getWallPiecePosition(wallPiece), [this, wallPiece](BattleRenderer::RendererRef canvas){ renderer.insert( EBattleFieldLayer::WALLS, getWallPiecePosition(wallPiece), [this, wallPiece](BattleRenderer::RendererRef canvas){
showWallPiece(canvas, wallPiece); showWallPiece(canvas, wallPiece);
}); });
} }
} }

View File

@ -499,7 +499,7 @@ void BattleStacksController::stacksAreAttacked(std::vector<StackAttackedInfo> at
void BattleStacksController::stackTeleported(const CStack *stack, std::vector<BattleHex> destHex, int distance) void BattleStacksController::stackTeleported(const CStack *stack, std::vector<BattleHex> destHex, int distance)
{ {
assert(destHex.size() > 0); assert(destHex.size() > 0);
owner.checkForAnimations(); //owner.checkForAnimations(); // NOTE: at this point spellcast animations were added, but not executed
owner.addToAnimationStage(EAnimationEvents::HIT, [=](){ owner.addToAnimationStage(EAnimationEvents::HIT, [=](){
addNewAnim( new ColorTransformAnimation(owner, stack, "teleportFadeOut", nullptr) ); addNewAnim( new ColorTransformAnimation(owner, stack, "teleportFadeOut", nullptr) );

View File

@ -31,8 +31,6 @@ namespace Cursor
}; };
enum class Combat { enum class Combat {
INVALID = -1,
BLOCKED = 0, BLOCKED = 0,
MOVE = 1, MOVE = 1,
FLY = 2, FLY = 2,
@ -157,12 +155,16 @@ public:
template<typename Index> template<typename Index>
Index get() Index get()
{ {
assert((std::is_same<Index, Cursor::Default>::value )|| type != Cursor::Type::DEFAULT ); bool typeValid = true;
assert((std::is_same<Index, Cursor::Map>::value )|| type != Cursor::Type::ADVENTURE );
assert((std::is_same<Index, Cursor::Combat>::value )|| type != Cursor::Type::COMBAT );
assert((std::is_same<Index, Cursor::Spellcast>::value )|| type != Cursor::Type::SPELLBOOK );
return static_cast<Index>(frame); typeValid &= (std::is_same<Index, Cursor::Default>::value )|| type != Cursor::Type::DEFAULT;
typeValid &= (std::is_same<Index, Cursor::Map>::value )|| type != Cursor::Type::ADVENTURE;
typeValid &= (std::is_same<Index, Cursor::Combat>::value )|| type != Cursor::Type::COMBAT;
typeValid &= (std::is_same<Index, Cursor::Spellcast>::value )|| type != Cursor::Type::SPELLBOOK;
if (typeValid)
return static_cast<Index>(frame);
return Index::POINTER;
} }
Point getPivotOffsetDefault(size_t index); Point getPivotOffsetDefault(size_t index);

View File

@ -426,7 +426,7 @@ void SelectionTab::select(int position)
if(inputName && inputName->isActive()) if(inputName && inputName->isActive())
{ {
auto filename = *CResourceHandler::get("local")->getResourceName(ResourceID(curItems[py]->fileURI, EResType::SAVEGAME)); auto filename = *CResourceHandler::get()->getResourceName(ResourceID(curItems[py]->fileURI, EResType::SAVEGAME));
inputName->setText(filename.stem().string()); inputName->setText(filename.stem().string());
} }

View File

@ -247,6 +247,20 @@ void MapViewController::afterRender()
} }
} }
bool MapViewController::isEventInstant(const CGObjectInstance * obj)
{
if (!isEventVisible(obj))
return true;
if(!LOCPLINT->makingTurn && settings["adventure"]["enemyMoveTime"].Float() <= 0)
return true; // instant movement speed
if(LOCPLINT->makingTurn && settings["adventure"]["heroMoveTime"].Float() <= 0)
return true; // instant movement speed
return false;
}
bool MapViewController::isEventVisible(const CGObjectInstance * obj) bool MapViewController::isEventVisible(const CGObjectInstance * obj)
{ {
if(adventureContext == nullptr) if(adventureContext == nullptr)
@ -358,7 +372,8 @@ void MapViewController::onBeforeHeroEmbark(const CGHeroInstance * obj, const int
{ {
if(isEventVisible(obj, from, dest)) if(isEventVisible(obj, from, dest))
{ {
fadeOutObject(obj); if (!isEventInstant(obj))
fadeOutObject(obj);
setViewCenter(obj->getSightCenter()); setViewCenter(obj->getSightCenter());
} }
else else
@ -381,7 +396,8 @@ void MapViewController::onAfterHeroDisembark(const CGHeroInstance * obj, const i
{ {
if(isEventVisible(obj, from, dest)) if(isEventVisible(obj, from, dest))
{ {
fadeInObject(obj); if (!isEventInstant(obj))
fadeInObject(obj);
setViewCenter(obj->getSightCenter()); setViewCenter(obj->getSightCenter());
} }
addObject(obj); addObject(obj);
@ -391,7 +407,7 @@ void MapViewController::onObjectFadeIn(const CGObjectInstance * obj)
{ {
assert(!hasOngoingAnimations()); assert(!hasOngoingAnimations());
if(isEventVisible(obj)) if(isEventVisible(obj) && !isEventInstant(obj) )
fadeInObject(obj); fadeInObject(obj);
addObject(obj); addObject(obj);
@ -401,7 +417,7 @@ void MapViewController::onObjectFadeOut(const CGObjectInstance * obj)
{ {
assert(!hasOngoingAnimations()); assert(!hasOngoingAnimations());
if(isEventVisible(obj)) if(isEventVisible(obj) && !isEventInstant(obj) )
fadeOutObject(obj); fadeOutObject(obj);
else else
removeObject(obj); removeObject(obj);

View File

@ -50,6 +50,7 @@ class MapViewController : public IMapObjectObserver
std::shared_ptr<MapRendererPuzzleMapContext> puzzleMapContext; std::shared_ptr<MapRendererPuzzleMapContext> puzzleMapContext;
private: private:
bool isEventInstant(const CGObjectInstance * obj);
bool isEventVisible(const CGObjectInstance * obj); bool isEventVisible(const CGObjectInstance * obj);
bool isEventVisible(const CGHeroInstance * obj, const int3 & from, const int3 & dest); bool isEventVisible(const CGHeroInstance * obj, const int3 & from, const int3 & dest);

View File

@ -1,6 +1,6 @@
set(VCMI_VERSION_MAJOR 1) set(VCMI_VERSION_MAJOR 1)
set(VCMI_VERSION_MINOR 3) set(VCMI_VERSION_MINOR 3)
set(VCMI_VERSION_PATCH 0) set(VCMI_VERSION_PATCH 1)
add_definitions( add_definitions(
-DVCMI_VERSION_MAJOR=${VCMI_VERSION_MAJOR} -DVCMI_VERSION_MAJOR=${VCMI_VERSION_MAJOR}
-DVCMI_VERSION_MINOR=${VCMI_VERSION_MINOR} -DVCMI_VERSION_MINOR=${VCMI_VERSION_MINOR}

6
debian/changelog vendored
View File

@ -1,3 +1,9 @@
vcmi (1.3.1) jammy; urgency=medium
* New upstream release
-- Ivan Savenko <saven.ivan@gmail.com> Fri, 18 Aug 2023 16:00:00 +0200
vcmi (1.3.0) jammy; urgency=medium vcmi (1.3.0) jammy; urgency=medium
* New upstream release * New upstream release

View File

@ -51,6 +51,7 @@
<category>StrategyGame</category> <category>StrategyGame</category>
</categories> </categories>
<releases> <releases>
<release version="1.3.1" date="2023-08-18" />
<release version="1.3.0" date="2023-08-04" /> <release version="1.3.0" date="2023-08-04" />
<release version="1.2.1" date="2023-04-28" /> <release version="1.2.1" date="2023-04-28" />
<release version="1.2.0" date="2023-04-14" /> <release version="1.2.0" date="2023-04-14" />

View File

@ -72,6 +72,8 @@ void CSettingsView::loadSettings()
ui->comboBoxFullScreen->hide(); ui->comboBoxFullScreen->hide();
ui->labelFullScreen->hide(); ui->labelFullScreen->hide();
#else #else
ui->labelReservedArea->hide();
ui->spinBoxReservedArea->hide();
if (settings["video"]["realFullscreen"].Bool()) if (settings["video"]["realFullscreen"].Bool())
ui->comboBoxFullScreen->setCurrentIndex(2); ui->comboBoxFullScreen->setCurrentIndex(2);
else else
@ -81,6 +83,7 @@ void CSettingsView::loadSettings()
ui->spinBoxInterfaceScaling->setValue(settings["video"]["resolution"]["scaling"].Float()); ui->spinBoxInterfaceScaling->setValue(settings["video"]["resolution"]["scaling"].Float());
ui->spinBoxFramerateLimit->setValue(settings["video"]["targetfps"].Float()); ui->spinBoxFramerateLimit->setValue(settings["video"]["targetfps"].Float());
ui->spinBoxReservedArea->setValue(std::round(settings["video"]["reservedWidth"].Float() * 100));
ui->comboBoxFriendlyAI->setCurrentText(QString::fromStdString(settings["server"]["friendlyAI"].String())); ui->comboBoxFriendlyAI->setCurrentText(QString::fromStdString(settings["server"]["friendlyAI"].String()));
ui->comboBoxNeutralAI->setCurrentText(QString::fromStdString(settings["server"]["neutralAI"].String())); ui->comboBoxNeutralAI->setCurrentText(QString::fromStdString(settings["server"]["neutralAI"].String()));
@ -468,14 +471,12 @@ void CSettingsView::on_lineEditRepositoryExtra_textEdited(const QString &arg1)
node->String() = arg1.toStdString(); node->String() = arg1.toStdString();
} }
void CSettingsView::on_spinBoxInterfaceScaling_valueChanged(int arg1) void CSettingsView::on_spinBoxInterfaceScaling_valueChanged(int arg1)
{ {
Settings node = settings.write["video"]["resolution"]["scaling"]; Settings node = settings.write["video"]["resolution"]["scaling"];
node->Float() = arg1; node->Float() = arg1;
} }
void CSettingsView::on_refreshRepositoriesButton_clicked() void CSettingsView::on_refreshRepositoriesButton_clicked()
{ {
auto * mainWindow = dynamic_cast<MainWindow *>(qApp->activeWindow()); auto * mainWindow = dynamic_cast<MainWindow *>(qApp->activeWindow());
@ -487,7 +488,6 @@ void CSettingsView::on_refreshRepositoriesButton_clicked()
mainWindow->getModView()->loadRepositories(); mainWindow->getModView()->loadRepositories();
} }
void CSettingsView::on_spinBoxFramerateLimit_valueChanged(int arg1) void CSettingsView::on_spinBoxFramerateLimit_valueChanged(int arg1)
{ {
Settings node = settings.write["video"]["targetfps"]; Settings node = settings.write["video"]["targetfps"];
@ -500,14 +500,12 @@ void CSettingsView::on_comboBoxEnemyPlayerAI_currentTextChanged(const QString &a
node->String() = arg1.toUtf8().data(); node->String() = arg1.toUtf8().data();
} }
void CSettingsView::on_comboBoxAlliedPlayerAI_currentTextChanged(const QString &arg1) void CSettingsView::on_comboBoxAlliedPlayerAI_currentTextChanged(const QString &arg1)
{ {
Settings node = settings.write["server"]["alliedAI"]; Settings node = settings.write["server"]["alliedAI"];
node->String() = arg1.toUtf8().data(); node->String() = arg1.toUtf8().data();
} }
void CSettingsView::on_checkBoxAutoSavePrefix_stateChanged(int arg1) void CSettingsView::on_checkBoxAutoSavePrefix_stateChanged(int arg1)
{ {
Settings node = settings.write["general"]["useSavePrefix"]; Settings node = settings.write["general"]["useSavePrefix"];
@ -515,17 +513,21 @@ void CSettingsView::on_checkBoxAutoSavePrefix_stateChanged(int arg1)
ui->lineEditAutoSavePrefix->setEnabled(arg1); ui->lineEditAutoSavePrefix->setEnabled(arg1);
} }
void CSettingsView::on_spinBoxAutoSaveLimit_valueChanged(int arg1) void CSettingsView::on_spinBoxAutoSaveLimit_valueChanged(int arg1)
{ {
Settings node = settings.write["general"]["autosaveCountLimit"]; Settings node = settings.write["general"]["autosaveCountLimit"];
node->Float() = arg1; node->Float() = arg1;
} }
void CSettingsView::on_lineEditAutoSavePrefix_textEdited(const QString &arg1) void CSettingsView::on_lineEditAutoSavePrefix_textEdited(const QString &arg1)
{ {
Settings node = settings.write["general"]["savePrefix"]; Settings node = settings.write["general"]["savePrefix"];
node->String() = arg1.toStdString(); node->String() = arg1.toStdString();
} }
void CSettingsView::on_spinBoxReservedArea_valueChanged(int arg1)
{
Settings node = settings.write["video"]["reservedWidth"];
node->Float() = float(arg1) / 100; // percentage -> ratio
}

View File

@ -72,6 +72,8 @@ private slots:
void on_lineEditAutoSavePrefix_textEdited(const QString &arg1); void on_lineEditAutoSavePrefix_textEdited(const QString &arg1);
void on_spinBoxReservedArea_valueChanged(int arg1);
private: private:
Ui::CSettingsView * ui; Ui::CSettingsView * ui;

View File

@ -42,6 +42,7 @@
</property> </property>
<property name="font"> <property name="font">
<font> <font>
<weight>75</weight>
<bold>true</bold> <bold>true</bold>
</font> </font>
</property> </property>
@ -106,35 +107,136 @@
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>-197</y>
<width>610</width> <width>610</width>
<height>790</height> <height>768</height>
</rect> </rect>
</property> </property>
<layout class="QGridLayout" name="gridLayout" columnstretch="2,0,1,1,1"> <layout class="QGridLayout" name="gridLayout" columnstretch="2,0,1,1,1">
<item row="18" column="0"> <item row="5" column="1" colspan="3">
<widget class="QLabel" name="labelArtificialIntelligence"> <widget class="QLabel" name="labelTranslationStatus">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="23" column="1" colspan="4">
<widget class="QComboBox" name="comboBoxFriendlyAI">
<property name="editable">
<bool>false</bool>
</property>
<property name="currentText">
<string notr="true">BattleAI</string>
</property>
<item>
<property name="text">
<string notr="true">BattleAI</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">StupidAI</string>
</property>
</item>
</widget>
</item>
<item row="17" column="0">
<widget class="QLabel" name="labelDisplayIndex">
<property name="text">
<string>Display index</string>
</property>
</widget>
</item>
<item row="21" column="1" colspan="4">
<widget class="QComboBox" name="comboBoxAlliedPlayerAI">
<property name="currentText">
<string notr="true">VCAI</string>
</property>
<item>
<property name="text">
<string notr="true">VCAI</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">Nullkiller</string>
</property>
</item>
</widget>
</item>
<item row="8" column="0">
<widget class="QLabel" name="labelAutoSaveLimit">
<property name="text">
<string>Autosave limit (0 = off)</string>
</property>
</widget>
</item>
<item row="12" column="0">
<widget class="QLabel" name="labelFullScreen">
<property name="text">
<string>Fullscreen</string>
</property>
</widget>
</item>
<item row="6" column="0">
<widget class="QLabel" name="labelNetworkPort">
<property name="text">
<string>Network port</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="labelGeneral">
<property name="font"> <property name="font">
<font> <font>
<weight>75</weight>
<bold>true</bold> <bold>true</bold>
</font> </font>
</property> </property>
<property name="text"> <property name="text">
<string>Artificial Intelligence</string> <string>General</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="26" column="2" colspan="3"> <item row="7" column="0">
<widget class="QLineEdit" name="lineEditRepositoryDefault"> <widget class="QLabel" name="labelAutoSave">
<property name="text"> <property name="text">
<string notr="true"/> <string>Autosave</string>
</property> </property>
<property name="readOnly"> </widget>
</item>
<item row="18" column="1" colspan="4">
<widget class="QComboBox" name="comboBoxCursorType">
<item>
<property name="text">
<string>Hardware</string>
</property>
</item>
<item>
<property name="text">
<string>Software</string>
</property>
</item>
</widget>
</item>
<item row="16" column="0">
<widget class="QLabel" name="labelShowIntro">
<property name="text">
<string>Show intro</string>
</property>
</widget>
</item>
<item row="28" column="1">
<widget class="QCheckBox" name="checkBoxRepositoryExtra">
<property name="text">
<string/>
</property>
<property name="checked">
<bool>true</bool> <bool>true</bool>
</property> </property>
</widget> </widget>
</item> </item>
<item row="26" column="1"> <item row="27" column="1">
<widget class="QCheckBox" name="checkBoxRepositoryDefault"> <widget class="QCheckBox" name="checkBoxRepositoryDefault">
<property name="enabled"> <property name="enabled">
<bool>true</bool> <bool>true</bool>
@ -147,13 +249,358 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="27" column="1"> <item row="15" column="1" colspan="4">
<widget class="QCheckBox" name="checkBoxRepositoryExtra"> <widget class="QSpinBox" name="spinBoxFramerateLimit">
<property name="minimum">
<number>20</number>
</property>
<property name="maximum">
<number>1000</number>
</property>
<property name="singleStep">
<number>10</number>
</property>
</widget>
</item>
<item row="17" column="1" colspan="4">
<widget class="QComboBox" name="comboBoxDisplayIndex"/>
</item>
<item row="15" column="0">
<widget class="QLabel" name="labelFramerateLimit">
<property name="text">
<string>Framerate Limit</string>
</property>
</widget>
</item>
<item row="4" column="1" colspan="4">
<widget class="QComboBox" name="comboBoxLanguageBase"/>
</item>
<item row="20" column="0">
<widget class="QLabel" name="labelEnemyPlayerAI">
<property name="text">
<string>Adventure Map Enemies</string>
</property>
</widget>
</item>
<item row="27" column="0">
<widget class="QLabel" name="labelRepositoryDefault">
<property name="text">
<string>Default repository</string>
</property>
</widget>
</item>
<item row="11" column="1" colspan="4">
<widget class="QComboBox" name="comboBoxResolution"/>
</item>
<item row="7" column="1" colspan="4">
<widget class="QComboBox" name="comboBoxAutoSave">
<property name="currentIndex">
<number>1</number>
</property>
<item>
<property name="text">
<string>Off</string>
</property>
</item>
<item>
<property name="text">
<string>On</string>
</property>
</item>
</widget>
</item>
<item row="10" column="0">
<widget class="QLabel" name="labelVideo">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Video</string>
</property>
</widget>
</item>
<item row="9" column="0">
<widget class="QLabel" name="labelAutoSavePrefix">
<property name="text">
<string>Autosave prefix</string>
</property>
</widget>
</item>
<item row="11" column="0">
<widget class="QLabel" name="labelResolution">
<property name="text">
<string>Resolution</string>
</property>
</widget>
</item>
<item row="28" column="2" colspan="3">
<widget class="QLineEdit" name="lineEditRepositoryExtra">
<property name="text">
<string notr="true"/>
</property>
</widget>
</item>
<item row="27" column="2" colspan="3">
<widget class="QLineEdit" name="lineEditRepositoryDefault">
<property name="text">
<string notr="true"/>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
<item row="18" column="0">
<widget class="QLabel" name="labelCursorType">
<property name="text">
<string>Cursor</string>
</property>
</widget>
</item>
<item row="26" column="1" colspan="2">
<widget class="QComboBox" name="comboBoxAutoCheck">
<property name="currentIndex">
<number>1</number>
</property>
<item>
<property name="text">
<string>Off</string>
</property>
</item>
<item>
<property name="text">
<string>On</string>
</property>
</item>
</widget>
</item>
<item row="26" column="3" colspan="2">
<widget class="QPushButton" name="refreshRepositoriesButton">
<property name="text">
<string>Refresh now</string>
</property>
</widget>
</item>
<item row="5" column="4">
<widget class="QPushButton" name="pushButtonTranslation">
<property name="text"> <property name="text">
<string/> <string/>
</property> </property>
<property name="checked"> </widget>
<bool>true</bool> </item>
<item row="5" column="0">
<widget class="QLabel" name="labelTranslation">
<property name="text">
<string>Heroes III Translation</string>
</property>
</widget>
</item>
<item row="16" column="1" colspan="4">
<widget class="QComboBox" name="comboBoxShowIntro">
<property name="currentIndex">
<number>1</number>
</property>
<item>
<property name="text">
<string>Off</string>
</property>
</item>
<item>
<property name="text">
<string>On</string>
</property>
</item>
</widget>
</item>
<item row="24" column="0">
<widget class="QLabel" name="labelEnemyAI">
<property name="text">
<string>Enemy AI in battles</string>
</property>
</widget>
</item>
<item row="25" column="0">
<widget class="QLabel" name="labelRepositories">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Mod Repositories</string>
</property>
</widget>
</item>
<item row="28" column="0">
<widget class="QLabel" name="labelRepositoryExtra">
<property name="text">
<string>Additional repository</string>
</property>
</widget>
</item>
<item row="24" column="1" colspan="4">
<widget class="QComboBox" name="comboBoxEnemyAI">
<property name="editable">
<bool>false</bool>
</property>
<property name="currentText">
<string notr="true">BattleAI</string>
</property>
<item>
<property name="text">
<string notr="true">BattleAI</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">StupidAI</string>
</property>
</item>
</widget>
</item>
<item row="14" column="1" colspan="4">
<widget class="QSpinBox" name="spinBoxInterfaceScaling">
<property name="minimum">
<number>50</number>
</property>
<property name="maximum">
<number>400</number>
</property>
<property name="singleStep">
<number>10</number>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="labelLanguageBase">
<property name="text">
<string>Heroes III Data Language</string>
</property>
</widget>
</item>
<item row="8" column="1" colspan="4">
<widget class="QSpinBox" name="spinBoxAutoSaveLimit"/>
</item>
<item row="22" column="0">
<widget class="QLabel" name="labelNeutralAI">
<property name="text">
<string>Neutral AI in battles</string>
</property>
</widget>
</item>
<item row="14" column="0">
<widget class="QLabel" name="labelInterfaceScaling">
<property name="text">
<string>Interface Scaling</string>
</property>
</widget>
</item>
<item row="6" column="1" colspan="4">
<widget class="QSpinBox" name="spinBoxNetworkPort">
<property name="minimum">
<number>1024</number>
</property>
<property name="maximum">
<number>65535</number>
</property>
<property name="value">
<number>3030</number>
</property>
</widget>
</item>
<item row="9" column="1">
<widget class="QCheckBox" name="checkBoxAutoSavePrefix">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="23" column="0">
<widget class="QLabel" name="labelFriendlyAI">
<property name="text">
<string>Friendly AI in battles</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="labelLanguage">
<property name="text">
<string>VCMI Language</string>
</property>
</widget>
</item>
<item row="1" column="1" colspan="4">
<widget class="QComboBox" name="comboBoxLanguage"/>
</item>
<item row="26" column="0">
<widget class="QLabel" name="labelAutoCheck">
<property name="text">
<string>Check on startup</string>
</property>
</widget>
</item>
<item row="22" column="1" colspan="4">
<widget class="QComboBox" name="comboBoxNeutralAI">
<property name="currentText">
<string notr="true">BattleAI</string>
</property>
<item>
<property name="text">
<string notr="true">BattleAI</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">StupidAI</string>
</property>
</item>
</widget>
</item>
<item row="21" column="0">
<widget class="QLabel" name="labelAlliedPlayerAI">
<property name="text">
<string>Adventure Map Allies</string>
</property>
</widget>
</item>
<item row="19" column="0">
<widget class="QLabel" name="labelArtificialIntelligence">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Artificial Intelligence</string>
</property>
</widget>
</item>
<item row="20" column="1" colspan="4">
<widget class="QComboBox" name="comboBoxEnemyPlayerAI">
<property name="currentText">
<string notr="true">VCAI</string>
</property>
<item>
<property name="text">
<string notr="true">VCAI</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">Nullkiller</string>
</property>
</item>
</widget>
</item>
<item row="9" column="2" colspan="3">
<widget class="QLineEdit" name="lineEditAutoSavePrefix">
<property name="placeholderText">
<string>empty = map name prefix</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -188,445 +635,29 @@ Fullscreen Exclusive Mode - game will cover entirety of your screen and will use
</item> </item>
</widget> </widget>
</item> </item>
<item row="11" column="0"> <item row="13" column="0">
<widget class="QLabel" name="labelResolution"> <widget class="QLabel" name="labelReservedArea">
<property name="text"> <property name="text">
<string>Resolution</string> <string>Reserved screen area</string>
</property>
</widget>
</item>
<item row="20" column="0">
<widget class="QLabel" name="labelAlliedPlayerAI">
<property name="text">
<string>Adventure Map Allies</string>
</property>
</widget>
</item>
<item row="23" column="1" colspan="4">
<widget class="QComboBox" name="comboBoxEnemyAI">
<property name="editable">
<bool>false</bool>
</property>
<property name="currentText">
<string notr="true">BattleAI</string>
</property>
<item>
<property name="text">
<string notr="true">BattleAI</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">StupidAI</string>
</property>
</item>
</widget>
</item>
<item row="24" column="0">
<widget class="QLabel" name="labelRepositories">
<property name="font">
<font>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Mod Repositories</string>
</property>
</widget>
</item>
<item row="25" column="1" colspan="2">
<widget class="QComboBox" name="comboBoxAutoCheck">
<property name="currentIndex">
<number>1</number>
</property>
<item>
<property name="text">
<string>Off</string>
</property>
</item>
<item>
<property name="text">
<string>On</string>
</property>
</item>
</widget>
</item>
<item row="5" column="1" colspan="3">
<widget class="QLabel" name="labelTranslationStatus">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="26" column="0">
<widget class="QLabel" name="labelRepositoryDefault">
<property name="text">
<string>Default repository</string>
</property>
</widget>
</item>
<item row="27" column="0">
<widget class="QLabel" name="labelRepositoryExtra">
<property name="text">
<string>Additional repository</string>
</property>
</widget>
</item>
<item row="21" column="0">
<widget class="QLabel" name="labelNeutralAI">
<property name="text">
<string>Neutral AI in battles</string>
</property>
</widget>
</item>
<item row="5" column="4">
<widget class="QPushButton" name="pushButtonTranslation">
<property name="text">
<string/>
</property> </property>
</widget> </widget>
</item> </item>
<item row="13" column="1" colspan="4"> <item row="13" column="1" colspan="4">
<widget class="QSpinBox" name="spinBoxInterfaceScaling"> <widget class="QSpinBox" name="spinBoxReservedArea">
<property name="suffix">
<string notr="true">%</string>
</property>
<property name="minimum"> <property name="minimum">
<number>50</number> <number>0</number>
</property> </property>
<property name="maximum"> <property name="maximum">
<number>400</number> <number>25</number>
</property> </property>
<property name="singleStep"> <property name="singleStep">
<number>10</number>
</property>
</widget>
</item>
<item row="13" column="0">
<widget class="QLabel" name="labelInterfaceScaling">
<property name="text">
<string>Interface Scaling</string>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="labelLanguageBase">
<property name="text">
<string>Heroes III Data Language</string>
</property>
</widget>
</item>
<item row="8" column="0">
<widget class="QLabel" name="labelAutoSaveLimit">
<property name="text">
<string>Autosave limit (0 = off)</string>
</property>
</widget>
</item>
<item row="4" column="1" colspan="4">
<widget class="QComboBox" name="comboBoxLanguageBase"/>
</item>
<item row="22" column="0">
<widget class="QLabel" name="labelFriendlyAI">
<property name="text">
<string>Friendly AI in battles</string>
</property>
</widget>
</item>
<item row="22" column="1" colspan="4">
<widget class="QComboBox" name="comboBoxFriendlyAI">
<property name="editable">
<bool>false</bool>
</property>
<property name="currentText">
<string notr="true">BattleAI</string>
</property>
<item>
<property name="text">
<string notr="true">BattleAI</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">StupidAI</string>
</property>
</item>
</widget>
</item>
<item row="11" column="1" colspan="4">
<widget class="QComboBox" name="comboBoxResolution"/>
</item>
<item row="20" column="1" colspan="4">
<widget class="QComboBox" name="comboBoxAlliedPlayerAI">
<property name="currentText">
<string notr="true">VCAI</string>
</property>
<item>
<property name="text">
<string notr="true">VCAI</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">Nullkiller</string>
</property>
</item>
</widget>
</item>
<item row="16" column="0">
<widget class="QLabel" name="labelDisplayIndex">
<property name="text">
<string>Display index</string>
</property>
</widget>
</item>
<item row="19" column="0">
<widget class="QLabel" name="labelEnemyPlayerAI">
<property name="text">
<string>Adventure Map Enemies</string>
</property>
</widget>
</item>
<item row="14" column="1" colspan="4">
<widget class="QSpinBox" name="spinBoxFramerateLimit">
<property name="minimum">
<number>20</number>
</property>
<property name="maximum">
<number>1000</number>
</property>
<property name="singleStep">
<number>10</number>
</property>
</widget>
</item>
<item row="15" column="0">
<widget class="QLabel" name="labelShowIntro">
<property name="text">
<string>Show intro</string>
</property>
</widget>
</item>
<item row="7" column="1" colspan="4">
<widget class="QComboBox" name="comboBoxAutoSave">
<property name="currentIndex">
<number>1</number> <number>1</number>
</property> </property>
<item>
<property name="text">
<string>Off</string>
</property>
</item>
<item>
<property name="text">
<string>On</string>
</property>
</item>
</widget>
</item>
<item row="1" column="1" colspan="4">
<widget class="QComboBox" name="comboBoxLanguage"/>
</item>
<item row="17" column="1" colspan="4">
<widget class="QComboBox" name="comboBoxCursorType">
<item>
<property name="text">
<string>Hardware</string>
</property>
</item>
<item>
<property name="text">
<string>Software</string>
</property>
</item>
</widget>
</item>
<item row="12" column="0">
<widget class="QLabel" name="labelFullScreen">
<property name="text">
<string>Fullscreen</string>
</property>
</widget>
</item>
<item row="17" column="0">
<widget class="QLabel" name="labelCursorType">
<property name="text">
<string>Cursor</string>
</property>
</widget>
</item>
<item row="27" column="2" colspan="3">
<widget class="QLineEdit" name="lineEditRepositoryExtra">
<property name="text">
<string notr="true"/>
</property>
</widget>
</item>
<item row="23" column="0">
<widget class="QLabel" name="labelEnemyAI">
<property name="text">
<string>Enemy AI in battles</string>
</property>
</widget>
</item>
<item row="25" column="0">
<widget class="QLabel" name="labelAutoCheck">
<property name="text">
<string>Check on startup</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="labelGeneral">
<property name="font">
<font>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>General</string>
</property>
</widget>
</item>
<item row="21" column="1" colspan="4">
<widget class="QComboBox" name="comboBoxNeutralAI">
<property name="currentText">
<string notr="true">BattleAI</string>
</property>
<item>
<property name="text">
<string notr="true">BattleAI</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">StupidAI</string>
</property>
</item>
</widget>
</item>
<item row="25" column="3" colspan="2">
<widget class="QPushButton" name="refreshRepositoriesButton">
<property name="text">
<string>Refresh now</string>
</property>
</widget>
</item>
<item row="6" column="1" colspan="4">
<widget class="QSpinBox" name="spinBoxNetworkPort">
<property name="minimum">
<number>1024</number>
</property>
<property name="maximum">
<number>65535</number>
</property>
<property name="value"> <property name="value">
<number>3030</number> <number>0</number>
</property>
</widget>
</item>
<item row="6" column="0">
<widget class="QLabel" name="labelNetworkPort">
<property name="text">
<string>Network port</string>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QLabel" name="labelTranslation">
<property name="text">
<string>Heroes III Translation</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="labelLanguage">
<property name="text">
<string>VCMI Language</string>
</property>
</widget>
</item>
<item row="7" column="0">
<widget class="QLabel" name="labelAutoSave">
<property name="text">
<string>Autosave</string>
</property>
</widget>
</item>
<item row="10" column="0">
<widget class="QLabel" name="labelVideo">
<property name="font">
<font>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Video</string>
</property>
</widget>
</item>
<item row="19" column="1" colspan="4">
<widget class="QComboBox" name="comboBoxEnemyPlayerAI">
<property name="currentText">
<string notr="true">VCAI</string>
</property>
<item>
<property name="text">
<string notr="true">VCAI</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">Nullkiller</string>
</property>
</item>
</widget>
</item>
<item row="16" column="1" colspan="4">
<widget class="QComboBox" name="comboBoxDisplayIndex"/>
</item>
<item row="14" column="0">
<widget class="QLabel" name="labelFramerateLimit">
<property name="text">
<string>Framerate Limit</string>
</property>
</widget>
</item>
<item row="15" column="1" colspan="4">
<widget class="QComboBox" name="comboBoxShowIntro">
<property name="currentIndex">
<number>1</number>
</property>
<item>
<property name="text">
<string>Off</string>
</property>
</item>
<item>
<property name="text">
<string>On</string>
</property>
</item>
</widget>
</item>
<item row="9" column="0">
<widget class="QLabel" name="labelAutoSavePrefix">
<property name="text">
<string>Autosave prefix</string>
</property>
</widget>
</item>
<item row="8" column="1" colspan="4">
<widget class="QSpinBox" name="spinBoxAutoSaveLimit"/>
</item>
<item row="9" column="1">
<widget class="QCheckBox" name="checkBoxAutoSavePrefix">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="9" column="2" colspan="3">
<widget class="QLineEdit" name="lineEditAutoSavePrefix">
<property name="placeholderText">
<string>empty = map name prefix</string>
</property> </property>
</widget> </widget>
</item> </item>

View File

@ -407,123 +407,123 @@
<context> <context>
<name>CSettingsView</name> <name>CSettingsView</name>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="244"/> <location filename="../settingsView/csettingsview_moc.ui" line="302"/>
<location filename="../settingsView/csettingsview_moc.ui" line="414"/> <location filename="../settingsView/csettingsview_moc.ui" line="370"/>
<location filename="../settingsView/csettingsview_moc.ui" line="599"/> <location filename="../settingsView/csettingsview_moc.ui" line="408"/>
<source>Off</source> <source>Off</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="78"/> <location filename="../settingsView/csettingsview_moc.ui" line="79"/>
<location filename="../settingsView/csettingsview_moc.ui" line="123"/> <location filename="../settingsView/csettingsview_moc.ui" line="579"/>
<source>Artificial Intelligence</source> <source>Artificial Intelligence</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="83"/> <location filename="../settingsView/csettingsview_moc.ui" line="84"/>
<location filename="../settingsView/csettingsview_moc.ui" line="233"/> <location filename="../settingsView/csettingsview_moc.ui" line="434"/>
<source>Mod Repositories</source> <source>Mod Repositories</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="305"/> <location filename="../settingsView/csettingsview_moc.ui" line="498"/>
<source>Interface Scaling</source> <source>Interface Scaling</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="278"/> <location filename="../settingsView/csettingsview_moc.ui" line="491"/>
<source>Neutral AI in battles</source> <source>Neutral AI in battles</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="465"/> <location filename="../settingsView/csettingsview_moc.ui" line="421"/>
<source>Enemy AI in battles</source> <source>Enemy AI in battles</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="271"/> <location filename="../settingsView/csettingsview_moc.ui" line="441"/>
<source>Additional repository</source> <source>Additional repository</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="201"/> <location filename="../settingsView/csettingsview_moc.ui" line="566"/>
<source>Adventure Map Allies</source> <source>Adventure Map Allies</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="383"/> <location filename="../settingsView/csettingsview_moc.ui" line="281"/>
<source>Adventure Map Enemies</source> <source>Adventure Map Enemies</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="176"/> <location filename="../settingsView/csettingsview_moc.ui" line="623"/>
<source>Windowed</source> <source>Windowed</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="181"/> <location filename="../settingsView/csettingsview_moc.ui" line="628"/>
<source>Borderless fullscreen</source> <source>Borderless fullscreen</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="186"/> <location filename="../settingsView/csettingsview_moc.ui" line="633"/>
<source>Exclusive fullscreen</source> <source>Exclusive fullscreen</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="319"/> <location filename="../settingsView/csettingsview_moc.ui" line="170"/>
<source>Autosave limit (0 = off)</source> <source>Autosave limit (0 = off)</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="329"/> <location filename="../settingsView/csettingsview_moc.ui" line="525"/>
<source>Friendly AI in battles</source> <source>Friendly AI in battles</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="588"/> <location filename="../settingsView/csettingsview_moc.ui" line="271"/>
<source>Framerate Limit</source> <source>Framerate Limit</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="612"/> <location filename="../settingsView/csettingsview_moc.ui" line="328"/>
<source>Autosave prefix</source> <source>Autosave prefix</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="629"/> <location filename="../settingsView/csettingsview_moc.ui" line="603"/>
<source>empty = map name prefix</source> <source>empty = map name prefix</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="508"/> <location filename="../settingsView/csettingsview_moc.ui" line="383"/>
<source>Refresh now</source> <source>Refresh now</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="264"/> <location filename="../settingsView/csettingsview_moc.ui" line="288"/>
<source>Default repository</source> <source>Default repository</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="249"/> <location filename="../settingsView/csettingsview_moc.ui" line="307"/>
<location filename="../settingsView/csettingsview_moc.ui" line="419"/> <location filename="../settingsView/csettingsview_moc.ui" line="375"/>
<location filename="../settingsView/csettingsview_moc.ui" line="604"/> <location filename="../settingsView/csettingsview_moc.ui" line="413"/>
<source>On</source> <source>On</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="451"/> <location filename="../settingsView/csettingsview_moc.ui" line="359"/>
<source>Cursor</source> <source>Cursor</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="312"/> <location filename="../settingsView/csettingsview_moc.ui" line="481"/>
<source>Heroes III Data Language</source> <source>Heroes III Data Language</source>
<translation>3</translation> <translation>3</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="163"/> <location filename="../settingsView/csettingsview_moc.ui" line="610"/>
<source>Select display mode for game <source>Select display mode for game
Windowed - game will run inside a window that covers part of your screen Windowed - game will run inside a window that covers part of your screen
@ -534,95 +534,100 @@ Fullscreen Exclusive Mode - game will cover entirety of your screen and will use
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="431"/> <location filename="../settingsView/csettingsview_moc.ui" line="641"/>
<source>Reserved screen area</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="212"/>
<source>Hardware</source> <source>Hardware</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="436"/> <location filename="../settingsView/csettingsview_moc.ui" line="217"/>
<source>Software</source> <source>Software</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="535"/> <location filename="../settingsView/csettingsview_moc.ui" line="397"/>
<source>Heroes III Translation</source> <source>Heroes III Translation</source>
<translatorcomment></translatorcomment> <translatorcomment></translatorcomment>
<translation>3</translation> <translation>3</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="472"/> <location filename="../settingsView/csettingsview_moc.ui" line="542"/>
<source>Check on startup</source> <source>Check on startup</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="444"/> <location filename="../settingsView/csettingsview_moc.ui" line="177"/>
<source>Fullscreen</source> <source>Fullscreen</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="68"/> <location filename="../settingsView/csettingsview_moc.ui" line="69"/>
<location filename="../settingsView/csettingsview_moc.ui" line="484"/> <location filename="../settingsView/csettingsview_moc.ui" line="197"/>
<source>General</source> <source>General</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="542"/> <location filename="../settingsView/csettingsview_moc.ui" line="532"/>
<source>VCMI Language</source> <source>VCMI Language</source>
<translation>VCMI语言</translation> <translation>VCMI语言</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="194"/> <location filename="../settingsView/csettingsview_moc.ui" line="335"/>
<source>Resolution</source> <source>Resolution</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="549"/> <location filename="../settingsView/csettingsview_moc.ui" line="204"/>
<source>Autosave</source> <source>Autosave</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="376"/> <location filename="../settingsView/csettingsview_moc.ui" line="146"/>
<source>Display index</source> <source>Display index</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="528"/> <location filename="../settingsView/csettingsview_moc.ui" line="184"/>
<source>Network port</source> <source>Network port</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="73"/> <location filename="../settingsView/csettingsview_moc.ui" line="74"/>
<location filename="../settingsView/csettingsview_moc.ui" line="561"/> <location filename="../settingsView/csettingsview_moc.ui" line="321"/>
<source>Video</source> <source>Video</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="403"/> <location filename="../settingsView/csettingsview_moc.ui" line="225"/>
<source>Show intro</source> <source>Show intro</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.cpp" line="402"/> <location filename="../settingsView/csettingsview_moc.cpp" line="405"/>
<source>Active</source> <source>Active</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.cpp" line="407"/> <location filename="../settingsView/csettingsview_moc.cpp" line="410"/>
<source>Disabled</source> <source>Disabled</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.cpp" line="408"/> <location filename="../settingsView/csettingsview_moc.cpp" line="411"/>
<source>Enable</source> <source>Enable</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.cpp" line="413"/> <location filename="../settingsView/csettingsview_moc.cpp" line="416"/>
<source>Not Installed</source> <source>Not Installed</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.cpp" line="414"/> <location filename="../settingsView/csettingsview_moc.cpp" line="417"/>
<source>Install</source> <source>Install</source>
<translation></translation> <translation></translation>
</message> </message>

View File

@ -406,123 +406,123 @@
<context> <context>
<name>CSettingsView</name> <name>CSettingsView</name>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="244"/> <location filename="../settingsView/csettingsview_moc.ui" line="302"/>
<location filename="../settingsView/csettingsview_moc.ui" line="414"/> <location filename="../settingsView/csettingsview_moc.ui" line="370"/>
<location filename="../settingsView/csettingsview_moc.ui" line="599"/> <location filename="../settingsView/csettingsview_moc.ui" line="408"/>
<source>Off</source> <source>Off</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="78"/> <location filename="../settingsView/csettingsview_moc.ui" line="79"/>
<location filename="../settingsView/csettingsview_moc.ui" line="123"/> <location filename="../settingsView/csettingsview_moc.ui" line="579"/>
<source>Artificial Intelligence</source> <source>Artificial Intelligence</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="83"/> <location filename="../settingsView/csettingsview_moc.ui" line="84"/>
<location filename="../settingsView/csettingsview_moc.ui" line="233"/> <location filename="../settingsView/csettingsview_moc.ui" line="434"/>
<source>Mod Repositories</source> <source>Mod Repositories</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="305"/> <location filename="../settingsView/csettingsview_moc.ui" line="498"/>
<source>Interface Scaling</source> <source>Interface Scaling</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="278"/> <location filename="../settingsView/csettingsview_moc.ui" line="491"/>
<source>Neutral AI in battles</source> <source>Neutral AI in battles</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="465"/> <location filename="../settingsView/csettingsview_moc.ui" line="421"/>
<source>Enemy AI in battles</source> <source>Enemy AI in battles</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="271"/> <location filename="../settingsView/csettingsview_moc.ui" line="441"/>
<source>Additional repository</source> <source>Additional repository</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="201"/> <location filename="../settingsView/csettingsview_moc.ui" line="566"/>
<source>Adventure Map Allies</source> <source>Adventure Map Allies</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="383"/> <location filename="../settingsView/csettingsview_moc.ui" line="281"/>
<source>Adventure Map Enemies</source> <source>Adventure Map Enemies</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="176"/> <location filename="../settingsView/csettingsview_moc.ui" line="623"/>
<source>Windowed</source> <source>Windowed</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="181"/> <location filename="../settingsView/csettingsview_moc.ui" line="628"/>
<source>Borderless fullscreen</source> <source>Borderless fullscreen</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="186"/> <location filename="../settingsView/csettingsview_moc.ui" line="633"/>
<source>Exclusive fullscreen</source> <source>Exclusive fullscreen</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="319"/> <location filename="../settingsView/csettingsview_moc.ui" line="170"/>
<source>Autosave limit (0 = off)</source> <source>Autosave limit (0 = off)</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="329"/> <location filename="../settingsView/csettingsview_moc.ui" line="525"/>
<source>Friendly AI in battles</source> <source>Friendly AI in battles</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="588"/> <location filename="../settingsView/csettingsview_moc.ui" line="271"/>
<source>Framerate Limit</source> <source>Framerate Limit</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="612"/> <location filename="../settingsView/csettingsview_moc.ui" line="328"/>
<source>Autosave prefix</source> <source>Autosave prefix</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="629"/> <location filename="../settingsView/csettingsview_moc.ui" line="603"/>
<source>empty = map name prefix</source> <source>empty = map name prefix</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="508"/> <location filename="../settingsView/csettingsview_moc.ui" line="383"/>
<source>Refresh now</source> <source>Refresh now</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="264"/> <location filename="../settingsView/csettingsview_moc.ui" line="288"/>
<source>Default repository</source> <source>Default repository</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="249"/> <location filename="../settingsView/csettingsview_moc.ui" line="307"/>
<location filename="../settingsView/csettingsview_moc.ui" line="419"/> <location filename="../settingsView/csettingsview_moc.ui" line="375"/>
<location filename="../settingsView/csettingsview_moc.ui" line="604"/> <location filename="../settingsView/csettingsview_moc.ui" line="413"/>
<source>On</source> <source>On</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="451"/> <location filename="../settingsView/csettingsview_moc.ui" line="359"/>
<source>Cursor</source> <source>Cursor</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="312"/> <location filename="../settingsView/csettingsview_moc.ui" line="481"/>
<source>Heroes III Data Language</source> <source>Heroes III Data Language</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="163"/> <location filename="../settingsView/csettingsview_moc.ui" line="610"/>
<source>Select display mode for game <source>Select display mode for game
Windowed - game will run inside a window that covers part of your screen Windowed - game will run inside a window that covers part of your screen
@ -533,94 +533,99 @@ Fullscreen Exclusive Mode - game will cover entirety of your screen and will use
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="431"/> <location filename="../settingsView/csettingsview_moc.ui" line="641"/>
<source>Reserved screen area</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="212"/>
<source>Hardware</source> <source>Hardware</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="436"/> <location filename="../settingsView/csettingsview_moc.ui" line="217"/>
<source>Software</source> <source>Software</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="535"/> <location filename="../settingsView/csettingsview_moc.ui" line="397"/>
<source>Heroes III Translation</source> <source>Heroes III Translation</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="472"/> <location filename="../settingsView/csettingsview_moc.ui" line="542"/>
<source>Check on startup</source> <source>Check on startup</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="444"/> <location filename="../settingsView/csettingsview_moc.ui" line="177"/>
<source>Fullscreen</source> <source>Fullscreen</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="68"/> <location filename="../settingsView/csettingsview_moc.ui" line="69"/>
<location filename="../settingsView/csettingsview_moc.ui" line="484"/> <location filename="../settingsView/csettingsview_moc.ui" line="197"/>
<source>General</source> <source>General</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="542"/> <location filename="../settingsView/csettingsview_moc.ui" line="532"/>
<source>VCMI Language</source> <source>VCMI Language</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="194"/> <location filename="../settingsView/csettingsview_moc.ui" line="335"/>
<source>Resolution</source> <source>Resolution</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="549"/> <location filename="../settingsView/csettingsview_moc.ui" line="204"/>
<source>Autosave</source> <source>Autosave</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="376"/> <location filename="../settingsView/csettingsview_moc.ui" line="146"/>
<source>Display index</source> <source>Display index</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="528"/> <location filename="../settingsView/csettingsview_moc.ui" line="184"/>
<source>Network port</source> <source>Network port</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="73"/> <location filename="../settingsView/csettingsview_moc.ui" line="74"/>
<location filename="../settingsView/csettingsview_moc.ui" line="561"/> <location filename="../settingsView/csettingsview_moc.ui" line="321"/>
<source>Video</source> <source>Video</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="403"/> <location filename="../settingsView/csettingsview_moc.ui" line="225"/>
<source>Show intro</source> <source>Show intro</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.cpp" line="402"/> <location filename="../settingsView/csettingsview_moc.cpp" line="405"/>
<source>Active</source> <source>Active</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.cpp" line="407"/> <location filename="../settingsView/csettingsview_moc.cpp" line="410"/>
<source>Disabled</source> <source>Disabled</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.cpp" line="408"/> <location filename="../settingsView/csettingsview_moc.cpp" line="411"/>
<source>Enable</source> <source>Enable</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.cpp" line="413"/> <location filename="../settingsView/csettingsview_moc.cpp" line="416"/>
<source>Not Installed</source> <source>Not Installed</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.cpp" line="414"/> <location filename="../settingsView/csettingsview_moc.cpp" line="417"/>
<source>Install</source> <source>Install</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

View File

@ -411,43 +411,43 @@
<context> <context>
<name>CSettingsView</name> <name>CSettingsView</name>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="244"/> <location filename="../settingsView/csettingsview_moc.ui" line="302"/>
<location filename="../settingsView/csettingsview_moc.ui" line="414"/> <location filename="../settingsView/csettingsview_moc.ui" line="370"/>
<location filename="../settingsView/csettingsview_moc.ui" line="599"/> <location filename="../settingsView/csettingsview_moc.ui" line="408"/>
<source>Off</source> <source>Off</source>
<translation>Désactivé</translation> <translation>Désactivé</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="78"/> <location filename="../settingsView/csettingsview_moc.ui" line="79"/>
<location filename="../settingsView/csettingsview_moc.ui" line="123"/> <location filename="../settingsView/csettingsview_moc.ui" line="579"/>
<source>Artificial Intelligence</source> <source>Artificial Intelligence</source>
<translation>Intelligence Artificielle</translation> <translation>Intelligence Artificielle</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="83"/> <location filename="../settingsView/csettingsview_moc.ui" line="84"/>
<location filename="../settingsView/csettingsview_moc.ui" line="233"/> <location filename="../settingsView/csettingsview_moc.ui" line="434"/>
<source>Mod Repositories</source> <source>Mod Repositories</source>
<translation>Dépôts de Mod</translation> <translation>Dépôts de Mod</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="249"/> <location filename="../settingsView/csettingsview_moc.ui" line="307"/>
<location filename="../settingsView/csettingsview_moc.ui" line="419"/> <location filename="../settingsView/csettingsview_moc.ui" line="375"/>
<location filename="../settingsView/csettingsview_moc.ui" line="604"/> <location filename="../settingsView/csettingsview_moc.ui" line="413"/>
<source>On</source> <source>On</source>
<translation>Activé</translation> <translation>Activé</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="465"/> <location filename="../settingsView/csettingsview_moc.ui" line="421"/>
<source>Enemy AI in battles</source> <source>Enemy AI in battles</source>
<translation>IA ennemie dans les batailles</translation> <translation>IA ennemie dans les batailles</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="264"/> <location filename="../settingsView/csettingsview_moc.ui" line="288"/>
<source>Default repository</source> <source>Default repository</source>
<translation>Dépôt par défaut</translation> <translation>Dépôt par défaut</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="163"/> <location filename="../settingsView/csettingsview_moc.ui" line="610"/>
<source>Select display mode for game <source>Select display mode for game
Windowed - game will run inside a window that covers part of your screen Windowed - game will run inside a window that covers part of your screen
@ -464,174 +464,179 @@ Mode fenêtré sans bord - le jeu s&quot;exécutera dans une fenêtre qui couvre
Mode exclusif plein écran - le jeu couvrira l&quot;intégralité de votre écran et utilisera la résolution sélectionnée.</translation> Mode exclusif plein écran - le jeu couvrira l&quot;intégralité de votre écran et utilisera la résolution sélectionnée.</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="176"/> <location filename="../settingsView/csettingsview_moc.ui" line="623"/>
<source>Windowed</source> <source>Windowed</source>
<translation>Fenêtré</translation> <translation>Fenêtré</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="181"/> <location filename="../settingsView/csettingsview_moc.ui" line="628"/>
<source>Borderless fullscreen</source> <source>Borderless fullscreen</source>
<translation>Fenêtré sans bord</translation> <translation>Fenêtré sans bord</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="186"/> <location filename="../settingsView/csettingsview_moc.ui" line="633"/>
<source>Exclusive fullscreen</source> <source>Exclusive fullscreen</source>
<translation>Plein écran exclusif</translation> <translation>Plein écran exclusif</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="278"/> <location filename="../settingsView/csettingsview_moc.ui" line="641"/>
<source>Reserved screen area</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="491"/>
<source>Neutral AI in battles</source> <source>Neutral AI in battles</source>
<translation>IA neutre dans les batailles</translation> <translation>IA neutre dans les batailles</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="319"/> <location filename="../settingsView/csettingsview_moc.ui" line="170"/>
<source>Autosave limit (0 = off)</source> <source>Autosave limit (0 = off)</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="383"/> <location filename="../settingsView/csettingsview_moc.ui" line="281"/>
<source>Adventure Map Enemies</source> <source>Adventure Map Enemies</source>
<translation>Ennemis de la carte d&quot;aventure</translation> <translation>Ennemis de la carte d&quot;aventure</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="612"/> <location filename="../settingsView/csettingsview_moc.ui" line="328"/>
<source>Autosave prefix</source> <source>Autosave prefix</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="629"/> <location filename="../settingsView/csettingsview_moc.ui" line="603"/>
<source>empty = map name prefix</source> <source>empty = map name prefix</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="305"/> <location filename="../settingsView/csettingsview_moc.ui" line="498"/>
<source>Interface Scaling</source> <source>Interface Scaling</source>
<translation>Mise à l&quot;échelle de l&quot;interface</translation> <translation>Mise à l&quot;échelle de l&quot;interface</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="451"/> <location filename="../settingsView/csettingsview_moc.ui" line="359"/>
<source>Cursor</source> <source>Cursor</source>
<translation>Curseur</translation> <translation>Curseur</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="312"/> <location filename="../settingsView/csettingsview_moc.ui" line="481"/>
<source>Heroes III Data Language</source> <source>Heroes III Data Language</source>
<translation>Langue des Données de Heroes III</translation> <translation>Langue des Données de Heroes III</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="588"/> <location filename="../settingsView/csettingsview_moc.ui" line="271"/>
<source>Framerate Limit</source> <source>Framerate Limit</source>
<translation>Limite de fréquence d&quot;images</translation> <translation>Limite de fréquence d&quot;images</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="431"/> <location filename="../settingsView/csettingsview_moc.ui" line="212"/>
<source>Hardware</source> <source>Hardware</source>
<translation>Matériel</translation> <translation>Matériel</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="436"/> <location filename="../settingsView/csettingsview_moc.ui" line="217"/>
<source>Software</source> <source>Software</source>
<translation>Logiciel</translation> <translation>Logiciel</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="535"/> <location filename="../settingsView/csettingsview_moc.ui" line="397"/>
<source>Heroes III Translation</source> <source>Heroes III Translation</source>
<translation>Traduction de Heroes III</translation> <translation>Traduction de Heroes III</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="201"/> <location filename="../settingsView/csettingsview_moc.ui" line="566"/>
<source>Adventure Map Allies</source> <source>Adventure Map Allies</source>
<translation>Alliés de la carte d&quot;aventure</translation> <translation>Alliés de la carte d&quot;aventure</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="271"/> <location filename="../settingsView/csettingsview_moc.ui" line="441"/>
<source>Additional repository</source> <source>Additional repository</source>
<translation>Dépôt supplémentaire</translation> <translation>Dépôt supplémentaire</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="472"/> <location filename="../settingsView/csettingsview_moc.ui" line="542"/>
<source>Check on startup</source> <source>Check on startup</source>
<translation>Vérifier au démarrage</translation> <translation>Vérifier au démarrage</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="508"/> <location filename="../settingsView/csettingsview_moc.ui" line="383"/>
<source>Refresh now</source> <source>Refresh now</source>
<translation>Actualiser maintenant</translation> <translation>Actualiser maintenant</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="329"/> <location filename="../settingsView/csettingsview_moc.ui" line="525"/>
<source>Friendly AI in battles</source> <source>Friendly AI in battles</source>
<translation>IA amicale dans les batailles</translation> <translation>IA amicale dans les batailles</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="444"/> <location filename="../settingsView/csettingsview_moc.ui" line="177"/>
<source>Fullscreen</source> <source>Fullscreen</source>
<translation>Plein écran</translation> <translation>Plein écran</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="68"/> <location filename="../settingsView/csettingsview_moc.ui" line="69"/>
<location filename="../settingsView/csettingsview_moc.ui" line="484"/> <location filename="../settingsView/csettingsview_moc.ui" line="197"/>
<source>General</source> <source>General</source>
<translation>Général</translation> <translation>Général</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="542"/> <location filename="../settingsView/csettingsview_moc.ui" line="532"/>
<source>VCMI Language</source> <source>VCMI Language</source>
<translation>Langue de VCMI</translation> <translation>Langue de VCMI</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="194"/> <location filename="../settingsView/csettingsview_moc.ui" line="335"/>
<source>Resolution</source> <source>Resolution</source>
<translation>Résolution</translation> <translation>Résolution</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="549"/> <location filename="../settingsView/csettingsview_moc.ui" line="204"/>
<source>Autosave</source> <source>Autosave</source>
<translation>Sauvegarde automatique</translation> <translation>Sauvegarde automatique</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="376"/> <location filename="../settingsView/csettingsview_moc.ui" line="146"/>
<source>Display index</source> <source>Display index</source>
<translation>Index d&apos;affichage</translation> <translation>Index d&apos;affichage</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="528"/> <location filename="../settingsView/csettingsview_moc.ui" line="184"/>
<source>Network port</source> <source>Network port</source>
<translation>Port de réseau</translation> <translation>Port de réseau</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="73"/> <location filename="../settingsView/csettingsview_moc.ui" line="74"/>
<location filename="../settingsView/csettingsview_moc.ui" line="561"/> <location filename="../settingsView/csettingsview_moc.ui" line="321"/>
<source>Video</source> <source>Video</source>
<translation>Vidéo</translation> <translation>Vidéo</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="403"/> <location filename="../settingsView/csettingsview_moc.ui" line="225"/>
<source>Show intro</source> <source>Show intro</source>
<translation>Montrer l&apos;intro</translation> <translation>Montrer l&apos;intro</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.cpp" line="402"/> <location filename="../settingsView/csettingsview_moc.cpp" line="405"/>
<source>Active</source> <source>Active</source>
<translation>Actif</translation> <translation>Actif</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.cpp" line="407"/> <location filename="../settingsView/csettingsview_moc.cpp" line="410"/>
<source>Disabled</source> <source>Disabled</source>
<translation>Désactivé</translation> <translation>Désactivé</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.cpp" line="408"/> <location filename="../settingsView/csettingsview_moc.cpp" line="411"/>
<source>Enable</source> <source>Enable</source>
<translation>Activé</translation> <translation>Activé</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.cpp" line="413"/> <location filename="../settingsView/csettingsview_moc.cpp" line="416"/>
<source>Not Installed</source> <source>Not Installed</source>
<translation>Pas Installé</translation> <translation>Pas Installé</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.cpp" line="414"/> <location filename="../settingsView/csettingsview_moc.cpp" line="417"/>
<source>Install</source> <source>Install</source>
<translation>Installer</translation> <translation>Installer</translation>
</message> </message>

View File

@ -406,123 +406,123 @@
<context> <context>
<name>CSettingsView</name> <name>CSettingsView</name>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="244"/> <location filename="../settingsView/csettingsview_moc.ui" line="302"/>
<location filename="../settingsView/csettingsview_moc.ui" line="414"/> <location filename="../settingsView/csettingsview_moc.ui" line="370"/>
<location filename="../settingsView/csettingsview_moc.ui" line="599"/> <location filename="../settingsView/csettingsview_moc.ui" line="408"/>
<source>Off</source> <source>Off</source>
<translation>Aus</translation> <translation>Aus</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="78"/> <location filename="../settingsView/csettingsview_moc.ui" line="79"/>
<location filename="../settingsView/csettingsview_moc.ui" line="123"/> <location filename="../settingsView/csettingsview_moc.ui" line="579"/>
<source>Artificial Intelligence</source> <source>Artificial Intelligence</source>
<translation>Künstliche Intelligenz</translation> <translation>Künstliche Intelligenz</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="83"/> <location filename="../settingsView/csettingsview_moc.ui" line="84"/>
<location filename="../settingsView/csettingsview_moc.ui" line="233"/> <location filename="../settingsView/csettingsview_moc.ui" line="434"/>
<source>Mod Repositories</source> <source>Mod Repositories</source>
<translation>Mod-Repositorien</translation> <translation>Mod-Repositorien</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="305"/> <location filename="../settingsView/csettingsview_moc.ui" line="498"/>
<source>Interface Scaling</source> <source>Interface Scaling</source>
<translation>Skalierung der Benutzeroberfläche</translation> <translation>Skalierung der Benutzeroberfläche</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="278"/> <location filename="../settingsView/csettingsview_moc.ui" line="491"/>
<source>Neutral AI in battles</source> <source>Neutral AI in battles</source>
<translation>Neutrale KI in Kämpfen</translation> <translation>Neutrale KI in Kämpfen</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="465"/> <location filename="../settingsView/csettingsview_moc.ui" line="421"/>
<source>Enemy AI in battles</source> <source>Enemy AI in battles</source>
<translation>Gegnerische KI in Kämpfen</translation> <translation>Gegnerische KI in Kämpfen</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="271"/> <location filename="../settingsView/csettingsview_moc.ui" line="441"/>
<source>Additional repository</source> <source>Additional repository</source>
<translation>Zusätzliches Repository</translation> <translation>Zusätzliches Repository</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="201"/> <location filename="../settingsView/csettingsview_moc.ui" line="566"/>
<source>Adventure Map Allies</source> <source>Adventure Map Allies</source>
<translation>Abenteuerkarte Verbündete</translation> <translation>Abenteuerkarte Verbündete</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="383"/> <location filename="../settingsView/csettingsview_moc.ui" line="281"/>
<source>Adventure Map Enemies</source> <source>Adventure Map Enemies</source>
<translation>Abenteuerkarte Feinde</translation> <translation>Abenteuerkarte Feinde</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="176"/> <location filename="../settingsView/csettingsview_moc.ui" line="623"/>
<source>Windowed</source> <source>Windowed</source>
<translation>Fenstermodus</translation> <translation>Fenstermodus</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="181"/> <location filename="../settingsView/csettingsview_moc.ui" line="628"/>
<source>Borderless fullscreen</source> <source>Borderless fullscreen</source>
<translation>Randloser Vollbildmodus</translation> <translation>Randloser Vollbildmodus</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="186"/> <location filename="../settingsView/csettingsview_moc.ui" line="633"/>
<source>Exclusive fullscreen</source> <source>Exclusive fullscreen</source>
<translation>Exklusiver Vollbildmodus</translation> <translation>Exklusiver Vollbildmodus</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="319"/> <location filename="../settingsView/csettingsview_moc.ui" line="170"/>
<source>Autosave limit (0 = off)</source> <source>Autosave limit (0 = off)</source>
<translation>Limit für Autospeicherung (0 = aus)</translation> <translation>Limit für Autospeicherung (0 = aus)</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="329"/> <location filename="../settingsView/csettingsview_moc.ui" line="525"/>
<source>Friendly AI in battles</source> <source>Friendly AI in battles</source>
<translation>Freundliche KI in Kämpfen</translation> <translation>Freundliche KI in Kämpfen</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="588"/> <location filename="../settingsView/csettingsview_moc.ui" line="271"/>
<source>Framerate Limit</source> <source>Framerate Limit</source>
<translation>Limit der Bildrate</translation> <translation>Limit der Bildrate</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="612"/> <location filename="../settingsView/csettingsview_moc.ui" line="328"/>
<source>Autosave prefix</source> <source>Autosave prefix</source>
<translation>Präfix für Autospeicherung</translation> <translation>Präfix für Autospeicherung</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="629"/> <location filename="../settingsView/csettingsview_moc.ui" line="603"/>
<source>empty = map name prefix</source> <source>empty = map name prefix</source>
<translation>leer = Kartenname als Präfix</translation> <translation>leer = Kartenname als Präfix</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="508"/> <location filename="../settingsView/csettingsview_moc.ui" line="383"/>
<source>Refresh now</source> <source>Refresh now</source>
<translation>Jetzt aktualisieren</translation> <translation>Jetzt aktualisieren</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="264"/> <location filename="../settingsView/csettingsview_moc.ui" line="288"/>
<source>Default repository</source> <source>Default repository</source>
<translation>Standard Repository</translation> <translation>Standard Repository</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="249"/> <location filename="../settingsView/csettingsview_moc.ui" line="307"/>
<location filename="../settingsView/csettingsview_moc.ui" line="419"/> <location filename="../settingsView/csettingsview_moc.ui" line="375"/>
<location filename="../settingsView/csettingsview_moc.ui" line="604"/> <location filename="../settingsView/csettingsview_moc.ui" line="413"/>
<source>On</source> <source>On</source>
<translation>An</translation> <translation>An</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="451"/> <location filename="../settingsView/csettingsview_moc.ui" line="359"/>
<source>Cursor</source> <source>Cursor</source>
<translation>Zeiger</translation> <translation>Zeiger</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="312"/> <location filename="../settingsView/csettingsview_moc.ui" line="481"/>
<source>Heroes III Data Language</source> <source>Heroes III Data Language</source>
<translation>Sprache der Heroes III Daten</translation> <translation>Sprache der Heroes III Daten</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="163"/> <location filename="../settingsView/csettingsview_moc.ui" line="610"/>
<source>Select display mode for game <source>Select display mode for game
Windowed - game will run inside a window that covers part of your screen Windowed - game will run inside a window that covers part of your screen
@ -539,94 +539,99 @@ Randloser Fenstermodus - das Spiel läuft in einem Fenster, das den gesamten Bil
Exklusiver Vollbildmodus - das Spiel bedeckt den gesamten Bildschirm und verwendet die gewählte Auflösung.</translation> Exklusiver Vollbildmodus - das Spiel bedeckt den gesamten Bildschirm und verwendet die gewählte Auflösung.</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="431"/> <location filename="../settingsView/csettingsview_moc.ui" line="641"/>
<source>Reserved screen area</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="212"/>
<source>Hardware</source> <source>Hardware</source>
<translation>Hardware</translation> <translation>Hardware</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="436"/> <location filename="../settingsView/csettingsview_moc.ui" line="217"/>
<source>Software</source> <source>Software</source>
<translation>Software</translation> <translation>Software</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="535"/> <location filename="../settingsView/csettingsview_moc.ui" line="397"/>
<source>Heroes III Translation</source> <source>Heroes III Translation</source>
<translation>Heroes III Übersetzung</translation> <translation>Heroes III Übersetzung</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="472"/> <location filename="../settingsView/csettingsview_moc.ui" line="542"/>
<source>Check on startup</source> <source>Check on startup</source>
<translation>Beim Start prüfen</translation> <translation>Beim Start prüfen</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="444"/> <location filename="../settingsView/csettingsview_moc.ui" line="177"/>
<source>Fullscreen</source> <source>Fullscreen</source>
<translation>Vollbild</translation> <translation>Vollbild</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="68"/> <location filename="../settingsView/csettingsview_moc.ui" line="69"/>
<location filename="../settingsView/csettingsview_moc.ui" line="484"/> <location filename="../settingsView/csettingsview_moc.ui" line="197"/>
<source>General</source> <source>General</source>
<translation>Allgemein</translation> <translation>Allgemein</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="542"/> <location filename="../settingsView/csettingsview_moc.ui" line="532"/>
<source>VCMI Language</source> <source>VCMI Language</source>
<translation>VCMI-Sprache</translation> <translation>VCMI-Sprache</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="194"/> <location filename="../settingsView/csettingsview_moc.ui" line="335"/>
<source>Resolution</source> <source>Resolution</source>
<translation>Auflösung</translation> <translation>Auflösung</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="549"/> <location filename="../settingsView/csettingsview_moc.ui" line="204"/>
<source>Autosave</source> <source>Autosave</source>
<translation>Autospeichern</translation> <translation>Autospeichern</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="376"/> <location filename="../settingsView/csettingsview_moc.ui" line="146"/>
<source>Display index</source> <source>Display index</source>
<translation>Anzeige-Index</translation> <translation>Anzeige-Index</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="528"/> <location filename="../settingsView/csettingsview_moc.ui" line="184"/>
<source>Network port</source> <source>Network port</source>
<translation>Netzwerk-Port</translation> <translation>Netzwerk-Port</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="73"/> <location filename="../settingsView/csettingsview_moc.ui" line="74"/>
<location filename="../settingsView/csettingsview_moc.ui" line="561"/> <location filename="../settingsView/csettingsview_moc.ui" line="321"/>
<source>Video</source> <source>Video</source>
<translation>Video</translation> <translation>Video</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="403"/> <location filename="../settingsView/csettingsview_moc.ui" line="225"/>
<source>Show intro</source> <source>Show intro</source>
<translation>Intro anzeigen</translation> <translation>Intro anzeigen</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.cpp" line="402"/> <location filename="../settingsView/csettingsview_moc.cpp" line="405"/>
<source>Active</source> <source>Active</source>
<translation>Aktiv</translation> <translation>Aktiv</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.cpp" line="407"/> <location filename="../settingsView/csettingsview_moc.cpp" line="410"/>
<source>Disabled</source> <source>Disabled</source>
<translation>Deaktiviert</translation> <translation>Deaktiviert</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.cpp" line="408"/> <location filename="../settingsView/csettingsview_moc.cpp" line="411"/>
<source>Enable</source> <source>Enable</source>
<translation>Aktivieren</translation> <translation>Aktivieren</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.cpp" line="413"/> <location filename="../settingsView/csettingsview_moc.cpp" line="416"/>
<source>Not Installed</source> <source>Not Installed</source>
<translation>Nicht installiert</translation> <translation>Nicht installiert</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.cpp" line="414"/> <location filename="../settingsView/csettingsview_moc.cpp" line="417"/>
<source>Install</source> <source>Install</source>
<translation>Installieren</translation> <translation>Installieren</translation>
</message> </message>

View File

@ -406,123 +406,123 @@
<context> <context>
<name>CSettingsView</name> <name>CSettingsView</name>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="244"/> <location filename="../settingsView/csettingsview_moc.ui" line="302"/>
<location filename="../settingsView/csettingsview_moc.ui" line="414"/> <location filename="../settingsView/csettingsview_moc.ui" line="370"/>
<location filename="../settingsView/csettingsview_moc.ui" line="599"/> <location filename="../settingsView/csettingsview_moc.ui" line="408"/>
<source>Off</source> <source>Off</source>
<translation>Wyłączony</translation> <translation>Wyłączony</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="78"/> <location filename="../settingsView/csettingsview_moc.ui" line="79"/>
<location filename="../settingsView/csettingsview_moc.ui" line="123"/> <location filename="../settingsView/csettingsview_moc.ui" line="579"/>
<source>Artificial Intelligence</source> <source>Artificial Intelligence</source>
<translation>Sztuczna Inteligencja</translation> <translation>Sztuczna Inteligencja</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="83"/> <location filename="../settingsView/csettingsview_moc.ui" line="84"/>
<location filename="../settingsView/csettingsview_moc.ui" line="233"/> <location filename="../settingsView/csettingsview_moc.ui" line="434"/>
<source>Mod Repositories</source> <source>Mod Repositories</source>
<translation>Repozytoria modów</translation> <translation>Repozytoria modów</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="305"/> <location filename="../settingsView/csettingsview_moc.ui" line="498"/>
<source>Interface Scaling</source> <source>Interface Scaling</source>
<translation>Skala interfejsu</translation> <translation>Skala interfejsu</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="278"/> <location filename="../settingsView/csettingsview_moc.ui" line="491"/>
<source>Neutral AI in battles</source> <source>Neutral AI in battles</source>
<translation>AI bitewne jednostek neutralnych</translation> <translation>AI bitewne jednostek neutralnych</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="465"/> <location filename="../settingsView/csettingsview_moc.ui" line="421"/>
<source>Enemy AI in battles</source> <source>Enemy AI in battles</source>
<translation>AI bitewne wrogów</translation> <translation>AI bitewne wrogów</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="271"/> <location filename="../settingsView/csettingsview_moc.ui" line="441"/>
<source>Additional repository</source> <source>Additional repository</source>
<translation>Dodatkowe repozytorium</translation> <translation>Dodatkowe repozytorium</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="201"/> <location filename="../settingsView/csettingsview_moc.ui" line="566"/>
<source>Adventure Map Allies</source> <source>Adventure Map Allies</source>
<translation>AI sojuszników mapy przygody</translation> <translation>AI sojuszników mapy przygody</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="383"/> <location filename="../settingsView/csettingsview_moc.ui" line="281"/>
<source>Adventure Map Enemies</source> <source>Adventure Map Enemies</source>
<translation>AI wrogów mapy przygody</translation> <translation>AI wrogów mapy przygody</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="176"/> <location filename="../settingsView/csettingsview_moc.ui" line="623"/>
<source>Windowed</source> <source>Windowed</source>
<translation>Okno</translation> <translation>Okno</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="181"/> <location filename="../settingsView/csettingsview_moc.ui" line="628"/>
<source>Borderless fullscreen</source> <source>Borderless fullscreen</source>
<translation>Pełny ekran (tryb okna)</translation> <translation>Pełny ekran (tryb okna)</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="186"/> <location filename="../settingsView/csettingsview_moc.ui" line="633"/>
<source>Exclusive fullscreen</source> <source>Exclusive fullscreen</source>
<translation>Pełny ekran klasyczny</translation> <translation>Pełny ekran klasyczny</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="319"/> <location filename="../settingsView/csettingsview_moc.ui" line="170"/>
<source>Autosave limit (0 = off)</source> <source>Autosave limit (0 = off)</source>
<translation>Limit autozapisów (0 = brak)</translation> <translation>Limit autozapisów (0 = brak)</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="329"/> <location filename="../settingsView/csettingsview_moc.ui" line="525"/>
<source>Friendly AI in battles</source> <source>Friendly AI in battles</source>
<translation>AI bitewne sojuszników</translation> <translation>AI bitewne sojuszników</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="588"/> <location filename="../settingsView/csettingsview_moc.ui" line="271"/>
<source>Framerate Limit</source> <source>Framerate Limit</source>
<translation>Limit FPS</translation> <translation>Limit FPS</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="612"/> <location filename="../settingsView/csettingsview_moc.ui" line="328"/>
<source>Autosave prefix</source> <source>Autosave prefix</source>
<translation>Przedrostek autozapisu</translation> <translation>Przedrostek autozapisu</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="629"/> <location filename="../settingsView/csettingsview_moc.ui" line="603"/>
<source>empty = map name prefix</source> <source>empty = map name prefix</source>
<translation>puste = przedrostek z nazwy mapy</translation> <translation>puste = przedrostek z nazwy mapy</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="508"/> <location filename="../settingsView/csettingsview_moc.ui" line="383"/>
<source>Refresh now</source> <source>Refresh now</source>
<translation>Odśwież</translation> <translation>Odśwież</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="264"/> <location filename="../settingsView/csettingsview_moc.ui" line="288"/>
<source>Default repository</source> <source>Default repository</source>
<translation>Domyślne repozytorium</translation> <translation>Domyślne repozytorium</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="249"/> <location filename="../settingsView/csettingsview_moc.ui" line="307"/>
<location filename="../settingsView/csettingsview_moc.ui" line="419"/> <location filename="../settingsView/csettingsview_moc.ui" line="375"/>
<location filename="../settingsView/csettingsview_moc.ui" line="604"/> <location filename="../settingsView/csettingsview_moc.ui" line="413"/>
<source>On</source> <source>On</source>
<translation>Włączony</translation> <translation>Włączony</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="451"/> <location filename="../settingsView/csettingsview_moc.ui" line="359"/>
<source>Cursor</source> <source>Cursor</source>
<translation>Kursor</translation> <translation>Kursor</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="312"/> <location filename="../settingsView/csettingsview_moc.ui" line="481"/>
<source>Heroes III Data Language</source> <source>Heroes III Data Language</source>
<translation>Język plików Heroes III</translation> <translation>Język plików Heroes III</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="163"/> <location filename="../settingsView/csettingsview_moc.ui" line="610"/>
<source>Select display mode for game <source>Select display mode for game
Windowed - game will run inside a window that covers part of your screen Windowed - game will run inside a window that covers part of your screen
@ -539,94 +539,99 @@ Pełny ekran w trybie okna - gra uruchomi się w oknie przysłaniającym cały e
Pełny ekran klasyczny - gra przysłoni cały ekran uruchamiając się w wybranej przez ciebie rozdzielczości ekranu.</translation> Pełny ekran klasyczny - gra przysłoni cały ekran uruchamiając się w wybranej przez ciebie rozdzielczości ekranu.</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="431"/> <location filename="../settingsView/csettingsview_moc.ui" line="641"/>
<source>Reserved screen area</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="212"/>
<source>Hardware</source> <source>Hardware</source>
<translation>Sprzętowy</translation> <translation>Sprzętowy</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="436"/> <location filename="../settingsView/csettingsview_moc.ui" line="217"/>
<source>Software</source> <source>Software</source>
<translation>Programowy</translation> <translation>Programowy</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="535"/> <location filename="../settingsView/csettingsview_moc.ui" line="397"/>
<source>Heroes III Translation</source> <source>Heroes III Translation</source>
<translation>Tłumaczenie Heroes III</translation> <translation>Tłumaczenie Heroes III</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="472"/> <location filename="../settingsView/csettingsview_moc.ui" line="542"/>
<source>Check on startup</source> <source>Check on startup</source>
<translation>Sprawdzaj przy uruchomieniu</translation> <translation>Sprawdzaj przy uruchomieniu</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="444"/> <location filename="../settingsView/csettingsview_moc.ui" line="177"/>
<source>Fullscreen</source> <source>Fullscreen</source>
<translation>Pełny ekran</translation> <translation>Pełny ekran</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="68"/> <location filename="../settingsView/csettingsview_moc.ui" line="69"/>
<location filename="../settingsView/csettingsview_moc.ui" line="484"/> <location filename="../settingsView/csettingsview_moc.ui" line="197"/>
<source>General</source> <source>General</source>
<translation>Ogólne</translation> <translation>Ogólne</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="542"/> <location filename="../settingsView/csettingsview_moc.ui" line="532"/>
<source>VCMI Language</source> <source>VCMI Language</source>
<translation>Język VCMI</translation> <translation>Język VCMI</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="194"/> <location filename="../settingsView/csettingsview_moc.ui" line="335"/>
<source>Resolution</source> <source>Resolution</source>
<translation>Rozdzielczość</translation> <translation>Rozdzielczość</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="549"/> <location filename="../settingsView/csettingsview_moc.ui" line="204"/>
<source>Autosave</source> <source>Autosave</source>
<translation>Autozapis</translation> <translation>Autozapis</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="376"/> <location filename="../settingsView/csettingsview_moc.ui" line="146"/>
<source>Display index</source> <source>Display index</source>
<translation>Numer wyświetlacza</translation> <translation>Numer wyświetlacza</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="528"/> <location filename="../settingsView/csettingsview_moc.ui" line="184"/>
<source>Network port</source> <source>Network port</source>
<translation>Port sieciowy</translation> <translation>Port sieciowy</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="73"/> <location filename="../settingsView/csettingsview_moc.ui" line="74"/>
<location filename="../settingsView/csettingsview_moc.ui" line="561"/> <location filename="../settingsView/csettingsview_moc.ui" line="321"/>
<source>Video</source> <source>Video</source>
<translation>Obraz</translation> <translation>Obraz</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="403"/> <location filename="../settingsView/csettingsview_moc.ui" line="225"/>
<source>Show intro</source> <source>Show intro</source>
<translation>Pokaż intro</translation> <translation>Pokaż intro</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.cpp" line="402"/> <location filename="../settingsView/csettingsview_moc.cpp" line="405"/>
<source>Active</source> <source>Active</source>
<translation>Aktywny</translation> <translation>Aktywny</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.cpp" line="407"/> <location filename="../settingsView/csettingsview_moc.cpp" line="410"/>
<source>Disabled</source> <source>Disabled</source>
<translation>Wyłączone</translation> <translation>Wyłączone</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.cpp" line="408"/> <location filename="../settingsView/csettingsview_moc.cpp" line="411"/>
<source>Enable</source> <source>Enable</source>
<translation>Włącz</translation> <translation>Włącz</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.cpp" line="413"/> <location filename="../settingsView/csettingsview_moc.cpp" line="416"/>
<source>Not Installed</source> <source>Not Installed</source>
<translation>Nie zainstalowano</translation> <translation>Nie zainstalowano</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.cpp" line="414"/> <location filename="../settingsView/csettingsview_moc.cpp" line="417"/>
<source>Install</source> <source>Install</source>
<translation>Zainstaluj</translation> <translation>Zainstaluj</translation>
</message> </message>

View File

@ -406,144 +406,149 @@
<context> <context>
<name>CSettingsView</name> <name>CSettingsView</name>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="305"/> <location filename="../settingsView/csettingsview_moc.ui" line="498"/>
<source>Interface Scaling</source> <source>Interface Scaling</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="244"/> <location filename="../settingsView/csettingsview_moc.ui" line="302"/>
<location filename="../settingsView/csettingsview_moc.ui" line="414"/> <location filename="../settingsView/csettingsview_moc.ui" line="370"/>
<location filename="../settingsView/csettingsview_moc.ui" line="599"/> <location filename="../settingsView/csettingsview_moc.ui" line="408"/>
<source>Off</source> <source>Off</source>
<translation>Отключено</translation> <translation>Отключено</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="249"/> <location filename="../settingsView/csettingsview_moc.ui" line="307"/>
<location filename="../settingsView/csettingsview_moc.ui" line="419"/> <location filename="../settingsView/csettingsview_moc.ui" line="375"/>
<location filename="../settingsView/csettingsview_moc.ui" line="604"/> <location filename="../settingsView/csettingsview_moc.ui" line="413"/>
<source>On</source> <source>On</source>
<translation>Включено</translation> <translation>Включено</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="278"/> <location filename="../settingsView/csettingsview_moc.ui" line="491"/>
<source>Neutral AI in battles</source> <source>Neutral AI in battles</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="465"/> <location filename="../settingsView/csettingsview_moc.ui" line="421"/>
<source>Enemy AI in battles</source> <source>Enemy AI in battles</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="271"/> <location filename="../settingsView/csettingsview_moc.ui" line="441"/>
<source>Additional repository</source> <source>Additional repository</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="472"/> <location filename="../settingsView/csettingsview_moc.ui" line="542"/>
<source>Check on startup</source> <source>Check on startup</source>
<translation>Проверять при запуске</translation> <translation>Проверять при запуске</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="444"/> <location filename="../settingsView/csettingsview_moc.ui" line="177"/>
<source>Fullscreen</source> <source>Fullscreen</source>
<translation>Полноэкранный режим</translation> <translation>Полноэкранный режим</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="68"/> <location filename="../settingsView/csettingsview_moc.ui" line="69"/>
<location filename="../settingsView/csettingsview_moc.ui" line="484"/> <location filename="../settingsView/csettingsview_moc.ui" line="197"/>
<source>General</source> <source>General</source>
<translation>Общее</translation> <translation>Общее</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="542"/> <location filename="../settingsView/csettingsview_moc.ui" line="532"/>
<source>VCMI Language</source> <source>VCMI Language</source>
<translation>Язык VCMI</translation> <translation>Язык VCMI</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="451"/> <location filename="../settingsView/csettingsview_moc.ui" line="359"/>
<source>Cursor</source> <source>Cursor</source>
<translation>Курсор</translation> <translation>Курсор</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="78"/> <location filename="../settingsView/csettingsview_moc.ui" line="79"/>
<location filename="../settingsView/csettingsview_moc.ui" line="123"/> <location filename="../settingsView/csettingsview_moc.ui" line="579"/>
<source>Artificial Intelligence</source> <source>Artificial Intelligence</source>
<translation>Искусственный интеллект</translation> <translation>Искусственный интеллект</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="83"/> <location filename="../settingsView/csettingsview_moc.ui" line="84"/>
<location filename="../settingsView/csettingsview_moc.ui" line="233"/> <location filename="../settingsView/csettingsview_moc.ui" line="434"/>
<source>Mod Repositories</source> <source>Mod Repositories</source>
<translation>Репозитории модов</translation> <translation>Репозитории модов</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="201"/> <location filename="../settingsView/csettingsview_moc.ui" line="566"/>
<source>Adventure Map Allies</source> <source>Adventure Map Allies</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="508"/> <location filename="../settingsView/csettingsview_moc.ui" line="383"/>
<source>Refresh now</source> <source>Refresh now</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="383"/> <location filename="../settingsView/csettingsview_moc.ui" line="281"/>
<source>Adventure Map Enemies</source> <source>Adventure Map Enemies</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="176"/> <location filename="../settingsView/csettingsview_moc.ui" line="623"/>
<source>Windowed</source> <source>Windowed</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="181"/> <location filename="../settingsView/csettingsview_moc.ui" line="628"/>
<source>Borderless fullscreen</source> <source>Borderless fullscreen</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="186"/> <location filename="../settingsView/csettingsview_moc.ui" line="633"/>
<source>Exclusive fullscreen</source> <source>Exclusive fullscreen</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="319"/> <location filename="../settingsView/csettingsview_moc.ui" line="641"/>
<source>Reserved screen area</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="170"/>
<source>Autosave limit (0 = off)</source> <source>Autosave limit (0 = off)</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="329"/> <location filename="../settingsView/csettingsview_moc.ui" line="525"/>
<source>Friendly AI in battles</source> <source>Friendly AI in battles</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="588"/> <location filename="../settingsView/csettingsview_moc.ui" line="271"/>
<source>Framerate Limit</source> <source>Framerate Limit</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="612"/> <location filename="../settingsView/csettingsview_moc.ui" line="328"/>
<source>Autosave prefix</source> <source>Autosave prefix</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="629"/> <location filename="../settingsView/csettingsview_moc.ui" line="603"/>
<source>empty = map name prefix</source> <source>empty = map name prefix</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="264"/> <location filename="../settingsView/csettingsview_moc.ui" line="288"/>
<source>Default repository</source> <source>Default repository</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="312"/> <location filename="../settingsView/csettingsview_moc.ui" line="481"/>
<source>Heroes III Data Language</source> <source>Heroes III Data Language</source>
<translation>Язык данных Героев III</translation> <translation>Язык данных Героев III</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="163"/> <location filename="../settingsView/csettingsview_moc.ui" line="610"/>
<source>Select display mode for game <source>Select display mode for game
Windowed - game will run inside a window that covers part of your screen Windowed - game will run inside a window that covers part of your screen
@ -554,73 +559,73 @@ Fullscreen Exclusive Mode - game will cover entirety of your screen and will use
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="431"/> <location filename="../settingsView/csettingsview_moc.ui" line="212"/>
<source>Hardware</source> <source>Hardware</source>
<translation>Аппаратный</translation> <translation>Аппаратный</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="436"/> <location filename="../settingsView/csettingsview_moc.ui" line="217"/>
<source>Software</source> <source>Software</source>
<translation>Программный</translation> <translation>Программный</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="535"/> <location filename="../settingsView/csettingsview_moc.ui" line="397"/>
<source>Heroes III Translation</source> <source>Heroes III Translation</source>
<translation>Перевод Героев III</translation> <translation>Перевод Героев III</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="194"/> <location filename="../settingsView/csettingsview_moc.ui" line="335"/>
<source>Resolution</source> <source>Resolution</source>
<translation>Разрешение экрана</translation> <translation>Разрешение экрана</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="549"/> <location filename="../settingsView/csettingsview_moc.ui" line="204"/>
<source>Autosave</source> <source>Autosave</source>
<translation>Автосохранение</translation> <translation>Автосохранение</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="376"/> <location filename="../settingsView/csettingsview_moc.ui" line="146"/>
<source>Display index</source> <source>Display index</source>
<translation>Дисплей</translation> <translation>Дисплей</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="528"/> <location filename="../settingsView/csettingsview_moc.ui" line="184"/>
<source>Network port</source> <source>Network port</source>
<translation>Сетевой порт</translation> <translation>Сетевой порт</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="73"/> <location filename="../settingsView/csettingsview_moc.ui" line="74"/>
<location filename="../settingsView/csettingsview_moc.ui" line="561"/> <location filename="../settingsView/csettingsview_moc.ui" line="321"/>
<source>Video</source> <source>Video</source>
<translation>Графика</translation> <translation>Графика</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="403"/> <location filename="../settingsView/csettingsview_moc.ui" line="225"/>
<source>Show intro</source> <source>Show intro</source>
<translation>Вступление</translation> <translation>Вступление</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.cpp" line="402"/> <location filename="../settingsView/csettingsview_moc.cpp" line="405"/>
<source>Active</source> <source>Active</source>
<translation>Активен</translation> <translation>Активен</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.cpp" line="407"/> <location filename="../settingsView/csettingsview_moc.cpp" line="410"/>
<source>Disabled</source> <source>Disabled</source>
<translation>Отключен</translation> <translation>Отключен</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.cpp" line="408"/> <location filename="../settingsView/csettingsview_moc.cpp" line="411"/>
<source>Enable</source> <source>Enable</source>
<translation>Включить</translation> <translation>Включить</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.cpp" line="413"/> <location filename="../settingsView/csettingsview_moc.cpp" line="416"/>
<source>Not Installed</source> <source>Not Installed</source>
<translation>Не установлен</translation> <translation>Не установлен</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.cpp" line="414"/> <location filename="../settingsView/csettingsview_moc.cpp" line="417"/>
<source>Install</source> <source>Install</source>
<translation>Установить</translation> <translation>Установить</translation>
</message> </message>

View File

@ -406,165 +406,170 @@
<context> <context>
<name>CSettingsView</name> <name>CSettingsView</name>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="244"/> <location filename="../settingsView/csettingsview_moc.ui" line="302"/>
<location filename="../settingsView/csettingsview_moc.ui" line="414"/> <location filename="../settingsView/csettingsview_moc.ui" line="370"/>
<location filename="../settingsView/csettingsview_moc.ui" line="599"/> <location filename="../settingsView/csettingsview_moc.ui" line="408"/>
<source>Off</source> <source>Off</source>
<translation>Desactivado</translation> <translation>Desactivado</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="78"/> <location filename="../settingsView/csettingsview_moc.ui" line="79"/>
<location filename="../settingsView/csettingsview_moc.ui" line="123"/> <location filename="../settingsView/csettingsview_moc.ui" line="579"/>
<source>Artificial Intelligence</source> <source>Artificial Intelligence</source>
<translation>Inteligencia Artificial</translation> <translation>Inteligencia Artificial</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="83"/> <location filename="../settingsView/csettingsview_moc.ui" line="84"/>
<location filename="../settingsView/csettingsview_moc.ui" line="233"/> <location filename="../settingsView/csettingsview_moc.ui" line="434"/>
<source>Mod Repositories</source> <source>Mod Repositories</source>
<translation>Repositorios de Mods</translation> <translation>Repositorios de Mods</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="305"/> <location filename="../settingsView/csettingsview_moc.ui" line="498"/>
<source>Interface Scaling</source> <source>Interface Scaling</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="278"/> <location filename="../settingsView/csettingsview_moc.ui" line="491"/>
<source>Neutral AI in battles</source> <source>Neutral AI in battles</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="465"/> <location filename="../settingsView/csettingsview_moc.ui" line="421"/>
<source>Enemy AI in battles</source> <source>Enemy AI in battles</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="271"/> <location filename="../settingsView/csettingsview_moc.ui" line="441"/>
<source>Additional repository</source> <source>Additional repository</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="201"/> <location filename="../settingsView/csettingsview_moc.ui" line="566"/>
<source>Adventure Map Allies</source> <source>Adventure Map Allies</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="383"/> <location filename="../settingsView/csettingsview_moc.ui" line="281"/>
<source>Adventure Map Enemies</source> <source>Adventure Map Enemies</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="176"/> <location filename="../settingsView/csettingsview_moc.ui" line="623"/>
<source>Windowed</source> <source>Windowed</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="181"/> <location filename="../settingsView/csettingsview_moc.ui" line="628"/>
<source>Borderless fullscreen</source> <source>Borderless fullscreen</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="186"/> <location filename="../settingsView/csettingsview_moc.ui" line="633"/>
<source>Exclusive fullscreen</source> <source>Exclusive fullscreen</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="319"/> <location filename="../settingsView/csettingsview_moc.ui" line="170"/>
<source>Autosave limit (0 = off)</source> <source>Autosave limit (0 = off)</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="329"/> <location filename="../settingsView/csettingsview_moc.ui" line="525"/>
<source>Friendly AI in battles</source> <source>Friendly AI in battles</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="588"/> <location filename="../settingsView/csettingsview_moc.ui" line="271"/>
<source>Framerate Limit</source> <source>Framerate Limit</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="612"/> <location filename="../settingsView/csettingsview_moc.ui" line="328"/>
<source>Autosave prefix</source> <source>Autosave prefix</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="629"/> <location filename="../settingsView/csettingsview_moc.ui" line="603"/>
<source>empty = map name prefix</source> <source>empty = map name prefix</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="508"/> <location filename="../settingsView/csettingsview_moc.ui" line="383"/>
<source>Refresh now</source> <source>Refresh now</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="264"/> <location filename="../settingsView/csettingsview_moc.ui" line="288"/>
<source>Default repository</source> <source>Default repository</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="249"/> <location filename="../settingsView/csettingsview_moc.ui" line="307"/>
<location filename="../settingsView/csettingsview_moc.ui" line="419"/> <location filename="../settingsView/csettingsview_moc.ui" line="375"/>
<location filename="../settingsView/csettingsview_moc.ui" line="604"/> <location filename="../settingsView/csettingsview_moc.ui" line="413"/>
<source>On</source> <source>On</source>
<translation>Encendido</translation> <translation>Encendido</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="451"/> <location filename="../settingsView/csettingsview_moc.ui" line="359"/>
<source>Cursor</source> <source>Cursor</source>
<translation>Cursor</translation> <translation>Cursor</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="535"/> <location filename="../settingsView/csettingsview_moc.ui" line="397"/>
<source>Heroes III Translation</source> <source>Heroes III Translation</source>
<translation>Traducción de Heroes III</translation> <translation>Traducción de Heroes III</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="444"/> <location filename="../settingsView/csettingsview_moc.ui" line="641"/>
<source>Reserved screen area</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="177"/>
<source>Fullscreen</source> <source>Fullscreen</source>
<translation>Pantalla completa</translation> <translation>Pantalla completa</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="68"/> <location filename="../settingsView/csettingsview_moc.ui" line="69"/>
<location filename="../settingsView/csettingsview_moc.ui" line="484"/> <location filename="../settingsView/csettingsview_moc.ui" line="197"/>
<source>General</source> <source>General</source>
<translation>General</translation> <translation>General</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="542"/> <location filename="../settingsView/csettingsview_moc.ui" line="532"/>
<source>VCMI Language</source> <source>VCMI Language</source>
<translation>Idioma de VCMI</translation> <translation>Idioma de VCMI</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="194"/> <location filename="../settingsView/csettingsview_moc.ui" line="335"/>
<source>Resolution</source> <source>Resolution</source>
<translation>Resolución</translation> <translation>Resolución</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="549"/> <location filename="../settingsView/csettingsview_moc.ui" line="204"/>
<source>Autosave</source> <source>Autosave</source>
<translation>Autoguardado</translation> <translation>Autoguardado</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="376"/> <location filename="../settingsView/csettingsview_moc.ui" line="146"/>
<source>Display index</source> <source>Display index</source>
<translation>Mostrar índice</translation> <translation>Mostrar índice</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="528"/> <location filename="../settingsView/csettingsview_moc.ui" line="184"/>
<source>Network port</source> <source>Network port</source>
<translation>Puerto de red</translation> <translation>Puerto de red</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="73"/> <location filename="../settingsView/csettingsview_moc.ui" line="74"/>
<location filename="../settingsView/csettingsview_moc.ui" line="561"/> <location filename="../settingsView/csettingsview_moc.ui" line="321"/>
<source>Video</source> <source>Video</source>
<translation>Vídeo</translation> <translation>Vídeo</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="163"/> <location filename="../settingsView/csettingsview_moc.ui" line="610"/>
<source>Select display mode for game <source>Select display mode for game
Windowed - game will run inside a window that covers part of your screen Windowed - game will run inside a window that covers part of your screen
@ -575,52 +580,52 @@ Fullscreen Exclusive Mode - game will cover entirety of your screen and will use
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="431"/> <location filename="../settingsView/csettingsview_moc.ui" line="212"/>
<source>Hardware</source> <source>Hardware</source>
<translation>Hardware</translation> <translation>Hardware</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="436"/> <location filename="../settingsView/csettingsview_moc.ui" line="217"/>
<source>Software</source> <source>Software</source>
<translation>Software</translation> <translation>Software</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="403"/> <location filename="../settingsView/csettingsview_moc.ui" line="225"/>
<source>Show intro</source> <source>Show intro</source>
<translation>Mostrar introducción</translation> <translation>Mostrar introducción</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="472"/> <location filename="../settingsView/csettingsview_moc.ui" line="542"/>
<source>Check on startup</source> <source>Check on startup</source>
<translation>Comprovar al inicio</translation> <translation>Comprovar al inicio</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="312"/> <location filename="../settingsView/csettingsview_moc.ui" line="481"/>
<source>Heroes III Data Language</source> <source>Heroes III Data Language</source>
<translation>Idioma de los datos de Heroes III.</translation> <translation>Idioma de los datos de Heroes III.</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.cpp" line="402"/> <location filename="../settingsView/csettingsview_moc.cpp" line="405"/>
<source>Active</source> <source>Active</source>
<translation>Activado</translation> <translation>Activado</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.cpp" line="407"/> <location filename="../settingsView/csettingsview_moc.cpp" line="410"/>
<source>Disabled</source> <source>Disabled</source>
<translation>Desactivado</translation> <translation>Desactivado</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.cpp" line="408"/> <location filename="../settingsView/csettingsview_moc.cpp" line="411"/>
<source>Enable</source> <source>Enable</source>
<translation>Activar</translation> <translation>Activar</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.cpp" line="413"/> <location filename="../settingsView/csettingsview_moc.cpp" line="416"/>
<source>Not Installed</source> <source>Not Installed</source>
<translation>No Instalado</translation> <translation>No Instalado</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.cpp" line="414"/> <location filename="../settingsView/csettingsview_moc.cpp" line="417"/>
<source>Install</source> <source>Install</source>
<translation>Instalar</translation> <translation>Instalar</translation>
</message> </message>

View File

@ -406,123 +406,123 @@
<context> <context>
<name>CSettingsView</name> <name>CSettingsView</name>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="244"/> <location filename="../settingsView/csettingsview_moc.ui" line="302"/>
<location filename="../settingsView/csettingsview_moc.ui" line="414"/> <location filename="../settingsView/csettingsview_moc.ui" line="370"/>
<location filename="../settingsView/csettingsview_moc.ui" line="599"/> <location filename="../settingsView/csettingsview_moc.ui" line="408"/>
<source>Off</source> <source>Off</source>
<translation>Вимкнено</translation> <translation>Вимкнено</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="78"/> <location filename="../settingsView/csettingsview_moc.ui" line="79"/>
<location filename="../settingsView/csettingsview_moc.ui" line="123"/> <location filename="../settingsView/csettingsview_moc.ui" line="579"/>
<source>Artificial Intelligence</source> <source>Artificial Intelligence</source>
<translation>Штучний інтелект</translation> <translation>Штучний інтелект</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="83"/> <location filename="../settingsView/csettingsview_moc.ui" line="84"/>
<location filename="../settingsView/csettingsview_moc.ui" line="233"/> <location filename="../settingsView/csettingsview_moc.ui" line="434"/>
<source>Mod Repositories</source> <source>Mod Repositories</source>
<translation>Репозиторії модифікацій</translation> <translation>Репозиторії модифікацій</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="305"/> <location filename="../settingsView/csettingsview_moc.ui" line="498"/>
<source>Interface Scaling</source> <source>Interface Scaling</source>
<translation>Масштабування інтерфейсу</translation> <translation>Масштабування інтерфейсу</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="278"/> <location filename="../settingsView/csettingsview_moc.ui" line="491"/>
<source>Neutral AI in battles</source> <source>Neutral AI in battles</source>
<translation>Нейтральний ШІ в боях</translation> <translation>Нейтральний ШІ в боях</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="465"/> <location filename="../settingsView/csettingsview_moc.ui" line="421"/>
<source>Enemy AI in battles</source> <source>Enemy AI in battles</source>
<translation>Ворожий ШІ в боях</translation> <translation>Ворожий ШІ в боях</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="271"/> <location filename="../settingsView/csettingsview_moc.ui" line="441"/>
<source>Additional repository</source> <source>Additional repository</source>
<translation>Додатковий репозиторій</translation> <translation>Додатковий репозиторій</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="201"/> <location filename="../settingsView/csettingsview_moc.ui" line="566"/>
<source>Adventure Map Allies</source> <source>Adventure Map Allies</source>
<translation>Союзники на мапі пригод</translation> <translation>Союзники на мапі пригод</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="383"/> <location filename="../settingsView/csettingsview_moc.ui" line="281"/>
<source>Adventure Map Enemies</source> <source>Adventure Map Enemies</source>
<translation>Вороги на мапі пригод</translation> <translation>Вороги на мапі пригод</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="176"/> <location filename="../settingsView/csettingsview_moc.ui" line="623"/>
<source>Windowed</source> <source>Windowed</source>
<translation>У вікні</translation> <translation>У вікні</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="181"/> <location filename="../settingsView/csettingsview_moc.ui" line="628"/>
<source>Borderless fullscreen</source> <source>Borderless fullscreen</source>
<translation>Повноекранне вікно</translation> <translation>Повноекранне вікно</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="186"/> <location filename="../settingsView/csettingsview_moc.ui" line="633"/>
<source>Exclusive fullscreen</source> <source>Exclusive fullscreen</source>
<translation>Повноекранний (ексклюзивно)</translation> <translation>Повноекранний (ексклюзивно)</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="319"/> <location filename="../settingsView/csettingsview_moc.ui" line="170"/>
<source>Autosave limit (0 = off)</source> <source>Autosave limit (0 = off)</source>
<translation>Кількість автозбережень</translation> <translation>Кількість автозбережень</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="329"/> <location filename="../settingsView/csettingsview_moc.ui" line="525"/>
<source>Friendly AI in battles</source> <source>Friendly AI in battles</source>
<translation>Дружній ШІ в боях</translation> <translation>Дружній ШІ в боях</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="588"/> <location filename="../settingsView/csettingsview_moc.ui" line="271"/>
<source>Framerate Limit</source> <source>Framerate Limit</source>
<translation>Обмеження частоти кадрів</translation> <translation>Обмеження частоти кадрів</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="612"/> <location filename="../settingsView/csettingsview_moc.ui" line="328"/>
<source>Autosave prefix</source> <source>Autosave prefix</source>
<translation>Префікс назв автозбережень</translation> <translation>Префікс назв автозбережень</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="629"/> <location filename="../settingsView/csettingsview_moc.ui" line="603"/>
<source>empty = map name prefix</source> <source>empty = map name prefix</source>
<translation>(використовувати назву карти)</translation> <translation>(використовувати назву карти)</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="508"/> <location filename="../settingsView/csettingsview_moc.ui" line="383"/>
<source>Refresh now</source> <source>Refresh now</source>
<translation>Оновити зараз</translation> <translation>Оновити зараз</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="264"/> <location filename="../settingsView/csettingsview_moc.ui" line="288"/>
<source>Default repository</source> <source>Default repository</source>
<translation>Стандартний репозиторій</translation> <translation>Стандартний репозиторій</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="249"/> <location filename="../settingsView/csettingsview_moc.ui" line="307"/>
<location filename="../settingsView/csettingsview_moc.ui" line="419"/> <location filename="../settingsView/csettingsview_moc.ui" line="375"/>
<location filename="../settingsView/csettingsview_moc.ui" line="604"/> <location filename="../settingsView/csettingsview_moc.ui" line="413"/>
<source>On</source> <source>On</source>
<translation>Увімкнено</translation> <translation>Увімкнено</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="451"/> <location filename="../settingsView/csettingsview_moc.ui" line="359"/>
<source>Cursor</source> <source>Cursor</source>
<translation>Курсор</translation> <translation>Курсор</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="312"/> <location filename="../settingsView/csettingsview_moc.ui" line="481"/>
<source>Heroes III Data Language</source> <source>Heroes III Data Language</source>
<translation>Мова Heroes III</translation> <translation>Мова Heroes III</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="163"/> <location filename="../settingsView/csettingsview_moc.ui" line="610"/>
<source>Select display mode for game <source>Select display mode for game
Windowed - game will run inside a window that covers part of your screen Windowed - game will run inside a window that covers part of your screen
@ -539,94 +539,99 @@ Fullscreen Exclusive Mode - game will cover entirety of your screen and will use
Повноекранний ексклюзивний режим - гра займатиме весь екран і використовуватиме вибрану роздільну здатність.</translation> Повноекранний ексклюзивний режим - гра займатиме весь екран і використовуватиме вибрану роздільну здатність.</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="431"/> <location filename="../settingsView/csettingsview_moc.ui" line="641"/>
<source>Reserved screen area</source>
<translation>Зарезервована зона екрану</translation>
</message>
<message>
<location filename="../settingsView/csettingsview_moc.ui" line="212"/>
<source>Hardware</source> <source>Hardware</source>
<translation>Апаратний</translation> <translation>Апаратний</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="436"/> <location filename="../settingsView/csettingsview_moc.ui" line="217"/>
<source>Software</source> <source>Software</source>
<translation>Програмний</translation> <translation>Програмний</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="535"/> <location filename="../settingsView/csettingsview_moc.ui" line="397"/>
<source>Heroes III Translation</source> <source>Heroes III Translation</source>
<translation>Переклад Heroes III</translation> <translation>Переклад Heroes III</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="472"/> <location filename="../settingsView/csettingsview_moc.ui" line="542"/>
<source>Check on startup</source> <source>Check on startup</source>
<translation>Перевіряти на старті</translation> <translation>Перевіряти на старті</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="444"/> <location filename="../settingsView/csettingsview_moc.ui" line="177"/>
<source>Fullscreen</source> <source>Fullscreen</source>
<translation>Повноекранний режим</translation> <translation>Повноекранний режим</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="68"/> <location filename="../settingsView/csettingsview_moc.ui" line="69"/>
<location filename="../settingsView/csettingsview_moc.ui" line="484"/> <location filename="../settingsView/csettingsview_moc.ui" line="197"/>
<source>General</source> <source>General</source>
<translation>Загальні налаштування</translation> <translation>Загальні налаштування</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="542"/> <location filename="../settingsView/csettingsview_moc.ui" line="532"/>
<source>VCMI Language</source> <source>VCMI Language</source>
<translation>Мова VCMI</translation> <translation>Мова VCMI</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="194"/> <location filename="../settingsView/csettingsview_moc.ui" line="335"/>
<source>Resolution</source> <source>Resolution</source>
<translation>Роздільна здатність</translation> <translation>Роздільна здатність</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="549"/> <location filename="../settingsView/csettingsview_moc.ui" line="204"/>
<source>Autosave</source> <source>Autosave</source>
<translation>Автозбереження</translation> <translation>Автозбереження</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="376"/> <location filename="../settingsView/csettingsview_moc.ui" line="146"/>
<source>Display index</source> <source>Display index</source>
<translation>Дісплей</translation> <translation>Дісплей</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="528"/> <location filename="../settingsView/csettingsview_moc.ui" line="184"/>
<source>Network port</source> <source>Network port</source>
<translation>Мережевий порт</translation> <translation>Мережевий порт</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="73"/> <location filename="../settingsView/csettingsview_moc.ui" line="74"/>
<location filename="../settingsView/csettingsview_moc.ui" line="561"/> <location filename="../settingsView/csettingsview_moc.ui" line="321"/>
<source>Video</source> <source>Video</source>
<translation>Графіка</translation> <translation>Графіка</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.ui" line="403"/> <location filename="../settingsView/csettingsview_moc.ui" line="225"/>
<source>Show intro</source> <source>Show intro</source>
<translation>Вступні відео</translation> <translation>Вступні відео</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.cpp" line="402"/> <location filename="../settingsView/csettingsview_moc.cpp" line="405"/>
<source>Active</source> <source>Active</source>
<translation>Активні</translation> <translation>Активні</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.cpp" line="407"/> <location filename="../settingsView/csettingsview_moc.cpp" line="410"/>
<source>Disabled</source> <source>Disabled</source>
<translation>Деактивований</translation> <translation>Деактивований</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.cpp" line="408"/> <location filename="../settingsView/csettingsview_moc.cpp" line="411"/>
<source>Enable</source> <source>Enable</source>
<translation>Активувати</translation> <translation>Активувати</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.cpp" line="413"/> <location filename="../settingsView/csettingsview_moc.cpp" line="416"/>
<source>Not Installed</source> <source>Not Installed</source>
<translation>Не встановлено</translation> <translation>Не встановлено</translation>
</message> </message>
<message> <message>
<location filename="../settingsView/csettingsview_moc.cpp" line="414"/> <location filename="../settingsView/csettingsview_moc.cpp" line="417"/>
<source>Install</source> <source>Install</source>
<translation>Встановити</translation> <translation>Встановити</translation>
</message> </message>

View File

@ -445,7 +445,7 @@ void CCreatureSet::setStackExp(const SlotID & slot, TExpType exp)
stacks[slot]->experience = exp; stacks[slot]->experience = exp;
} }
void CCreatureSet::clear() void CCreatureSet::clearSlots()
{ {
while(!stacks.empty()) while(!stacks.empty())
{ {
@ -533,12 +533,12 @@ void CCreatureSet::changeStackCount(const SlotID & slot, TQuantity toAdd)
CCreatureSet::~CCreatureSet() CCreatureSet::~CCreatureSet()
{ {
clear(); clearSlots();
} }
void CCreatureSet::setToArmy(CSimpleArmy &src) void CCreatureSet::setToArmy(CSimpleArmy &src)
{ {
clear(); clearSlots();
while(src) while(src)
{ {
auto i = src.army.begin(); auto i = src.army.begin();
@ -1050,7 +1050,7 @@ void CStackBasicDescriptor::serializeJson(JsonSerializeFormat & handler)
} }
} }
void CSimpleArmy::clear() void CSimpleArmy::clearSlots()
{ {
army.clear(); army.clear();
} }

View File

@ -181,7 +181,7 @@ using TCreatureQueue = std::priority_queue<TPairCreatureSlot, std::vector<TPairC
class IArmyDescriptor class IArmyDescriptor
{ {
public: public:
virtual void clear() = 0; virtual void clearSlots() = 0;
virtual bool setCreature(SlotID slot, CreatureID cre, TQuantity count) = 0; virtual bool setCreature(SlotID slot, CreatureID cre, TQuantity count) = 0;
}; };
@ -190,7 +190,7 @@ class DLL_LINKAGE CSimpleArmy : public IArmyDescriptor
{ {
public: public:
TSimpleSlots army; TSimpleSlots army;
void clear() override; void clearSlots() override;
bool setCreature(SlotID slot, CreatureID cre, TQuantity count) override; bool setCreature(SlotID slot, CreatureID cre, TQuantity count) override;
operator bool() const; operator bool() const;
@ -226,7 +226,7 @@ public:
void addToSlot(const SlotID & slot, const CreatureID & cre, TQuantity count, bool allowMerging = true); //Adds stack to slot. Slot must be empty or with same type creature void addToSlot(const SlotID & slot, const CreatureID & cre, TQuantity count, bool allowMerging = true); //Adds stack to slot. Slot must be empty or with same type creature
void addToSlot(const SlotID & slot, CStackInstance * stack, bool allowMerging = true); //Adds stack to slot. Slot must be empty or with same type creature void addToSlot(const SlotID & slot, CStackInstance * stack, bool allowMerging = true); //Adds stack to slot. Slot must be empty or with same type creature
void clear() override; void clearSlots() override;
void setFormation(bool tight); void setFormation(bool tight);
CArmedInstance *castToArmyObj(); CArmedInstance *castToArmyObj();

View File

@ -313,19 +313,7 @@ void CGeneralTextHandler::registerStringOverride(const std::string & modContext,
assert(!modContext.empty()); assert(!modContext.empty());
assert(!language.empty()); assert(!language.empty());
std::string baseModLanguage = getModLanguage(modContext); // NOTE: implicitly creates entry, intended - strings added by maps, campaigns, vcmi and potentially - UI mods are not registered anywhere at the moment
if (baseModLanguage != language)
{
// this is translation - only add text to existing strings, do not register new ones
if (stringsLocalizations.count(UID.get()) == 0)
{
logMod->warn("Unknown string '%s' in mod '%s' for language '%s'. Ignoring", UID.get(), modContext, language);
return;
}
}
// NOTE: implicitly creates entry, intended - strings added by vcmi (and potential UI mods) are not registered anywhere at the moment
auto & entry = stringsLocalizations[UID.get()]; auto & entry = stringsLocalizations[UID.get()];
entry.overrideLanguage = language; entry.overrideLanguage = language;
@ -349,6 +337,9 @@ bool CGeneralTextHandler::validateTranslation(const std::string & language, cons
if (string.second.baseLanguage == language && !string.second.baseValue.empty()) if (string.second.baseLanguage == language && !string.second.baseValue.empty())
continue; // Base string already uses our language continue; // Base string already uses our language
if (string.second.baseLanguage.empty())
continue; // String added in localization, not present in base language (e.g. maps/campaigns)
if (config.Struct().count(string.first) > 0) if (config.Struct().count(string.first) > 0)
continue; continue;

View File

@ -335,7 +335,7 @@ struct DLL_LINKAGE SetAvailableHero : public CPackForClient
{ {
SetAvailableHero() SetAvailableHero()
{ {
army.clear(); army.clearSlots();
} }
void applyGs(CGameState * gs); void applyGs(CGameState * gs);

View File

@ -38,6 +38,8 @@
VCMI_LIB_NAMESPACE_BEGIN VCMI_LIB_NAMESPACE_BEGIN
#define THROW_IF_NO_BATTLE if (!gs->curB) throw std::runtime_error("Trying to apply pack when no battle!");
void CPack::visit(ICPackVisitor & visitor) void CPack::visit(ICPackVisitor & visitor)
{ {
visitBasic(visitor); visitBasic(visitor);
@ -2127,16 +2129,19 @@ void BattleStart::applyGs(CGameState * gs) const
void BattleNextRound::applyGs(CGameState * gs) const void BattleNextRound::applyGs(CGameState * gs) const
{ {
THROW_IF_NO_BATTLE
gs->curB->nextRound(round); gs->curB->nextRound(round);
} }
void BattleSetActiveStack::applyGs(CGameState * gs) const void BattleSetActiveStack::applyGs(CGameState * gs) const
{ {
THROW_IF_NO_BATTLE
gs->curB->nextTurn(stack); gs->curB->nextTurn(stack);
} }
void BattleTriggerEffect::applyGs(CGameState * gs) const void BattleTriggerEffect::applyGs(CGameState * gs) const
{ {
THROW_IF_NO_BATTLE
CStack * st = gs->curB->getStack(stackID); CStack * st = gs->curB->getStack(stackID);
assert(st); assert(st);
switch(static_cast<BonusType>(effect)) switch(static_cast<BonusType>(effect))
@ -2232,6 +2237,7 @@ void BattleLogMessage::applyBattle(IBattleState * battleState)
void BattleStackMoved::applyGs(CGameState *gs) void BattleStackMoved::applyGs(CGameState *gs)
{ {
THROW_IF_NO_BATTLE
applyBattle(gs->curB); applyBattle(gs->curB);
} }
@ -2242,6 +2248,7 @@ void BattleStackMoved::applyBattle(IBattleState * battleState)
void BattleStackAttacked::applyGs(CGameState * gs) void BattleStackAttacked::applyGs(CGameState * gs)
{ {
THROW_IF_NO_BATTLE
applyBattle(gs->curB); applyBattle(gs->curB);
} }
@ -2252,6 +2259,7 @@ void BattleStackAttacked::applyBattle(IBattleState * battleState)
void BattleAttack::applyGs(CGameState * gs) void BattleAttack::applyGs(CGameState * gs)
{ {
THROW_IF_NO_BATTLE
CStack * attacker = gs->curB->getStack(stackAttacking); CStack * attacker = gs->curB->getStack(stackAttacking);
assert(attacker); assert(attacker);
@ -2265,6 +2273,8 @@ void BattleAttack::applyGs(CGameState * gs)
void StartAction::applyGs(CGameState *gs) void StartAction::applyGs(CGameState *gs)
{ {
THROW_IF_NO_BATTLE
CStack *st = gs->curB->getStack(ba.stackNumber); CStack *st = gs->curB->getStack(ba.stackNumber);
if(ba.actionType == EActionType::END_TACTIC_PHASE) if(ba.actionType == EActionType::END_TACTIC_PHASE)
@ -2313,7 +2323,7 @@ void StartAction::applyGs(CGameState *gs)
void BattleSpellCast::applyGs(CGameState * gs) const void BattleSpellCast::applyGs(CGameState * gs) const
{ {
assert(gs->curB); THROW_IF_NO_BATTLE
if(castByHero) if(castByHero)
{ {
@ -2326,6 +2336,7 @@ void BattleSpellCast::applyGs(CGameState * gs) const
void SetStackEffect::applyGs(CGameState *gs) void SetStackEffect::applyGs(CGameState *gs)
{ {
THROW_IF_NO_BATTLE
applyBattle(gs->curB); applyBattle(gs->curB);
} }
@ -2344,6 +2355,7 @@ void SetStackEffect::applyBattle(IBattleState * battleState)
void StacksInjured::applyGs(CGameState *gs) void StacksInjured::applyGs(CGameState *gs)
{ {
THROW_IF_NO_BATTLE
applyBattle(gs->curB); applyBattle(gs->curB);
} }
@ -2355,6 +2367,7 @@ void StacksInjured::applyBattle(IBattleState * battleState)
void BattleUnitsChanged::applyGs(CGameState *gs) void BattleUnitsChanged::applyGs(CGameState *gs)
{ {
THROW_IF_NO_BATTLE
applyBattle(gs->curB); applyBattle(gs->curB);
} }
@ -2385,8 +2398,8 @@ void BattleUnitsChanged::applyBattle(IBattleState * battleState)
void BattleObstaclesChanged::applyGs(CGameState * gs) void BattleObstaclesChanged::applyGs(CGameState * gs)
{ {
if(gs->curB) THROW_IF_NO_BATTLE;
applyBattle(gs->curB); applyBattle(gs->curB);
} }
void BattleObstaclesChanged::applyBattle(IBattleState * battleState) void BattleObstaclesChanged::applyBattle(IBattleState * battleState)
@ -2417,8 +2430,8 @@ CatapultAttack::~CatapultAttack() = default;
void CatapultAttack::applyGs(CGameState * gs) void CatapultAttack::applyGs(CGameState * gs)
{ {
if(gs->curB) THROW_IF_NO_BATTLE
applyBattle(gs->curB); applyBattle(gs->curB);
} }
void CatapultAttack::visitTyped(ICPackVisitor & visitor) void CatapultAttack::visitTyped(ICPackVisitor & visitor)
@ -2444,6 +2457,7 @@ void CatapultAttack::applyBattle(IBattleState * battleState)
void BattleSetStackProperty::applyGs(CGameState * gs) const void BattleSetStackProperty::applyGs(CGameState * gs) const
{ {
THROW_IF_NO_BATTLE
CStack * stack = gs->curB->getStack(stackID); CStack * stack = gs->curB->getStack(stackID);
switch(which) switch(which)
{ {

View File

@ -1732,6 +1732,10 @@ SpellID CBattleInfoCallback::getRandomCastedSpell(CRandomGenerator & rand,const
TConstBonusListPtr bl = caster->getBonuses(Selector::type()(BonusType::SPELLCASTER)); TConstBonusListPtr bl = caster->getBonuses(Selector::type()(BonusType::SPELLCASTER));
if (!bl->size()) if (!bl->size())
return SpellID::NONE; return SpellID::NONE;
if(bl->size() == 1)
return SpellID(bl->front()->subtype);
int totalWeight = 0; int totalWeight = 0;
for(const auto & b : *bl) for(const auto & b : *bl)
{ {

View File

@ -58,7 +58,7 @@ std::string CBank::getHoverText(PlayerColor player) const
void CBank::setConfig(const BankConfig & config) void CBank::setConfig(const BankConfig & config)
{ {
bc = std::make_unique<BankConfig>(config); bc = std::make_unique<BankConfig>(config);
clear(); // remove all stacks, if any clearSlots(); // remove all stacks, if any
for(const auto & stack : config.guards) for(const auto & stack : config.guards)
setCreature (SlotID(stacksCount()), stack.type->getId(), stack.count); setCreature (SlotID(stacksCount()), stack.type->getId(), stack.count);

View File

@ -356,6 +356,9 @@ void CTownRewardableBuilding::heroLevelUpDone(const CGHeroInstance *hero) const
void CTownRewardableBuilding::blockingDialogAnswered(const CGHeroInstance *hero, ui32 answer) const void CTownRewardableBuilding::blockingDialogAnswered(const CGHeroInstance *hero, ui32 answer) const
{ {
if(answer == 0)
return; // player refused
if(visitors.find(hero->id) != visitors.end()) if(visitors.find(hero->id) != visitors.end())
return; // query not for this building return; // query not for this building

View File

@ -1736,7 +1736,7 @@ CGObjectInstance * CMapLoaderH3M::readHero(const int3 & mapPosition, const Objec
{ {
if(!object->spells.empty()) if(!object->spells.empty())
{ {
object->clear(); object->spells.clear();
logGlobal->debug("Hero %s subID=%d has spells set twice (in map properties and on adventure map instance). Using the latter set...", object->getNameTextID(), object->subID); logGlobal->debug("Hero %s subID=%d has spells set twice (in map properties and on adventure map instance). Using the latter set...", object->getNameTextID(), object->subID);
} }

View File

@ -376,6 +376,12 @@ void Area::translate(const int3 & shift)
//toAbsolute(dTiles, shift); //toAbsolute(dTiles, shift);
} }
void Area::erase_if(std::function<bool(const int3&)> predicate)
{
invalidate();
vstd::erase_if(dTiles, predicate);
}
Area operator- (const Area & l, const int3 & r) Area operator- (const Area & l, const int3 & r)
{ {
Area result(l); Area result(l);

View File

@ -64,6 +64,7 @@ namespace rmg
void intersect(const Area & area); void intersect(const Area & area);
void subtract(const Area & area); void subtract(const Area & area);
void translate(const int3 & shift); void translate(const int3 & shift);
void erase_if(std::function<bool(const int3&)> predicate);
friend Area operator+ (const Area & l, const int3 & r); //translation friend Area operator+ (const Area & l, const int3 & r); //translation
friend Area operator- (const Area & l, const int3 & r); //translation friend Area operator- (const Area & l, const int3 & r); //translation

View File

@ -344,16 +344,6 @@ void Object::Instance::finalize(RmgMap & map)
setTemplate(terrainType->getId()); setTemplate(terrainType->getId());
} }
} }
if (dObject.ID == Obj::MONSTER)
{
//Make up for extra offset in HotA creature templates
auto visitableOffset = dObject.getVisitableOffset();
auto fixedPos = getPosition(true) + visitableOffset;
vstd::abetween(fixedPos.x, visitableOffset.x, map.width() - 1);
vstd::abetween(fixedPos.y, visitableOffset.y, map.height() - 1);
int3 parentPos = getPosition(true) - getPosition(false);
setPosition(fixedPos - parentPos);
}
if (dObject.isVisitable() && !map.isOnMap(dObject.visitablePos())) if (dObject.isVisitable() && !map.isOnMap(dObject.visitablePos()))
throw rmgException(boost::to_string(boost::format("Visitable tile %s of object %d at %s is outside the map") % dObject.visitablePos().toString() % dObject.id % dObject.pos.toString())); throw rmgException(boost::to_string(boost::format("Visitable tile %s of object %d at %s is outside the map") % dObject.visitablePos().toString() % dObject.id % dObject.pos.toString()));

View File

@ -129,6 +129,19 @@ int3 ObjectManager::findPlaceForObject(const rmg::Area & searchArea, rmg::Object
{ {
float bestWeight = 0.f; float bestWeight = 0.f;
int3 result(-1, -1, -1); int3 result(-1, -1, -1);
//Blocked area might not cover object position if it has an offset from (0,0)
auto outsideTheMap = [this, &obj]() -> bool
{
for (const auto& oi : obj.instances())
{
if (!map.isOnMap(oi->getPosition(true)))
{
return true;
}
}
return false;
};
if(optimizer & OptimizeType::DISTANCE) if(optimizer & OptimizeType::DISTANCE)
{ {
@ -149,6 +162,9 @@ int3 ObjectManager::findPlaceForObject(const rmg::Area & searchArea, rmg::Object
if(!searchArea.contains(obj.getArea()) || !searchArea.overlap(obj.getAccessibleArea())) if(!searchArea.contains(obj.getArea()) || !searchArea.overlap(obj.getAccessibleArea()))
continue; continue;
if (outsideTheMap())
continue;
float weight = weightFunction(tile); float weight = weightFunction(tile);
if(weight > bestWeight) if(weight > bestWeight)
@ -168,9 +184,12 @@ int3 ObjectManager::findPlaceForObject(const rmg::Area & searchArea, rmg::Object
if (obj.getVisibleTop().y < 0) if (obj.getVisibleTop().y < 0)
continue; continue;
if(!searchArea.contains(obj.getArea()) || !searchArea.overlap(obj.getAccessibleArea())) if(!searchArea.contains(obj.getArea()) || !searchArea.overlap(obj.getAccessibleArea()))
continue; continue;
if (outsideTheMap())
continue;
float weight = weightFunction(tile); float weight = weightFunction(tile);
if(weight > bestWeight) if(weight > bestWeight)
@ -416,7 +435,7 @@ bool ObjectManager::createRequiredObjects()
//create object on specific positions //create object on specific positions
//TODO: implement guards //TODO: implement guards
for (const auto &objInfo : instantObjects) for (const auto &objInfo : instantObjects) //Unused ATM
{ {
rmg::Object rmgObject(*objInfo.obj); rmg::Object rmgObject(*objInfo.obj);
rmgObject.setPosition(objInfo.pos); rmgObject.setPosition(objInfo.pos);
@ -433,6 +452,28 @@ bool ObjectManager::createRequiredObjects()
void ObjectManager::placeObject(rmg::Object & object, bool guarded, bool updateDistance, bool createRoad/* = false*/) void ObjectManager::placeObject(rmg::Object & object, bool guarded, bool updateDistance, bool createRoad/* = false*/)
{ {
//object.finalize(map);
if (object.instances().size() == 1 && object.instances().front()->object().ID == Obj::MONSTER)
{
//Fix for HoTA offset - lonely guards
auto monster = object.instances().front();
if (!monster->object().appearance)
{
//Needed to determine visitable offset
monster->setAnyTemplate();
}
object.getPosition();
auto visitableOffset = monster->object().getVisitableOffset();
auto fixedPos = monster->getPosition(true) + visitableOffset;
//Do not place guard outside the map
vstd::abetween(fixedPos.x, visitableOffset.x, map.width() - 1);
vstd::abetween(fixedPos.y, visitableOffset.y, map.height() - 1);
int3 parentOffset = monster->getPosition(true) - monster->getPosition(false);
monster->setPosition(fixedPos - parentOffset);
}
object.finalize(map); object.finalize(map);
Zone::Lock lock(zone.areaMutex); Zone::Lock lock(zone.areaMutex);
@ -443,8 +484,8 @@ void ObjectManager::placeObject(rmg::Object & object, bool guarded, bool updateD
zone.freePaths().add(object.getVisitablePosition()); zone.freePaths().add(object.getVisitablePosition());
zone.areaUsed().unite(object.getArea()); zone.areaUsed().unite(object.getArea());
zone.areaUsed().erase(object.getVisitablePosition()); zone.areaUsed().erase(object.getVisitablePosition());
if(guarded) if(guarded) //We assume the monster won't be guarded
{ {
auto guardedArea = object.instances().back()->getAccessibleArea(); auto guardedArea = object.instances().back()->getAccessibleArea();
guardedArea.add(object.instances().back()->getVisitablePosition()); guardedArea.add(object.instances().back()->getVisitablePosition());
@ -501,6 +542,7 @@ void ObjectManager::placeObject(rmg::Object & object, bool guarded, bool updateD
{ {
case Obj::RANDOM_TREASURE_ART: case Obj::RANDOM_TREASURE_ART:
case Obj::RANDOM_MINOR_ART: //In OH3 quest artifacts have higher value than normal arts case Obj::RANDOM_MINOR_ART: //In OH3 quest artifacts have higher value than normal arts
case Obj::RANDOM_RESOURCE:
{ {
if (auto * qap = zone.getModificator<QuestArtifactPlacer>()) if (auto * qap = zone.getModificator<QuestArtifactPlacer>())
{ {
@ -629,8 +671,12 @@ bool ObjectManager::addGuard(rmg::Object & object, si32 strength, bool zoneGuard
}); });
auto & instance = object.addInstance(*guard); auto & instance = object.addInstance(*guard);
instance.setPosition(guardPos - object.getPosition());
instance.setAnyTemplate(); //terrain is irrelevant for monsters, but monsters need some template now instance.setAnyTemplate(); //terrain is irrelevant for monsters, but monsters need some template now
//Fix HoTA monsters with offset template
auto visitableOffset = instance.object().getVisitableOffset();
auto fixedPos = guardPos - object.getPosition() + visitableOffset;
instance.setPosition(fixedPos);
return true; return true;
} }

View File

@ -89,14 +89,15 @@ void QuestArtifactPlacer::placeQuestArtifacts(CRandomGenerator & rand)
artifactToReplace->getObjectName(), artifactToReplace->getObjectName(),
artifactToReplace->getPosition().toString(), artifactToReplace->getPosition().toString(),
VLC->artifacts()->getById(artifactToPlace)->getNameTranslated()); VLC->artifacts()->getById(artifactToPlace)->getNameTranslated());
artifactToReplace->ID = Obj::ARTIFACT;
artifactToReplace->subID = artifactToPlace;
//Update appearance. Terrain is irrelevant. //Update appearance. Terrain is irrelevant.
auto handler = VLC->objtypeh->getHandlerFor(Obj::ARTIFACT, artifactToPlace); auto handler = VLC->objtypeh->getHandlerFor(Obj::ARTIFACT, artifactToPlace);
auto newObj = handler->create();
auto templates = handler->getTemplates(); auto templates = handler->getTemplates();
artifactToReplace->appearance = templates.front(); //artifactToReplace->appearance = templates.front();
//FIXME: Instance name is still "randomArtifact" newObj->appearance = templates.front();
newObj->pos = artifactToReplace->pos;
mapProxy->insertObject(newObj);
for (auto z : map.getZones()) for (auto z : map.getZones())
{ {
@ -107,6 +108,7 @@ void QuestArtifactPlacer::placeQuestArtifacts(CRandomGenerator & rand)
localQap->dropReplacedArtifact(artifactToReplace); localQap->dropReplacedArtifact(artifactToReplace);
} }
} }
mapProxy->removeObject(artifactToReplace);
break; break;
} }
} }

View File

@ -18,9 +18,12 @@
#include "../threadpool/MapProxy.h" #include "../threadpool/MapProxy.h"
#include "../../CModHandler.h" #include "../../CModHandler.h"
#include "../../mapping/CMapEditManager.h" #include "../../mapping/CMapEditManager.h"
#include "../../TerrainHandler.h"
VCMI_LIB_NAMESPACE_BEGIN VCMI_LIB_NAMESPACE_BEGIN
class TerrainType;
void RoadPlacer::process() void RoadPlacer::process()
{ {
if(generator.getConfig().defaultRoadType.empty() && generator.getConfig().secondaryRoadType.empty()) if(generator.getConfig().defaultRoadType.empty() && generator.getConfig().secondaryRoadType.empty())
@ -114,6 +117,13 @@ void RoadPlacer::drawRoads(bool secondary)
//Clean space under roads even if they won't be eventually generated //Clean space under roads even if they won't be eventually generated
Zone::Lock lock(zone.areaMutex); Zone::Lock lock(zone.areaMutex);
//Do not draw roads on underground rock or water
roads.erase_if([this](const int3& pos) -> bool
{
const auto* terrain = map.getTile(pos).terType;;
return !terrain->isPassable() || !terrain->isLand();
});
zone.areaPossible().subtract(roads); zone.areaPossible().subtract(roads);
zone.freePaths().unite(roads); zone.freePaths().unite(roads);
} }

View File

@ -30,6 +30,12 @@ void MapProxy::insertObjects(std::set<CGObjectInstance*>& objects)
map.getEditManager()->insertObjects(objects); map.getEditManager()->insertObjects(objects);
} }
void MapProxy::removeObject(CGObjectInstance * obj)
{
Lock lock(mx);
map.getEditManager()->removeObject(obj);
}
void MapProxy::drawTerrain(CRandomGenerator & generator, std::vector<int3> & tiles, TerrainId terrain) void MapProxy::drawTerrain(CRandomGenerator & generator, std::vector<int3> & tiles, TerrainId terrain)
{ {
Lock lock(mx); Lock lock(mx);

View File

@ -26,6 +26,7 @@ public:
void insertObject(CGObjectInstance * obj); void insertObject(CGObjectInstance * obj);
void insertObjects(std::set<CGObjectInstance*>& objects); void insertObjects(std::set<CGObjectInstance*>& objects);
void removeObject(CGObjectInstance* obj);
void drawTerrain(CRandomGenerator & generator, std::vector<int3> & tiles, TerrainId terrain); void drawTerrain(CRandomGenerator & generator, std::vector<int3> & tiles, TerrainId terrain);
void drawRivers(CRandomGenerator & generator, std::vector<int3> & tiles, TerrainId terrain); void drawRivers(CRandomGenerator & generator, std::vector<int3> & tiles, TerrainId terrain);

View File

@ -590,7 +590,7 @@ std::vector<AimType> BattleSpellMechanics::getTargetTypes() const
return ret; return ret;
} }
std::vector<Destination> BattleSpellMechanics::getPossibleDestinations(size_t index, AimType aimType, const Target & current) const std::vector<Destination> BattleSpellMechanics::getPossibleDestinations(size_t index, AimType aimType, const Target & current, bool fast) const
{ {
//TODO: BattleSpellMechanics::getPossibleDestinations //TODO: BattleSpellMechanics::getPossibleDestinations
@ -602,19 +602,66 @@ std::vector<Destination> BattleSpellMechanics::getPossibleDestinations(size_t in
switch(aimType) switch(aimType)
{ {
case AimType::CREATURE: case AimType::CREATURE:
case AimType::LOCATION: {
for(int i = 0; i < GameConstants::BFIELD_SIZE; i++) auto stacks = battle()->battleGetAllStacks();
for(auto stack : stacks)
{ {
BattleHex dest(i); Target tmp = current;
if(dest.isAvailable()) tmp.emplace_back(stack->getPosition());
detail::ProblemImpl ignored;
if(canBeCastAt(tmp, ignored))
ret.emplace_back(stack->getPosition());
}
break;
}
case AimType::LOCATION:
if(fast)
{
auto stacks = battle()->battleGetAllStacks();
std::set<BattleHex> hexesToCheck;
for(auto stack : stacks)
{ {
Target tmp = current; hexesToCheck.insert(stack->getPosition());
tmp.emplace_back(dest);
detail::ProblemImpl ignored; for(auto adjacent : stack->getPosition().neighbouringTiles())
hexesToCheck.insert(adjacent);
}
if(canBeCastAt(tmp, ignored)) for(auto hex : hexesToCheck)
ret.emplace_back(dest); {
if(hex.isAvailable())
{
Target tmp = current;
tmp.emplace_back(hex);
detail::ProblemImpl ignored;
if(canBeCastAt(tmp, ignored))
ret.emplace_back(hex);
}
}
}
else
{
for(int i = 0; i < GameConstants::BFIELD_SIZE; i++)
{
BattleHex dest(i);
if(dest.isAvailable())
{
Target tmp = current;
tmp.emplace_back(dest);
detail::ProblemImpl ignored;
if(canBeCastAt(tmp, ignored))
ret.emplace_back(dest);
}
} }
} }
break; break;

View File

@ -50,7 +50,7 @@ public:
/// Returns vector of all possible destinations for specified aim type /// Returns vector of all possible destinations for specified aim type
/// index - ??? /// index - ???
/// current - ??? /// current - ???
std::vector<Destination> getPossibleDestinations(size_t index, AimType aimType, const Target & current) const override final; std::vector<Destination> getPossibleDestinations(size_t index, AimType aimType, const Target & current, bool fast) const override final;
/// Returns true if spell can be cast on unit /// Returns true if spell can be cast on unit
bool isReceptive(const battle::Unit * target) const override; bool isReceptive(const battle::Unit * target) const override;

View File

@ -326,7 +326,7 @@ bool BattleCast::castIfPossible(ServerCallback * server, Target target)
return false; return false;
} }
std::vector<Target> BattleCast::findPotentialTargets() const std::vector<Target> BattleCast::findPotentialTargets(bool fast) const
{ {
//TODO: for more than 2 destinations per target much more efficient algorithm is required //TODO: for more than 2 destinations per target much more efficient algorithm is required
@ -354,7 +354,7 @@ std::vector<Target> BattleCast::findPotentialTargets() const
if(previous.empty()) if(previous.empty())
{ {
Target empty; Target empty;
destinations = m->getPossibleDestinations(index, targetTypes.at(index), empty); destinations = m->getPossibleDestinations(index, targetTypes.at(index), empty, fast);
for(auto & destination : destinations) for(auto & destination : destinations)
{ {
@ -367,7 +367,7 @@ std::vector<Target> BattleCast::findPotentialTargets() const
{ {
for(const Target & current : previous) for(const Target & current : previous)
{ {
destinations = m->getPossibleDestinations(index, targetTypes.at(index), current); destinations = m->getPossibleDestinations(index, targetTypes.at(index), current, fast);
for(auto & destination : destinations) for(auto & destination : destinations)
{ {

View File

@ -139,7 +139,7 @@ public:
///cast with silent check for permitted cast ///cast with silent check for permitted cast
bool castIfPossible(ServerCallback * server, Target target); bool castIfPossible(ServerCallback * server, Target target);
std::vector<Target> findPotentialTargets() const; std::vector<Target> findPotentialTargets(bool fast = false) const;
private: private:
///spell school level ///spell school level
@ -199,7 +199,7 @@ public:
virtual std::vector<AimType> getTargetTypes() const = 0; virtual std::vector<AimType> getTargetTypes() const = 0;
virtual std::vector<Destination> getPossibleDestinations(size_t index, AimType aimType, const Target & current) const = 0; virtual std::vector<Destination> getPossibleDestinations(size_t index, AimType aimType, const Target & current, bool fast = false) const = 0;
virtual const Spell * getSpell() const = 0; virtual const Spell * getSpell() const = 0;

View File

@ -222,7 +222,7 @@ bool RewardsWidget::commitChanges()
pandora->resources = ResourceSet(); pandora->resources = ResourceSet();
pandora->artifacts.clear(); pandora->artifacts.clear();
pandora->spells.clear(); pandora->spells.clear();
pandora->creatures.clear(); pandora->creatures.clearSlots();
for(int row = 0; row < rewards; ++row) for(int row = 0; row < rewards; ++row)
{ {

View File

@ -2943,7 +2943,7 @@ bool CGameHandler::load(const std::string & filename)
try try
{ {
{ {
CLoadFile lf(*CResourceHandler::get("local")->getResourceName(ResourceID(stem.to_string(), EResType::SAVEGAME)), MINIMAL_SERIALIZATION_VERSION); CLoadFile lf(*CResourceHandler::get()->getResourceName(ResourceID(stem.to_string(), EResType::SAVEGAME)), MINIMAL_SERIALIZATION_VERSION);
loadCommonState(lf); loadCommonState(lf);
logGlobal->info("Loading server state"); logGlobal->info("Loading server state");
lf >> *this; lf >> *this;

View File

@ -277,6 +277,12 @@ void CVCMIServer::prepareToRestart()
* si = * gh->gs->initialOpts; * si = * gh->gs->initialOpts;
si->seedToBeUsed = si->seedPostInit = 0; si->seedToBeUsed = si->seedPostInit = 0;
state = EServerState::LOBBY; state = EServerState::LOBBY;
if (si->campState)
{
assert(si->campState->currentScenario().has_value());
campaignMap = si->campState->currentScenario().value_or(CampaignScenarioID(0));
campaignBonus = si->campState->getBonusID(campaignMap).value_or(-1);
}
// FIXME: dirry hack to make sure old CGameHandler::run is finished // FIXME: dirry hack to make sure old CGameHandler::run is finished
boost::this_thread::sleep(boost::posix_time::milliseconds(1000)); boost::this_thread::sleep(boost::posix_time::milliseconds(1000));
} }

View File

@ -112,7 +112,7 @@ void HeroPoolProcessor::onHeroEscaped(const PlayerColor & color, const CGHeroIns
sah.slotID = selectSlotForRole(color, sah.roleID); sah.slotID = selectSlotForRole(color, sah.roleID);
sah.player = color; sah.player = color;
sah.hid = hero->subID; sah.hid = hero->subID;
sah.army.clear(); sah.army.clearSlots();
sah.army.setCreature(SlotID(0), hero->type->initialArmy.at(0).creature, 1); sah.army.setCreature(SlotID(0), hero->type->initialArmy.at(0).creature, 1);
gameHandler->sendAndApply(&sah); gameHandler->sendAndApply(&sah);
@ -148,7 +148,7 @@ void HeroPoolProcessor::selectNewHeroForSlot(const PlayerColor & color, TavernHe
else else
{ {
sah.roleID = TavernSlotRole::SINGLE_UNIT; sah.roleID = TavernSlotRole::SINGLE_UNIT;
sah.army.clear(); sah.army.clearSlots();
sah.army.setCreature(SlotID(0), newHero->type->initialArmy[0].creature, 1); sah.army.setCreature(SlotID(0), newHero->type->initialArmy[0].creature, 1);
} }
} }
@ -244,7 +244,7 @@ bool HeroPoolProcessor::hireHero(const ObjectInstanceID & objectID, const HeroTy
hr.hid = recruitedHero->subID; hr.hid = recruitedHero->subID;
hr.player = player; hr.player = player;
hr.tile = recruitedHero->convertFromVisitablePos(targetPos ); hr.tile = recruitedHero->convertFromVisitablePos(targetPos );
if(gameHandler->getTile(hr.tile)->isWater() && !recruitedHero->boat) if(gameHandler->getTile(targetPos)->isWater() && !recruitedHero->boat)
{ {
//Create a new boat for hero //Create a new boat for hero
gameHandler->createObject(targetPos , Obj::BOAT, recruitedHero->getBoatType().getNum()); gameHandler->createObject(targetPos , Obj::BOAT, recruitedHero->getBoatType().getNum());

View File

@ -34,7 +34,7 @@ public:
MOCK_CONST_METHOD1(isReceptive, bool(const battle::Unit * )); MOCK_CONST_METHOD1(isReceptive, bool(const battle::Unit * ));
MOCK_CONST_METHOD0(getTargetTypes, std::vector<AimType>()); MOCK_CONST_METHOD0(getTargetTypes, std::vector<AimType>());
MOCK_CONST_METHOD3(getPossibleDestinations, std::vector<Destination>(size_t, AimType, const Target &)); MOCK_CONST_METHOD4(getPossibleDestinations, std::vector<Destination>(size_t, AimType, const Target &, bool));
MOCK_CONST_METHOD0(getSpell, const Spell *()); MOCK_CONST_METHOD0(getSpell, const Spell *());