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 [2] [3] [4] [5] [6] [7] [8] [9] [10] .. [17] [18] >>

Autor Mitteilung
verfasst am: 24.05.2006, 14:41
Spielsatz Darkage

Registrierdatum: 01.03.2005, 13:47

 Beiträge: 1846
Hier werde ich euch ein wenig löchern.

Hinter alien_api_GetRandomAlien muss vermutlich eine Variable, richtig? Oder warum krieg ich "Identifier expected"?
verfasst am: 24.05.2006, 14:46
Registrierdatum: 26.03.2006, 08:29

 Beiträge: 83
Korrekt, die Syntax lautet dann:
var alien : TAlien
alien := alien_api_GetRandomAlien();
verfasst am: 24.05.2006, 15:15 · Edited by: LennStar
Spielsatz Darkage

Registrierdatum: 01.03.2005, 13:47

 Beiträge: 1846
OK, jetzt ist Fehlerfrei. Funktionieren tuts natürlich noch nicht ^^
Und wie leg ich die Anzahl fest?
Komando zurück, so wie hier, richtig? Nur halt keine UFOs

var
  Index : Integer;
  UFOs     : Integer;
begin
  // zufällige UFO-Anzahl ermitteln
  UFOs     := random(5) + 1;

  for Index := 1 to UFOs do
  begin
    ufo_api_CreateUFO(); // UFO erzeugen
  end;
verfasst am: 24.05.2006, 15:34
Registrierdatum: 26.03.2006, 08:29

 Beiträge: 83
wenn ich mich richtig erinnere und sich da nichts geändert hat, müsstest du den code noch so verändern:
var
  Index : Integer;
  UFOs     : Integer;
  UFO : TUFO;
begin
  // zufällige UFO-Anzahl ermitteln
  UFOs     := random(5) + 1;

  for Index := 1 to UFOs do
  begin
    UFO := ufo_api_CreateUFO(); // UFO erzeugen
  end;

einfache regel: schau dir einfach im Missionseditor die entsprechende Funktion/Prozedur an. Handelt es sich um eine Funktion (das sind die mit dem gelben Pfeil davor) dann steht die so da: Funktionsname : Typ.
Dann musst du halt eine Variable des entsprechenden Typs definieren und der die Funktion zuweisen. Also im Beispiel von UFO-Erzeugung: Die Funktion ufo_api_CreateUFO ist vom Typ TUFO (dahinter stehts ja). Das heißt man muss diese Funktion einer Variablen vom Typ TUFO zuweisen, damit das funktioniert und man das UFO später noch erreichen kann, z.B. für Positionsangaben etc.
verfasst am: 24.05.2006, 15:40
Spielsatz Darkage

Registrierdatum: 01.03.2005, 13:47

 Beiträge: 1846
Nur will ich keine UFOs ^^ sondern ich mach nur Bodeneinsätze.
OK, ich hab jetzt das zusammengeschrieben (und dabei ArneLs Struktur auch allein hingekreigt *g* So langsam kommen meine 3 Monate Pascal wieder aus den Teifen des Vergessens hervor)
Allerdings bin ich mir ziemlich sicher, dass das einsatz_api_generateeinsatz woanders hinmuss.

procedure StartMission;

 var
  alien: TAlien;          //für alien_api_GetRandomAlien
  Index: integer;         //Minimumzahl
  Zahl: Integer;          //max. Zahl der Aliens
begin
   einsatz_api_generateeinsatz        //Einsatz erzeugen
     begin
              Zahl:= random (5) + 5;      //max. Zahl der Alien 4-9
       
     for Index:= 1 to Zahl do             //für Zahl-Anzahl 1 zufälliges Alien
         begin
         alien := alien_api_GetRandomAlien();
         end;
     end;
end;
verfasst am: 24.05.2006, 15:52 · Edited by: ArneL
Registrierdatum: 26.03.2006, 08:29

 Beiträge: 83
Gleiche Struktur auch bei den Einsätzen: einsatz_api_GenearteEinsatz ist schon an der richtigen Stelle, da es aber auch eine Funktion ist, brauchst du auch hier eine entsprechende Variable, nämlich z.B. einsatz : TEinsatz. Und damit die Aliens im Einsatz auftauchen musst du sie noch mit einsatz.AddAlien(alien) hinzufügen. Korrekt wäre dann also
procedure StartMission;

 var
  alien: TAlien;          //für alien_api_GetRandomAlien
  Index: integer;         //Minimumzahl
  Zahl: Integer;          //max. Zahl der Aliens
  einsatz : TEinsatz;     //für einsatz_api_GenerateEinsatz
begin
   einsatz := einsatz_api_generateeinsatz        //Einsatz erzeugen
     begin
              Zahl:= random (5) + 5;      //max. Zahl der Alien 4-9
       
     for Index:= 1 to Zahl do             //für Zahl-Anzahl 1 zufälliges Alien
         begin
         alien := alien_api_GetRandomAlien();
         einsatz.AddAlien(alien);  //Alien zum Einsatz hinzufügen
         end;
     einsatz.Start;   //Einsatz starten
     end;
end;

Edit:
man muss natürlich einsatz_api_generateeinsatz der Variablen einsatz zuweisen ^^
verfasst am: 24.05.2006, 16:01
Spielsatz Darkage

Registrierdatum: 01.03.2005, 13:47

 Beiträge: 1846
TEinsatz hatte ich inzwischen, einsatz.start kannte ich nicht mal ^^ Ist aber irgendwie logisch, obwohl es theoretisch nach dem end; von StartMission von "allein" losgehen könnte. Aber das wär wohl Spielprogrammierung und kein script.

An welche Stelle müssten jetzt Nachrichten und die Definition des Einsatzbeschreibungsinhaltes? (Also das Briefing mit den Aufgaben)
Direkt hinter einsatz_api_generateeinsatz ?
verfasst am: 24.05.2006, 16:15
Registrierdatum: 26.03.2006, 08:29

 Beiträge: 83
Die werden dann dem Objekt vom Typ TEinsatz zugewiesen. Beispiel:
procedure StartMission;

 var
  alien: TAlien;          //für alien_api_GetRandomAlien
  Index: integer;         //Minimumzahl
  Zahl: Integer;          //max. Zahl der Aliens
  einsatz : TEinsatz;     //für einsatz_api_GenerateEinsatz
begin
   einsatz := einsatz_api_generateeinsatz        //Einsatz erzeugen
   einsatz.Objectives := 'Test'; //Einsatzziele/Briefing
   einsatz.Description := 'Test'; //Beschreibung
     begin
              Zahl:= random (5) + 5;      //max. Zahl der Alien 4-9
       
     for Index:= 1 to Zahl do             //für Zahl-Anzahl 1 zufälliges Alien
         begin
         alien := alien_api_GetRandomAlien();
         einsatz.AddAlien(alien);  //Alien zum Einsatz hinzufügen
         end;
     einsatz.Start;   //Einsatz starten
     end;
end;
verfasst am: 24.05.2006, 16:20
Programmierer

Registrierdatum: 23.08.2003, 19:16

 Beiträge: 2261
Zitat: ArneL
UFO := ufo_api_CreateUFO(); // UFO erzeugen
Das UFO:= ist nur notwendig, wenn man mit dem UFO noch etwas machen möchte. Ansonsten muss man nicht zwingend den Rückgabewert in eine Variable speichern.
Zitat: ArneL
einsatz.AddAlien(alien_api_GetRandomAlien);
funktioniert auch und man spart sich die Variable alien.

Für die Beschreibung gibts bei TEinsatz die Eigenschaften Descriptions und Objectives. Wann du die setzt ist so ziemlich egal, sinnvollerweise aber noch vor Einsatz.Start.

Das begin ... end (ausserhalb der For-Schleife) ist auch überflüssig. Und auf eine vernüftige Einrückung wird ich auch achten, sonst kommt man früher oder später mit den begin ... end durcheinander:

procedure StartMission;
var
  Index   : integer;         //Minimumzahl
  Zahl    : Integer;          //max. Zahl der Aliens
  einsatz : TEinsatz;     //für einsatz_api_GenerateEinsatz
begin
  einsatz := einsatz_api_generateeinsatz        //Einsatz erzeugen
  Zahl:= random (5) + 5;      //max. Zahl der Alien 4-9
      
  for Index:=1 to Zahl do             //für Zahl-Anzahl 1 zufälliges Alien
  begin
    einsatz.AddAlien(alien_api_GetRandomAlien);  //Alien zum Einsatz hinzufügen
  end;
  einsatz.description:='Hau den den Kopf weg';
  einsatz.objectives:='Besiege alle Aliens im Gebiet';
  einsatz.Start;   //Einsatz starten
end;
verfasst am: 24.05.2006, 16:45 · Edited by: LennStar
Spielsatz Darkage

Registrierdatum: 01.03.2005, 13:47

 Beiträge: 1846
Also ich krieg immer nen runtime-error (Couls not call proc) im Spiel bei

begin
alien := alien_api_GetRandomAlien();
einsatz.AddAlien(alien); //Alien zum Einsatz hinzufügen
end;

wobei sich die genaue Zeile jedes Mal ändert, und mit der kürzeren Version auch.
verfasst am: 24.05.2006, 16:49
Registrierdatum: 26.03.2006, 08:29

 Beiträge: 83
benutzt du das skript wie oben? wenn ja, dann beschreib den fehler mal genauer
verfasst am: 24.05.2006, 16:53 · Edited by: LennStar
Spielsatz Darkage

Registrierdatum: 01.03.2005, 13:47

 Beiträge: 1846
Kann das am Missiontype liegen? Welcher muss das sein? Ich habs ja vom UFO-script übernommen.
// Missionstype festlegen 
  //   mzUFOs = alle mit register_ufo registrierten UFOs müssen zerstört werden
  //   mzUser = müssen muss mit Mission_Win oder Mission_loose abgeschlossen werden
  MissionType := mzUser;


Also entweder anderer type oder noch ein Mission_win rein? Oder ganz weg?


Beschreiben gibts da nicht viel. Kommt einfach nurn Infofenster
run time error in script Ressourcenbeschaffung
STARTMISSION - Line 15, Coll 11

Could not call proc
verfasst am: 24.05.2006, 17:05
Programmierer

Registrierdatum: 23.08.2003, 19:16

 Beiträge: 2261
Could not Call Proc deutet immer darauf hin, dass du ein nicht initsialisiertes Objekt benutzt. In deinem Fall wird es Einsatz sein, weil du bestimmt der Variablen keinen Wert zuweist ...

einsatz := einsatz_api_generateeinsatz
verfasst am: 24.05.2006, 17:24 · Edited by: LennStar
Spielsatz Darkage

Registrierdatum: 01.03.2005, 13:47

 Beiträge: 1846
Zitat: Jim_Raynor
einsatz := einsatz_api_generateeinsatz


Jepp.
@ArneL unten: Darum hab ichs wegeditiert ;) Bloß beim zweiten hab ich nicht mehr drauf geachtet.
verfasst am: 24.05.2006, 17:26 · Edited by: ArneL
Registrierdatum: 26.03.2006, 08:29

 Beiträge: 83
Zitat: LennStar
ber weil ArneL das nicht hatte, wieder raus genommen

stimmt nicht, wenn du dir die beiden beispielskriptteile mal ansiehst, ist das in beiden drin. im ersten beispiel hab ichs zuerst vergessen, aber noch hinzugefügt.
verfasst am: 24.05.2006, 18:22
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beiträge: 5595
@LennStar:
Wenn ich mal versuche so zwischen den Zeilen Deiner Fragen zu lesen, dann glaube ich das viele Deiner Probleme daher kommen, das Du den Unterschied zwischen Funktionen und Methoden noch nicht wirklich verinnerlicht hast.

Es gibt in Xscript eine Reihe von Funktionen die Objekte erzeugen und mit Objekten arbeiten. Aber es ist nicht möglich ein Objekt mit einer Funktion zu verändern - dafür sind die Objekteigenschaften und Objektmethoden da.

einsatz_api_generateeinsatz ist eine Funktion, die ein Objekt vom Typ TEinsatz erschafft. Dabei werden alle Werte mehr oder weniger zufällig gesetzt, insbesondere sind die Einsätze in den Skripten oben zufällig über den ganzen Globus verteilt.

AddAlien(TAlien) ist eine Methode von Objekten des Typs TEinsatz. Sie MUSS IMMER bezogen auf ein solches vorher definiertes Objekt aufgerufen werden. Ist das Objekt nicht vorhanden kommt der oben beschriebene Fehler.

Wie Jim schon an ein oder zwei Stellen hier im Forum sagte ist die Referenz im Gegensatz zum Tutorial aktualisiert auf die 0.910, d.h. alle aktuell bestehenden Eigenschaften und Methoden von TEinsatz befinden sich hier: http://doc.xforce-online.de/ger_pages/XSkriptReferenz/TypTEinsatz.html
Wenn etwas dort nicht angegeben ist dann kannst Du es beim Einsatz auch nicht verändern - und beachte bitte das dies eine Seite der Typenreferenz ist und nicht zur Funktions/Procedure-Referenz gehört.
Das liegt an dem dahinter liegenden Prinzip der Objektorientierung, bei den Funktionen findest Du normalerweise nichts was bestehende Objekte verändern kann.
verfasst am: 24.05.2006, 19:21
Spielsatz Darkage

Registrierdatum: 01.03.2005, 13:47

 Beiträge: 1846
Zitat: DirkF
Wenn ich mal versuche so zwischen den Zeilen Deiner Fragen zu lesen, dann glaube ich das viele Deiner Probleme daher kommen, das Du den Unterschied zwischen Funktionen und Methoden noch nicht wirklich verinnerlicht hast.

Hey, bis heute früh hatte ich gar nichts mehr verinnerlicht ;) Ich hab im Verlauf des Tages (fast) alles Pascal wiederentdeckt, dass ich in der Schule mal gelernt und inzwischen vollkommen vergessen hatte.
Das größte Problem ab jetzt wird erstmal sein, dass ich die ganzen api's etc. nicht kenne- von irgendwelchen porperties mal ganz zu schweigen. Ich muss also immer erst suchen, was es denn überhaupt gibt.
Ansonsten kann ich nicht sagen, dass du Unrecht hast ;)

Aber sieh es auch mal so, wenn du keine Ahnung (erst Recht nicht vom Programmieren) hast und das hier siehst:
type
  TEinsatz = class(TOBJECT)
    // Methoden
    procedure PopulateFromUFO(UFO: TUFO);
    procedure AddAlien(Alien: TAlien);
    function Start: Boolean;


Dann kriegst du erst mal einen Riesen-Schock und fragst dann:
Was heißt type?
Was ist TEinsatz (Was hat das T da zu suchen?)
Was ist mit class gemeint?
TObjekt? TUFO? schon wieder so ein T? Ist das das gleiche?
usw. usw.

Da braucht ihr euch nicht wundern, wenn dann keiner anfangen will, sich ins script zu arbeiten ;)

btw: Was heißt das T da drin? Type denk ich mal, oder?
Und das _api_?

Das Tutorial (sofern vorhanden) ist gar nicht so schlecht, aber es erlaubt nun mal keine Rückfragen. Lernen geschieht durch Fehler, aber wenn es niemanden gibt, der einem sagt was falsch ist kommt man irgendwann an eine Stelle, an der man auch nach Stunden oder Tagen keine Lösung findet.
verfasst am: 24.05.2006, 19:45
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beiträge: 5595
Dann mal zu den Antworten ;-)

type steht für eine Typen-Definition und ist einfach ein Schlüsselwort.

TEinsatz (d.h. der Bezeichner hinter dem Schlüsselwort) gibt den Namen dieses Typen an.

Einheitlich durch das ganze XScript zieht sich das T als Kennzeichnung für einen Typenbezeichner, d.h. desjenigen Bezeichners über den Du eine beliebige Variable definieren kannst.

Ich habe mich übrigens genau aus diesem Grunde (und um Tippfehlern vorzubeugen) bei allen nicht eindeutigen Bereichen bemüht eine andere Variablenbezeichnung zu nehmen, z.B. definiere ich in meinen Scripten
boden : TEinsatz;
und habe dann boden als Namen für das Objekt des Bodeneinsatzes. Dann gibt es weniger Verwechslungsmöglichkeiten wenn ich schreibe boden.addalien(alien)...
(Und nein, ich habe das auch nicht perfekt durchgezogen - manchmal ist es einfach besser verständlich wenn man schreibt UFO:TUFO; - was dann UFO als eine Variable des Typs TUFO definiert)

Alle solche Typdefinitionen stehen übrigens in der Referenz
Und wenn Du beschriebene Scripte haben willst - seit ein paar Minuten stehen unter Online-Doku - XScript - Scriptvorlagen die dokumentierten Skripte zur UFO-Steuerung.
Unter UKI_ACdown findest Du übrigens auch meine Variante zur Erzeugung eines Bodeneinsatzes beim UFO-Abschuss...
(Du wirst die aber wahrscheinlich besser verstehen wenn Du Dir die Scripte der Reihe nach von UKI_AA anfangend anschaust, da in UKI_AC nur der letzte Befehlsaufruf enthalten ist).
verfasst am: 24.05.2006, 20:08 · Edited by: LennStar
Spielsatz Darkage

Registrierdatum: 01.03.2005, 13:47

 Beiträge: 1846
Nee, da schau ich lieber noch nicht rein. ^^

Aber gleich noch mal ein Problem: Ich hab jetzt eine Abfrage (Angriff:Boolean)eingebaut und ein if, und bekomme vor dem else ein "identifier expected"
Wieso?
Oder ist meine Erinnerung an die if-Syntax falsch?

Angriff:= game_api_Question(*zu lang*);
    if (Angriff) then
       begin
       Einsatz:= einsatz_api_generateeinsatz        //Einsatz erzeugen
       Zahl:= random (5) + 5;                 //max. Zahl der Alien 4-9
        for Index:= 1 to Zahl do             //für Zahl-Anzahl 1 zufälliges Alien
          begin
          einsatz.AddAlien(alien_api_GetRandomAlien);  //Alien zum Einsatz hinzufügen
          end;
       einsatz.Objectives := '- sch. Seitenbreite'; //Einsatzziele/Briefing
       einsatz.Description := ' *Länge*'; //Beschreibung
       einsatz.Start;   //Einsatz starten
       end;
     else
verfasst am: 24.05.2006, 20:18
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beiträge: 5595
Ein Semikolon beendet immer den gesamten Befehl, d.h. danach kann auch kein else zu einem Befehl mehr folgen.

Hier mal ein korrekter IF/ELSE-Auszug aus einem meiner UKI-Scripte:
   if (base=basis_api_GetBasisCount-1) then
    begin
      Baseassault(UFO);
      UFO.Escape;
      exit;
    end
    else
    begin
      base:=base+1;
      basis:=basis_api_GetBasis(base);
      UFO.FlytoPoint(basis.position);
      game_api_setInteger('UKI200base',base);
    end;


Du darfst das END vor dem ELSE also nicht mit Semikolon abschließen. Das ist eine der kleinen Eigenarten auf die ich vor ein paar Monaten auch herein gefallen bin als ich mich mit den ersten Scripten versuchte...

Seite: 1 [2] [3] [4] [5] [6] [7] [8] [9] [10] .. [17] [18] >>




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

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