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 —› X-Skript / Developer-Pack —› LennStars Fragerunde

Seite: << [1] ... [9] [10] 11 [12] [13] [14] [15] [16] [17] [18] >>

Autor Mitteilung
verfasst am: 23.07.2007, 18:07
Spielsatz Darkage

Registrierdatum: 01.03.2005, 13:47

 Beiträge: 1846
Zitat: DirkF
Diese angefragte Zeile befindet sich nirgendwo in dem gezeigten Skript oben.

Natürlich nicht, ich hab ja gefragt, ob ich das brauch.
z.B. 4: UFO.KISTep:= 6; müsste doch ein Kommando rein, sonst wird case 4 abgefragt und CommandComplete ist fertig und das UFO macht nichts mehr.
Damit die 6 dann abgefragt werden kann, braucht es einen erneuten Durchlauf von CC, also ein beendetes Kommando.


Was meinst du mit "ungewöhnliche Verteilung in der Zahlenlogik"? Falls du Verbesserungen in der Anordnung hast, heraus damit, die Bereiche selbst sind z.B. die erwähnte "Kosmetik", die werde ich noch etwas erweitern.
verfasst am: 23.07.2007, 18:40 · Edited by: Natter
Programmierer, allgemeines

Registrierdatum: 06.06.2004, 17:19

 Beiträge: 3186
Zitat: LennStar
Damit die 6 dann abgefragt werden kann, braucht es einen erneuten Durchlauf von CC, also ein beendetes Kommando.

Wäre es nicht besser, für diesen Zweck das komplette case-Konstukt in eine While-Schleife zupacken? Hier mal ein Beispiel (hoffe, das stimmt so ungefähr):

while true do
begin
  case UFO.KIstep of
          <4:
             begin
              UFO.KIStep:=UFO.KIStep+1;
              UFO.FlyToPoint(PositionNear(UFO.position,20));
             end;
           4: UFO.KISTep:= 6;
           5: UFO.KIStep:= UFO.KIStep-Flugzahl1;
           6: begin
                if (Landezahl>0 and earth_api_PointOverLand(UFO.Position)=true) then
                  begin
                    Zwischenlandung(UFO);
                    UFO:KIStep:= 15;
                    Landezahl:= Landezahl-1;
                    break;
                  end;
                  else UFO:KIStep:= 3;
  >6 and <14:
              begin
                  UFO.KIStep:=UFO.KIStep+1;
                  UFO.FlyToPoint(PositionNear(UFO.position,20));
                break;
              end;
          14: UFO:KISTep:= 20;
          15:
              begin
                UFO.KIStep:= UFO.KIStep-Flugzahl2-1;
              end;
    16,17,18:
              begin
                UFO.KIStep:=UFO.KIStep+1;
                UFO.FlyToPoint(PositionNear(UFO.position,20));
              end;
          19: UFO.escape;
          20: UFO.KIStep:= UFO.KIStep-Flugzahl3-1;
end;



Da ich die Funktion des case-Konstruktes noch nicht ganz verstandfen hab (was verbirgt sich z.B. hinter FlugzahlX), dürften noch einige break-Anweisungen fehlen. Es muss unbedingt darauf geachtet werden, das keine Endlosschleife entsteht.
verfasst am: 23.07.2007, 18:53
Programmierer

Registrierdatum: 23.08.2003, 19:16

 Beiträge: 2261
Zitat: Natter
Wäre es nicht besser, für diesen Zweck das komplette case-Konstukt in eine While-Schleife zupacken?
sehr gefährlich ... Zum Beispiel gibts bei:
         <4:
             begin
              UFO.KIStep:=UFO.KIStep+1;
              UFO.FlyToPoint(PositionNear(UFO.position,20));
             end;



schon das erste Problem. Wenn dann sollte dort auch ein break rein ...

Naja while true ist immer sehr gefährlich, da es sehr schnell in einer endlosschleife enden kann ;)
verfasst am: 23.07.2007, 19:03 · Edited by: Natter
Programmierer, allgemeines

Registrierdatum: 06.06.2004, 17:19

 Beiträge: 3186
Zitat: Jim_Raynor

schon das erste Problem. Wenn dann sollte dort auch ein break rein ...

hehe - ich hab ja gesagt, dass noch einige break-Anweisungen fehlen dürften (hab mir das nicht so genau angesehen). Aber wem das zu riskant ist, dar kann das ganze ja auch andersherum umsetzen: do until, mit einer boolean-Variable die am Anfang der Schleife auf false gesetzt wird, und nur im gewünschten Fall auf true gestellt wird. Dadurch wird die Gefahr einer Endlos-Schleife geringer (andererseits würde eine Endlosschleife doch eh bedeuten, dass irgendwas nicht so klappt wie gewünscht - und dann würde die Endlosschleife helfen, schneller auf den Fehler aufmerksam zu werden).

Wenn man das ganze über einen ständig erneuten Aufruf von ComandComplete erledigt, dann hat man das Problem, dass die gewünschte Anweisung vielleicht erst nach 30 Runden ausgeführt wird (zumindest wenn man das ganze über flytopoint löst).
verfasst am: 23.07.2007, 19:54
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beiträge: 5596
Zitat: LennStar
z.B. 4: UFO.KISTep:= 6; müsste doch ein Kommando rein, sonst wird case 4 abgefragt und CommandComplete ist fertig und das UFO macht nichts mehr.
Damit die 6 dann abgefragt werden kann, braucht es einen erneuten Durchlauf von CC, also ein beendetes Kommando.

Und deshalb muss ich konkret wissen, welcher Zustand denn KIstep=4 sein soll.

Es ist nicht zwangsweise nötig, in jedem KIstep einen neuen Befehl zu geben - aber wenn es keine weiteren Ereignisse mehr gibt, dann wird das UFO dort bis in alle Ewigkeit stehen bleiben.
Diese Ereignisse müssen keineswegs aus dem CommandComplete oder dem KIstep kommen, aber irgendwo müssen sie definiert sein.
Du kannst z.B. Sagen "KIstep=4 ist ein Wache-Status". Das UFO bleibt stehen, bis irgendwann ein Flugzeug oder Transporter in die nähekommt und das Ereignis EVENT_ONUFONEARESTENEMYCHANGED dann einen Jagdbefehl auslöst.
Oder Du kannst sagen das das UFO regelmäßig 30 Minuten Stillstand hat und bei KIstep=4 einen register_timed_event setzen, der das UFO nach 30 Minuten weiterfliegen lässt.

Aber um irgendwie zu sagen was das soll, musst Du uns ersteinmal erzählen welche Ziffer in KIstep für welchen Zustand der UFO-KI steht.

Zitat: LennStar
Was meinst du mit "ungewöhnliche Verteilung in der Zahlenlogik"? Falls du Verbesserungen in der Anordnung hast, heraus damit, die Bereiche selbst sind z.B. die erwähnte "Kosmetik", die werde ich noch etwas erweitern.

Es gibt in dem Konstrukt keinen erkennbaren Weg, wie der Zustand 5 erreicht werden kann - und das gilt auch noch für ein paar andere Werte.
Und außerdem erschließt sich mir nicht der Sinn der Zustände 4 und 14, bei denen einfach nur die Ziffer gewechselt wird.
Es wäre vielleicht ganz gut wenn Du einfach mal eine Liste gibst, für welchen Zustandbzw. welchen Schritt der KI welche Ziffer stehen soll. Eine Ziffer die gar nichts macht ist meistens sinnlos - wenn das UFO bei der Stelle warten soll bis ein anderes event eintritt dann solltest Du zumindest UFO.ClearDestination einsetzen, damit das auch ein sauberes warten wird.
Und man kann auch andere Befehle geben ohne dem UFO ein Kommando zu geben, solange es nur noch ein definiertes Event gibt das zu einem späteren Zeitpunkt die KI erneut anstößt.
verfasst am: 23.07.2007, 20:27
Spielsatz Darkage

Registrierdatum: 01.03.2005, 13:47

 Beiträge: 1846
Zitat: DirkF
Es gibt in dem Konstrukt keinen erkennbaren Weg, wie der Zustand 5 erreicht werden kann

Hatte ich das nicht geschrieben? Das wird in Startmission auf 5 gesetzt.


procedure UKICommandComplete(Sender:TObject);
var
  UFO:TUFO;
begin
  UFO:=TUFO(sender);
  case UFO.KIstep of
          <4:
             begin
                  UFO.KIStep:=UFO.KIStep+1;
                  UFO.FlyToPoint(PositionNear(UFO.position,20));
             end;
           4: UFO.KISTep:= 6;
           5: UFO.KIStep:= UFO.KIStep-Flugzahl1;
           6: begin
                if (Landezahl>0 and earth_api_PointOverLand(UFO.Position)=true) then
                  begin
                    Zwischenlandung(UFO);
                    UFO:KIStep:= 15;
                    Landezahl:= Landezahl-1;
                  end;
                  else UFO:KIStep:= 3;
  >6 and <14:
              begin
                  UFO.KIStep:=UFO.KIStep+1;
                  UFO.FlyToPoint(PositionNear(UFO.position,20));
              end;
          14: UFO:KISTep:= 20;
          15:
              begin
                UFO.KIStep:= UFO.KIStep-Flugzahl2-1;
              end;
    16,17,18:
              begin
                UFO.KIStep:=UFO.KIStep+1;
                UFO.FlyToPoint(PositionNear(UFO.position,20));
              end;
          19: UFO.escape;
          20: UFO.KIStep:= UFO.KIStep-Flugzahl3-1;

Von 5 wird die Flugzahl1 abgezogen - die Anzahl Flüge vor der ersten Landung.
Dann wird bei jedem Flug KISTep um 1 hochgezählt bis 4, dann Sprung zu 6
Hier wird eine Landung durchgeführt, falls das UFO über Land ist, und die Landezahl über 0 liegt. Wenn nicht, fligt das UFO so lange rum (->3) bis es landet. Wenn es landet, geht KIStep auf 15.
Jetzt wird die Anzahl Flüge zwischen Landungen ausgeführt (Flugzahl2), nach dem selben Prinzip wie vorher vor der Landung. Bis 14 erreicht ist.
Und an dieser Stelle fehlt noch die Abfrage der Landungen, seh ich gerade. Da muss ein if rein auf 6.
Wenn alle Landungen abgearbeitet sind, gehts zu 20.
Dort wird die Zahl der Flüge nach der letzten Landung abgewickelt. Wenn die erreicht ist, sind wir auf 19 -> UFO.escape
verfasst am: 23.07.2007, 21:05 · Edited by: Natter
Programmierer, allgemeines

Registrierdatum: 06.06.2004, 17:19

 Beiträge: 3186
Hmm, etwas umständlich, aber ich habs glaube verstanden :)

Ich würde ja mit KIStep = 0 (oder -1) anfangen - aber jedem das seine. Und wie es aussieht hat DirkF recht, KIStep = 4 ist eigentlich überflüssig (damit handelst du dir ja nur das Problem ein, dass du dir überlegen musst, wie ComandComplete nochmal durchlaufen wird). Besser wäre dafü:

          <3:
             begin
                  UFO.KIStep:=UFO.KIStep+1;
                  UFO.FlyToPoint(PositionNear(UFO.position,20));
             end;
           3: begin
                  UFO.KIStep:=6;
                  UFO.FlyToPoint(PositionNear(UFO.position,20));
             end; 

verfasst am: 23.07.2007, 21:30 · Edited by: LennStar
Spielsatz Darkage

Registrierdatum: 01.03.2005, 13:47

 Beiträge: 1846
Zitat: Natter
Ich würde ja mit KIStep = 0 (oder 1) anfangen - aber jedem das seine.

Ich mag einfach keine Abläufe im Minus ;)
Mit dem Zusammenfassen geht prinzipiell, aber dann muss die Flugzahl1 mindestens 2 betragen, da zuerst ein Flug und dann noch für -1 im KIStep Platz sein muss. Eins gespart. Aber wie gesagt, das war auch die erste Version, frisch vom tippen. (Wie man am fehlenden Einbau der Landezahl gesehen hat.) Ohne Zufall wärs einfacher *g*

----
btw: Hab diverse Doppelpunkte hinter UFO geändert, das braucht ihr also nicht sagen. ;)
verfasst am: 23.07.2007, 21:56 · Edited by: LennStar
Spielsatz Darkage

Registrierdatum: 01.03.2005, 13:47

 Beiträge: 1846
Zitat: DirkF
Und außerdem erschließt sich mir nicht der Sinn der Zustände 4 und 14, bei denen einfach nur die Ziffer gewechselt wird.

Damit ein Flug ausreicht. Siehe ein post weiter oben. Aber eigentlich sollte 2 als Minimum auch niemand unterbieten wollen. Für case 15 aber muss definitiv 1 mglich sein, also brauche ich da auf alle Fälle irgendwas, um CommandComplete wiederzukriegen.
Zitat: DirkF
Und man kann auch andere Befehle geben ohne dem UFO ein Kommando zu geben, solange es nur noch ein definiertes Event gibt das zu einem späteren Zeitpunkt die KI erneut anstößt.

Bei dem Satz komme ich nicht ganz mit.
verfasst am: 23.07.2007, 22:26
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beiträge: 5596
Zitat: LennStar
Damit ein Flug ausreicht.

Das meinte ich nicht - ich wollte wissen welchen Zustand das UFO bei KIstep=4 haben soll. Wenn es dort keinen eigenen und von anderen Ziffern unterschiedlichen Zustand haben soll, dann ist diese Ziffer sinnlos...
Zitat: LennStar
da zuerst ein Flug und dann noch für -1 im KIStep Platz sein muss

Und was meinst Du hier mit dem -1?
Tatsache ist einfach, das eine ganze Reihe von Punkten im Case-Konstrukt keinen Sinn ergeben - bei jedem KIstep solltest Du mehr machen als nur die Ziffer von KIstep zu ändern, d.h. 4, 14 und 15 sind sinnlos und würden Dir nur alles durcheinander hauen.
mhh - ich hatte gerade angefangen Deinen Code auseinander zu nehmen, aber ich glaube da ist dir irgendwie ein Definitionsfehler unterlaufen - oder aber die Flugzahl2 und Flugzahl3 machen keinen Sinn.
Das UFO sucht zuerst einen Landeplatz, und danach fliegt es Flugzahl2+Flugzahl3 Zufallspositionen an, bevor es verschwindet. Wieso hast Du dann nicht gleich Flugzahl2 und Flugzahl3 addiert und nur eine Flugzahl2 genommen?
Zitat: LennStar
Bei dem Satz komme ich nicht ganz mit.

Wenn man mehrere Events definiert, dann kann das UFO das verhalten wechseln. Sowas mache ich ja mit dem HITBYBASE - sobald dieses Ereignis kommt wird das KIstep ignoriert und erstmal auf Fluchtkurs weg gegangen.
Man kann also durchaus ein KIstep-Programm schreiben, das z.B. in Step 1-9 eine Basis sucht und in der nähe der Basis das UFO warten lassen (d.h. bei 10 keinen Flytopoint mehr im KI-Case-Construct setzen), bis z.B. ein vorbeifliegender Transporter erkannt wird.
Und diese andere Funktion würde dann KIstep auf 11 setzen und mit einem kleinen FlytoPoint die nächste Sequenz 11-50 im KI-Programm einleiten - was auch immer gemacht werden soll nachdem man ein Flugzeug in der Nähe einer Basis geortet hat.
verfasst am: 24.07.2007, 11:25
Spielsatz Darkage

Registrierdatum: 01.03.2005, 13:47

 Beiträge: 1846
Zitat: DirkF
Und was meinst Du hier mit dem -1?

Wenn die Flugzahl nur 1 betragen würde, würde das UFO zu wenig fliegen. Dann würde KIStep ja gleich auf 4 landen.
Zitat: DirkF
oder aber die Flugzahl2 und Flugzahl3 machen keinen Sinn

Wie schin gesagt, da fehlt noch der Einbau der Landezahl. Dann wird das mit Flugzahl2 ja ggf. mehrmals wiederholt.
Zitat: DirkF
Wenn man mehrere Events definiert, dann kann das UFO das verhalten wechseln. Sowas mache ich ja mit dem HITBYBASE - sobald dieses Ereignis kommt wird das KIstep ignoriert und erstmal auf Fluchtkurs weg gegangen.

Das hätte gereicht :D Jetzt weiß ich, was du gemeint hast.
verfasst am: 24.07.2007, 11:49
Spielsatz Darkage

Registrierdatum: 01.03.2005, 13:47

 Beiträge: 1846
Ich denke, das ist soweit die fertige Form (ich hab den case auch noch etwas auseinandergezogen)

procedure UKICommandComplete(Sender:TObject);
var
  UFO:TUFO;
begin
  UFO:=TUFO(sender);
  case UFO.KIstep of
          <9:
              begin
                UFO.KIStep:=UFO.KIStep+1;
                UFO.FlyToPoint(PositionNear(UFO.position,20));
              end;
           9:
              begin
                UFO.KIStep:= 11;
                UFO.FlyToPoint(PositionNear(UFO.position,0)); //
              end;
          10:
              begin
                UFO.KIStep:= UFO.KIStep-Flugzahl1-1;
                UFO.FlyToPoint(PositionNear(UFO.position,0)); //
              end;

          11: begin
                if (Landezahl>0 and earth_api_PointOverLand(UFO.Position)=true) then
                  begin
                    Zwischenlandung(UFO:TUFO);
                    UFO.KIStep:= 20;
                    Landezahl:= Landezahl-1;
                  end;
                  else UFO.KIStep:= 8;
 >11 and <19:
              begin
                  UFO.KIStep:=UFO.KIStep+1;
                  UFO.FlyToPoint(PositionNear(UFO.position,20));
              end;
          19: if (Landezahl>0) then
                begin
                  UFO.KIStep:= 11;
                  UFO.FlyToPoint(PositionNear(UFO.position,0));
                end;
              else
                begin
                  UFO.KISTep:= 30;
                  UFO.FlyToPoint(PositionNear(UFO.position,0));
                end;
          20:
              begin
                UFO.KIStep:= UFO.KIStep-Flugzahl2-1;
                UFO.FlyToPoint(PositionNear(UFO.position,0));
              end;
 >21 and <29:
              begin
                UFO.KIStep:=UFO.KIStep+1;
                UFO.FlyToPoint(PositionNear(UFO.position,20));
              end;
          29: UFO.escape;
          30:
              begin
                UFO.KIStep:= UFO.KIStep-Flugzahl3-1;
                UFO.FlyToPoint(PositionNear(UFO.position,0));
              end;
end;

verfasst am: 24.07.2007, 12:44
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beiträge: 5596
Wie schon Jim sagte, der Befehl:
UFO.FlyToPoint(PositionNear(UFO.position,0));
ist ziemlich sinnlos.
Wenn Du tatsächlich eine Runde Wartezeit haben möchtest, dann schreibe den Befehl wenigstens als:
UFO.FlyToPoint(UFO.Position);
Das spart unnötige Rechenzeit.

weitere Verbesserungen:
          11: begin
                if (Landezahl>0 and earth_api_PointOverLand(UFO.Position)=true) then
                  begin
                    Zwischenlandung(UFO:TUFO);
                    UFO.KIStep:= 20-Flugzahl2;
                    Landezahl:= Landezahl-1;
                  end;
                UFO.FlytoPoint(PositionNear(UFO.position,20));
             end;


Das macht übrigens exakt dasselbe wie Dein Script, eliminiert aber den unnötigen KIStep 20.
verfasst am: 24.07.2007, 15:50
Spielsatz Darkage

Registrierdatum: 01.03.2005, 13:47

 Beiträge: 1846
Verändert.

Bleibt noch das Problem mit der gelöschten Variable UFO nach der Zwischenlandung. Denn bei der Landung wird UFO gelöscht, aber die KI fragt UFO ab.
Wenn ich also bei ZwischenlandungStart UFO wieder erstellen möchte, existiert keine Variable.
Wenn ich die in var anlege, wie kann ich die dann übergeben, dass das KI-Script korrekt weitermacht?
verfasst am: 28.07.2007, 16:43
Spielsatz Darkage

Registrierdatum: 01.03.2005, 13:47

 Beiträge: 1846
Kann ich dem Mantis-Eintrag entnehmen, dass es keinen praktikablen Weg im Momant gibt?

Falls das so ist, stelle ich es vorübergehend ähnlich wie bei DirkFs Lander um, dass das UFO reaktionslos in der Luft hängt.

btw: Gibts ne einfache Möglichkeit, nur bestimmte UFO-IDs auszuwählen (z.B. 2 von 5) bei der Erschaffung? Oder brauch ich ein case mit random? Was anderes fällt mir nämlich grad nicht ein.
verfasst am: 28.07.2007, 17:11
Programmierer

Registrierdatum: 23.08.2003, 19:16

 Beiträge: 2261
Du könntest zum Beispiel ein Array mit den IDs machen und dann daraus ein zufälliges Element auswählen.

var
  UFOsID: Array[0..1] of Cardinal;

...

// IDs der gewünschten UFOs eintragen
UFOsID[0]:=1234567;
UFOsID[1]:=2345678;

// zufällige ID ermitteln
ID:=UFOsID[random(length(UFOsID))];
verfasst am: 28.07.2007, 17:13 · Edited by: Natter
Programmierer, allgemeines

Registrierdatum: 06.06.2004, 17:19

 Beiträge: 3186
Zitat: LennStar
Kann ich dem Mantis-Eintrag entnehmen, dass es keinen praktikablen Weg im Momant gibt?

Hmm, auf was bezieht sich das jetzt? Wenn es um die Zwischenlandung geht, und die Sache mit der Eigenschaft hidden - das geht in der Tat noch nicht direkt. Du könntest höchstens die wichtigen Werte (UFOModel, KIStep etc.) in anderen Variablen zwischenspeichern, und daraus bei Bedarf wieder ein ähnliches UFO erstellen. Um die Probleme in der KI abzufangen (falls die mal aufgerufen wird, obwohl das UFO gelöscht wurde), könnte man eine Abfrage auf Nil einbauen.

Zitat: LennStar
Gibts ne einfache Möglichkeit, nur bestimmte UFO-IDs auszuwählen (z.B. 2 von 5) bei der Erschaffung? Oder brauch ich ein case mit random?

Kommt darauf an, wie oft du das brauchst. Eine Case-Abfrage ist eine einfache Möglichkeit. Wenn das ganze aber flexibelk sein soll (mal 3 IDs, mal 6 ...), dann könnte man auch einen Array mit den IDs anlegen, und eine Prozedur basteln, die an Hand dieses Arrays ein UFO auswählt.

Edit: Hehe, da war Jim_Raynor wohl einen Tick schneller als ich
verfasst am: 28.07.2007, 17:29
Spielsatz Darkage

Registrierdatum: 01.03.2005, 13:47

 Beiträge: 1846
Nö, ist was einfaches was ich da im Kopf habe - nur ein Terrorangriff. Der sollte nicht durch Zufallsufos geschehen (oder nicht nur) und deshalb mach ich das lieber in einem extrascript statt als zugewiesenes KI-script. Nur ein Scout, der nen Terrorangriff macht, ist nicht sehr sinnvoll :D
Zitat: Natter
Du könntest höchstens die wichtigen Werte (UFOModel, KIStep etc.) in anderen Variablen zwischenspeichern, und daraus bei Bedarf wieder ein ähnliches UFO erstellen

Da sind wir ja wieder bei meinem Problem, dass ich das UFO bei escape lösche, im KI-script aber auf das UFO zugreife.
Ich hab keine Idee, wie das gelöst werden kann.
verfasst am: 28.07.2007, 19:07 · Edited by: DirkF
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beiträge: 5596
Zitat: LennStar
Nö, ist was einfaches was ich da im Kopf habe - nur ein Terrorangriff. Der sollte nicht durch Zufallsufos geschehen (oder nicht nur) und deshalb mach ich das lieber in einem extrascript statt als zugewiesenes KI-script. Nur ein Scout, der nen Terrorangriff macht, ist nicht sehr sinnvoll

Usertag benutzen um zu sagen, welche UFOs welche Spezialfunktionen haben. Das ist auch der Grund weshalb der geänderte Code im UKI-Scriptsatz im Wiki nicht einfach den ganzen Usertag als KI-Name nimmt, sondern an den Kommas abschneidet.

Du machst also Eingaben wie "UKI###fighter,T" "UKI###lander,T" und UKI###scout,N" und überprüfts dann den zweiten Wert - bei einem T ist eine Terrormission erlaubt, bei einem N nicht usw

EDIT:
Wenn Du von http://doc.xforce-online.de/ger_pages/XSkriptTemplates/UKIAAinit.html ausgehst dann könntest Du nach Zeile 54 mit Temp[1] auf den Stringblock nach dem ersten Komma zugreifen...
verfasst am: 28.07.2007, 23:03 · Edited by: Natter
Programmierer, allgemeines

Registrierdatum: 06.06.2004, 17:19

 Beiträge: 3186
Zitat: LennStar
Da sind wir ja wieder bei meinem Problem, dass ich das UFO bei escape lösche, im KI-script aber auf das UFO zugreife.
Ich hab keine Idee, wie das gelöst werden kann.

Zitat: Natter
Um die Probleme in der KI abzufangen (falls die mal aufgerufen wird, obwohl das UFO gelöscht wurde), könnte man eine Abfrage auf Nil einbauen.

Falls du dich auf das hier beziehst:
11: begin
                if (Landezahl>0 and earth_api_PointOverLand(UFO.Position)=true) then
                  begin
                    Zwischenlandung(UFO:TUFO);
                    UFO.KIStep:= 20-Flugzahl2;
                    Landezahl:= Landezahl-1;
                  end;
                UFO.FlytoPoint(PositionNear(UFO.position,20));
             end;
Ich nehme mal an, dass das UFO in Zwischenlandung gelöscht wird. Dann sollte das UFO in Zwischenlandung auch wieder starten (also neu erzeugt werden). Dann wäre die Sache recht simpel - du definierst Zwischenlandung als Funktion mit dem Rückgabewert TUFO, merkst dir in Zwischenlandung die wichtigsten UFO-Werte, erzeugst am Ende von Zwischenlandung das neue UFO mit diesen Werten, und gibst es über result:=UFO zurück. Obiger Code könnte dann ungefähr so aussehen:
11: begin
                if (Landezahl>0 and earth_api_PointOverLand(UFO.Position)=true) then
                  begin
                    UFO:=Zwischenlandung(UFO:TUFO);
                    UFO.KIStep:= 20-Flugzahl2;
                    Landezahl:= Landezahl-1;
                  end;
                UFO.FlytoPoint(PositionNear(UFO.position,20));
             end;


edit:Ganz so leicht ist es wohl doch nicht, da es schwierig sein dürfte, die wartezeit in der Funktion Zwischenlandung sinnvoll umzusetzen. Kannst du mal das komplette Skript posten?

Seite: << [1] ... [9] [10] 11 [12] [13] [14] [15] [16] [17] [18] >>




Du musst dich registrieren um auf dieses Thema zu antworten.
Login :: » Name » Passwort

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