Seite 267 von 271 ErsteErste ... 167217257263264265266267268269270271 LetzteLetzte
Ergebnis 3.991 bis 4.005 von 4063

Thema: Der Pythonthread

  1. #3991
    Whovian Avatar von antriot
    Registriert seit
    30.09.12
    Ort
    TARDIS Type 40
    Beiträge
    2.641
    In welcher Datei nimmst du deine Änderungen vor? Der "normale" EventManager existiert im BUG-Mod nicht mehr, dafür einzelne Dateien unter Python/Contrib.
    Ich habe vor vielen Jahren genau das, was du versuchst, erfolgreich implementiert (mit Hilfe von The_J). Gerne kann ich dir per PN direkt helfen (auch auf Englisch, falls dir das mehr liegt) oder dir die entsprechende Datei einfach zusenden
    Tick tock goes the clock...

  2. #3992
    PAE.Macht.Antike! Avatar von Pie
    Registriert seit
    25.01.08
    Ort
    Noricum
    Beiträge
    16.342
    @antriot:
    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.


    ... im Übrigen bin ich der Meinung, dass Karthago wieder aufgebaut werden muss!

  3. #3993
    Registrierter Benutzer
    Registriert seit
    13.03.18
    Beiträge
    4
    Der "normale" EventManager existiert im BUG-Mod nicht mehr, dafür einzelne Dateien unter Python/Contrib.
    Verdammt! Es stellte sich heraus, dass ich zwei Kopien von Nextwar_em.py hatte, sowohl im Contrib- als auch im Python / Next_War-Ordner.

    Ich habe alle früher von Pie vorgeschlagenen Lösungen ausprobiert, um auszuschließen, dass dies das Problem war, aber alle von ihnen führen dazu, dass selbst im Protokoll keine Verbesserungen erzielt werden.

    Ja, bitte sende die Datei, da ich keine Ahnung habe, was ich mache.

  4. #3994
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    16.924
    Ich habe einen komischen Fehler in Python: In der letzten Zeile wird ein Fehler angezeigt, wenn ich ein Spiel starte und es noch keine Hauptstadt gibt.
    Code:
    	def onFirstContact(self, argsList):
    		'Contact'
    		iTeamX,iHasMetTeamY = argsList
    
    ### exotic illnesses beginn###
    		pTeamX = gc.getTeam(iTeamX)
    		pTeamY = gc.getTeam(iHasMetTeamY)
    		iLeaderX = pTeamX.getLeaderID()
    		iLeaderY = pTeamY.getLeaderID()
    		pPlayerX = gc.getPlayer(iLeaderX )
    		pPlayerY = gc.getPlayer(iLeaderY )
    		pCapitalX = pPlayerX.getCapitalCity ()
    		pCapitalY = pPlayerY.getCapitalCity ()
    
    	##für exotische Kontinente
    		if (pCapitalX != -1):
    			if (pCapitalY != -1):
    				if (pCapitalX.area().getID() != pCapitalY.area().getID()):
    Der Fehler lautet: "None-Type"-Object has no attribute "getID()".

    Die beiden Zeilen davor sollen in meiner Intention aber sicherstellen, dass der Code gar nicht ausgeführt wird, wenn eine der beiden Hauptstädte nicht existiert. Dann kann aber auch kein Fehler ausgegeben werden. Existieren die Hauptstädte, sollte es auch keine Fehler geben, da jede dann eine area und damit eine ID hat.
    Also müssen die Zeilen davor falsch sein. Frage: Wie sage ich in Python: Wenn es keine Hauptstadt pCapitalX bzw. pCapitalY gibt, hör auf?
    That's why I am here: Mein Mod
    Mehr Technologien, mehr Einheiten, mehr Zivilisationen, mehr Gebäude

    Die aktuelle Story zum Mod:
    Die Vereinigten Staaten von Amerika

    Alte Stories zu alten Versionen:
    Alte Storys

  5. #3995
    ε•ω=1 Avatar von Ramkhamhaeng
    Registriert seit
    19.07.10
    Ort
    Aralkum
    Beiträge
    9.896
    Zitat Zitat von Kathy Beitrag anzeigen
    Also müssen die Zeilen davor falsch sein. Frage: Wie sage ich in Python: Wenn es keine Hauptstadt pCapitalX bzw. pCapitalY gibt, hör auf?
    Pythonstil wäre „if pCapital is None:
    Allerdings, aus meiner Erinnerung, gibt es bei Civ4 das Problem, dass die C++-Bindings wie .getCapitalCity() nicht None zurückliefern sondern unbenutzbare Objekte. Dafür gibt es dann immer die Methode .isNone() mit der man prüfen kann ob das Objekt valide ist.
    Das führt leider zu ziemlichem Spagetticode.

    Code:
    if pCapitalX is None or pCapitalY.isNone(): return
    if pCapitalY is None or pCapitalY.isNone(): return
    # Hier ist nun alles save

  6. #3996
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    16.924
    Meinst du:
    Code:
    		pCapitalX = pPlayerX.getCapitalCity ()
    		pCapitalY = pPlayerY.getCapitalCity ()
    
    	##für exotische Kontinente
    		if pCapitalX is None or pCapitalY.isNone(): return
    		if pCapitalY is None or pCapitalY.isNone(): return
    		else:
    				if (pCapitalX.area().getID() != pCapitalY.area().getID()):
    Oder ohne else?
    That's why I am here: Mein Mod
    Mehr Technologien, mehr Einheiten, mehr Zivilisationen, mehr Gebäude

    Die aktuelle Story zum Mod:
    Die Vereinigten Staaten von Amerika

    Alte Stories zu alten Versionen:
    Alte Storys

  7. #3997
    ε•ω=1 Avatar von Ramkhamhaeng
    Registriert seit
    19.07.10
    Ort
    Aralkum
    Beiträge
    9.896
    Du kannst es auch mit Else aufschreiben, müsstest dann aber theoretisch in der zweiten Zeile elif schreiben, damit es sich auf beide Bedingungen bezieht.

    Wegen der zwei Return-Anweisungen sind die drei Varianten aber alle bei der Ausführung äquivalent. Welche Formulierung zu bevorzugen ist hängt vom restlichen Code der Funktion ab.

  8. #3998
    Registrierter Benutzer
    Registriert seit
    21.03.12
    Beiträge
    22.398
    Der Fehler ist aber nicht, dass die Capitals none sind, sondern deren Area-Referenz. Sollte nicht vorkommen, tuts aber irgendwie. Hiermit wärst du dann auf der sicheren Seite:

    Code:
    if pCapitalX and not pCapitalX.isNone() and pCapitalY and not pCapitalY.isNone():
        if pCapitalX.area() and pCapitalY.area():
            if pCapitalX.area().getID() != pCapitalY.area().getID():
                blub
    "if pCapitalX" ist äquivalent zu "if pCapitalX not is none and pCapitalX != false and pCapitalX != 0" und was sonst noch so zu false auswerten würde.

  9. #3999
    ε•ω=1 Avatar von Ramkhamhaeng
    Registriert seit
    19.07.10
    Ort
    Aralkum
    Beiträge
    9.896
    Zitat Zitat von Flunky Beitrag anzeigen
    Der Fehler ist aber nicht, dass die Capitals none sind, sondern deren Area-Referenz. Sollte nicht vorkommen, tuts aber irgendwie.
    Da hast du natürlich recht. Es tritt erst bei der Area-Referenz das Problem auf.
    Kathy, du könntest auch probieren CyMap().recalculateAreas() aufzurufen, wenn das Problem auftritt. Wäre interessant zu wissen ob eine Neuberechnung das Problem behebt oder ob dann immer noch None zurückgegeben wird.

  10. #4000
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    16.924
    Nun, das Problem tritt ja deswegen bei den Areas auf, weil NONE-Hauptstädte keine Area haben und daher nichts Sinnvolles zurückgeben (bzw. das NONE-Objekt generell keine Areas zurückgeben können). Aber das Code soll ja gar nicht ausgeführt werden, wenn eine der beiden Zivilisationen keine Hauptstadt hat.
    Die Fehlermeldung kommt beim Neustart eines Spiels, wenn niemand eine Hauptstadt hat, und jeder sich irgendwie selbst zum ersten mal kontaktiert.
    That's why I am here: Mein Mod
    Mehr Technologien, mehr Einheiten, mehr Zivilisationen, mehr Gebäude

    Die aktuelle Story zum Mod:
    Die Vereinigten Staaten von Amerika

    Alte Stories zu alten Versionen:
    Alte Storys

  11. #4001
    Registrierter Benutzer
    Registriert seit
    21.03.12
    Beiträge
    22.398
    Der Fehler lautet: "None-Type"-Object has no attribute "getID()".
    getID() rufst du auf der Area auf, die ist also None. Mit der Hauptstadt hat das erstmal wenig zu tun. Eventuell passiert der Code einfach bevor es sinnvolle Areas gibt. Einen zweiten Guard einzuführen, wie ich oben geschrieben hab, sollte dein Problem lösen.

    Hier nochmal ein bissl optimiert
    Code:
    if pCapitalX and not pCapitalX.isNone() and pCapitalY and not pCapitalY.isNone():
        area1 = pCapitalX.area() 
        area2 = pCapitalY.area() 
        if area1 and not area1.isNone() and area2 and not area2.isNone():
            if area1.getID() != area2.getID():
                blub

  12. #4002
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    16.924
    Betrachte die Zeile als ganzes: getID() ist leer, weil der Befehl davor leer ist. Das hat natürlich mit der Hauptstadt zu tun - die Area wird je im selben Moment aus dieser erzeugt. In der Zeile steht schließlich sozusagen:

    NONE.area().getID()

    Dadurch wird, wie du sagst, ein weiteres ungültiges Objekt erzeugt (NONE.area() gibt nichts zurück), das dann wieder keine ID hat.

    Wäre die Hauptstadt nicht NONE, sondern ein gültiges Objekt, würde pCapitalX eine gültige Area zurückgeben und damit eine gültige ID. Das Problem ist also die Hauptstadt. Darum soll der Befehl, wenn es keine Hauptstadt gibt, nicht ausgeführt werden - so würde ich es in SDK machen, damit es keinen Absturz gibt. Nur das Abfangen funktioniert in meiner Ursprungsversion nicht. Ich schaue mal, wie es mit deiner Version aussieht.

    Edit: Oder meinst du, dass pCapitalX.area() nicht das Problem sein kann, weil er sich nicht beschwert, dass "NONE-Object has no attribute area()" ? Dann habe ich dich bisher missverstanden
    Geändert von Kathy (23. April 2018 um 19:41 Uhr)
    That's why I am here: Mein Mod
    Mehr Technologien, mehr Einheiten, mehr Zivilisationen, mehr Gebäude

    Die aktuelle Story zum Mod:
    Die Vereinigten Staaten von Amerika

    Alte Stories zu alten Versionen:
    Alte Storys

  13. #4003
    ε•ω=1 Avatar von Ramkhamhaeng
    Registriert seit
    19.07.10
    Ort
    Aralkum
    Beiträge
    9.896
    Nein, die Capitalvariable ist nicht None. Dann würde die Fehlermeldung
    Der Fehler lautet: "None-Type"-Object has no attribute "area()".
    lauten. Daher kann erst die Rückgabe von area() das Problem sein.

  14. #4004
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    16.924
    Ich verstehe zwar immer noch nicht, wie ein ungültiges Stadt-Objekt eine Area zurückgeben kann, aber mit Flunkys Bedingungen gibt es zumindest keine Fehlermeldung beim Start und das Event funktioniert im Spiel trotzdem. Danke euch beiden.
    That's why I am here: Mein Mod
    Mehr Technologien, mehr Einheiten, mehr Zivilisationen, mehr Gebäude

    Die aktuelle Story zum Mod:
    Die Vereinigten Staaten von Amerika

    Alte Stories zu alten Versionen:
    Alte Storys

  15. #4005
    Registrierter Benutzer
    Registriert seit
    21.03.12
    Beiträge
    22.398
    Die Hauptstadt ist aus irgendeinem Grund gültig, hat nur keine Area. Vielleicht initialisiert Civ erstmal Hauptstädte für alle Civs im Nirvana und löscht sie anschließend wieder.

Seite 267 von 271 ErsteErste ... 167217257263264265266267268269270271 LetzteLetzte

Berechtigungen

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