1
0
mirror of https://github.com/vcmi/vcmi.git synced 2024-12-24 22:14:36 +02:00
This commit is contained in:
Ivan Savenko 2013-03-14 20:44:00 +00:00
parent ff1c224a97
commit c4c592b773
14 changed files with 67 additions and 63 deletions

View File

@ -977,7 +977,7 @@ void VCAI::makeTurn()
boost::shared_lock<boost::shared_mutex> gsLock(cb->getGsMutex());
setThreadName("VCAI::makeTurn");
BNLOG("Player %d starting turn", playerID);
BNLOG("Player %d starting turn", static_cast<int>(playerID.getNum()));
INDENT;
switch(cb->getDate(Date::DAY_OF_WEEK))
@ -2051,7 +2051,7 @@ HeroPtr VCAI::primaryHero() const
void VCAI::endTurn()
{
tlog4 << "Player " << playerID << " ends turn\n";
tlog4 << "Player " << static_cast<int>(playerID.getNum()) << " ends turn\n";
if(!status.haveTurn())
{
tlog1 << "Not having turn at the end of turn???\n";
@ -2062,7 +2062,7 @@ void VCAI::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
tlog4 << "Player " << playerID << " ended turn\n";
tlog4 << "Player " << static_cast<int>(playerID.getNum()) << " ended turn\n";
}
bool VCAI::fulfillsGoal (CGoal &goal, CGoal &mainGoal)

View File

@ -152,6 +152,10 @@ CHeroWindow::CHeroWindow(const CGHeroInstance *hero):
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
@ -337,10 +341,6 @@ void CHeroWindow::showAll(SDL_Surface * to)
printAtMiddleLoc(CGI->generaltexth->jktexts[2], 123, 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);
//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
for(int m=0; m<4; ++m)

View File

@ -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
int CSoundHandler::playSound(soundBase::soundID soundID, int repeats)
{
assert(soundID < soundBase::sound_after_last);
if (!initialized)
return -1;

View File

@ -1029,6 +1029,7 @@ public:
invalid=0,
sound_todo=1, // temp entry until code is fixed
VCMI_SOUND_LIST
sound_after_last
};
#undef VCMI_SOUND_NAME
#undef VCMI_SOUND_FILE

View File

@ -373,7 +373,7 @@ void CClient::newGame( CConnection *con, StartInfo *si )
else
sensibleAILimit--;
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
{

View File

@ -3657,9 +3657,11 @@ CTavernWindow::CTavernWindow(const CGObjectInstance *TavernObj):
h1 = new HeroPortrait(selected,0,72,299,h[0]);
h2 = new HeroPortrait(selected,1,162,299,h[1]);
if(h[0])
selected = 0;
else
selected = 0;
if (!h[0])
selected = 1;
if (!h[0] && !h[1])
selected = -1;
oldSelected = -1;
@ -3675,23 +3677,23 @@ CTavernWindow::CTavernWindow(const CGObjectInstance *TavernObj):
if(LOCPLINT->cb->getResourceAmount(Res::GOLD) < 2500) //not enough gold
{
recruit->hoverTexts[0] = CGI->generaltexth->tavernInfo[0]; //Cannot afford a Hero
recruit->block(2);
recruit->block(true);
}
else if(LOCPLINT->cb->howManyHeroes(false) >= 8)
{
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()));
recruit->block(2);
recruit->block(true);
}
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->block(2);
recruit->block(true);
}
else
{
if(!h[0])
recruit->block(1);
if(selected == -1)
recruit->block(true);
}
CCS->videoh->open("TAVERN.BIK");
@ -5394,7 +5396,7 @@ void CUniversityWindow::CItem::clickRight(tribool down, bool previousState)
if(down)
{
CRClickPopup::createAndPush(CGI->generaltexth->skillInfoTexts[ID][0],
new CComponent(CComponent::secskill, ID, 0));
new CComponent(CComponent::secskill, ID, 1));
}
}

View File

@ -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
items.push_back(Item(Item::STRING,format.substr(end_pos)));
}
std::string MacroString::build(const GetValue& getValue) const

View File

@ -646,7 +646,7 @@ void CCreatureHandler::loadStackExperience(CCreature * creature, const JsonNode
{
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->duration = Bonus::PERMANENT;
const JsonVector &values = exp["values"].Vector();
@ -679,6 +679,7 @@ void CCreatureHandler::loadStackExperience(CCreature * creature, const JsonNode
++lowerLimit;
}
}
delete bonus;
}
}

View File

@ -2293,13 +2293,12 @@ void CGTownInstance::removeCapitols (PlayerColor owner) const
int CGTownInstance::getBoatType() const
{
const CCreature *c = VLC->creh->creatures[town->creatures.front().front()];
if (c->isGood())
return 1;
else if (c->isEvil())
return 0;
else //neutral
return 2;
switch (VLC->townh->factions[town->typeID].alignment)
{
case EAlignment::EVIL : return 0;
case EAlignment::GOOD : return 1;
case EAlignment::NEUTRAL : return 2;
}
}
int CGTownInstance::getMarketEfficiency() const
@ -4877,7 +4876,7 @@ void CGBonusingObject::onHeroVisit( const CGHeroInstance * h ) const
{
bool visited = h->hasBonusFrom(Bonus::OBJECT,ID);
int messageID=0;
int bonusMove = 0, sound = -1;
int bonusMove = 0;
ui32 descr_id = 0;
InfoWindow iw;
iw.player = h->tempOwner;
@ -4894,14 +4893,14 @@ void CGBonusingObject::onHeroVisit( const CGHeroInstance * h ) const
{
case Obj::BUOY:
messageID = 21;
sound = soundBase::MORALE;
iw.soundID = soundBase::MORALE;
gbonus.bonus.type = Bonus::MORALE;
gbonus.bonus.val = +1;
descr_id = 94;
break;
case Obj::SWAN_POND:
messageID = 29;
sound = soundBase::LUCK;
iw.soundID = soundBase::LUCK;
gbonus.bonus.type = Bonus::LUCK;
gbonus.bonus.val = 2;
descr_id = 67;
@ -4909,14 +4908,14 @@ void CGBonusingObject::onHeroVisit( const CGHeroInstance * h ) const
break;
case Obj::FAERIE_RING:
messageID = 49;
sound = soundBase::LUCK;
iw.soundID = soundBase::LUCK;
gbonus.bonus.type = Bonus::LUCK;
gbonus.bonus.val = 1;
descr_id = 71;
break;
case Obj::FOUNTAIN_OF_FORTUNE:
messageID = 55;
sound = soundBase::LUCK;
iw.soundID = soundBase::LUCK;
gbonus.bonus.type = Bonus::LUCK;
gbonus.bonus.val = rand()%5 - 1;
descr_id = 69;
@ -4924,7 +4923,7 @@ void CGBonusingObject::onHeroVisit( const CGHeroInstance * h ) const
break;
case Obj::IDOL_OF_FORTUNE:
messageID = 62;
sound = soundBase::experience;
iw.soundID = soundBase::experience;
gbonus.bonus.val = 1;
descr_id = 68;
@ -4942,13 +4941,13 @@ void CGBonusingObject::onHeroVisit( const CGHeroInstance * h ) const
break;
case Obj::MERMAID:
messageID = 83;
sound = soundBase::LUCK;
iw.soundID = soundBase::LUCK;
gbonus.bonus.type = Bonus::LUCK;
gbonus.bonus.val = 1;
descr_id = 72;
break;
case Obj::RALLY_FLAG:
sound = soundBase::MORALE;
iw.soundID = soundBase::MORALE;
messageID = 111;
gbonus.bonus.type = Bonus::MORALE;
gbonus.bonus.val = 1;
@ -4961,6 +4960,7 @@ void CGBonusingObject::onHeroVisit( const CGHeroInstance * h ) const
bonusMove = 400;
break;
case Obj::OASIS:
iw.soundID = soundBase::MORALE;
messageID = 95;
gbonus.bonus.type = Bonus::MORALE;
gbonus.bonus.val = 1;
@ -4983,7 +4983,7 @@ void CGBonusingObject::onHeroVisit( const CGHeroInstance * h ) const
}
break;
case Obj::WATERING_HOLE:
sound = soundBase::MORALE;
iw.soundID = soundBase::MORALE;
messageID = 166;
gbonus.bonus.type = Bonus::MORALE;
gbonus.bonus.val = 1;
@ -4991,7 +4991,7 @@ void CGBonusingObject::onHeroVisit( const CGHeroInstance * h ) const
bonusMove = 400;
break;
case Obj::FOUNTAIN_OF_YOUTH:
sound = soundBase::MORALE;
iw.soundID = soundBase::MORALE;
messageID = 57;
gbonus.bonus.type = Bonus::MORALE;
gbonus.bonus.val = 1;
@ -4999,7 +4999,7 @@ void CGBonusingObject::onHeroVisit( const CGHeroInstance * h ) const
bonusMove = 400;
break;
case Obj::STABLES:
sound = soundBase::STORE;
iw.soundID = soundBase::STORE;
bool someUpgradeDone = false;
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);
}
}
iw.soundID = sound;
iw.text.addTxt(MetaString::ADVOB_TXT,messageID);
cb->showInfoDialog(&iw);
}
@ -5689,7 +5688,7 @@ ui8 CGGarrison::getPassableness() const
void CGOnceVisitable::onHeroVisit( const CGHeroInstance * h ) const
{
int sound;
int sound = soundBase::sound_todo;
int txtid;
switch(ID)

View File

@ -133,9 +133,9 @@ void JsonNode::setType(JsonType Type)
break; case DATA_NULL:
break; case DATA_BOOL: data.Bool = false;
break; case DATA_FLOAT: data.Float = 0;
break; case DATA_STRING: data.String = new std::string;
break; case DATA_VECTOR: data.Vector = new JsonVector;
break; case DATA_STRUCT: data.Struct = new JsonMap;
break; case DATA_STRING: data.String = new std::string();
break; case DATA_VECTOR: data.Vector = new JsonVector();
break; case DATA_STRUCT: data.Struct = new JsonMap();
}
}

View File

@ -1108,7 +1108,7 @@ struct NewTurn : public CPackForClient //101
std::set<Hero> heroes; //updates movement and mana points
//std::vector<SetResources> res;//resource list
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;
bool resetBuilded;
ui8 specialWeek; //weekType

View File

@ -933,8 +933,8 @@ DLL_LINKAGE void NewTurn::applyGs( CGameState *gs )
gs->getPlayer(i->first)->resources = i->second;
}
BOOST_FOREACH(SetAvailableCreatures h, cres) //set available creatures in towns
h.applyGs(gs);
BOOST_FOREACH(auto creatureSet, cres) //set available creatures in towns
creatureSet.second.applyGs(gs);
gs->globalEffects.popBonuses(Bonus::OneDay); //works for children -> all game objs
if(gs->getDate(Date::DAY_OF_WEEK) == 1) //new week

View File

@ -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)
{
PlayerColor player = t->tempOwner;
handleTownEvents(t, n, newCreas);
handleTownEvents(t, n);
if(newWeek) //first day of week
{
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)
n.res[player][Res::GOLD] += hadGold[player]/10; //give 10% of starting gold
SetAvailableCreatures sac;
sac.tid = t->id;
sac.creatures = t->creatures;
if (!vstd::contains(n.cres, t->id))
{
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
{
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
{
@ -4765,7 +4760,7 @@ void CGameHandler::handleTimeEvents()
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);
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
{
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,
town->creatures[i].second.back(), ev.creatures[i], 0));
}

View File

@ -230,7 +230,7 @@ public:
void save(const std::string &fname);
void close();
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
void objectVisited( const CGObjectInstance * obj, const CGHeroInstance * h );
void engageIntoBattle( PlayerColor player );