mirror of
https://github.com/vcmi/vcmi.git
synced 2025-03-25 21:38:59 +02:00
quick combat vs ai
This commit is contained in:
parent
891d25a634
commit
7f58333ef9
@ -1131,15 +1131,6 @@ void AIGateway::battleEnd(const BattleID & battleID, const BattleResult * br, Qu
|
||||
logAi->debug("Player %d (%s): I %s the %s!", playerID, playerID.toString(), (won ? "won" : "lost"), battlename);
|
||||
battlename.clear();
|
||||
|
||||
if (queryID != QueryID::NONE)
|
||||
{
|
||||
status.addQuery(queryID, "Combat result dialog");
|
||||
const int confirmAction = 0;
|
||||
requestActionASAP([=]()
|
||||
{
|
||||
answerQuery(queryID, confirmAction);
|
||||
});
|
||||
}
|
||||
CAdventureAI::battleEnd(battleID, br, queryID);
|
||||
}
|
||||
|
||||
|
@ -1608,15 +1608,6 @@ void VCAI::battleEnd(const BattleID & battleID, const BattleResult * br, QueryID
|
||||
logAi->debug("Player %d (%s): I %s the %s!", playerID, playerID.toString(), (won ? "won" : "lost"), battlename);
|
||||
battlename.clear();
|
||||
|
||||
if (queryID != QueryID::NONE)
|
||||
{
|
||||
status.addQuery(queryID, "Combat result dialog");
|
||||
const int confirmAction = 0;
|
||||
requestActionASAP([=]()
|
||||
{
|
||||
answerQuery(queryID, confirmAction);
|
||||
});
|
||||
}
|
||||
CAdventureAI::battleEnd(battleID, br, queryID);
|
||||
}
|
||||
|
||||
|
@ -585,14 +585,22 @@ void CClient::battleStarted(const BattleInfo * info)
|
||||
def = std::dynamic_pointer_cast<CPlayerInterface>(playerint[rightSide.color]);
|
||||
|
||||
//Remove player interfaces for auto battle (quickCombat option)
|
||||
if(att && att->isAutoFightOn)
|
||||
if((att && att->isAutoFightOn) || (def && def->isAutoFightOn))
|
||||
{
|
||||
if (att->cb->getBattle(info->battleID)->battleGetTacticDist())
|
||||
auto endTacticPhaseIfEligible = [info](const CPlayerInterface * interface)
|
||||
{
|
||||
auto side = att->cb->getBattle(info->battleID)->playerToSide(att->playerID);
|
||||
auto action = BattleAction::makeEndOFTacticPhase(*side);
|
||||
att->cb->battleMakeTacticAction(info->battleID, action);
|
||||
}
|
||||
if (interface->cb->getBattle(info->battleID)->battleGetTacticDist())
|
||||
{
|
||||
auto side = interface->cb->getBattle(info->battleID)->playerToSide(interface->playerID);
|
||||
auto action = BattleAction::makeEndOFTacticPhase(*side);
|
||||
interface->cb->battleMakeTacticAction(info->battleID, action);
|
||||
}
|
||||
};
|
||||
|
||||
if(att && att->isAutoFightOn)
|
||||
endTacticPhaseIfEligible(att.get());
|
||||
else // def && def->isAutoFightOn
|
||||
endTacticPhaseIfEligible(def.get());
|
||||
|
||||
att.reset();
|
||||
def.reset();
|
||||
|
@ -18,6 +18,7 @@
|
||||
#include "../queries/QueriesProcessor.h"
|
||||
#include "../queries/BattleQueries.h"
|
||||
|
||||
#include "../../lib/CPlayerState.h"
|
||||
#include "../../lib/TerrainHandler.h"
|
||||
#include "../../lib/battle/CBattleInfoCallback.h"
|
||||
#include "../../lib/battle/CObstacleInstance.h"
|
||||
@ -183,7 +184,11 @@ BattleID BattleProcessor::setupBattle(int3 tile, const CArmedInstance *armies[2]
|
||||
engageIntoBattle(bs.info->sides[1].color);
|
||||
|
||||
auto lastBattleQuery = std::dynamic_pointer_cast<CBattleQuery>(gameHandler->queries->topQuery(bs.info->sides[0].color));
|
||||
bs.info->replayAllowed = lastBattleQuery == nullptr && !bs.info->sides[1].color.isValidPlayer();
|
||||
bool isDefenderHuman = bs.info->sides[1].color.isValidPlayer() && gameHandler->getPlayerState(bs.info->sides[1].color)->isHuman();
|
||||
bool isAttackerHuman = gameHandler->getPlayerState(bs.info->sides[0].color)->isHuman();
|
||||
|
||||
bool onlyOnePlayerHuman = isDefenderHuman != isAttackerHuman;
|
||||
bs.info->replayAllowed = lastBattleQuery == nullptr && onlyOnePlayerHuman;
|
||||
|
||||
gameHandler->sendAndApply(&bs);
|
||||
|
||||
|
@ -17,6 +17,7 @@
|
||||
|
||||
#include "../../lib/ArtifactUtils.h"
|
||||
#include "../../lib/CStack.h"
|
||||
#include "../../lib/CPlayerState.h"
|
||||
#include "../../lib/GameSettings.h"
|
||||
#include "../../lib/battle/CBattleInfoCallback.h"
|
||||
#include "../../lib/battle/IBattleState.h"
|
||||
@ -272,7 +273,13 @@ void BattleResultProcessor::endBattle(const CBattleInfoCallback & battle)
|
||||
finishingBattles[battle.getBattle()->getBattleID()] = std::make_unique<FinishingBattleHelper>(battle, *battleResult, queriedPlayers);
|
||||
|
||||
// in battles against neutrals, 1st player can ask to replay battle manually
|
||||
if (!battle.sideToPlayer(1).isValidPlayer())
|
||||
const auto * attackerPlayer = gameHandler->getPlayerState(battle.getBattle()->getSidePlayer(BattleSide::ATTACKER));
|
||||
const auto * defenderPlayer = gameHandler->getPlayerState(battle.getBattle()->getSidePlayer(BattleSide::DEFENDER));
|
||||
bool isAttackerHuman = attackerPlayer && attackerPlayer->isHuman();
|
||||
bool isDefenderHuman = defenderPlayer && defenderPlayer->isHuman();
|
||||
bool onlyOnePlayerHuman = isAttackerHuman != isDefenderHuman;
|
||||
// in battles against neutrals attacker can ask to replay battle manually, additionally in battles against AI player human side can also ask for replay
|
||||
if(onlyOnePlayerHuman)
|
||||
{
|
||||
auto battleDialogQuery = std::make_shared<CBattleDialogQuery>(gameHandler, battle.getBattle());
|
||||
battleResult->queryID = battleDialogQuery->queryID;
|
||||
|
@ -16,6 +16,8 @@
|
||||
#include "../battles/BattleProcessor.h"
|
||||
|
||||
#include "../../lib/battle/IBattleState.h"
|
||||
#include "../../lib/battle/SideInBattle.h"
|
||||
#include "../../lib/CPlayerState.h"
|
||||
#include "../../lib/mapObjects/CGObjectInstance.h"
|
||||
#include "../../lib/networkPacks/PacksForServer.h"
|
||||
#include "../../lib/serializer/Cast.h"
|
||||
@ -83,6 +85,9 @@ CBattleDialogQuery::CBattleDialogQuery(CGameHandler * owner, const IBattleInfo *
|
||||
|
||||
void CBattleDialogQuery::onRemoval(PlayerColor color)
|
||||
{
|
||||
if (!gh->getPlayerState(color)->isHuman())
|
||||
return;
|
||||
|
||||
assert(answer);
|
||||
if(*answer == 1)
|
||||
{
|
||||
|
@ -14,6 +14,7 @@
|
||||
|
||||
VCMI_LIB_NAMESPACE_BEGIN
|
||||
class IBattleInfo;
|
||||
struct SideInBattle;
|
||||
VCMI_LIB_NAMESPACE_END
|
||||
|
||||
class CBattleQuery : public CQuery
|
||||
|
Loading…
x
Reference in New Issue
Block a user