Die sind so bleed:
Code:
bool CvGame::testVictory(VictoryTypes eVictory, TeamTypes eTeam, bool* pbEndScore) const
{
[...]
bValid = SiegbedingungAktiviert;
if (bValid)
{
//Weltwundersieg
for (int iK = 0; iK < GC.getNumBuildingClassInfos(); iK++)
{
if (GC.getBuildingClassInfo((BuildingClassTypes) iK).getVictoryThreshold(eVictory) >
GET_TEAM(eTeam).getBuildingClassCount((BuildingClassTypes)iK))
{
//wenn eins nicht erfüllt ist, war wohl nix
bValid = false;
break;
}
}
}
//Projektvariante vom Weltwundersieg
if (bValid)
{
for (int iK = 0; iK < GC.getNumProjectInfos(); iK++)
{
if (GC.getProjectInfo((ProjectTypes) iK).getVictoryMinThreshold(eVictory) > GET_TEAM(eTeam).getProjectCount((ProjectTypes)iK))
{
bValid = false;
break;
}
}
}
//Pythonfunktion
if (bValid)
{
long lResult = 1;
CyArgsList argsList;
argsList.add(eVictory);
gDLL->getPythonIFace()->callFunction(PYGameModule, "isVictory", argsList.makeFunctionArgs(), &lResult);
if (0 == lResult)
{
bValid = false;
}
}
return bValid;
Die Funktion wird mit der aktuell zu überprüfenden Siegbedingung als Parameter aufgerufen. Bei allen vorherigen Tests wird auch brav geprüft, ob dieser Sieg überhaupt auf Kultur, Punktzahl, Gegnerzahl... prüfen muss. Nur bei den letzten 3: wenn einer davon wahr ist, kann das Ergebnis noch durch die anderen beiden verfälscht werden. Weltwunder- und Projektsieg können damit nicht gleichzeitig drin sein, da immer nur beide gleichzeitig auslösen könnten. Die Pythonfunktion muss dazu immer 1 returnen, sonst sind beide vorherigen Siege unmöglich.
tl;dr: es gibt keine Projekte mit victoryThreshold und die GameUtils::isVictory returned immer True -> der Sieg sollte funktionieren und sofort auslösen.
Sofort heißt, wenn doTurn aufgerufen wird:
Code:
if (getNumGameTurnActive() == 0)
{
if (!isPbem() || !getPbemTurnSent())
{
doTurn();
}
}