Zitat von
Pie
Die spinnen die Firaxisler!
Ich wollte grad einstellen, dass Getreide auch auf Savanne zu verbreiten ist, seh ich schon die große Schwachstelle:
Man kann nicht einstellen, dass Getreide auf Schwemmland (Feature) und Wüste (Terrain) verbreitbar ist, gleichzeitig aber
nicht auf Savanne (Feature) und Wüste (Terrain) verbreitbar sein soll. Sobald ein Feature (Schwemmland, Wald, Savanne) auf dem Plot vorkommt, wird nur das gecheckt mit allen Terrainarten, die man extra definiert hat.
Das bedeutet, auch wenn Getreide auf Gras und Prärie wachsen darf, sobald ein Feature (Wald) drauf ist, hat das oberste Priorität und die Terrainarten müssen extra dafür definiert werden.
Das ist doch, was ich dir die ganze Zeit zu erklären versuche
PHP-Code:
bool CvPlot::canHaveBonus(BonusTypes eBonus, bool bIgnoreLatitude) const
{
FAssertMsg(getTerrainType() != NO_TERRAIN, "TerrainType is not assigned a valid value");
if (eBonus == NO_BONUS)
{
return true;
}
## ist hier schon was?
if (getBonusType() != NO_BONUS)
{
return false;
}
## Gipfel
if (isPeak())
{
return false;
}
## Ein Feature ist vorhanden
if (getFeatureType() != NO_FEATURE)
{
## dann muss das Feature zugelassen sein
if (!(GC.getBonusInfo(eBonus).isFeature(getFeatureType())))
{
return false;
}
## und das Terrain drunter auch. Leider keine Verknüpfung von Feature X mit Terrain Y (SDK-TODO?)
if (!(GC.getBonusInfo(eBonus).isFeatureTerrain(getTerrainType())))
{
return false;
}
}
## sonst reicht das Terrain
else
{
if (!(GC.getBonusInfo(eBonus).isTerrain(getTerrainType())))
{
return false;
}
}
## wenn die Ressource auf Hügeln vorkommen muss
if (isHills())
{
if (!(GC.getBonusInfo(eBonus).isHills()))
{
return false;
}
}
## xor auf Flachland
else if (isFlatlands())
{
if (!(GC.getBonusInfo(eBonus).isFlatlands()))
{
return false;
}
}
## Falls die Ressource [B]nicht[/B] am Flussufer vorkommen darf
if (GC.getBonusInfo(eBonus).isNoRiverSide())
{
if (isRiverSide())
{
return false;
}
}
## Ist die Insel groß genug
if (GC.getBonusInfo(eBonus).getMinAreaSize() != -1)
{
if (area()->getNumTiles() < GC.getBonusInfo(eBonus).getMinAreaSize())
{
return false;
}
}
## Breitengrad
if (!bIgnoreLatitude)
{
if (getLatitude() > GC.getBonusInfo(eBonus).getMaxLatitude())
{
return false;
}
if (getLatitude() < GC.getBonusInfo(eBonus).getMinLatitude())
{
return false;
}
}
## Von einem Landplot erreichbar? Nimmt keine Rücksicht auf Gipfel oder sonstige Landfelder, auf denen man nicht gründen kann.
if (!isPotentialCityWork())
{
return false;
}
return true;
}
Das FeatureTerrain unspezifisch ist, ist echt sau blöd. Savanne ist ja bisher viel auf Wüste verbreitet. Ich wär eher dafür, Getreide tatsächlich nur auf Schwemmland direkt zuzulassen. Der BtS-Spieler ist es ja zumindest gewohnt, dass Bauernhöfe nur ohne Wald gebaut werden können. Die blauen Kringel kann ich auch so hinbiegen, indem die oben zitierte Funktion leicht modifiziert in Python nachgebaut wird.
Pseudocode:
PHP-Code:
def canHaveBonus(pPlot, eBonus, bIgnoreLatitude):
if eBonus == NO_BONUS:
return true
## ist hier schon was?
if pPlot.getBonusType() != NO_BONUS:
return false
## Gipfel
if pPlot.isPeak():
return false
## wenn die Ressource auf Hügeln vorkommen muss
if pPlot.isHills()
if !(GC.getBonusInfo(eBonus).isHills())
return false
## xor auf Flachland
elif pPlot.isFlatlands():
if !(GC.getBonusInfo(eBonus).isFlatlands())
return false
## Falls die Ressource [B]nicht[/B] am Flussufer vorkommen darf
if GC.getBonusInfo(eBonus).isNoRiverSide():
if pPlot.isRiverSide()
return false
## Ist die Insel groß genug
if GC.getBonusInfo(eBonus).getMinAreaSize() != -1:
if pPlot.area().getNumTiles() < GC.getBonusInfo(eBonus).getMinAreaSize():
return false
## Breitengrad
if !bIgnoreLatitude:
if pPlot.getLatitude() > GC.getBonusInfo(eBonus).getMaxLatitude():
return false
if pPlot.getLatitude() < GC.getBonusInfo(eBonus).getMinLatitude():
return false
## Von einem Landplot erreichbar? Nimmt keine Rücksicht auf Gipfel oder sonstige Landfelder, auf denen man nicht gründen kann.
if !pPlot.isPotentialCityWork():
return false
## Ein Feature ist vorhanden
if pPlot.getFeatureType() != NO_FEATURE:
## dann muss das Feature zugelassen sein und das Terrain drunter auch
if GC.getBonusInfo(eBonus).isFeature(pPlot.getFeatureType()):
if GC.getBonusInfo(eBonus).isFeatureTerrain(pPlot.getTerrainType()):
return True
elif GC.getBonusInfo(eBonus).isTerrain(pPlot.getTerrainType()) and pPlot.getFeatureType().isRemovable():
return True
## sonst reicht das Terrain
elif GC.getBonusInfo(eBonus).isTerrain(pPlot.getTerrainType()):
return True
return False