diff --git a/lib/battle/CUnitState.cpp b/lib/battle/CUnitState.cpp index ad3754260..131fc2a23 100644 --- a/lib/battle/CUnitState.cpp +++ b/lib/battle/CUnitState.cpp @@ -330,7 +330,7 @@ CUnitState::CUnitState(): drainedMana(false), fear(false), hadMorale(false), - usedSpell(SpellID::NONE), + castSpellThisTurn(false), ghost(false), ghostPending(false), movedThisRound(false), @@ -363,7 +363,7 @@ CUnitState & CUnitState::operator=(const CUnitState & other) drainedMana = other.drainedMana; fear = other.fear; hadMorale = other.hadMorale; - usedSpell = other.usedSpell; + castSpellThisTurn = other.castSpellThisTurn; ghost = other.ghost; ghostPending = other.ghostPending; movedThisRound = other.movedThisRound; @@ -534,7 +534,7 @@ bool CUnitState::hasClone() const bool CUnitState::canCast() const { - return casts.canUse(1) && usedSpell == SpellID::NONE;//do not check specific cast abilities here + return casts.canUse(1) && !castSpellThisTurn;//do not check specific cast abilities here } bool CUnitState::isCaster() const @@ -750,7 +750,7 @@ void CUnitState::serializeJson(JsonSerializeFormat & handler) handler.serializeBool("drainedMana", drainedMana); handler.serializeBool("fear", fear); handler.serializeBool("hadMorale", hadMorale); - handler.serializeInt("usedSpell", usedSpell); + handler.serializeBool("castSpellThisTurn", castSpellThisTurn); handler.serializeBool("ghost", ghost); handler.serializeBool("ghostPending", ghostPending); handler.serializeBool("moved", movedThisRound); @@ -785,7 +785,7 @@ void CUnitState::reset() drainedMana = false; fear = false; hadMorale = false; - usedSpell = SpellID::NONE; + castSpellThisTurn = false; ghost = false; ghostPending = false; movedThisRound = false; @@ -868,7 +868,7 @@ void CUnitState::afterNewRound() waitedThisTurn = false; movedThisRound = false; hadMorale = false; - usedSpell = SpellID::NONE; + castSpellThisTurn = false; fear = false; drainedMana = false; counterAttacks.reset(); diff --git a/lib/battle/CUnitState.h b/lib/battle/CUnitState.h index 1ae759115..b5451ba89 100644 --- a/lib/battle/CUnitState.h +++ b/lib/battle/CUnitState.h @@ -141,7 +141,7 @@ public: bool drainedMana; bool fear; bool hadMorale; - SpellID usedSpell; + bool castSpellThisTurn; bool ghost; bool ghostPending; bool movedThisRound; diff --git a/lib/networkPacks/NetPacksLib.cpp b/lib/networkPacks/NetPacksLib.cpp index 6d2431297..43309a8c5 100644 --- a/lib/networkPacks/NetPacksLib.cpp +++ b/lib/networkPacks/NetPacksLib.cpp @@ -2209,7 +2209,7 @@ void StartAction::applyGs(CGameState *gs) st->waiting = false; st->defendingAnim = false; st->movedThisRound = true; - st->usedSpell = ba.actionType == EActionType::MONSTER_SPELL ? ba.spell : SpellID::NONE; + st->castSpellThisTurn = ba.actionType == EActionType::MONSTER_SPELL; break; } } diff --git a/server/battles/BattleFlowProcessor.cpp b/server/battles/BattleFlowProcessor.cpp index c1b29bdcc..ce70d21fd 100644 --- a/server/battles/BattleFlowProcessor.cpp +++ b/server/battles/BattleFlowProcessor.cpp @@ -571,7 +571,7 @@ void BattleFlowProcessor::onActionMade(const CBattleInfoCallback & battle, const assert(activeStack != nullptr); assert(actedStack != nullptr); - if(actedStack->usedSpell != SpellID::NONE && SpellID(actedStack->usedSpell).toSpell()->canCastWithoutSkip()) + if(actedStack->castSpellThisTurn && SpellID(ba.spell).toSpell()->canCastWithoutSkip()) { setActiveStack(battle, actedStack); return;