Ich bin ja ein Fan von überkomplizierten Skripts, auch wenn zB Tracking-Plugins eventuell nützlicher wären, wenn für den Fall vielleicht auch nicht unbedingt notwendig. Lösungen zu finden macht ja auch tierisch Laune
Du meinst wahrscheinlich eher "If NPCs Moves". Stimmt, das gibt es nicht. Es gibt aber Methoden um das selbe Ergebnis zu erzielen. Es ist nur ein theoretischer Ansatz:Zitat
Zuerst einmal muss dein Skript wissen, wann sich der NPC/Wache fortbewegt, damit er nicht anspringt wenn es nicht nötig ist und die Figur falsch zurück läuft. Verwende dazu am besten jeweils 2 Variablen für die X- und Y-Position und presse sie in einen parallelen Prozess:
<> Position Wache X Alt --> Set Pos Wache X
<> Position Wache Y Alt --> Set Pos Wache Y
<> Wait 0.1 sek
<> Position Wache X Neu --> Set Pos Wache X
<> Position Wache Y Neu --> Set Pos Wache Y
Danach fragst du ab, ob die jeweiligen X-Positionen und Y-Positionen sich verändert haben. Wenn ja, sollte dein Counter anspringen.
Wie groß der Wait Befehl im obig aufgeführten Prozess ist, hängt maßgebend von der Geschwindigkeit deines NPCs ab. Vielleicht kennt jemand die Geschwindigkeiten aus dem Kopf und kann sie angeben (das wäre praktisch), wenn nicht musst du herumprobieren. Setze einfach zur Kontrolle eine Messagebox, die immer anspringt nachdem sich die Wache bewegte. Denke auch daran: "Wait 0.0" ist nicht wirklich Null, sondern ein superkurzerer Zeitabschnitt (weiß noch jemand wie lang ein 0.0 ist?). Du kannst damit also auch Feinabstimmungen für die Wartezeit festlegen.
Wenn deine Kontroll-Messagebox also immer anspringt wenn sich die Wache bewegte, kann dein Counter aktiviert werden. Natürlich sollte er immer dann zählen, wenn eben auch diese Messagebox eingeblendet wurde. Und da du sogar schon die Positionen ALT und NEU gespeichert hast, ist es relativ simpel die Bewegung dazwischen auszulesen und in einer Variable zu speichern.
Ich persönlich würde hierbei sehr viele Variablen verwenden, je nachdem wie groß das Gebiet ist in der deine Wache herumrennen kann. Spontan gehe ich einfach von 20 Variablen (20 Bewegungen) aus, die du dir in der Variablenliste reservierst. Die erste Bewegung, die deine Wache tätigte (aus der Differenz von ALT und NEU), speicherst du hierbei in der LETZTEN Bewegungs-Variable ab, aber umgekehrt zu seiner eigentlichen Bewegung. Die Zählung ist natürlich dir überlassen, aber aus Kontinuitätsgründen würde ich die gängige Wertverteilung nehmen:
1=Unten, 2=Links, 3=Rechts, 4=Oben. Wie gesagt, einfach die entgegengesetzte Bewegung abspeichern. Aus 1 wird 4, aus 2 wird 3, usw.
Sobald die Wache einen bestimmten "Streifen" erreicht hat, wo er nicht weiter möchte (zB auch über X/Y-Werte) und lieber zurückkehren würde, kannst du die Mitzählung der Bewegungen deaktivieren.
Diese Bewegungen musst du abschließend nur noch mit Move-Events "Abspielen" (von Vorne nach Hinten). Es kann natürlich vorkommen, dass deine ersten Variablen nicht belegt sind (Gleich 0). Diese Moves musst du lediglich überspringen, bis dein Skript eine Variable mit einem Wert über 0 findet.
Und wenn deine Wache zurückgekehrt ist, natürlich nicht vergessen alle Move-Variablen wieder auf 0 zu setzen und den Positionsprüfer (X/Y) zu aktivieren.
Mit dieser Methode sollte es eigentlich klappen.
[MG]







Zitieren
