1
0
mirror of https://github.com/vcmi/vcmi.git synced 2024-12-24 22:14:36 +02:00

Working windmill, water wheel, mystical garden (not tested).

Info windows.
Minor changes.
This commit is contained in:
Michał W. Urbańczyk 2007-11-23 22:33:55 +00:00
parent d8103fd242
commit 736af28c05
20 changed files with 472 additions and 122 deletions

View File

@ -93,14 +93,14 @@ public:
void draw();
};
class CResourceBar
:public ClickableR, public CIntObject
:public ClickableR
{
SDL_Surface * bg;
void clickRight(tribool down);
void refresh();
};
class CDataBar
:public ClickableR, public CIntObject
:public ClickableR
{
SDL_Surface * bg;
void clickRight(tribool down);

View File

@ -38,6 +38,11 @@ void CCallback::newTurn()
{
//std::map<int, PlayerState>::iterator i = gs->players.begin() ;
gs->day++;
for (int i=0;i<CGI->objh->objInstances.size();i++)
{
if (CGI->objh->objInstances[i]->state)
CGI->objh->objInstances[i]->state->newTurn();
}
for ( std::map<int, PlayerState>::iterator i=gs->players.begin() ; i!=gs->players.end();i++)
{
for (int j=0;j<(*i).second.heroes.size();j++)
@ -373,6 +378,37 @@ int CScriptCallback::getSelectedHero()
ret = -1;;
return ret;
}
int CScriptCallback::getDate(int mode)
{
int temp;
switch (mode)
{
case 0:
return gs->day;
break;
case 1:
temp = (gs->day)%7;
if (temp)
return temp;
else return 7;
break;
case 2:
temp = ((gs->day-1)/7)+1;
if (!(temp%4))
return 4;
else
return (temp%4);
break;
case 3:
return ((gs->day-1)/28)+1;
break;
}
return 0;
}
void CScriptCallback::giveResource(int player, int which, int val)
{
gs->players[player].resources[which]+=val;
}
void CLuaCallback::registerFuncs(lua_State * L)
{
lua_newtable(L);
@ -397,7 +433,8 @@ void CLuaCallback::registerFuncs(lua_State * L)
lua_setglobal(L, "vcmi");
#undef REGISTER_C_FUNC(x)
#undef REGISTER_C_FUNC(x)
}
int CLuaCallback::getPos(lua_State * L)//(CGObjectInstance * object);
{

View File

@ -61,6 +61,8 @@ public:
void showInfoDialog(int player, std::string text, std::vector<SComponent*> * components);
int getHeroOwner(int heroID);
int getSelectedHero();
int getDate(int mode=0);
void giveResource(int player, int which, int val);
friend void initGameState(CGameInfo * cgi);
};
class CLuaCallback : public CScriptCallback

View File

@ -5,7 +5,6 @@
BOOST_TRIBOOL_THIRD_STATE(outOfRange)
using namespace boost::logic;
class CAdvMapInt;
class CCallback;
class CGlobalAI;
class CGHeroInstance;

186
CLua.cpp
View File

@ -15,6 +15,8 @@
#include "CCallback.h"
#include "hch/CGeneralTextHandler.h"
#include <sstream>
#include "CPlayerInterface.h"
#pragma warning (disable : 4311)
bool getGlobalFunc(lua_State * L, std::string fname)
{
unsigned int hash = lua_calchash(fname.c_str(), fname.size());
@ -25,7 +27,7 @@ bool getGlobalFunc(lua_State * L, std::string fname)
CObjectScript::CObjectScript()
{
language == ESLan::UNDEF;
language = ESLan::UNDEF;
//std::cout << "Tworze obiekt objectscript "<<this<<std::endl;
}
@ -107,7 +109,7 @@ void CLua::findFS(std::string fname)
CLuaObjectScript::CLuaObjectScript(std::string filename)
{
language == ESLan::LUA;
language = ESLan::LUA;
open(filename);
//binit = bnewobject = bonherovisit = brightext = false;
//std::cout << "Tworze obiekt CLuaObjectScript "<<this<<std::endl;
@ -163,6 +165,7 @@ std::string CLuaObjectScript::hoverText(CGObjectInstance *os)
}
std::string ret = lua_tostring(is,1);
lua_settop(is, 0);
return ret;
}
std::string CCPPObjectScript::hoverText(CGObjectInstance *os)
@ -197,6 +200,26 @@ void CVisitableOPH::onHeroVisit(CGObjectInstance *os, int heroID)
};
void CVisitableOPH::onNAHeroVisit(CGObjectInstance *os, int heroID, bool alreadyVisited)
{
int w=0, ot=0;
switch(os->ID)
{
case 51:
w=0;
ot=80;
break;
case 23:
w=1;
ot=39;
break;
case 61:
w=2;
ot=100;
break;
case 32:
w=3;
ot=59;
break;
}
if (!alreadyVisited)
{
switch (os->ID)
@ -206,36 +229,21 @@ void CVisitableOPH::onNAHeroVisit(CGObjectInstance *os, int heroID, bool already
case 61:
case 32:
{
int w=0, ot=0;
switch(os->ID)
{
case 51:
w=0;
ot=80;
break;
case 23:
w=1;
ot=29;
break;
case 61:
w=2;
ot=100;
break;
case 32:
w=3;
ot=59;
break;
}
cb->changePrimSkill(heroID,w,1);
std::vector<SComponent*> weko;
weko.push_back(new SComponent(SComponent::primskill,1,1));
cb->showInfoDialog(cb->getHeroOwner(heroID),CGI->objh->advobtxt[ot],&weko);
for (int ii=0; ii<weko.size();ii++)
delete weko[ii];
weko.push_back(new SComponent(SComponent::primskill,w,1));
cb->showInfoDialog(cb->getHeroOwner(heroID),CGI->objh->advobtxt[ot],&weko); //TODO: maybe we have memory leak with these windows
//for (int ii=0; ii<weko.size();ii++)
// delete weko[ii];
break;
}
}
}
else
{
ot++;
cb->showInfoDialog(cb->getHeroOwner(heroID),CGI->objh->advobtxt[ot],&std::vector<SComponent*>());
}
}
std::vector<int> CVisitableOPH::yourObjects()
@ -282,6 +290,104 @@ std::string CVisitableOPH::hoverText(CGObjectInstance *os)
return CGI->objh->objects[os->defInfo->id].name + add;
}
void CVisitableOPW::onNAHeroVisit(CGObjectInstance *os, int heroID, bool alreadyVisited)
{
int mid;
switch (os->ID)
{
case 55:
mid = 92;
break;
case 112:
mid = 170;
break;
case 109:
mid = 164;
break;
}
if (alreadyVisited)
{
if (os->ID!=112)
mid++;
else
mid--;
cb->showInfoDialog(cb->getHeroOwner(heroID),CGI->objh->advobtxt[mid],&std::vector<SComponent*>()); //TODO: maybe we have memory leak with these windows
}
else
{
int type, sub, val;
type = SComponent::resource;
switch (os->ID)
{
case 55:
if (rand()%2)
{
sub = 5;
val = 5;
}
else
{
sub = 6;
val = 500;
}
break;
case 112:
mid = 170;
sub = rand() % 6;
val = (rand() % 4) + 3;
break;
case 109:
mid = 164;
sub = 6;
if(cb->getDate(2)<2)
val = 500;
else
val = 1000;
}
SComponent * com = new SComponent((SComponent::Etype)type,sub,val);
std::vector<SComponent*> weko;
weko.push_back(com);
cb->giveResource(cb->getHeroOwner(heroID),sub,val);
cb->showInfoDialog(cb->getHeroOwner(heroID),CGI->objh->advobtxt[mid],&weko);
visited[os] = true;
}
}
void CVisitableOPW::newTurn ()
{
if (cb->getDate(1)==1)
{
for (std::map<CGObjectInstance*,bool>::iterator i = visited.begin(); i != visited.end(); i++)
{
(*i).second = false;
}
}
}
void CVisitableOPW::newObject(CGObjectInstance *os)
{
visited.insert(std::pair<CGObjectInstance*,bool>(os,false));
}
void CVisitableOPW::onHeroVisit(CGObjectInstance *os, int heroID)
{
if(visited[os])
onNAHeroVisit(os,heroID,true);
else
onNAHeroVisit(os,heroID,false);
}
std::vector<int> CVisitableOPW::yourObjects() //returns IDs of objects which are handled by script
{
std::vector<int> ret(3);
ret.push_back(55); //mystical garden
ret.push_back(112); //windmill
ret.push_back(109); //water wheel
return ret;
}
std::string CVisitableOPW::hoverText(CGObjectInstance *os)
{
return CGI->objh->objects[os->defInfo->id].name + " " + ( (visited[os]) ? (CGI->generaltexth->allTexts[352]) : (CGI->generaltexth->allTexts[353])) ;
}
//std::string SComponent::getSubtitle()
//{
@ -292,30 +398,4 @@ std::string CVisitableOPH::hoverText(CGObjectInstance *os)
//}
//void SComponent::getDescription(Etype Type, int Subtype)
//{
//}
SComponent::SComponent(Etype Type, int Subtype, int Val)
{
switch (Type)
{
case primskill:
description = CGI->generaltexth->arraytxt[2+Subtype];
std::ostringstream oss;
oss << ((Val>0)?("+"):("-")) << Val << " " << CGI->heroh->pskillsn[Subtype];
subtitle = oss.str();
break;
}
type = Type;
subtype = Subtype;
val = Val;
}
SDL_Surface * SComponent::getImg()
{
switch (type)
{
case primskill:
return CGI->heroh->pskillsb[subtype].ourImages[0].bitmap;
break;
}
return NULL;
}
//}

26
CLua.h
View File

@ -25,6 +25,8 @@ public:
virtual void newObject(CGObjectInstance *os){};
virtual void onHeroVisit(CGObjectInstance *os, int heroID){};
virtual std::string hoverText(CGObjectInstance *os){return "";};
virtual void newTurn (){};
//TODO: implement functions below:
virtual void equipArtefact(int HID, int AID, int slot, bool putOn){}; //putOn==0 means that artifact is taken off
@ -34,7 +36,6 @@ public:
//virtual void mouseClick (down,left,screen?, pos??){};
virtual void heroLevelUp (int HID){}; //add possibility of changing available sec. skills
};
class CScript
{
@ -100,19 +101,16 @@ class CVisitableOPH : public CCPPObjectScript //once per hero
friend void initGameState(CGameInfo * cgi);
};
struct SComponent
class CVisitableOPW : public CCPPObjectScript //once per week
{
enum Etype
{
primskill, secskill, resource, creature, artifact
} type;
int subtype;
int val;
CVisitableOPW(CScriptCallback * CB):CCPPObjectScript(CB){};
std::map<CGObjectInstance*,bool> visited;
void onNAHeroVisit(CGObjectInstance *os, int heroID, bool alreadyVisited);
void newObject(CGObjectInstance *os);
void onHeroVisit(CGObjectInstance *os, int heroID);
std::vector<int> yourObjects(); //returns IDs of objects which are handled by script
std::string hoverText(CGObjectInstance *os);
void newTurn ();
std::string description; //r-click
std::string subtitle;
SComponent(Etype Type, int Subtype, int Val);
//SComponent(const & SComponent r);
SDL_Surface * getImg();
friend void initGameState(CGameInfo * cgi);
};

View File

@ -218,7 +218,9 @@ void initGameState(CGameInfo * cgi)
/****************************C++ OBJECT SCRIPTS************************************************/
std::map<int,CCPPObjectScript*> scripts;
CScriptCallback * csc = new CScriptCallback();
csc->gs = cgi->state;
handleCPPObjS(&scripts,new CVisitableOPH(csc));
handleCPPObjS(&scripts,new CVisitableOPW(csc));
//created map
@ -330,6 +332,8 @@ int _tmain(int argc, _TCHAR* argv[])
cgi->screenh = new CScreenHandler;
cgi->screenh->initScreen();
THC std::cout<<"Preparing first handlers: "<<tmh.getDif()<<std::endl;
//colors initialization
SDL_Color p;
p.unused = 0;
@ -352,6 +356,7 @@ int _tmain(int argc, _TCHAR* argv[])
p.r = 0x84; p.g = 0x84; p.b = 0x84;//gray
cgi->neutralColor = p;//gray
//colors initialized
THC std::cout<<"Preparing players' colours: "<<tmh.getDif()<<std::endl;
CMessage::init();
cgi->townh = new CTownHandler;
cgi->townh->loadNames();
@ -364,6 +369,7 @@ int _tmain(int argc, _TCHAR* argv[])
cgi->heroh = heroh;
cgi->generaltexth = new CGeneralTextHandler;
cgi->generaltexth->load();
THC std::cout<<"Preparing more handlers: "<<tmh.getDif()<<std::endl;
//initializing hero flags
@ -641,7 +647,7 @@ int _tmain(int argc, _TCHAR* argv[])
//hero flags initialized
THC std::cout<<"Preparing first handlers: "<<tmh.getDif()<<std::endl;
THC std::cout<<"Initializing colours and flags: "<<tmh.getDif()<<std::endl;
CPreGame * cpg = new CPreGame(); //main menu and submenus
THC std::cout<<"Initialization CPreGame (together): "<<tmh.getDif()<<std::endl;
cpg->mush = mush;

View File

@ -275,45 +275,76 @@ CInfoWindow * CMessage::genIWindow(std::string text, int player, int charperline
{
//TODO: support for more than one component
CInfoWindow * ret = new CInfoWindow();
std::vector<std::string> * brtext = breakText(text,32,true,true);
std::vector<std::string> * brdtext = breakText(comps[0]->subtitle,12,true,true);
ret->components = comps;
//for (int i=0;i<comps.size();i++)
// comps[i]->
std::vector<std::string> * brtext = breakText(text,charperline,true,true);
std::vector<std::string> * brdtext;
if (comps.size())
brdtext = breakText(comps[0]->subtitle,12,true,true);
else
brdtext = NULL;
std::vector<std::vector<SDL_Surface*> > * txtg = drawText(brtext);
std::pair<int,int> txts = getMaxSizes(txtg);
txts.second = txts.second
+ 30 //space to first component
+ comps[0]->getImg()->h
+ brdtext->size() * 10 //subtitle //!!!!!!!!!!!!!!!!!!!!
+ 20 // space between subtitle and button
+ ok->ourImages[0].bitmap->h //button
+ 30; //after button
+ 15 //after button
+ 20; // space between subtitle and button
if (comps.size())
txts.second = txts.second
+ 30 //space to first component
+ comps[0]->getImg()->h
+ 5 //img <-> subtitle
+ brdtext->size() * 10; //subtitle //!!!!!!!!!!!!!!!!!!!!
ret->bitmap = drawBox1(txts.first+70,txts.second+70,0);
ret->pos.h=ret->bitmap->h;
ret->pos.w=ret->bitmap->w;
int curh = 30; //gorny margines
for (int i=0; i<txtg->size();i++)
{
int lw=0;
for (int j=0;j<(*txtg)[i].size();j++)
lw+=(*txtg)[i][j]->w;
int pw = ret->bitmap->w/2;
//int pw = Tmar, ph = Lmar;
pw -= lw/2;
//for (int i=0; i<txtg->size();i++)
//{
// int lw=0;
// for (int j=0;j<(*txtg)[i].size();j++)
// lw+=(*txtg)[i][j]->w;
// int pw = ret->bitmap->w/2, ph = ret->bitmap->h/2;
// //int pw = Tmar, ph = Lmar;
// pw -= lw/2;
// ph -= (19*txtg->size())/2;
int tw = pw;
for (int j=0;j<(*txtg)[i].size();j++) //blit text
{
//std::stringstream n;
//n <<"temp_"<<i<<"__"<<j<<".bmp";
//SDL_SaveBMP(ret->bitmap,n.str().c_str());
blitAt((*txtg)[i][j],tw,curh+i*19,ret->bitmap);
tw+=(*txtg)[i][j]->w;
SDL_FreeSurface((*txtg)[i][j]);
}
}
curh += (19 * txtg->size()); //wys. tekstu
// int tw = pw;
// for (int j=0;j<(*txtg)[i].size();j++)
// {
// //std::stringstream n;
// //n <<"temp_"<<i<<"__"<<j<<".bmp";
// blitAt((*txtg)[i][j],tw,ph+i*19,ret->bitmap);
// //SDL_SaveBMP(ret->bitmap,n.str().c_str());
// tw+=(*txtg)[i][j]->w;
// SDL_FreeSurface((*txtg)[i][j]);
// }
//}
if (comps.size())
{
curh += 30;
comps[0]->pos.x = (ret->bitmap->w/2) - ((comps[0]->getImg()->w)/2);
comps[0]->pos.y = curh;
blitAt(comps[0]->getImg(),comps[0]->pos.x,comps[0]->pos.y,ret->bitmap);
curh += comps[0]->getImg()->h + 5; //obrazek + przerwa
for (int i=0; i<brdtext->size();i++) //descr.
{
SDL_Surface * tesu = TTF_RenderText_Blended(GEOR13,(*brdtext)[i].c_str(),zwykly);
blitAt(tesu,((comps[0]->getImg()->w - tesu->w)/2)+comps[0]->pos.x,curh,ret->bitmap);
curh+=tesu->h;
SDL_FreeSurface(tesu);
}
}
curh += 20; //to buttton
ret->okb.posr.x = (ret->bitmap->w/2) - (ret->okb.imgs[0][0]->w/2);
ret->okb.posr.y = curh;
ret->okb.show();
curh+=ret->okb.imgs[0][0]->h;
return ret;
}

View File

@ -13,6 +13,7 @@ class CDefHandler;
struct SComponent;
namespace NMessage
{
extern CDefHandler * ok, *cancel;
extern std::vector<std::vector<SDL_Surface*> > piecesOfBox; //in colors of all players
extern SDL_Surface * background ;
}

View File

@ -14,6 +14,7 @@
#include <sstream>
#include "hch/CHeroHandler.h"
#include "SDL_framerate.h"
#include "hch/CGeneralTextHandler.h"
using namespace CSDL_Ext;
class OCM_HLP_CGIN
@ -24,11 +25,142 @@ public:
return (*a.first)<(*b.first);
}
} ocmptwo_cgin ;
CInfoWindow::CInfoWindow()
:okb(NMessage::ok,NULL,&CInfoWindow::okClicked)
{
okb.ourObj = this;
okb.delg = this;
}
void CInfoWindow::okClicked(tribool down)
{
if (!down)
close();
}
void CInfoWindow::close()
{
for (int i=0;i<components.size();i++)
delete components[i];
okb.deactivate();
SDL_FreeSurface(bitmap);
bitmap = NULL;
LOCPLINT->removeObjToBlit(this);
//delete this;
LOCPLINT->adventureInt->show();
}
CInfoWindow::~CInfoWindow()
{
}
SComponent::SComponent(Etype Type, int Subtype, int Val)
{
std::ostringstream oss;
switch (Type)
{
case primskill:
description = CGI->generaltexth->arraytxt[2+Subtype];
oss << ((Val>0)?("+"):("-")) << Val << " " << CGI->heroh->pskillsn[Subtype];
subtitle = oss.str();
break;
case resource:
//description = CGI->generaltexth->arraytxt[2+Subtype];
std::ostringstream oss;
oss << Val;
subtitle = oss.str();
break;
}
type = Type;
subtype = Subtype;
val = Val;
SDL_Surface * temp = getImg();
pos.w = temp->w;
pos.h = temp->h;
}
SDL_Surface * SComponent::getImg()
{
switch (type)
{
case primskill:
return CGI->heroh->pskillsb->ourImages[subtype].bitmap;
break;
case resource:
return CGI->heroh->resources->ourImages[subtype].bitmap;
break;
}
return NULL;
}
void SComponent::clickRight (tribool down)
{
LOCPLINT->adventureInt->handleRightClick(description,down,this);
}
void SComponent::activate()
{
ClickableR::activate();
}
void SComponent::deactivate()
{
ClickableR::deactivate();
}
CSimpleWindow::~CSimpleWindow()
{
if (bitmap)
{
SDL_FreeSurface(bitmap);
bitmap=NULL;
bitmap=NULL;
}
}
template <typename T>CSCButton<T>::CSCButton(CDefHandler * img, CIntObject * obj, void(T::*poin)(tribool), T* Delg)
{
ourObj = obj;
delg = Delg;
func = poin;
imgs.resize(1);
for (int i =0; i<img->ourImages.size();i++)
{
imgs[0].push_back(img->ourImages[i].bitmap);
}
pos.w = imgs[0][0]->w;
pos.h = imgs[0][0]->h;
state = 0;
}
template <typename T> void CSCButton<T>::clickLeft (tribool down)
{
if (down)
{
state=1;
}
else
{
state=0;
}
show();
if (delg)
(delg->*func)(down);
pressedL=state;
}
template <typename T> void CSCButton<typename T>::activate()
{
ClickableL::activate();
}
template <typename T> void CSCButton<typename T>::deactivate()
{
ClickableL::deactivate();
}
template <typename T> void CSCButton<typename T>::show()
{
if (delg)
{
blitAt(imgs[curimg][state],posr.x,posr.y,delg->bitmap);
updateRect(&genRect(pos.h,pos.w,posr.x,posr.y),delg->bitmap);
}
else
{
CButtonBase::show();
}
}
CButtonBase::CButtonBase()
{
@ -1061,7 +1193,20 @@ void CPlayerInterface::heroPrimarySkillChanged(const CGHeroInstance * hero, int
adventureInt->infoBar.draw();
return;
}
void CPlayerInterface::showInfoDialog(std::string text, std::vector<SComponent*> components)
void CPlayerInterface::showInfoDialog(std::string text, std::vector<SComponent*> & components)
{
;
adventureInt->hide();
CInfoWindow * temp = CMessage::genIWindow(text,LOCPLINT->playerID,32,components);
LOCPLINT->objsToBlit.push_back(temp);
temp->pos.x=300-(temp->pos.w/2);
temp->pos.y=300-(temp->pos.h/2);
temp->okb.pos.x = temp->okb.posr.x + temp->pos.x;
temp->okb.pos.y = temp->okb.posr.y + temp->pos.y;
temp->okb.activate();
}
void CPlayerInterface::removeObjToBlit(CSimpleWindow* obj)
{
objsToBlit.erase
(std::find(objsToBlit.begin(),objsToBlit.end(),obj));
//delete obj;
}

View File

@ -10,7 +10,7 @@ class CDefHandler;
struct HeroMoveDetails;
class CDefEssential;
class CGHeroInstance;
struct SComponent;
class CAdvMapInt;
class CIntObject //interface object
{
public:
@ -25,19 +25,13 @@ public:
CSimpleWindow():bitmap(NULL),owner(NULL){};
virtual ~CSimpleWindow();
};
class CInfoWindow : public CSimpleWindow //text + comp. + ok button
{
public:
std::vector<SComponent *> components;
CInfoWindow(){};
};
class CButtonBase : public virtual CIntObject //basic buttton class
{
public:
int type; //advmapbutton=2
bool abs;
bool active;
CIntObject * ourObj;
CIntObject * ourObj; // "owner"
int state;
std::vector< std::vector<SDL_Surface*> > imgs;
int curimg;
@ -45,6 +39,7 @@ public:
virtual void activate()=0;
virtual void deactivate()=0;
CButtonBase();
virtual ~CButtonBase(){};
};
class ClickableL : public virtual CIntObject //for left-clicks
{
@ -87,6 +82,54 @@ public:
virtual void activate()=0;
virtual void deactivate()=0;
};
template <typename T> class CSCButton: public CButtonBase, public ClickableL //prosty guzik, ktory tylko zmienia obrazek
{
public:
int3 posr; //position in the bitmap
int state;
T* delg;
void(T::*func)(tribool);
CSCButton(CDefHandler * img, CIntObject * obj, void(T::*poin)(tribool), T* Delg=NULL);
void clickLeft (tribool down);
void activate();
void deactivate();
void show();
};
class CInfoWindow : public CSimpleWindow //text + comp. + ok button
{
public:
CSCButton<CInfoWindow> okb;
std::vector<SComponent*> components;
void okClicked(tribool down);
void close();
CInfoWindow();
~CInfoWindow();
};
class SComponent : public ClickableR
{
public:
enum Etype
{
primskill, secskill, resource, creature, artifact
} type;
int subtype;
int val;
std::string description; //r-click
std::string subtitle;
SComponent(Etype Type, int Subtype, int Val);
//SComponent(const & SComponent r);
SDL_Surface * getImg();
void clickRight (tribool down);
void activate();
void deactivate();
};
class CPlayerInterface : public CGameInterface
{
public:
@ -121,7 +164,8 @@ public:
void handleEvent(SDL_Event * sEvent);
void init(CCallback * CB);
int3 repairScreenPos(int3 pos);
void showInfoDialog(std::string text, std::vector<SComponent*> components);
void showInfoDialog(std::string text, std::vector<SComponent*> & components);
void removeObjToBlit(CSimpleWindow* obj);
CPlayerInterface(int Player, int serial);
};

Binary file not shown.

View File

@ -91,13 +91,13 @@ public:
: Button(Pos,Fun,Imgs,Sel,gr),key(My){ourPoinGroup=gr;};
void select(bool on=true) {(*this).Button::select(on);ourPoinGroup->setYour(this);CPG->printRating();}
};
template <class T=ttt> class CPoinGroup :public CGroup<T>
template <class T> class CPoinGroup :public CGroup<T>
{
public:
int * gdzie; //where (po polsku, bo by by³o s³owo kluczowe :/)
void setYour(IntSelBut<T> * your){*gdzie=your->key;};
};
template <class T=ttt> class CGroup
template <class T> class CGroup
{
public:
Button<T> * selected;

View File

@ -40,6 +40,7 @@ void CHeroHandler::loadPortraits()
}
of.close();
pskillsb = CGI->spriteh->giveDef("PSKILL.DEF");
resources = CGI->spriteh->giveDef("RESOUR82.DEF");
std::string strs = CGI->bitmaph->getTextFile("PRISKILL.TXT");
int itr=0;

View File

@ -69,7 +69,7 @@ public:
unsigned int getTileCost(EterrainType & ttype, Eroad & rdtype, Eriver & rvtype);
unsigned int getLowestCreatureSpeed();
unsigned int getAdditiveMoveBonus();
unsigned float getMultiplicativeMoveBonus();
float getMultiplicativeMoveBonus();
static int3 convertPosition(int3 src, bool toh3m); //toh3m=true: manifest->h3m; toh3m=false: h3m->manifest
int3 getPosition(bool h3m) const; //h3m=true - returns position of hero object; h3m=false - returns position of hero 'manifestation'
int getSightDistance() const; //returns sight distance of this hero
@ -89,7 +89,7 @@ public:
std::vector<CHero*> heroes; //by³o nodrze
std::vector<CHeroClass *> heroClasses;
std::vector<CDefHandler *> flags1, flags2, flags3, flags4; //flags blitted on heroes when ,
CDefHandler * pskillsb; //82x93
CDefHandler * pskillsb, *resources; //82x93
std::vector<std::string> pskillsn;
unsigned int level(unsigned int experience);
void loadHeroes();

View File

@ -6,7 +6,6 @@
#include <cctype>
#include <cstring>
#include "boost/filesystem.hpp" // includes all needed Boost.Filesystem declarations
int readNormalNr (int pos, int bytCon, unsigned char * str)
{
int ret=0;

View File

@ -8,6 +8,7 @@
#include "CDefObjInfoHandler.h"
#include "../CLua.h"
#include "CHeroHandler.h"
#include <boost/algorithm/string/replace.hpp>
void CObjectHandler::loadObjects()
{
int ID=0;
@ -28,6 +29,8 @@ void CObjectHandler::loadObjects()
while (it<buf.length()-1)
{
CGeneralTextHandler::loadToIt(temp,buf,it,3);
temp = temp.substr(1,temp.length()-2);
boost::algorithm::replace_all(temp,"\"\"","\"");
advobtxt.push_back(temp);
}
@ -122,9 +125,9 @@ bool CGObjectInstance::visitableAt(int x, int y) const //returns true if ibject
}
bool CGObjectInstance::operator<(const CGObjectInstance & cmp) const //screen printing priority comparing
{
if(defInfo->printPriority==1 && defInfo->printPriority==0)
if(defInfo->printPriority==1 && cmp.defInfo->printPriority==0)
return true;
if(defInfo->printPriority==1 && defInfo->printPriority==0)
if(cmp.defInfo->printPriority==1 && defInfo->printPriority==0)
return false;
if(this->pos.y<cmp.pos.y)
return true;
@ -277,6 +280,7 @@ CGObjectInstance::CGObjectInstance(const CGObjectInstance & right)
defInfo = right.defInfo;
info = right.info;
defObjInfoNumber = right.defObjInfoNumber;
blockVisit = false;
//state = new CLuaObjectScript(right.state->);
//*state = *right.state;
//state = right.state;
@ -291,6 +295,7 @@ CGObjectInstance& CGObjectInstance::operator=(const CGObjectInstance & right)
defInfo = right.defInfo;
info = right.info;
defObjInfoNumber = right.defObjInfoNumber;
blockVisit = right.blockVisit;
//state = new CLuaObjectScript();
//*state = *right.state;
tempOwner = right.tempOwner;

View File

@ -367,6 +367,7 @@ public:
int defObjInfoNumber;
int tempOwner; //uzywane dla szybkosci, skrypt ma obowiazek aktualizowac te zmienna
bool blockVisit;
virtual bool isHero() const;
int getOwner() const;
@ -405,7 +406,7 @@ public:
unsigned int getTileCost(EterrainType & ttype, Eroad & rdtype, Eriver & rvtype);
unsigned int getLowestCreatureSpeed();
unsigned int getAdditiveMoveBonus();
unsigned float getMultiplicativeMoveBonus();
float getMultiplicativeMoveBonus();
static int3 convertPosition(int3 src, bool toh3m); //toh3m=true: manifest->h3m; toh3m=false: h3m->manifest
int3 getPosition(bool h3m) const; //h3m=true - returns position of hero object; h3m=false - returns position of hero 'manifestation'
int getSightDistance() const; //returns sight distance of this hero

4
map.h
View File

@ -1,6 +1,6 @@
#ifndef MAPD_H
#define MAPD_H
#pragma warning (disable : 4482)
#include <string>
#include <vector>
#include "global.h"
@ -174,7 +174,7 @@ public:
struct Mapa
{
Eformat version; // version of map Eformat
bool twoLevel; // if map has underground level
int twoLevel; // if map has underground level
int difficulty; // 0 easy - 4 impossible
int levelLimit;
bool areAnyPLayers; // if there are any playable players on map

View File

@ -1524,6 +1524,7 @@ std::string CMapHandler::getDefName(int id, int subid)
if(CGI->dobjinfo->objs[i].type==id && CGI->dobjinfo->objs[i].subtype==subid)
return CGI->dobjinfo->objs[i].defName;
}
throw new std::exception("Def not found.");
}
bool CMapHandler::printObject(CGObjectInstance *obj)