Seite 38 von 53 ErsteErste ... 2834353637383940414248 ... LetzteLetzte
Ergebnis 556 bis 570 von 785

Thema: Mod für PB-Spiele: PB Mod_v1

  1. #556

  2. #557
    ε•ω=1 Avatar von Ramkhamhaeng
    Registriert seit
    19.07.10
    Ort
    Aralkum
    Beiträge
    9.896
    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.

    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
    Edit: Aha, Fehler verschwindet wenn man mind. eine WB-Datei im Installationsverzeichnis (unter Saves/WorldBuilder) ablegt.
    Geändert von Ramkhamhaeng (31. Mai 2016 um 22:37 Uhr)

  3. #558
    Civ4PitbossBetreiber a.D.
    Registriert seit
    27.03.08
    Beiträge
    467
    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.
    Code:
    for i in range(0): print("Ich habe meine Arbeit gemacht.")
    druckt z.B. gar nichts
    Ist blöd wenn man so
    Code:
    for i in range(0):
      ergebnis = "hab's in i gefunden"
    return ergebnis
    Sachen macht.
    Also Gaskugele ich, dass dann dieses "nichts" sich weiter hoch nach
    Code:
    self.scenarioSelect = ScenarioSelectPage(self.wizard)
    propagiert?

    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

  4. #559
    ε•ω=1 Avatar von Ramkhamhaeng
    Registriert seit
    19.07.10
    Ort
    Aralkum
    Beiträge
    9.896
    Der Fehler propagiert nicht nach oben, aber die Exception. Dadurch bekommt die range()-Funktion schon keine Eingabe mehr, weil der Fehler im Argument auftritt.

    Zitat Zitat von Redarg Beitrag anzeigen
    Jetzt bekomm ich doch Lust mal in den Quellcode reinzuschauen...
    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

  5. #560
    Civ4PitbossBetreiber a.D.
    Registriert seit
    27.03.08
    Beiträge
    467
    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

  6. #561
    ε•ω=1 Avatar von Ramkhamhaeng
    Registriert seit
    19.07.10
    Ort
    Aralkum
    Beiträge
    9.896
    Zitat Zitat von Redarg Beitrag anzeigen
    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.
    Nein, kein Irrtum, ich zitiere mich mal selbst
    Aus irgendeinem Grund schafft es eine Funktion in der EXE nicht die Nummer der WB-Saves/Szenaien zu bestimmen
    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 ^^)

    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)

  7. #562
    Civ4PitbossBetreiber a.D.
    Registriert seit
    27.03.08
    Beiträge
    467
    Zitat Zitat von Ramkhamhaeng Beitrag anzeigen
    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.)
    Déjà-Vu!
    Zitat Zitat von Redarg(26. Juli 2010) Beitrag anzeigen
    http://www.civforum.de/showthread.php?52832-Der-quot-kleine-Fragen-zu-Pitboss-quot-Thread&p=3553978&viewfull=1#post3553978
    Manchmal möchte Linux gewisse Spielstände nicht laden.
    Keine Lösung bekannt.
    Manchmal geht es auf wundersame Weise dann später mit einem neueren Spielstand, kurz danach aber dann wieder mit einem noch neueren Spielstand nicht mehr.
    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

  8. #563
    Say My Name Avatar von Zulan
    Registriert seit
    13.03.08
    Beiträge
    8.904
    Zitat Zitat von Redarg Beitrag anzeigen
    Zulan? Erinnerst du dich dran wie das gefixt werden konnte? Im Wiki steht was von gepatchter Pitboss.exe.
    Naja ich hab halt im IDA nach der Stelle gesucht die den Check ausloest und den Jump oder so durch NOPs ersetzt. Ist halt ne ziemliche Fummelei wenn man das nicht jeden Tag macht

  9. #564
    Say My Name Avatar von Zulan
    Registriert seit
    13.03.08
    Beiträge
    8.904
    Mir ist grad aufgefallen, dass der Post nicht mehr ganz aktuell ist (mod v4)

    Zitat Zitat von Ramkhamhaeng Beitrag anzeigen
    Zur Feier der Jubiläumsrunde will ich nun auch hier auf die Möglichkeit hinweisen mit der ihr die nervige Einlogzeit stark reduzieren könnt.
    Ich habe die BTS-Exe so geändert, dass sie von Zulans Server die Spielstände auch über http abrufen kann. Wenn dies bei euch läuft entfällt beim Login der Schritt mit dem Ladebalken.

    Anleitung:
    • Zip herunterladen und die vier Dateien ins Installations-Verzeichnis von Beyond the Sword kopieren.
    Edit: Update auf Version 4 am 09. Juni. Das behebt einen potentiellen Crash.
    • Verknüpfung auf die neue Exe (BTS_Wrapper.exe) erstellen und in den Eigenschaften noch die Parameter mod= "PB Mod_v4" anhängen. Alternativ: Auf Start_PB_Mod.bat klicken.
    D.h. es ändert sich eigentlich nur der Name der Exe von Civ4BeyondSword.exe zu BTS_Wrapper.exe…
    (!) Beim ersten Start könnte sich die Windows-Firewall melden, weil sie das Programm noch nicht kennt.
    (!) Es kommt hier ein Verfahren (Hooking) zum Einsatz, das auch einfache Trojaner/etc. nutzen. Es kann sein dass sich deswegen der Virenscanner meldet. Der Quellcode ist im Repository von PBStats einsehbar.

    • Linux-User müssen eine andere Version von libcurl verwenden: http://curl.haxx.se/gknw.net/7.40.0/...el-mingw32.zip
    Die DLLs können in den BTS-Ordner gepackt werden.
    Auch die start-bat in dem Verzeichnis ist nicht mehr aktuell. Ich wuerde das mal aktualisiern und die anleitung ins civ-wiki verfrachten.

  10. #565
    Say My Name Avatar von Zulan
    Registriert seit
    13.03.08
    Beiträge
    8.904
    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

  11. #566
    ε•ω=1 Avatar von Ramkhamhaeng
    Registriert seit
    19.07.10
    Ort
    Aralkum
    Beiträge
    9.896
    Zitat Zitat von Zulan Beitrag anzeigen
    Mir ist grad aufgefallen, dass der Post nicht mehr ganz aktuell ist (mod v4)
    [...]
    Auch die start-bat in dem Verzeichnis ist nicht mehr aktuell. Ich wuerde das mal aktualisiern und die anleitung ins civ-wiki verfrachten.
    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.

  12. #567
    ε•ω=1 Avatar von Ramkhamhaeng
    Registriert seit
    19.07.10
    Ort
    Aralkum
    Beiträge
    9.896
    Zitat Zitat von Zulan Beitrag anzeigen
    Hab mal bisschen was geschrieben:

    http://www.civ-wiki.de/wiki/Mehrspieler_(Civ4)#Pitboss


    Ok, dann versuche ich jetzt deinen neuen Eintrag mit diesem zu kombinieren, um Redundanzen zu vermeiden.

    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
    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:
    Code:
    "%CIV4BTS_EXE%" mod= "%MOD%"\" /ALTROOT=%ALTROOT%
    Wenn ich auch nur ein Quote oder den Backslash weglasse klappt es schon nicht mehr...
    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-Argument
    Code:
    
    "%CIV4BTS_EXE%" mod= %MOD%"\" /ALTROOT=%ALTROOT%
    => Python-Exception weil Altroot-nicht stimmt und daher Python-Dateien nicht gefunden werden.
    [/color]
    Jetzt könnte man auf die Idee kommen einfach mal die Position der Argumente zu tauschen, aber...
    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.
    Einzig das " vor dem Modnamen kann man dann wegelassen.
    Code:
    "%CIV4BTS_EXE%" /ALTROOT=%ALTROOT% mod= %MOD%"\"
    Die von dir verwendete Form ist also die flexibelste. Deswegen habe ich meist die gepostet

  13. #568
    ε•ω=1 Avatar von Ramkhamhaeng
    Registriert seit
    19.07.10
    Ort
    Aralkum
    Beiträge
    9.896
    Habe die Anleitung jetzt von der Mehrtspieler-Wiki-Seite auf die Pitboss-Seite verlegt und mit meiner zusammengefasst.

  14. #569
    ε•ω=1 Avatar von Ramkhamhaeng
    Registriert seit
    19.07.10
    Ort
    Aralkum
    Beiträge
    9.896
    @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

  15. #570
    Say My Name Avatar von Zulan
    Registriert seit
    13.03.08
    Beiträge
    8.904
    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.

Seite 38 von 53 ErsteErste ... 2834353637383940414248 ... LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •