Banner left   Banner center   Banner right

Germanenglish Home · News · Diary · Screenshots · Documentation (Wiki) · Downloads · Guestbook · Forum

Home · Benutzer registrieren · Suchen · Statistik · FAQ · Benutzerliste

Zur Zeit online: keiner ausser dir

 X-Force - Fight For Destiny - Forum —› Spieler helfen Spielern —› Ufo-Flugrichtung ändern

Autor Mitteilung
verfasst am: 06.10.2010, 12:46
Registrierdatum: 31.01.2010, 20:05

 Beiträge: 122
Wie kann ich den Kurs eines UFOs vorgeben? Muß ich mit EVENT_ONCOMMANDCOMPLETE arbeiten oder gibt es eine andere Möglichkeit. Dazu ein Erklärungsbeispiel:
Ufo.FlyToPoint(A) // Basis schießt 
Ufo.FlyToPoint(B)  // Ausweichpunkt
Ufo.FlyToPoint(A) // wieder ursprüngliches Ziel


Sinn der Sache: ich möchte das Ufo (...HitByBase) um eine schießende Basis herumlenken, also ein Ausweichmanöver durchführen.

Ein DanK an allen Antworter
verfasst am: 06.10.2010, 15:44
Programming

Registrierdatum: 01.07.2008, 07:53

 Beiträge: 109
Greeting
Simplest:
program YourName;
var
  UFO:TUFO;
  step:integer;
  path_x,path_y:array of double;
  
procedure evade(Sender:TObject);
begin
  UFO.FlyToPoint(floatpoint(path_x[step-1],path_y[step-1]));
end;

procedure nextstep(Sender:TObject);
begin
step:=step+1;
if (step<getarraylength(path_x))and (step<getarraylength(path_x)) then
  begin
    UFO.FlyToPoint(floatpoint(path_x[step],path_y[step]));
  end
  else
   UFO.Escape;
end;

procedure StartMission;
begin
   path_x:=[24,2,55,57,98];
   path_y:=[45,47,67,56,56];
   step:=0;
   UFO:=ufo_api_createUFO;
   register_mission_object(UFO);
   UFO.FlyToPoint(floatpoint(path_x[step],path_y[step]));
   register_event(@nextstep,UFO,EVENT_ONUFOCOMMANDCOMPLETE);
   register_event(@evade,UFO,EVENT_ONUFOHITBYBASE);
end;

begin
  MissionName := 'YourName';
  MissionType := mzObjects;
end.

In path_x and path_y write array of coordinates.
Will fly through points in path, then escape. If hit, then return to last point and try to continue flight.

Please take look at UFOAI scripts and GEN90path at XForce Sourceforge

Sorry for English

Best regards
verfasst am: 06.10.2010, 19:29
Registrierdatum: 31.01.2010, 20:05

 Beiträge: 122
Dear gnfalex,
thank you for the script, but I want to know, if there is another way to command UFOs without the "ComandComplete"-Event. I hope that your script-example may be not the only way, because I dont like events.

Greeting from
Alter Knacker
verfasst am: 07.10.2010, 00:50 · Edited by: Natter
Programmierer, allgemeines

Registrierdatum: 06.06.2004, 17:19

 Beiträge: 3186
Wie willst du denn ohne Events auf ein Ereignis (z.B. Beschuss durch Basis oder UFO am Punkt B angelangt) reagieren? Du könntest natürlich auch eine Zeitsteuerung benutzen (was aber vorraussetzt, das du genau weißt, wann was passieren soll) - aber selbst dann bräuchtest du einen Timer (letztlich auch ein Event).
verfasst am: 07.10.2010, 12:21
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beiträge: 5596
Im Prinzip funktionieren die UFO-Steuerungen so, dass man einen Zielpunkt vorgibt der dann direkt angeflogen wird. Es gibt keinen Befehl für einen Kreisflug oder ähnliches.

Um einen Kurs vorzugeben musst Du also im Endeffekt mehrere Punkte einer Flugbahn definieren, die dann der Reihe nach angeflogen werden. Und bei dieser Vorgehensweise ist das "COMMMANDCOMPLETE" die Meldung, das der zuletzt als Ziel gesetzte Punkt erreicht worden ist.

Wenn das UFO auf irgendetwas während der Flugbahn reagieren soll, dann müssen dies Ereignisse sein - und wenn es zeitgesteuerte Ereignisse sind, bei denen das Skript die aktuelle Situation prüft.
Wenn eine solche Reaktion dem UFO einen anderen Befehl gibt, dann muss natürlich auch das Ergebnis des anderen Befehls im Complete-Ereignis überprüft werden.
verfasst am: 07.10.2010, 21:45
Registrierdatum: 31.01.2010, 20:05

 Beiträge: 122
Ich verstehe das ja alles, aber sehr gerne übergebe ich den Prozeduren und Funktionen die Variablen, mit denen sie arbeiten sollen. Bei den Events fühle ich micht eingeengt, oder kann man mehr als "Sender" übergeben? Globale Variablen sind zwar eine Lösung, aber meiner Meinung nach eine Krücke, um Funktionen und Prozeduren am Laufen zu halten. Auch mußte ich einige Event-gesteuerte Funktionen in anderen Programmteilen unterbringen, da der sie auslösende Event nicht auslöste, obwohl die Meldung dazu ausgegeben wurde. Vielleicht ist so etwas ja der Hinweis auf einen Programmierfehler!?
verfasst am: 08.10.2010, 03:31
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beiträge: 5596
Aktuell werden bereits vorgefertigte Routinen benutzt, um die Kurse der geskripteten UFOs vereinfacht festzulegen. Nur ist das noch nicht dokumentiert und wählt zufällig einen von wenigen vorgegebenen Kursen aus.

Hol Dir die scripts.pak - Vorlagen aus dem SVN und schau Dir die units an - dann kannst Du relativ einfach feststellen, wie der Kurs ausgewählt wird und Deine eigene Kette von Koordinaten an das UFO übergeben.

Für eine Kreisbahn sollte eine einzige Koordinatenkette reichen, wenn die Koordinaten relativ zum Kreismittelpunkt angegeben werden. Dann fliegt das UFO bei Koordinaten in Pol-Nähe zwar einen ziemlich schiefen Kreis, aber solange die Kreisbahn etwas abstand von den Polen hat sollte das klappen...



Dieses Thema ist geschlossen. Es sind keine weiteren Antworten möglich.

Ladezeit (sec.): 0.005 · Powered by miniBB 1.6 with parts of 1.7 © 2001-2003