Ich würd behaupten, du müsstest dafür jeweils ein eigenes Panel machen. und diese dann mit attachTextGFC füllen.
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.
- Pie's Ancient Europe (letztes Update: 22.12.2022)
... im Übrigen bin ich der Meinung, dass Karthago wieder aufgebaut werden muss!
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
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.
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...
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
wenn bPython im Weltenbauerscreen deaktiviert ist, werden die dann nicht getriggert. Ähnliches könnte bei dir nützlich sein.Code:if CyGame().GetWorldBuilderMode() and not CvPlatyBuilderScreen.bPython: return
Super klappt. Danke
Tick tock goes the clock...
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.
Hab jemand einen Vorschlag wie man das umsetzen könnte ?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
Danke im Voraus....
Das muss irgendwie so aussehen:
pPlayer muss allerdings vorher noch definiert werden.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))
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
@Kathy, Danke für die schnelle Meldung.... ich bin leider kein Python Experte, wie wo muss die Variable pPlayer definiert werden ?
pPlayer erhälst du am sinnvolsten aus dem Stadtbesitzer:
Code:pPlayer = gc.getPlayer(pCity.getOwner())
Tick tock goes the clock...
Das müsste dann oben zur def dazu oder ???
EDIT geht nicht.... mein ganzes HUD ist mit dem Code verschwundenCode:def onBuildingBuilt(self, argsList): 'Building Completed' pCity, iBuildingType = argsList game = gc.getGame() pPlayer = gc.getPlayer(pCity.getOwner())
Geändert von xaster (03. September 2017 um 13:58 Uhr)
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...
Ich hab den Code von Kathy übernommen hier mal die ganze Funktion:
Geht aber leider nicht. Wie geschrieben das ganze HUD ist weg und bei starten eines Spiels kommt ein Beraterscreen !?!? also voll verschossen.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
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
auf 1 setzen, dann müssten die Python-Fehler, die als Popup kommen, zusätzlich in /MyGames/BtS/Logs/PythonErr.log abgespeichert werden.Code:; Enable the logging system LoggingEnabled = 0
Edit: Auf Anhieb sehe ich einen Einrückungsfehler in deinem Code.
ist falsch eingerückt. Aktuell ist es auf gleicher Höhe wie dein def onBuildingBuilt. Es müsste aber auf gleicher Höhe wieCode:#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
'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...
so mit der Einrückung? Ändert aber nix..
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:
Und es ändert auch nichts. Denke am Code scheint was nicht zu passen...
Geändert von xaster (03. September 2017 um 15:07 Uhr)