Seite 264 von 271 ErsteErste ... 164214254260261262263264265266267268 ... LetzteLetzte
Ergebnis 3.946 bis 3.960 von 4063

Thema: Der Pythonthread

  1. #3946
    PAE.Macht.Antike! Avatar von Pie
    Registriert seit
    25.01.08
    Ort
    Noricum
    Beiträge
    16.347
    Ich würd behaupten, du müsstest dafür jeweils ein eigenes Panel machen. und diese dann mit attachTextGFC füllen.
    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!

  2. #3947
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    16.988
    Ich habe es jetzt so gemacht, auch wenn es mir nicht gut gefällt. Man sieht jetzt die Informationen, die ich haben wollte, aber schön ist etwas anderes. Vielen Dank.
    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

  3. #3948
    ε•ω=1 Avatar von Ramkhamhaeng
    Registriert seit
    19.07.10
    Ort
    Aralkum
    Beiträge
    9.896
    Bin eben in eine ganz böse Falle getappt Irgendwann bewirkten Änderungen am Code überhaupt nichts mehr im Spiel. Der Dateipfad stimmte aber und beim Speichern der Dateien erschien sogar im Spiel die Meldung, dass die Module neu geladen würden

    Lösung: Aus Versehen wurden zwischendurch beim Kopieren die Python-Dateien nicht überschrieben sondern es entstand der Ordner [bla bla]\Python\Python. Civ4 präferiert beim Laden der Module dann die Dateien im Unterordner.

  4. #3949
    Whovian Avatar von antriot
    Registriert seit
    30.09.12
    Ort
    TARDIS Type 40
    Beiträge
    2.641
    Ich möchte bei Erforschung einer Techn ein GA triggern. Per Python in der Funktion onTechAcquired kein Problem. Nur: Wie verhindere ich, dass beim Spielstart in der Zukunft das GA automatisch getriggert wird? Überprüfung der GameTurn klappt in Szenarios mit GameTurn > 0 leider nicht. Gibt es eine andere Möglichkeit?
    Tick tock goes the clock...

  5. #3950
    ε•ω=1 Avatar von Ramkhamhaeng
    Registriert seit
    19.07.10
    Ort
    Aralkum
    Beiträge
    9.896
    Zitat Zitat von antriot Beitrag anzeigen
    Ich möchte bei Erforschung einer Techn ein GA triggern. Per Python in der Funktion onTechAcquired kein Problem. Nur: Wie verhindere ich, dass beim Spielstart in der Zukunft das GA automatisch getriggert wird? Überprüfung der GameTurn klappt in Szenarios mit GameTurn > 0 leider nicht. Gibt es eine andere Möglichkeit?
    Es gibt eine Funktion CyGame().getElapsedGameTurns (), die da helfen müsste.
    Außerdem willst du vielleicht auch noch verhindern, dass das GA per Weltenbauer ausgelöst wird?! Im Platy-Weltenbauer gibt es bei vielen Ereignissen Abfragen der Form
    Code:
            if CyGame().GetWorldBuilderMode() and not CvPlatyBuilderScreen.bPython:
                return
    wenn bPython im Weltenbauerscreen deaktiviert ist, werden die dann nicht getriggert. Ähnliches könnte bei dir nützlich sein.

  6. #3951
    Whovian Avatar von antriot
    Registriert seit
    30.09.12
    Ort
    TARDIS Type 40
    Beiträge
    2.641
    Super klappt. Danke
    Tick tock goes the clock...

  7. #3952
    Registrierter Benutzer Avatar von xaster
    Registriert seit
    10.02.06
    Beiträge
    55
    Hallo zusammen, ich benötige etwas Hilfe für ein Python script was ich in der "CvEventManager.py" laufen lassen möchte. Es soll eine Abwandlung vom Next War Mod Script für die Arcologys sein.
    Nur eben nicht für eine City sondern für alle der betreffenden Civ.
    Ziel ist es, ich habe 2 Bulidings hier im Beispiel XXX und ZZZ. Die jeweilige Civ soll immer nur eines der Beiden
    besitzen dürfen. Wenn XXX gebaut ist und ZZZ erstellt wurde dann wird XXX entfernt. Das Script hier funktiontioniert im Moment für eine City in der gebaut wurde!
    Wie müsste der Code aussehen das alle Citys vom Player einbezogen werden
    Also wenn City A das Buliding XXX hat und dann baue ich in City D das Buliding ZZZ soll XXX in City A
    vom Script entfernt werden.

    Code:
        def onBuildingBuilt(self, argsList):
            'Building Completed'
            pCity, iBuildingType = argsList
            game = gc.getGame()
            if pCity.getOwner() == gc.getGame().getActivePlayer() and gc.getBuildingInfo(iBuildingType).getMovieDefineTag() != "NONE":
                # If this is a wonder...
                popupInfo = CyPopupInfo()
                popupInfo.setButtonPopupType(ButtonPopupTypes.BUTTONPOPUP_PYTHON_SCREEN)
                popupInfo.setData1(iBuildingType)
                popupInfo.setData2(pCity.getID())
                popupInfo.setData3(0)
                popupInfo.setText(u"showWonderMovie")
                popupInfo.addPopup(pCity.getOwner())
    
            CvAdvisorUtils.buildingBuiltFeats(pCity, iBuildingType)
    
    #replace ARCOLOGY with higher level     
            if iBuildingType == CvUtil.findInfoTypeNum(gc.getBuildingInfo, gc.getNumBuildingInfos(), "BUILDING_ARCOLOGY_SHIELDING"):
                pCity.setNumRealBuilding(CvUtil.findInfoTypeNum(gc.getBuildingInfo, gc.getNumBuildingInfos(), "BUILDING_ARCOLOGY"), False)
            elif iBuildingType == CvUtil.findInfoTypeNum(gc.getBuildingInfo, gc.getNumBuildingInfos(), "BUILDING_DEFLECTOR_SHIELDING"):
                pCity.setNumRealBuilding(CvUtil.findInfoTypeNum(gc.getBuildingInfo, gc.getNumBuildingInfos(), "BUILDING_ARCOLOGY_SHIELDING"), False)
    
    #TEST         
            elif iBuildingType == CvUtil.findInfoTypeNum(gc.getBuildingInfo, gc.getNumBuildingInfos(), "BUILDING_XXX"):
                pCity.setNumRealBuilding(CvUtil.findInfoTypeNum(gc.getBuildingInfo, gc.getNumBuildingInfos(), "BUILDING_ZZZ"), False)
            elif iBuildingType == CvUtil.findInfoTypeNum(gc.getBuildingInfo, gc.getNumBuildingInfos(), "BUILDING_ZZZ"):
                pCity.setNumRealBuilding(CvUtil.findInfoTypeNum(gc.getBuildingInfo, gc.getNumBuildingInfos(), "BUILDING_XXX"), False)
    #TEST END
    Hab jemand einen Vorschlag wie man das umsetzen könnte ?
    Danke im Voraus....

  8. #3953
    Moderator Avatar von Kathy
    Registriert seit
    11.10.07
    Beiträge
    16.988
    Das muss irgendwie so aussehen:
    Code:
            elif iBuildingType == CvUtil.findInfoTypeNum(gc.getBuildingInfo, gc.getNumBuildingInfos(), "BUILDING_XXX"):
    		(loopCity, iter) = (pPlayer.firstCity(True))
    		while(loopCity):
                            loopCity.setNumRealBuilding(CvUtil.findInfoTypeNum(gc.getBuildingInfo, gc.getNumBuildingInfos(), "BUILDING_ZZZ"), False)
    			(loopCity, iter) = (pPlayer.nextCity(iter, true))
            elif iBuildingType == CvUtil.findInfoTypeNum(gc.getBuildingInfo, gc.getNumBuildingInfos(), "BUILDING_ZZZ"):
    		(loopCity, iter) = (pPlayer.firstCity(True))
    		while(loopCity):
                            pCity.setNumRealBuilding(CvUtil.findInfoTypeNum(gc.getBuildingInfo, gc.getNumBuildingInfos(), "BUILDING_XXX"), False)
    			(loopCity, iter) = (pPlayer.nextCity(iter, true))
    pPlayer muss allerdings vorher noch definiert werden.
    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

  9. #3954
    Registrierter Benutzer Avatar von xaster
    Registriert seit
    10.02.06
    Beiträge
    55
    @Kathy, Danke für die schnelle Meldung.... ich bin leider kein Python Experte, wie wo muss die Variable pPlayer definiert werden ?

  10. #3955
    Whovian Avatar von antriot
    Registriert seit
    30.09.12
    Ort
    TARDIS Type 40
    Beiträge
    2.641
    pPlayer erhälst du am sinnvolsten aus dem Stadtbesitzer:
    Code:
    pPlayer = gc.getPlayer(pCity.getOwner())
    Tick tock goes the clock...

  11. #3956
    Registrierter Benutzer Avatar von xaster
    Registriert seit
    10.02.06
    Beiträge
    55
    Das müsste dann oben zur def dazu oder ???

    Code:
    	def onBuildingBuilt(self, argsList):
    		'Building Completed'
    		pCity, iBuildingType = argsList
    		game = gc.getGame()
    		pPlayer = gc.getPlayer(pCity.getOwner())
    EDIT geht nicht.... mein ganzes HUD ist mit dem Code verschwunden
    Geändert von xaster (03. September 2017 um 13:58 Uhr)

  12. #3957
    Whovian Avatar von antriot
    Registriert seit
    30.09.12
    Ort
    TARDIS Type 40
    Beiträge
    2.641
    Genau da muss es hin. Irgendwo vor deiner ersten Verwendung von pPlayer halt

    Fehlermeldungen? Wenn nein, setzte in der Civilization4.ini (unter Documents/MyGames/BtS) den Wert HidePythonExceptions auf 0.

    Achte außerdem darauf, dass du alle Einrückungen richtig machst und keine Tabs und Leerzeichen dabei vermischst. Python erkennt die "Reichweite" von Schleifen, ect... nur an der Einrückung (deshalb gibt es keine geschweiften Klammern).
    Tick tock goes the clock...

  13. #3958
    Registrierter Benutzer Avatar von xaster
    Registriert seit
    10.02.06
    Beiträge
    55
    Ich hab den Code von Kathy übernommen hier mal die ganze Funktion:

    Code:
    	def onBuildingBuilt(self, argsList):
    		'Building Completed'
    		pCity, iBuildingType = argsList
    		pPlayer = gc.getPlayer(pCity.getOwner())
    		game = gc.getGame()
    #Movie popup for national and global wonders
    		if pCity.getOwner() == gc.getGame().getActivePlayer() and gc.getBuildingInfo(iBuildingType).getMovieDefineTag() != "NONE":
    			# If this is a wonder...
    			popupInfo = CyPopupInfo()
    			popupInfo.setButtonPopupType(ButtonPopupTypes.BUTTONPOPUP_PYTHON_SCREEN)
    			popupInfo.setData1(iBuildingType)
    			popupInfo.setData2(pCity.getID())
    			popupInfo.setData3(0)
    			popupInfo.setText(u"showWonderMovie")
    			popupInfo.addPopup(pCity.getOwner())
    
    		CvAdvisorUtils.buildingBuiltFeats(pCity, iBuildingType)
    
    #replace arcology with higher version
    		if iBuildingType == CvUtil.findInfoTypeNum(gc.getBuildingInfo, gc.getNumBuildingInfos(), "BUILDING_ARCOLOGY_SHIELDING"):
    			pCity.setNumRealBuilding(CvUtil.findInfoTypeNum(gc.getBuildingInfo, gc.getNumBuildingInfos(), "BUILDING_ARCOLOGY"), False)
    		elif iBuildingType == CvUtil.findInfoTypeNum(gc.getBuildingInfo, gc.getNumBuildingInfos(), "BUILDING_DEFLECTOR_SHIELDING"):
    			pCity.setNumRealBuilding(CvUtil.findInfoTypeNum(gc.getBuildingInfo, gc.getNumBuildingInfos(), "BUILDING_ARCOLOGY_SHIELDING"), False)
    #replace arcology with higher version END
    
    #TEST
            elif iBuildingType == CvUtil.findInfoTypeNum(gc.getBuildingInfo, gc.getNumBuildingInfos(), "BUILDING_XXX"):
    		(loopCity, iter) = (pPlayer.firstCity(True))
    		while(loopCity):
                            loopCity.setNumRealBuilding(CvUtil.findInfoTypeNum(gc.getBuildingInfo, gc.getNumBuildingInfos(), "BUILDING_ZZZ"), False)
    			(loopCity, iter) = (pPlayer.nextCity(iter, true))
            elif iBuildingType == CvUtil.findInfoTypeNum(gc.getBuildingInfo, gc.getNumBuildingInfos(), "BUILDING_ZZZ"):
    		(loopCity, iter) = (pPlayer.firstCity(True))
    		while(loopCity):
                            pCity.setNumRealBuilding(CvUtil.findInfoTypeNum(gc.getBuildingInfo, gc.getNumBuildingInfos(), "BUILDING_XXX"), False)
    			(loopCity, iter) = (pPlayer.nextCity(iter, true))
    #TEST
    Geht aber leider nicht. Wie geschrieben das ganze HUD ist weg und bei starten eines Spiels kommt ein Beraterscreen !?!? also voll verschossen.
    Wenn ich HidePythonExceptions auf 0 setze kommt beim Gamestart direkt Traceback( most recent Call last )

  14. #3959
    Whovian Avatar von antriot
    Registriert seit
    30.09.12
    Ort
    TARDIS Type 40
    Beiträge
    2.641
    Zitat Zitat von xaster Beitrag anzeigen
    Wenn ich HidePythonExceptions auf 0 setze kommt beim Gamestart direkt Traceback( most recent Call last )
    Genau das sind die Fehlermeldungen, die weiter helfen
    Du kannst auch
    Code:
    ; Enable the logging system
    LoggingEnabled = 0
    auf 1 setzen, dann müssten die Python-Fehler, die als Popup kommen, zusätzlich in /MyGames/BtS/Logs/PythonErr.log abgespeichert werden.

    Edit: Auf Anhieb sehe ich einen Einrückungsfehler in deinem Code.
    Code:
    #TEST
            elif iBuildingType == CvUtil.findInfoTypeNum(gc.getBuildingInfo, gc.getNumBuildingInfos(), "BUILDING_XXX"):
    		(loopCity, iter) = (pPlayer.firstCity(True))
    		while(loopCity):
                            loopCity.setNumRealBuilding(CvUtil.findInfoTypeNum(gc.getBuildingInfo, gc.getNumBuildingInfos(), "BUILDING_ZZZ"), False)
    			(loopCity, iter) = (pPlayer.nextCity(iter, true))
            elif iBuildingType == CvUtil.findInfoTypeNum(gc.getBuildingInfo, gc.getNumBuildingInfos(), "BUILDING_ZZZ"):
    		(loopCity, iter) = (pPlayer.firstCity(True))
    		while(loopCity):
                            pCity.setNumRealBuilding(CvUtil.findInfoTypeNum(gc.getBuildingInfo, gc.getNumBuildingInfos(), "BUILDING_XXX"), False)
    			(loopCity, iter) = (pPlayer.nextCity(iter, true))
    #TEST
    ist falsch eingerückt. Aktuell ist es auf gleicher Höhe wie dein def onBuildingBuilt. Es müsste aber auf gleicher Höhe wie
    'Building Completed', pCity, iBuildingType = argsList, usw... sein. Die Einrückung unter dem elif musst du dann auch noch um eins verschieben.
    Tick tock goes the clock...

  15. #3960
    Registrierter Benutzer Avatar von xaster
    Registriert seit
    10.02.06
    Beiträge
    55
    so mit der Einrückung? Ändert aber nix..

    Bild

    Log:
    load_module CvEventManager
    Traceback (most recent call last):
    File "<string>", line 1, in ?
    File "<string>", line 52, in load_module
    File "CvEventInterface", line 17, in ?
    File "<string>", line 52, in load_module
    File "BugEventManager", line 102, in ?
    File "<string>", line 35, in load_module
    File "<string>", line 13, in _get_code
    File "CvEventManager", line 567
    elif iBuildingType == CvUtil.findInfoTypeNum(gc.getBuildingInfo, gc.getNumBuildingInfos(), "BUILDING_XXX"):
    ^
    SyntaxError: invalid syntax
    load_module CvAppInterface
    load_module os
    load_module CvUtil
    load_module traceback

    edit:
    Hab mich jetzt nochmal mit dem einrücken an die anderen Funktionen orientiert:

    Bild

    Und es ändert auch nichts. Denke am Code scheint was nicht zu passen...
    Angehängte Grafiken Angehängte Grafiken
    Geändert von xaster (03. September 2017 um 15:07 Uhr)

Seite 264 von 271 ErsteErste ... 164214254260261262263264265266267268 ... LetzteLetzte

Berechtigungen

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