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] .. [28] [29] >>

Autor Mitteilung
verfasst am: 25.05.2006, 17:17 · Edited by: Natter
Programmierer, allgemeines

Registrierdatum: 06.06.2004, 17:19

 Beiträge: 3186
Zitat: LennStar
var
EWin: TEinsatz;
begin
savegame_api_Message('Diese Mission ist gewonnen.',lmMissionMessage,EWin);

Problem ist doch schon, dass EWin ja noch kein wirklicher Einsatz ist. Außerdem brauchst du für savegame_api_messgageBox kein Objekt wie einen Einsatz oder ein UFO. Der zusätzliche Button macht ja nicht immer Sinn. Im allgemeinen sollte man den Wert Nil angeben (also savegame_api_messgageBox('Text',lmMissionMessage,Nil) ). Aber ob das für den Absturz verantwortlich ist...
verfasst am: 25.05.2006, 17:39
Registrierdatum: 26.03.2006, 08:29

 Beiträge: 83
@Lennstar: welche version benutzt du, alpha-2 oder alpha-3?
bei mir ist das spiel auch jedes mal abgestürzt, wenn ich lager_api_putitems verwendet habe, das war in der alpha-2. mit der alpha-3 geht das sehr gut.
verfasst am: 25.05.2006, 17:42 · Edited by: LennStar
Spielsatz Darkage

Registrierdatum: 01.03.2005, 13:47

 Beiträge: 1846
Das funktionierte ja prima. Das Problem gibts erst wenn es zum Lager kommt. Wenn du das lager_api ausstellst, läufts durch.
Zitat: Natter
Im allgemeinen sollte man den Wert Nil angeben (also savegame_api_messgageBox('Text',lmMissionMessage,Nil) ).

Dann schreib das gleich in die online-Doku ;) Hab schon überlegt, wollte ja weder TUFO noch TEinsatz

Und nein, das ist nicht der Absturzgrund.
verfasst am: 25.05.2006, 17:45 · Edited by: LennStar
Spielsatz Darkage

Registrierdatum: 01.03.2005, 13:47

 Beiträge: 1846
Zitat: ArneL
@Lennstar: welche version benutzt du, alpha-2 oder alpha-3?
bei mir ist das spiel auch jedes mal abgestürzt, wenn ich lager_api_putitems verwendet habe, das war in der alpha-2. mit der alpha-3 geht das sehr gut.

alpha 2. Wann ist die 3 rausgekommen? Die Versions-Nachrichten sind das einzige, das ich nicht bekomme, warum auch immer. >.< Alle Nachrichten angestellt und nicht-spam-filternde-email...

probier gleich mal

GEHT! zumindest stürzt der editor nicht ab. Ich spiels gleich mal

Funktioiert. Brauchst sich also keiner durch ID´s zu wühlen.
verfasst am: 25.05.2006, 18:10
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beiträge: 5596
Für die untergeordneten Testversionen gibt es keine Mails - da hatte Jim nur einmal im Forum gepostet, und das war auch erst einen Tag nachdem sie schon längst im Updater zur Verfügung stand...
verfasst am: 25.05.2006, 18:49
Spielsatz Darkage

Registrierdatum: 01.03.2005, 13:47

 Beiträge: 1846
Naja, jetzt gehts ja. Viel Sturm um nichts.

Dann werd ich mich wohl an die externe Konstantenliste machen, die DirkF vorgeschlagen hat.

@DirkF: welche ist das bei dir? Eigentlich muss da ja nicht viel drin sein außer die Konstanten, oder?
verfasst am: 25.05.2006, 18:56
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beiträge: 5596
Genau genommen habe ich zwei Konstantenblöcke - weil die UFO-Daten zu umfangreich sind um über Standart-Konstanten verwaltet zu werden.

Def_BUFOAaccess enthält dementsprechend Funktionen, die aus der in DefBUFOBdata gespeicherten Zeichenkette gezielt Informationen abrufen.

GWconstants ist dagegen die klassische Konstanteneinheit wie ich sie Dir vorgeschlagen habe (allerdings wird die sich im Verlauf der Weiterentwicklung auch noch umstellen und teilweise verschwinden, weil das eine Uralt-Datei ist wo auch noch jede Menge Müll drin ist der nicht mehr der aktuellen Planung entspricht.

IDs gibt es nur in der UFO-Datei, die GWconstants sind hauptsächlich Steuerkonstanten für eine etwas komplexere nichtlineare Spielsteuerung.
verfasst am: 26.05.2006, 01:55
Registrierdatum: 08.08.2005, 02:29

 Beiträge: 119
Hmmm ich glaube es sollte mal ein IRC channel oder TS-server eingerichtet werden fuer Lennstar Fragerunde ! :-)
verfasst am: 26.05.2006, 09:54
Spielsatz Darkage

Registrierdatum: 01.03.2005, 13:47

 Beiträge: 1846
Ich kann aber höchstens mit skype dienen. ^^
verfasst am: 26.05.2006, 11:36 · Edited by: LennStar
Spielsatz Darkage

Registrierdatum: 01.03.2005, 13:47

 Beiträge: 1846
Also so ganz komm ich da noch nicht mit. Das war eindeutig nicht in meinem Schulpascal ^^ Ich schreib mal so, wie ich es mir denke:


Ich habe ein script, das durch random eine Zahl ausgibt, nach der dann verschiedene scripte ausgeführt werden sollen. (leicht veränder- und erweiterbar ^^)

Also i=1 bis 3 ruft mein Ressourcensammelscript auf, 4-8 fügt nur Ressourcen hinzu, 9-11 macht noch etwas anderes etc.

In die if-schleifen der Auswahl muss ich dann das
uses X1
eintragen, und die verwendeten scripte statt mit program mit unit beginnen.

Muss dann der Teil in diesen Uses drinstehen? Ich denke mal ja. Der Missionstype gilt ja dann für das in dem Uses, richtig?
begin
  // Hier darf kein weiterer Code folgen
  // Missionsname festlegen
  MissionName := 'Ressourcenbeschaffung';

  // 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;

end.


Dann hab ich ja noch meine Konstanten. Also mal grob:
unit const
const
X1: integer=ID
X1: integer=ID
X1: integer=ID

und fertig?
In jedes script, das die Konstanten braucht nur noch das uses rein und dann die Konstanten eintippen wo sie gebraucht werden?

***
wie kann ich diesem script sagen, dass es sich selbst alle 24 Stunden aufrufen soll?
Also nach einer Forschung als Voraussetzung soll es einmal täglich durchlaufen werden. (möglichst zu einer bestimmten Uhrzeit) Das soll den Arbeitstag simulieren.
verfasst am: 26.05.2006, 12:21
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beiträge: 5596
Stell Dir (grob vereinfacht) die uses als Platzhalter für die units vor. D.h. die unit muss so geschrieben werden das Du theoretisch den ganzen Inhalt der unit an die Stelle kopieren kannst wo im Programm das uses steht, und dann muss das Programm immer noch laufen können.

d.h.
1.) hat in den Units das missiontype nichts zu suchen, das wäre dann ja doppelt im Programm
2.) kommen uses vor alle Befehle, du kannst den Befehl uses nicht in einen Programmbefehl hineinpacken.
3.) wenn Du in einer unit also eine Konstante definierst oder eine Funktion, dann kannst Du sie im ganzen Programm so nutzen alsob Du sie am Programmanfang definiert hättest.

***
Für wiederholte Prüfungen schau mal in das SPS001-Skript in der GalWar-Demo, das erzeugt im Wesentlichen eine alle 8 Stunden aufgerufene Prüfung auf Veränderungen im Spielphasenstatus - schmeiß die Prüfungen und Spezialfunktionen raus und Du hast ein Gerüst für Deine Funktion.
Das ganze läuft über Events, bei denen Du die Objekteigenschaft "repeated" auf true setzt...
(und Du kannst nur Funktionen sagen das sie sich selber wiederholt aufrufen müssen, nicht Skripten - und es muss auch sichergestellt werden das das Skript mit dieser sich wiederholenden Funktion nie beendet wird, deshalb schau Dir die Vorlage an...)
verfasst am: 26.05.2006, 12:27 · Edited by: ArneL
Registrierdatum: 26.03.2006, 08:29

 Beiträge: 83
Zitat: LennStar
Muss dann der Teil in diesen Uses drinstehen? Ich denke mal ja. Der Missionstype gilt ja dann für das in dem Uses, richtig?

Schau dir die Datei GWConstants aus GalWar-Demo an, da ist weder Missionsname noch -typ angegeben. Für den Namen solltest du vielleicht eher 'Konstanten' oder so nehmen, 'const' ist ja ein reserviertes Wort zum erstellen von Konstanten, da weiß ich nicht, ob das zu Fehlern führen kann.
Für das wiederholende Aufrufen gibt es zwei Optionen, erstens: Du baust in die Prozedur onMissionWin noch einen Aufruf mission_api_StartSkript('Skriptname'); ein und löst das mission_win mit Hilfe eines TTimerEvent aus.
Zweitens: Du schreibst eine Prozedur, in der du den gewünschten Effekt einbaust und rufst die alle 24 Stunden mit einem TTimerEvent auf. Beispiele:
erstens
var event : TTimerEvent;
procedure onMissionWin;
begin
  mission_api_StartSkript('Skriptname') //hier kommt der Aufruf
end;
procedure win(Sender : TObject);
begin
  mission_win;
end;
procedure Startmission;
begin
  event := register_timed_event(@win, nil, 1440); //event erstellen zum aufrufen von win; nach 24h
  event.Repeated := true; //event wiederholt sich
end;
zweitens:
var event : TTImerEvent;
procedure wiederholung(Sender : TObject);
begin
  //Hier kommen die Effekte
end;
procedure Startmission;
begin
  event := register_timed_event(@wiederholung, nil, 1440); //event zur wiederholung alle 24 h erstellen
  event.Repeated := true;
end;


Edit: Mal wieder zwei gleich schnell...
verfasst am: 26.05.2006, 12:45
Spielsatz Darkage

Registrierdatum: 01.03.2005, 13:47

 Beiträge: 1846
Zitat: ArneL
Für den Namen solltest du vielleicht eher 'Konstanten' oder so nehmen, 'const' ist ja ein reserviertes Wort zum erstellen von Konstanten, da weiß ich nicht, ob das zu Fehlern führen kann.

Darum schrieb ich "grob". Ich werd die Konstanten ja auch nicht X1 X2 und X3 nennen. ;)

Gut, ich seh mir das dann mal an. Im Moment sitzt ich noch (bzw. seit 10 Minuten) an dem Namen-eingebe-script vom Standardsatz.
Darin steht ja auch das
mission_api_StartSkript('Einleitung')
wenn ich das verwende, muss das script aber komplett sein (missiontype). Ich denke, das ist für meine Zwecke besser geeignet als ein uses.
Das ist doch vom Ablauf her egal, ob per mission_api_StartSkript aufgerufen oder per uses eingebunden? Nur halt der Inhalt ist etwas anders und die Sache mit den Konstanten.
verfasst am: 26.05.2006, 13:06
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beiträge: 5596
Da bringst Du glaube ich was durcheinander - units und mission_api_StartSkript haben völlig verschiedene Funktionen und Anwendungsbereiche.

Was willst Du GENAU machen?
verfasst am: 26.05.2006, 13:20 · Edited by: LennStar
Spielsatz Darkage

Registrierdatum: 01.03.2005, 13:47

 Beiträge: 1846
Wie es oben steht- ein script, das regelmäig aufgerufen wird, und dann verschiedene Aktionen auslöst.
Ich rede da nicht von der Konstanten-Datei.
Die Aktionen sind dann z.B. das, was ich gestern und vorgestern gebastelt habe- die Bodenmission mit den Ressourcen. (Die wiederum soll die Konstenten-uses benutzen)

also etwas so (und nicht auf komplette Syntax achten ;) )
random-Zahl i
if i=X
script Ressourcensammeln
if i=Y
script nurRessourcenHinzufügen
if i=Z
script gelandetes UFO

und was mir noch so einfällt und später hinzugefügt werden könnte.
Wobei einige der Teile sicher auch als Zufalls-script verwendbar sind, z.B. das mit dem gelandeten UFO. Das muss dann aber komplett sein und hier mit startSkript eingefügt werden.

***

Ich hab jetzt die beiden scripts vom Standardpack kopiert und die Textzeilen geändert. Es läuft im editor alles korrekt durch, im Spiel aber erscheint
globale var "Spielername" nicht registriert
oder so ähnlich zumindest.
Wie gesagt, mitten drin im script habe ich nichts verändert, nur die Textboxen. Was fehlt mir also?
verfasst am: 26.05.2006, 17:49 · Edited by: DirkF
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beiträge: 5596
Zitat: LennStar
also etwas so (und nicht auf komplette Syntax achten ;) )
random-Zahl i
if i=X
script Ressourcensammeln
if i=Y
script nurRessourcenHinzufügen
if i=Z
script gelandetes UFO


Dafür kannst Du eigene Scripte nutzen - wenn Du mehr als 3 Zufallsoptionen nutzen willst solltest Du aber besser mit CASE statt IF arbeiten:

  dummy:=random(4);
  case dummy of
    1: mission_api_StartScript(script1);
    2: mission_api_StartScript(script2);
    3: mission_api_StartScript(script3);
    4: mission_api_StartScript(script4);
  end;


Zitat: LennStar
globale var "Spielername" nicht registriert

Das ist doch die Fehlermeldung: jede globale Variable muss vor der Benutzung registriert werden.
Die Registrierung geht auf 2 möglichen wegen - entweder per Scriptbefehl oder per Schwierigkeitsgrad.
Wenn die Variable nur lokal verwendet wird oder nur für interne Berechnungen, dann solltest Du die Initialisierung per Script machen - siehe z.B. UKI_AAinit (und dort den init-Befehl).

Wenn die globale Variable dagegen übergeordnete Bedeutung hat oder sich je nach Schwierigkeitsgrad unterscheiden soll, dann kann man sie auch in den Schwierigkeitsgraden definieren - das sollte der Übersichtlichkeit halber aber so wenig wie möglich gemacht werden.

Natter hat die Variable bei sich im 00Starteinstellungen definiert - ist dort der erste Befehl der procedur StartMission.

Ich vermute mal das Du die Scripte zwar kopiert, aber nicht zum Spielstart als erstes das Registrierungsscript ausgeführt hast?
Die Register-Befehle für die globalen Variablen MÜSSEN vor der ersten Benutzung dieser Variablen aufgerufen werden, deshalb werden sie üblicherweise in ein Startscript gelegt bzw. aus einem Startscript aufgerufen.
Wenn Du also die Einleitung aufrufst bevor die 00Starteinstellungen abgelaufen sind, hast Du Pech gehabt.

edit:
Und im Scripteditor funktioniert das weil dort noch ein $ifdefine-Befehl aus dem Scripttest übrig geblieben ist, der nur im Scripteditor durchgeführt wird und dort in der Einleitung die Variablen definiert - klassisches Eigentor ;-)
Am besten die $ifdefine-Sequenz aus dem Script löschen, die bringt im Spiel nichts und dient nur zum Test im Editor (wo der Rest der Spielscripte fehlt)
verfasst am: 26.05.2006, 18:04
Spielsatz Darkage

Registrierdatum: 01.03.2005, 13:47

 Beiträge: 1846
Zitat: DirkF
wenn Du mehr als 3 Zufallsoptionen nutzen willst solltest Du aber besser mit CASE statt IF arbeiten:

Darüber hab ich auch schon nachgedacht. Ich bin nur nicht sicher, ob ich das übersichtlicher finde. Ich mag eigentlich if-Treppen.^^
Aber man kann doch sicher auch eingeben
1,2,3,4: längeres begin/end
oder?

***
Ich bekomme jetzt folgende Fehlermeldung:
Laufzeitfehler in Zeile 33 aufgetreten: [mission_api]
Script nicht im Spielsatz gefunden (C:xforce-SandboxV910gameSourceComponentsMissionLsst.pas, line 899)
Ist das immer (im editor), wenn man auf andere scripts zugreift (schließlich gibts das Verzeichnis gar nicht), oder ist da ein Fehler?

Code ohne Text (wegen Breite)

procedure StartMission;
  var
    Losschicken: Boolean;  //Sammler loschicken ja/nein
    Auswahlzahl: integer;  //Zufallszahl für Missionstyp
    ZZahl: integer;        //Anzahl
    ZielBasis: TBasis;
begin
  Losschicken:= game_api_Question(*' ,'Sammler ausschicken?');
  if not (Losschicken) then
    begin
      game_api_MessageBox(*.');
    end
  else
    begin
      Auswahlzahl:= random(10);
      if (Auswahlzahl)<3 then
        begin
          ZielBasis:= basis_api_GetMainBase;
          ZZahl:= random(10)+1
          lager_api_PutItems(ZielBasis.ID,1476478364,ZZahl);   //Elektronikschrott
          ZZahl:= random(10)+7
          lager_api_PutItems(ZielBasis.ID,72216835,ZZahl);     //Kunststoffreste
          ZZahl:= random(10)+5
          lager_api_PutItems(ZielBasis.ID,132230505,ZZahl);    //Metallschrott
          ZZahl:= random(10)+3
          lager_api_PutItems(ZielBasis.ID,3056462527,ZZahl);   //Stahlschrott
          savegame_api_Message((. ',lmMissionMessage,Nil);  //Win-Nachricht, Belohnung
        end
       else
         begin
           mission_api_StartSkript('Ressourcenbeschaffung');
         end;
       
    end;
  
end;
verfasst am: 26.05.2006, 18:19
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beiträge: 5596
Er findet das Script "Resourcenbeschaffung" nicht - mit welchem Namen steht das denn im Spielsatz (muss identisch sein), und steht das auch auf "manueller Aufruf" (zweiter Standartfehler)?
verfasst am: 26.05.2006, 18:28 · Edited by: LennStar
Spielsatz Darkage

Registrierdatum: 01.03.2005, 13:47

 Beiträge: 1846
Zitat: DirkF
Er findet das Script "Resourcenbeschaffung" nicht - mit welchem Namen steht das denn im Spielsatz (muss identisch sein), und steht das auch auf "manueller Aufruf" (zweiter Standartfehler)?

Es stht noch gar nicht im Spielsatz (d.h. jetzt schon)- ich bearbeite das oben ja noch im medit, der wüsste sowieso nicht, in welchen Spielsatz er schauen sollte. Im Verzeichnis stehts Ressourcenbeschaffung.xms und auch der missionname da drin ist ist Ressourcenbeschaffung.

Darum ja auch meine Frage: Tritt das immer auf im medit-Durchlauf mit F9 (ums mal zu präzisieren)
verfasst am: 26.05.2006, 18:32
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beiträge: 5596
Der Scriptaufruf hat sich im neuen Editor geändert - medit schaut jetzt in den Spielsatz und nicht mehr in die Missionsverzeichnisse, d.h. er wird deine XMS-Datei nie finden wenn sie nicht im Spielsatz liegt...
Da gab es auch irgendwo ein Mantis-Ticket dazu...

Seite: << [1] [2] 3 [4] [5] [6] [7] [8] [9] [10] .. [28] [29] >>




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

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