PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [RM2k3 DynRPG Plugin] Pathfinding



DNKpp
15.02.2012, 20:41
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.


=====================================
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 (http://cherrytree.at/cms/download/?did=22)

DNKpp
16.02.2012, 22:35
so, ein kleines feature hinzugefügt, und bisschen was am designe gedreht, neu runter laden lohnt sich :)

BDraw
17.02.2012, 15:33
Find ich eine aboslut super Idee, ganz große Klasse! :A

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 *-*

Oktorok3
17.02.2012, 22:49
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. :\

DNKpp
18.02.2012, 00:09
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

Oktorok3
18.02.2012, 00:19
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)
<>

DNKpp
18.02.2012, 00:24
Ok? O.o danke fürs melden, schau ich mir morgen etwas genauer an.

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

DNKpp
18.02.2012, 06:19
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)


Find ich eine aboslut super Idee, ganz große Klasse! :A

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.

Cherry
18.02.2012, 08:18
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

Oktorok3
18.02.2012, 12:32
Bitte zuerst einen der beiden Samurai anklicken dann den anderen und
auch mal andersherum testen.
http://www.share-online.biz/dl/AIOE9LZLO2V

DNKpp
18.02.2012, 23:19
so, dann mal im richtigen thread...


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

Oktorok3
18.02.2012, 23:50
Jo, ich post das auch hier:

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:

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

DNKpp
19.02.2012, 00:09
Jo, ich post das auch hier:

So aber ich würde ja auch außerdem gerne wissen, wie die Möglichkeit Nummer1 einzustellen funktioniert, so das es klappt:

wie gesagt, da habe ich einen fehler bei den parametern gemacht, deswegen funktioniert das leider noch nicht.
wenn cherry wieder da ist, und wir wissen woran dein anderes phänomen liegt wird er es hochladen (ich kann das nich, is ja seine page :P).

bis dahin ein bisschen geduld, sollte wohl hoffentlich morgen erledigt sein^^

Cherry
19.02.2012, 16:35
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.

DNKpp
19.02.2012, 21:50
ok, es hat mich nicht los gelassen, dass das durch den switch so durcheinander gekommen ist, und ich habe herum probiert.
schuld ist dann wohl das parrallel process, das du mit dem switch angeschaltet hast, das bringt da irgendwas durcheinander.

ich habe weiter probiert, und es liegt nicht daran, dass es angeschaltet wurde, sondern generell das es läuft, ergo -> nicht mehr meine baustelle :P

mfg

Oktorok3
20.02.2012, 16:00
Heißt das, du willst jetzt einfach darüber wegschauen?
Ich habe jetzt nochmal eine Testversion des Spiels mit diesem Plugin erstellt,
damit du dir eventuell einen Reim auf die noch existierenden Fehler machen kannst.
Klick einfach die Events im Spiel an, die sagen was los ist.

http://www.share-online.biz/dl/DW078PZLUA

DNKpp
20.02.2012, 17:06
ich will damit sagen, das ich da erstmal nichts machen kann, da der bug in cherrys dll steckt und nicht in meinem plugin.
ich werde nicht drüber hinwegsehen, deswegen gibts auch erst mal keine neue version, bis das nicht richtig funktioniert.

DNKpp
22.02.2012, 05:46
sollte kein problem dar stellen

Cherry
22.02.2012, 14:43
Wegen der Bugs: Ich hatte leider noch keine Zeit, mir das anzuschauen, tut mir Leid. Mach ich aber bald.

BDraw
23.02.2012, 12:00
Kleine, unverschämte Anfrage:
Wäre es möglich, es so zu gestalten, dass das Plugin nur die ersten X Bewegungen (X=Zahl in einer Variable) ausführt, anstatt den ganzen Weg zurückzulegen? Wie gesagt, wenn es großartige Umstände bereitet, einfach ignorieren, das Plugin selbst ist schon absolut spitze. (:

Ahja, und ist das Plugin zufällig mit Proceed with Movement kompatibel? Sprich, dass es erst dann weitergeht, wenn die jeweilige Figur fertig mit ihrem Weg ist?

DNKpp
23.02.2012, 19:11
erm, wäre sicherlich möglich, da eine variabel zu übergeben.

eine "proceed with movement" funktion wird kommen (also das der code danach erst ausgeführt wird, wenn das event die ziel koordinate erreicht hat).

bin für weitere anregungen offen :P

BDraw
23.02.2012, 19:37
Das wäre super. Damit wäre das Plugin nämlich absolut perfekt für Strategiekampfsysteme. :D

DNKpp
23.02.2012, 20:23
ich veröffentliche aber erst was neues, wenn cherry diesen gravierenden bug gefixt hat, davor hat das nämlich keinen sinn^^

DNKpp
26.02.2012, 22:52
SOOO,

mal was neues von der Front :)
der Bug mit den Parrallel Process ist leider immer noch existent (wie gesagt, liegt am SDK, nicht an meinem PlugIn), aber ich habe mal ein paar User Wünsche umgesetzt.
Als allererstes ist der Bug gefixt, das man keine Event ID angeben konnte (lag wie gesagt intern daran das ich einen falschen Parameter ausgelesen habe *schäm*).
2. Habe ich die Befehle umbenannt. Aus "CalcPath" wurde nun "FindPath". Dazu ein wenig die Parameter optimiert, und ich bin zu dem entschluss gekommen, wenn man bei nicht erreichen des Endpunkts den nächsten Punkt nutzen möchte, dies gefälligst über einen eigenen Comment machen soll, so ist jetzt "FindPathOrNearestSpot" entstanden.
2 Neue Parameter dürfen wir nun trotzdem begrüßen. Einmal den "MaxTilesToMove" Paramter, der angibt, um wie viele Tiles sich maximal bewegt werden soll.
Zum zweiten haben wir einen "Success" Paramter, der eine ID eines switches enthalten soll. Auf diesen Switch wird dann zurück gegeben, ob die Pfadsuche Erfolgreich war, oder nicht (0 für nicht, 1 für erfolgreich).

Lest euch nochmal die kleine Doku im ersten Post durch, ist ein wenig genauer.
Wenn ihr weitere Anregungen habt, nur her damit. Mit dem etwas größeren Bug muss ich Cherry nochmal anhauen :)

mfg

PS: Für die Neue Version benutzt DIESEN DOWNLOAD ---> 12542 <---
Sobald Cherry das auf seiner Page geändert hat, sagt er oder ich euch bescheid.

Oktorok3
27.02.2012, 18:29
Das ist schon mal sehr gut, dass du den Pathfinder weiter optimiert hast und neue Funktionen mit dabei sind!
Freut mich!
Ich hätte auch direkt noch eine Anregung,
und zwar wäre es außerdem eine äußerst nützliche Angelegenheit, wenn man zusätzlich noch manuell abfragen kann, ob ein Hindernis im Weg ist, um z.B. in diesem Fall das Ereignis daran zu hindern weiter zu laufen (Damit man es etwa in eine Bedingung einbauen kann z.B. if switch XY on(der dann angehen sollte, wenn das Event geblockt ist))

DNKpp
27.02.2012, 18:45
bitte was?
irgendwie verstehe ich da grade nicht so wirklich den sinn, oder ich verstehe nicht genau was du möchtest.
du möchtest also, dass das event nicht weiter läuft, wenn ein hinderniss auftritt?

Oktorok3
27.02.2012, 18:57
Nein, es soll das Ereignis zwar standartmäßig umgehen, aber man manuell abfragen kann, ob ein Hindernis im Weg ist.
Kleines Beispiel:
Ein dummes Tier will giftige Kräuter fressen und sucht seinen Weg dahin.
Der Held muss das Tier davon abhalten, indem er ihm so lange den Weg versperrt, oder Hindernisse in den Weg schiebt, bis das Tier z.B. beim dritten Hindernis aufgibt.

Also in diesem Fall müsste man die Aufhalt-Versuche zählen können und das Tier per Bedingung zum stehen bringen (wenn Variable "Blockversuche" auf 3)

DNKpp
27.02.2012, 18:59
aha?
ich werd mal schauen.

Oktorok3
27.02.2012, 19:00
Sehr gut!

Cazic
11.03.2012, 05:58
Holy shitballs, wie lange hab ich auf sowas gewartet...:o

Wenn ich Zeit hab werde ich es mir mal genauer ansehen und testen.

Cherry
01.04.2012, 14:10
Aktualisiert auf der Page.

Sorry, hatte noch immer keine Zeit etwas and DynRPG zu tun...

Fuxfell
05.04.2012, 23:47
Geniale Sache :A
Habs mal in das Rohgerüst meines Taktik KS eingebunden und funktioniert bisher einwandfrei :)
Hast mir auf jeden Fall den Löwenanteil der Arbeit hiermit erspart :D
Mehr von diesen genialen Plug-Ins bitte :P

DNKpp
07.04.2012, 13:39
schön das ich damit leute glücklich machen konnte :)
wobei mir selbst aufgefallen ist, dass der algorythmus nicht immer den kürzesten weg findet (liegt ein wenig an der implementierung), muss ich mir nochmal ein wenig angucken (wenn es nicht zu verwinkelt wird, findet er den kürzesten, ist nur ein spezialfall, wo er es nicht tut). ansonsten hat cherry immer noch keine lösung für das problem mit "SetEventPlace", bzw mit dem überspringen von einer EventCodeZeile gefixt, weswegen man den patch im moment immer noch nur über die CommentBefehle nutzen sollte.

mfg

Fuxfell
07.04.2012, 14:46
Kann es sein, dass Events jeglicher Art (d.h. egal ob Above Hero oder Below Hero) als unpassierbares Hindernis gesehen werden?

Habe eben versucht deinen Patch hier mit der Anzeige von Kazesui (http://rpgmaker.net/tutorials/527/) zu kombinieren,
und bei Kazesuis Methode werden um das Event das sich bewegen soll viele Events gesetzt, die die Reichweite visualisieren.
Jetzt stecken meine Helden und Monster aber in der Bewegung fest ;)

Kannst du daran ohne viel Aufwand noch was drehen? Also dass wenn ein Event das als Above Hero bzw. Same Layer as Hero
eingestellt ist sich über Below Hero - Events hinweg bewegen kann?

Cherry
07.04.2012, 22:15
Vielleicht ist Forbid Event Overlap aktiviert (oder nicht aktiviert - ich weiß gerade nicht wie rum das funktioniert hat)? Schau mal ob du mit Move Event das Event dorthin bewegen könntest (über das below hero event hinweg). Die isMovePossible-Funktion von DynRPG (welche hier verwendet wird) callt nur die interne Funktion des Makers (die er auch bei Move Event verwendet).

Fuxfell
08.04.2012, 00:16
Habs eben probiert und Forbid Event Overlap ist nicht aktiviert und mit nem normalen Movebefehl kann
ich das Monster auch auf die Events laufen lassen.
Wenn Forbid Event Overlap aktiviert ist versagen auch die Movebefehle (so solls ja sein :D) und der
Pathfindingbefehl geht trotzdem nicht.

Ist jetzt aber nicht weiter tragisch, da ichs wie gesagt nur zum Anzeigen der möglichen Reichweite
benutze und dann (so die Lösung im Moment) die Felder lösche und das Monster bewege.
Oder ich spar mir die Reichweitenanzeige ganz und der Spieler sieht dann schon, wo das Monster
hinläuft :D

Cherry
08.04.2012, 07:50
Das ist dann strange, denn wie gesagt wird nur die makerinterne Bewegung-möglich?-Funktion aufgerufen... Weiß ich jetzt im Moment auch nicht weiter.

MarcL
17.07.2012, 18:56
Tolles Plugin! ^^

der Rest den ich geschrieben hab war aber Quatsch :P

Fuxfell
18.08.2012, 21:36
Bastel hier gerade wieder munter rum und bin, glaube ich zumindest, auf einen Bug gestoßen.

Ich rufe eine Event Seite per Call Event Befehl auf und die Seite führt anschließend folgenden Befehl aus:


Halt All Movement
@FindPathOrNearestSpot V21, V99, V100, 4, 6, 6, V183
Proceed with Movement
Switch 22 On

Laufen tut er zwar zur richtigen Stelle, aber es wird danach gar kein Code mehr ausgeführt!
Also der Switch wird nicht angeschalten, oder wenn ich da nen Sound abspielen lassen will bleibt der
auch aus.
Wenn ich die Halt All Movement-Befehle weglasse gehts, aber dann müsste ich mir ausrechnen wie weit
der Weg ist und wie lang ich warten muss um dann sinnvoll was zu machen.
Weiß aber nichtmal wie lange die Makerschritte bei welcher Frequenz dauern x.x

Hast ja weiter oben geschrieben, dass die proceed with movement-Funktion noch kommt und dann ein Update gemacht.
(als Antwort auf BDraws Beitrag)
Ist die jetzt schon implementiert, oder nicht? :)

MarcL
19.08.2012, 16:46
Laufen tut er zwar zur richtigen Stelle, aber es wird danach gar kein Code mehr ausgeführt!
Also der Switch wird nicht angeschalten, oder wenn ich da nen Sound abspielen lassen will bleibt der
auch aus.

Hatte ein ähnliches Problem, wo ich immer noch nicht weiß wann es auftrat....
Auf machen Maps klappte ein Proceed Movement hinter dem Befehl, auf anderen nicht... Wenn es nicht funktioniert hatte, lag es aber (bei mir) denk ich meist an den Proceed Movements in anderen Events...

Bei mir war es z.T. so, dass während das Pathfinding den Event bewegt hat, ein Proceed Movement in einem anderen Event zum Stillstand geführt hat...
Wenn du da waits reinsetzt und es klappt immer noch nicht, müsstest du kucken ob du das proceed nach dem befehl rausnimmst...
da würde ich dann schauen, ob es wirklich nötig ist, dass du wirklich genau die bestimmte zeit brauchst oder ob du einfach grob geschätzt etwas mehr Zeit nimmst als der bewegte event braucht...

Fuxfell
20.08.2012, 19:08
Also das Problem besteht immernoch, hab aber einen kleinen Workaround gebastelt, der zwar funktioniert aber umständlicher ist.

Falls jemand auch das Problem hat, ich habs wie folgt gelöst:
Ein paralleler Prozess, der zuerst die aktuellen Koordinaten des betroffenen Events speichert, dann solange wartet wie ein Schritt
dauert und anschließend die alten mit den neuen Koordinaten vergleicht. Haben sie sich nicht geändert ist das Event stehen geblieben
und man kann weitermachen :)
Wie lange ein Schritt bei welcher Geschwindigkeit dauert findet man im Maker-Detailwissen: Hier (http://www.multimediaxis.de/threads/71-Detail-Wissen-und-Geheimnise-des-RPG-Makers-vorallem-f%C3%BCr-Erfahrene-Profis-lehrreich)
Wie und ob da die Move Frequency mit reinspielt, hab ich keine Ahnung.
Lösung ist natürlich nicht die Beste weil immer "ein Schritt" gewartet wird, auch wenn sich das Event nicht bewegt. Aber bei einem
Startegie-KS fällt die Wartezeit mMn nicht auf.

DNKpp
26.08.2013, 05:50
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?

Cherry
26.08.2013, 12:50
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.

MarcL
26.08.2013, 12:54
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?

Ich nutze es ^^ Das Plugin ist awesomeness pur!! ;D Schon zig mal verwendet in meinen Projekten...
Wünsche hab ich aber keine... Ich dachte, es wäre mal was gewesen, aber jetzt fällts mir nicht mehr ein... scheint wohl nichts wichtiges gewesen zu sein...

goldenroy
26.08.2013, 13:00
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).




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°

DNKpp
26.08.2013, 13:12
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

Quetschi
31.08.2013, 11:03
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.

Cherry
31.08.2013, 17:43
Was passiert wenn du zwischen die beiden Kommentare noch ein Wait 0.0 machst?

Quetschi
31.08.2013, 18:49
Der 0.0 Wait bringt nichts. Selbes Verhalten.

Hier der Eventcode:


- 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

MarcL
31.08.2013, 19:36
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.

Helft mir mal, ich verstehe das nicht... Was macht "@WaitUntilMove hero"? Was für ein Plugin ist das? Was versuchst du damit zu erreichen? Ist das dasselbe wie ein Proceed Movement?

Quetschi
31.08.2013, 20:06
Es geht um das Pathfinding-Plugin. Und "@WaitUntilMove hero" wird auch im Beispielprojekt verwendet. (in Common Event 1 glaub ich).
Ich nehme an es soll halt warten bis ein spezielles Event bzw. in dem Fall der Hero seinen Weg zurück gelegt hat. Also ja etwas ähnliches wie Proceed With Movement.
Steht aber komischerweise nicht in der readme, wie mir gerade auffällt. oO

Cherry
31.08.2013, 20:08
Ah stimmt. Ich glaube das hat nicht ordentlich funktioniert weil DynRPG da noch Bugs hat, drum wurde es nicht dokumentiert.

DNKpp
01.09.2013, 00:17
Yep. Ich schau mal, was sich machen lässt. Will ja eh bald ne neue Version raus bringen ;)

MarcL
09.03.2014, 12:01
hallöchen :)

Ich hab da mal ne Frage ^^;
Ich versuche gerade einen Pathfindingbefehl zu erstellen, bei dem der Erfolg der Pfadfindung in einer Variable gespeichert wird, ich denke dazu ist ja dieser "Erfolg" Parameter da oder?

19916

Es klappt leider nicht... iwas hab ich wohl falsch gemacht oder? (die 15 könnte auch this sein)
Der Event findet den Weg und läuft auch den Weg, aber die Variable bleibt 0, obwohl sie doch (kurzzeitig?) auf 1 stehen müsste? Oder ist die Variable nur während des Laufens auf 1? Da kein Proceed Movement drin ist, müsste er es dann aber doch im Beispiel auch mitbekommen...

Helft mir T^T und danke im voraus :)

Cherry
10.03.2014, 15:54
mach das "V" bei "V768" weg. Das V bewirkt dass der Inhalt der Variable an das Plugin gesendet wird (hier wahrscheinlich 0). Du willst dem Plugin aber die ID der Variable sagen, also 768, damit es weiß wohin es die Erfolgsinfo speichern soll.

MarcL
10.03.2014, 16:49
mach das "V" bei "V768" weg. Das V bewirkt dass der Inhalt der Variable an das Plugin gesendet wird (hier wahrscheinlich 0). Du willst dem Plugin aber die ID der Variable sagen, also 768, damit es weiß wohin es die Erfolgsinfo speichern soll.

Oh stimmt... hab ich falsch gemacht oO; aber funktionieren tut es jetzt trotzdem nicht... Hat jemand anderes die Funktion schon mal erfolgreich getestet? ^^;

Cazic
26.06.2014, 14:36
Wird an dem Plugin noch gearbeitet? Wäre schade darum, wenn das nicht der Fall wäre. Vor allem die oben beschriebene @WaitUntilMove-Funktion wäre für ein taktisches Kampfsystem unverzichtbar, denke ich.

Fuxfell
26.06.2014, 21:55
@Cazic

Vor allem die oben beschriebene @WaitUntilMove-Funktion wäre für ein taktisches Kampfsystem unverzichtbar, denke ich.
Dafür hab ich auf dieser Seite bereits einen simplen Workaround gepostet, ich zitiere mich ganz dreist einfach nochmal:

Ein paralleler Prozess, der zuerst die aktuellen Koordinaten des betroffenen Events speichert, dann solange wartet wie ein Schritt
dauert und anschließend die alten mit den neuen Koordinaten vergleicht. Haben sie sich nicht geändert ist das Event stehen geblieben
und man kann weitermachen
Wie lange ein Schritt bei welcher Geschwindigkeit dauert findet man im Maker-Detailwissen: Hier
Wie und ob da die Move Frequency mit reinspielt, hab ich keine Ahnung.
Lösung ist natürlich nicht die Beste weil immer "ein Schritt" gewartet wird, auch wenn sich das Event nicht bewegt. Aber bei einem
Startegie-KS fällt die Wartezeit mMn nicht auf.

Man kann das Plugin also schon so super für ein Taktik-KS verwenden ;)

Cazic
27.06.2014, 02:21
Ah, hab Deinen Post zuerst falsch interpretiert. Ich dachte, der Workaround funktioniert nur, wenn das Event immer den maximalen Weg bis zum Ziel zurücklegt. Aber Du prüfst ja auch nach jedem Schritt, ob das Event stehen geblieben ist.

Edit: Funktioniert einwandfrei, danke.

Cazic
28.06.2014, 14:45
Noch was anderes: hab ich hier irgendwo den Wurm drin, oder kann es sein, dass "MaximaleEntfernung" immer ein Tile mehr zurücklegt als angegeben? Ich habe in der Variable 10 angegeben, aber ich zähle immer 11 Tiles (selbiges bei anderen Zahlen, immer +1).

Der Workaround von Fuxfell scheint leider auch an seine Grenzen zu stoßen, wenn es sich nur um 1er Schritte handelt. Ich habe ein Event mit den folgenden Funktionen:

1) Nachricht anzeigen, wenn der Weg zurückgelegt wurde (Char stoppt) - funktioniert immer
2) Nach jedem Schritt die Bewegungspunkte -1 und Anzeige aktualisieren

Punkt 2) scheint nicht zu funktionieren, wenn man sich nur 1 Schritt bewegt, erst ab 2 oder mehr Schritten (evtl. ein Zusammenhang mit dem Problem von MaximaleEntfernung oben?).