Admin, Spielsatz GalWar
Registrierdatum: 31.08.2005, 21:51
Beiträge: 5596
|
Ab der 0.915 (wahrscheinlich ab der Beta1, noch nicht in der Alpha5) werden alle internen UFOAI-Skripte um zwei Prozeduren für den externen Aufruf erweitert sein.
Diese beiden Prozeduren sind:
procedure ACCLastDestination(Dest:TFloatpoint;now:boolean;funct:string;mission:T Mission);
procedure ACCClearDestination;
Funktion:
Überlagerung des jeweiligen Skriptes mit der Anweisung, eine bestimmte Position anzufliegen und dann alle Funktionen abzuschalten, bis man den gegenteiligen Befehl gibt. Dies bedeutet insbesondere, das das UFO auch nicht mehr auf Angriffe reagiert etc, aber man kann alternative Reaktionen programmieren.
Anwendung:
1.) UFO ermitteln
Man bestimmt in einem eigenen Skript das UFO, dessen Kontrolle man übernehmen will. Dies kann dadurch geschehen das man das UFO in diesem Skript erzeugt,
das man es über die ufo_api-Befehle heraussucht oder selber über externe Abfragen aus einem anderen Skript herausholt.
2.) Befehlsaufruf ACCLastDestination
Sobald man das gewünschte UFO kennt, kann man über seine AI-Mission den Proceduraufruf starten. Dies geschieht z.B. über folgende Befehlszeile:
UFO.AIMission.CallProcedure('ACCLastDestination',[Destination,now,retu rnfunction,returnmission]);
Die vier Werte in [] sind dabei die zu übergebenden Variablen und haben folgende Bedeutung:
Destination:TFloatPoint ist der Punkt auf dem geoscape, den das UFO anfliegen soll.
now:Boolean entscheidet, ob das Kommando sofort (true) gegeben werden soll, oder auf einen Zeitpunkt eine Stunde vor Ablauf des UFO.Hoursalive programmiert werden soll (false)
returnfunction:string ist der Name der Rückgabe-Funktion. Wird hier ein '' eingegeben, dann wird es keine Rückmeldung geben.
returnmission:TMission ist das Objekt des Missionsskriptes, in dem sich die Rückgabefunktion befindet. Wenn dieses Skript nicht gestartet ist, dann wird es auch keine Rückmeldung geben.
Die Rückgabemeldung ist optional. Wenn es sie gibt, dann wird sie von dem UFOAI-Skript in dem Moment aufgerufen, wenn das UFO die Destination erreicht hat und stehen bleibt.
Dieser Aufruf erfolgt als
ReturnMission.CallProcedure(Returnfunction,[UFO]);
Üblicherweise wird die Mission des eigenen Skriptes (das den ACCLastDestination sendet) angegeben, und der Name einer passenden Funktion innerhalb dieses Skriptes.
Diese Rückgabefunktion muss eine Variable UFO:TUFO annehmen können, z.B.
procedure ReachedDestination(UFO:TUFO);
3.) Ablauf des UFOAI-Skriptes
Irgendwann (sofort oder kurz vor Lebensende) wird das UFO den Befehl kriegen, zu der angegebenen Position zu fliegen.
In dieser Zeit werden alle sonstigen Reaktionen blockiert, d.h. insbesondere wird auch das Geschützfeuer von Basen ignoriert (auch wenn die Zielposition direkt im Feuerbereich einer Spielerbasis liegt).
Wird es abgeschossen oder sonstwie vom Geoscape entfernt, bevor es diese Position erreicht, dann passiert nichts weiter.
Wenn das UFO dagegen die Position erreicht, dann sendet das Skript die Rückgabemeldung und macht danach gar nichts mehr.
4.) Übernahme der Steuerfunktion oder sonstiger Berechnungen
Das in ReturnMission angegebene Skript erhält jetzt über die Returnfunction die aktuellen Daten des UFOs und natürlich indirekt die Bestätigung, dass es an dieser Position eingetroffen ist.
Es kann jetzt natürlich eigene Befehle auf das UFO programmieren, das AI-Skript austauschen oder beliebige andere Sachen machen.
5.) Optional: UFO-Freigabe
Falls das Skript in 4 nicht ausgetauscht wird und das UFO auch nicht zerstört wird, dann kann man zu einem beliebigen späteren Zeitpunkt die originale UFO-AI wieder freigeben.
Dies geschieht über einen Befehlsaufruf
UFO.AIMission.CallProcedure('ACCClearDestination',[]);
Dieser Befehl hebt die Event-Blockade im ursprünglichen Skript wieder auf und löst ein "ACCCommandComplete" aus, was die alte AI wieder zur Aufnahme des unterbrochenen Originalskriptes bewegen sollte.
Anwendungsgebiete gibt es mehr als genug, ab 0.915Beta werden einige Beispiele im galaktischen Krieg zu sehen sein. |