mirror of
https://github.com/vcmi/vcmi.git
synced 2025-07-15 01:24:45 +02:00
* added support for non-damaging multi-target spells
* fixed not updating menu in battles
This commit is contained in:
5153
CBattleInterface.cpp
5153
CBattleInterface.cpp
File diff suppressed because it is too large
Load Diff
@ -1313,121 +1313,361 @@ upgend:
|
|||||||
case 27: //shield
|
case 27: //shield
|
||||||
{
|
{
|
||||||
SetStackEffect sse;
|
SetStackEffect sse;
|
||||||
sse.stack = gs->curB->getStackT(ba.destinationTile)->ID;
|
if(getSchoolLevel(h,s) < 3) //not expert
|
||||||
sse.effect.id = 27;
|
{
|
||||||
sse.effect.level = getSchoolLevel(h,s);
|
sse.stack = gs->curB->getStackT(ba.destinationTile)->ID;
|
||||||
sse.effect.turnsRemain = h->getPrimSkillLevel(2);
|
sse.effect.id = 27;
|
||||||
sendAndApply(&sse);
|
sse.effect.level = getSchoolLevel(h,s);
|
||||||
|
sse.effect.turnsRemain = h->getPrimSkillLevel(2);
|
||||||
|
sendAndApply(&sse);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for(int it=0; it<gs->curB->stacks.size(); ++it)
|
||||||
|
{
|
||||||
|
//if it's non negative spell and our unit or non positive spell and hostile unit
|
||||||
|
if((VLC->spellh->spells[ba.additionalInfo].positiveness >= 0 && gs->curB->stacks[it]->owner == h->tempOwner)
|
||||||
|
||(VLC->spellh->spells[ba.additionalInfo].positiveness <= 0 && gs->curB->stacks[it]->owner != h->tempOwner )
|
||||||
|
)
|
||||||
|
{
|
||||||
|
sse.stack = gs->curB->stacks[it]->ID;
|
||||||
|
sse.effect.id = 27;
|
||||||
|
sse.effect.level = getSchoolLevel(h,s);
|
||||||
|
sse.effect.turnsRemain = h->getPrimSkillLevel(2);
|
||||||
|
sendAndApply(&sse);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 28: //air shield
|
case 28: //air shield
|
||||||
{
|
{
|
||||||
SetStackEffect sse;
|
SetStackEffect sse;
|
||||||
sse.stack = gs->curB->getStackT(ba.destinationTile)->ID;
|
if(getSchoolLevel(h,s) < 3) //not expert
|
||||||
sse.effect.id = 28;
|
{
|
||||||
sse.effect.level = getSchoolLevel(h,s);
|
sse.stack = gs->curB->getStackT(ba.destinationTile)->ID;
|
||||||
sse.effect.turnsRemain = h->getPrimSkillLevel(2);
|
sse.effect.id = 28;
|
||||||
sendAndApply(&sse);
|
sse.effect.level = getSchoolLevel(h,s);
|
||||||
|
sse.effect.turnsRemain = h->getPrimSkillLevel(2);
|
||||||
|
sendAndApply(&sse);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for(int it=0; it<gs->curB->stacks.size(); ++it)
|
||||||
|
{
|
||||||
|
//if it's non negative spell and our unit or non positive spell and hostile unit
|
||||||
|
if((VLC->spellh->spells[ba.additionalInfo].positiveness >= 0 && gs->curB->stacks[it]->owner == h->tempOwner)
|
||||||
|
||(VLC->spellh->spells[ba.additionalInfo].positiveness <= 0 && gs->curB->stacks[it]->owner != h->tempOwner )
|
||||||
|
)
|
||||||
|
{
|
||||||
|
sse.stack = gs->curB->stacks[it]->ID;
|
||||||
|
sse.effect.id = 28;
|
||||||
|
sse.effect.level = getSchoolLevel(h,s);
|
||||||
|
sse.effect.turnsRemain = h->getPrimSkillLevel(2);
|
||||||
|
sendAndApply(&sse);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 41: //bless
|
case 41: //bless
|
||||||
{
|
{
|
||||||
SetStackEffect sse;
|
SetStackEffect sse;
|
||||||
sse.stack = gs->curB->getStackT(ba.destinationTile)->ID;
|
if(getSchoolLevel(h,s) < 3) //not expert
|
||||||
sse.effect.id = 41;
|
{
|
||||||
sse.effect.level = getSchoolLevel(h,s);
|
sse.stack = gs->curB->getStackT(ba.destinationTile)->ID;
|
||||||
sse.effect.turnsRemain = h->getPrimSkillLevel(2);
|
sse.effect.id = 41;
|
||||||
sendAndApply(&sse);
|
sse.effect.level = getSchoolLevel(h,s);
|
||||||
|
sse.effect.turnsRemain = h->getPrimSkillLevel(2);
|
||||||
|
sendAndApply(&sse);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for(int it=0; it<gs->curB->stacks.size(); ++it)
|
||||||
|
{
|
||||||
|
//if it's non negative spell and our unit or non positive spell and hostile unit
|
||||||
|
if((VLC->spellh->spells[ba.additionalInfo].positiveness >= 0 && gs->curB->stacks[it]->owner == h->tempOwner)
|
||||||
|
||(VLC->spellh->spells[ba.additionalInfo].positiveness <= 0 && gs->curB->stacks[it]->owner != h->tempOwner )
|
||||||
|
)
|
||||||
|
{
|
||||||
|
sse.stack = gs->curB->stacks[it]->ID;
|
||||||
|
sse.effect.id = 41;
|
||||||
|
sse.effect.level = getSchoolLevel(h,s);
|
||||||
|
sse.effect.turnsRemain = h->getPrimSkillLevel(2);
|
||||||
|
sendAndApply(&sse);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 42: //curse
|
case 42: //curse
|
||||||
{
|
{
|
||||||
SetStackEffect sse;
|
SetStackEffect sse;
|
||||||
sse.stack = gs->curB->getStackT(ba.destinationTile)->ID;
|
if(getSchoolLevel(h,s) < 3) //not expert
|
||||||
sse.effect.id = 42;
|
{
|
||||||
sse.effect.level = getSchoolLevel(h,s);
|
sse.stack = gs->curB->getStackT(ba.destinationTile)->ID;
|
||||||
sse.effect.turnsRemain = h->getPrimSkillLevel(2);
|
sse.effect.id = 42;
|
||||||
sendAndApply(&sse);
|
sse.effect.level = getSchoolLevel(h,s);
|
||||||
|
sse.effect.turnsRemain = h->getPrimSkillLevel(2);
|
||||||
|
sendAndApply(&sse);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for(int it=0; it<gs->curB->stacks.size(); ++it)
|
||||||
|
{
|
||||||
|
//if it's non negative spell and our unit or non positive spell and hostile unit
|
||||||
|
if((VLC->spellh->spells[ba.additionalInfo].positiveness >= 0 && gs->curB->stacks[it]->owner == h->tempOwner)
|
||||||
|
||(VLC->spellh->spells[ba.additionalInfo].positiveness <= 0 && gs->curB->stacks[it]->owner != h->tempOwner )
|
||||||
|
)
|
||||||
|
{
|
||||||
|
sse.stack = gs->curB->stacks[it]->ID;
|
||||||
|
sse.effect.id = 42;
|
||||||
|
sse.effect.level = getSchoolLevel(h,s);
|
||||||
|
sse.effect.turnsRemain = h->getPrimSkillLevel(2);
|
||||||
|
sendAndApply(&sse);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 43: //bloodlust
|
case 43: //bloodlust
|
||||||
{
|
{
|
||||||
SetStackEffect sse;
|
SetStackEffect sse;
|
||||||
sse.stack = gs->curB->getStackT(ba.destinationTile)->ID;
|
if(getSchoolLevel(h,s) < 3) //not expert
|
||||||
sse.effect.id = 43;
|
{
|
||||||
sse.effect.level = getSchoolLevel(h,s);
|
sse.stack = gs->curB->getStackT(ba.destinationTile)->ID;
|
||||||
sse.effect.turnsRemain = h->getPrimSkillLevel(2);
|
sse.effect.id = 43;
|
||||||
sendAndApply(&sse);
|
sse.effect.level = getSchoolLevel(h,s);
|
||||||
|
sse.effect.turnsRemain = h->getPrimSkillLevel(2);
|
||||||
|
sendAndApply(&sse);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for(int it=0; it<gs->curB->stacks.size(); ++it)
|
||||||
|
{
|
||||||
|
//if it's non negative spell and our unit or non positive spell and hostile unit
|
||||||
|
if((VLC->spellh->spells[ba.additionalInfo].positiveness >= 0 && gs->curB->stacks[it]->owner == h->tempOwner)
|
||||||
|
||(VLC->spellh->spells[ba.additionalInfo].positiveness <= 0 && gs->curB->stacks[it]->owner != h->tempOwner )
|
||||||
|
)
|
||||||
|
{
|
||||||
|
sse.stack = gs->curB->stacks[it]->ID;
|
||||||
|
sse.effect.id = 43;
|
||||||
|
sse.effect.level = getSchoolLevel(h,s);
|
||||||
|
sse.effect.turnsRemain = h->getPrimSkillLevel(2);
|
||||||
|
sendAndApply(&sse);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 45: //weakness
|
case 45: //weakness
|
||||||
{
|
{
|
||||||
SetStackEffect sse;
|
SetStackEffect sse;
|
||||||
sse.stack = gs->curB->getStackT(ba.destinationTile)->ID;
|
if(getSchoolLevel(h,s) < 3) //not expert
|
||||||
sse.effect.id = 45;
|
{
|
||||||
sse.effect.level = getSchoolLevel(h,s);
|
sse.stack = gs->curB->getStackT(ba.destinationTile)->ID;
|
||||||
sse.effect.turnsRemain = h->getPrimSkillLevel(2);
|
sse.effect.id = 45;
|
||||||
sendAndApply(&sse);
|
sse.effect.level = getSchoolLevel(h,s);
|
||||||
|
sse.effect.turnsRemain = h->getPrimSkillLevel(2);
|
||||||
|
sendAndApply(&sse);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for(int it=0; it<gs->curB->stacks.size(); ++it)
|
||||||
|
{
|
||||||
|
//if it's non negative spell and our unit or non positive spell and hostile unit
|
||||||
|
if((VLC->spellh->spells[ba.additionalInfo].positiveness >= 0 && gs->curB->stacks[it]->owner == h->tempOwner)
|
||||||
|
||(VLC->spellh->spells[ba.additionalInfo].positiveness <= 0 && gs->curB->stacks[it]->owner != h->tempOwner )
|
||||||
|
)
|
||||||
|
{
|
||||||
|
sse.stack = gs->curB->stacks[it]->ID;
|
||||||
|
sse.effect.id = 45;
|
||||||
|
sse.effect.level = getSchoolLevel(h,s);
|
||||||
|
sse.effect.turnsRemain = h->getPrimSkillLevel(2);
|
||||||
|
sendAndApply(&sse);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 46: //stone skin
|
case 46: //stone skin
|
||||||
{
|
{
|
||||||
SetStackEffect sse;
|
SetStackEffect sse;
|
||||||
sse.stack = gs->curB->getStackT(ba.destinationTile)->ID;
|
if(getSchoolLevel(h,s) < 3) //not expert
|
||||||
sse.effect.id = 46;
|
{
|
||||||
sse.effect.level = getSchoolLevel(h,s);
|
sse.stack = gs->curB->getStackT(ba.destinationTile)->ID;
|
||||||
sse.effect.turnsRemain = h->getPrimSkillLevel(2);
|
sse.effect.id = 46;
|
||||||
sendAndApply(&sse);
|
sse.effect.level = getSchoolLevel(h,s);
|
||||||
|
sse.effect.turnsRemain = h->getPrimSkillLevel(2);
|
||||||
|
sendAndApply(&sse);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for(int it=0; it<gs->curB->stacks.size(); ++it)
|
||||||
|
{
|
||||||
|
//if it's non negative spell and our unit or non positive spell and hostile unit
|
||||||
|
if((VLC->spellh->spells[ba.additionalInfo].positiveness >= 0 && gs->curB->stacks[it]->owner == h->tempOwner)
|
||||||
|
||(VLC->spellh->spells[ba.additionalInfo].positiveness <= 0 && gs->curB->stacks[it]->owner != h->tempOwner )
|
||||||
|
)
|
||||||
|
{
|
||||||
|
sse.stack = gs->curB->stacks[it]->ID;
|
||||||
|
sse.effect.id = 46;
|
||||||
|
sse.effect.level = getSchoolLevel(h,s);
|
||||||
|
sse.effect.turnsRemain = h->getPrimSkillLevel(2);
|
||||||
|
sendAndApply(&sse);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 48: //prayer
|
case 48: //prayer
|
||||||
{
|
{
|
||||||
SetStackEffect sse;
|
SetStackEffect sse;
|
||||||
sse.stack = gs->curB->getStackT(ba.destinationTile)->ID;
|
if(getSchoolLevel(h,s) < 3) //not expert
|
||||||
sse.effect.id = 48;
|
{
|
||||||
sse.effect.level = getSchoolLevel(h,s);
|
sse.stack = gs->curB->getStackT(ba.destinationTile)->ID;
|
||||||
sse.effect.turnsRemain = h->getPrimSkillLevel(2);
|
sse.effect.id = 48;
|
||||||
sendAndApply(&sse);
|
sse.effect.level = getSchoolLevel(h,s);
|
||||||
|
sse.effect.turnsRemain = h->getPrimSkillLevel(2);
|
||||||
|
sendAndApply(&sse);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for(int it=0; it<gs->curB->stacks.size(); ++it)
|
||||||
|
{
|
||||||
|
//if it's non negative spell and our unit or non positive spell and hostile unit
|
||||||
|
if((VLC->spellh->spells[ba.additionalInfo].positiveness >= 0 && gs->curB->stacks[it]->owner == h->tempOwner)
|
||||||
|
||(VLC->spellh->spells[ba.additionalInfo].positiveness <= 0 && gs->curB->stacks[it]->owner != h->tempOwner )
|
||||||
|
)
|
||||||
|
{
|
||||||
|
sse.stack = gs->curB->stacks[it]->ID;
|
||||||
|
sse.effect.id = 48;
|
||||||
|
sse.effect.level = getSchoolLevel(h,s);
|
||||||
|
sse.effect.turnsRemain = h->getPrimSkillLevel(2);
|
||||||
|
sendAndApply(&sse);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 53: //haste
|
case 53: //haste
|
||||||
{
|
{
|
||||||
SetStackEffect sse;
|
SetStackEffect sse;
|
||||||
sse.stack = gs->curB->getStackT(ba.destinationTile)->ID;
|
if(getSchoolLevel(h,s) < 3) //not expert
|
||||||
sse.effect.id = 53;
|
{
|
||||||
sse.effect.level = getSchoolLevel(h,s);
|
sse.stack = gs->curB->getStackT(ba.destinationTile)->ID;
|
||||||
sse.effect.turnsRemain = h->getPrimSkillLevel(2);
|
sse.effect.id = 53;
|
||||||
sendAndApply(&sse);
|
sse.effect.level = getSchoolLevel(h,s);
|
||||||
|
sse.effect.turnsRemain = h->getPrimSkillLevel(2);
|
||||||
|
sendAndApply(&sse);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for(int it=0; it<gs->curB->stacks.size(); ++it)
|
||||||
|
{
|
||||||
|
//if it's non negative spell and our unit or non positive spell and hostile unit
|
||||||
|
if((VLC->spellh->spells[ba.additionalInfo].positiveness >= 0 && gs->curB->stacks[it]->owner == h->tempOwner)
|
||||||
|
||(VLC->spellh->spells[ba.additionalInfo].positiveness <= 0 && gs->curB->stacks[it]->owner != h->tempOwner )
|
||||||
|
)
|
||||||
|
{
|
||||||
|
sse.stack = gs->curB->stacks[it]->ID;
|
||||||
|
sse.effect.id = 53;
|
||||||
|
sse.effect.level = getSchoolLevel(h,s);
|
||||||
|
sse.effect.turnsRemain = h->getPrimSkillLevel(2);
|
||||||
|
sendAndApply(&sse);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 54: //slow
|
case 54: //slow
|
||||||
{
|
{
|
||||||
SetStackEffect sse;
|
SetStackEffect sse;
|
||||||
sse.stack = gs->curB->getStackT(ba.destinationTile)->ID;
|
if(getSchoolLevel(h,s) < 3) //not expert
|
||||||
sse.effect.id = 54;
|
{
|
||||||
sse.effect.level = getSchoolLevel(h,s);
|
sse.stack = gs->curB->getStackT(ba.destinationTile)->ID;
|
||||||
sse.effect.turnsRemain = h->getPrimSkillLevel(2);
|
sse.effect.id = 54;
|
||||||
sendAndApply(&sse);
|
sse.effect.level = getSchoolLevel(h,s);
|
||||||
|
sse.effect.turnsRemain = h->getPrimSkillLevel(2);
|
||||||
|
sendAndApply(&sse);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for(int it=0; it<gs->curB->stacks.size(); ++it)
|
||||||
|
{
|
||||||
|
//if it's non negative spell and our unit or non positive spell and hostile unit
|
||||||
|
if((VLC->spellh->spells[ba.additionalInfo].positiveness >= 0 && gs->curB->stacks[it]->owner == h->tempOwner)
|
||||||
|
||(VLC->spellh->spells[ba.additionalInfo].positiveness <= 0 && gs->curB->stacks[it]->owner != h->tempOwner )
|
||||||
|
)
|
||||||
|
{
|
||||||
|
sse.stack = gs->curB->stacks[it]->ID;
|
||||||
|
sse.effect.id = 54;
|
||||||
|
sse.effect.level = getSchoolLevel(h,s);
|
||||||
|
sse.effect.turnsRemain = h->getPrimSkillLevel(2);
|
||||||
|
sendAndApply(&sse);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 56: //frenzy
|
case 56: //frenzy
|
||||||
{
|
{
|
||||||
SetStackEffect sse;
|
SetStackEffect sse;
|
||||||
sse.stack = gs->curB->getStackT(ba.destinationTile)->ID;
|
if(getSchoolLevel(h,s) < 3) //not expert
|
||||||
sse.effect.id = 56;
|
{
|
||||||
sse.effect.level = getSchoolLevel(h,s);
|
sse.stack = gs->curB->getStackT(ba.destinationTile)->ID;
|
||||||
sse.effect.turnsRemain = 1; //! - different duration
|
sse.effect.id = 56;
|
||||||
sendAndApply(&sse);
|
sse.effect.level = getSchoolLevel(h,s);
|
||||||
|
sse.effect.turnsRemain = 1; //! - different duration
|
||||||
|
sendAndApply(&sse);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for(int it=0; it<gs->curB->stacks.size(); ++it)
|
||||||
|
{
|
||||||
|
//if it's non negative spell and our unit or non positive spell and hostile unit
|
||||||
|
if((VLC->spellh->spells[ba.additionalInfo].positiveness >= 0 && gs->curB->stacks[it]->owner == h->tempOwner)
|
||||||
|
||(VLC->spellh->spells[ba.additionalInfo].positiveness <= 0 && gs->curB->stacks[it]->owner != h->tempOwner )
|
||||||
|
)
|
||||||
|
{
|
||||||
|
sse.stack = gs->curB->stacks[it]->ID;
|
||||||
|
sse.effect.id = 56;
|
||||||
|
sse.effect.level = getSchoolLevel(h,s);
|
||||||
|
sse.effect.turnsRemain = h->getPrimSkillLevel(2);
|
||||||
|
sendAndApply(&sse);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 61: //forgetfulness
|
case 61: //forgetfulness
|
||||||
{
|
{
|
||||||
SetStackEffect sse;
|
SetStackEffect sse;
|
||||||
sse.stack = gs->curB->getStackT(ba.destinationTile)->ID;
|
if(getSchoolLevel(h,s) < 3) //not expert
|
||||||
sse.effect.id = 61;
|
{
|
||||||
sse.effect.level = getSchoolLevel(h,s);
|
sse.stack = gs->curB->getStackT(ba.destinationTile)->ID;
|
||||||
sse.effect.turnsRemain = h->getPrimSkillLevel(2);
|
sse.effect.id = 61;
|
||||||
sendAndApply(&sse);
|
sse.effect.level = getSchoolLevel(h,s);
|
||||||
|
sse.effect.turnsRemain = h->getPrimSkillLevel(2);
|
||||||
|
sendAndApply(&sse);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for(int it=0; it<gs->curB->stacks.size(); ++it)
|
||||||
|
{
|
||||||
|
//if it's non negative spell and our unit or non positive spell and hostile unit
|
||||||
|
if((VLC->spellh->spells[ba.additionalInfo].positiveness >= 0 && gs->curB->stacks[it]->owner == h->tempOwner)
|
||||||
|
||(VLC->spellh->spells[ba.additionalInfo].positiveness <= 0 && gs->curB->stacks[it]->owner != h->tempOwner )
|
||||||
|
)
|
||||||
|
{
|
||||||
|
sse.stack = gs->curB->stacks[it]->ID;
|
||||||
|
sse.effect.id = 61;
|
||||||
|
sse.effect.level = getSchoolLevel(h,s);
|
||||||
|
sse.effect.turnsRemain = h->getPrimSkillLevel(2);
|
||||||
|
sendAndApply(&sse);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user