Was ich schon sagen kann ist, dass er bei der Zeile
player.initBuilding(09, city.getX(), city.getY())
eine Fehlermeldung anzeigt. Hast du es denn zum Laden bekommen, ohne das eine Fehlermeldung angezeigt wird?
Was ich schon sagen kann ist, dass er bei der Zeile
player.initBuilding(09, city.getX(), city.getY())
eine Fehlermeldung anzeigt. Hast du es denn zum Laden bekommen, ohne das eine Fehlermeldung angezeigt wird?
Ja, der Mod lädt problemlos, und Spiele lassen sich auch ganz normal starten. Ohne den Eintrag für den Getreidespeicher bekomme ich ja den Krieger, wenn ich den Getreidespeicher einfüge, dann nicht mehr...Zitat von Octavian
Den Tipp in #12 umgesetzt? Python Exceptions werden sonst nicht angezeigt!
So, jetzt funktioniert es.
Ändere bitte die Zeile
player.initBuilding(09, city.getX(), city.getY())
bitte in
city.setHasRealBuilding(8, true)
ab.
Die Schreibweise "0X" mag er nicht. "9" war übrigens das Aquädukt, "8" ist der Nahrungsmittelspeicher. Wenn du deine Kenntnisse erweiterst, wirst du feststellen, dass viele Modifikationen diese Zahlen in den XML-Dateien "auslesen" lassen, sodass keine Verzählprobleme mehr auftauchen sollten und leicht eine Kompatibilität hergestellt werden kann. Wenn jemand jetzt nämlich die XML-Dateien verändert, kann es sein, dass "8" dann für ein anderes Gebäude steht. Ähnliches gilt für Einheiten.
Ein Beispiel findest du in meiner Modifikation oder in den mitgelieferten Szenarios.
Liefert den Wert für den Schwertkämpfer.PHP-Code:
self.iSWORDSMANID = CvUtil.findInfoTypeNum(gc.getUnitInfo, gc.getNumUnitInfos(), 'UNIT_SWORDSMAN')
Danke euch beiden.
Bei den Python Exceptions wird man ja wahnsinnig; sind ca 20 an der Zahl und sehr oft nur leere Fenster oder ohne Aussagekraft.
Ich hänge diese mal an, lasse aber doppelte weg. Die Reihenfolge ist die, in der die Meldungen angezeigt wurden.
@Octavian: Danke, das hat funktioniert; da habe ich mich wohl beim zählen in der XML vertan.
MfG
Caesium
Wie gesagt, erledigt und funktioniert jetzt auch. Wenn ich jetzt noch frage, wie ichs mache, dass der Getreidespeicher erst ab Töpferei bei Gründung der Städte auftaucht, reisst du mir dern Kopf ab, oder?Zitat von Octavian
Dieser Wert steht dann in self.iSWORDSMANID? Oder wo kann ich den auslesen?Ein Beispiel findest du in meiner Modifikation oder in den mitgelieferten Szenarios.
Liefert den Wert für den Schwertkämpfer.PHP-Code:
self.iSWORDSMANID = CvUtil.findInfoTypeNum(gc.getUnitInfo, gc.getNumUnitInfos(), 'UNIT_SWORDSMAN')
Geändert von cstelter (09. Januar 2006 um 15:58 Uhr)
Kennst du das Sprichwort (etwas abgewandelt): Man reicht ihm den kleinen Finger und er nimmt die ganze Hand....Zitat von cstelter
Grundsätzlich ist das etwas komplizierter. Ähnliches habe ich auch in meiner Modifkation gebraucht, deswegen sollte es nicht so schwer sein, dir die Routinen zu nennen:
Du musst für den player das zughörige Team finden ( pTeamOldOwner = gc.getTeam(player) ). Dies ist nötig, da die Instance player die Funktion isHasTech nicht kennt, diese tritt nur bei Teams auf. Dann muss lediglich noch der korrekte Wert abgefragt werden (pTeamOldOwner.isHasTech(WERT_FÜR_TÖPFERN_AUS_XML_DATEI) . Ich habe dies jetzt nicht ausprobiert, es sollte vom Aufbau her allerdings klappen.PHP-Code:
def onCityBuilt(self, argsList):
'City Built'
city = argsList[0]
# if (city.getOwner() == CyGame().getActivePlayer()):
# self.__eventEditCityNameBegin(city)
CvUtil.pyPrint('City Built Event: %s' %(city.getName()))
player = CyGlobalContext().getPlayer(0)
pTeamOldOwner = gc.getTeam(player)
if city.getOwner() == 0 and pTeamOldOwner.isHasTech(WERT_FÜR_TÖPFERN_AUS_XML_DATEI):
city.setHasRealBuilding(8, true)
Richtig. Es könnte dann also anstatt der 17 für den Krieger wie folgt heißen:Dieser Wert steht dann in self.iSWORDSMANID? Oder wo kann ich den auslesen?
PHP-Code:
player.initUnit(self.iSWORDSMANID, city.getX(), city.getY(), UnitAITypes.NO_UNITAI)
Zitat von cstelter
Dazu habe ich nur einen Tipp: Schritt für Schritt.
Also fang an mit etwas, was fehlerfrei läuft und füge dann Zeile um Zeile, Ausdruck um Ausdruck hinzu. Du kannst dabei ruhig mal Konstanten einfügen für etwas, was sich später noch ändern soll. Scheint mühsam zu sein, spart dir aber auf die Dauer unheimlich viel Zeit
Es gibt für Python überigens noch einen Debugger: den HAPDebugger, man kann die Verbindung in der Civ4.ini einschalten. Hat das jemand schon probiert? Das ist das nächste, was ich mal testen will, kann in gewissen Situationen ganz praktisch sein.
Wahrscheinlich habe ich was falsch gemacht, aber als ich ihn wie folgt aktvierte, hat er mir Civ IV nicht mehr geladen:
Ich habe aus der dort stehenden 0 eine 1 gemacht. Vielleicht muss man irgendwas anderes machen noch machen...?Code:; Establish connection to Python Debugger HAPDebugger = 1
Zuerst dachte ich ja auch, das läge an den evtl. falsch implementierten anderen Mods, aber nachdem ich die eine Textzeile, wie von Octavian empfohlen, geändert hatte, gabs gar keine Fehlermeldung mehr, d.h. diese eine kleine Veränderung des Textes brachte mir die ca. 20 Fehlermeldungen; den "Film" kannst du dir ja mal anschauen, Bild für Bild, von 2 bis keine Ahnung, in der Reihenfolge erschienen die Fehlermeldungen.Zitat von sansi
Ist ja jetzt gelöst. Python verstand wohl einfach nicht, was ich von ihm wollte.
Mensch, Mensch, Mensch, mit diesen ganzen Infos lässt sich ja bald eine ganze Enzyklopädie füllen...
Vielleicht musst du ja eine Programmverknüpfung oder einen Pfad zu eben dem Debugger definieren?Zitat von Octavian
Denen traue ich fast alles zu.
Das hatte ich eigentlich auch nicht vor. Nochmals vielen Dank. Mittlerweile erschliessen sich mir immer mehr Zusammenhänge; jede Programmiersprache hat so ihre Eigenheiten und man muss die Befehle erst mal kennenlernen.Zitat von Octavian
Mal schauen, vielleicht ist im SDK ja ne Übersicht über die von CivIV verwendeten Befehle drin.
Danke für den Link Sansi, nur bin ich einer, der auch noch Beispiele braucht, da hilft mir z.B. dieser Thread um einiges mehr. Aber für eine generelle Übersicht über die Befehle ist es nicht zu verachten. Werds mal bookmarken.
Caesium
Geändert von cstelter (09. Januar 2006 um 17:11 Uhr)
Zitat von cstelter
Ich habe den Smiliey ja nicht ohne Grund gesetzt. Du darfst natürlich noch gern mehr fragen und ich beantworte die Sachen nach bestem Wissen und Gewissen.