From 48925a50f29bb621e17156e9495c10b15bf93748 Mon Sep 17 00:00:00 2001 From: nordsoft Date: Thu, 3 Nov 2022 23:48:55 +0400 Subject: [PATCH] Development --- lib/battle/BattleInfo.cpp | 1 + lib/battle/BattleInfo.h | 1 + server/CGameHandler.cpp | 2 +- server/CQuery.cpp | 12 ++++++++++-- server/CQuery.h | 4 ++++ 5 files changed, 17 insertions(+), 3 deletions(-) diff --git a/lib/battle/BattleInfo.cpp b/lib/battle/BattleInfo.cpp index ea5e7e776..abdddc8e1 100644 --- a/lib/battle/BattleInfo.cpp +++ b/lib/battle/BattleInfo.cpp @@ -206,6 +206,7 @@ BattleInfo * BattleInfo::setupBattle(const int3 & tile, TerrainId terrain, const curB->battlefieldType = battlefieldType; curB->round = -2; curB->activeStack = -1; + curB->creatureBank = creatureBank; if(town) { diff --git a/lib/battle/BattleInfo.h b/lib/battle/BattleInfo.h index 76d3a9db2..5647e68b9 100644 --- a/lib/battle/BattleInfo.h +++ b/lib/battle/BattleInfo.h @@ -34,6 +34,7 @@ public: si32 round, activeStack; const CGTownInstance * town; //used during town siege, nullptr if this is not a siege (note that fortless town IS also a siege) int3 tile; //for background and bonuses + bool creatureBank; //auxilary field, do not serialize std::vector stacks; std::vector > obstacles; SiegeInfo si; diff --git a/server/CGameHandler.cpp b/server/CGameHandler.cpp index 00d82a9ab..a3a7c6098 100644 --- a/server/CGameHandler.cpp +++ b/server/CGameHandler.cpp @@ -819,7 +819,7 @@ void CGameHandler::endBattle(int3 tile, const CGHeroInstance * heroAttacker, con } } - auto battleDialogQuery = std::make_shared(this); + auto battleDialogQuery = std::make_shared(this, battleQuery->bi); battleResult.data->queryID = battleDialogQuery->queryID; queries.addQuery(battleDialogQuery); sendAndApply(battleResult.data); //after this point casualties objects are destroyed diff --git a/server/CQuery.cpp b/server/CQuery.cpp index d907c03ca..0a1395a26 100644 --- a/server/CQuery.cpp +++ b/server/CQuery.cpp @@ -379,14 +379,22 @@ bool CGarrisonDialogQuery::blocksPack(const CPack * pack) const return CDialogQuery::blocksPack(pack); } + +CBattleDialogQuery::CBattleDialogQuery(CGameHandler * owner, const BattleInfo * Bi): + CDialogQuery(owner) +{ + bi = Bi; + + for(auto & side : bi->sides) + addPlayer(side.color); +} void CBattleDialogQuery::onRemoval(PlayerColor color) { assert(answer); if(*answer == 1) { - int a = 0; - ++a; + gh->startBattlePrimary(bi->sides[0].armyObject, bi->sides[1].armyObject, bi->tile, bi->sides[0].hero, bi->sides[1].hero, bi->creatureBank, bi->town); } } diff --git a/server/CQuery.h b/server/CQuery.h index 03705a622..969e53ddc 100644 --- a/server/CQuery.h +++ b/server/CQuery.h @@ -147,6 +147,10 @@ public: class CBattleDialogQuery : public CDialogQuery { public: + CBattleDialogQuery(CGameHandler * owner, const BattleInfo * Bi); + + const BattleInfo * bi; + virtual void onRemoval(PlayerColor color) override; };