diff --git a/client/CHeroWindow.cpp b/client/CHeroWindow.cpp index 2ae897432..eae3ce77a 100644 --- a/client/CHeroWindow.cpp +++ b/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(hero->level)); boost::replace_first(expArea->text, "%d", boost::lexical_cast(CGI->heroh->reqExp(hero->level+1))); diff --git a/client/CMessage.cpp b/client/CMessage.cpp index c6b442240..555a70b74 100644 --- a/client/CMessage.cpp +++ b/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()) { diff --git a/client/GUIClasses.cpp b/client/GUIClasses.cpp index 08e7beccb..f6bc6ffb4 100644 --- a/client/GUIClasses.cpp +++ b/client/GUIClasses.cpp @@ -669,6 +669,8 @@ CInfoWindow::~CInfoWindow() } for(int i=0;iactivate(); for(int i=0;iactivate(); + 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;ideactivate(); + if (slider) + slider->deactivate(); } void CInfoWindow::showAll( SDL_Surface * to ) diff --git a/client/GUIClasses.h b/client/GUIClasses.h index 1ebb92f82..c06586220 100644 --- a/client/GUIClasses.h +++ b/client/GUIClasses.h @@ -69,10 +69,12 @@ public: bool delComps; //whether comps will be deleted std::vector buttons; std::vector 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 &comps, std::vector > > &Buttons, bool delComps); //c-tor CInfoWindow(); //c-tor diff --git a/hch/CHeroHandler.cpp b/hch/CHeroHandler.cpp index db7fca608..165e4e48c 100644 --- a/hch/CHeroHandler.cpp +++ b/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 } } diff --git a/server/CGameHandler.cpp b/server/CGameHandler.cpp index 1e0fe46b1..37a870ff1 100644 --- a/server/CGameHandler.cpp +++ b/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(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);