|
@@ -405,7 +405,10 @@ std::optional<BattleAction> CBattleCallback::makeSurrenderRetreatDecision(const
|
|
|
|
|
|
std::shared_ptr<CPlayerBattleCallback> CBattleCallback::getBattle(const BattleID & battleID)
|
|
|
{
|
|
|
- return activeBattles.at(battleID);
|
|
|
+ if (activeBattles.count(battleID))
|
|
|
+ return activeBattles.at(battleID);
|
|
|
+
|
|
|
+ throw std::runtime_error("Failed to find battle " + std::to_string(battleID.getNum()) + " of player " + player->toString() + ". Number of ongoing battles: " + std::to_string(activeBattles.size()));
|
|
|
}
|
|
|
|
|
|
std::optional<PlayerColor> CBattleCallback::getPlayerID() const
|
|
@@ -415,10 +418,18 @@ std::optional<PlayerColor> CBattleCallback::getPlayerID() const
|
|
|
|
|
|
void CBattleCallback::onBattleStarted(const IBattleInfo * info)
|
|
|
{
|
|
|
+ if (activeBattles.count(info->getBattleID()) > 0)
|
|
|
+ throw std::runtime_error("Player " + player->toString() + " is already engaged in battle " + std::to_string(info->getBattleID().getNum()));
|
|
|
+
|
|
|
+ logGlobal->debug("Battle %d started for player %s", info->getBattleID(), player->toString());
|
|
|
activeBattles[info->getBattleID()] = std::make_shared<CPlayerBattleCallback>(info, *getPlayerID());
|
|
|
}
|
|
|
|
|
|
void CBattleCallback::onBattleEnded(const BattleID & battleID)
|
|
|
{
|
|
|
+ if (activeBattles.count(battleID) == 0)
|
|
|
+ throw std::runtime_error("Player " + player->toString() + " is not engaged in battle " + std::to_string(battleID.getNum()));
|
|
|
+
|
|
|
+ logGlobal->debug("Battle %d ended for player %s", battleID, player->toString());
|
|
|
activeBattles.erase(battleID);
|
|
|
}
|