mirror of
https://github.com/vcmi/vcmi.git
synced 2025-01-26 03:52:01 +02:00
parent
4cad2f4587
commit
3152e6d540
@ -1268,13 +1268,6 @@ void CGeniusAI::battleStart(const CCreatureSet *army1, const CCreatureSet *army2
|
|||||||
m_battleLogic = new BattleAI::CBattleLogic(m_cb, army1, army2, tile, hero1,
|
m_battleLogic = new BattleAI::CBattleLogic(m_cb, army1, army2, tile, hero1,
|
||||||
hero2, side);
|
hero2, side);
|
||||||
|
|
||||||
if(m_cb->battleGetTacticDist())
|
|
||||||
{
|
|
||||||
m_cb->waitTillRealize = false;
|
|
||||||
BattleAction endt = BattleAction::makeEndOFTacticPhase(m_cb->battleGetMySide());
|
|
||||||
m_cb->battleMakeTacticAction(&endt);
|
|
||||||
m_cb->waitTillRealize = true;
|
|
||||||
}
|
|
||||||
DbgBox("** CGeniusAI::battleStart **");
|
DbgBox("** CGeniusAI::battleStart **");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -183,26 +183,23 @@ int CBattleCallback::battleMakeAction(BattleAction* action)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
void CBattleCallback::sendRequest(const CPack* request)
|
||||||
void CBattleCallback::sendRequest(const T* request)
|
|
||||||
{
|
{
|
||||||
|
|
||||||
//TODO? should be part of CClient but it would have to be very tricky cause template/serialization issues
|
//TODO should be part of CClient (client owns connection, not CB)
|
||||||
|
//but it would have to be very tricky cause template/serialization issues
|
||||||
if(waitTillRealize)
|
if(waitTillRealize)
|
||||||
cl->waitingRequest.set(typeList.getTypeID<T>());
|
cl->waitingRequest.set(typeList.getTypeID(request));
|
||||||
|
|
||||||
{
|
cl->serv->sendPack(*request);
|
||||||
boost::unique_lock<boost::mutex> lock(*cl->serv->wmx);
|
|
||||||
*cl->serv << request;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(waitTillRealize)
|
if(waitTillRealize)
|
||||||
{
|
{
|
||||||
if(unlockGsWhenWaiting)
|
if(unlockGsWhenWaiting)
|
||||||
gs->mx->unlock_shared();
|
getGsMutex().unlock_shared();
|
||||||
cl->waitingRequest.waitWhileTrue();
|
cl->waitingRequest.waitWhileTrue();
|
||||||
if(unlockGsWhenWaiting)
|
if(unlockGsWhenWaiting)
|
||||||
gs->mx->lock_shared();
|
getGsMutex().lock_shared();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -246,7 +243,7 @@ void CCallback::setSelection(const CArmedInstance * obj)
|
|||||||
SetSelection ss;
|
SetSelection ss;
|
||||||
ss.player = player;
|
ss.player = player;
|
||||||
ss.id = obj->id;
|
ss.id = obj->id;
|
||||||
sendRequest(&ss);
|
sendRequest(&(CPackForClient&)ss);
|
||||||
|
|
||||||
if(obj->ID == HEROI_TYPE)
|
if(obj->ID == HEROI_TYPE)
|
||||||
{
|
{
|
||||||
@ -287,7 +284,7 @@ void CCallback::save( const std::string &fname )
|
|||||||
void CCallback::sendMessage(const std::string &mess)
|
void CCallback::sendMessage(const std::string &mess)
|
||||||
{
|
{
|
||||||
PlayerMessage pm(player, mess);
|
PlayerMessage pm(player, mess);
|
||||||
sendRequest(&pm);
|
sendRequest(&(CPackForClient&)pm);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CCallback::buildBoat( const IShipyard *obj )
|
void CCallback::buildBoat( const IShipyard *obj )
|
||||||
|
@ -89,7 +89,7 @@ private:
|
|||||||
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
template <typename T> void sendRequest(const T*request);
|
void sendRequest(const CPack *request);
|
||||||
CClient *cl;
|
CClient *cl;
|
||||||
//virtual bool hasAccess(int playerId) const;
|
//virtual bool hasAccess(int playerId) const;
|
||||||
|
|
||||||
|
@ -3830,11 +3830,14 @@ void CBattleInterface::startAction(const BattleAction* action)
|
|||||||
{
|
{
|
||||||
if(action->actionType == BattleAction::END_TACTIC_PHASE)
|
if(action->actionType == BattleAction::END_TACTIC_PHASE)
|
||||||
{
|
{
|
||||||
|
SDL_FreeSurface(menu);
|
||||||
menu = BitmapHandler::loadBitmap("CBAR.bmp");
|
menu = BitmapHandler::loadBitmap("CBAR.bmp");
|
||||||
|
|
||||||
graphics->blueToPlayersAdv(menu, curInt->playerID);
|
graphics->blueToPlayersAdv(menu, curInt->playerID);
|
||||||
|
bDefence->block(false);
|
||||||
|
bWait->block(false);
|
||||||
if(active)
|
if(active)
|
||||||
{
|
{
|
||||||
tacticsMode = false;
|
|
||||||
if(btactEnd && btactNext) //if the other side had tactics, there are no buttons
|
if(btactEnd && btactNext) //if the other side had tactics, there are no buttons
|
||||||
{
|
{
|
||||||
btactEnd->deactivate();
|
btactEnd->deactivate();
|
||||||
@ -3932,10 +3935,7 @@ void CBattleInterface::waitForAnims()
|
|||||||
void CBattleInterface::bEndTacticPhase()
|
void CBattleInterface::bEndTacticPhase()
|
||||||
{
|
{
|
||||||
btactEnd->block(true);
|
btactEnd->block(true);
|
||||||
bDefence->block(false);
|
tacticsMode = false;
|
||||||
bWait->block(false);
|
|
||||||
BattleAction endt = BattleAction::makeEndOFTacticPhase(curInt->cb->battleGetMySide());
|
|
||||||
curInt->cb->battleMakeTacticAction(&endt);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool immobile(const CStack *s)
|
static bool immobile(const CStack *s)
|
||||||
|
@ -892,6 +892,12 @@ void CPlayerInterface::battleAttack(const BattleAttack *ba)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CPlayerInterface::yourTacticPhase(int distance)
|
||||||
|
{
|
||||||
|
while(battleInt->tacticsMode)
|
||||||
|
boost::this_thread::sleep(boost::posix_time::millisec(1));
|
||||||
|
}
|
||||||
|
|
||||||
void CPlayerInterface::showComp(SComponent comp)
|
void CPlayerInterface::showComp(SComponent comp)
|
||||||
{
|
{
|
||||||
boost::unique_lock<boost::recursive_mutex> un(*pim);
|
boost::unique_lock<boost::recursive_mutex> un(*pim);
|
||||||
|
@ -230,6 +230,7 @@ public:
|
|||||||
void battleObstaclesRemoved(const std::set<si32> & removedObstacles) OVERRIDE; //called when a certain set of obstacles is removed from batlefield; IDs of them are given
|
void battleObstaclesRemoved(const std::set<si32> & removedObstacles) OVERRIDE; //called when a certain set of obstacles is removed from batlefield; IDs of them are given
|
||||||
void battleCatapultAttacked(const CatapultAttack & ca) OVERRIDE; //called when catapult makes an attack
|
void battleCatapultAttacked(const CatapultAttack & ca) OVERRIDE; //called when catapult makes an attack
|
||||||
void battleStacksRemoved(const BattleStacksRemoved & bsr) OVERRIDE; //called when certain stack is completely removed from battlefield
|
void battleStacksRemoved(const BattleStacksRemoved & bsr) OVERRIDE; //called when certain stack is completely removed from battlefield
|
||||||
|
void yourTacticPhase(int distance) OVERRIDE;
|
||||||
|
|
||||||
//-------------//
|
//-------------//
|
||||||
void showArtifactAssemblyDialog(ui32 artifactID, ui32 assembleTo, bool assemble, CFunctionList<void()> onYes, CFunctionList<void()> onNo);
|
void showArtifactAssemblyDialog(ui32 artifactID, ui32 assembleTo, bool assemble, CFunctionList<void()> onYes, CFunctionList<void()> onNo);
|
||||||
|
@ -2042,7 +2042,7 @@ OptionsTab::PlayerOptionsEntry::PlayerOptionsEntry( OptionsTab *owner, PlayerSet
|
|||||||
for(int i = 0; i < 6; i++)
|
for(int i = 0; i < 6; i++)
|
||||||
btns[i] = NULL;
|
btns[i] = NULL;
|
||||||
|
|
||||||
selectButtons(false);
|
selectButtons();
|
||||||
|
|
||||||
assert(SEL->current && SEL->current->mapHeader);
|
assert(SEL->current && SEL->current->mapHeader);
|
||||||
const PlayerInfo &p = SEL->current->mapHeader->players[s.color];
|
const PlayerInfo &p = SEL->current->mapHeader->players[s.color];
|
||||||
@ -2080,12 +2080,12 @@ void OptionsTab::PlayerOptionsEntry::showAll( SDL_Surface * to )
|
|||||||
printAtMiddleWBLoc(CGI->generaltexth->arraytxt[206+whoCanPlay], 28, 34, FONT_TINY, 8, zwykly, to);
|
printAtMiddleWBLoc(CGI->generaltexth->arraytxt[206+whoCanPlay], 28, 34, FONT_TINY, 8, zwykly, to);
|
||||||
}
|
}
|
||||||
|
|
||||||
void OptionsTab::PlayerOptionsEntry::selectButtons(bool onlyHero)
|
void OptionsTab::PlayerOptionsEntry::selectButtons()
|
||||||
{
|
{
|
||||||
if(!btns[0])
|
if(!btns[0])
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if( (!onlyHero && pi.defaultCastle() != -1) //fixed tow
|
if( (pi.defaultCastle() != -1) //fixed tow
|
||||||
|| (SEL->isGuest() && s.color != playerColor)) //or not our player
|
|| (SEL->isGuest() && s.color != playerColor)) //or not our player
|
||||||
{
|
{
|
||||||
btns[0]->disable();
|
btns[0]->disable();
|
||||||
|
@ -184,7 +184,7 @@ public:
|
|||||||
enum {HUMAN_OR_CPU, HUMAN, CPU} whoCanPlay;
|
enum {HUMAN_OR_CPU, HUMAN, CPU} whoCanPlay;
|
||||||
|
|
||||||
PlayerOptionsEntry(OptionsTab *owner, PlayerSettings &S);
|
PlayerOptionsEntry(OptionsTab *owner, PlayerSettings &S);
|
||||||
void selectButtons(bool onlyHero = true); //hides unavailable buttons
|
void selectButtons(); //hides unavailable buttons
|
||||||
void showAll(SDL_Surface * to);
|
void showAll(SDL_Surface * to);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -523,7 +523,8 @@ void CClient::handlePack( CPack * pack )
|
|||||||
}
|
}
|
||||||
|
|
||||||
void CClient::updatePaths()
|
void CClient::updatePaths()
|
||||||
{
|
{
|
||||||
|
//TODO? lazy evaluation? paths now can get recalculated multiple times upon various game events
|
||||||
const CGHeroInstance *h = getSelectedHero();
|
const CGHeroInstance *h = getSelectedHero();
|
||||||
if (h)//if we have selected hero...
|
if (h)//if we have selected hero...
|
||||||
calculatePaths(h);
|
calculatePaths(h);
|
||||||
@ -594,6 +595,11 @@ void CClient::battleStarted(const BattleInfo * info)
|
|||||||
battleints[info->sides[1]]->battleStart(info->belligerents[0], info->belligerents[1], info->tile, info->heroes[0], info->heroes[1], 1);
|
battleints[info->sides[1]]->battleStart(info->belligerents[0], info->belligerents[1], info->tile, info->heroes[0], info->heroes[1], 1);
|
||||||
if(vstd::contains(battleints,254))
|
if(vstd::contains(battleints,254))
|
||||||
battleints[254]->battleStart(info->belligerents[0], info->belligerents[1], info->tile, info->heroes[0], info->heroes[1], 1);
|
battleints[254]->battleStart(info->belligerents[0], info->belligerents[1], info->tile, info->heroes[0], info->heroes[1], 1);
|
||||||
|
|
||||||
|
if(info->tacticDistance && vstd::contains(battleints,info->sides[info->tacticsSide]))
|
||||||
|
{
|
||||||
|
boost::thread hlp = boost::thread(&CClient::commenceTacticPhaseForInt, this, battleints[info->sides[info->tacticsSide]]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CClient::loadNeutralBattleAI()
|
void CClient::loadNeutralBattleAI()
|
||||||
@ -624,6 +630,17 @@ void CClient::calculatePaths(const CGHeroInstance *h)
|
|||||||
gs->calculatePaths(h, *pathInfo);
|
gs->calculatePaths(h, *pathInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CClient::commenceTacticPhaseForInt(CBattleGameInterface *battleInt)
|
||||||
|
{
|
||||||
|
setThreadName(-1, "CClient::commenceTacticPhaseForInt");
|
||||||
|
try
|
||||||
|
{
|
||||||
|
battleInt->yourTacticPhase(gs->curB->tacticDistance);
|
||||||
|
MakeAction ma(BattleAction::makeEndOFTacticPhase(battleInt->playerID));
|
||||||
|
serv->sendPack(ma);
|
||||||
|
} HANDLE_EXCEPTION
|
||||||
|
}
|
||||||
|
|
||||||
template void CClient::serialize( CISer<CLoadFile> &h, const int version );
|
template void CClient::serialize( CISer<CLoadFile> &h, const int version );
|
||||||
template void CClient::serialize( COSer<CSaveFile> &h, const int version );
|
template void CClient::serialize( COSer<CSaveFile> &h, const int version );
|
||||||
|
|
||||||
|
@ -165,6 +165,7 @@ public:
|
|||||||
|
|
||||||
void handlePack( CPack * pack ); //applies the given pack and deletes it
|
void handlePack( CPack * pack ); //applies the given pack and deletes it
|
||||||
void battleStarted(const BattleInfo * info);
|
void battleStarted(const BattleInfo * info);
|
||||||
|
void commenceTacticPhaseForInt(CBattleGameInterface *battleInt); //will be called as separate thread
|
||||||
|
|
||||||
void commitPackage(CPackForClient *pack) OVERRIDE;
|
void commitPackage(CPackForClient *pack) OVERRIDE;
|
||||||
|
|
||||||
|
@ -241,6 +241,11 @@ void HeroVisit::applyCl( CClient *cl )
|
|||||||
INTERFACE_CALL_IF_PRESENT(hero->tempOwner, heroVisit, hero, obj, starting);
|
INTERFACE_CALL_IF_PRESENT(hero->tempOwner, heroVisit, hero, obj, starting);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void NewTurn::applyCl( CClient *cl )
|
||||||
|
{
|
||||||
|
cl->updatePaths();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void GiveBonus::applyCl( CClient *cl )
|
void GiveBonus::applyCl( CClient *cl )
|
||||||
{
|
{
|
||||||
@ -711,6 +716,8 @@ void PackageApplied::applyCl( CClient *cl )
|
|||||||
INTERFACE_CALL_IF_PRESENT(player, requestRealized, this);
|
INTERFACE_CALL_IF_PRESENT(player, requestRealized, this);
|
||||||
if(cl->waitingRequest.get() == packType)
|
if(cl->waitingRequest.get() == packType)
|
||||||
cl->waitingRequest.setn(false);
|
cl->waitingRequest.setn(false);
|
||||||
|
else if(cl->waitingRequest.get())
|
||||||
|
tlog3 << "Suprising server message!\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
void SystemMessage::applyCl( CClient *cl )
|
void SystemMessage::applyCl( CClient *cl )
|
||||||
|
@ -71,14 +71,39 @@ int CCreature::getQuantityID(const int & quantity)
|
|||||||
if (quantity<250)
|
if (quantity<250)
|
||||||
return 5;
|
return 5;
|
||||||
if (quantity<500)
|
if (quantity<500)
|
||||||
return 5;
|
|
||||||
if (quantity<1000)
|
|
||||||
return 6;
|
return 6;
|
||||||
if (quantity<4000)
|
if (quantity<1000)
|
||||||
return 7;
|
return 7;
|
||||||
return 8;
|
return 8;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int CCreature::estimateCreatureCount(int countID)
|
||||||
|
{
|
||||||
|
switch(countID)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
return 3;
|
||||||
|
case 1:
|
||||||
|
return 8;
|
||||||
|
case 2:
|
||||||
|
return 15;
|
||||||
|
case 3:
|
||||||
|
return 35;
|
||||||
|
case 4:
|
||||||
|
return 75;
|
||||||
|
case 5:
|
||||||
|
return 175;
|
||||||
|
case 6:
|
||||||
|
return 375;
|
||||||
|
case 7:
|
||||||
|
return 750;
|
||||||
|
case 8:
|
||||||
|
return 2500;
|
||||||
|
default:
|
||||||
|
assert("Wrong countID!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool CCreature::isDoubleWide() const
|
bool CCreature::isDoubleWide() const
|
||||||
{
|
{
|
||||||
return doubleWide;
|
return doubleWide;
|
||||||
|
@ -58,6 +58,7 @@ public:
|
|||||||
bool isEvil () const;
|
bool isEvil () const;
|
||||||
si32 maxAmount(const std::vector<si32> &res) const; //how many creatures can be bought
|
si32 maxAmount(const std::vector<si32> &res) const; //how many creatures can be bought
|
||||||
static int getQuantityID(const int & quantity); //0 - a few, 1 - several, 2 - pack, 3 - lots, 4 - horde, 5 - throng, 6 - swarm, 7 - zounds, 8 - legion
|
static int getQuantityID(const int & quantity); //0 - a few, 1 - several, 2 - pack, 3 - lots, 4 - horde, 5 - throng, 6 - swarm, 7 - zounds, 8 - legion
|
||||||
|
static int estimateCreatureCount(int countID); //reverse version of above function, returns middle of range
|
||||||
bool isMyUpgrade(const CCreature *anotherCre) const;
|
bool isMyUpgrade(const CCreature *anotherCre) const;
|
||||||
|
|
||||||
bool valid() const;
|
bool valid() const;
|
||||||
|
@ -197,4 +197,9 @@ void CAdventureAI::battleStacksHealedRes(const std::vector<std::pair<ui32, ui32>
|
|||||||
BattleAction CAdventureAI::activeStack(const CStack * stack)
|
BattleAction CAdventureAI::activeStack(const CStack * stack)
|
||||||
{
|
{
|
||||||
return battleAI->activeStack(stack);
|
return battleAI->activeStack(stack);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CAdventureAI::yourTacticPhase(int distance)
|
||||||
|
{
|
||||||
|
battleAI->yourTacticPhase(distance);
|
||||||
}
|
}
|
@ -67,6 +67,7 @@ public:
|
|||||||
|
|
||||||
//battle call-ins
|
//battle call-ins
|
||||||
virtual BattleAction activeStack(const CStack * stack)=0; //called when it's turn of that stack
|
virtual BattleAction activeStack(const CStack * stack)=0; //called when it's turn of that stack
|
||||||
|
virtual void yourTacticPhase(int distance){}; //called when interface has opportunity to use Tactics skill -> use cb->battleMakeTacticAction from this function
|
||||||
};
|
};
|
||||||
|
|
||||||
/// Central class for managing human player / AI interface logic
|
/// Central class for managing human player / AI interface logic
|
||||||
@ -116,6 +117,7 @@ public:
|
|||||||
|
|
||||||
//battle interface
|
//battle interface
|
||||||
virtual BattleAction activeStack(const CStack * stack);
|
virtual BattleAction activeStack(const CStack * stack);
|
||||||
|
virtual void yourTacticPhase(int distance);
|
||||||
virtual void battleNewRound(int round);
|
virtual void battleNewRound(int round);
|
||||||
virtual void battleCatapultAttacked(const CatapultAttack & ca);
|
virtual void battleCatapultAttacked(const CatapultAttack & ca);
|
||||||
virtual void battleStart(const CCreatureSet *army1, const CCreatureSet *army2, int3 tile, const CGHeroInstance *hero1, const CGHeroInstance *hero2, bool side);
|
virtual void battleStart(const CCreatureSet *army1, const CCreatureSet *army2, int3 tile, const CGHeroInstance *hero1, const CGHeroInstance *hero2, bool side);
|
||||||
|
@ -2990,7 +2990,7 @@ InfoAboutHero & InfoAboutHero::operator=( const InfoAboutHero & iah )
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
ArmyDescriptor::ArmyDescriptor(const CArmedInstance *army, bool detailed)
|
ArmyDescriptor::ArmyDescriptor(const CArmedInstance *army, bool detailed) : isDetailed(detailed)
|
||||||
{
|
{
|
||||||
for(TSlots::const_iterator i = army->Slots().begin(); i != army->Slots().end(); i++)
|
for(TSlots::const_iterator i = army->Slots().begin(); i != army->Slots().end(); i++)
|
||||||
{
|
{
|
||||||
@ -3001,11 +3001,27 @@ ArmyDescriptor::ArmyDescriptor(const CArmedInstance *army, bool detailed)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ArmyDescriptor::ArmyDescriptor()
|
ArmyDescriptor::ArmyDescriptor() : isDetailed(true)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int ArmyDescriptor::getStrength() const
|
||||||
|
{
|
||||||
|
ui64 ret = 0;
|
||||||
|
if(isDetailed)
|
||||||
|
{
|
||||||
|
for(const_iterator i = begin(); i != end(); i++)
|
||||||
|
ret += i->second.type->AIValue * i->second.count;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for(const_iterator i = begin(); i != end(); i++)
|
||||||
|
ret += i->second.type->AIValue * CCreature::estimateCreatureCount(i->second.count);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
DuelParameters::SideSettings::StackSettings::StackSettings()
|
DuelParameters::SideSettings::StackSettings::StackSettings()
|
||||||
: type(-1), count(0)
|
: type(-1), count(0)
|
||||||
{
|
{
|
||||||
|
@ -76,8 +76,11 @@ namespace boost
|
|||||||
//numbers of creatures are exact numbers if detailed else they are quantity ids (0 - a few, 1 - several and so on; additionaly -1 - unknown)
|
//numbers of creatures are exact numbers if detailed else they are quantity ids (0 - a few, 1 - several and so on; additionaly -1 - unknown)
|
||||||
struct ArmyDescriptor : public std::map<TSlot, CStackBasicDescriptor>
|
struct ArmyDescriptor : public std::map<TSlot, CStackBasicDescriptor>
|
||||||
{
|
{
|
||||||
|
bool isDetailed;
|
||||||
DLL_EXPORT ArmyDescriptor(const CArmedInstance *army, bool detailed); //not detailed -> quantity ids as count
|
DLL_EXPORT ArmyDescriptor(const CArmedInstance *army, bool detailed); //not detailed -> quantity ids as count
|
||||||
DLL_EXPORT ArmyDescriptor();
|
DLL_EXPORT ArmyDescriptor();
|
||||||
|
|
||||||
|
DLL_EXPORT int getStrength() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct DLL_EXPORT InfoAboutHero
|
struct DLL_EXPORT InfoAboutHero
|
||||||
|
@ -243,6 +243,12 @@ CPack * CConnection::retreivePack()
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CConnection::sendPack(const CPack &pack)
|
||||||
|
{
|
||||||
|
boost::unique_lock<boost::mutex> lock(*wmx);
|
||||||
|
*this << &pack; //packs has to be sent as polymorphic pointers!
|
||||||
|
}
|
||||||
|
|
||||||
CSaveFile::CSaveFile( const std::string &fname )
|
CSaveFile::CSaveFile( const std::string &fname )
|
||||||
:sfile(NULL)
|
:sfile(NULL)
|
||||||
{
|
{
|
||||||
|
@ -922,6 +922,7 @@ public:
|
|||||||
~CConnection(void);
|
~CConnection(void);
|
||||||
|
|
||||||
CPack *retreivePack(); //gets from server next pack (allocates it with new)
|
CPack *retreivePack(); //gets from server next pack (allocates it with new)
|
||||||
|
void sendPack(const CPack &pack);
|
||||||
};
|
};
|
||||||
|
|
||||||
DLL_EXPORT std::ostream &operator<<(std::ostream &str, const CConnection &cpc);
|
DLL_EXPORT std::ostream &operator<<(std::ostream &str, const CConnection &cpc);
|
||||||
|
@ -952,6 +952,7 @@ struct NewTurn : public CPackForClient //101
|
|||||||
{
|
{
|
||||||
enum weekType {NORMAL, DOUBLE_GROWTH, BONUS_GROWTH, DEITYOFFIRE, PLAGUE, CUSTOM, NO_ACTION, NONE};
|
enum weekType {NORMAL, DOUBLE_GROWTH, BONUS_GROWTH, DEITYOFFIRE, PLAGUE, CUSTOM, NO_ACTION, NONE};
|
||||||
|
|
||||||
|
void applyCl(CClient *cl);
|
||||||
DLL_EXPORT void applyGs(CGameState *gs);
|
DLL_EXPORT void applyGs(CGameState *gs);
|
||||||
|
|
||||||
struct Hero
|
struct Hero
|
||||||
|
Loading…
x
Reference in New Issue
Block a user