Versuche mal
PHP-Code:
(loopCity, iter) = OldPlayer.nextCity(iter, true)
Versuche mal
PHP-Code:
(loopCity, iter) = OldPlayer.nextCity(iter, true)
Ja, vielen Dank, Alpha Civ! Das war die Ursache! Es läuft!
Ein Problem tritt noch auf: Wenn ich das Spiel lade, scheint self.capital noch nicht gesetzt. Erobere ich in der ersten Runde eine Stadt, erhalte ich für die beteiligten Spieler nur einen Key Error.
Ich hatte versucht, das zu verhindern, indem ich in OnLoadGame folgendes eingebaut habe:
Leider funktioniert es immer noch nicht.PHP-Code:
def onLoadGame(self, argsList):
CvAdvisorUtils.resetNoLiberateCities()
return 0
### SpaltungAnfang###
for iPlayer in range(gc.getMAX_PLAYERS()):
player = gc.getPlayer(iPlayer)
iCity = player.getCapitalCity().getID()
self.capital[iPlayer] = iCity
### SpaltungENDE###
Das " return 0" sollte die Ursache sein. Hier wird nämlich die Funktion beendet und 0 zurückgegeben. Weiterer Code nach return wird nicht ausgeführt.
Tschuldigung, das musste jetzt sein. Was man alles übersehen kann.
Edit: Es läuft! Danke, The J und alpha civ!
Geändert von Kathy (14. Mai 2011 um 21:04 Uhr)
Hi, ich habe ein Problem, ich versuche mit Bautrupps die Geländeeigenschaft (Gras, Ebene...) zu ändern, das klappt auch ganz gut, aber, da ich nur einen Bautruppauftrag erstellen möchte, will ich das Programm dazu bewegen, dass ein Popup erscheint in dem man dann auswählen kann, welche Eigenschaft man haben möchte. Ich habe es nach diesem Tutorial von Kael gemacht, und mit diesem Code:Dazu habe ich einige Fragen;PHP-Code:
def onImprovementBuilt(self, argsList):
'Improvement Built'
iImprovement, iX, iY = argsList
###Neu Landaufschüttung
pPlot = CyMap().plot(iX, iY)
if iImprovement == gc.getInfoTypeForString('IMPROVEMENT_LANDAUFSCHÜTTUNG'):
pPlot.setPlotType(PlotTypes.PLOT_LAND, True, True)
pPlot.setImprovementType(-1)
###Ende Landaufschüttung
###Beginn Popup
pPlot = CyMap().plot(iX, iY)
if iImprovement == gc.getInfoTypeForString('IMPROVEMENT_LANDAUFSCHÜTTUNG'):
iPlayerNum = 0
for iPlayer in range(gc.getMAX_PLAYERS()):
player = gc.getPlayer(iPlayer)
if player.isAlive():
iPlayerNum = iPlayerNum + 1
if player.isHuman():
popupInfo = CyPopupInfo()
popupInfo.setButtonPopupType(ButtonPopupTypes.BUTTONPOPUP_PYTHON)
popupInfo.setText('Welche Geländeart möchtest Du errichten?')
popupInfo.setData1(iPlayer)
popupInfo.setData2(pPlot)
popupInfo.setOnClickedPythonCallBack("SelectTerrainType")
popupInfo.addPythonButton('Grassland')
popupInfo.addPythonButton('Ebene')
popupInfo.addPopup(iPlayer)
###Ende Popup
if (not self.__LOG_IMPROVEMENT):
return
CvUtil.pyPrint('Improvement %s was built at %d, %d'
%(PyInfo.ImprovementInfo(iImprovement).getDescription(), iX, iY))
Warum funktioniert das nicht?
Was ist iPlayerNum?
Ich habe dazu auch in der CvScreensInterface.py folgenden Eintrag (bei den Misc Functions) vorgenommen:Ich glaube aber eher, dass der Eintrag im cvEventManager.py fehlerhaft ist. Noch eine Frage am Rande, kann man einstellen, dass die KI eine bestimmte Modernisierung nicht bauen kann?PHP-Code:
############Neu TerrainTypes Auswahl
def SelectTerrainType(argsList):
iButtonId = argsList[0]
iData1 = argsList[1]
iData2 = argsList[2]
iData3 = argsList[3]
iData4 = argsList[4]
szText = argsList[5]
bOption1 = argsList[6]
bOption2 = argsList[7]
pPlayer = gc.getPlayer(iData(1))
pPlot = gc.getPlot(iData(2))
if iButtonId == 0:
pPlot.setTerrainType (TerrainTypes(0))
if iButtonId == 1:
pPlot.setTerrainType (TerrainTypes(1))
#############Das war´s mit den TerrainTypes... :)
Zum Download bereit: Civ4-Mod "Mars, jetzt!"
"Frei sein heißt wählen können, wessen Sklave man sein will." (Jeanne Moreau, 1928 - )
"Immer wenn man die Meinung der Mehrheit teilt, ist es Zeit, sich zu besinnen." (Mark Twain, 1835 - 1910)
eigentlich schon, aber ich konnte keinen Fehler isolieren, wo genau werden denn die ErrorLogs gespeichert? Und was ist eine BT-UU?
BT-UU = Bautrupp Einzigartige Einheit, also zbs der Indische Bauttrupp
Wenn du die Fehlermeldungen aktiviert hättest, dann würdest du sie auch sehen .
Also in der Haupt-Ini (Eigene Dateien\My Games\BtS\Civ4.ini) den Wert
auf 0 ändern.PHP-Code:
; Set to 1 for no python exception popups
HidePythonExceptions = 1
Und wenn ich mir das gerade so angegucke:
Zum Zugriff auf Werte eines Tupels bitte auch eckige Klammern benutzen, und die Indizes beginnen in Python bei 0, nicht bei 1 .PHP-Code:
pPlayer = gc.getPlayer(iData(1))
pPlot = gc.getPlot(iData(2))
Allerdings macht das nciht wirklich Sinn, da die Daten ja separat in iData1 und iData2 gespeichert sein sollten .
Und als allerletztes: *Was* funktioniert eigentlich nicht? Bekommst du ein Popup oder nicht?
Zum Download bereit: Civ4-Mod "Mars, jetzt!"
"Frei sein heißt wählen können, wessen Sklave man sein will." (Jeanne Moreau, 1928 - )
"Immer wenn man die Meinung der Mehrheit teilt, ist es Zeit, sich zu besinnen." (Mark Twain, 1835 - 1910)
Also nochmal von vorne, das Problem ist, dass ich kein Popup bekomme, er gibt mir lediglich folgenden Fehler, den ich aber leider nicht verstehe. Bitte seid nachsichtig mit mir, bin noch neu! Und ja ich hatte PythonExceptions schon länger aktiviert, aber ich dachte immer der ErrorLog würde irgendwo gespeichert. Ich hoffe die Fehlermeldung hilft Euch weiter. Ich gebe zu, dass ich den Code mit dem iDatas selbst verändert habe, dachte aber, dass das so stimmen würde. (wie gesagt, bin neu)
Anscheinend versteht Civ einen der Umlaute nicht.
(0xe4 ist nämlich der Buchstabe ä)
Hi, das konnte ich natürlich nicht wissen, ich habe es jetzt mal mit ae anstatt ä probiert, aber das kann es doch nicht sein? Ich erhalte jetzt einen neuen Fehler, sieht wieder nach einem falschen Zeichen aus.
Du musst alle anderen Umlaute wohl auch ersetzen. 0xf6 ist das ö.
Ich glaub du darfst für Namen nur ASCII Zeichen benutzen...