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
|
|
|
verfasst am: 13.06.2022, 17:56
|
Registrierdatum: 29.10.2021, 14:57
Beiträge: 763
|
|
Seite: 1 [2] [3] [4] [5] [6] [7] [8] [9] [10] .. [12] [13] >> |