Events: Grafiken durch Plugin ändern

  • Hey, Leute!


    Ich entwickle nun schon seit fast einem Jahr mein Spiel. Nun möchte ich nachträglich hunderte gleiche Eventgrafiken vorübergehend ändern. Da dachte ich mir, es müsste doch möglich sein, Events, die dieselbe Grafik benutzen, durch ein Plugin zu ändern.

    Bsp: man hat Bäume, und diese verändern sich ja mit den Jahreszeiten. Im Normalfall würde man nun einfach ein Event erstellen mit 2 (bei zB Nadelbäume), wobei Seite 1 den immergrünen Nadelbaum zeigt und Seite 2 ihn schneebedeckt wirken lässt. Aber es gibt ein Problem, wenn man diese bereits nur mit einer Seite "erschaffen" hat und mehrfach kopiert. Nun müsste man ein Event bearbeiten und alle anderen dagegen austauschen. Welche man ausgetauscht hat, ist somit schwer zu erkennen.


    Also überlegt man sich, wie man mit einem Call/einem Befehl ALLE Events, die diese Grafik benutzen, vorübergehend ändern kann. Das müsste doch ein kurzes, aber mächtiges Plugin darbieten, oder nicht? Also per Abfrage auf den Pfad der Grafik 🤔 auf jeden Fall würde man sich so immens viel Zeit ersparen😮


    Lg MrKlamma

  • Schwierig. Es gibt wohl von Yanfly das Event Copier Plugin, mit dem man (soweit ich das verstanden habe) ein Event als Vorlage erstellt und das dann überall hinkopieren kann, wo man es braucht. Wenn ich an der Vorlage etwas ändere, ändern sich auch automatisch alle anderen Events. Aber im Nachhinein so etwas zu machen, dürfte 'ne Menge Arbeit werden.

  • Servus, wenn die Events alle ein und den selben Namen haben sollte das gehen. Ich kann leider nicht heute nach den Script-Call schauen, aber es gibt die Möglichkeit alle Events abzufragen und dann alle auszufiltern, die bestimmte Kriterien z.B. Name erfüllen.


    War irgendwas mit "for each Events", dann Abfrage mit Namen und wenn das "wahr" ist Script-Call um die Eventgrafik zu ändern.


    Falls diese nicht den selben Namen haben müsste man schauen ob diese eventuell etwas anderes gemeinsam haben, das kein anderes Event sonst hat - eventuell die Grafik ansich abfragen? :/



    Alternativ:

    ...Im Normalfall würde man nun einfach ein Event erstellen mit 2 (bei zB Nadelbäume), wobei Seite 1 den immergrünen Nadelbaum zeigt und Seite 2 ihn schneebedeckt wirken lässt. Aber es gibt ein Problem, wenn man diese bereits nur mit einer Seite "erschaffen" hat und mehrfach kopiert. Nun müsste man ein Event bearbeiten und alle anderen dagegen austauschen. Welche man ausgetauscht hat, ist somit schwer zu erkennen...

    Du kannst auch drei Seiten machen.

    1. Seite mit einer Grafik z.B. rotes Kreuz

    2. Seite die mit Grafik "Baum"

    3. Seite mit Switch und der Grafik "Baum 2"


    Die erste Seite würde dann direkt übersprungen werden und du siehst welche du ausgetauscht hast.



    Das Plugin von Zion ist auch sehr gut.:thumbup:

  • Bäume an eine Jahreszeit anzupassen geht aber einfacher, indem man per Event das Tileset tauscht. Dazu muss man nur eine Version mit grünem Laub/Nadeln und eine Version mit Schnee erstellen. Da dieser Tausch mapbezogen erfolgt, kann man das ganz individuell steuern. Das müsste auch bei Events funktionieren, die sich auf ein Element aus dem Tileset beziehen. Mal angenommen, ein Busch aus dem B-Set wurde über ein Event platziert, dann müsste bei einem Tausch des Tilesets sich auch die zugehörige Event-Grafik ändern.

  • Hallo alle,


    Danke allen für die Antworten.

    Ich werd wohl KlavirMusik s Tipp annehmen 😅


    An Ariyana : so mach ich es sonst auch. Nur sind die Bäume, die ich verwende, 2x3 Tiles groß und würden sich somit immer wieder überschneiden. Außerdem ergibt es so einen wundervollen Effekt, wenn man an Eventbäumen links und rechts vorbeigeht, dass es aussieht, als würde man die Äste durchqueren, ohne dass es unnatürlich wirkt und auch nicht den Spieler den Weg versperrt 😮 den Effekt würd ich gern behalten - daher die Anfrage. Ich danke dir trotzdem vielmals für deinen Beitrag. Ist ein guter Rat für alle, die Jahreszeiten einbauen 😊

  • An Ariyana : so mach ich es sonst auch. Nur sind die Bäume, die ich verwende, 2x3 Tiles groß und würden sich somit immer wieder überschneiden. Außerdem ergibt es so einen wundervollen Effekt, wenn man an Eventbäumen links und rechts vorbeigeht, dass es aussieht, als würde man die Äste durchqueren, ohne dass es unnatürlich wirkt und auch nicht den Spieler den Weg versperrt 😮 den Effekt würd ich gern behalten - daher die Anfrage. Ich danke dir trotzdem vielmals für deinen Beitrag. Ist ein guter Rat für alle, die Jahreszeiten einbauen 😊

    Mir ist ehrlich gesagt immer noch nicht klar, warum du für die Bäume Charsets brauchst. Rein theoretisch kann ein Baum die komplette Hälfte eines Tilesets einnehmen. Und ob sich die Bäume überschneiden, hängt doch davon ab, wo du sie auf der Map platzierst. Den Effekt, dass man links und rechts durch die Äste gehen kann, erreicht man sehr leicht dadurch, dass man diese Tiles mit nem Stern kennzeichnet. Und selbst in dem Fall, dass der Spieler zwischen den Bäumen hindurch gehen können soll und du dafür Events einsetzt: Solange die Events sich auf ein Tileset beziehen, müsste ein Tausch auch auf diese Events wirken.

  • An Ariyana : so mach ich es sonst auch. Nur sind die Bäume, die ich verwende, 2x3 Tiles groß und würden sich somit immer wieder überschneiden. Außerdem ergibt es so einen wundervollen Effekt, wenn man an Eventbäumen links und rechts vorbeigeht, dass es aussieht, als würde man die Äste durchqueren, ohne dass es unnatürlich wirkt und auch nicht den Spieler den Weg versperrt 😮 den Effekt würd ich gern behalten - daher die Anfrage. Ich danke dir trotzdem vielmals für deinen Beitrag. Ist ein guter Rat für alle, die Jahreszeiten einbauen 😊

    Mir ist ehrlich gesagt immer noch nicht klar, warum du für die Bäume Charsets brauchst. Rein theoretisch kann ein Baum die komplette Hälfte eines Tilesets einnehmen. Und ob sich die Bäume überschneiden, hängt doch davon ab, wo du sie auf der Map platzierst. Den Effekt, dass man links und rechts durch die Äste gehen kann, erreicht man sehr leicht dadurch, dass man diese Tiles mit nem Stern kennzeichnet. Und selbst in dem Fall, dass der Spieler zwischen den Bäumen hindurch gehen können soll und du dafür Events einsetzt: Solange die Events sich auf ein Tileset beziehen, müsste ein Tausch auch auf diese Events wirken.

    Es sind charsets, weil ich die 3 Plätze, die der Baum sonst zusätzlich im Tileset verbrauchen würde, brauche für kleine Sachen. Außerdem kann und soll man in meinem Spiel mit fast allem interagieren.

    Bsp: ich könnte ein Haus auch als Tilegrafik machen, was in 99% der Fälle auch Sinn macht. Ich möchte aber, dass man "hinter die Fassade" sieht (eine Tür auf der anderen Seite des Hauses wird in Wirklichkeit selten durch das Dach geöffnet) und man soll (ungeachtet der Tür) die Adresse sehen, also müssen sie wohl oder übel Multitile-Events werden.

    So ähnlich verhält es sich mit den Bäumen.

    Bei einem 2x3 Baum hast du das Problem, dass wenn du vor einem Baum einen weiteren Baum stellst, du davor nicht wieder "problemlos" einen Baum stellen kannst, ohne ein Event zu machen. Wenn du die Bäume aber komplett als Event hinklatscht, siehst du durch den Eventeditor die exakte freie Route für andere Events und Spieler. Weiters kann man den Spieler - wie oben bereits erwähnt - mit ihnen interagieren lassen - mit allen von ihnen.


    Oder anders gesagt: das war nicht meine Frage und beantwortet diese auch nicht 😅

    Zion und KlavirMusik haben schon geholfen. 😊

  • Also wie gesagt die Events benötigen irgendeine Gemeinsamkeit.


    Mit folgendem frägst du alle Events ab:

    JavaScript
    1. $gameMap.events().forEach(function(ev) {
    2. });


    Dann kannst du die Abfrage(n) machen z.B. mit dem Namen:

    JavaScript
    1. if (ev.event().name == "EVENTNAME") {
    2. }


    Wenn diese "Wahr" ist, so kannst du damit die Event-Grafik ändern:

    JavaScript
    1. $gameMap.event(EVENTID).setImage('BILDNAME', INDEX);



    Hier ein Beispiel, wie das ganze zusammen aussehen kann:

    JavaScript
    1. $gameMap.events().forEach(function(ev) {
    2. if (ev.event().name == "Baum") {
    3. $gameMap.event(ev.eventId()).setImage('Baum_Winter', 1);
    4. }
    5. });


    Info: Der INDEX fängt mit 0 an und müsste die Grafik oben links sein. Ich denke dann das oben Mitte Index 1 ist, oben rechts 2, usw. Notfalls einfach rumspielen.

    Falls du Fragen oder Probleme hast, melde dich einfach, ich habe das ganze noch nicht ausgetestet.

  • Okay muss mich etwas verbessern, hab mich gerade nochmal genauer damit befasst und etwas nicht bedacht / vergessen:


    Event-Grafik ändern passt, jedoch der Index steht für etwas anderes bzw. hier eine Hilfe:

    JavaScript
    1. $gameMap.event(EVENTID).setImage('BILDNAME', INDEX);




    Du hast die Möglichkeit in dem Script-Call auch die Blickrichtung zu ändern:

    JavaScript
    1. $gameMap.event(EVENTID).setDirection(X);

    X musst du ersetzen mit 2 für "unten", 4 für "links", 6 für "rechts" oder 8 für "oben".



    Und du kannst das "Pattern" ändern:

    JavaScript
    1. $gameMap.event(EVENTID)._originalPattern = X;

    X musst du ersetzen mit 0 für "links", 1 für "mitte" und 2 für "rechts".




    Beispiel, wenn du genau diese Grafik haben möchtest:


    Event-Grafik Name: Actor1.png

    Events die ersetzt werden sollen heißen alle "Test"

    Der "Character-Index" ist hier 2, die Blickrichtung nach rechts = 6 und das Pattern ist "rechts" = 2.

    JavaScript
    1. $gameMap.events().forEach(function(ev) {
    2. if (ev.event().name == "Test") {
    3. $gameMap.event(ev.eventId()).setImage('Actor1', 2);
    4. $gameMap.event(ev.eventId()).setDirection(6);
    5. $gameMap.event(ev.eventId())._originalPattern = 2;
    6. }
    7. });
  • Oder anders gesagt: das war nicht meine Frage und beantwortet diese auch nicht 😅

    Zion und KlavirMusik haben schon geholfen. 😊

    Dass meine Einwände deine Frage nicht beantworten, ist schon klar. Darum ging es mir auch garnicht. Mir ist es selbst schon passiert, dass ich etwas komplizierter gelöst habe, als es eigentlich hätte sein müssen. Durch deine Erklärung für die Anfrage habe ich vermutet, dass dies bei dir auch der Fall ist.
    Aber da du dich bewusst für die Charset-Lösung entschieden hast, ist alles gut.