mirror of
https://github.com/vcmi/vcmi.git
synced 2025-02-03 13:01:33 +02:00
Added new BattleSpellCastParameters support to SACRIFICE spell.
This commit is contained in:
parent
939a9180e2
commit
b07d272c2a
@ -567,8 +567,23 @@ ESpellCastProblem::ESpellCastProblem SacrificeMechanics::canBeCast(const CBattle
|
||||
void SacrificeMechanics::applyBattleEffects(const SpellCastEnvironment * env, const BattleSpellCastParameters & parameters, SpellCastContext & ctx) const
|
||||
{
|
||||
RisingSpellMechanics::applyBattleEffects(env, parameters, ctx);
|
||||
const CStack * victim = nullptr;
|
||||
if(parameters.destinations.size() == 2)
|
||||
{
|
||||
victim = parameters.destinations[1].stackValue;
|
||||
}
|
||||
else
|
||||
{
|
||||
//todo: remove and report error
|
||||
victim = parameters.selectedStack;
|
||||
}
|
||||
if(nullptr == victim)
|
||||
{
|
||||
env->complain("SacrificeMechanics: No stack to sacrifice");
|
||||
return;
|
||||
}
|
||||
|
||||
if(parameters.selectedStack == parameters.cb->battleActiveStack())
|
||||
if(victim == parameters.cb->battleActiveStack())
|
||||
//set another active stack than the one removed, or bad things will happen
|
||||
//TODO: make that part of BattleStacksRemoved? what about client update?
|
||||
{
|
||||
@ -590,17 +605,31 @@ void SacrificeMechanics::applyBattleEffects(const SpellCastEnvironment * env, co
|
||||
|
||||
}
|
||||
BattleStacksRemoved bsr;
|
||||
bsr.stackIDs.insert(parameters.selectedStack->ID); //somehow it works for teleport?
|
||||
bsr.stackIDs.insert(victim->ID);
|
||||
env->sendAndApply(&bsr);
|
||||
}
|
||||
|
||||
int SacrificeMechanics::calculateHealedHP(const SpellCastEnvironment* env, const BattleSpellCastParameters& parameters, SpellCastContext& ctx) const
|
||||
{
|
||||
int res = 0;
|
||||
if(nullptr == parameters.selectedStack)
|
||||
env->complain("No stack to sacrifice.");
|
||||
const CStack * victim = nullptr;
|
||||
|
||||
if(parameters.destinations.size() == 2)
|
||||
{
|
||||
victim = parameters.destinations[1].stackValue;
|
||||
}
|
||||
else
|
||||
res = (parameters.effectPower + parameters.selectedStack->MaxHealth() + owner->getPower(parameters.effectLevel)) * parameters.selectedStack->count;
|
||||
{
|
||||
//todo: remove and report error
|
||||
victim = parameters.selectedStack;
|
||||
}
|
||||
if(nullptr == victim)
|
||||
{
|
||||
env->complain("SacrificeMechanics: No stack to sacrifice");
|
||||
return 0;
|
||||
}
|
||||
|
||||
res = (parameters.effectPower + victim->MaxHealth() + owner->getPower(parameters.effectLevel)) * victim->count;
|
||||
return res;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user