Bei Save 3 und 4 ist "Grenzheer" erforscht und Praetorianer dürfen nicht mehr upgedatet werden.
Die fehlerhafte Abfrage in "AI_unitUpdate" schützt nicht vor dem CtD.
Damit das richtig erkannt wird, muss eine entsprechende Abfrage bei PAE_Unit "doUpgradeVeteran" eingefügt werden.
(Pie, du bekommst das bestimmt eleganter hin.)
Code:
def doUpgradeVeteran(pUnit, iNewUnit, bChangeCombatPromo):
if iNewUnit == -1:
return
# RobA: Praetorianer Check (im 2 Jhd. n. Chr. wurden Praetorianer abgeschafft) eingefügt
if iNewUnit == gc.getInfoTypeForString("UNIT_PRAETORIAN"):
iOwner = pUnit.getOwner()
pOwner = gc.getPlayer(iOwner)
pTeam = gc.getTeam(pOwner.getTeam())
if pTeam.isHasTech(gc.getInfoTypeForString("TECH_GRENZHEER")):
return
if not iNewUnit in range(gc.getNumUnitInfos()):
...
Die fehlerhaften Zeilen bei GameUtils "AI_unitUpdate" können nun komplett entfernt werden.
![Bild](attachment.php?attachmentid=2130993)
Der Aufruf von "doUpgradeVeteran" erfolgt in "doUpgradeRang" nach "canUpgradeUnit"
Dieser Check wird doppelt aufgerufen. In "AI_unitUpdate" ist "canUpgradeUnit" nicht nötig.
![Bild](attachment.php?attachmentid=2130994)
Es kann sofort
Code:
if PAE_Unit.doUpgradeRang(iOwner, pUnit.getID()):
return True
aufgerufen werden. Ich finde aber keinen Zusammenhang mit den CtD aus Save 1 und Save 2.