Explorar el Código

1.Removed unused code from hero handler
2.Minor changes in GUI
3.Attempt to manage different alignments of ships

DjWarmonger hace 16 años
padre
commit
ddd755c0c1
Se han modificado 6 ficheros con 40 adiciones y 23 borrados
  1. 1 1
      client/CHeroWindow.cpp
  2. 8 4
      client/CMessage.cpp
  3. 9 0
      client/GUIClasses.cpp
  4. 2 0
      client/GUIClasses.h
  5. 3 17
      hch/CHeroHandler.cpp
  6. 17 1
      server/CGameHandler.cpp

+ 1 - 1
client/CHeroWindow.cpp

@@ -231,7 +231,7 @@ void CHeroWindow::setHero(const CGHeroInstance *hero)
 		secSkillAreas[g]->hoverText = std::string(bufor);
 	}
 
-	//printing experience - original foramt does not support ui64
+	//printing experience - original format does not support ui64
 	expArea->text = CGI->generaltexth->allTexts[2].c_str();
 	boost::replace_first(expArea->text, "%d", boost::lexical_cast<std::string>(hero->level));
 	boost::replace_first(expArea->text, "%d", boost::lexical_cast<std::string>(CGI->heroh->reqExp(hero->level+1)));

+ 8 - 4
client/CMessage.cpp

@@ -414,27 +414,31 @@ void CMessage::drawIWindow(CInfoWindow * ret, std::string text, int player, int
 	}
 
 	// Clip window size
-	amax(txts.first, 80);
 	amax(txts.second, 50);
+	if (txts.second > conf.cc.resy - 150)
+		ret->slider = new CSlider(ret->pos.x + ret->pos.w, ret->pos.y, txts.second, boost::bind (&CInfoWindow::sliderMoved, ret, _1), txts.second, txts.second, 0, false, 0);
+	else
+		ret->slider = NULL;
+	amax(txts.first, 80);
 	amax(txts.first, comps.w);
 	amax(txts.first, bw);
 
 	amin(txts.first, conf.cc.resx - 150);
 	amin(txts.second, conf.cc.resy - 150);
 
-	ret->bitmap = drawBox1(txts.first+2*SIDE_MARGIN, txts.second+2*SIDE_MARGIN, player);
+	ret->bitmap = drawBox1 (txts.first + 2*SIDE_MARGIN, txts.second + 2*SIDE_MARGIN, player);
 	ret->pos.h=ret->bitmap->h;
 	ret->pos.w=ret->bitmap->w;
 	ret->pos.x=screen->w/2-(ret->pos.w/2);
 	ret->pos.y=screen->h/2-(ret->pos.h/2);
 
 	int curh = SIDE_MARGIN;
-	blitTextOnSur(txtg, fontHeight, curh,ret->bitmap);
+	blitTextOnSur (txtg, fontHeight, curh, ret->bitmap);
 
 	if (ret->components.size())
 	{
 		curh += BEFORE_COMPONENTS;
-		comps.blitCompsOnSur(_or, 10, curh, ret->bitmap);
+		comps.blitCompsOnSur (_or, 10, curh, ret->bitmap);
 	}
 	if(ret->buttons.size())
 	{

+ 9 - 0
client/GUIClasses.cpp

@@ -669,6 +669,8 @@ CInfoWindow::~CInfoWindow()
 	}
 	for(int i=0;i<buttons.size();i++)
 		delete buttons[i];
+	if (slider)
+		delete slider;
 }
 void CInfoWindow::activate()
 {
@@ -676,6 +678,11 @@ void CInfoWindow::activate()
 		components[i]->activate();
 	for(int i=0;i<buttons.size();i++)
 		buttons[i]->activate();
+	if (slider)
+		slider->activate();
+}
+void CInfoWindow::sliderMoved(int to)
+{
 }
 void CInfoWindow::deactivate()
 {
@@ -683,6 +690,8 @@ void CInfoWindow::deactivate()
 		components[i]->deactivate();
 	for(int i=0;i<buttons.size();i++)
 		buttons[i]->deactivate();
+	if (slider)
+		slider->deactivate();
 }
 
 void CInfoWindow::showAll( SDL_Surface * to )

+ 2 - 0
client/GUIClasses.h

@@ -69,10 +69,12 @@ public:
 	bool delComps; //whether comps will be deleted
 	std::vector<AdventureMapButton *> buttons;
 	std::vector<SComponent*> components;
+	CSlider *slider;
 	virtual void close();
 	void show(SDL_Surface * to);
 	void showAll(SDL_Surface * to);
 	void activate();
+	void sliderMoved(int to);
 	void deactivate();
 	CInfoWindow(std::string text, int player, int charperline, const std::vector<SComponent*> &comps, std::vector<std::pair<std::string,CFunctionList<void()> > > &Buttons, bool delComps); //c-tor
 	CInfoWindow(); //c-tor

+ 3 - 17
hch/CHeroHandler.cpp

@@ -468,16 +468,11 @@ unsigned int CHeroHandler::level (ui64 experience)
 	int i;
 	if (experience <= expPerLevel.back())
 	{
-		
-		//i = expPerLevel.size() - 1;
-		//while (experience <= reqExp (i))
-		//	i--;
 		for (i = expPerLevel.size()-1; experience < expPerLevel[i]; i--);
 		return i + 1;
 	}
 	else
 	{
-		//for(i = expPerLevel.size(); experience > reqExp(i); i++);
 		i = expPerLevel.size() - 1;
 		while (experience > reqExp (i))
 			i++;
@@ -490,27 +485,18 @@ ui64 CHeroHandler::reqExp (unsigned int level)
 	if(!level)
 		return 0;
 
-	if(level <= expPerLevel.size())
+	if (level <= expPerLevel.size())
 	{
-		return expPerLevel[level - 1];
+		return expPerLevel[level-1];
 	}
 	else
 	{
-		//ui64 exp = expPerLevel[expPerLevel.size()-1];
-		//level-=(expPerLevel.size()-1);
-		//while(level>0)
-		//{
-		//	--level;
-		//	exp*=1.2;
-		//}
-		//return exp;
 		while (level > expPerLevel.size())
 		{
 			int i = expPerLevel.size() - 1;
-			expPerLevel.push_back ((ui64)(expPerLevel[i] + (expPerLevel[i] - expPerLevel[i-1]) * 1.2));
+			expPerLevel.push_back (expPerLevel[i] + (expPerLevel[i] - expPerLevel[i-1]) * 1.2);
 		}
 		return expPerLevel[level-1];
-		//return (ui64)(reqExp(level - 1) + (reqExp(level - 1) - reqExp(level - 2)) * 1.2); //inefficient but follows exactly H3 values
 	}
 }
 

+ 17 - 1
server/CGameHandler.cpp

@@ -3332,6 +3332,7 @@ void CGameHandler::objectVisited( const CGObjectInstance * obj, const CGHeroInst
 bool CGameHandler::buildBoat( ui32 objid )
 {
 	const IShipyard *obj = IShipyard::castFrom(getObj(objid));
+	int boatType = 1; 
 
 	if(obj->state())
 	{
@@ -3370,7 +3371,22 @@ bool CGameHandler::buildBoat( ui32 objid )
 	//create boat
 	NewObject no;
 	no.ID = 8;
-	no.subID = 1;
+	if (obj->o->ID == TOWNI_TYPE)
+	{
+		switch ((static_cast<const CGTownInstance*>(obj))->alignment)
+		{
+		case 1: //good - standard
+			boatType = 1;
+			break;
+		case -1: //evil
+			boatType = 0;
+			break;
+		case 0: //neutral
+			boatType = 2;
+			break;
+		}
+	}
+	no.subID = boatType;
 	no.pos = tile + int3(1,0,0);
 	sendAndApply(&no);