Seite 2 von 2 ErsteErste 12
Ergebnis 16 bis 26 von 26

Thema: Daten aus dem Spiel abfragen

  1. #16
    ε•ω=1 Avatar von Ramkhamhaeng
    Registriert seit
    19.07.10
    Ort
    Aralkum
    Beiträge
    9.904
    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.

  2. #17
    Registrierter Benutzer
    Registriert seit
    16.11.20
    Beiträge
    17
    sorry,

    weder so
    Code:
    	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()
    noch
    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()

  3. #18
    Registrierter Benutzer
    Registriert seit
    16.11.20
    Beiträge
    17
    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

  4. #19
    Registrierter Benutzer
    Registriert seit
    16.11.20
    Beiträge
    17
    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>

  5. #20
    Col-Modder Avatar von raystuttgart
    Registriert seit
    19.03.10
    Ort
    Stuttgart
    Beiträge
    4.585
    Zitat Zitat von Mahony1987 Beitrag anzeigen
    Weiß jemand, wie ich die Yields des Koloniefeldes herankomme?
    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)

  6. #21
    Registrierter Benutzer
    Registriert seit
    16.11.20
    Beiträge
    17
    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?

  7. #22
    ε•ω=1 Avatar von Ramkhamhaeng
    Registriert seit
    19.07.10
    Ort
    Aralkum
    Beiträge
    9.904
    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.

  8. #23
    Registrierter Benutzer
    Registriert seit
    16.11.20
    Beiträge
    17
    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

  9. #24
    ε•ω=1 Avatar von Ramkhamhaeng
    Registriert seit
    19.07.10
    Ort
    Aralkum
    Beiträge
    9.904
    Zitat Zitat von Mahony1987 Beitrag anzeigen
    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?
    Der Ort passt, ich konnte die Datei aber leider selber auch noch nicht erfolgreich laden.

    pypyodbc sei wohl mit python 2.4 kompatibel: https://github.com/pypyodbc/pypyodbc
    Die Syntax in der Datei sieht in der Tat kompatibel zu 2.4 aus.
    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.

    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.
    Ich habe die Quelle für ctypes hier heruntergeladen.
    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.)
    Installation

    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
    Falls du einen Installer für das Windows-Binärpaket von ctypes findest würden wir weiterkommen


    Edit: ctypes ist mir schon mal vor ein paar Monaten (ohne Lösung) begegnet: https://forums.civfanatics.com/threa.../post-16489731

  10. #25
    Registrierter Benutzer
    Registriert seit
    16.11.20
    Beiträge
    17
    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.

  11. #26
    Registrierter Benutzer
    Registriert seit
    16.11.20
    Beiträge
    17
    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).

    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.
    >>>
    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.

    edit:
    ahh so bekomme ich eine Reaktion:
    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>
    für mich aber noch nicht hilfreich.

    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)

Seite 2 von 2 ErsteErste 12

Berechtigungen

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