Ich habe eine unidentifiable C++ exception in onUnitBuilt, und zwar in der Zeile 3602: unit.setHasPromotion(lPromos[i], True)
Der Fehler kommt in R3, gleich vier mal. Zwei KIs hab ich beim schnellen drübergucken gefunden, deren Krieger schon fertig war.
Handicap Kaiser, also 6. Da sollte die Liste lPromos so aussehen: [-1, "PROMOTION_COMBAT1", "PROMOTION_COMBAT2"]
Warum appendest du da die -1 als erstes? Das müsste eigentlich einen Speicherzugriffsfehler geben, soweit ich das sehe, wird die stumpf als eIndex ans Array durchgereicht: m_pabHasPromotion[eIndex] = bNewValue;
€: der Block sollte mMn so aussehen:
PHP-Code:
if iHandicap > 4:
if unit.isMilitaryHappiness() or unit.getUnitCombatType() == gc.getInfoTypeForString("UNITCOMBAT_NAVAL"):
lPromos = []
# lPromos.append(-1)
lPromos.append(gc.getInfoTypeForString("PROMOTION_COMBAT1"))
if iHandicap > 5 and CvUtil.myRandom(3, "AIUnitPromoBonusHandicap6") == 1:
lPromos.append(gc.getInfoTypeForString("PROMOTION_COMBAT2"))
if iHandicap > 6 and CvUtil.myRandom(2, "AIUnitPromoBonusHandicap7") == 1:
lPromos.append(gc.getInfoTypeForString("PROMOTION_COMBAT3"))
if iHandicap > 7 and CvUtil.myRandom(2, "AIUnitPromoBonusHandicap8") == 1:
lPromos.append(gc.getInfoTypeForString("PROMOTION_COMBAT4"))
for promo in lPromos:
unit.setHasPromotion(promo, True)
bzw. ohne die nutzlose Array-Allozierung+Schleife so
PHP-Code:
if iHandicap > 4:
if unit.isMilitaryHappiness() or unit.getUnitCombatType() == gc.getInfoTypeForString("UNITCOMBAT_NAVAL"):
unit.setHasPromotion(gc.getInfoTypeForString("PROMOTION_COMBAT1"), True)
if iHandicap > 5 and CvUtil.myRandom(3, "AIUnitPromoBonusHandicap6") == 1:
unit.setHasPromotion(gc.getInfoTypeForString("PROMOTION_COMBAT2"), True)
if iHandicap > 6 and CvUtil.myRandom(2, "AIUnitPromoBonusHandicap7") == 1:
unit.setHasPromotion(gc.getInfoTypeForString("PROMOTION_COMBAT3"), True)
if iHandicap > 7 and CvUtil.myRandom(2, "AIUnitPromoBonusHandicap8") == 1:
unit.setHasPromotion(gc.getInfoTypeForString("PROMOTION_COMBAT4"), True)
Judith schiebt noch das zweite Argument nach.