mirror of
https://github.com/vcmi/vcmi.git
synced 2024-12-24 22:14:36 +02:00
* [previous commit adds support for golden bow too]
* support for ammo cart * partially written support for orb of vulnerability
This commit is contained in:
parent
4b03206b8a
commit
f36918eb7e
@ -770,8 +770,25 @@ DLL_EXPORT void BattleAttack::applyGs( CGameState *gs )
|
||||
CStack *attacker = gs->curB->getStack(stackAttacking);
|
||||
if(counter())
|
||||
attacker->counterAttacks--;
|
||||
|
||||
if(shot())
|
||||
attacker->shots--;
|
||||
{
|
||||
//don't remove ammo if we have a working ammo cart
|
||||
bool hasAmmoCart = false;
|
||||
BOOST_FOREACH(const CStack * st, gs->curB->stacks)
|
||||
{
|
||||
if(st->owner == attacker->owner && st->type->idNumber == 148 && st->alive())
|
||||
{
|
||||
hasAmmoCart = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!hasAmmoCart)
|
||||
{
|
||||
attacker->shots--;
|
||||
}
|
||||
}
|
||||
BOOST_FOREACH(BattleStackAttacked stackAttacked, bsa)
|
||||
stackAttacked.applyGs(gs);
|
||||
|
||||
|
@ -3586,13 +3586,33 @@ static std::vector<ui32> calculateResistedStacks(const CSpell * sp, const CGHero
|
||||
std::vector<ui32> ret;
|
||||
for(std::set<CStack*>::const_iterator it = affectedCreatures.begin(); it != affectedCreatures.end(); ++it)
|
||||
{
|
||||
if ((*it)->hasBonusOfType(Bonus::SPELL_IMMUNITY, sp->id) //100% sure spell immunity
|
||||
|| ( (*it)->hasBonusOfType(Bonus::LEVEL_SPELL_IMMUNITY) &&
|
||||
(*it)->valOfBonuses(Bonus::LEVEL_SPELL_IMMUNITY) >= sp->level) ) //some creature abilities have level 0
|
||||
if (caster->hasBonusOfType(Bonus::NEGATE_ALL_NATURAL_IMMUNITIES) ||
|
||||
hero2->hasBonusOfType(Bonus::NEGATE_ALL_NATURAL_IMMUNITIES))
|
||||
{
|
||||
ret.push_back((*it)->ID);
|
||||
continue;
|
||||
//Here we need "source different than" selector
|
||||
// BonusList bl = (*it)->getBonuses(Selector::sourceNotType(Bonus::CREATURE_ABILITY));
|
||||
//
|
||||
// BOOST_FOREACH(Bonus bb, bl)
|
||||
// {
|
||||
// if(bb.type == Bonus::SPELL_IMMUNITY && bb.subtype == sp->id || //100% sure spell immunity
|
||||
// bb.type == Bonus::LEVEL_SPELL_IMMUNITY && bb.val >= sp->level) //some creature abilities have level 0
|
||||
// {
|
||||
// ret.push_back((*it)->ID);
|
||||
// continue;
|
||||
// }
|
||||
// }
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((*it)->hasBonusOfType(Bonus::SPELL_IMMUNITY, sp->id) //100% sure spell immunity
|
||||
|| ( (*it)->hasBonusOfType(Bonus::LEVEL_SPELL_IMMUNITY) &&
|
||||
(*it)->valOfBonuses(Bonus::LEVEL_SPELL_IMMUNITY) >= sp->level) ) //some creature abilities have level 0
|
||||
{
|
||||
ret.push_back((*it)->ID);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//non-negative spells on friendly stacks should always succeed, unless immune
|
||||
if(sp->positiveness >= 0 && (*it)->owner == caster->tempOwner)
|
||||
|
Loading…
Reference in New Issue
Block a user