1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-08-13 19:54:17 +02:00

Prison from HoTA will be placed on water.

This commit is contained in:
Tomasz Zieliński
2023-06-07 13:00:24 +02:00
parent e98a50b45a
commit 7922d8be16

View File

@@ -94,15 +94,16 @@ void TreasurePlacer::addAllPossibleObjects()
}
}
if(zone.getType() == ETemplateZoneType::WATER)
return;
//Generate Prison on water only if it has a template
auto prisonTemplates = VLC->objtypeh->getHandlerFor(Obj::PRISON, 0)->getTemplates(zone.getTerrainType());
if (!prisonTemplates.empty())
{
//prisons
//levels 1, 5, 10, 20, 30
static int prisonsLevels = std::min(generator.getConfig().prisonExperience.size(), generator.getConfig().prisonValues.size());
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];
if (oi.value > zone.getMaxTreasureValue())
@@ -110,13 +111,13 @@ void TreasurePlacer::addAllPossibleObjects()
continue;
}
oi.generateObject = [i, this]() -> CGObjectInstance *
oi.generateObject = [i, this]() -> CGObjectInstance*
{
auto possibleHeroes = generator.getAllPossibleHeroes();
HeroTypeID hid = *RandomGeneratorUtil::nextItem(possibleHeroes, zone.getRand());
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->exp = generator.getConfig().prisonExperience[i];
@@ -135,6 +136,10 @@ void TreasurePlacer::addAllPossibleObjects()
prisonsLeft -= oi.maxPerZone;
addObjectToRandomPool(oi);
}
}
if(zone.getType() == ETemplateZoneType::WATER)
return;
//all following objects are unlimited
oi.maxPerZone = std::numeric_limits<ui32>::max();