Ich würde gerne für eine gegner KI, die entfernung von einem event mit 2 anderen berechnen lassen. Der Gegner soll erkennen, welches event (von den 2en) näher bei ihm ist (und dann dort hingehen... etc)
Ich meine ich habe da eine Idee ( Pytagoras, schreibt man den so ? ) aber es gibt bestimmt ne profi lösung !
Natürlich gibts im Voraus schon mal ein fettes Lob: §schleim
Hier mal mein Lösungsvorschlag xD...
Kommentare sind nur spärlich gesetzt ^^"
Auf Wunsch send ich dir das Script auch gern zu ^^ - vielleicht gibbet aber auch ne einfachere Lösung, aber ich wollt unbedingt das Schräglaufen des Gegners einbauen. Ich hoffe die Mühe war net umsonst :).
~RB~
Edit: Erklärung (jedenfalls der Versuch)
Diese Fork dient lediglich dazu, zu überprüfen, ob die beiden Gegner schon "erledigt" sind. Die Anzahl der
getöteten Gegner wird (wie wir ja später sehen werden - oder jetzt schon sehen, in Variable 0031 gespeichert). Ist die Fork
erfüllt, so wird das Skript beendet.
Speichern wir zunächst die X- und Y-Positionen des Gegners und von Ziel1 & 2 (Gegner, Ziel1 und Ziel2 sind die
Namens der Events)
Jetzt müssen wir den Abstand von Ziel1 und Ziel2 zum Gegner berechnen. Da dort allerdings auch negative Werte
herauskommen können, (Beispiel: X-Positon Gegner = 10, X-Position Ziel1 = 14, d. h. 10 - 14 = -4) fügen wir noch ein paar
Forks ein, um dies zu verhindern.
Das ganze wiederholt sich für die Y-Position und dann nochmal für die X- und Y-Position von Ziel2. (siehe Code)
Nachdem wir nun all die schönen Forks gebastelt haben (und die verdammten Schusseligkeitsfehler entfernt sind *grml*), gehts
nun weiter... Wir fassen nun den gesamten Abstand (in Kästchen) vom Gegner zu Ziel1 bzw. Ziel2 zusammen.
Jop, jetzt haben wir ja schon die Werte für den Abstand! Juhu! - Nur noch bestimmen, wo der Gegner hinrennen
soll... also wieder ne kleine Fork gebastelt, welcher Abstand denn nun größer ist.
Nun gut, wir wissen nun, welches Ziel angegriffen werden soll... und wir wissen wie weit es wegsteht, auch gut :)
- Nur können wir mit dem Abstand allein nicht viel anfangen. Wir müssen diesmal auch die Negativwerte kennen, das erledigen
wir ganz fix mit ein wenig Code.
So, Abstand berechnet. Fangen wir an, die Richtung zu bestimmen in die der Gegner rennen soll. FORK folgt...
wieder mal. In Variable 0019 [MoveCode] sichern wir einen Wert, dieser bestimmt in welche Richtung der Gegner gehen soll. da
er auch schräg rennen soll, besteht der Wert aus 2 Werten. Einmal für X-Pos (1, 3 oder 7) und einmal für die Y-Pos (15, 31
oder 63). Diese werden addiert und ergeben den entgültigen "MoveCode".
Werte X: Werte Y:
1 = Gegner links vom Ziel 15 = Gegner über Ziel
3 = Gegner auf gleicher X-Pos wie Ziel 31 = Gegner auf gleicher Y-Pos wie Ziel
7 = Gegner rechts vom Ziel 63 = Gegner unter Ziel
Beispiele:
1 und 63 = 64, d.h. Schritt nach links-unten
3 und 15 = 18, d.h. Schritt hoch
7 und 31 = 32, d.h. Schritt rechts
Der Wert 34 wird NIE entstehen, der Gegner müsste "im" Ziel stehen.
*Puh*... wat'n Absatz, ne...
So, nun einfach die Werte für die Richtungen einfach per FORK vergleichen...
Folgende Werte sind möglich:
16 = links-oben
32 = links
64 = links-unten
18 = hoch
34 = geht nicht ;) - wie schon gesagt
38 = rechts
22 = rechts-hoch
66 = runter
70 = rechts-unten (brauchen wir nicht abfragen, da letzte Möglichkeit -> kommt in letzten ELSE-Case)
Nun wieder der ellenlange Code...
Dat wär auch erledigt... Code für Angriff folgt sofort... *gäääähhhn*
That's it... *uff* - Und ja - mir war langweilig... :O
~RB~
--
Arbeiten an den Projekten gecancelt! (DP, Fading, KPConfig...)
Geändert von RB [Redbounty] (18.09.2003 um 22:36 Uhr)
Das ist eine Möglichkeit, die kürzeste Laufstrecke (durch horizontal/vertikales Gehen) auszurechnen.
Wenn du allerdings die direkte Entfernung errechnen willst (Luftlinie), dann machs so wie ichs in diesem Thread mal beschrieben habe, besonders wenn der Gegner auch schräg gehen soll halte ich dies für besser: http://forum.rpg-ring.com/forum/show...?threadid=1607
(ist dann auch mit Pythagoras)
Da wird aber nur beschrieben wie du die Entfernugn rauskriegst. Die Überprüfung, wer jetzt näher ist usw. müsstest du weiterhin dem Skript von Redbounty entnehmen. ("c²" entspräche dann "Abstand1Total" bzw. "Abstand2Total")
BTW @ Redi
Negative Werte lassen sich doch einfach durch ne Fork "kleiner als 0" und ein "mal -1" verhindern. @_@
und:
Da sind noch n paar Schusseligkeitsfehler.^^"
@Geki: Man lernt halt nie aus - Ich lass das Ganze trotzdem mal so stehen, da Balduras ja schon die benötigten "Anregungen" bekommen hat, um ein eigenes Skript zu "schreiben". Und *arghs*, die verdammten Schusseligkeitsfehler werd ich wohl nie ganz wegbekommen ^^"
~RB~
--
Arbeiten an den Projekten gecancelt! (DP, Fading, KPConfig...)