Selaa lähdekoodia

Fixes for previous commit.

DjWarmonger 15 vuotta sitten
vanhempi
sitoutus
30cf8b7e77
3 muutettua tiedostoa jossa 16 lisäystä ja 4 poistoa
  1. 0 1
      lib/CGameState.cpp
  2. 2 2
      lib/CGameState.h
  3. 14 1
      lib/HeroBonus.cpp

+ 0 - 1
lib/CGameState.cpp

@@ -4262,7 +4262,6 @@ void BattleInfo::getBonuses(BonusList &out, const CSelector &selector, const CBo
 	if (!dest)
 		return;
 
-
 	//TODO: make it in clean way
 	if(Selector::matchesType(selector, Bonus::MORALE) || Selector::matchesType(selector, Bonus::LUCK))
 	{

+ 2 - 2
lib/CGameState.h

@@ -278,7 +278,7 @@ public:
 	{
 		Bonus hb(makeFeature(type, Bonus::N_TURNS, subtype, value, Bonus::SPELL_EFFECT, turnsRemain, additionalInfo));
 		hb.effectRange = limit;
-		hb.source = Bonus::SPELL; //right?
+		hb.source = Bonus::CASTED_SPELL; //right?
 		return hb;
 	}
 
@@ -286,7 +286,7 @@ public:
 	{
 		Bonus ret(makeFeature(type, Bonus::N_TURNS, subtype, value, Bonus::SPELL_EFFECT, turnsRemain));
 		ret.valType = valType;
-		ret.source = Bonus::SPELL; //right?
+		ret.source = Bonus::CASTED_SPELL; //right?
 		return ret;
 	}
 

+ 14 - 1
lib/HeroBonus.cpp

@@ -100,10 +100,23 @@ void DLL_EXPORT BonusList::getBonuses(BonusList &out, const CSelector &selector,
 }
 void DLL_EXPORT BonusList::removeSpells(Bonus::BonusSource sourceType)
 {
+limit_start:
 	for(iterator i = begin(); i != end(); i++)
 	{ 
 		if (i->source == sourceType)
-			erase(i);
+		{
+			iterator toErase = i;
+			if(i != begin())
+			{
+				i--;
+				erase(toErase);
+			}
+			else
+			{
+				erase(toErase);
+				goto limit_start;
+			}
+		}
 	}
 }