mirror of
https://github.com/vcmi/vcmi.git
synced 2025-09-16 09:26:28 +02:00
More hero|creature casting unification
This commit is contained in:
@@ -3868,24 +3868,20 @@ bool CGameHandler::makeBattleAction( BattleAction &ba )
|
||||
complain("That stack can't cast spells!");
|
||||
else
|
||||
{
|
||||
BattleSpellCastParameters parameters(gs->curB);
|
||||
|
||||
const CSpell * spell = SpellID(spellID).toSpell();
|
||||
BattleSpellCastParameters parameters(gs->curB, stack, spell);
|
||||
parameters.spellLvl = 0;
|
||||
if (spellcaster)
|
||||
vstd::amax(parameters.spellLvl, spellcaster->val);
|
||||
if (randSpellcaster)
|
||||
vstd::amax(parameters.spellLvl, randSpellcaster->val);
|
||||
vstd::amin (parameters.spellLvl, 3);
|
||||
|
||||
parameters.effectLevel = parameters.spellLvl;
|
||||
parameters.casterSide = gs->curB->whatSide(stack->owner);
|
||||
parameters.mode = ECastingMode::CREATURE_ACTIVE_CASTING;
|
||||
parameters.destination = destination;
|
||||
parameters.casterColor = stack->owner;
|
||||
parameters.casterHero = nullptr;
|
||||
parameters.casterStack = stack;
|
||||
parameters.selectedStack = nullptr;
|
||||
|
||||
const CSpell * spell = SpellID(spellID).toSpell();
|
||||
parameters.selectedStack = nullptr;
|
||||
spell->battleCast(spellEnv, parameters);
|
||||
}
|
||||
sendAndApply(&end_action);
|
||||
@@ -4074,14 +4070,11 @@ bool CGameHandler::makeCustomAction( BattleAction &ba )
|
||||
|
||||
const CSpell * s = SpellID(ba.additionalInfo).toSpell();
|
||||
|
||||
BattleSpellCastParameters parameters(gs->curB);
|
||||
parameters.spellLvl = h->getSpellSchoolLevel(s);
|
||||
BattleSpellCastParameters parameters(gs->curB, h, s);
|
||||
parameters.destination = ba.destinationTile;
|
||||
parameters.casterSide = ba.side;
|
||||
parameters.casterColor = h->tempOwner;
|
||||
parameters.casterHero = h;
|
||||
parameters.mode = ECastingMode::HERO_CASTING;
|
||||
parameters.casterStack = nullptr;
|
||||
parameters.selectedStack = gs->curB->battleGetStackByID(ba.selectedStack, false);
|
||||
|
||||
ESpellCastProblem::ESpellCastProblem escp = gs->curB->battleCanCastThisSpell(h->tempOwner, s, ECastingMode::HERO_CASTING);
|
||||
@@ -4230,14 +4223,13 @@ void CGameHandler::stackTurnTrigger(const CStack * st)
|
||||
|
||||
if (gs->curB->battleCanCastThisSpell(st->owner, spell, ECastingMode::ENCHANTER_CASTING) == ESpellCastProblem::OK)
|
||||
{
|
||||
BattleSpellCastParameters parameters(gs->curB);
|
||||
BattleSpellCastParameters parameters(gs->curB, st, spell);
|
||||
parameters.spellLvl = bonus->val;
|
||||
parameters.effectLevel = bonus->val;//todo: recheck
|
||||
parameters.destination = BattleHex::INVALID;
|
||||
parameters.casterSide = side;
|
||||
parameters.casterColor = st->owner;
|
||||
parameters.casterHero = nullptr;
|
||||
parameters.mode = ECastingMode::ENCHANTER_CASTING;
|
||||
parameters.casterStack = st;
|
||||
parameters.selectedStack = nullptr;
|
||||
|
||||
spell->battleCast(spellEnv, parameters);
|
||||
@@ -4942,14 +4934,13 @@ void CGameHandler::attackCasting(const BattleAttack & bat, Bonus::BonusType atta
|
||||
{
|
||||
const CSpell * spell = SpellID(spellID).toSpell();
|
||||
|
||||
BattleSpellCastParameters parameters(gs->curB);
|
||||
BattleSpellCastParameters parameters(gs->curB, attacker, spell);
|
||||
parameters.spellLvl = spellLevel;
|
||||
parameters.effectLevel = spellLevel;
|
||||
parameters.destination = destination;
|
||||
parameters.casterSide = !attacker->attackerOwned;
|
||||
parameters.casterColor = attacker->owner;
|
||||
parameters.casterHero = nullptr;
|
||||
parameters.mode = ECastingMode::AFTER_ATTACK_CASTING;
|
||||
parameters.casterStack = attacker;
|
||||
parameters.selectedStack = nullptr;
|
||||
|
||||
spell->battleCast(spellEnv, parameters);
|
||||
@@ -4974,15 +4965,14 @@ void CGameHandler::handleAfterAttackCasting( const BattleAttack & bat )
|
||||
{
|
||||
const CSpell * spell = SpellID(spellID).toSpell();
|
||||
|
||||
BattleSpellCastParameters parameters(gs->curB);
|
||||
BattleSpellCastParameters parameters(gs->curB, attacker, spell);
|
||||
parameters.spellLvl = 0;
|
||||
parameters.effectLevel = 0;
|
||||
parameters.destination = gs->curB->battleGetStackByID(bat.bsa.at(0).stackAttacked)->position;
|
||||
parameters.casterSide = !attacker->attackerOwned;
|
||||
parameters.casterColor = attacker->owner;
|
||||
parameters.casterHero = nullptr;
|
||||
parameters.effectPower = power;
|
||||
parameters.mode = ECastingMode::AFTER_ATTACK_CASTING;
|
||||
parameters.casterStack = attacker;
|
||||
parameters.selectedStack = nullptr;
|
||||
|
||||
spell->battleCast(this->spellEnv, parameters);
|
||||
@@ -5282,22 +5272,18 @@ void CGameHandler::runBattle()
|
||||
{
|
||||
TBonusListPtr bl = h->getBonuses(Selector::type(Bonus::OPENING_BATTLE_SPELL));
|
||||
|
||||
BattleSpellCastParameters parameters(gs->curB);
|
||||
parameters.spellLvl = 3;
|
||||
parameters.destination = BattleHex::INVALID;
|
||||
parameters.casterSide = i;
|
||||
parameters.casterColor = h->tempOwner;
|
||||
parameters.casterHero = h;
|
||||
parameters.mode = ECastingMode::PASSIVE_CASTING;
|
||||
parameters.casterStack = nullptr;
|
||||
parameters.selectedStack = nullptr;
|
||||
|
||||
for (Bonus *b : *bl)
|
||||
{
|
||||
parameters.enchantPower = b->val;
|
||||
|
||||
const CSpell * spell = SpellID(b->subtype).toSpell();
|
||||
|
||||
BattleSpellCastParameters parameters(gs->curB, h, spell);
|
||||
parameters.spellLvl = 3;
|
||||
parameters.effectLevel = 3;
|
||||
parameters.destination = BattleHex::INVALID;
|
||||
parameters.casterSide = i;
|
||||
parameters.casterColor = h->tempOwner;
|
||||
parameters.mode = ECastingMode::PASSIVE_CASTING;
|
||||
parameters.selectedStack = nullptr;
|
||||
parameters.enchantPower = b->val;
|
||||
spell->battleCast(spellEnv, parameters);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user