mirror of
https://github.com/vcmi/vcmi.git
synced 2024-12-24 22:14:36 +02:00
Fixed #1437.
This commit is contained in:
parent
8515bd037d
commit
dd72261193
@ -3233,10 +3233,15 @@ TSubgoal CGoal::whatToDoToAchieve()
|
||||
auto creature = VLC->creh->creatures[objid];
|
||||
if (t->subID == creature->faction) //TODO: how to force AI to build unupgraded creatures? :O
|
||||
{
|
||||
auto creatures = t->town->creatures[creature->level];
|
||||
int upgradeNumber = std::find(creatures.begin(), creatures.end(), creature->idNumber) - creatures.begin();
|
||||
auto creatures = vstd::tryAt(t->town->creatures, creature->level - 1);
|
||||
if(!creatures)
|
||||
continue;
|
||||
|
||||
BuildingID bid(BuildingID::DWELL_FIRST + creature->level + upgradeNumber * GameConstants::CREATURES_PER_TOWN);
|
||||
int upgradeNumber = vstd::find_pos(*creatures, creature->idNumber);
|
||||
if(upgradeNumber < 0)
|
||||
continue;
|
||||
|
||||
BuildingID bid(BuildingID::DWELL_FIRST + creature->level - 1 + upgradeNumber * GameConstants::CREATURES_PER_TOWN);
|
||||
if (t->hasBuilt(bid)) //this assumes only creatures with dwellings are assigned to faction
|
||||
{
|
||||
dwellings.push_back(t);
|
||||
|
28
Global.h
28
Global.h
@ -601,6 +601,34 @@ namespace vstd
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
template <typename Container, typename Index>
|
||||
bool isValidIndex(const Container &c, Index i)
|
||||
{
|
||||
return i >= 0 && i < c.size();
|
||||
}
|
||||
|
||||
template <typename Container, typename Index>
|
||||
boost::optional<typename Container::const_reference> tryAt(const Container &c, Index i)
|
||||
{
|
||||
if(isValidIndex(c, i))
|
||||
{
|
||||
auto itr = c.begin();
|
||||
std::advance(itr, i);
|
||||
return *itr;
|
||||
}
|
||||
return boost::none;
|
||||
}
|
||||
|
||||
template <typename Container, typename Pred>
|
||||
static boost::optional<typename Container::const_reference> tryFindIf(const Container &r, const Pred &t)
|
||||
{
|
||||
auto pos = range::find_if(r, t);
|
||||
if(pos == boost::end(r))
|
||||
return boost::none;
|
||||
else
|
||||
return *pos;
|
||||
}
|
||||
|
||||
using boost::math::round;
|
||||
}
|
||||
using vstd::operator-=;
|
||||
|
@ -33,7 +33,7 @@ public:
|
||||
|
||||
CreatureID idNumber;
|
||||
TFaction faction;
|
||||
ui8 level; // 0 - unknown
|
||||
ui8 level; // 0 - unknown; 1-7 for "usual" creatures
|
||||
|
||||
//stats that are not handled by bonus system
|
||||
ui32 fightValue, AIValue, growth, hordeGrowth;
|
||||
|
Loading…
Reference in New Issue
Block a user