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 —› Problem mit X Script

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

Autor Mitteilung
verfasst am: 29.07.2007, 18:13
Registrierdatum: 27.06.2007, 12:16

 Beiträge: 658
Also

Ich habe mal versucht, ein Script für ein BossUfo zu erstellen, aber irgendwie funzt das ganze überhaupt nicht. Könnte sich das mal jemand anschauen und mir bitte sagen, was genau ich anders machen könnte.

Hier das Script:


program BossUFO;

const
  messageText = 'test';
  messageWin  = 'test'; //weil das BossUfo Bestandteil
                        //der Story ist und man nicht
                        //verlieren sollte
  
procedure Onmessagewin;
begin
  game_api_messageBox(messageWin);     //Macht ein Dialogfeld
                                       //im Falle des Sieges
end;

procedure StartMission;
var
  UFO: TUFO;
  UFOS: Integer;
  UFOModel: TUFOModel;

begin
   UFOModel.Name := 'Armensia Omnima';  // Name des UFOs
   UFOModel.HitPoints := 3500;          // Hitpoints des UFOs
   UFOModel.Shield:=1000;               // Schildpunkte
   UFOModel.ShieldType.Projektil := 80; // Schildabsorption für Projektile in %
   UFOModel.ShieldType.Rakete := 80;    // Schildabsorption für Raketen in %
   UFOModel.ShieldType.Laser := 80;     // Schildabsorption für Laserwaffen in %
   UFOModel.ShieldType.Laden := 80;     // Nachladezeit des Schildes in ms
   UFOModel.MinBesatz := 1;             // minimale Besatzung (wichtig für eventuelle Bodeneinsätze)
   UFOModel.ZusBesatz := 0;             // zufällige zusätzliche Besatzung
   UFOModel.Angriff := 100;             // Angriffsstärke
   UFOModel.Pps := 7;                   // Geschwindigkeit
   UFOModel.Treffsicherheit := 80;

   UFOS := 1;
   
 begin
   ufo_api_CreateUFOFromModel(UFOModel);
   register_UFO(UFO);                      //hier kommt der Fehler
 end;

end;


begin
  // Hier darf kein weiterer Code folgen
  // Missionsname festlegen
  MissionName := 'YourName';

  // 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 := mzUFO;
end.
verfasst am: 29.07.2007, 18:32
Programmierer

Registrierdatum: 23.08.2003, 19:16

 Beiträge: 2261
Hi, die Prozedur muss OnMissionWin, statt OnmessageWin heissen.
Desweiteren musst du
UFO:=ufo_api_CreateUFOFromModel(UFOModel);
statt
ufo_api_CreateUFOFromModel(UFOModel);
schreiben, da UFO sonst leer ist. P.S: Das begin..end bei
 begin
   ufo_api_CreateUFOFromModel(UFOModel);
   register_UFO(UFO);                      //hier kommt der Fehler
 end;

kann weg.
verfasst am: 29.07.2007, 18:37 · Edited by: LennStar
Spielsatz Darkage

Registrierdatum: 01.03.2005, 13:47

 Beiträge: 1846
Alles was ich sage, ist mit Vorsicht zu genießen ;)

1. begin und end bei ufo_api sind völlig falsch, wegmachen. Zu was sollte das denn gehören?
Oder wolltest du für UFOS-Zahl mal ein UFO haben?
Dann braucht das eine Schleife wie z.B.
for i:=0 to UFOS do
begin
   ufo_api_CreateUFOFromModel(UFOModel);
   register_UFO(UFO);
 end;


und i muss natürlich noch als Variable angelegt werden. Du kannst ein begin oder end nicht einfach in die Luft hängen. Allerdings weiß ich nicht, wie sich das bei mehreren UFOs mit dem register/OnMissionWin verträgt.

2. fehlt für deine procedure Onmessagewin; (die onmissionwin heißen muss)
noch etwas wie ein register_event...onufoshootdown oder sowas, sieh mal in der Referenz nach, was du willst.

3. messagetext ist völlig ohne Funktion
verfasst am: 29.07.2007, 18:41 · Edited by: BlackBetty
Registrierdatum: 27.06.2007, 12:16

 Beiträge: 658
@Raynor: Ich hab das jetzt verändert aber mir scheint es immer noch nicht richtig zu funktionieren.
Evtl. könnte LennStar damit
Zitat: LennStar
noch etwas wie ein register_event...onufoshootdown oder sowas,

recht haben. Ein Event könnte ebenfalls fehlen...

Zitat: LennStar
3. messagetext ist völlig ohne Funktion


Das habe ich auch gesehen. Ich stell das Ding ja nicht umsonst hier rein :D
verfasst am: 29.07.2007, 19:58 · Edited by: DirkF
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beiträge: 5596
Zitat: BlackBetty
Ich hab das jetzt verändert aber mir scheint es immer noch nicht richtig zu funktionieren.

Es würde helfen wenn Du sagst was Deiner Meinung nach nicht funktioniert - wenn man nicht weiß was das vorgesehene Ergebnis ist dann kann man auch nur schwer suchen.

Einen größeren Fehler sehe ich aber schon jetzt: Du verwechselst den Einsatz von mzUser und mzUFO.

OnMissionWin wird nur aufgerufen, wenn Du den Befehl mission_win gibst - und der wird meistens bei mzUser genutzt, da mzUFO das Skript ohne eine Siegesdefinition beendet, sobald das letzte registrierte UFO verschwunden ist. Genaueres dazu kannst Du im XSkriptTutorial.Kapitel6 lesen, aber das ist ein ziemlicher Block mit vielen Informationen, mehr eine Referenzbeschreibung als ein Tutorial.

Es gibt zwei Lösungsansätze:
- entweder auf mzUser wechseln und mit mehreren Event-Funktionen überprüfen ob das UFO abgeschossen oder geflohen ist und passende Meldungen ausgeben.
- die Funktion FinalizeMission benutzen, die auch bei mzUFO am Ende automatisch aufgerufen wird (siehe auch XSkriptTutorial.Kapitel6), aber dann hast Du ein paar Probleme den Unterschied zwischen Abschuss und Escape zu erkennen und musst ggfs tricksen.
verfasst am: 29.07.2007, 20:06
Registrierdatum: 27.06.2007, 12:16

 Beiträge: 658
Hmm, vielleicht liegt das auch daran, dass bei mir ein Fenster mit "Ereignis Simulieren" kommt, wenn ich auf die Schaltfläche mit dem Play zeichen drücke. Dummerweise ist kein Ereignis aufgelistet, deswegen kann das Script anscheinend gar nicht richtig getestet werden.

kann es sein, dass ich dazu ein "Event" brauche?

Meine Absicht ist es, ein BossUFO zu erstellen, dass dann nur einmal im Spielsatz auftaucht und mithilfe einer Technologie im Spielsatz freigeschaltet wird.
verfasst am: 29.07.2007, 20:35
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beiträge: 5596
Zitat: BlackBetty
kann es sein, dass ich dazu ein "Event" brauche?

Genau - wenn Du auf kein Ereignis=Event reagieren kannst, dann brauchst Du auch keine Events.


Das Tutorial-Kapitel 3 beschreibt übrigens fast genau das was Du machen willst und ist seit einigen Tagen auch endlich auf dem aktuellen Stand.
Arbeite also einfach das Tutorial einmal durch, dann weißt Du auch welche Events Du benötigst und wie diese registriert werden.
verfasst am: 29.07.2007, 20:52
Programmierer

Registrierdatum: 23.08.2003, 19:16

 Beiträge: 2261
Zitat: BlackBetty
kann es sein, dass ich dazu ein "Event" brauche?
Ja, dass Problem ist, dass UFOs nicht mehr aufgelistet werden, wenn sie nur mit register_ufo registriert werden. Das wird erst wieder mit der Version 0.915 der Fall sein ... Aber entscheidend ist der Test im Spiel selber ;)
verfasst am: 29.07.2007, 21:55 · Edited by: BlackBetty
Registrierdatum: 27.06.2007, 12:16

 Beiträge: 658
Hm gut, werd ich dann malmachen ^^
-------------
Es funktioniert einwandfrei, nur das Textfeld kommt nicht.


Es gibt ja: UFOModell.Aliens. Welches Parameter muss ich da eingeben um eine bestimmte Alienart einzufügen?
verfasst am: 30.07.2007, 00:24 · Edited by: DirkF
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beiträge: 5596
Zitat: BlackBetty
Es funktioniert einwandfrei, nur das Textfeld kommt nicht.

Das Textfeld kommt nicht, weil es nie aufgerufen wird - siehe Antworten oben.
Die Funktion "OnMissionWin" erscheint eben NICHT sobald alle UFOs weg sind, denn auch entkommene UFOs sind weg.
Im Skript müssen alle Sieges- und Verlustbedingungen manuell überprüft werden, normalerweise per register_event.

Zitat: BlackBetty
UFOModell.Aliens. Welches Parameter muss ich da eingeben um eine bestimmte Alienart einzufügen?

Das wird aufwendig und lohnt sich kaum - wenn es für viele UFOs gelten soll besser per Editor eingeben und das UFO deaktivieren, damit es nur bei Skriptaufruf verfügbar ist.
Für einzelne UFOs bringt das weniger was, da gehst Du besser an das UFO selber mit TUFO.AddAlien.

Zur Erklärung:
TUFOModell ist das Modell was man normalerweise im Editor eingibt und aus dem man beliebig viele UFOs im Spiel erzeugen kann. Die Eigenschaft Aliens dieses Modells ist nichts anderes als die Editortabelle für die Wahrscheinlichkeiten bestimmter Aliens in diesem UFO.

Wenn Du das wirklich im Script eingeben willst, dann ist Aliens ein Array aus TAlieninUFO (XSkriptReferenz.TypTUFOModel). Du musst also ersteinmal einen temporären Array in denau demselben Format erzeugen, in dem Du die Daten dann ablegen kannst.
Und das TAlieninUFO (XSkriptReferenz.TypTAlienInUFOist dann eine Zuordnung von AlienID (ablesbar im Editor) und einer Häufigkeitsangabe, die die Zufallsverteilung beeinflusst.

Wenn Du nun über IDs z.B. eine Verteilung von ID1:50, ID2:30 und ID3:30 eingibst, dann kann das erste aus dem Modell erstellte UFO bei 5 Besatzungsmitgliedern z.B. 3x Alien1, 1x Alien2 und 1x Alien3 enthalten, das nächte UFO aus diesem Modell vielleicht 2xAlien2 und 3x Alien3 usw - die Zufallsverteilung wird jedesmal neu ausgewürfelt.

Aber wie gesagt - das UFOModell manuell im Skript zu erzeugen lohnt sich nur für einzelne Spezialgegner (und selbst das auch nur wenn man die je nach Schwierigkeitsgrad unterschiedlich stark machen will).
Jedes UFO dessen Werte man schon vor dem Spielstart kennt, sollte über den Editor eingegeben und dann nur deaktiviert werden. Deaktivierte UFOs können nicht als Zufallsufos auftreten, d.h. sie können nur gezielt über Skripte erstellt werden (es sei denn man benutzt Skripte um das UFO nachträglich aktiv zu schalten, sowas mache ich z.B. im galaktischen Krieg)
verfasst am: 30.07.2007, 12:52
Registrierdatum: 27.06.2007, 12:16

 Beiträge: 658
Zitat: DirkF
Wenn Du das wirklich im Script eingeben willst, dann ist Aliens ein Array aus TAlieninUFO (XSkriptReferenz.TypTUFOModel). Du musst also ersteinmal einen temporären Array in denau demselben Format erzeugen, in dem Du die Daten dann ablegen kannst.
Und das TAlieninUFO (XSkriptReferenz.TypTAlienInUFOist dann eine Zuordnung von AlienID (ablesbar im Editor) und einer Häufigkeitsangabe, die die Zufallsverteilung beeinflusst.


Na sooo kompliziert möchte ich das als Anfänger noch nicht machen ^^

Meine Absicht ist, ein einziges Alien in diesem Raumschiff unterzubringen. Mir ist dabei die Funktion (oder Prozedur - wie auch immer (;) aufgefallen, als ich nach einem Weg gesucht habe ein Alien diesem Raumschiff zuzuweisen.

Dabei möchte ich auf ein Alien zurückgreifen, dass im Editor vorhanden ist (...und noch keinem Raumschiff zugewiesen ist) Dazu benötige ich also TUFO.AddAlien? oder muss da noch was mit der ID gemacht werden?
verfasst am: 30.07.2007, 13:09
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beiträge: 5596
Zitat: BlackBetty
Dazu benötige ich also TUFO.AddAlien? oder muss da noch was mit der ID gemacht werden

Das AddAlien braucht die ID um zu wissen, welches Alien addiert werden soll...
Und für ein einzelnes UFO solltest Du das wirklich im TUFO und nicht im TUFOModell machen.
verfasst am: 30.07.2007, 15:29
Registrierdatum: 27.06.2007, 12:16

 Beiträge: 658
Zitat: DirkF
Das AddAlien braucht die ID um zu wissen, welches Alien addiert werden soll...


Das hab ich nicht gewusst. Dann heißt das dann: TUFO.AddAlien := ID ?


Zitat: DirkF
Und für ein einzelnes UFO solltest Du das wirklich im TUFO und nicht im TUFOModell machen.

ich versuch das mal vorläufig so. Ich muss erstmal bisschen Grundwissen sammeln und guck zuerst mal ob diese Form des Scriptes funzt :) Dann werd ich was anderes ausprobieren.
verfasst am: 30.07.2007, 15:32
Programmierer

Registrierdatum: 23.08.2003, 19:16

 Beiträge: 2261
Zitat: BlackBetty
Das hab ich nicht gewusst. Dann heißt das dann: TUFO.AddAlien := ID ?
Nein.
AddAlien ist eine Funktion und erwartet als Parameter die ID. Also TUFO.AddAlien(ID). Und statt TUFO musst du natürlich deine UFO Variable nehmen ;)
verfasst am: 30.07.2007, 15:47
Registrierdatum: 27.06.2007, 12:16

 Beiträge: 658
Ahhhh, da hab ich wieder mal Funktion mit Prozedur verwechselt (ich Anfänger >.< xD) ;)

Danke für die Hilfe ^^ Werd das ganze Zeuch mal testen...
verfasst am: 30.07.2007, 15:59
Programmierer

Registrierdatum: 23.08.2003, 19:16

 Beiträge: 2261
Zitat: BlackBetty
Ahhhh, da hab ich wieder mal Funktion mit Prozedur verwechsel
Ähh. MMh. Ob Prozedur oder Funktion ist egal. Entscheidend ist nur, dass ID ein Parameter von AddAlien ist und Parameter werden in Klammern übergeben.

Ich habe mich übrigens falsch ausgedrückt. Korrekterweise wäre AddAlien eine Prozedur, da es keinen Rückgabewert hat.
Aber ich will dich nicht zu sehr verwirren ^^
verfasst am: 30.07.2007, 16:02
Programmierer, allgemeines

Registrierdatum: 06.06.2004, 17:19

 Beiträge: 3186
Zitat: Jim_Raynor
Korrekterweise wäre AddAlien eine Prozedur

Sagen wir doch einfach, es ist eine Methode von TUFO...

Zitat: Jim_Raynor
Aber ich will dich nicht zu sehr verwirren

dito ;)
verfasst am: 30.07.2007, 16:08
Registrierdatum: 27.06.2007, 12:16

 Beiträge: 658
Zitat: Jim_Raynor
Ähh. MMh. Ob Prozedur oder Funktion ist egal. Entscheidend ist nur, dass ID ein Parameter von AddAlien ist und Parameter werden in Klammern übergeben.


Mir war klar dass ich mit meinen vorigen Post nicht richtig lag ;)

Zitat: Jim_Raynor
Ich habe mich übrigens falsch ausgedrückt. Korrekterweise wäre AddAlien eine Prozedur, da es keinen Rückgabewert hat.
Aber ich will dich nicht zu sehr verwirren ^^


Nana glaub nicht, dass ich absolut NULL Ahnung habe, den Tutorial hab ich mir einige Male angeschaut ;)
verfasst am: 27.01.2022, 13:29
Registrierdatum: 27.01.2022, 13:07

 Beiträge: 318
Any team would be lucky to have you on it. https://homehealthcarewacotx.com
verfasst am: 13.06.2022, 17:56
Registrierdatum: 29.10.2021, 14:57

 Beiträge: 763
Good article, but it would be better if in future you can share more about this subject. Keep posting. metalbuildingsbatonrouge.com

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




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

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