def safeAPICol2Building(self):
Methoden von Klassen unterscheiden sich von Funktionen darin, das als erstes Argument immer das zugehörige Objekt übergeben wird. D. h. du musst "self" einfügen.
def safeAPICol2Building(self):
Methoden von Klassen unterscheiden sich von Funktionen darin, das als erstes Argument immer das zugehörige Objekt übergeben wird. D. h. du musst "self" einfügen.
sorry,
weder so
nochCode:def onSaveGame(self, argsList): "return the string to be saved - Must be a string" safeAPICol2Building(self, argsList) return "" def safeAPICol2Building(self, argsList): Col2Building = open('E:\\Cloud\\Onedrive\\Spiele\\Colonization IV (TAC)\\CurrentGame\\Col2Building.txt', 'w') pl = gc.getPlayer(0) # Erster Spieler (city, iter) = pl.firstCity(False) # Erste Stadt, wenn Argument False, letzte Stadt wenn True cNames = [] Col2Building.write("Kolonie Name;Gebäudestrang;Gebäude\n") while city is not None: position = "(%i,%i)" % (city.plot().getX(), city.plot().getY()) cNames.append("%-30s %s" % (city.getName().encode("utf-8"),position)) for iSpecial in range(gc.getNumSpecialBuildingInfos()): BuildingPresent = False Col2Building.write(city.getName().encode("utf-8")) Col2Building.write(";") Col2Building.write(gc.getSpecialBuildingInfo(iSpecial).getText().encode("utf-8")) Col2Building.write(";") for iBuilding in range(gc.getNumBuildingInfos()): if (city.isHasBuilding(iBuilding)): if (gc.getBuildingInfo(iBuilding).getSpecialBuildingType() == iSpecial): Col2Building.write(gc.getBuildingInfo(iBuilding).getText().encode("utf-8")) Col2Building.write("\n") (city, iter) = pl.nextCity(iter, False) Col2Building.close()
Code:def onSaveGame(self, argsList): "return the string to be saved - Must be a string" safeAPICol2Building(self) return "" def safeAPICol2Building(self): Col2Building = open('E:\\Cloud\\Onedrive\\Spiele\\Colonization IV (TAC)\\CurrentGame\\Col2Building.txt', 'w') pl = gc.getPlayer(0) # Erster Spieler (city, iter) = pl.firstCity(False) # Erste Stadt, wenn Argument False, letzte Stadt wenn True cNames = [] Col2Building.write("Kolonie Name;Gebäudestrang;Gebäude\n") while city is not None: position = "(%i,%i)" % (city.plot().getX(), city.plot().getY()) cNames.append("%-30s %s" % (city.getName().encode("utf-8"),position)) for iSpecial in range(gc.getNumSpecialBuildingInfos()): BuildingPresent = False Col2Building.write(city.getName().encode("utf-8")) Col2Building.write(";") Col2Building.write(gc.getSpecialBuildingInfo(iSpecial).getText().encode("utf-8")) Col2Building.write(";") for iBuilding in range(gc.getNumBuildingInfos()): if (city.isHasBuilding(iBuilding)): if (gc.getBuildingInfo(iBuilding).getSpecialBuildingType() == iSpecial): Col2Building.write(gc.getBuildingInfo(iBuilding).getText().encode("utf-8")) Col2Building.write("\n") (city, iter) = pl.nextCity(iter, False) Col2Building.close()
habs:
Code:def onSaveGame(self, argsList): "return the string to be saved - Must be a string" self.safeAPICol2Building() return "" def safeAPICol2Building(self): # start Col & Col2Building
Hallo zusammen,
habe einige fortschritte gemacht.
Aktuel arbeite ich daran, mir die Berufe der Sielder auf den Plots einer Kolonie ausgeben zu lassen, damit ich den Yield berechnen kann.
Nun gibt es einen Spezialfall: das Koloniefeld selbst. Das hat ja zwei Yields, aber keinen Siedler und damit auch keinen Beruf.
Weiß jemand, wie ich die Yields des Koloniefeldes herankomme?
Code:for iPlotIndex in range(gc.getNUM_CITY_PLOTS()): pPlot = city.getCityIndexPlot(iPlotIndex) pUnit = city.getUnitWorkingPlot(iPlotIndex) #Für den Hompelot durch den yield aller Produkte gehen und das aufschreiben, was nicht 0 ist if iPlotIndex == gc.getCITY_HOME_PLOT(): <Tu eine ganze Menge>
Hi Mahoney,
schau doch einfach in die Quellcode Dateien der DLL. (.cpp)
Da findest du alles was es an verfügbarer Logik gibt, und siehst daher auch, wie du z.B. an die Plots des Koloniefeldes kommst.
------
Python macht ja nichts anderes als die Methoden der DLL aufzurufen.
Daher ist die "source of truth" - und damit die beste Informationquelle - immer der Source Code der DLL.
------
Im Moment gibt es kaum noch aktive Civ4Col Programmierer, die sich die Mühe machen allen anderen die Information aus der DLL rauszusuchen.
Sprich es ist am sinnvollsten sich anzugewöhnen da mal selber rein zu schauen, denn ansonsten wartest du ewig auf Antworten.
Weiterhin viel Erfolg und Spaß beim modden.
Gruß
ray
Teammitgleid dieses Projekt für Colonization:
[Mod] We The People
(Nachfolgerprojekt von Religion and Revolution)
Davor Teammitgleid dieses Projekt für Colonization:
[Mod] Religion and Revolution
Vor-Vorheriges Projekt für Colonization:
[ModMod] ray's Wunschliste
Und wiederum davor Teammitglied von:
[Mod] The Authentic Colonization (TAC)
Hallo zusammen,
ich will meine strategie etwas änder. Bisher habe ich mit den exporten in textfiles eine Excel-Tabelle gefüttert, die ich schon viel früher für manuelle Eingaben optimiert habe. Das hat nur suboptimal zu den ausgaben gepasst, die man aus Col direkt machen kann.
nun möchte ich mein ssystem neu aufsetzen, und Col direkt in eine Datenbank schreiben lassen.
Allerdings bekomme ich das Problem, sobald ich den Befehl "import pyodbc" in den CvEventManager einfüge, dass dieser nicht mehr ausgeführt wird (ich sehe das daran, dass meine textfile nicht mehr exportiert werden, außerdem wird meine dummy-Änderung in meiner Datenbank nicht durchgeführt.
Hat jemand eine Idee, woran das liegen kann?
In Civ4/Col greifst du nicht auf die Pythonversion(en) zu, die auf deinem Computer systemweit installiert sind sondern auf die Version, die direkt in das Spiel integriert ist. Dabei handelt es sich um das antike Python 2.4. Außerdem wählten sie eine schlanke Variante, welche nicht alle Standardpakete enthält.
Wenn du pyodbc verwenden willst, müsstest du daher die Lib deiner Mod hinzufügen ([Modname]\Assets\Python)
und eine alte Variante wählen, welche mit 2.4 kompatibel ist. Evtl. müsssn dann noch weitere Abhängigkeiten nachinstalliert werden.
Einfache Libs kann man ggf. auch per Hand von 2.7 auf 2.4 zurückportieren, aber ich befürchte bei deiner Lib ist das zu kompliziert.
Ob es eine Version für 2.4 gibt habe ich nicht recherchiert.
Hallo Ramk,
habe eine pypyodbc.py in meinem PyCharm Projekt zum Datenbak teste gefunden und hierhin kopiert. Ich weiß nur nicht, ob das so geht:
...\MODS\TAC 2.03_final\Assets\Python
Bisher noch ohne Erfolg. CvEventManager wird nicht ausgeführt.
Wo gehört die pypyodbc.py hin und wie rufe ich sie sauber auf?
pypyodbc sei wohl mit python 2.4 kompatibel: https://github.com/pypyodbc/pypyodbc
Der Ort passt, ich konnte die Datei aber leider selber auch noch nicht erfolgreich laden.
Die Syntax in der Datei sieht in der Tat kompatibel zu 2.4 aus.pypyodbc sei wohl mit python 2.4 kompatibel: https://github.com/pypyodbc/pypyodbc
Bei den import-Anweisungen von pypyodbc wird allerdings 'ctypes' aufgelistet. Das ist bei Python 2.4 nicht dabei und muss auch noch manuell nachinstalliert werden.
Ich habe die Quelle für ctypes hier heruntergeladen.Requirements
ctypes requires Python 2.3 or higher, since it makes intensive use
of the new type system.
In Python 2.5, the ctypes package is already included.
Allerdings wäre nun der nächste Schritt das Erstellen des ctypes-Paketes, was u.A. das Kompilieren von C-Code erfordert. Das ist heutzutage nicht ganz einfach. (Ich habe hier kein Windows und man müsste außerdem die antike Python 2.4-Version installieren.)
Falls du einen Installer für das Windows-Binärpaket von ctypes findest würden wir weiterkommenInstallation
Windows
On Windows, it is the easiest to download the executable
installer for your Python version and run it.
Installation from source
To install ctypes from source, unpack the distribution, enter
the ctypes-x.y.z source directory, and enter
python setup.py build
This will build the Python extension modules. A C compiler is
required.
To run the supplied tests, enter
python setup.py test
To install ctypes, enter
python setup.py install --help
Edit: ctypes ist mir schon mal vor ein paar Monaten (ohne Lösung) begegnet: https://forums.civfanatics.com/threa.../post-16489731
Hallo Ramk,
danke dir für die Infos, da muss ich mich wohl erst durcharbeiten,... wird allerdings dauern. Ich bin ab morgen bis Ostern außer Haus,... werde mich wohl erst danach damit beschäftigen können.
Hallo Ramk,
hilft das hier weiter: C:\Users\stefa\ctypes-master?
Ich habe Python 2.4.4 bei mir installiert und kann es über die Eingabeaufforerung auch starten. Weiß dann aber nicht weiter (vgl. Code).
ich habe das o.g. Paket (C:\Users\stefa\ctypes-master) heruntergeladen und entpackt, weiß aber nicht, wie ich aus python 2.4.4 in der Eingabeaufforerung in den Pad komme, wo ich ctypes abgelegt habe.Code:C:\Users\stefa\Python24>python.exe Python 2.4.4 (#71, Oct 18 2006, 08:34:43) [MSC v.1310 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>>
edit:
ahh so bekomme ich eine Reaktion:
für mich aber noch nicht hilfreich.Code:C:\Users\stefa\ctypes-master>C:\Users\stefa\Python24\python.exe setup.py build running build running build_py creating build creating build\lib.win32-2.4 creating build\lib.win32-2.4\ctypes copying ctypes\util.py -> build\lib.win32-2.4\ctypes copying ctypes\wintypes.py -> build\lib.win32-2.4\ctypes copying ctypes\_endian.py -> build\lib.win32-2.4\ctypes copying ctypes\__init__.py -> build\lib.win32-2.4\ctypes creating build\lib.win32-2.4\ctypes\macholib copying ctypes\macholib\dyld.py -> build\lib.win32-2.4\ctypes\macholib copying ctypes\macholib\dylib.py -> build\lib.win32-2.4\ctypes\macholib copying ctypes\macholib\framework.py -> build\lib.win32-2.4\ctypes\macholib copying ctypes\macholib\__init__.py -> build\lib.win32-2.4\ctypes\macholib creating build\lib.win32-2.4\ctypes\test copying ctypes\test\runtests.py -> build\lib.win32-2.4\ctypes\test copying ctypes\test\test_anon.py -> build\lib.win32-2.4\ctypes\test copying ctypes\test\test_arrays.py -> build\lib.win32-2.4\ctypes\test copying ctypes\test\test_array_in_pointer.py -> build\lib.win32-2.4\ctypes\test copying ctypes\test\test_as_parameter.py -> build\lib.win32-2.4\ctypes\test copying ctypes\test\test_bitfields.py -> build\lib.win32-2.4\ctypes\test copying ctypes\test\test_buffers.py -> build\lib.win32-2.4\ctypes\test copying ctypes\test\test_byteswap.py -> build\lib.win32-2.4\ctypes\test copying ctypes\test\test_callbacks.py -> build\lib.win32-2.4\ctypes\test copying ctypes\test\test_cast.py -> build\lib.win32-2.4\ctypes\test copying ctypes\test\test_cfuncs.py -> build\lib.win32-2.4\ctypes\test copying ctypes\test\test_checkretval.py -> build\lib.win32-2.4\ctypes\test copying ctypes\test\test_errcheck.py -> build\lib.win32-2.4\ctypes\test copying ctypes\test\test_find.py -> build\lib.win32-2.4\ctypes\test copying ctypes\test\test_funcptr.py -> build\lib.win32-2.4\ctypes\test copying ctypes\test\test_functions.py -> build\lib.win32-2.4\ctypes\test copying ctypes\test\test_incomplete.py -> build\lib.win32-2.4\ctypes\test copying ctypes\test\test_init.py -> build\lib.win32-2.4\ctypes\test copying ctypes\test\test_integers.py -> build\lib.win32-2.4\ctypes\test copying ctypes\test\test_internals.py -> build\lib.win32-2.4\ctypes\test copying ctypes\test\test_keeprefs.py -> build\lib.win32-2.4\ctypes\test copying ctypes\test\test_libc.py -> build\lib.win32-2.4\ctypes\test copying ctypes\test\test_loading.py -> build\lib.win32-2.4\ctypes\test copying ctypes\test\test_macholib.py -> build\lib.win32-2.4\ctypes\test copying ctypes\test\test_memfunctions.py -> build\lib.win32-2.4\ctypes\test copying ctypes\test\test_numbers.py -> build\lib.win32-2.4\ctypes\test copying ctypes\test\test_objects.py -> build\lib.win32-2.4\ctypes\test copying ctypes\test\test_parameters.py -> build\lib.win32-2.4\ctypes\test copying ctypes\test\test_pointers.py -> build\lib.win32-2.4\ctypes\test copying ctypes\test\test_prototypes.py -> build\lib.win32-2.4\ctypes\test copying ctypes\test\test_python_api.py -> build\lib.win32-2.4\ctypes\test copying ctypes\test\test_random_things.py -> build\lib.win32-2.4\ctypes\test copying ctypes\test\test_refcounts.py -> build\lib.win32-2.4\ctypes\test copying ctypes\test\test_repr.py -> build\lib.win32-2.4\ctypes\test copying ctypes\test\test_returnfuncptrs.py -> build\lib.win32-2.4\ctypes\test copying ctypes\test\test_simplesubclasses.py -> build\lib.win32-2.4\ctypes\test copying ctypes\test\test_sizes.py -> build\lib.win32-2.4\ctypes\test copying ctypes\test\test_slicing.py -> build\lib.win32-2.4\ctypes\test copying ctypes\test\test_stringptr.py -> build\lib.win32-2.4\ctypes\test copying ctypes\test\test_strings.py -> build\lib.win32-2.4\ctypes\test copying ctypes\test\test_structures.py -> build\lib.win32-2.4\ctypes\test copying ctypes\test\test_struct_fields.py -> build\lib.win32-2.4\ctypes\test copying ctypes\test\test_unaligned_structures.py -> build\lib.win32-2.4\ctypes\test copying ctypes\test\test_unicode.py -> build\lib.win32-2.4\ctypes\test copying ctypes\test\test_values.py -> build\lib.win32-2.4\ctypes\test copying ctypes\test\test_varsize_struct.py -> build\lib.win32-2.4\ctypes\test copying ctypes\test\test_win32.py -> build\lib.win32-2.4\ctypes\test copying ctypes\test\__init__.py -> build\lib.win32-2.4\ctypes\test running build_ext error: Python was built with Visual Studio 2003; extensions must be built with a compiler than can generate compatible binaries. Visual Studio 2003 was not found on this system. If you have Cygwin installed, you can try compiling with MingW32, by passing "-c mingw32" to setup.py. C:\Users\stefa\ctypes-master>
edit 2:
ich habe mich mit cygwin (https://www.cygwin.com/install.html) auseinandergesetzt und dort alle Packages die mit GCC in Zusammenhang standen installiert.
Bekomme aber trotzdem noch folgende Ausgabe:
Code:C:\Users\stefa\ctypes-master>C:\Users\stefa\Python24\python.exe setup.py build -c mingw32 running build running build_py running build_ext building '_ctypes' extension gcc -mno-cygwin -mdll -O -Wall -Isource/libffi_msvc -IC:\Users\stefa\Python24\include -IC:\Users\stefa\Python24\PC -c source/_ctypes.c -o build\temp.win32-2.4\Release\source\_ctypes.o error: command 'gcc' failed: No such file or directory
Geändert von Mahony1987 (05. April 2024 um 12:18 Uhr)