Ergebnis 1 bis 20 von 25

Thema: Problem mit Kampfsystem ._.

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Wenn das der 2k3 ist:

    Du könntest mal mit dem Debugaddon die Eventbefehlverarbeitung mitschneiden und dann nachschauen wo es hängt: http://www.multimediaxis.de/threads/...=1#post2801470
    Aber bitte nicht deine RPG_RT.exe ersetzen, weil das Debugaddon selber ein paar kleine Macken hat, also lieber eine RPG_RT_Debug.exe oder so draus machen und nur zum Debuggen verwenden.

    Wenn das der 2k ist:

    Schick mir ein Testprojekt wo der Fehlerauftritt und ich schau für dich nach (weil da müsste ich ein bisschen tricksen dass das Debugaddon mit dem 2k läuft).

  2. #2
    Wenn ich den Patch drauf ziehe und die RPG_RT.exe dann starten will kommt zuerst eine Meldung, dass RPG_RT.exe nicht mehr funkioniert und danach diese Meldung.



    Falls es hilft, ich hab den 2k3 v1.08 mit BetterAEP und DynRPG.

    Edit: Okay es läuft, zwar ohne BetterAEP und DynRPG, aber da der Bug mit dem anhaltendem Event trotzdem auftritt wird es wohl nicht an beiden liegen.

    Edit2: So ich hab das ganze jetzt mal aufzeichnen lassen, sogar mehrmals und ich bin wieder zu unterschiedlichen Ergebnissen gekommen.
    Zuerst hängt es nach einem Move Picture Befehl, danach kommt es nichtmals dazu die Bilder anzeigen zu lassen.

    Geändert von Quetschi (02.04.2013 um 13:24 Uhr)

  3. #3
    Nein, du sollst mit der F3-Funktion die Eventverarbeitung mitschreiben lassen.
    F3 drücken bevor es hängt, bestätigen, warten bis es hängt, nochmal F3 drücken, Spiel schließen, trace.log-Datei anschauen (letzte Einträge).

  4. #4
    Habe ich ja...und dort habe ich eben gestgestellt, dass es einmal vor dem Move Picture gestoppt hat und beim nächsten mal kam es nicht einmal bis dahin...

  5. #5
    Sorry, hab den Edit nicht gesehen.

    Zeig mir mal die Logfiles.

  6. #6
    Okay.

    Fall 1:


    Fall 2:


    Der Rest bzw. alles was vorher kam, sind nur Berechnungen zur HP-Anzeige

  7. #7
    Hm, das ist interessant, da dürfte eigentlich gar nichts hängen blieben. Ich kann jetzt dich nur noch um das Projekt (oder einen Auszug, in dem der Fehler auftritt) bitten und das händisch mit einem Debugger analysieren.

  8. #8
    Ich finde es auch komisch. Naja hier das Projekt. Das ist aber jetzt wie gesagt ohne BetterAEP und DynRPG, da das mit dem Debugaddon nicht funktioniert hat.

    Download

  9. #9
    Wie löse ich den Fehler aus?

  10. #10
    Ups...vergessen zu erklären.^^
    Einfach starten und dann nach rechts auf das Feld zwischen dem Jungen und dem Baumstumpf. Dann einfach draufstellen und Enter drücken.
    Dann kurz warten und dann "Abwehr" auswählen und Enter drücken.

  11. #11
    Aaaaahhhhh, Fehler gefunden.

    Du ziehst dir selbst den Boden unter den Füßen weg.

    Zuerst eine Vorinformation: Der RPG Maker checkt zu Beginn jedes Frames die Startbedingungen der Events.
    Event "EV0029", Seite 1, hat Switch 4 "Cursor" als Startbedingung.

    Was passiert ist:

    === Framebeginn ===
    RPG Maker überprüft Startbedingungen, Switch 4 ist an, also wird Event "EV0029", Seite 1, ausgeführt.
    Event "EV0029", Seite 1, hat Switch 4 "Cursor" als Startbedingung.
    Event "EV0029", Seite 1, callt Event "Heldenzüge", Seite 1.
    Event "EV0029", Seite 1, stellt Switch 4 "Cursor" aus.
    Event "Heldenzüge", Seite 1, callt Event "Heldenzüge", Seite 4.
    (Event "Heldenzüge", Seite 1, stellt Switch 4 "Cursor" nochmal aus, warum auch immer.)
    Event "Heldenzüge", Seite 4, callt Common Event "HP Anzeige".
    Common Event "HP Anzeige" führt ein "Wait 0.0" aus, was bedeutet "auf nächsten Frame warten".
    === Nächstes Frame ===
    RPG Maker überprüft Startbedingungen, Switch 4 ist aus, also wird Event "EV0029", Seite 1, nicht ausgeführt. <<< und zwar die Skripteinheit. Siehe unten.

    Du musst geistig unterscheiden zwischen einer Eventseite als Einheit auf der Map (bzw. Common Event als Einheit in der Database) und als "Skripteinheit". Eine Skripteinheit hat einen Callstack (d.h. einen "Stapel" der sich merkt wenn das Event andere Events gecallt hat, damit am Ende des gecallten Event zur Ursprungsposition zurückgekehrt werden kann) und einen Linepointer, der dem RPG Maker sagt, was die aktuell ausgeführte Zeile ist (was nicht zwingend in derselben Einheit auf der Map sein muss! D.h., Event "EV0029", Seite 1, kann - wie es hier passiert - einen Linepointer haben der gerade auf Common Event "HP Anzeige" zeigt!), sowie ein paar andere Daten (aktuelle "Wartezeit" wenn gerade ein Wait aktiv ist, etc.). Effektiv ist jede "Skripteinheit" eine parallel laufende Instanz des Eventinterpreters des RPG Makers.

    Der Linepointer (der interne "Skriptzeilencursor") für Event "EV0029", Seite 1, befindet sich zu Beginn des neuen Frames (durch das Wait 0.0 bedingt) gerade am Ende von Common Event "HP Anzeige", denn der Callstack von diesem Eventskript sieht gerade so aus:

    ===> Common Event "HP Anzeige", Zeile 22: <> Wait 0.0 <<< aktueller Linepointer
    ==> Event "Heldenzüge", Seite 4, Zeile 79: <> Call Event: Common Event "HP Anzeige"
    => Event "Heldenzüge", Seite 1, Zeile 51: <> Call Event: "Heldenzüge", Seite 4
    > Event "EV0029", Seite 1, Zeile 42: <> Call Event: "Heldenzüge", Seite 1 <<< Ursprungsevent, wird dieses deaktiviert, wirkt sich das auf den gesamten Stapel aus

    D.h., durch Deaktivieren von Switch 4, der Startbedingung für Event "EV0029", Seite 1 ist, wird die Ausführung der damit zugeordneten Skripteinheit unterbrochen, auch wenn diese gerade einen Linepointer hat der auf ein anderes Event zeigt (hier das Common Event). Dieser Effekt wird "scheinbar" erst durch "Wait 0.0" ausgelöst, weil das Wait auf den nächsten Frame wartet, und der RPG Maker nur zu Beginn jedes Frames die Startbedingungen überprüft, also das Ausschalten von Switch 4 solange keinen Effekt hat bis das Frame endet.

    Du musst also deinen Code umbauen sodass du dir nicht mehr wie eingangs erwähnt selbst den Boden unter den Füßen wegziehst, z.B. indem du Switch 4 nicht als Startbedingung verwendest sondern das gesamte Event "EV0029" in ein "<> Conditional Branch: If Switch [0004:Zug] == ON" packst (obwohl ich vermute dass das nichtmal notwendig ist weil das Event ja niemals wieder von vorne beginnt während die zugehörige Skripteinheit noch nicht am Ende der Eventseite angelangt ist, was ja erst passiert wenn es aus den ganzen gecallten Events zurück ist - aber ich hab deine Events nicht so genau angeschaut um sagen zu können dass es 100% für dich passen würde).

    Übrigens: Das Debugaddon hat leider einen Fehler der bei gecallten Eventseiten die falsche Eventseitennummer zeigt, darum steht alles was im Heldenzüge-Event passiert in der trace.log als "Pg 6" drinnen, obwohl es in Wirklichkeit in Seite 1 und 4 abläuft.

    Geändert von Cherry (02.04.2013 um 22:09 Uhr)

  12. #12
    Aha Wieder etwas neues gelernt! Danke.

    Aber nur, damit ich das richtig verstanden habe:
    Wenn ich ein Event erstelle und auf Seite 1 als Startbedingung Switch1 setze und dann Seite 2 Aufrufe in der eine Schleife ist, die die Variable1 von 0 bis 10 hochzählt und am Ende einen 0.0 Wait hat.
    Und dann eine Conditional Branch, dass wenn die Variable1 den Wert 5 hat soll Switch1 deaktiviert werden. Dann wird beim nächsten 0.0 Wait das ganze Event abgebrochen, weil bei Seite 1, welche Seite 2 gecallt hat, die Startbedingung nicht erfüllt ist und die Variable1 bleibt folglich beim Wert 5 stehen?

    So ich geh' das mal im Maker ausprobieren. Sollte ja eigentlich reichen, wenn ich den Switch dann erst ganz am Ende deaktivieren lasse. Ansonsten mal gucken wie ich das löse.

    Edit:
    Wunderbar Es funktioniert. Noch einmal vielen, vielen Dank!
    Wer hätte gedacht, das so etwas einfaches solche Folgen hat. Naja jetzt weiß ich es ja. Startswitch immer erst am Ende deaktivieren.

    Geändert von Quetschi (03.04.2013 um 09:40 Uhr)

Berechtigungen

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