Kein Problem, wann immer du Zeit hast. Gut Ding will eben Weile haben. E-Mail ist raus.
Grüße John
Kein Problem, wann immer du Zeit hast. Gut Ding will eben Weile haben. E-Mail ist raus.
Grüße John
Erster Rundenwechsel im PAE-PB => Erster OOS.
Hallo Pie, im Pitbossspiel ist gleich mal ein Synchronisationsproblem aufgetreten. Vielleicht können wir die Ursache ja anhand der Logs herausfinden?! Bisher kann ich nur dieses Schnipsel anbieten:
Dabei springt für mich die Zeile mit der Spionage hervor. Was könnte das auf einer vorgefertigten Karte in der ersten Runde sein?Code:Message #0 received from player 18 for turn 365846 - Do Mission, who is 18, unit ID is 81929, mission is Move To Message #0 received from player 18 for turn 365971 - TargetTeam: 20, Espionage Change: 1 Message #0 received from player 18 for turn 366082 - Do Mission, who is 18, unit ID is 24578, mission is Move To Message #0 received from player 18 for turn 366329 - Turn Complete, 18 ***** OUT OF SYNC! MY SYNC SEED = 0 : MY OPTIONS SEED = 509487130 *****
Ist es sinnvoll für die Analyse noch "SynchLog" auf 1 zu stellen? INI sieht nämlich bisher folgendermaßen aus
Code:;; Enable the logging system LoggingEnabled=1 ; Enable synchronization logging SynchLog=0 ; Overwrite old network and message logs OverwriteLogs=1 ; Enable rand event logging RandLog=1 ; Enable message logging MessageLog=1
Hm. Wenn ich wüsst, was es mit Espionage Change: 1 auf sich hat. Vielleicht setzt der Spieler 18 die Spionagetätigkeit (Spionage Advisor) von Team 20 um 1 höher?
Aber das wäre BTS und hätte nichts mit den Python-Befehlen zu tun.
Move To sind ja auch stink normale Befehle, die keinen OOS verursachen sollten.
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!
Da hast du wahrscheinlich recht. Mir ist jetzt noch aufgefallen, dass 18 ja gar kein KI-Spieler sondern Rob Anybody ist, d.h. die Meldungen im Log sind alle vor dem Rundenwechsel erzeugt worden. Der OOS dann im Rundenwechsel.
Interessant ist vllt. noch ein Eintrag weiter oben, den ich nicht gepostet hatte:
> Message #0 received from player 18 for turn 266292 - Non-simultaneous ModNetMessage notification
Dazu steht in CvMessageData.cpp nurUnd der Aufruf ist irgendwo in der ExeCode:505 void CvNetModNetMessage::Debug(char* szAddendum) 506 { 507 sprintf(szAddendum, "Non-simultaneous ModNetMessage notification"); 508 }
Nun gut, ich werde es mal weiter beobachten. Der Rundenwechsel wird im PB ja noch einmal wiederholt.
JA, bitte beobachten!
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 habe mal ausprobiert, was passiert, wenn ich einen Handelskarren in eine eigene Stadt schicke. Es wird angezeigt, dass der Ertrag 0 Forschung und 30 Gold beträgt (in diesem Fall Bronze), sodass ich keinen Gewinn mache. Beim Verkauf wächst meine Schatzkammer allerdings nicht um 30, sondern um 60.
Bug oder gewollt?
Bug
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!
Und ein seltsamer noch dazu:
Code:pSeller.changeGold(iPrice) iGewinnWissen = 0 # default: iSeller weil auch der Getreidekarren sein Gut abladen kann iOriginCiv = CvUtil.getScriptData(pUnit, ["originCiv"], iSeller) # where the goods come from if iOriginCiv != iBuyer: iGewinnWissen = int(iPrice / 4 * pSeller.getCurrentEra()) _doResearchPush(iBuyer, iGewinnWissen) _doResearchPush(iSeller, iGewinnWissen) _doCityProvideBonus(pCity, eBonus, 3) # Trade route / Handelsstrasse doBuildTradeRoute(pUnit, pCity) sBonusName = gc.getBonusInfo(eBonus).getDescription() if pBuyer.isHuman() and iBuyer != iSeller: CyInterface().addMessage(iBuyer, True, 10, CyTranslator().getText("TXT_KEY_BONUS_SOLD", (pSeller.getName(), pSeller.getCivilizationShortDescriptionKey(), pCity.getName(), sBonusName, iGewinnWissen)), None, 2, None, ColorTypes(8), pUnit.getX(), pUnit.getY(), False, False) else: CyInterface().addMessage(iSeller, True, 10, CyTranslator().getText("TXT_KEY_BONUS_SOLD2", (pCity.getName(), pBuyer.getCivilizationShortDescriptionKey(), sBonusName, iPrice, iGewinnWissen)), None, 2, None, ColorTypes(8), pUnit.getX(), pUnit.getY(), False, False)
Ist AI_unitUpdate eine lokale Funktion? Dann sollte man da keine Zufallszahlen generieren…
Log meckert mit
Das stammt aus PAE/PAE_Trade.py:Code:86611 Rand = -1103845449 on 437740 (renegade) 86612 Rand = 906976036 on 437740 (get any bonus 4 trade) 86613 Rand = 1411839629 on 437740 (get any bonus 4 trade) 86614 86615 ***** OUT OF SYNC! MY SYNC SEED = -2147483648 : MY OPTIONS SEED = 509487130 ***** 86616
und wird aufgerufen in CvGameUtils.pyCode:788 def doAssignTradeRoute_AI(pUnit):
Code:1287 def AI_unitUpdate(self, argsList):^M
nö, is ne globale funktion.
und die CvUtil.myRandom() ist auch gc.getGame().getSorenRandNum(). Das sollte also auch passen.
vielleicht hats was mit der Liste lBonus. was wenn da nicht if not lBonus1: sondern if len(lBonus) == 0: gehört ?
genauso mit lBonus2.
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!
Ja, der is bekannt, den bekomm ich aber nicht weg. Hab ich seit irgendein fremdes Script drin (Platys Punktenanzeige? FieldOfView?) ich weiss es nicht.
es stört aber dem Spielfluss zum Glück eh nicht.
Das weiß ich nicht. Den Diploschirm hab ich bisjetzt noch nicht angerührt.2:
Manchmal kommt es vor, dass ich im Diplo Schirm nix auswählen kann, obwohl es weiß ist, z.b. dem Gegner nicht sagen kann wie viel Gold ich haben möchte (das Popup erscheint zwar, aber es erscheint dann nicht in "xy bietet" Feld), genau das selbe mit Techs.
Was hat es da mit dem Hinweis Cleopatra >>> Alle und im 2. Bild: Alle >>> Cleopatra auf sich? Vielleicht bist du in einem anderen Blickwinkel?
Ich nehme stark an, dass dies von Platy nicht berücksichtigt ist.
Ich weiß also nicht, wie ich was ändern muss, damit es so funzt wie es soll.
Ich musste leider feststellen, dass der Fehler nix mit Python zu tun hat. Nehm ich den Python Ordner komplett raus (dann gehen meistens alle saves weiter, eben nur ohne PAE Features), gibts trotzdem nen Crash. Da steckt scheinbar wieder irgendwas blödes in den XML Dateien, was ich so nicht rausfinden kann ;(
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!
Schade, dann muss ich die Ursache des OOS weiter vorne suchen.
@Dein Änderungsvorschlag:
Leere Listen werden zu False ausgewertet. Da der Code aber auf Server+Client auch bei solchen Logik-Bugs gleich ausgeführt werden würde, spielt das für die OOS-Suche keine Rolle.
Geändert von Ramkhamhaeng (29. Mai 2018 um 23:13 Uhr) Grund: Crosspost
if not lBonus1: ist sicherer, weil da nicht nur Länge == 0 getestet wird sondern auch ob es None ist oder sowas.
AI_unitUpdate sollte global sein. Die wird (am Anfang der Kette) nur durch CvGame::update() aufgerufen.
Das deutet darauf hin, dass es bei renegade OOS gegangen ist.86611 Rand = -1103845449 on 437740 (renegade)
86612 Rand = 906976036 on 437740 (get any bonus 4 trade)
86613 Rand = 1411839629 on 437740 (get any bonus 4 trade)
86614
86615 ***** OUT OF SYNC! MY SYNC SEED = -2147483648 : MY OPTIONS SEED = 509487130 *****
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!
Ja, das hast du gefixt. Ist im letzten Hotfix enthalten, den hatte Suite auch nicht mitbekommen (siehe PB-Faden)
@OOS: das hier könnte ein Übeltäter sein. Guckt mal auf den Kommentar in Zeile 16
PHP-Code:
void CvUnit::setXY(int iX, int iY, bool bGroup, bool bUpdate, bool bShow, bool bCheckPlotVisible)
{
CLLNode<IDInfo>* pUnitNode;
CvCity* pOldCity;
CvCity* pNewCity;
CvCity* pWorkingCity;
CvUnit* pTransportUnit;
CvUnit* pLoopUnit;
CvPlot* pOldPlot;
CvPlot* pNewPlot;
CvPlot* pLoopPlot;
CLinkList<IDInfo> oldUnits;
ActivityTypes eOldActivityType;
int iI;
// OOS!! Temporary for Out-of-Sync madness debugging...
if (GC.getLogging())
{
if (gDLL->getChtLvl() > 0)
{
char szOut[1024];
sprintf(szOut, "Player %d Unit %d (%S's %S) moving from %d:%d to %d:%d\n", getOwnerINLINE(), getID(), GET_PLAYER(getOwnerINLINE()).getNameKey(), getName().GetCString(), getX_INLINE(), getY_INLINE(), iX, iY);
gDLL->messageControlLog(szOut);
}
}