Parcourir la source

Changed experience needed for level formula to follow H3 one.

Michał W. Urbańczyk il y a 16 ans
Parent
commit
c8cab314f1
1 fichiers modifiés avec 15 ajouts et 20 suppressions
  1. 15 20
      hch/CHeroHandler.cpp

+ 15 - 20
hch/CHeroHandler.cpp

@@ -380,37 +380,32 @@ void CHeroHandler::initHeroClasses()
 
 unsigned int CHeroHandler::level(unsigned int experience)
 {
-	int add=0;
-	while(experience>=expPerLevel[expPerLevel.size()-1])
+	int i;
+	if(experience <= expPerLevel.back())
 	{
-		experience/=1.2;
-		add+=1;
+		for(i = expPerLevel.size()-1; experience < expPerLevel[i]; i--);
+		return i + 1;
 	}
-	for(int i=expPerLevel.size()-1; i>=0; --i)
+	else
 	{
-		if(experience>=expPerLevel[i])
-			return 1+i+add;
+		for(i = expPerLevel.size(); experience > reqExp(i); i++);
+		return i - 1;
 	}
-	return -1;
 }
 
 unsigned int CHeroHandler::reqExp(unsigned int level)
 {
-	level-=1;
-	if(level<expPerLevel.size())
-		return expPerLevel[level];
+	if(!level)
+		return 0;
+
+	if(level<=expPerLevel.size())
+	{
+		return expPerLevel[level - 1];
+	}
 	else
 	{
-		unsigned int exp = expPerLevel[expPerLevel.size()-1];
-		level-=(expPerLevel.size()-1);
-		while(level>0)
-		{
-			--level;
-			exp*=1.2;
-		}
-		return exp;
+		return reqExp(level - 1) + (reqExp(level - 1) - reqExp(level - 2)) * 1.2; //inefficient but follows exactly H3 values
 	}
-	return -1;
 }
 
 void CHeroHandler::initTerrainCosts()