فهرست منبع

Implemented fixed set of creatures that can get week of double growth. Minor fix.

DjWarmonger 15 سال پیش
والد
کامیت
6005e7a6ee
4فایلهای تغییر یافته به همراه14 افزوده شده و 4 حذف شده
  1. 1 0
      hch/CCreatureHandler.cpp
  2. 2 0
      hch/CCreatureHandler.h
  3. 0 1
      lib/HeroBonus.cpp
  4. 11 3
      server/CGameHandler.cpp

+ 1 - 0
hch/CCreatureHandler.cpp

@@ -45,6 +45,7 @@ CCreatureHandler::CCreatureHandler()
 	// Good: Castle, Rampart, Tower	// Evil: Inferno, Necropolis, Dungeon
 	// Neutral: Stronghold, Fortess, Conflux
 	factionAlignments += 1, 1, 1, -1, -1, -1, 0, 0, 0;
+	doubledCreatures +=  4, 14, 20, 28, 42, 44, 60, 70, 72, 85, 86, 100, 104; //according to Strategija
 }
 
 int CCreature::getQuantityID(const int & quantity)

+ 2 - 0
hch/CCreatureHandler.h

@@ -19,6 +19,7 @@
  * Full text of license available in license.txt file, in main folder
  *
  */
+#define ALLCREATURESGETDOUBLEMONTHS false
 
 class CLodHandler;
 class CCreatureHandler;
@@ -101,6 +102,7 @@ class DLL_EXPORT CCreatureHandler
 public:
 	CBonusSystemNode *globalEffects;
 	std::set<int> notUsedMonsters;
+	std::set<TCreature> doubledCreatures; //they get double week
 	std::vector<CCreature*> creatures; //creature ID -> creature info
 	std::map<int,std::vector<CCreature*> > levelCreatures; //level -> list of creatures
 	std::map<std::string,int> nameToID;

+ 0 - 1
lib/HeroBonus.cpp

@@ -493,7 +493,6 @@ bool CCreatureTypeLimiter::limit(const Bonus &b, const CBonusSystemNode &node) c
 		}
 			break;
 		default:
-			//return false; //don't delete it if it's other type of node
 			return true;
 	}
 }

+ 11 - 3
server/CGameHandler.cpp

@@ -1017,9 +1017,17 @@ void CGameHandler::newTurn()
 			if (monthType < 40) //double growth
 			{
 				n.specialWeek = NewTurn::DOUBLE_GROWTH;
-
-				std::pair<int,int> newMonster(54, VLC->creh->pickRandomMonster(boost::ref(rand)));
-				n.creatureid = newMonster.second;
+				if (ALLCREATURESGETDOUBLEMONTHS)
+				{
+					std::pair<int,int> newMonster(54, VLC->creh->pickRandomMonster(boost::ref(rand)));
+					n.creatureid = newMonster.second;
+				}
+				else
+				{
+					std::set<TCreature>::const_iterator it = VLC->creh->doubledCreatures.begin();
+					std::advance (it, rand() % VLC->creh->doubledCreatures.size()); //picking random elelemnt of set is tiring
+					n.creatureid = *it;
+				}
 			}
 			else if (monthType < 90)
 				n.specialWeek = NewTurn::NORMAL;