Ich würde gerne unter bestimmten Umständen (eine bestimmte Staatsform) ermöglichen, auch die Unique Units von Vasallen zu bauen. Dafür habe ich CVPlayer::canTrain angepasst:
Code:
bool CvPlayer::canTrain(UnitTypes eUnit, bool bContinue, bool bTestVisible, bool bIgnoreCost) const
{
PROFILE_FUNC();
UnitClassTypes eUnitClass;
int iI;
eUnitClass = ((UnitClassTypes)(GC.getUnitInfo(eUnit).getUnitClassType()));
FAssert(GC.getCivilizationInfo(getCivilizationType()).getCivilizationUnits(eUnitClass) == eUnit);
//Kathy beginn Vasallen-Einheiten teilen
bool bShareVasallUnits = false;
if ( isAllowCitystateUnits() )
{
// CvTeamAI ePlayersTeam = GET_TEAM((TeamTypes)getTeam());
int iTeam;
int iPlayer;
for (iTeam = 0; iTeam < MAX_TEAMS; iTeam++)
{
if (GET_TEAM((TeamTypes)iTeam).isAlive())
{
if (GET_TEAM((TeamTypes)iTeam).isVassal(getTeam()))
{
for (iPlayer = 0; iPlayer < MAX_PLAYERS; iPlayer++)
{
if (GET_PLAYER((PlayerTypes)iPlayer).getTeam() == (TeamTypes)iTeam)
{
if (GC.getCivilizationInfo(GET_PLAYER((PlayerTypes)iPlayer).getCivilizationType()).getCivilizationUnits(eUnitClass) == eUnit)
{
bShareVasallUnits = true;
}
}
}
}
}
}
}
if (GC.getCivilizationInfo(getCivilizationType()).getCivilizationUnits(eUnitClass) != eUnit && !bShareVasallUnits )
//Kathy end Share Vasall Units
// if (GC.getCivilizationInfo(getCivilizationType()).getCivilizationUnits(eUnitClass) != eUnit) //Original Code
{
return false;
}
Der Gedanke ist: Wenn die Einheit nicht die Einheit der Zivilisation für ist (wie im Original) und man nicht diese Einheit von einer anderen Zivilisation teilt (bShareVasallUnits ), sollte sie möglich sein (sofern alle üblichen anderen Bedingungen von canTrain erfüllt sind). Aber obwohl ich die Staatsform (bAllowCityStateUnits), als auch die Technologie und die Ressourcen für die Einheit meines Vasalls habe, kann ich nur die normale Einheit bauen.
Habe ich da oben irgendwo einen offensichtlichen Fehler, oder liegt das Problem woanders (z.B. da, wo die Liste für die Bauauswahl zusammengestellt wird)?