Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 20 von 60

Thema: [RM2k3 DynRPG Plugin] Pathfinding

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1

    [RM2k3 DynRPG Plugin] Pathfinding

    Moin moin und hallo,

    ich erstelle nun auf Cherrys Bitte hin hier einen Thread für mein Pathfinding PlugIn, damit es vll ein wenig mehr Aufmerksamkeit bekommt, und andere eventuell ebenso dazu animiert etwas mit diesem wirklich genialen Projekt zu versuchen.

    Wie vll ein paar Leute mitbekommen haben (und in meiner Signatur zu betrachten ist) arbeite ich selbst an einer eigenen Game Engine, und bin derzeit dabei einen Pathfinder für das Projekt zu schreiben. Allerdings ist das ganze durch die unheimlich vielseitigen Features (Pixel genaues Movement, beliebig große Tiles, etc) um einiges schwieriger Umzusetzen als mit den Begrenzungen, die einem der Maker auferlegt. Da ich aber in meinem Projekt das Grundprinzip schon implementiert habe, dachte ich mir, ich portiere es mithilfe des DynRPG auch auf den Maker. Und hier ist das Ergebnis.
    Letzendlich hat mich das ganze ca an die 5-6 Stunden gekostet, mich in das DynRPG einzuarbeiten, mich mit Code Blocks vertraut zu machen, und eben das Pathfinding für den Maker funktionabel zu machen.

    Zitat Zitat
    =====================================
    Pathfinding Plugin for RPG Maker 2003
    For DynRPG version 0.13 or higher
    By anti-freak
    =====================================

    [SCROLL DOWN FOR ENGLISH INSTRUCTIONS!]

    **DEUTSCH**
    ===========

    Dieses DynRPG-Plugin ermöglicht es euch, A*-Pathfinding zu verwenden um Events zu bewegen, d.h. sie finden von selber den Weg von einem Punkt zum anderen, auch wenn Hindernisse im Weg stehen.

    >>> Im "Pathfinder\Source"-Ordner findet ihr den Quellcode dieses Plugins.

    INSTALLATION
    ============

    1) Stellt sicher dass der DynRPG-Patch bei eurem Spiel installiert ist: http://cherrytree.at/dynrpg
    2) Kopiert die pathfinder.dll vom DynPlugins-Ordner des Demoprojekts in den DynPlugins-Ordner eures Spiels.

    KOMMENTARBEFEHLE
    ================

    Folgende Befehle könnt ihr über die "Comment"-Funktion des RPG Makers verwenden:
    (HINWEIS: Ihr könnt auch das Prefix "V" für Parameter benutzen deren Wert aus einer Variable gelesen werden soll. Ihr könnt auch mehr als ein "V"-Präfix verwenden.)

    @FindPath Event-ID, X, Y, Speed, Frequency, MaximaleEntfernung, Erfolg?
    -------------------------------------------------------------------------
    Bewegt ein Event zu einem Zielpunkt und findet von selbst den Weg.

    @FindPath Speed, Frequency, MaximaleEntfernung, Erfolg?
    <Change Event Location> (RPG Maker-Befehl)
    -------------------------------------
    Bewegt das angegebene Event zu den im nachfolgenden "Change Event Location" Makerbefehl angegeben Koordinaten.

    @FindPathOrNearestSpot Event-ID, X, Y, Speed, Frequency, MaximaleEntfernung, Erfolg?
    -------------------------------------------------------------------------
    Bewegt ein Event zu einem Zielpunkt und findet von selbst den Weg. Ist der Zielpunkt nicht erreichbar, wird automatisch der naheligendste Punkt benutzt.

    @FindPathOrNearestSpot Speed, Frequency, MaximaleEntfernung, Erfolg?
    <Change Event Location> (RPG Maker-Befehl)
    -------------------------------------
    Bewegt das angegebene Event zu den im nachfolgenden "Change Event Location" Makerbefehl angegeben Koordinaten.

    Event-ID: ID des zu bewegenden Events, oder "this" für das aktuelle Event bzw. "hero" für den Helden (ohne Anführungszeichen)
    X: X-Koordinate des Zielpunkts auf der Map
    Y: Y-Koordinate des Zielpunkts auf der Map
    Speed: Geschwindigkeit der Bewegung (1 bis 6 oder "default"(ohne Anführungszeichen))
    Frequency: Frequency der Bewegung (1 bis 8 oder "default"(ohne Anführungszeichen))
    MaximaleEntfernung: Gibt die Anzahl der Tiles an, die maximal zurückgelegt werden (Selbst wenn der Weg bis länger ist). Bei 0 wird die komplette Strecke zurück gelegt.
    Erfolg?: Gibt die Variable ID an, an die zurück gegeben wird, ob ein Pfad gefunden wurde, oder nicht (1 bei Erfolg, 0 bei Nichterfolg).


    @GetCurEventID Variablen-ID
    ---------------------------
    Speichert die ID des aktuellen Events in der angegebenen Variable. Für Common Events ist die ID negativ.
    ansonsten heißt es ausprobieren, würde mich über Comments für das ganze freuen

    mfg

    HIER DER DOWNLOAD

    Geändert von DNKpp (26.02.2012 um 22:42 Uhr)

  2. #2
    so, ein kleines feature hinzugefügt, und bisschen was am designe gedreht, neu runter laden lohnt sich

  3. #3
    Find ich eine aboslut super Idee, ganz große Klasse!

    Ich teste es gerade aus, und habe noch ein Problem: Wie funktioniert das mit dem V-Präfix? Ich hab's jetzt über "@CalcPath V2, V3, V4, 3, 8, 1"
    versucht, wobei in Variable 2 die Event-ID, in Variable 3 die X- und in Variable 4 die Y-Koordinate gespeichert ist. Bloß tut sich nichts. ^^°

    Ansonsten... super. Je nach Performance ergeben sich damit so viele neue Möglichkeiten *-*

    Geändert von BDraw (17.02.2012 um 15:36 Uhr)

  4. #4
    Wow! Das ist ein Plugin, das mir wirklich viele Probleme ersparen wird und wirklich extrem nützlich ist!
    So eine Funktion hab ich mir schon seit sehr langer Zeit gewünscht!
    Ich habe es bereits getestet, nur mit einer Sache habe ich Probleme und zwar mit der Möglichkeit nummer 1-
    Ich habe das so gemacht: @CalcPath 0007, 009, 012, 4, 8, 1
    Nur funktioniert das nicht und ich kapiere nicht woran das liegt.

  5. #5
    Habt ihr die neuste Version geladen (vom 16.2 ca 22uhr)? Ansonsten muss ich mal schauen, woran das liegen könnte, bisher keine Idee :-P

  6. #6
    Ja, die neueste Version habe ich.

    Jetzt habe ich außerdem auch einen gravierenden Fehler entdeckt:
    Binde ich in das Ereignis einen Tab oder eine Variabel ein (sie hat nichtmal was damit zu tun)
    schon wird die Person zu der Stelle teleportiert ohne einen Schritt gemacht zu haben!
    So gehts nicht:
    - SCRIPT -
    <> Change Switch: [16] = ON
    <> Change Variable: [10] = X position on map (tiles) of this event
    <> Change Variable: [11] = Y position on map (tiles) of this event
    <> Show Message: Los gehts!!
    <> Comment: @CalcPath 5, 8, 1
    <> Set Event Location: Event #11 -> (19, 26)
    <>
    So gehts:
    - SCRIPT -
    <> Show Message: Los gehts!!
    <> Comment: @CalcPath 5, 8, 1
    <> Set Event Location: Event #11 -> (19, 26)
    <>

  7. #7
    Ok? O.o danke fürs melden, schau ich mir morgen etwas genauer an.

    Nur weiter so, bin über jeden Tester froh ;-P

  8. #8
    Zitat Zitat von Oktorok3 Beitrag anzeigen
    Ja, die neueste Version habe ich.

    Jetzt habe ich außerdem auch einen gravierenden Fehler entdeckt:
    Binde ich in das Ereignis einen Tab oder eine Variabel ein (sie hat nichtmal was damit zu tun)
    schon wird die Person zu der Stelle teleportiert ohne einen Schritt gemacht zu haben!
    So gehts nicht:
    - SCRIPT -
    <> Change Switch: [16] = ON
    <> Change Variable: [10] = X position on map (tiles) of this event
    <> Change Variable: [11] = Y position on map (tiles) of this event
    <> Show Message: Los gehts!!
    <> Comment: @CalcPath 5, 8, 1
    <> Set Event Location: Event #11 -> (19, 26)
    <>
    <>
    also ich hab das jetzt mal genauso versucht, aber bei mir funktioniert alles einwandfrei.

    was meinst du eigentlich mit "tab", einen tab im event? (also ne andere seite)

    Zitat Zitat von BDraw Beitrag anzeigen
    Find ich eine aboslut super Idee, ganz große Klasse!

    Ich teste es gerade aus, und habe noch ein Problem: Wie funktioniert das mit dem V-Präfix? Ich hab's jetzt über "@CalcPath V2, V3, V4, 3, 8, 1"
    versucht, wobei in Variable 2 die Event-ID, in Variable 3 die X- und in Variable 4 die Y-Koordinate gespeichert ist. Bloß tut sich nichts. ^^°

    Ansonsten... super. Je nach Performance ergeben sich damit so viele neue Möglichkeiten *-*
    hab den fehler gefunden, hab ich einen parameter vertauscht
    ich sag bescheid, wenn die neue version online ist.

    Geändert von DNKpp (18.02.2012 um 06:26 Uhr)

  9. #9
    Ich bin grade leider den ganzen Tag nicht in IM online, also @anti-freak schick mir die neue Version per PM dann lad ich sie hoch.

    @Oktorok3: Ich nehme an mit Tab meinst du Switch. Ich verstehe zwar im Moment überhaupt nicht woran das liegen könnte, aber wenn da ein Bug ist, dann muss der in meinem SDK sein... Kannst du uns dein Projekt mal schicken sodass wir nachsehen können ob bei uns der Fehler auch passiert (wenn wir es NACHBAUEN nämlich nicht)?

    mfG Cherry

  10. #10
    Bitte zuerst einen der beiden Samurai anklicken dann den anderen und
    auch mal andersherum testen.
    http://www.share-online.biz/dl/AIOE9LZLO2V

  11. #11
    so, dann mal im richtigen thread...

    Zitat Zitat
    also, ich habs mir jetzt mal angesehen.

    da sind ein paar seltsame effekte drin.

    die objecte bewegen sich nach dem teleport noch auf der route, die sie durch den pathfinder bekommen haben, also liegt der fehler erst mal nicht hier.
    der fehler wird hier irgendwo in "*nextLineId = scriptData->currentLineId + 1;" liegen.

    was mir schonmal komisch vorkommt, in nextLineId steht immer -1, wenn ich es nicht selbst änder.
    dann, LineId ist nicht = scriptData->currentLineId, LineId ist immer eins weniger.

    müssen wir uns mal zusammen setzen, irgendwas passt da nicht :P

  12. #12
    Jo, ich post das auch hier:
    Zitat Zitat
    Naja, ich versteh den Code sowieso nicht, weil ich die Programmiersprache nicht verstehe. Da bringt zusammenzusetzen eher mit Cherry etwas.
    So aber ich würde ja auch außerdem gerne wissen, wie die Möglichkeit Nummer1 einzustellen funktioniert, so das es klappt:
    Zitat Zitat von Oktorok3(von weiter oben)
    nur mit einer Sache habe ich Probleme und zwar mit der Möglichkeit nummer 1-
    Ich habe das so gemacht: @CalcPath 0007, 009, 012, 4, 8, 1

  13. #13
    Zitat Zitat von anti-freak Beitrag anzeigen
    also, ich habs mir jetzt mal angesehen.

    da sind ein paar seltsame effekte drin.

    die objecte bewegen sich nach dem teleport noch auf der route, die sie durch den pathfinder bekommen haben, also liegt der fehler erst mal nicht hier.
    der fehler wird hier irgendwo in "*nextLineId = scriptData->currentLineId + 1;" liegen.

    was mir schonmal komisch vorkommt, in nextLineId steht immer -1, wenn ich es nicht selbst änder.
    dann, LineId ist nicht = scriptData->currentLineId, LineId ist immer eins weniger.

    müssen wir uns mal zusammen setzen, irgendwas passt da nicht :P
    Ich poste die Antwort hier damit das alle wissen.

    Wie eigentlich in der Dokumentation beschrieben, ist *nextLineId normalerweise -1, was bedeutet dass DynRPG nicht festlegt welche Zeile als nächstes ausgeführt wird, sondern der Maker. Wenn du da was reinschreibst, überschreibst du die Entscheidung des Makers.

    onComment wird ausgeführt nachdem das Comment geparst wurde. Jede Commentzeile ist eine eigene Eventzeile. scriptData->currentLineId steht also normalerweise auf der nächsten Zeile nach der letzten Commentzeile. (Im Gegensatz dazu sollte es in onEventCommand gleich lineId sein).

    Daher überspringt "*nextLineId = scriptData->currentLineId + 1;" eine Zeile.

  14. #14
    Nutzt dieses plugin eigentlich jemand? Wenn nicht, brauch ich mir nicht die mühe machen, und die heuristik zu überarbeiten (die leider ein wenig fehlerhaft ist).
    Wenn doch, Feature Wünsche?

    @cherry: hast du diesen Bug ausgemerzt?

  15. #15
    Ich gehe stark davon aus dass das wer nutzt.

    @Bug: Bin grade generell am Überarbeiten, es kommen in Kürze eine ganze Menge Bugfixes in der neuen Version. Ich hoffe dieser wird dann auch gefixt sein.

  16. #16
    Zitat Zitat von anti-freak Beitrag anzeigen
    Nutzt dieses plugin eigentlich jemand? Wenn nicht, brauch ich mir nicht die mühe machen, und die heuristik zu überarbeiten (die leider ein wenig fehlerhaft ist).
    Wenn doch, Feature Wünsche?

    @cherry: hast du diesen Bug ausgemerzt?
    Ich benutzte es. Eine Sache ist mir allerdings noch unklar - wenn man die 'FindPath' Funktion nutzt und einen Punkt (zB die Koordinaten vom Helden) angibt, geht dann das Event selbst dann dahin, wenn es nicht direkt dort hingelangt? Ich würde ja die 'FindPathOrNearestSpot' - Funktion nutzen, aber die bezieht Hindernisse nicht mit ein, sondern einfach nur das näheste Feld. (Falls ich das richtig verstanden habe).



    Zitat Zitat von Cherry Beitrag anzeigen
    Ich gehe stark davon aus dass das wer nutzt.

    es kommen in Kürze eine ganze Menge Bugfixes in der neuen Version. Ich hoffe dieser wird dann auch gefixt sein.
    Hoffentlich wird auch der Transparenz-Bug gefixt! °O°

  17. #17
    Zitat Zitat von goldenroy Beitrag anzeigen
    Ich benutzte es. Eine Sache ist mir allerdings noch unklar - wenn man die 'FindPath' Funktion nutzt und einen Punkt (zB die Koordinaten vom Helden) angibt, geht dann das Event selbst dann dahin, wenn es nicht direkt dort hingelangt? Ich würde ja die 'FindPathOrNearestSpot' - Funktion nutzen, aber die bezieht Hindernisse nicht mit ein, sondern einfach nur das näheste Feld. (Falls ich das richtig verstanden habe).
    Ich hab das gerade nicht mehr im Kopf, was das genau macht, aber was meinst du mit "bezieht Hindernisse nicht mit ein". Es gibt beim Moven ja durchaus die Möglichkeit, dass das gewünschte Feld nicht erreichbar ist. Dann wird das nächstgelegene Feld berechnet und dorthin wird gemoved. Oder was meinst du genau?

    Dann werde ich das mal in nächster Zeit überarbeiten, bisschen performance pushen und, wie bereits gesagt, die Heuristik überarbeiten, sodass in jedem Fall der kürzeste Weg gefunden wird
    Hab da noch was im Kopf, was man machen könnte, könnte für den ein oder anderen ganz cool sein. Aber ich verrate noch nix :P

  18. #18
    Ich benutze es auch seit kurzem und finds klasse! Allerdings hab ich auch direkt ne Idee für ne Erweiterung :'D

    Wäre es möglich eine Funktion einzubauen bei der man nur auf die nächst höhere oder niedrigere Terrain-ID wechseln kann um quasi Höhenunterschiede zu simulieren?
    Also dass der Char/das Event nur von Terrain-ID 2 runter auf 1 oder hoch auf 3 gehen kann und nicht direkt auf 4 oder so.

    Achja....wenn ich

    @FindPath hero, V4, V5, default, 8, 0, 0
    @WaitUntilMove hero

    eingebe und direkt danach einen Message und Show Choices Befehl einfüge, kommt das noch mitten in der Bewegung und nicht erst wenn die Bewegung fertig ist. Das sind übrigens 2 Kommentare.

  19. #19
    Was passiert wenn du zwischen die beiden Kommentare noch ein Wait 0.0 machst?

  20. #20
    Der 0.0 Wait bringt nichts. Selbes Verhalten.

    Hier der Eventcode:
    Zitat Zitat von EasyEventExporter
    - SCRIPT -
    <> Change Variable: [4] = X position on map (tiles) of event #2
    <> Change Variable: [5] = Y position on map (tiles) of event #2
    <> Set Event Location: Event #2 -> (39, 0)
    <> Comment: @FindPath hero, V4, V5, default, 8, 0, 0
    <> Wait: 0,0 sec.
    <> Comment: @WaitUntilMove hero
    <> Show Message: Zurück zur Ausgangsposition?
    <> Show Choices: Ja/Nein (Option #2 as default)
    : [Ja] Handler (Option #1)
    . <> Comment: @FindPath hero, V2, V3, default, 8, 0, 0
    . <> Wait: 0,0 sec.
    . <> Comment: @WaitUntilMove hero
    . <>
    : [Nein] Handler (Option #2)
    . <>
    : End of choice

Berechtigungen

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