Dann muss es so gehen. Ich habe demnächst das 1. Fuhrwerk, da will ich, dass diese Funktionieren.
Meine Test waren erfolgreich.
Ich weder dann wohl in v33 noch die iCityAttack Werte (sofern vorhanden) von 50 (oder -50) auf 45 (-45) ändern.
Dann muss es so gehen. Ich habe demnächst das 1. Fuhrwerk, da will ich, dass diese Funktionieren.
Meine Test waren erfolgreich.
Ich weder dann wohl in v33 noch die iCityAttack Werte (sofern vorhanden) von 50 (oder -50) auf 45 (-45) ändern.
Achtung Spoiler:
Sorry, ja da war ich ungenau. Es geht um den XML-Wert <iCityAttack>-50</iCityAttack>
Ich habe das noch einmal mit allen 4 Original-Saves (PB_PB_6.17 und PB_PAE_7) von Markus getestet.
Mit den damaligen XML-Werten sind die 4 CtD immer noch reproduzierbar.
Mit der einzigen XML-Änderung <iCityAttack>-45</iCityAttack> bei der Unit Tribun kommt es auch einige Runden später zu keinem CtD mehr.
Es reicht also wenn iCityAttack nur beim Tribun geändert wird.
Die Werte bei den Beförderungen können dann bei -25 bleiben.
Ich verstehe aber immer noch nicht ,was bei der Kombination Tribun+General+höchster Rang (=Karriere-Ende) passiert und die Division durch 0 auslöst. Was ist an dieser Kombination so besonders? Wenn wir Pech haben, kommt es durch die Änderung -45 nur zu unterschiedlichen Kampfverläufen und es verschieben sich im Save Zufallszahlen, die den CtD nun nicht mehr auslösen.
Aber an jenem Morgen war es Magie gewesen. Und es hörte nicht auf, Magie zu sein,
nur weil man [inzwischen] eine Erklärung dafür hatte ... (Terry Pratchett)
Irgendeine Version hatte die Fuhrwerke nutzlos gemacht.
Ich glaube dies war der 1. Versuch, den Handelsbig zu beheben , aber ich ich es nicht genau.
Achtung Spoiler:
Drum macht nur Pferd, Kamel und Ele.
... abgesehen von den 5 Eseln, die mitspielen (ich zitiere nur )
Anzahl-Bug: Die Anzahl hab ich nur gecheckt, indem ich in einer Stadt bis zu 9 bauen konnte, dann nicht mehr.Hast du den Händlerexploit gefixt bekommen ? Meine erste Lösung hatte leider nicht funktioniert.
Ich meine, in der noch unveröffentlichten v32 dies gelöst zu haben.
Button-Bug: ja, der sollte weg sein.... hab ich jetzt bei 6.18 nicht mehr kontrolliert.
Nix. Was soll dann sein? Dann hat er sein Ziel erreicht und kann zu einem General befördert werden.... oder einfach nur kämpfen. Oder einfach nur da und schön sein.
Genau, das sollte schon mit der vorigen Version behoben sein. Info ohne Gewähr.
Pie's Ancient Europe (PAE)
Erlebe mit dieser CIV IV Mod(ifikation) hautnah das Zeitalter der Antike bis ins letzte Detail!
Mit bahnbrechenden Erweiterungen und vielen ein- und erstmaligen Features.
- Pie's Ancient Europe (letztes Update: 22.12.2022)
... im Übrigen bin ich der Meinung, dass Karthago wieder aufgebaut werden muss!
Achso... automatisch wird der kein General. Das ist eine Unit wie jede andere. Wenn er schon General ist, dann ist er das. Was soll denn sonst mit einem Tribun passieren? Irgendwo muss ja die Hierarchie aufhören und dann gibt es keine Upgrades mehr.
Pie's Ancient Europe (PAE)
Erlebe mit dieser CIV IV Mod(ifikation) hautnah das Zeitalter der Antike bis ins letzte Detail!
Mit bahnbrechenden Erweiterungen und vielen ein- und erstmaligen Features.
- Pie's Ancient Europe (letztes Update: 22.12.2022)
... im Übrigen bin ich der Meinung, dass Karthago wieder aufgebaut werden muss!
Ich begreife halt nicht, warum der iCityAttack-Bug erst in der letzten Stufe zuschlägt.
Aber an jenem Morgen war es Magie gewesen. Und es hörte nicht auf, Magie zu sein,
nur weil man [inzwischen] eine Erklärung dafür hatte ... (Terry Pratchett)
Kann da evtl. eine Generalseinheit herausgelöst werden, wobei sich die Modifikatoren der verbleibenden Tribunseinheit ändern?
@Rob: Kannst du nicht, bei Verwendung der unmodifizierten Stadtangriffswerte, in CvUnit.cpp:8059 einen If-Switch einbauen, der prüft ob durch Null geteilt wird?
Dann sollte sich die Frage klären, ob es wirklich an den Stadtangriffswerten liegt oder nur geänderte Kampfresultate den problematischen Code-Pfad vermeiden.Code:// Hier vor prüfen und Breakpoint einfügen. iCombat = ((baseCombatStr() * 10000) / (100 - iModifier));
@ Rob: Kannst du eigentlich den CtD mit dem Tribun replizieren ?
Oder ist das nur bei dem Save von Markus.
Wenn ja, wären .dll Änderungen (was ja die .cpp Änderung wäre), nicht kompatibel.
Achtung Spoiler:
Ich hatte ein Szenario erstellt, in dem der CtD auftritt, in dem aber gar nicht gekämpft wird.
Anhand von diesen Szenario hat Pie herausgefunden, das es an iCityAttack liegt. Er hat daraufhin iCityAttack bei PROMOTION_ENCIRCLE geändert.
Wenn Tribun + x + PROMOTION_ENCIRCLE vorliegt, reicht die Änderung aus um den CtD zu vermeiden.
Es gibt aber auch Tribun + x ohne PROMOTION_ENCIRCLE, dann hilft diese Änderung nicht.
Wenn wir iCityAttack bei Tribun ändern, sind alle bekannten CtD-Fälle behoben.
Dieses Szenario bildet aber nur einen kleinen Teil des komplexen Saves ab. Ich kann damit nicht herausfinden was das x ist. Ich kann daher auch nicht nachrechnen, wann iCityAttack zu Division durch 0 wird.
Im Grunde, braucht es weitere Saves mit diesem CTD um den Bug-Fix zu bestätigen oder zu widerlegen.
Aber an jenem Morgen war es Magie gewesen. Und es hörte nicht auf, Magie zu sein,
nur weil man [inzwischen] eine Erklärung dafür hatte ... (Terry Pratchett)
Die Stelle sieht kritisch aus, hatte ich glaub schonmal gepostet:
CvUnit* CvSelectionGroupAI::AI_ejectBestDefender(CvPlot* pDefendPlot)
[...]
iValue /= (100 + pLoopUnit->cityAttackModifier() + pLoopUnit->getExtraCityAttackPercent());