mirror of
https://github.com/vcmi/vcmi.git
synced 2025-08-15 20:03:15 +02:00
Prison from HoTA will be placed on water.
This commit is contained in:
@@ -94,15 +94,16 @@ void TreasurePlacer::addAllPossibleObjects()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(zone.getType() == ETemplateZoneType::WATER)
|
//Generate Prison on water only if it has a template
|
||||||
return;
|
auto prisonTemplates = VLC->objtypeh->getHandlerFor(Obj::PRISON, 0)->getTemplates(zone.getTerrainType());
|
||||||
|
if (!prisonTemplates.empty())
|
||||||
|
{
|
||||||
//prisons
|
//prisons
|
||||||
//levels 1, 5, 10, 20, 30
|
//levels 1, 5, 10, 20, 30
|
||||||
static int prisonsLevels = std::min(generator.getConfig().prisonExperience.size(), generator.getConfig().prisonValues.size());
|
static int prisonsLevels = std::min(generator.getConfig().prisonExperience.size(), generator.getConfig().prisonValues.size());
|
||||||
|
|
||||||
size_t prisonsLeft = getMaxPrisons();
|
size_t prisonsLeft = getMaxPrisons();
|
||||||
for(int i = prisonsLevels - 1; i >= 0 ;i--)
|
for (int i = prisonsLevels - 1; i >= 0; i--)
|
||||||
{
|
{
|
||||||
oi.value = generator.getConfig().prisonValues[i];
|
oi.value = generator.getConfig().prisonValues[i];
|
||||||
if (oi.value > zone.getMaxTreasureValue())
|
if (oi.value > zone.getMaxTreasureValue())
|
||||||
@@ -110,13 +111,13 @@ void TreasurePlacer::addAllPossibleObjects()
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
oi.generateObject = [i, this]() -> CGObjectInstance *
|
oi.generateObject = [i, this]() -> CGObjectInstance*
|
||||||
{
|
{
|
||||||
auto possibleHeroes = generator.getAllPossibleHeroes();
|
auto possibleHeroes = generator.getAllPossibleHeroes();
|
||||||
HeroTypeID hid = *RandomGeneratorUtil::nextItem(possibleHeroes, zone.getRand());
|
HeroTypeID hid = *RandomGeneratorUtil::nextItem(possibleHeroes, zone.getRand());
|
||||||
|
|
||||||
auto factory = VLC->objtypeh->getHandlerFor(Obj::PRISON, 0);
|
auto factory = VLC->objtypeh->getHandlerFor(Obj::PRISON, 0);
|
||||||
auto * obj = dynamic_cast<CGHeroInstance *>(factory->create());
|
auto* obj = dynamic_cast<CGHeroInstance*>(factory->create());
|
||||||
|
|
||||||
obj->subID = hid; //will be initialized later
|
obj->subID = hid; //will be initialized later
|
||||||
obj->exp = generator.getConfig().prisonExperience[i];
|
obj->exp = generator.getConfig().prisonExperience[i];
|
||||||
@@ -135,6 +136,10 @@ void TreasurePlacer::addAllPossibleObjects()
|
|||||||
prisonsLeft -= oi.maxPerZone;
|
prisonsLeft -= oi.maxPerZone;
|
||||||
addObjectToRandomPool(oi);
|
addObjectToRandomPool(oi);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(zone.getType() == ETemplateZoneType::WATER)
|
||||||
|
return;
|
||||||
|
|
||||||
//all following objects are unlimited
|
//all following objects are unlimited
|
||||||
oi.maxPerZone = std::numeric_limits<ui32>::max();
|
oi.maxPerZone = std::numeric_limits<ui32>::max();
|
||||||
|
Reference in New Issue
Block a user