فهرست منبع

1.Pandora and Event now give experience correctly
2.Better, but not complete handling for big exp values

DjWarmonger 16 سال پیش
والد
کامیت
fbc117b034
7فایلهای تغییر یافته به همراه12 افزوده شده و 8 حذف شده
  1. 1 1
      client/Client.h
  2. 6 2
      hch/CHeroHandler.cpp
  3. 1 1
      hch/CHeroHandler.h
  4. 1 1
      hch/CObjectHandler.cpp
  5. 1 1
      lib/IGameCallback.h
  6. 1 1
      server/CGameHandler.cpp
  7. 1 1
      server/CGameHandler.h

+ 1 - 1
client/Client.h

@@ -88,7 +88,7 @@ public:
 	void setBlockVis(int objid, bool bv){};
 	void setBlockVis(int objid, bool bv){};
 	void setOwner(int objid, ui8 owner){};
 	void setOwner(int objid, ui8 owner){};
 	void setHoverName(int objid, MetaString * name){};
 	void setHoverName(int objid, MetaString * name){};
-	void setObjProperty(int objid, int prop, int val){};
+	void setObjProperty(int objid, int prop, si64 val){};
 	void changePrimSkill(int ID, int which, si64 val, bool abs=false){};
 	void changePrimSkill(int ID, int which, si64 val, bool abs=false){};
 	void changeSecSkill(int ID, int which, int val, bool abs=false){}; 
 	void changeSecSkill(int ID, int which, int val, bool abs=false){}; 
 	void showInfoDialog(InfoWindow *iw){};
 	void showInfoDialog(InfoWindow *iw){};

+ 6 - 2
hch/CHeroHandler.cpp

@@ -383,13 +383,17 @@ unsigned int CHeroHandler::level (ui64 experience)
 	int i;
 	int i;
 	if (experience <= expPerLevel.back())
 	if (experience <= expPerLevel.back())
 	{
 	{
-		for(i = expPerLevel.size()-1; experience < expPerLevel[i]; i--);
+		
+		//i = expPerLevel.size() - 1;
+		//while (experience <= reqExp (i))
+		//	i--;
+		for (i = expPerLevel.size()-1; experience < expPerLevel[i]; i--);
 		return i + 1;
 		return i + 1;
 	}
 	}
 	else
 	else
 	{
 	{
 		//for(i = expPerLevel.size(); experience > reqExp(i); i++);
 		//for(i = expPerLevel.size(); experience > reqExp(i); i++);
-		i = expPerLevel.size();
+		i = expPerLevel.size() - 1;
 		while (experience > reqExp (i))
 		while (experience > reqExp (i))
 			i++;
 			i++;
 		return i;
 		return i;

+ 1 - 1
hch/CHeroHandler.h

@@ -93,7 +93,7 @@ class DLL_EXPORT CHeroHandler
 public:
 public:
 	std::vector<CHero*> heroes; //changed from nodrze
 	std::vector<CHero*> heroes; //changed from nodrze
 	std::vector<CHeroClass *> heroClasses;
 	std::vector<CHeroClass *> heroClasses;
-	std::vector<int> expPerLevel; //expPerLEvel[i] is amount of exp needed to reach level i; if it is not in this vector, multiplicate last value by 1,2 to get next value
+	std::vector<ui64> expPerLevel; //expPerLEvel[i] is amount of exp needed to reach level i; if it is not in this vector, multiplicate last value by 1,2 to get next value
 	
 	
 	struct SBallisticsLevelInfo
 	struct SBallisticsLevelInfo
 	{
 	{

+ 1 - 1
hch/CObjectHandler.cpp

@@ -2882,7 +2882,7 @@ void CGPandoraBox::giveContents( const CGHeroInstance *h, bool afterBattle ) con
 
 
 		//give exp
 		//give exp
 		if(gainedExp)
 		if(gainedExp)
-			cb->changePrimSkill(h->id,5,gainedExp,false);
+			cb->changePrimSkill(h->id,4,gainedExp,false);
 		//give prim skills
 		//give prim skills
 		for(int i=0; i<primskills.size(); i++)
 		for(int i=0; i<primskills.size(); i++)
 			if(primskills[i])
 			if(primskills[i])

+ 1 - 1
lib/IGameCallback.h

@@ -64,7 +64,7 @@ public:
 	virtual void setBlockVis(int objid, bool bv)=0;
 	virtual void setBlockVis(int objid, bool bv)=0;
 	virtual void setOwner(int objid, ui8 owner)=0;
 	virtual void setOwner(int objid, ui8 owner)=0;
 	virtual void setHoverName(int objid, MetaString * name)=0;
 	virtual void setHoverName(int objid, MetaString * name)=0;
-	virtual void setObjProperty(int objid, int prop, int val)=0;
+	virtual void setObjProperty(int objid, int prop, si64 val)=0;
 	virtual void changePrimSkill(int ID, int which, si64 val, bool abs=false)=0;
 	virtual void changePrimSkill(int ID, int which, si64 val, bool abs=false)=0;
 	virtual void changeSecSkill(int ID, int which, int val, bool abs=false)=0; 
 	virtual void changeSecSkill(int ID, int which, int val, bool abs=false)=0; 
 	virtual void showInfoDialog(InfoWindow *iw)=0;
 	virtual void showInfoDialog(InfoWindow *iw)=0;

+ 1 - 1
server/CGameHandler.cpp

@@ -1575,7 +1575,7 @@ int CGameHandler::getSelectedHero()
 	return IGameCallback::getSelectedHero(getCurrentPlayer())->id;
 	return IGameCallback::getSelectedHero(getCurrentPlayer())->id;
 }
 }
 
 
-void CGameHandler::setObjProperty( int objid, int prop, int val )
+void CGameHandler::setObjProperty( int objid, int prop, si64 val )
 {
 {
 	SetObjectProperty sob;
 	SetObjectProperty sob;
 	sob.id = objid;
 	sob.id = objid;

+ 1 - 1
server/CGameHandler.h

@@ -107,7 +107,7 @@ public:
 	void setBlockVis(int objid, bool bv);
 	void setBlockVis(int objid, bool bv);
 	void setOwner(int objid, ui8 owner);
 	void setOwner(int objid, ui8 owner);
 	void setHoverName(int objid, MetaString * name);
 	void setHoverName(int objid, MetaString * name);
-	void setObjProperty(int objid, int prop, int val);
+	void setObjProperty(int objid, int prop, si64 val);
 	void changePrimSkill(int ID, int which, si64 val, bool abs=false);
 	void changePrimSkill(int ID, int which, si64 val, bool abs=false);
 	void changeSecSkill(int ID, int which, int val, bool abs=false); 
 	void changeSecSkill(int ID, int which, int val, bool abs=false); 
 	void showInfoDialog(InfoWindow *iw);
 	void showInfoDialog(InfoWindow *iw);