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
|
|
|
verfasst am: 13.10.2008, 14:58
|
Registrierdatum: 22.08.2008, 15:51
Beiträge: 403
|
|
|
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
|
|
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] >> |