Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 15 von 16

Thema: Import/Export Python modding möglich

  1. #1
    Registrierter Benutzer
    Registriert seit
    01.10.13
    Beiträge
    18

    Kleiner Import/Export Mod für TAC

    Hi,

    ich würde gerne Import/Export modden in python.
    Was ich bis jetzt so gesehen habe wäre das ja über http://forums.civfanatics.com/showth...1001#AI_Script möglich, richtig?
    Also bevor ich mich da reinarbeite kann mir jemand beantworten, "möglich" oder "vergiss es"?

    greetz

    ------------------------------------------------------------------------------------------------------------------------------------
    Status Änderung Import/Export von Städten

    Export (aufladen des Transportmittels)
    - Ware wird nur aufgeladen wenn andere Städte sie importieren (ist stand heute, beibehalten)
    - Ware mit dem höchstem zu erwartendem Verlust (nach Wert) bei vollem Lager zuerst aufladen (stand unklar)
    -- keine Analyse der Importbedarfe der anderen Städte (es existiert keine Kommunikation um Lagerbestände/bedarfe mitzuteilen, wäre unrealistisch)
    -- um Engpässe soll sich der Spieler manuell kümmern
    - es wird bis zur Exportreservere aufgeladen (ist stand heute, beibehalten)

    Import (abladen des Transportmittels)
    - OK das Transportmittel soll alle Lager der Städte die auf der Route liegen auffüllen bis das Transportmittel leer ist
    -- INWORK ist beim beenden der Route noch Ware auf dem Transportmittel geht sie ins Lager zurück (Überproduktion soll da beiben wo sie verursacht wird)
    -- Cargo nach abladen zusammenfassen
    - OK Ware wird nur bis Lagergrenze aufgeladen (weder heute noch damals werden Lager überfüllt und Ware weggeschmissen, ist einfach unrealistisch)
    - oder nur aufladen bis exportreserve
    Angehängte Dateien Angehängte Dateien
    Geändert von igel1974 (16. Oktober 2013 um 20:10 Uhr)

  2. #2
    Col-Modder Avatar von raystuttgart
    Registriert seit
    19.03.10
    Ort
    Stuttgart
    Beiträge
    4.530
    Vergiss es, dass nur über Python zu machen.

    1. Der Mechanismus zu Import/Export inclusive der KI Logik (Einheiten) befindet sich in der DLL.
    Mit Python (alleine) siehst du da keine Sonne.

    2. Haben wir (Religion and Revolution) da bereits den Import Feeder Service (von Nightinggale) und weitere Verbesserungen implementiert.
    (Falls du als Modder bzw. Programmierer dazu erfahren genug bist, könntest du das übernehmen.)

    Ich kann neuen Moddern nur immer wieder folgendes raten:

    A) Seht euch doch mal ein wenig um. Viele Features gibt es bereits. Oder zumindest ähnliche Features, die man als Vorlage nutzen kann.

    B) Wenn ihr wirklich aufwendige neue Features programmieren wollt, dann beschäftigt euch mit der DLL.
    Python hat schon seinen Sinn, vorallem wenn es um den Bereich GUI geht. Daher haben die meisten größeren Features auch einen Python Teil.
    Komplexe Logik programmiert sich aber erfahrungsgemäß viel viel schneller, viel viel performanter und viel viel weniger fehleranfällig in der DLL.
    Geändert von raystuttgart (02. Oktober 2013 um 10:35 Uhr)
    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)

  3. #3
    Registrierter Benutzer
    Registriert seit
    01.10.13
    Beiträge
    18
    Ich kann hier den download gar nicht finden: http://forums.civfanatics.com/downlo...=110&sort=date

    Zitat Zitat von raystuttgart Beitrag anzeigen
    Komplexe Logik programmiert sich aber erfahrungsgemäß viel viel schneller, viel viel performanter und viel viel weniger fehleranfällig in der DLL.
    Performance lass ich gelten, aber schneller und weniger fehleranfällig ist python. Ist vor ein paar Monaten sogar bei einer Studie in Punkto fehlerfreiester Code bei großen Projekten auf Platz 1 gelandet.

    C++ kann ich aber auch, in der Sprache hab ich aber zuletzt mit VC6 im letzten Jahrtausend programmiert

  4. #4
    Col-Modder Avatar von raystuttgart
    Registriert seit
    19.03.10
    Ort
    Stuttgart
    Beiträge
    4.530
    Zitat Zitat von igel1974 Beitrag anzeigen
    Ich kann hier den download gar nicht finden ...
    Falls du den Download zu Religion and Revolution meinst, den gibt es bei uns im Forum verlinkt.
    (Hier ist der Thread.)

    Zitat Zitat von igel1974 Beitrag anzeigen
    ... aber schneller und weniger fehleranfällig ist python.
    Ich red hier ja auch nicht von Kleinigkeiten, sonder von richtig komplexer Logik.
    Python ist eine Skritpsprache, C++ eine ausgewachsene Programmiersprache.
    In der DLL hast du den Compiler der dich unterstützt und kannst beispielsweise auch Debuggen.

    Ich kann dir sagen, dass alle richtig großen komplexen Features für Civ4Col primär in C++ (DLL) programmiert sind und meist lediglich einen kleine Teil Python für die GUI haben.
    Die Architektur des Spiels ist auch schon so aufgebaut.

    Kannst du mir glauben oder nicht.
    (Ich sprech hier aus Erfahrung, weil ich schon jahrelang Civ4Col modde und sowohl in der DLL, wie auch in Python programmiere.)

    Aber die Diskussion müssen wir nicht führen.
    Hab ich schon viel zu oft ...
    Geändert von raystuttgart (02. Oktober 2013 um 19:53 Uhr)
    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)

  5. #5
    Registrierter Benutzer
    Registriert seit
    01.10.13
    Beiträge
    18
    So ging doch schneller als gedacht
    Befürchtete schon mich 1 ganzen Tag mit der Projektumgebung rumzuärgen, aber die Forum-Tuts zum einrichten sind noch aktuell
    Kann die DLL erfolgreich kompilieren und im game austauschen.

    Kann mir jemand einen Tip geben in welcher Datei ich den Code für Import/Export der Transporteinheiten finde?

  6. #6
    Registrierter Benutzer Avatar von Ramkhamhaeng
    Registriert seit
    19.07.10
    Ort
    Aralkum
    Beiträge
    8.957
    Zitat Zitat von igel1974 Beitrag anzeigen
    Performance lass ich gelten, aber schneller und weniger fehleranfällig ist python. Ist vor ein paar Monaten sogar bei einer Studie in Punkto fehlerfreiester Code bei großen Projekten auf Platz 1 gelandet.
    Das Argument lasse ich hier nicht gelten, da der Pythoncode von Civ4 wie eine Müllhalde aussieht Da macht man beim Modden meiner Erfahrung nach viel eher Fehler als im C++-Teil, in dem die Struktur relativ klar ist.

  7. #7
    Registrierter Benutzer Avatar von Ramkhamhaeng
    Registriert seit
    19.07.10
    Ort
    Aralkum
    Beiträge
    8.957
    Zitat Zitat von igel1974 Beitrag anzeigen
    Kann mir jemand einen Tip geben in welcher Datei ich den Code für Import/Export der Transporteinheiten finde?
    Das verstehe ich noch nicht. Willst du den Vorgang des Ausladens verändern oder irgendwelche Berechnungen beim Importieren oder Exportieren von Waren?

  8. #8
    Registrierter Benutzer
    Registriert seit
    01.10.13
    Beiträge
    18
    Änderung ist bisher so gedacht, bitte um konstruktive Kritik:

    Änderung Import/Export von Städten

    Export (aufladen des Transportmittels)
    - Ware wird nur aufgeladen wenn andere Städte sie importieren (ist stand heute, beibehalten)
    - Ware mit dem höchstem zu erwartendem Verlust (nach Wert) bei vollem Lager zuerst aufladen (stand unklar)
    -- keine Analyse der Importbedarfe der anderen Städte (es existiert keine Kommunikation um Lagerbestände/bedarfe mitzuteilen, wäre unrealistisch)
    -- um Engpässe soll sich der Spieler manuell kümmern
    - es wird bis zur Exportreservere aufgeladen (ist stand heute, beibehalten)

    Import (abladen des Transportmittels)
    - das Transportmittel soll alle Lager der Städte die auf der Route liegen auffüllen bis das Transportmittel leer ist
    -- ist beim beenden der Route noch Ware auf dem Transportmittel geht sie ins Lager zurück (Überproduktion soll da beiben wo sie verursacht wird)
    - Ware wird nur bis Lagergrenze aufgeladen (weder heute noch damals werden Lager überfüllt und Ware weggeschmissen, ist einfach unrealistisch)
    - oder nur aufladen bis exportreserve

    Probleme
    - wie reagieren wenn Transportmittel Route nicht mehr abfahren kann
    -- transportmittel im nächstem ort leeren und neue route annehmen oder meldung an spieler
    - verhalten bei städten mit import und export für gleiche ware

    Unklar
    - was hat prio? Import anderere Städte oder export nach Europa

    Ideen
    - Anzeige bei Maus über Transportmittel Info über Route
    - Option zum umschalten zwischen alter/neuen import/export routine
    - Warenverlust durch schlechte Wege (Winterprobleme)?
    -- ohne Straße z. B. 0-10%, Straße 0-3%, ...
    -- Lange Transportzeit Ware verdirbt zu 0-x% (Sommer/Winter?)
    - Überfälle auf wertvolle Waren

  9. #9
    Registrierter Benutzer
    Registriert seit
    01.10.13
    Beiträge
    18
    Zitat Zitat von Ramkhamhaeng Beitrag anzeigen
    Das Argument lasse ich hier nicht gelten, da der Pythoncode von Civ4 wie eine Müllhalde aussieht Da macht man beim Modden meiner Erfahrung nach viel eher Fehler als im C++-Teil, in dem die Struktur relativ klar ist.
    Das liegt aber nicht an der Sprache selber sondern eher an mangels Diziplin der verantwortlichen

  10. #10
    Registrierter Benutzer Avatar von Ramkhamhaeng
    Registriert seit
    19.07.10
    Ort
    Aralkum
    Beiträge
    8.957
    Oha, es geht um die automaitschen Handelsrouten. Da kann ich dir ehrlich gesagt überhaupt nicht helfen, weil ich mich damit weder als Spieler noch als Modder beschäftigt habe. Am wichtigsten müsste dafür die Datei UnitAI.cpp sein, wo die Entscheidungen für die Bewegungen, etc von Einheiten getroffen werden.

  11. #11
    Registrierter Benutzer
    Registriert seit
    01.10.13
    Beiträge
    18
    So, nachdem ich mit zuerst mit VC2010 Express rumgeärgert habe, kein autosense, debugging crashed, kein callstack usw,
    hab ich VC2008 draufgepackt, wo dann alles problemlos läuft.
    (Tips für debuggen, sound aus und windowed mode an, macht das ganze noch einfacher)

    Hab jetzt nen Überblick was ich wo ändern muss.
    Werde alle änderungen nur in der DLL machen.
    unit.cpp und unitai.cpp

    Die änderungen würde dann alle Einheiten betreffen die ein Cargo/Yield laden können.
    Hat noch jemand ne Idee/Kritik/Warnung bevor ich mich da dranmache?

  12. #12
    Col-Modder Avatar von raystuttgart
    Registriert seit
    19.03.10
    Ort
    Stuttgart
    Beiträge
    4.530
    Zitat Zitat von igel1974 Beitrag anzeigen
    Hat noch jemand ne Idee/Kritik/Warnung bevor ich mich da dranmache ?
    Ich denke dir ist ja klar, dass du hier Logik anfasst, die für die KI absolut essentiell ist.
    Automatisierung und KI benutzen nämlich meist die selbe Logik.

    Wenn du hier die Logik zerschießt, ist die KI nicht mehr fähig ihre Warentransporte vernünftig durchzuführen.
    Also unbedingt ausgiebig Tests bezüglich der KI durchführen, nachdem du das implementiert hast.
    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)

  13. #13
    Registrierter Benutzer
    Registriert seit
    01.10.13
    Beiträge
    18
    Zitat Zitat von raystuttgart Beitrag anzeigen
    Ich denke dir ist ja klar, dass du hier Logik anfasst, die für die KI absolut essentiell ist.
    Automatisierung und KI benutzen nämlich meist die selbe Logik.

    Wenn du hier die Logik zerschießt, ist die KI nicht mehr fähig ihre Warentransporte vernünftig durchzuführen.
    Also unbedingt ausgiebig Tests bezüglich der KI durchführen, nachdem du das implementiert hast.
    Leider nicht nur Auto und KI, manuell wird auch die "setTransportUnit" gesprungen (über doCommand) , wenn man also von Hand Güter ablädt würde meine Änderung auch greifen. Will man natürlich nicht, also muss ich irgendwie erkennen ob es ein manueller Befehl ist.

    Ist das möglich, gibt es da schon was?

    Ansonsten leg ich ein globales Flag an das ich dann in doCommand setzte/lösche und prüfe
    oder ich erweitere die benötigen Funktionen mit einem optionalem Parameter.

    Was wäre besser?

  14. #14
    Registrierter Benutzer
    Registriert seit
    01.10.13
    Beiträge
    18
    - das Transportmittel soll alle Lager der Städte die auf der Route liegen auffüllen bis das Transportmittel leer ist
    funktioniert schonmal, es bleibt kein Cargo mehr irgendwo liegen und es geht auch keine Ware mehr verloren

    Das Problem mit doCommand "COMMAND_UNLOAD" mach ich dann mit optionalem Paramter, ist für zukünfige änderungen besser glaube ich.
    Funktioniert schon ganz ok, je mehr Städte desto besser, sonst macht der Transport "PING PONG" zwischen den Städten bis er leer ist
    Da muss ich glaube noch ein bißchen in der AI buddeln.

    Bei interesse ich lade ab und zu die dll zum testen hoch.

  15. #15
    Registrierter Benutzer
    Registriert seit
    01.10.13
    Beiträge
    18
    Ich möchte an diversen Funktionen einen optionalen Parameter hinzufügen, z. B.:

    void unload(bool bForceUnload = false);


    Dann kann ich aber wegen fehlenden Abhängigkeiten die DLL nicht mehr compilen:

    NMAKE : warning U4011: 'Debug\CvGameCoreDLL.dll' : not all dependents available; target not built
    NMAKE : warning U4011: 'Debug' : not all dependents available; target not built
    Project : error PRJ0019: A tool returned an error code from "Performing Makefile project actions"

    Komm ich da irgendwie drumrum oder hat jemand ein komplettes Projekt mit allen Dateien?
    Sonst muss ich das mit einer neuen Membervariablen regeln.

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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