mirror of
https://github.com/vcmi/vcmi.git
synced 2024-12-26 22:57:00 +02:00
parent
ff1c224a97
commit
c4c592b773
@ -977,7 +977,7 @@ void VCAI::makeTurn()
|
|||||||
boost::shared_lock<boost::shared_mutex> gsLock(cb->getGsMutex());
|
boost::shared_lock<boost::shared_mutex> gsLock(cb->getGsMutex());
|
||||||
setThreadName("VCAI::makeTurn");
|
setThreadName("VCAI::makeTurn");
|
||||||
|
|
||||||
BNLOG("Player %d starting turn", playerID);
|
BNLOG("Player %d starting turn", static_cast<int>(playerID.getNum()));
|
||||||
INDENT;
|
INDENT;
|
||||||
|
|
||||||
switch(cb->getDate(Date::DAY_OF_WEEK))
|
switch(cb->getDate(Date::DAY_OF_WEEK))
|
||||||
@ -2051,7 +2051,7 @@ HeroPtr VCAI::primaryHero() const
|
|||||||
|
|
||||||
void VCAI::endTurn()
|
void VCAI::endTurn()
|
||||||
{
|
{
|
||||||
tlog4 << "Player " << playerID << " ends turn\n";
|
tlog4 << "Player " << static_cast<int>(playerID.getNum()) << " ends turn\n";
|
||||||
if(!status.haveTurn())
|
if(!status.haveTurn())
|
||||||
{
|
{
|
||||||
tlog1 << "Not having turn at the end of turn???\n";
|
tlog1 << "Not having turn at the end of turn???\n";
|
||||||
@ -2062,7 +2062,7 @@ void VCAI::endTurn()
|
|||||||
cb->endTurn();
|
cb->endTurn();
|
||||||
} while(status.haveTurn()); //for some reasons, our request may fail -> stop requesting end of turn only after we've received a confirmation that it's over
|
} while(status.haveTurn()); //for some reasons, our request may fail -> stop requesting end of turn only after we've received a confirmation that it's over
|
||||||
|
|
||||||
tlog4 << "Player " << playerID << " ended turn\n";
|
tlog4 << "Player " << static_cast<int>(playerID.getNum()) << " ended turn\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
bool VCAI::fulfillsGoal (CGoal &goal, CGoal &mainGoal)
|
bool VCAI::fulfillsGoal (CGoal &goal, CGoal &mainGoal)
|
||||||
|
@ -152,6 +152,10 @@ CHeroWindow::CHeroWindow(const CGHeroInstance *hero):
|
|||||||
secSkillImages.push_back(new CAnimImage("SECSKILL", 0, 0, r.x, r.y));
|
secSkillImages.push_back(new CAnimImage("SECSKILL", 0, 0, r.x, r.y));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//dismiss / quest log
|
||||||
|
new CTextBox(CGI->generaltexth->jktexts[8], Rect(370, 430, 65, 35), 0, FONT_SMALL, TOPLEFT, Colors::WHITE);
|
||||||
|
new CTextBox(CGI->generaltexth->jktexts[9], Rect(510, 430, 65, 35), 0, FONT_SMALL, TOPLEFT, Colors::WHITE);
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////???????????????
|
//////////////////////////////////////////////////////////////////////////???????????????
|
||||||
|
|
||||||
//primary skills & exp and mana
|
//primary skills & exp and mana
|
||||||
@ -338,10 +342,6 @@ void CHeroWindow::showAll(SDL_Surface * to)
|
|||||||
printAtMiddleLoc(CGI->generaltexth->jktexts[3], 193, 99, FONT_SMALL, Colors::YELLOW, to);
|
printAtMiddleLoc(CGI->generaltexth->jktexts[3], 193, 99, FONT_SMALL, Colors::YELLOW, to);
|
||||||
printAtMiddleLoc(CGI->generaltexth->jktexts[4], 262, 99, FONT_SMALL, Colors::YELLOW, to);
|
printAtMiddleLoc(CGI->generaltexth->jktexts[4], 262, 99, FONT_SMALL, Colors::YELLOW, to);
|
||||||
|
|
||||||
//dismiss / quest log
|
|
||||||
printAtMiddleWBLoc(CGI->generaltexth->jktexts[8], 388, 455, FONT_SMALL, 50, Colors::WHITE, to);
|
|
||||||
printAtMiddleWBLoc(CGI->generaltexth->jktexts[9], 534, 455, FONT_SMALL, 50, Colors::WHITE, to);
|
|
||||||
|
|
||||||
//printing primary skills' amounts
|
//printing primary skills' amounts
|
||||||
for(int m=0; m<4; ++m)
|
for(int m=0; m<4; ++m)
|
||||||
{
|
{
|
||||||
|
@ -201,6 +201,7 @@ void CSoundHandler::initSpellsSounds(const std::vector< ConstTransitivePtr<CSpel
|
|||||||
// Plays a sound, and return its channel so we can fade it out later
|
// Plays a sound, and return its channel so we can fade it out later
|
||||||
int CSoundHandler::playSound(soundBase::soundID soundID, int repeats)
|
int CSoundHandler::playSound(soundBase::soundID soundID, int repeats)
|
||||||
{
|
{
|
||||||
|
assert(soundID < soundBase::sound_after_last);
|
||||||
if (!initialized)
|
if (!initialized)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
|
@ -1029,6 +1029,7 @@ public:
|
|||||||
invalid=0,
|
invalid=0,
|
||||||
sound_todo=1, // temp entry until code is fixed
|
sound_todo=1, // temp entry until code is fixed
|
||||||
VCMI_SOUND_LIST
|
VCMI_SOUND_LIST
|
||||||
|
sound_after_last
|
||||||
};
|
};
|
||||||
#undef VCMI_SOUND_NAME
|
#undef VCMI_SOUND_NAME
|
||||||
#undef VCMI_SOUND_FILE
|
#undef VCMI_SOUND_FILE
|
||||||
|
@ -373,7 +373,7 @@ void CClient::newGame( CConnection *con, StartInfo *si )
|
|||||||
else
|
else
|
||||||
sensibleAILimit--;
|
sensibleAILimit--;
|
||||||
playerint[color] = static_cast<CGameInterface*>(CDynLibHandler::getNewAI(AItoGive));
|
playerint[color] = static_cast<CGameInterface*>(CDynLibHandler::getNewAI(AItoGive));
|
||||||
tlog1 << "Player " << color << " will be lead by " << AItoGive << std::endl;
|
tlog1 << "Player " << static_cast<int>(color.getNum()) << " will be lead by " << AItoGive << std::endl;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -3657,9 +3657,11 @@ CTavernWindow::CTavernWindow(const CGObjectInstance *TavernObj):
|
|||||||
|
|
||||||
h1 = new HeroPortrait(selected,0,72,299,h[0]);
|
h1 = new HeroPortrait(selected,0,72,299,h[0]);
|
||||||
h2 = new HeroPortrait(selected,1,162,299,h[1]);
|
h2 = new HeroPortrait(selected,1,162,299,h[1]);
|
||||||
if(h[0])
|
|
||||||
selected = 0;
|
selected = 0;
|
||||||
else
|
if (!h[0])
|
||||||
|
selected = 1;
|
||||||
|
if (!h[0] && !h[1])
|
||||||
selected = -1;
|
selected = -1;
|
||||||
oldSelected = -1;
|
oldSelected = -1;
|
||||||
|
|
||||||
@ -3675,23 +3677,23 @@ CTavernWindow::CTavernWindow(const CGObjectInstance *TavernObj):
|
|||||||
if(LOCPLINT->cb->getResourceAmount(Res::GOLD) < 2500) //not enough gold
|
if(LOCPLINT->cb->getResourceAmount(Res::GOLD) < 2500) //not enough gold
|
||||||
{
|
{
|
||||||
recruit->hoverTexts[0] = CGI->generaltexth->tavernInfo[0]; //Cannot afford a Hero
|
recruit->hoverTexts[0] = CGI->generaltexth->tavernInfo[0]; //Cannot afford a Hero
|
||||||
recruit->block(2);
|
recruit->block(true);
|
||||||
}
|
}
|
||||||
else if(LOCPLINT->cb->howManyHeroes(false) >= 8)
|
else if(LOCPLINT->cb->howManyHeroes(false) >= 8)
|
||||||
{
|
{
|
||||||
recruit->hoverTexts[0] = CGI->generaltexth->tavernInfo[1]; //Cannot recruit. You already have %d Heroes.
|
recruit->hoverTexts[0] = CGI->generaltexth->tavernInfo[1]; //Cannot recruit. You already have %d Heroes.
|
||||||
boost::algorithm::replace_first(recruit->hoverTexts[0],"%d",boost::lexical_cast<std::string>(LOCPLINT->cb->howManyHeroes()));
|
boost::algorithm::replace_first(recruit->hoverTexts[0],"%d",boost::lexical_cast<std::string>(LOCPLINT->cb->howManyHeroes()));
|
||||||
recruit->block(2);
|
recruit->block(true);
|
||||||
}
|
}
|
||||||
else if(LOCPLINT->castleInt && LOCPLINT->castleInt->town->visitingHero)
|
else if(LOCPLINT->castleInt && LOCPLINT->castleInt->town->visitingHero)
|
||||||
{
|
{
|
||||||
recruit->hoverTexts[0] = CGI->generaltexth->tavernInfo[2]; //Cannot recruit. You already have a Hero in this town.
|
recruit->hoverTexts[0] = CGI->generaltexth->tavernInfo[2]; //Cannot recruit. You already have a Hero in this town.
|
||||||
recruit->block(2);
|
recruit->block(true);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if(!h[0])
|
if(selected == -1)
|
||||||
recruit->block(1);
|
recruit->block(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
CCS->videoh->open("TAVERN.BIK");
|
CCS->videoh->open("TAVERN.BIK");
|
||||||
@ -5394,7 +5396,7 @@ void CUniversityWindow::CItem::clickRight(tribool down, bool previousState)
|
|||||||
if(down)
|
if(down)
|
||||||
{
|
{
|
||||||
CRClickPopup::createAndPush(CGI->generaltexth->skillInfoTexts[ID][0],
|
CRClickPopup::createAndPush(CGI->generaltexth->skillInfoTexts[ID][0],
|
||||||
new CComponent(CComponent::secskill, ID, 0));
|
new CComponent(CComponent::secskill, ID, 1));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -56,12 +56,10 @@ MacroString::MacroString(const std::string &format)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
while (!start_pos == std::string::npos);
|
while (start_pos != std::string::npos);
|
||||||
|
|
||||||
//no more macros
|
//no more macros
|
||||||
items.push_back(Item(Item::STRING,format.substr(end_pos)));
|
items.push_back(Item(Item::STRING,format.substr(end_pos)));
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string MacroString::build(const GetValue& getValue) const
|
std::string MacroString::build(const GetValue& getValue) const
|
||||||
|
@ -646,7 +646,7 @@ void CCreatureHandler::loadStackExperience(CCreature * creature, const JsonNode
|
|||||||
{
|
{
|
||||||
BOOST_FOREACH (const JsonNode &exp, input.Vector())
|
BOOST_FOREACH (const JsonNode &exp, input.Vector())
|
||||||
{
|
{
|
||||||
auto bonus = JsonUtils::parseBonus (exp["bonus"]); // FIXME: memory leak? Only copies of bonus is added to creature
|
auto bonus = JsonUtils::parseBonus (exp["bonus"]);
|
||||||
bonus->source = Bonus::STACK_EXPERIENCE;
|
bonus->source = Bonus::STACK_EXPERIENCE;
|
||||||
bonus->duration = Bonus::PERMANENT;
|
bonus->duration = Bonus::PERMANENT;
|
||||||
const JsonVector &values = exp["values"].Vector();
|
const JsonVector &values = exp["values"].Vector();
|
||||||
@ -679,6 +679,7 @@ void CCreatureHandler::loadStackExperience(CCreature * creature, const JsonNode
|
|||||||
++lowerLimit;
|
++lowerLimit;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
delete bonus;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2293,13 +2293,12 @@ void CGTownInstance::removeCapitols (PlayerColor owner) const
|
|||||||
|
|
||||||
int CGTownInstance::getBoatType() const
|
int CGTownInstance::getBoatType() const
|
||||||
{
|
{
|
||||||
const CCreature *c = VLC->creh->creatures[town->creatures.front().front()];
|
switch (VLC->townh->factions[town->typeID].alignment)
|
||||||
if (c->isGood())
|
{
|
||||||
return 1;
|
case EAlignment::EVIL : return 0;
|
||||||
else if (c->isEvil())
|
case EAlignment::GOOD : return 1;
|
||||||
return 0;
|
case EAlignment::NEUTRAL : return 2;
|
||||||
else //neutral
|
}
|
||||||
return 2;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int CGTownInstance::getMarketEfficiency() const
|
int CGTownInstance::getMarketEfficiency() const
|
||||||
@ -4877,7 +4876,7 @@ void CGBonusingObject::onHeroVisit( const CGHeroInstance * h ) const
|
|||||||
{
|
{
|
||||||
bool visited = h->hasBonusFrom(Bonus::OBJECT,ID);
|
bool visited = h->hasBonusFrom(Bonus::OBJECT,ID);
|
||||||
int messageID=0;
|
int messageID=0;
|
||||||
int bonusMove = 0, sound = -1;
|
int bonusMove = 0;
|
||||||
ui32 descr_id = 0;
|
ui32 descr_id = 0;
|
||||||
InfoWindow iw;
|
InfoWindow iw;
|
||||||
iw.player = h->tempOwner;
|
iw.player = h->tempOwner;
|
||||||
@ -4894,14 +4893,14 @@ void CGBonusingObject::onHeroVisit( const CGHeroInstance * h ) const
|
|||||||
{
|
{
|
||||||
case Obj::BUOY:
|
case Obj::BUOY:
|
||||||
messageID = 21;
|
messageID = 21;
|
||||||
sound = soundBase::MORALE;
|
iw.soundID = soundBase::MORALE;
|
||||||
gbonus.bonus.type = Bonus::MORALE;
|
gbonus.bonus.type = Bonus::MORALE;
|
||||||
gbonus.bonus.val = +1;
|
gbonus.bonus.val = +1;
|
||||||
descr_id = 94;
|
descr_id = 94;
|
||||||
break;
|
break;
|
||||||
case Obj::SWAN_POND:
|
case Obj::SWAN_POND:
|
||||||
messageID = 29;
|
messageID = 29;
|
||||||
sound = soundBase::LUCK;
|
iw.soundID = soundBase::LUCK;
|
||||||
gbonus.bonus.type = Bonus::LUCK;
|
gbonus.bonus.type = Bonus::LUCK;
|
||||||
gbonus.bonus.val = 2;
|
gbonus.bonus.val = 2;
|
||||||
descr_id = 67;
|
descr_id = 67;
|
||||||
@ -4909,14 +4908,14 @@ void CGBonusingObject::onHeroVisit( const CGHeroInstance * h ) const
|
|||||||
break;
|
break;
|
||||||
case Obj::FAERIE_RING:
|
case Obj::FAERIE_RING:
|
||||||
messageID = 49;
|
messageID = 49;
|
||||||
sound = soundBase::LUCK;
|
iw.soundID = soundBase::LUCK;
|
||||||
gbonus.bonus.type = Bonus::LUCK;
|
gbonus.bonus.type = Bonus::LUCK;
|
||||||
gbonus.bonus.val = 1;
|
gbonus.bonus.val = 1;
|
||||||
descr_id = 71;
|
descr_id = 71;
|
||||||
break;
|
break;
|
||||||
case Obj::FOUNTAIN_OF_FORTUNE:
|
case Obj::FOUNTAIN_OF_FORTUNE:
|
||||||
messageID = 55;
|
messageID = 55;
|
||||||
sound = soundBase::LUCK;
|
iw.soundID = soundBase::LUCK;
|
||||||
gbonus.bonus.type = Bonus::LUCK;
|
gbonus.bonus.type = Bonus::LUCK;
|
||||||
gbonus.bonus.val = rand()%5 - 1;
|
gbonus.bonus.val = rand()%5 - 1;
|
||||||
descr_id = 69;
|
descr_id = 69;
|
||||||
@ -4924,7 +4923,7 @@ void CGBonusingObject::onHeroVisit( const CGHeroInstance * h ) const
|
|||||||
break;
|
break;
|
||||||
case Obj::IDOL_OF_FORTUNE:
|
case Obj::IDOL_OF_FORTUNE:
|
||||||
messageID = 62;
|
messageID = 62;
|
||||||
sound = soundBase::experience;
|
iw.soundID = soundBase::experience;
|
||||||
|
|
||||||
gbonus.bonus.val = 1;
|
gbonus.bonus.val = 1;
|
||||||
descr_id = 68;
|
descr_id = 68;
|
||||||
@ -4942,13 +4941,13 @@ void CGBonusingObject::onHeroVisit( const CGHeroInstance * h ) const
|
|||||||
break;
|
break;
|
||||||
case Obj::MERMAID:
|
case Obj::MERMAID:
|
||||||
messageID = 83;
|
messageID = 83;
|
||||||
sound = soundBase::LUCK;
|
iw.soundID = soundBase::LUCK;
|
||||||
gbonus.bonus.type = Bonus::LUCK;
|
gbonus.bonus.type = Bonus::LUCK;
|
||||||
gbonus.bonus.val = 1;
|
gbonus.bonus.val = 1;
|
||||||
descr_id = 72;
|
descr_id = 72;
|
||||||
break;
|
break;
|
||||||
case Obj::RALLY_FLAG:
|
case Obj::RALLY_FLAG:
|
||||||
sound = soundBase::MORALE;
|
iw.soundID = soundBase::MORALE;
|
||||||
messageID = 111;
|
messageID = 111;
|
||||||
gbonus.bonus.type = Bonus::MORALE;
|
gbonus.bonus.type = Bonus::MORALE;
|
||||||
gbonus.bonus.val = 1;
|
gbonus.bonus.val = 1;
|
||||||
@ -4961,6 +4960,7 @@ void CGBonusingObject::onHeroVisit( const CGHeroInstance * h ) const
|
|||||||
bonusMove = 400;
|
bonusMove = 400;
|
||||||
break;
|
break;
|
||||||
case Obj::OASIS:
|
case Obj::OASIS:
|
||||||
|
iw.soundID = soundBase::MORALE;
|
||||||
messageID = 95;
|
messageID = 95;
|
||||||
gbonus.bonus.type = Bonus::MORALE;
|
gbonus.bonus.type = Bonus::MORALE;
|
||||||
gbonus.bonus.val = 1;
|
gbonus.bonus.val = 1;
|
||||||
@ -4983,7 +4983,7 @@ void CGBonusingObject::onHeroVisit( const CGHeroInstance * h ) const
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case Obj::WATERING_HOLE:
|
case Obj::WATERING_HOLE:
|
||||||
sound = soundBase::MORALE;
|
iw.soundID = soundBase::MORALE;
|
||||||
messageID = 166;
|
messageID = 166;
|
||||||
gbonus.bonus.type = Bonus::MORALE;
|
gbonus.bonus.type = Bonus::MORALE;
|
||||||
gbonus.bonus.val = 1;
|
gbonus.bonus.val = 1;
|
||||||
@ -4991,7 +4991,7 @@ void CGBonusingObject::onHeroVisit( const CGHeroInstance * h ) const
|
|||||||
bonusMove = 400;
|
bonusMove = 400;
|
||||||
break;
|
break;
|
||||||
case Obj::FOUNTAIN_OF_YOUTH:
|
case Obj::FOUNTAIN_OF_YOUTH:
|
||||||
sound = soundBase::MORALE;
|
iw.soundID = soundBase::MORALE;
|
||||||
messageID = 57;
|
messageID = 57;
|
||||||
gbonus.bonus.type = Bonus::MORALE;
|
gbonus.bonus.type = Bonus::MORALE;
|
||||||
gbonus.bonus.val = 1;
|
gbonus.bonus.val = 1;
|
||||||
@ -4999,7 +4999,7 @@ void CGBonusingObject::onHeroVisit( const CGHeroInstance * h ) const
|
|||||||
bonusMove = 400;
|
bonusMove = 400;
|
||||||
break;
|
break;
|
||||||
case Obj::STABLES:
|
case Obj::STABLES:
|
||||||
sound = soundBase::STORE;
|
iw.soundID = soundBase::STORE;
|
||||||
bool someUpgradeDone = false;
|
bool someUpgradeDone = false;
|
||||||
|
|
||||||
for (TSlots::const_iterator i = h->Slots().begin(); i != h->Slots().end(); ++i)
|
for (TSlots::const_iterator i = h->Slots().begin(); i != h->Slots().end(); ++i)
|
||||||
@ -5056,7 +5056,6 @@ void CGBonusingObject::onHeroVisit( const CGHeroInstance * h ) const
|
|||||||
cb->setMovePoints(&smp);
|
cb->setMovePoints(&smp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
iw.soundID = sound;
|
|
||||||
iw.text.addTxt(MetaString::ADVOB_TXT,messageID);
|
iw.text.addTxt(MetaString::ADVOB_TXT,messageID);
|
||||||
cb->showInfoDialog(&iw);
|
cb->showInfoDialog(&iw);
|
||||||
}
|
}
|
||||||
@ -5689,7 +5688,7 @@ ui8 CGGarrison::getPassableness() const
|
|||||||
|
|
||||||
void CGOnceVisitable::onHeroVisit( const CGHeroInstance * h ) const
|
void CGOnceVisitable::onHeroVisit( const CGHeroInstance * h ) const
|
||||||
{
|
{
|
||||||
int sound;
|
int sound = soundBase::sound_todo;
|
||||||
int txtid;
|
int txtid;
|
||||||
|
|
||||||
switch(ID)
|
switch(ID)
|
||||||
|
@ -133,9 +133,9 @@ void JsonNode::setType(JsonType Type)
|
|||||||
break; case DATA_NULL:
|
break; case DATA_NULL:
|
||||||
break; case DATA_BOOL: data.Bool = false;
|
break; case DATA_BOOL: data.Bool = false;
|
||||||
break; case DATA_FLOAT: data.Float = 0;
|
break; case DATA_FLOAT: data.Float = 0;
|
||||||
break; case DATA_STRING: data.String = new std::string;
|
break; case DATA_STRING: data.String = new std::string();
|
||||||
break; case DATA_VECTOR: data.Vector = new JsonVector;
|
break; case DATA_VECTOR: data.Vector = new JsonVector();
|
||||||
break; case DATA_STRUCT: data.Struct = new JsonMap;
|
break; case DATA_STRUCT: data.Struct = new JsonMap();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1108,7 +1108,7 @@ struct NewTurn : public CPackForClient //101
|
|||||||
std::set<Hero> heroes; //updates movement and mana points
|
std::set<Hero> heroes; //updates movement and mana points
|
||||||
//std::vector<SetResources> res;//resource list
|
//std::vector<SetResources> res;//resource list
|
||||||
std::map<PlayerColor, TResources> res; //player ID => resource value[res_id]
|
std::map<PlayerColor, TResources> res; //player ID => resource value[res_id]
|
||||||
std::vector<SetAvailableCreatures> cres;//creatures to be placed in towns
|
std::map<ObjectInstanceID, SetAvailableCreatures> cres;//creatures to be placed in towns
|
||||||
ui32 day;
|
ui32 day;
|
||||||
bool resetBuilded;
|
bool resetBuilded;
|
||||||
ui8 specialWeek; //weekType
|
ui8 specialWeek; //weekType
|
||||||
|
@ -933,8 +933,8 @@ DLL_LINKAGE void NewTurn::applyGs( CGameState *gs )
|
|||||||
gs->getPlayer(i->first)->resources = i->second;
|
gs->getPlayer(i->first)->resources = i->second;
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOST_FOREACH(SetAvailableCreatures h, cres) //set available creatures in towns
|
BOOST_FOREACH(auto creatureSet, cres) //set available creatures in towns
|
||||||
h.applyGs(gs);
|
creatureSet.second.applyGs(gs);
|
||||||
|
|
||||||
gs->globalEffects.popBonuses(Bonus::OneDay); //works for children -> all game objs
|
gs->globalEffects.popBonuses(Bonus::OneDay); //works for children -> all game objs
|
||||||
if(gs->getDate(Date::DAY_OF_WEEK) == 1) //new week
|
if(gs->getDate(Date::DAY_OF_WEEK) == 1) //new week
|
||||||
|
@ -1300,13 +1300,10 @@ void CGameHandler::newTurn()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// townID, creatureID, amount
|
|
||||||
std::map<ObjectInstanceID, std::map<si32, si32> > newCreas;//creatures that needs to be added by town events
|
|
||||||
|
|
||||||
BOOST_FOREACH(CGTownInstance *t, gs->map->towns)
|
BOOST_FOREACH(CGTownInstance *t, gs->map->towns)
|
||||||
{
|
{
|
||||||
PlayerColor player = t->tempOwner;
|
PlayerColor player = t->tempOwner;
|
||||||
handleTownEvents(t, n, newCreas);
|
handleTownEvents(t, n);
|
||||||
if(newWeek) //first day of week
|
if(newWeek) //first day of week
|
||||||
{
|
{
|
||||||
if(t->hasBuilt(BuildingID::PORTAL_OF_SUMMON, ETownType::DUNGEON))
|
if(t->hasBuilt(BuildingID::PORTAL_OF_SUMMON, ETownType::DUNGEON))
|
||||||
@ -1316,9 +1313,13 @@ void CGameHandler::newTurn()
|
|||||||
if (t->hasBuilt(BuildingID::TREASURY, ETownType::RAMPART) && player < PlayerColor::PLAYER_LIMIT)
|
if (t->hasBuilt(BuildingID::TREASURY, ETownType::RAMPART) && player < PlayerColor::PLAYER_LIMIT)
|
||||||
n.res[player][Res::GOLD] += hadGold[player]/10; //give 10% of starting gold
|
n.res[player][Res::GOLD] += hadGold[player]/10; //give 10% of starting gold
|
||||||
|
|
||||||
SetAvailableCreatures sac;
|
if (!vstd::contains(n.cres, t->id))
|
||||||
sac.tid = t->id;
|
{
|
||||||
sac.creatures = t->creatures;
|
n.cres[t->id].tid = t->id;
|
||||||
|
n.cres[t->id].creatures = t->creatures;
|
||||||
|
}
|
||||||
|
auto & sac = n.cres[t->id];
|
||||||
|
|
||||||
for (int k=0; k < GameConstants::CREATURES_PER_TOWN; k++) //creature growths
|
for (int k=0; k < GameConstants::CREATURES_PER_TOWN; k++) //creature growths
|
||||||
{
|
{
|
||||||
if(t->creatureDwellingLevel(k) >= 0)//there is dwelling (k-level)
|
if(t->creatureDwellingLevel(k) >= 0)//there is dwelling (k-level)
|
||||||
@ -1349,12 +1350,6 @@ void CGameHandler::newTurn()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//add creatures from town events
|
|
||||||
if (vstd::contains(newCreas, t->id))
|
|
||||||
for(auto i=newCreas[t->id].begin() ; i!=newCreas[t->id].end(); i++)
|
|
||||||
sac.creatures[i->first].first += i->second;
|
|
||||||
|
|
||||||
n.cres.push_back(sac);
|
|
||||||
}
|
}
|
||||||
if(!firstTurn && player < PlayerColor::PLAYER_LIMIT)//not the first day and town not neutral
|
if(!firstTurn && player < PlayerColor::PLAYER_LIMIT)//not the first day and town not neutral
|
||||||
{
|
{
|
||||||
@ -4765,7 +4760,7 @@ void CGameHandler::handleTimeEvents()
|
|||||||
sendAndApply(&ume);
|
sendAndApply(&ume);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CGameHandler::handleTownEvents(CGTownInstance * town, NewTurn &n, std::map<ObjectInstanceID, std::map<si32, si32> > &newCreas)
|
void CGameHandler::handleTownEvents(CGTownInstance * town, NewTurn &n)
|
||||||
{
|
{
|
||||||
town->events.sort(evntCmp);
|
town->events.sort(evntCmp);
|
||||||
while(town->events.size() && town->events.front().firstOccurence == gs->day)
|
while(town->events.size() && town->events.front().firstOccurence == gs->day)
|
||||||
@ -4807,11 +4802,18 @@ void CGameHandler::handleTownEvents(CGTownInstance * town, NewTurn &n, std::map<
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!ev.creatures.empty() && !vstd::contains(n.cres, town->id))
|
||||||
|
{
|
||||||
|
n.cres[town->id].tid = town->id;
|
||||||
|
n.cres[town->id].creatures = town->creatures;
|
||||||
|
}
|
||||||
|
auto & sac = n.cres[town->id];
|
||||||
|
|
||||||
for(si32 i=0;i<ev.creatures.size();i++) //creature growths
|
for(si32 i=0;i<ev.creatures.size();i++) //creature growths
|
||||||
{
|
{
|
||||||
if(town->creatureDwellingLevel(i) >= 0 && ev.creatures[i])//there is dwelling
|
if(town->creatureDwellingLevel(i) >= 0 && ev.creatures[i])//there is dwelling
|
||||||
{
|
{
|
||||||
newCreas[town->id][i] += ev.creatures[i];
|
sac.creatures[i].first += ev.creatures[i];
|
||||||
iw.components.push_back(Component(Component::CREATURE,
|
iw.components.push_back(Component(Component::CREATURE,
|
||||||
town->creatures[i].second.back(), ev.creatures[i], 0));
|
town->creatures[i].second.back(), ev.creatures[i], 0));
|
||||||
}
|
}
|
||||||
|
@ -230,7 +230,7 @@ public:
|
|||||||
void save(const std::string &fname);
|
void save(const std::string &fname);
|
||||||
void close();
|
void close();
|
||||||
void handleTimeEvents();
|
void handleTimeEvents();
|
||||||
void handleTownEvents(CGTownInstance *town, NewTurn &n, std::map<ObjectInstanceID, std::map<si32, si32> > &newCreas);
|
void handleTownEvents(CGTownInstance *town, NewTurn &n);
|
||||||
bool complain(const std::string &problem); //sends message to all clients, prints on the logs and return true
|
bool complain(const std::string &problem); //sends message to all clients, prints on the logs and return true
|
||||||
void objectVisited( const CGObjectInstance * obj, const CGHeroInstance * h );
|
void objectVisited( const CGObjectInstance * obj, const CGHeroInstance * h );
|
||||||
void engageIntoBattle( PlayerColor player );
|
void engageIntoBattle( PlayerColor player );
|
||||||
|
Loading…
Reference in New Issue
Block a user