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 —› Falscher Bodeneinsatz nach Abschuss

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

Autor Mitteilung
verfasst am: 06.10.2008, 21:51 · Edited by: Kreks
Registrierdatum: 22.08.2008, 15:51

 Beiträge: 403
Ich muss mal wieder nerven:
In meinem Skript erzeuge ich ein UFO, das Wahlos über die Erde fliegt mit keiner Besatzung an Bord. Wird es über Wasser abgeschossen, soll ein Transporter zur Hauptbasis fliegen und dort die Wrackteile abliefern(Grundsteine für die Forschung). Wird es über Land abgeschossen, hab ich im Spielsatz eine genaue Kopie des UFOs, dass allerdings eine Bessatzung hat, wird ein Bodeneinsatz gestartet. Beim Sieg wird ebenfalls ein Transporter gestartet, der Wrackteile transportiert. Bei jeder Sichtung eines UFOs sickert auch ein kleines bischen durch die Geheimhaltung.
So sollte das Skript laufen, und so läuft es tatsächlich:
Beim Abschuss über Wasser wird kein Transporter gestartet und es kommen keine Wrackteile in der Basis an.
Wird es über Land abgeschossen, wird ein Bodeneinsatz mit null Aliens gestartet, der die Bezeichnung "Einsatz 2" trägt. Außerdem wird die Messagebox nicht angezeigt (die hab ich eingebaut, um zu prüfen ob die Prozedur aufgerufen wird.
Gibts Vorschläge dazu?

program Spaehschiff;
//Dieses UFO fliegt wahllos über die Erde und ignoriert alles

procedure WeiterFliegen(SenderID : TObject);
begin
  TUFO(SenderID).FlyToPoint(earth_api_randomPoint(true));
end;

procedure Escape(SenderID : TObject);
begin
  TUFO(SenderID).Escape;
  mission_lose;
end;

procedure ZeitUm(SenderID : TObject);
begin
  mission_lose;
end;

procedure Angekommen(SenderID : TObject);
begin
  storage_api_PutItems(base_api_GetMainBase.ID,3177279748,2);
  mission_win;
end;

procedure Fertig(SenderID : TObject);
var
  transporter : TAircraft;
begin
  if (TGround(SenderID).Result = grWin) then begin
    transporter := TAirCraft.Create;
    transporter.Position := TGround(SenderID).Position;
    transporter.FlyToPos(base_api_GetMainBase.Position);
    transporter.Name := 'Wrackteiltransporter';
    register_event(@Angekommen,transporter,EVENT_ONAIRCRAFTREACHEDDEST);
    register_event(@ZeitUm,transporter,EVENT_ONAIRCRAFTSHOOTDOWN);
  end;
end;

procedure Bodeneinsatz(SenderID : TObject);
var
  Einsatz : TGround;
  transporter : TAircraft;
begin
  game_api_MessageBox('Bodeneinsatzstart');
  if (earth_api_PointOverLand(TUFO(SenderID).Position)) then begin
    game_api_SetInteger('geheim',game_api_GetInteger('geheim') - 2);
    Einsatz := ground_api_generateGround;
    Einsatz.Position := TUFO(SenderID).Position;
    Einsatz.PopulateFromUFO(ufo_api_GetUFOByIndex(704123988));
    Einsatz.AddAlien(alien_api_GetRandomAlien);
    Einsatz.Show;
    Einsatz.RemainTime := 60*12;
    register_event(@ZeitUm,Einsatz,EVENT_ONGROUNDTIMEUP);
    register_event(@Fertig,Einsatz,EVENT_ONGROUNDFINISHED);
  end else begin
    transporter := TAirCraft.Create;
    transporter.Position := TUFO(SenderID).Position;
    transporter.FlyToPos(base_api_GetMainBase.Position);
    transporter.Name := 'Wrackteiltransporter';
    register_event(@Angekommen,transporter,EVENT_ONAIRCRAFTREACHEDDEST);
    register_event(@ZeitUm,transporter,EVENT_ONAIRCRAFTSHOOTDOWN);
  end;
end;

procedure StartMission;
var
  model : TUFOModel;
  ufo : TUFO;
begin
  game_api_SetInteger('geheim',game_api_GetInteger('geheim') - 1);
  ufo_api_GetUFOModelByID(1530811565,model);
  ufo := ufo_api_CreateUFOFromModel(model);
  ufo.UserKI := true;
  ufo.FlyToPoint(earth_api_randomPoint(true));
  
  register_mission_object(ufo);
  register_timed_event(@Escape,ufo,60*24);
  register_event(@WeiterFliegen,ufo,EVENT_ONUFOCOMMANDCOMPLETE);
  register_event(@Bodeneinsatz,ufo,EVENT_ONUFOSHOOTDOWN);
end;

begin
  MissionName := 'Spähschiff';
  MissionType := mzUser;
end.


verfasst am: 07.10.2008, 00:02
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beiträge: 5596
Ich würde sagen, es gibt direkt zwei Fehler.

TAircraft.create erzeugt ein TAircraft-Objekt ohne Daten - woher soll dieser Befehl denn wissen wie schnell der Transporter fliegen soll etc?
Und deshalb wird das Objekt als ungültig sofort wieder gelöscht...

Besser ist es, Du nutzt für soetwas die aircraft-funktionen, bei denen können auch gleich Vorlagen genutzt werden.
Oder noch besser, gleich das Land ermitteln in dem das UFO abgestürzt ist und dann aircraft_api_dotransporttobase nutzen...

2. Fehler - und der würde selbst bei korrektem Transport die Objekte verschwinden lassen:
PutItems dürfte (falls Natter das nicht in den letzten Monaten geändert hat) nur Items in die Basis einlagern, die bereits in der Lagerliste vorhanden sind - sind es neue Artefakte dann sind sie automatisch gelöscht.
Deshalb nutze ich beim rätselhaften UFO ja auch den Umweg über die Alien-Erforschung, um die seltsamen Waffenartefakte verfügbar zu machen...

Als Alternative kannst Du so vorgehen wie ich das mit einigen der Aliens (z.B. den Alien-Irrlichtern) gemacht habe: Ich habe der Rüstung der Irrlichter eine Beschreibung gegeben als sei dies der "Körper" der Irrlichter, und die Komponenten sind dann die verschiedenen Bauteile und Roboter-Systeme...

Es ist allerdings geplant, auch die UFOs zu Forschungsobjekten zu machen, die auch Erweiterungen wie die Flugzeuge tragen - das wird allerdings erst mit der Umstellung des Flugzeugkonzeptes geschehen, und da liegen die Planungen momentan auf Eis...
verfasst am: 07.10.2008, 00:08
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beiträge: 5596
registermissionObject bringt übrigens nichts, solange MissionType:=mzUser, dafür brauchst Du MissionType:=mzObjects.
Hier würde ich es aber weglassen, da Du sowieso schon mit mission_win und mission_loose arbeitest, das schließt sich aus...
verfasst am: 07.10.2008, 23:22
Registrierdatum: 22.08.2008, 15:51

 Beiträge: 403
Ich hab so manch wüste Idee ausprobiert da ich die (seltsamen) Eigenheiten von anderen Programmiersprachen kenne.
TAircraft erzeugt ein vollwertiges Flugzeug à la denen, die man auch im Editor erzeugen kann?

Hab grad die Referenz geprüft... das bringt mich auf noch wüstere Ideen...

Ich hab jetzt erstmal was, an dem ich arbeiten kann, aber wie schaut das mit dem Bodeneinsatz mit null Aliens aus?
verfasst am: 08.10.2008, 06:36
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beiträge: 5596
Zitat: Kreks
TAircraft erzeugt ein vollwertiges Flugzeug à la denen, die man auch im Editor erzeugen kann?

TAircraft.create würde ich nie benutzen, da das eine ererbte Methode ist auf die wir wenig Einfluss haben und bei der man wenig machen kann.

Besser:
Mit XSkriptReferenz.AircraftapiGetAircraftModelByID ein Flugzeugmodell aus dem Editor kopieren, danach kann man die Werte bei Bedarf ändern und als drittes mit
XSkriptReferenz.AircraftapiBuildAircraftPerScript
das Flugzeug in der entsprechenden Basis erzeugen.

Temporäre Transporter sollte man gar nicht selber erzeugen, sondern die DOTransport-Funktionen benutzen.
Zitat: Kreks
aber wie schaut das mit dem Bodeneinsatz mit null Aliens aus

Zuerst mal klären, woher der Einsatz überhaupt kommt - ist der erzeugte Einsatz durch das Skript erzeugt oder ist es ein automatisch erzeugter Einsatz und die Skriptfunktion scheitert schon früher?
Denn zumindest in diesem Skrpt schaltest Du die automatischen Bodeneinsätze nicht ab, wenn Du das auch in keinem anderen Skript tust (einmal reicht für den ganzen Spielsatz), dann wird bei jedem Abschuss über Land automatisch ein eigener Bodeneinsatz erzeugt...
verfasst am: 08.10.2008, 12:02
Registrierdatum: 22.08.2008, 15:51

 Beiträge: 403
Zitat: DirkF
in diesem Skrpt schaltest Du die automatischen Bodeneinsätze

Mir war nicht bewusst, dass das möglich ist, klingt aber nach der Wurzel allen Übels. Ich hab hier im Forum und im Wiki nichts davon gefunden, wie deaktiviert man also den autoamtischen Bodeneinsatz?
verfasst am: 08.10.2008, 12:24 · Edited by: DirkF
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beiträge: 5596
Zitat: Kreks
klingt aber nach der Wurzel allen Übels.

Ist es definitiv nicht - wenn das Skript funktionieren würde und die automatischen Bodeneinsätze wären gleichzeitig aktiv, dann hättest Du zwei Bodeneinsätze an dieser stelle.
Da Du nur einen hast und die Automatik aktiv ist, bedeutet das das das Skript komplett versagt und keinen Bodeneinsatz erzeugt...
Zitat: Kreks
wie deaktiviert man also den autoamtischen Bodeneinsatz?

Im Skripteditor im Browserfenster links sollte es einen Eintrag "Globale Variablen:Spielsatzname" geben.
(wenn dort noch der galaktische Krieg eingestellt ist, solltest Du den Skripteditor über die Einstellungen auf Deinen Spielsatz umlenken, das vereinfacht viele Zugriffe)

Darunter sind alle globalen Variablen gelistet, die entweder Programmintern oder über die Schwierigkeitsgrade im Spielsatz definiert sind.
Sie können mit den entsprechenden Befehlen unter Angabe des Namens abgefragt und geändert werden, und dazu zählen auch eine Reihe von Flags zum ein- und ausschalten einzelner Programmteile oder Meldungen.


Überprüfe als erstes mal was überhaupt von Deinem Skript funktioniert, indem Du alle Funktionen mit Meldungen versiehst - Ich habe nämlich den Verdacht das sich das sofort beendet, da Du mit den Siegesbedingungen durcheinander gekommen bist.
Und Du merkst das eventuell nicht, weil die angeblich programmierte KI sowieso nichts anderes macht als die übliche alte Zufalls-KI...
(Besser Du verzichtest gleich auf die eigenen Zufallsziele und lässt die interne KI aktiv, setzt aber die Scanreichweite des UFOs auf 0 - was es nicht sieht, darauf kann die interne KI auch nicht reagieren)
verfasst am: 08.10.2008, 21:11
Spielsatz Darkage

Registrierdatum: 01.03.2005, 13:47

 Beiträge: 1846
Zitat: Kreks
wie deaktiviert man also den autoamtischen Bodeneinsatz?

Wirf mal einen Blick da rein
http://doc.xforce-online.de/ger_pages/XSkriptTemplates/SkripterandomUF O.html
verfasst am: 13.10.2008, 14:58
Registrierdatum: 22.08.2008, 15:51

 Beiträge: 403
Ich hab mal das Tutorial Beispiel
http://doc.xforce-online.de/ger_pages/XSkriptTutorial/Kapitel3-6.html
eins zu eins kopiert und ausprobiert. Es kam nicht zu der Meldung Bossufo wurde abgeschossen. Kann das bitte mal jemand überprüfen, ob das Problem bei mir liegt.
verfasst am: 13.10.2008, 15:23
Programmierer, allgemeines

Registrierdatum: 06.06.2004, 17:19

 Beiträge: 3186
Hmm, zumindest in medit funktioniert es bei mir. Im Spiel kommt die Meldung natürlich nur, wenn das Bossufo auch wirklich abgeschossen wurde.

Du kannst ja mal in medit die Variablennsicht öffnen, und dann das Skript mit Einzelschritt ausführen, vielleicht findest du dann die Stelle, wo es hängt. Oder hast du das Problem nur in XForce, nicht aber in medit?
verfasst am: 13.10.2008, 17:25
Registrierdatum: 22.08.2008, 15:51

 Beiträge: 403
Ich hab das Problem in medit und in XForce, dann liegt das Problem scheinbar bei mir. Dann muss ich mir wohl was neues überlegen. Danke.
verfasst am: 13.10.2008, 17:46
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beiträge: 5596
@Kreks:
Zusammen mit den anderen Problemen in den früheren Skripten würde ich einfach mal sagen, dass Deine Installation beschädigt ist - hast Du schonmal versucht in ein anderes Verzeichnis neu zu installieren?

Wenn das nichts bringt, stell doch mal den kompletten Spielsatz online damit man testen kann, ob derselbe Effekt auch bei anderen Spielern auftritt...
verfasst am: 22.11.2023, 09:47
Registrierdatum: 22.11.2023, 07:10

 Beiträge: 47355
инте134.1BettBettXVIISamaÑтудThomPalaPoiniMPAFiskBarbOrieÐлешsingWaynPJ85FortSentДумбThomВеде
AlphГозеRaymGeorPenhHomeGypsÑоавШишкÑертСодезнатСтепSupePlaiКаÑаÐрлаFyodврагРадиДугиJaneSala
LoveCaroAndyYvesÑторКацуÑкоммолиочерWernФереImagСадоEnerГромKeigÐикиRobeпатрÐекрХилпPierJohn
ÑертTombТрубздеÑИллюDeadMickPlugТопиWindKissClanGardArtsИллюRighÑÑылAreaпонÑDreaDaniLancXIII
diam(184FuxiSwarMiyoGeorпришNicoXVIIAndrBillTranSacrGuilAllaPrelбиблRobbSwarSanoHaveKingChar
LastукракаркOPENклейbalaVestStopХаликартDaniMadhРазмLuxeCodeхудоплаÑSQuiRefeKenwкомпоперPost
RollEducEditSantПокрКитаBiliWindwwwnPanoчернKenwBorkAngeупакHarr
verfasst am: 01.12.2023, 11:24
Registrierdatum: 22.11.2023, 07:10

 Beiträge: 47355
ÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайт
ÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайт
ÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайт
ÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайт
ÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайт
ÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайт
ÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайтÑайт
verfasst am: 11.01.2024, 15:32
Registrierdatum: 22.11.2023, 07:10

 Beiträge: 47355
verfasst am: 11.01.2024, 15:33
Registrierdatum: 22.11.2023, 07:10

 Beiträge: 47355
verfasst am: 11.01.2024, 15:34
Registrierdatum: 22.11.2023, 07:10

 Beiträge: 47355
verfasst am: 11.01.2024, 15:35
Registrierdatum: 22.11.2023, 07:10

 Beiträge: 47355
verfasst am: 11.01.2024, 15:37
Registrierdatum: 22.11.2023, 07:10

 Beiträge: 47355
verfasst am: 11.01.2024, 15:38
Registrierdatum: 22.11.2023, 07:10

 Beiträge: 47355

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




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

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