Gegner/Event nach bestimmter Zeit auf der Karte respawnen

  • i_RMMV


    Ein jeder von euch der die Variante bevorzugt Gegner auf der Karte zu haben die bei Berührung einen Kampf starten werden denke ich mit folgendem Tutorial etwas anfangen können:


    Gegner nach bestimmter Zeit respawnen lassen


    Also gut, um das hinzubekommen brauchen wir eigentlich nur ein Common Event und ein Gegner.


    Common Event



    ! Es ist $gameVariables.value(12) weil meine Counter Variable die ID 12 hat !


    Für das folgende brauche ich denke ich eine längere Erklärung...:

    Code
    1. var mapid = Number($gameSystem.Enemy_Respawn[$gameVariables.value(12)][0].substring(0, $gameSystem.Enemy_Respawn[$gameVariables.value(12)][0].indexOf(",")));
    2. var eventid = Number($gameSystem.Enemy_Respawn[$gameVariables.value(12)][0].substring($gameSystem.Enemy_Respawn[$gameVariables.value(12)][0].indexOf(",") + 1, $gameSystem.Enemy_Respawn[$gameVariables.value(12)][0].length));

    Wir werden später dem Array "$gameSystem.Enemy_Respawn" ein weiteres Array hinzufügen, das zum Beispiel so aussehen wird:


    ["001,006", 900]


    Was dahinter steckt ist einfach das:


    "001": MapID auf dem sich das Event befindet

    "006": ID von dem Event auf der Karte

    ", " : Wert der die MapID von der EventID trennt


    900: Timer ----> Es müssen 900 Frames vergangen sein, bis der Gegner respawned (60 Frames ~ 1 Sekunde)


    Nun wird eben die Variable mapid auf den Wert 001 gesetzt und die Variable eventid auf den Wert 006


    Code
    1. var key = [mapid, eventid, 'A'];
    2. $gameSelfSwitches.setValue(key, false);

    Der Self Switch A auf der Karte mit dem Wert der Variable mapID von dem Event mit dem Wert der Variable eventid wird deaktiviert ----> Enemy ist respawned


    Code
    1. $gameSystem.Enemy_Respawn.splice($gameVariables.value(12), 1);

    Da der Gegner respawned ist, wird er nicht mehr in dem Respawn Array gebraucht und wird daher daraus entfernt


    Gegner


    ! Es muss in dem Fall immer mit Self Switch A gearbeitet werden !


    Code
    1. $gameSystem.Enemy_Respawn.push(["001,030", 500]);

    Ein neuer Timer mit:


    MapID: 001

    EventID: 030

    Timer-Dauer: 500 Frames


    wird dem System hinzugefügt


    Wenn der Self Switch dann aktiviert wird ist der Gegner quasi despawned, davor muss dann eben der Kampf initialisiert werden!



    Bei Fragen könnt ihr euch gerne melden, ich hoffe das war alles einigermaßen verständlich xD...


    Danke fürs Lesen!

  • Das ist sehr interessant. Hab zwar noch kein Projekt, wo es Gegner gibt, diese Respawnen, aber werds mir irgendwo notieren. :thumbup:

  • Ich habs mir, als ich das mal ausprobiert hab nen bisschen einfacher gemacht.

    Einfach die Selbstschalter seite für A so definieren, dass das event 600 frames (10 sek.) wartet und dann wieder mit einer Animation zurück auf die ursprüngliche Seite geht. Und siehe da, das Monster ist sogar mit Animation wieder da.

    Desweiteren kann man hier die bewegungsroute ein wenig anpassen, dass das Event sich im unsichtbaren Zustand (kein Bild) noch ein wenig bewegt, um nicht den Eindruck zu erwecken, dass das Fiech einfach an Ort und Stelle wiederbelebt wird :D

    PS die 2. Seite sollte auf unter der Charakterebene gestellt sein, sonst könnte man dagegen laufen XD


    Könnte für die Leute interessant sein, die sachen gern ein wenig weniger komplex haben ;)


    Gruß,

    Solaiel

  • Solaiel Klar, ist die ganz einfache Lösung.


    Problem hier ist halt nur, dass sich das Event bei Mapwechsel resetten würde, quasi wenn du 500 frames gewartet hättest dann aber die Map verlässt und neu betrittst, erneut 600 frames gewartet werden.

    Jeder so wie er zufrieden ist/ es mag :/

    Danke fürs teilen!

  • Das stimmt. Allerdings bin ich in java script nicht besonders bewandert, das müsste ich mir irgendwann mal angucken und zusätzlich, wie der RPG Maker den Kram verdaut.

    Wenn man sich allein um alles kümmern muss, kommt da schon ne menge auf einen zu ^^


    Gruß,

    Solaiel