Done
Hm, der Start der zweiten Partie bei Ari-Coco wird gerade von folgendem Fehler verhindert. Ist ein alter Bekannter aber die genaue Ursache kenne ich immer noch nicht. Aus irgendeinem Grund schafft es eine Funktion in der EXE nicht die Nummer der WB-Saves/Szenaien zu bestimmen.
Edit: Aha, Fehler verschwindet wenn man mind. eine WB-Datei im Installationsverzeichnis (unter Saves/WorldBuilder) ablegt.Code:Traceback (most recent call last): File "PbMain", line 20, in create File "Assets/Python/System/wx\_core.py", line 7470, in __init__ File "Assets/Python/System/wx\_core.py", line 7122, in _BootstrapApp File "Z:\home\pb\PBs\Cup12\..\Python\v5\PbWizard.py", line 1783, in OnInit self.scenarioSelect = ScenarioSelectPage(self.wizard) File "Z:\home\pb\PBs\Cup12\..\Python\v5\PbWizard.py", line 824, in __init__ for index in range(PB.getNumScenarios()): RuntimeError: unidentifiable C++ exception
Geändert von Ramkhamhaeng (31. Mai 2016 um 22:37 Uhr)
Ohne den Code näher zu kennen vermute ich, dass dann wohl eine Null in range() drin stehen wird.
Somit geht er nie in den for-Block rein. Sollte der Code aber darauf angewiesen sein, dass der for-Block mindestens einmal ausgeführt wird, tja kaputt.
druckt z.B. gar nichtsCode:for i in range(0): print("Ich habe meine Arbeit gemacht.")
Ist blöd wenn man soSachen macht.Code:for i in range(0): ergebnis = "hab's in i gefunden" return ergebnis
Also Gaskugele ich, dass dann dieses "nichts" sich weiter hoch nach
propagiert?Code:self.scenarioSelect = ScenarioSelectPage(self.wizard)
Jetzt bekomm ich doch Lust mal in den Quellcode reinzuschauen...
Geändert von Redarg (04. Juni 2016 um 01:50 Uhr) Grund: Tippfehla
"Erweitere deinen Horizont, bevor es andere tun!"
~Ich
--
Pitboss-Serverbetrieb DIE bald weltbeste Anleitung zu Pitboss. (Mitmachen erwünscht!)
Civ 4 auf Linux
Civ4 Pitboss auf Linux
Civstats auf Linux
"Elektronen sind [...] stehende Materiewellen [...], das is' so ähnlich wie 'n elektrischer Weidezaun, nur ohne Pfosten und ohne Draht."
Vince Ebert: Urknaller - Physik ist sexy
Der Fehler propagiert nicht nach oben, aber die Exception. Dadurch bekommt die range()-Funktion schon keine Eingabe mehr, weil der Fehler im Argument auftritt.
Meinst du den C++-Code der Exe? Gebe ich dir im Allgemeinen recht aber an der Stelle wird nicht viel interessantes zu finden sein, nehme ich an
Oh, ich bin mit meiner Analyse eine Stufe zu weit oben eingestiegen. Klar die Exception muss schon im Argument auftauchen. So wie ich es angenommen habe: Leeres Verzeichnis => Anzahl Szenarien = 0 würde bei for index in range(PB.getNumScenarios()): ja nicht zu einer Exception führen, stattdessen würde nur der for-loop null mal ausgeführt werden. Falls dies schlecht wäre, würde der Fehler woanders sichtbar werden.
Trotzdem habe ich etwas über for-Schleifen gelernt. :)
Ich glaube der Code zu PB.getNumScenarios() wäre der Interessante, da darin ja die Exception ausgelöst wird. (Oder ist das wieder ein Irrtum?) Da ich mich damit noch nicht befasst habe, weiß ich nicht ob der C++ ist oder Python. Da müsste ich jetzt wiederum recherchieren woher PB importiert wird.
Redarg
"Erweitere deinen Horizont, bevor es andere tun!"
~Ich
--
Pitboss-Serverbetrieb DIE bald weltbeste Anleitung zu Pitboss. (Mitmachen erwünscht!)
Civ 4 auf Linux
Civ4 Pitboss auf Linux
Civstats auf Linux
"Elektronen sind [...] stehende Materiewellen [...], das is' so ähnlich wie 'n elektrischer Weidezaun, nur ohne Pfosten und ohne Draht."
Vince Ebert: Urknaller - Physik ist sexy
Nein, kein Irrtum, ich zitiere mich mal selbst
PB ist eine Instanz der Klasse CyPitboss und das ist nur ein Wrapper für Funktionen aus der Exe. Fast am Beginn dieser Mod stand genau die Frage welche Funktionen ich überhaupt bei 'PB' aufrufen kann. Das ist ja nirgends dokumentiert. Es war dann erst mal recht ernüchternd als klar wurde, dass die Funktionen weder per Pyton noch DLL-Modding direkt geändert werden können. (Das war für mich aber eher eine Motivation sich damit auseinander zu setzen ^^)Aus irgendeinem Grund schafft es eine Funktion in der EXE nicht die Nummer der WB-Saves/Szenaien zu bestimmen
Die Exe haben Zulan und ich im Laufe der Jahre immer mal wieder mit einem Hexeditor oder Ida (Disassembler) untersucht, um bestimmten Problemen auf den Grund zu gehen. Zulan konnte so beispielweise einen Prüfsummen-Check im Pitboss-Server ausschalten, der unter Wine (und nur da!) das Laden bestimmter großer Spielstände verhindert. (Die genauen Details weiß ich nicht mehr.)
Ich habe auch etliche Stunden auf den Code gestarrt (guck mal hier ) und könnte dir sogar den Assembler-Abschnitt der Funktion heraussuchen. Ist aber bestimmt keine sehr interessante Stelle.
Geändert von Ramkhamhaeng (05. Juni 2016 um 14:46 Uhr)
Déjà-Vu!
Zulan? Erinnerst du dich dran wie das gefixt werden konnte? Im Wiki steht was von gepatchter Pitboss.exe.
Geändert von Redarg (05. Juni 2016 um 22:11 Uhr)
"Erweitere deinen Horizont, bevor es andere tun!"
~Ich
--
Pitboss-Serverbetrieb DIE bald weltbeste Anleitung zu Pitboss. (Mitmachen erwünscht!)
Civ 4 auf Linux
Civ4 Pitboss auf Linux
Civstats auf Linux
"Elektronen sind [...] stehende Materiewellen [...], das is' so ähnlich wie 'n elektrischer Weidezaun, nur ohne Pfosten und ohne Draht."
Vince Ebert: Urknaller - Physik ist sexy
Hab mal bisschen was geschrieben:
http://www.civ-wiki.de/wiki/Mehrspieler_(Civ4)#Pitboss
Ramk, kannst du mal schauen ob das soweit passt. Ich bin mir unsicher mit dem korrekten Parameter fuer die Verknuepfung. Bei mir ist das
"C:\Games\Civ4\Beyond the Sword\BTS_Wrapper.exe" mod= "PB Mod_v5"\"
(inklusive aller Anfuehrungszeichen)
v5 zip: https://kirk.zulan.net/pb/BTS_Wrapper_v5.zip
Achtung Spoiler:
Ich habe den Beitrag mal aktualisiert und den Link angepasst, damit er auf BTS_Wrapper_v5 verweist. (Da es kein _v6 gibt muss dass die aktuelle Version sein )
Im Wiki habe ich bereits auf den Beitrag verwiesen und gerade auch etwas bearbeitet. Der Grund, warum nicht nicht alles ins Wiki transferiert habe, war die häufige Verlinkung vom Foren-Beitrag. Ich würde es lieber so lassen wie es ist.
E: Deinen neuesten Beitrag lese ich erst jetzt.
In diesem Fall ( Normale Verknüpfung zum Spiel) gehen beide Varianten. Die von dir angegebene Variante hat aber auch ihre Berechtigung, denn exakt diese Syntax braucht man zum Starten in einem BATCH-Skript. Ich habe das gerade noch mal getestet. Bei mir steht da zum Starten folgende Zeile drin:
Wenn ich auch nur ein Quote oder den Backslash weglasse klappt es schon nicht mehr...Code:"%CIV4BTS_EXE%" mod= "%MOD%"\" /ALTROOT=%ALTROOT%
Das hängt an der Syntax dieser hässlichen BATCH-Sprache und dem Argumenten-Parsing der Civ4-Exe.
Code:"%CIV4BTS_EXE%" mod= %MOD% /ALTROOT=%ALTROOT% oder "%CIV4BTS_EXE%" mod= %MOD%\ /ALTROOT=%ALTROOT% oder "%CIV4BTS_EXE%" mod= "%MOD%" /ALTROOT=%ALTROOT% => Expandierung des Modnamen bis hinter Altroot-ArgumentJetzt könnte man auf die Idee kommen einfach mal die Position der Argumente zu tauschen, aber...Code:"%CIV4BTS_EXE%" mod= %MOD%"\" /ALTROOT=%ALTROOT% => Python-Exception weil Altroot-nicht stimmt und daher Python-Dateien nicht gefunden werden. [/color]
Einzig das " vor dem Modnamen kann man dann wegelassen.Code:"%CIV4BTS_EXE%" /ALTROOT=%ALTROOT% mod= %MOD% => Modname wird um ' \' am Ende expandiert und ist damit falsch. oder "%CIV4BTS_EXE%" /ALTROOT=%ALTROOT% mod= %MOD%\ => Modname wird um ' \' am Ende expandiert und ist damit falsch.
Die von dir verwendete Form ist also die flexibelste. Deswegen habe ich meist die gepostetCode:"%CIV4BTS_EXE%" /ALTROOT=%ALTROOT% mod= %MOD%"\"
Habe die Anleitung jetzt von der Mehrtspieler-Wiki-Seite auf die Pitboss-Seite verlegt und mit meiner zusammengefasst.
@Zulan: Habe eine PM von einem (dem einen anderen ^^) Nutzer von PBSpy mit Hinweisen zu Bugs erhalten.
1. Du hast glaube ich vor kurzem eine Zeile auskommentiert, die alte Spieler-Einträge löscht, wenn man in einem Spiel(-slot) ein anderes PB läd. Dadurch wird ein Fehler verursacht:
Läd man ein Spiel mit weniger Spielern so werden die überzählen Einträge des alten Spiels mit aufgelistet. Das war auch der Grund um diese Codezeile einzufügen. Ist mir aber erst jetzt wieder klar geworden.
2. Einige Aktionen des Webinterfaces sind möglich auch ohne das Web-Password des Spiels zu kennen. Beispielsweise kann man ohne Passwort die Spieldaten abrufen. (Der Grund einige Dinge ohne PW verfügbar zu machen liegt noch in den Anfängen von der Mod. Das alte Webinterface folgte einem anderen Ansatz)
Weiterhin ist es so, dass der Server seine Daten zu einem Webinterface pusht, aber andere die Daten auch pullen können. Das führt nun beides aber zu dem Problem dass nach dem Aufsetzen eines neuen Spiels (z.B. kek4) und Wiederverwendung der gleichen Url-Port-Kombination auch der alte Eintrag (kek3?!) mit aktualisiert wird.
Die beiden Punkte werde ich versuchen am WE zu fixen. Hoffe dabei löst sich auch gleich noch das Problem, das man hier beim Blick ins Log erkennt: http://civ.zulan.net/pbspy/game/16/#game_log
Zu 1. Unterschiedliche Spiele (also mit unterschiedlicher Spieler-Konfiguration) auf einem Game objekt zu laden geht einfach nicht. Ich wuesste nicht wie man sinnvoll die ganzen Abhaengigen Daten (->Player->PlayerLog) konsistent halten koennte. Saves mit eliminierten Spielern betrifft das nicht, oder?
2. Sollte nicht so kompliziert zu fixen sein, oder?
Beim pullen muesste man vielleicht noch die ID mitgeben, die der webserver erwartet? Oder im Rueckgabewert vergleichen.
Achtung Spoiler: