Browse Source

Bonus system: add turnsRemain support for ONE_WEEK duration

ArseniyShestakov 10 years ago
parent
commit
6d395bcba7
2 changed files with 7 additions and 8 deletions
  1. 3 5
      lib/HeroBonus.h
  2. 4 3
      lib/NetPacksLib.cpp

+ 3 - 5
lib/HeroBonus.h

@@ -294,7 +294,7 @@ struct DLL_LINKAGE Bonus
 	};
 
 	ui16 duration; //uses BonusDuration values
-	si16 turnsRemain; //used if duration is N_TURNS or N_DAYS
+	si16 turnsRemain; //used if duration is N_TURNS, N_DAYS or ONE_WEEK
 
 	BonusType type; //uses BonusType values - says to what is this bonus - 1 byte
 	TBonusSubtype subtype; //-1 if not applicable - 4 bytes
@@ -828,13 +828,11 @@ public:
 
 	bool operator()(const Bonus *bonus) const
 	{
-		if(daysRequested <= 0)
+		if(daysRequested <= 0 || bonus->duration & Bonus::PERMANENT || bonus->duration & Bonus::ONE_BATTLE)
 			return true;
 		else if(bonus->duration & Bonus::ONE_DAY)
 			return false;
-		else if(bonus->duration & Bonus::PERMANENT || bonus->duration & Bonus::ONE_BATTLE)
-			return true;
-		else if(bonus->duration & Bonus::N_DAYS)
+		else if(bonus->duration & Bonus::N_DAYS || bonus->duration & Bonus::ONE_WEEK)
 		{
 			return bonus->turnsRemain > daysRequested;
 		}

+ 4 - 3
lib/NetPacksLib.cpp

@@ -263,6 +263,9 @@ DLL_LINKAGE void GiveBonus::applyGs( CGameState *gs )
 
 	assert(cbsn);
 
+	if(Bonus::OneWeek(&bonus))
+		bonus.turnsRemain = 8 - gs->getDate(Date::DAY_OF_WEEK); // set correct number of days before adding bonus
+
 	auto b = new Bonus(bonus);
 	cbsn->addNewBonus(b);
 
@@ -1023,10 +1026,8 @@ DLL_LINKAGE void NewTurn::applyGs( CGameState *gs )
 		creatureSet.second.applyGs(gs);
 
 	gs->globalEffects.popBonuses(Bonus::OneDay); //works for children -> all game objs
-	if(gs->getDate(Date::DAY_OF_WEEK) == 1) //new week
-		gs->globalEffects.popBonuses(Bonus::OneWeek); //works for children -> all game objs
-
 	gs->globalEffects.updateBonuses(Bonus::NDays);
+	gs->globalEffects.updateBonuses(Bonus::OneWeek);
 	//TODO not really a single root hierarchy, what about bonuses placed elsewhere? [not an issue with H3 mechanics but in the future...]
 
 	for(CGTownInstance* t : gs->map->towns)