Seite 2 von 5 ErsteErste 12345 LetzteLetzte
Ergebnis 16 bis 30 von 68

Thema: Für Modder: HOW-TO feature...

  1. #16
    Registrierter Benutzer Avatar von JohnDay
    Registriert seit
    26.12.12
    Beiträge
    4.819
    Aha, da platzt ja schon mal der erste Verständnisknoten bei mir.

    Natürlich meine ich das im Python und für ein bestimmtes Scenario. Aber das hatte mich schon immer verwirrt und bis jetzt hatte ich den Unterschied noch gar nicht so klar auf dem Schirm. Danke und ja, das wäre doch voll fair. Zum Ausprobieren und wenn ich mal (positiv) ausrasten möchte, dann als modmod.
    Ein, zwei Scripte als Ideen habe ich da dann jetzt schon für den Peloponnesischer Krieg zum Beispiel und wenn das da dann noch nicht zuviel ist. Super! Ich spreche dich in ein, zwei, drei Wochen nach mod8 noch mal gezielt darauf an, ok.

    Und falls Thorgal Lust dazu hat oder ich ihn irgendwie dazu motivieren kann dazu etwas zu schreiben. Ich würde mich tierisch freuen. Bei beiden den Events allgemein für PAE und bei den Events für ein spezielles Scenario.

    Grüße John

  2. #17
    hat den Blues Avatar von Elwood
    Registriert seit
    05.11.07
    Beiträge
    4.352
    Kleiner Tipp, mutig sein und schauen ... gerade Pies pythoncode ist schön übersichtlich und mit Kommentaren versehen, da liest man sich auch als Laie ganz gut ein. Mit ein bisschen c&p kann man da viel schaffen
    Geschichten zum Lesen ...

    Der seltsame Fall des William Penn | Col II --- TaC-Mod | abgebrochen
    Wahnsinn mit Methode? | Col II --- TaC-Mod | beendet | SdM April 2012
    Visiting Vvardenfell | TES III Morrowind | pausiert
    Es war einmal (noch) kein Portugal | Civ IV --- PAE-Mod | beendet
    Pack die Thermohose ein ... | Icewind Dale --- Trials of the Luremaster | läuft
    NEU: [RL] ... wie Gott nach Frankreich - Elwoods ??? | Modellbaubericht | läuft

  3. #18
    Antiker Benutzer Avatar von BoggyB
    Registriert seit
    21.08.11
    Beiträge
    7.041
    Zitat Zitat von Pie Beitrag anzeigen
    Aber sowas würde ich dann lieber in einem Modmod sehen, da ichs nicht so gut finde, wenn alle Szenarienersteller dann ihre expliziten Scripte in der Hauptdatei von PAE drin stehen haben. Ein, zwei Scripte pro Szenario sind ok. Ein Szenario, was von Scripten lebt, sollte ein modmod werden.... meiner Meinung nach.
    Nur so als Frage, wieso? Weil das zu unübersichtlich wird, mit haufenweise Scripten, die nur in bestimmten Szenarien angewandt werden? Man könnte die ja auch, wenn es viel wird, in eigene Methoden auslagern, die man dann in eine andere Datei reinschreibt. Ist aber natürlich deine Sache, wie du das haben willst. Modmods haben halt den Nachteil, dass sie schnell veralten können - ja, nach Patch 8 werd ich den Kleine Einheiten-Kram mal updaten
    "Only Germans, perhaps, could make a game about economics - a stylish, intelligent and captivating one at that." - The New York Times

  4. #19
    Antiker Benutzer Avatar von BoggyB
    Registriert seit
    21.08.11
    Beiträge
    7.041
    Zitat Zitat von JohnDay Beitrag anzeigen
    Und falls Thorgal Lust dazu hat oder ich ihn irgendwie dazu motivieren kann dazu etwas zu schreiben. Ich würde mich tierisch freuen. Bei beiden den Events allgemein für PAE und bei den Events für ein spezielles Scenario.
    Ich bin jetzt zwar nicht Thorgal, aber: Was genau interessiert dich jetzt noch? Wie man solche Ereignisse einfügt; welche Möglichkeiten man für Ereignis und Bedingungen hat; speziell das, was über das Zufallsereignisse-XML geregelt wird (also Wald verbrannt und so) oder einfach nur irgendwie (über den Eventmanager - wobei sich Python auch für Zufallsereignisse verwenden lässt); irgendwelche Beispiele, wie man bestimmte Sachen umsetzt; in welchem Umfang überhaupt (solltest du den Peloponnesischen Krieg in Zukunft auch als Modmod anbieten wollen, wäre es natürlich recht sinnvoll, die Kenntnisse von all dem genannten zu kennen - wenn es nur um einzelne Sachen geht, kannst du natürlich auch einfach Pie die Drecksarbeit machen lassen und der ganze Kram braucht dich nicht zu kümmern ) etc. lala. Man kann da schon eine Menge zu schreiben, ich bin mir nur grad nicht sicher, was du noch wissen willst.
    Kannst du Python oder was Ähnliches?
    "Only Germans, perhaps, could make a game about economics - a stylish, intelligent and captivating one at that." - The New York Times

  5. #20
    Registrierter Benutzer Avatar von JohnDay
    Registriert seit
    26.12.12
    Beiträge
    4.819
    Zitat Zitat von BoggyB Beitrag anzeigen
    Kannst du Python oder was Ähnliches?
    Nein und speziel Python kenne ich erst, seit mir Pie mal einen Editor genannt hat. Damit habe ich mal reingeschaut, aber bin auf Anhieb nicht daraus klug geworden. Wie gesagt, ich tue mich immer erstmal schwer mit solchen Sachen. Schon der Editor ist irgendwie ungewohnt für mich ... PHPEd heißt das Ding.

    Mit Scenario Dateien editiere ich schon ewig, ich glaube seit Civ2, damit kenne ich mich auch immer besser aus. Das ist kein Problem. Zu den Events hätte ich gerne mal ein konkretes Beispiel: Sagen wir Runde 15, Einheit so und so ersteht auf Koordinate x,y oder den angrenzendes Feldern. Oder was ich auch wissen wollen würde, sagen wir Runde 125: Events soll triggern (heißt das dann glaube ich) das ein Text aufploppt mit folgendem Inhalt: Bla bla bla (Damit ich damit experimentieren kann).

    Und vor allem welche Möglichkeiten ich dabei zum Triggern (Auslösen?) habe. Die Runde als Zahl? Die Runde als Wahrscheinlichkeit? Kann ich den Trigger auch so bestimmen, dass er nur auslöst wenn ich Athen spiele und wenn ich als Spieler Sparta gewählt habe, dass sich das Event nicht auslöst?

    Was kann ich noch wie auslösen? Ich kann bestimmt Einheiten erstellen lassen und Texte entstehen lassen, ok. Wie füge ich in diese Texte eine Abfrage ein? Nach dem Motto, als Spieler hast du die Auswahl. Daraufhin passiert etwas. Das was dann passiert, muss das immer das selbe sein, oder kann da eine Abfrage zum Beispiel eines von drei möglichen Events auslösen. So das dabei Abwechslung entstehen kann.

    Ich vermute mal das ich das Terrain ändern könnte, aber wie muss ich wo, was dafür eintragen, damit das passiert? Sind das andere Auslöser und ja, die verdammten Auslöser bestimmen doch, was für Möglichkeiten ich da überhaupt hätte. Darüber würde ich vor allem gerne mehr erfahren und dann in einfach Schritten, was ich machen muss (was wo eintragen) damit das auch passieren kann.


    Und ich habe überhaupt nicht vor, aus dem Peloponnesischer Krieg einen modmod zu machen. Da kann ich mir konkret sehr gut vorstellen, dass nach einer bestimmten Anzahl von Runden einen Text erschein zu lassen, der erklärt wie es im echten Krieg weiterging zum Beispiel. Und wenn eine bestimmte Stadt fällt, wie zum Beispiel Athen, dass da ein Text erscheint. Das wären dann ja auch schon zwei und wenn Pie wegen der Übersichtlichkeit nicht mehr zulassen kann / will. Dann soll es mir recht sein.

    Einen modmod würde ich vielleicht irgendwann mal erstellen wollen mit sagen wir zum Beispiel Thorgal dem Wikinger. Der reist dann durch die antike Landschaft und erlebt ein paar Abenteuer auf einer eigenen Karte dafür . Da könnte ich mich dann austoben und ihm ein paar Steine in den Weg legen als Idee . Aber bis ich so weit bin, das dauert wohl noch ewig ... In Civ 2 habe ich das letzte mal Events für ein Scenario geschrieben. Das fand ich toll damals ...

    Brauchst du noch mehr konkrete Fragen ... ich habe da noch einige .

    Aber Danke, wenn du mir davon auch nur irgend etwas so erklären kannst, das ich das auch verstehe.

    Grüße John

  6. #21
    Antiker Benutzer Avatar von BoggyB
    Registriert seit
    21.08.11
    Beiträge
    7.041
    Erstmal nur dein Beispiel, in Runde 15 eine Einheit zu platzieren. Könnten Fehler drin sein, ich hab das nicht alles extra ausprobiert.
    Weißt die, wie der Python-EventManager aufgebaut ist? Der besteht grundsätzlich aus einem Haufen Methoden wie onUnitMove oder onGreatPersonBorn, die zu einem bestimmten Zeitpunkt aufgerufen werden, was sich meistens aus dem Namen ergibt - onGreatPersonBorn beispielsweise, wenn eine GP geboren wird. Bevor du irgendwas ändern willst, solltest du dir überlegen, in welcher Methode du idealerweise die Änderung machst. Für das Beispiel würd ich onBeginPlayerTurn nehmen.
    Die Methode fängt so an:

    PHP-Code:
      def onBeginPlayerTurn(selfargsList):
        
    'Called at the beginning of a players turn'
        
    iGameTurniPlayer argsList
        pPlayer 
    gc.getPlayer(iPlayer
    def steht vor jedem Methodennamen, das zwischen den ' ist ein Kommentar. iGameTurn und iPlayer werden dieser Methode übergeben, heißt: In iGameTurn ist die Rundenzahl gespeichert und in iPlayer die Nummer des Spielers (also irgendwas zwischen 0 und 17). Die kannst du also schon mal nutzen.
    Wie du siehst, steht grade in dieser Methode schon ziemlich viel drin - beispielsweise der gesamte Rebellions- und Versorgungskram. Es wäre sinnvoll, wenn du, wenn du etwas Neues hinzufügst, es entweder an den Anfang oder das Ende setzt, vielleicht besser an den Anfang, weil du dann nicht Gefahr läufst, die Zeileneinrückungen falsch zu machen, die sind nämlich wichtig.
    Wenn du diese Methode dann erweitern willst, könntest du so anfangen:

    PHP-Code:
      def onBeginPlayerTurn(selfargsList):
        
    'Called at the beginning of a players turn'
        
    iGameTurniPlayer argsList
        pPlayer 
    gc.getPlayer(iPlayer)
        
        if 
    iGameTurn == 15:
            
    iUnit gc.getInfoTypeForString("UNIT_AXEMAN")
            
    10
            y 
    15
            pPlayer
    .initUnit(iUnitxyUnitAITypes.NO_UNITAIDirectionTypes.DIRECTION_SOUTH
    Erst legst du fest, welche Einheit du platzieren willst, hier den Axtkämpfer. Mit gc.getInfoTypeForString() kommst du an so ziemlich alles ran, da könnte auch BONUS_BIER oder FEATURE_JUNGLE stehen (was uns in diesem Fall natürlich nichts brächte). Was if iGameTurn == 15 bedeutet, erklärt sich eigentlich von selbst: Alles, was innerhalb dieser Bedingung steht (also alles, was hinter dem if eingerückt ist), wird nur ausgeführt, wenn die Bedingung erfüllt ist, also in diesem Fall nur in Runde 15, weil in iGameTurn die Runde gespeichert ist. initUnit() ist der Methodenaufruf, um eine Einheit zu platzieren, du findest alle Python-Methoden auf dieser Seite. Wichtig ist, was dahinter in Klammern steht, in diesem Fall: (UnitType iIndex, INT iX, INT iY, UnitAIType eUnitAI, DirectionType eFacingDirection). Da musst du die Werte reinschreiben, die du haben willst, in diesem Fall Art der Einheit, x-Koordinate, y-Koordinate, UnitAI (laut der verlinkten Seite sollte man immer UnitAITypes.NO_UNITAI nutzen, was wir also tun) und die Blickrichtung der Einheit (da die dir wohl recht egal ist, würd ich da auch immer DirectionTypes.DIRECTION_SOUTH hinschreiben). Das pPlayer vor dem Punkt ist der Spieler, dem die Einheit gehören soll, nicht mit iPlayer verwechseln - grob gesagt ist iPlayer die Nummer des Spielers, also 0-17, und pPlayer der Spieler selbst (auf informatisch: die Instanz der Klasse Player [oder CyPlayer oder wie auch immer die Klasse heißt], aber das kann dir wohl egal sein). pPlayer wird ja schon in der vierten Zeile definiert, das musst du also nicht mehr machen.
    Das wär es auch schon, damit hättest du zumindest in Runde 15 eine Einheit platziert (für jeden Spieler), und zwar auf dem Feld x|y, also 10|15. Ist aber so noch relativ primitiv, das sollte man noch um ein paar Bedingungen erweitern:

    PHP-Code:
      def onBeginPlayerTurn(selfargsList):
        
    'Called at the beginning of a players turn'
        
    iGameTurniPlayer argsList
        pPlayer 
    gc.getPlayer(iPlayer)

        if 
    iGameTurn == 15:
            
    iUnit gc.getInfoTypeForString("UNIT_AXEMAN")
            
    10
            y 
    15
            iSpielerCiv 
    pPlayer.getCivilizationType()
            
    iAthen gc.getInfoTypeForString("CIVILIZATION_ATHEN")
            
    pPlot CyMap().plot(x,y)
            
    eOcean gc.getInfoTypeForString("TERRAIN_OCEAN")
            
    eCoast gc.getInfoTypeForString("TERRAIN_COAST")
            if 
    iSpielerCiv == iAthen:
                if 
    pPlot != None and not pPlot.isNone() and pPlot.getTerrainType() != eOcean and pPlot.getTerrainType() != eCoast:
                    
    pPlayer.initUnit(iUnitxyUnitAITypes.NO_UNITAIDirectionTypes.DIRECTION_SOUTH
    Als Beispiel. So wird noch zusätzlich geprüft, ob der Spieler Athen ist (und nur dann erhält er die Einheit) und die Einheit auch nur platziert, wenn das Geländefeld existiert (dafür sind pPlot != None and not pPlot.isNone(), frag mich nicht, wieso man beide braucht, ich hab das so von Pie geklaut ) und nicht Küste/Ozean ist. Man könnte mit pPlot.isPeak() jetzt noch prüfen, ob es ein Gipfel ist, wenn man alle nicht passierbaren Geländefelder ausschließen will. Will man die Einheiten auf einem angrenzenden Feld platzieren, sollte das gewünschte besetzt sein, könnte man es so machen:

    PHP-Code:
      def onBeginPlayerTurn(selfargsList):
        
    'Called at the beginning of a players turn'
        
    iGameTurniPlayer argsList
        pPlayer 
    gc.getPlayer(iPlayer)

        if 
    iGameTurn == 15:
            
    iUnit gc.getInfoTypeForString("UNIT_AXEMAN")
            
    10
            y 
    15
            iSpielerCiv 
    pPlayer.getCivilizationType()
            
    iAthen gc.getInfoTypeForString("CIVILIZATION_ATHEN")
            
    pPlot CyMap().plot(x,y)
            
    eOcean gc.getInfoTypeForString("TERRAIN_OCEAN")
            
    eCoast gc.getInfoTypeForString("TERRAIN_COAST")
            if 
    iSpielerCiv == iAthen:
                if 
    pPlot != None and not pPlot.isNone() and pPlot.getTerrainType() != eOcean and pPlot.getTerrainType() != eCoast:
                    if 
    pPlot.isUnit():
                        
    bDone False
                        
    for i in range (3):
                            for 
    j in range(3):
                                
    pPlot CyMap.plot(ij)
                                if 
    not bDone and not pPlot.isUnit:
                                    
    pPlayer.initUnit(iUnitxyUnitAITypes.NO_UNITAIDirectionTypes.DIRECTION_SOUTH
                                    bDone 
    True
                    
    else:
                        
    pPlayer.initUnit(iUnitxyUnitAITypes.NO_UNITAIDirectionTypes.DIRECTION_SOUTH 
    Ist wahrscheinlich etwas kompliziert für den Anfang... Allerdings auch mühselig, alles Schritt für Schritt zu erklären. Sag einfach, was davon unklar ist. != steht für ungleich. bDone ist ein Boolean, das heißt, er ist entweder True oder False, Bedeutung ist eigentlich klar. Wahr oder falsch halt. Hier steht in der Bedingung if not bDone, die Bedingung ist also erfüllt, wenn bDone False ist und nicht erfüllt, wenn es True ist. pPlot.isUnit() prüft, ob auf dem Geländefeld irgendeine Einheit draufsteht. Die for-Schleifen werden so oft ausgeführt, wie die Zahl dahinter angibt, hier dreimal. Dabei ist beim ersten Durchlauf die Variable (in der ersten i, in der zweiten j) 0, beim zweiten 1, dann 2. Das benutze ich hier, um die angrenzenden Koordinaten, das 3x3 große Feld um den Plot, durchzugehen. i und j haben in dieser Reihenfolge diese Werte:
    i = 0 j = 0
    i = 0 j = 1
    i = 0 j = 2
    i = 1 j = 0
    i = 1 j = 1
    i = 1 j = 2
    i = 2 j = 0
    i = 2 j = 1
    i = 2 j = 2
    Ist das verständlich? So prüft man mit den Koordinaten (x - 1 + i)|(y - 1 + j) alle angrenzenden Geländefelder.

    Als Basis für Python könnte dir das hier vielleicht auch helfen, ist allerdings englisch. Wenn du noch Fragen hast (wahrscheinlich), frag einfach, ist natürlich ein bisschen viel auf einmal und meine Erklärung vielleicht auch grob fahrlässig schlecht, kA
    "Only Germans, perhaps, could make a game about economics - a stylish, intelligent and captivating one at that." - The New York Times

  7. #22
    Registrierter Benutzer Avatar von JohnDay
    Registriert seit
    26.12.12
    Beiträge
    4.819
    Für das einen methaphorisch ok! Nur metaphorisch bitte. Und für mich war das bisher ein Geheimnis.

    Und Danke! Wie gesagt, bisher alles böhmische Dörfer für mich und hätten die das nicht nen Tacken einfacher machen können? Ok so oder gar nicht. Dann eben so ... zwar habe ich jetzt das Gefühl das irgendwie studieren zu müssen, aber das ist ja schon mal ein Anfang. Nach Phython habe ich vorher auch noch nie gegoggelt, eben nur nach Events, aber der: "A guide to the API and basic python modding by J_mie6", der schaut richtig gut aus. Auch wenn mir Deutsch lieber wäre, aber das wird schon gehen. Der andere Link hat mir auf Anhieb noch nichts gebracht, aber das dann ja wohl später.

    Auch deine Erklärung hier hat mir schon mal viel gebracht. Echt super! Ein erster Eindruck halt und das finde ich toll. Damit kann ich wirklich mal einen ersten Eindruck davon bekommen. Genau so etwas habe ich bisher überall vergeblich gesucht.

    Ich muss da jetzt erstmal viel dazu lesen, dann darüber nachdenken und mich dann wohl tatsächlich einfach mal trauen und etwas ausbrobieren. Was passiert eigentlich, wenn ich einen oder mehrere Fehler in das Python Scribt einbaue. Schirmt Civ4 dann ab, oder meldet das dann beim hoch fahren einen Fehler?

    Naja absolute Anfängerfragen habe ich im Moment nur. Am besten ich versuche mich da jetzt die Tage mal einzuarbeiten. Ich schreibe lieber gleich dazu, dass ich bei so etwas nicht der schnellste bin. Das wird dauern ... aber ich finde das hoch interessant. Will sagen, da mal einen Einblick zu bekommen, den Wunsch habe ich schon lange mit mir rum getragen.

    Ich melde mich dazu am besten erst wieder, wenn ich etwas mehr davon verstehe.

    Grüße John

  8. #23
    Antiker Benutzer Avatar von BoggyB
    Registriert seit
    21.08.11
    Beiträge
    7.041
    Zitat Zitat von JohnDay Beitrag anzeigen
    Was passiert eigentlich, wenn ich einen oder mehrere Fehler in das Python Scribt einbaue. Schirmt Civ4 dann ab, oder meldet das dann beim hoch fahren einen Fehler?
    Das kommt auf die Art des Fehlers an. Syntaxfehler kriegst du auf jeden Fall beim Hochfahren von Civ gemeldet, in so kleinen Fehlermeldung-Fenstern halt. Das zeigt dann immer einige Fehler an, das sind aber häufig "Folgefehler" quasi: In einer Datei ist ein Fehler, sie kann nicht interpretiert werden, durch die fehlende Datei entstehen weitere Fehler... Wichtig ist immer der letzte angezeigte Fehler, Zeilenangabe ist dabei.
    Ein Syntaxfehler wäre zum Beispiel:
    -) Nach einem if/else/Schleifenaufruf (for oder while) kein Doppelpunkt
    -) Einrückungsfehler, zum Beispiel:
    PHP-Code:
       x 10
          y 
    89

    Sowas halt, alles, was zu einem Block gehört, muss auf derselben "Höhe" sein.
    -) Irgendwelche Wörter falsch geschrieben, wile ohne h oder sowas

    Ein Fehler, der nicht beim Hochfahren angezeigt wird, wäre zum Beispiel:

    PHP-Code:
      def onBeginPlayerTurn(selfargsList):
        
    'Called at the beginning of a players turn'
        
    iGameTurniPlayer argsList
        pPlayer 
    gc.getPlayer(iPlayer)
        
    iPlayer.changeGold(500
    Der Fehler hierbei besteht darin, dass die Methode changeGold() (Klammern stehen übrigens immer für einen Methodenaufruf, manchen Methoden werden Werte übergeben, wie bei initUnit, ansonsten ist sie leer) auf iPlayer statt pPlayer angewandt wird. Von der Syntax her korrekt, aber sobald die Stelle im Spiel erreicht wird, gibt es einen Fehler. Standardmäßig werden die von Civ unterdrückt - ich glaub, die Methode wird dann einfach abgebrochen oder die fehlerhafte Stelle übersprungen - und eine Fehlermeldung kommt nur, wenn man die in der ini aktiviert, nämlich

    Code:
    ; Set to 1 for no python exception popups
    HidePythonExceptions = 1
    auf 0 setzt, damit Pythonfehlermeldungen angezeigt werden. Auch hier gilt: Die letzte Meldung ist die relevante. In diesem Fall würde das irgendetwas wie "int object has no attribute changeGold" sein. Heißt einfach, dass du auf den Datentyp int (Integer -> positive oder negative ganze Zahl, dafür steht das i vorne bei den entsprechenden Variablen) diese Methode nicht anwenden kannst, was ja irgendwie auch logisch ist.
    "Only Germans, perhaps, could make a game about economics - a stylish, intelligent and captivating one at that." - The New York Times

  9. #24
    PAE.Macht.Antike! Avatar von Pie
    Registriert seit
    25.01.08
    Ort
    Noricum
    Beiträge
    16.342
    Ui Boggy is schnell
    Ein kleiner nebensächlicher Einwurf von mir: ich würd das ganze sogar bei onEndGameTurn machen.
    dann wird das nicht bis zu 18x überprüft, ob man Athen ist. Sondern da wird gleich eben für Athen die Einheit erschaffen. 1 Abfrage. Spart etwas Rechenzeit.

    Wenn ein Fehler im Python gemacht wird:
    1. merke dir die Stelle, wo du grad was gemacht hast und teste es gleich
    2. du musst in der CivilizationIV.ini (MyGames/BTS) HidePythonExceptions auf 0 setzen
    3. es kann sein, dass gar nix geht, dann ist meist irgendwo ne Einrückung falsch
    4. oft kommt aber ein PopUp, welches dir die Zeile in der fehlerhaften Datei ausspuckt, die falsch ist
    5. meist steht dabei auch der Grund, den würd ich aber posten, weil das ist Informatiker-Latein

    Wo ich Boggy total Recht gebe: In meinem EventManager stehen soviele Befehle, wie wohl in keinem anderen Mod. Die kann man probieren mit copy/paste zusammenzufügen.
    Pie's Ancient Europe (PAE)
    Erlebe mit dieser CIV IV Mod(ifikation) hautnah das Zeitalter der Antike bis ins letzte Detail!
    Mit bahnbrechenden Erweiterungen und vielen ein- und erstmaligen Features.


    ... im Übrigen bin ich der Meinung, dass Karthago wieder aufgebaut werden muss!

  10. #25
    Registrierter Benutzer Avatar von Thorgal
    Registriert seit
    06.08.09
    Beiträge
    5.238
    Also, ich bin grad zu prall um irgendwas sinnvolles abzusondern, hab aber grad überhaupt den Thread entdeckt und fühl mich ja fast genötigt, irgendwas zu sagen.
    Deswegen: Drinkt nicht zuviel, kann nicht gut sein...

    Ne im Ernst, Boggy steigt mit seinen Ausführungen schon sehr tief in die Materie ein und ich hab auch grad nicht alles gelesen, geschweige denn alles verstanden (wie gesagt ...) . So allgemein, es gibt nen Unterschied zwischen Events die allein per Python (also dem Event-Manager aufgerufen werden) und den "regulären" Events, die per XML und damit im SDK verwurzelt, aufgerufen werden, was sich wohl in den Rundenzeiten auswirkt. Ich bin mir sicher, dass alle Sachen, die über die BtS-Event-Sachen gehen, schneller sind. Und das erstellen von ner Einheit zu nem gewissen Zeitpunkt, geht sicher auch über das normale Event-System.

    Ich würd vorschlagen, dass du dich erstmal mit dem "regulären" Event-System vertraut machst und dann erst tiefer einsteigst.
    Bei den Fantatics gibt's nen super Guide dazu: http://forums.civfanatics.com/showthread.php?t=230567

    Zitat Zitat von JohnDay Beitrag anzeigen
    Einen modmod würde ich vielleicht irgendwann mal erstellen wollen mit sagen wir zum Beispiel Thorgal dem Wikinger. Der reist dann durch die antike Landschaft und erlebt ein paar Abenteuer auf einer eigenen Karte dafür .
    Grandiose Idee!

  11. #26
    hat den Blues Avatar von Elwood
    Registriert seit
    05.11.07
    Beiträge
    4.352
    ... und noch eins hinterher, unser TAC-Event-Sensei Ronnar hat damals auch ein paar Hinweise zusammengefasst und ein bisschen den Code aufgedröselt ... ist zwar in einigen Dingen Col-spezifisch, aber im großen und ganzen ist´s ja die gleiche Weide. Ich häng´s hier mal an .
    Angehängte Dateien Angehängte Dateien
    Geschichten zum Lesen ...

    Der seltsame Fall des William Penn | Col II --- TaC-Mod | abgebrochen
    Wahnsinn mit Methode? | Col II --- TaC-Mod | beendet | SdM April 2012
    Visiting Vvardenfell | TES III Morrowind | pausiert
    Es war einmal (noch) kein Portugal | Civ IV --- PAE-Mod | beendet
    Pack die Thermohose ein ... | Icewind Dale --- Trials of the Luremaster | läuft
    NEU: [RL] ... wie Gott nach Frankreich - Elwoods ??? | Modellbaubericht | läuft

  12. #27
    Antiker Benutzer Avatar von BoggyB
    Registriert seit
    21.08.11
    Beiträge
    7.041
    Zitat Zitat von Thorgal Beitrag anzeigen
    So allgemein, es gibt nen Unterschied zwischen Events die allein per Python (also dem Event-Manager aufgerufen werden) und den "regulären" Events, die per XML und damit im SDK verwurzelt, aufgerufen werden, was sich wohl in den Rundenzeiten auswirkt. Ich bin mir sicher, dass alle Sachen, die über die BtS-Event-Sachen gehen, schneller sind. Und das erstellen von ner Einheit zu nem gewissen Zeitpunkt, geht sicher auch über das normale Event-System.

    Ich würd vorschlagen, dass du dich erstmal mit dem "regulären" Event-System vertraut machst und dann erst tiefer einsteigst.
    Bei den Fantatics gibt's nen super Guide dazu: http://forums.civfanatics.com/showthread.php?t=230567
    Da hat Thorgal Recht Ich hab mit dem Python-Kram angefangen, weil ich das bei dem Beispiel für sinnvoller hielt. Du hast Recht, auch mittels Events kann man Einheiten platzieren - UnitClass und iNumFreeUnits - aber nicht auf einer bestimmten Koordinate. Ich weiß nicht, wo die bei diesem Event platziert werden, vielleicht bei der Hauptstadt oder auf einem zufälligen Feld im eigenen Reich. Man könnte denselben Effekt natürlich auch über ein Event erreichen, indem man dem Trigger bei PythonCanDo eine Python-Funktion zuweißt, die alle Bedingungen prüft, die ich unten geprüft hab (Civ, Runde etc.) und dem Event bei PythonCallback eine Funktion, die die Einheit platziert. Dann wäre der Rundenzeitverlust aber wohl futsch, denn die XML-Bedingungen gehen zwar, wie du sagst, übers SDK und sind daher schneller, aber da man bei diesem Event dann ja wieder Python-Kram hinzugefügt hätte, wär der Vorteil wohl weg.
    Ob du nun mit dem EventManager oder dem Event-System anfangen willst, kommt, denke ich, darauf an, was du erreichen willst - wobei eigentlich beide Sachen wichtig/praktisch sind und es daher vielleicht nicht so wichtig ist, mit welchem du anfängst, wenn es dich wirklich interessiert, solltest du dich eh mit beiden befassen.
    Das Event-System hat auf jeden Fall einige Vorteile, aber auch Nachteile:
    -) Du kannst recht einfach verschiedene Optionen einfügen, zwischen denen der Spieler sich entscheiden muss - dein Wikinger-Thorgal könnte beispielsweise per Ereignis auf ein Mammut stoßen und der Spieler muss sich entscheiden, ob er flieht (nichts passiert) oder kämpft (wenn er Pech hat stark verwundet wird oder stirbt, wenn er Glück hat Erfahrung, eine Beförderung oder sonstwas gewinnt). Im Python könnte man das über Popups zwar auch machen (wie beispielsweise Pie beim Söldnerfeature), ist aber ein Stück komplizierter.
    -) Da für die Events einige Sachen im XML liegen, kann man diese Bedingungen/Ereignisse relativ einfach machen - wenn du beispielsweise eine bestimmte Tech als Bedingung haben willst, musst du das nicht mit irgendwelchen ifs im Python machen, sondern kannst auf AndPreReqs bzw. OrPreReqs im XML zurückgreifen. Der von Thorgal verlinkte Guide erklärt die einzelnen Tags ja alle recht gut . Ist daher für den Einstieg vielleicht besser, sollte dir das Python erstmal, zu kompliziert sein.
    -) Das wär dann aber auch ein Nachteil: Du hast halt diese Tags im XML zur Verfügung. Wenn die passen, super. Wenn nicht - Pech gehabt. Dafür müsstest du das Event dann um Python-Elemente erweitern, brauchst Python für komplexere Sachen also so oder so. Bei manchen Dingen wär es dann sinnvoller, das direkt im Python zu machen, bei anderen lohnt sich das aber. Diese Python-Elemente können mehr oder weniger komplex sein, willst du beispielsweise einfach, dass ein Element in Runde 15 triggert, reicht das:

    PHP-Code:
    def irgendwas(argsList):
        
    iGameTurn gc.getGame().getGameTurn()
        if 
    iGameTurn == 15:
            return 
    True
        
    else:
            return 
    False 
    Wenn Runde 15 ist True, sonst immer False (ja, hätte man auch ohne else machen können, aber ich hielt es so für einfacher verständlich).

    Der von Thorgal verlinkte Artikel ist auf jeden Fall ein guter Einstieg in das Event-System, lass dich auch nicht von der Länge abschrecken, vieles davon ist ja eine Erklärung der einzelnen Tags, das muss man natürlich nicht alles durchlesen oder gar auswendig lernen, um das System zu verstehen. Der Teil in Post 4, "Creating Events", hilft dir vielleicht am meisten, das sind ein paar Beispiele.
    "Only Germans, perhaps, could make a game about economics - a stylish, intelligent and captivating one at that." - The New York Times

  13. #28
    Registrierter Benutzer Avatar von JohnDay
    Registriert seit
    26.12.12
    Beiträge
    4.819
    Mir geht es im Moment so wie Thorgal neulich ... ich bin etwas verkatert heute. Doch das soll mich nicht davon abbringen noch mal Danke zu sagen. Zum Einblick bekommen und sich damit auseinander zu setzen, ist das erst mal genug für die Events. Das muss ich jetzt erstmal alles durchstöbern und dann wird mich das schon ganz schön Zeit kosten, aber ich freue mich auch drauf. Das ganze ist jetzt schon nicht mehr so ein Buch mit sieben Siegeln für mich. Außerdem wird der Threat ja von allen gelesen ... ich weiß das es da noch ein paar mehr Leuten so wie mir geht (ging). Die Community bei PAE ist jedenfalls spitze! Ich habe es schon mal geschrieben und schreibe es auch gerne noch mal: Es macht verdammt viel Spaß hier!

    Jetzt brauche ich erstmal noch einen Kaffee.
    Grüße John

  14. #29
    Waddehaddedudeda Avatar von Cybah
    Registriert seit
    01.09.06
    Beiträge
    30.450
    Magste mir mal ein kleines Tutorial für Pythonbuttons im Einheiteninterface schreiben? à la vom Pferd absitzen etc.
    Pucc's Lets Plays BASE 6.0: #1 #2 #3 #4 #5

    Download von BASE 6.4 [D]: HIER (klick mich!) (Stand: 08.07.2022)

  15. #30
    PAE.Macht.Antike! Avatar von Pie
    Registriert seit
    25.01.08
    Ort
    Noricum
    Beiträge
    16.342
    Jep, mach ich dir, aber hab noch etwas Geduld, hab im RL bis Ende Nov. ein Projekt zu Ende zu bringen und muss auch noch PAE V fertig machen.
    Pie's Ancient Europe (PAE)
    Erlebe mit dieser CIV IV Mod(ifikation) hautnah das Zeitalter der Antike bis ins letzte Detail!
    Mit bahnbrechenden Erweiterungen und vielen ein- und erstmaligen Features.


    ... im Übrigen bin ich der Meinung, dass Karthago wieder aufgebaut werden muss!

Seite 2 von 5 ErsteErste 12345 LetzteLetzte

Berechtigungen

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