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] .. [17] [18] >>

Autor Mitteilung
verfasst am: 26.05.2006, 18:33 · Edited by: DirkF
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beiträge: 5596
Zitat: LennStar
der wüsste sowieso nicht, in welchen Spielsatz er schauen sollte.

Dann würde ich ihm das mal unter seinen Einstellungen im Datei-Menue verraten ;-)

Außerdem wird das in der 910 automatisch erkannt und zugeordnet, wenn Du den medit aus dem Spielsatz und nicht separat aufrufst, dann schaltet er beim XMS-Laden nämlich auf ein temporäres Verzeichnis wo nur die Spielsatzskripte abgelegt sind.
Und wenn Du da was änderst kommt auch automatisch beim schließen von medit die Abfrage, ob die Änderungen der anderen Skripte in den Spielsatz übernommen werden sollen.
verfasst am: 26.05.2006, 18:41 · Edited by: LennStar
Spielsatz Darkage

Registrierdatum: 01.03.2005, 13:47

 Beiträge: 1846
Zitat: DirkF
Dann würde ich ihm das mal unter seinen Einstellungen im Datei-Menue verraten ;-)

Arigato! Allerdings zeigt er jetzt an "Keine Karte gefunden" (getrandommap)
:(
Und unter Einstellungen ist das nicht zu finden oder bin ich blind?

EDIT: Okay, aus dem Spielsatz heraus gehts, allerdings wird da nur "Ein neuer Einsatz ist verfügbar" angezeigt, aber nicht der Rest vom script. (also das nach Einsatzwin)
verfasst am: 26.05.2006, 19:55
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beiträge: 5596
Wenn Du den Einsatz noch nicht gewonnen hast dann kann sich da ja auch nichts tun - wie genau startests Du denn das Script?
verfasst am: 26.05.2006, 20:10 · Edited by: LennStar
Spielsatz Darkage

Registrierdatum: 01.03.2005, 13:47

 Beiträge: 1846
Na mit
begin
mission_api_StartSkript('Ressourcenbeschaffung');
end;

Und das script startet ja auch- es läuft durch, bis der Bodeneinsatz erschaffen wird. Statt dann wie gestern weiterzumachen, den Einsatz zu beenden und die Res gutzuschreben passiert einfach gar nichts mehr. Geändert ist da drin aber nichts.

Lass ich es allein durchlaufen, funktionierts.
verfasst am: 26.05.2006, 20:29
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beiträge: 5596
Poste mal das komplette Script, ich glaube wir sprechen mal wieder aneinander vorbei. Du hast vor allen Dingen immer nur Teilscripte gepostet und nie dabei geschrieben wie sie eingebunden wurden.

Insbesondere frage ich mich gerade was für ein Einsatz beendet werden soll - wenn der Bodeneinsatz gemeint ist, der muss im Spielprogramm natürlich gespielt werden um ihn zu gewinnen.
Und wo hast Du das gestern getestet als es noch funktioniert hat? Der medit macht ein paar besondere Einstellungen um das fehlende Spielprogramm auszugleichen, das zählt nur begrenzt. Objektfehler tauchen normalerweise immer erst im Test im Hauptprogramm auf, deshalb teste ich lieber immer direkt ohne medit - ist umständlicher aber in vielen Punkten imho besser.
verfasst am: 26.05.2006, 20:48
Spielsatz Darkage

Registrierdatum: 01.03.2005, 13:47

 Beiträge: 1846
Das von heute: (Wie immer Text gekürzt)
program Ressourcensammler;

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;

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

  // 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.
Und das von gestern, das übrigens auch im Spiel selbst geklappt hat:
program Muellhalde;
var
  AlienZahl: Integer;          //max. Zahl der Aliens
  Min: integer;         //Minimumzahl
  

procedure EinsatzWin(Sender: TObject);
begin
  Mission_Win();
end;

procedure OnMissionWin;
   var
     ZielBasis: TBasis;      //für Base ID (nicht Base-Index)
     ZZahl: integer;         //Zählzahl+X=Anzahl der Beute
begin
  savegame_api_Message(# ',lmMissionMessage,Nil);  //Win-Nachricht, Belohnung
  ZielBasis:= basis_api_GetMainBase;
  ZZahl:= random(10)+1+AlienZahl
  lager_api_PutItems(ZielBasis.ID,1476478364,ZZahl);   //Elektronikschrott
  ZZahl:= random(10)+9+AlienZahl
  lager_api_PutItems(ZielBasis.ID,72216835,ZZahl);     //Kunststoffreste
  ZZahl:= random(10)+6+AlienZahl
  lager_api_PutItems(ZielBasis.ID,132230505,ZZahl);    //Metallschrott
  ZZahl:= random(10)+3+AlienZahl
  lager_api_PutItems(ZielBasis.ID,3056462527,ZZahl);   //Stahlschrott

end;


procedure StartMission;
 var
  Einsatz: TEinsatz;      //für Einsatzstart
  Angriff: Boolean;       //für Frage: Angriff ja/nein?
begin
  Angriff:= game_api_Question(#? Falls nicht, können Sie keine Ressourcen sammeln!','Feinde entdeckt!');
    if (Angriff) then                                //Wenn Frage ja dann
       begin
       Einsatz:= einsatz_api_generateeinsatz        //Einsatz erzeugen
       AlienZahl:= random (5) + 4;                 //max. Zahl der Alien 4-9
        for Min:= 1 to AlienZahl do             //für Zahl-Anzahl 1 zufälliges Alien
          begin
          einsatz.AddAlien(alien_api_GetRandomAlien);  //Alien zum Einsatz hinzufügen
          end;
       einsatz.Objectives := '- #';  //Einsatzziele/Briefing
       einsatz.Description := #.'; //Beschreibung
       einsatz.Start;   //Einsatz starten
       register_event(@EinsatzWin,Einsatz,EVENT_ONEINSATZWIN);  //für Weitergabe an EinsatzWin
       end
     else                 //Wenn Frage "Angriff" nein
     game_api_messageBox(#.');  //Nachricht bei Rückzug
end;




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.
verfasst am: 26.05.2006, 23:15 · Edited by: DirkF
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beiträge: 5596
So - dann wollen wir mal versuchen die Scripte auseinander zu nehmen.

Missionstype=mzUFO im ersten Script ist nutzlos, da Du kein UFO registrierst.

Erklärung:
Ohne Missionstyp: Startmission läuft einmal durch und Script wird beendet, alle Objekte, Ereignisse und Werte gelöscht.
Missionstyp mzUser: Skript läuft durch und alle Objekte und Werte werden gespeichert, bis ausdrücklich die Mission beendet wird (mission_win etc.) In dem Moment wird das Skript beendet und alle Ereignisse gelöscht. Im Falle von fortlaufenden Abfragen sollte man es nie beenden, bei Einzelmissionen sobald die Mission abgeschlossen ist.
(Deshalb ist die erste Wiederholungsstruktur von ArneL auch unglücklich gewählt, selbst wenn sie funktioniert - besser man arbeitet dann mit event.repeated)
Missionstyp mzUFO: Man muss mit register_UFO(TUFO) einige (üblicherweise im Script erzeugte) UFOs registrieren. Das Skript beendet sich dann von alleine, sobald diese UFOs nicht mehr existieren. Das nutze ich in den UKI-Scripten um den Speicher für die Steuerungen wieder freizugeben). Wenn man keine UFOs registriert, dann beendet sich das script nach einmaligem Durchlauf sofort - also genauso als wenn man das mzUFO weglässt.

Ansonsten sehe ich im ersten Skript kein Problem - und Du sagst ja auch das es problemlos an das zweite Skript übergibt.

Im zweiten Skript ist der Fehler auch klar - schonmal was davon gehört das man einen Befehl mit Semikolon abschließen muss? ;-)
Und durch Copy&Paste fehlt hinter Alienzahl gleich dreimal das Semikolon...

Das ganze ist dazu auch noch sehr umständlich programmiert, ich würde die Resourcengewinne in die Funktion EinsatzWin schreiben und die Funktion OnMissionWin einfach weglassen.
Die ist dann nämlich unnütz.

Edit: und ich glaube nicht das dieses zweite Skript jemals so geklappt hat, Du hast wahrscheinlich nur vergessen das Du doch noch eine Änderung reingesetzt hast, nämlich das Copy&Paste mit Alienzahl aber ohne Semikolon...
verfasst am: 27.05.2006, 00:12 · Edited by: LennStar
Spielsatz Darkage

Registrierdatum: 01.03.2005, 13:47

 Beiträge: 1846
Zitat: DirkF
Missionstype=mzUFO im ersten Script ist nutzlos, da Du kein UFO registrierst.

So weit unten war ich noch gar nicht. ^^ Davon abgesehen hat es funktioniert. Oder bei mzUser hats gesponnen, da ich noch keinwin drin hatte, ich glaub so wars.
Und eigentlich will ich das script nicht beenden. Einmal am Tag soll es durchlaufen. Aber eins nach dem anderen. Erstmal muss es gehen.
Zitat: DirkF
Im zweiten Skript ist der Fehler auch klar - schonmal was davon gehört das man einen Befehl mit Semikolon abschließen muss? ;-)
Und durch Copy&Paste fehlt hinter Alienzahl gleich dreimal das Semikolon...

1. Hat es trotzdem wunderbar geklappt, auch im Spiel. Genauso wie jetzt.
2. Hat das Semi auch in script 1 gefehlt. (Ich habs nämlich aus 2 kopiert) Da hast du es auch übersehen *bähbäh!* *g*
3. Läufts mit Semikolon auch nur bis "neuer Einsatz verfügbar".
Ich könnt natürlich mal probieren, obs im Spiel geht...
Zitat: DirkF
Das ganze ist dazu auch noch sehr umständlich programmiert, ich würde die Resourcengewinne in die Funktion EinsatzWin schreiben und die Funktion OnMissionWin einfach weglassen.
Die ist dann nämlich unnütz.

Dann werd ich mal versuchen rauszukriegen, aus welchem script ich das kopiert habe, damit es der Autor davon auch weiß. ;) Hat mich ja selbst gewundert, dachte dann aber, das muss aus irgendeinem Grund so sein.
Ich werds mal ändern.
Also wenn ich es ändere, funktioniert ds script nicht mehr.
Entweder hat das doch einen Grund, oder irgendwas ist nicht i.O. mit dem Aufruf. Das register stimmt aber? Ist auch kopiert, events sind ja nicht mal eingetragen in der Doku, nur die Überschrift.

Es muss doch irgendwas sein mit dem Aufruf des scriptes. Wenn es allein funktioniert, aber aufgerufen nicht...
verfasst am: 27.05.2006, 01:16 · Edited by: DirkF
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beiträge: 5596
Zitat: LennStar
Es muss doch irgendwas sein mit dem Aufruf des scriptes. Wenn es allein funktioniert, aber aufgerufen nicht...

Und damit sind wir bei der von mir gestellten Frage die Du seit einigen Posts immer wieder ignoriert hast, obwohl ich das schon mehrfach vermutet hatte:
Wie sind die Scripte eingebunden und wie werden sie aufgerufen???
Und bitte komme nicht wieder mit mission_api...
Das tippst Du im Spiel nämlich nirgendwo ein, oder hast Du im XForce-Spiel eine Konsole für Skripteingaben während des Spiels gefunden?
Zitat: LennStar
3. Läufts mit Semikolon auch nur bis "neuer Einsatz verfügbar".

Kriegst Du denn die savegame-Message? Wenn nein dann wird onMissionWin niemals aufgerufen, und dann wurde der Semikolon-Fehler auch noch nie erreicht.


Übrigens: Bei mzUser brauchst Du kein win, wenn Du das Skript nicht beenden willst. Wenn es mit dem mzUser spinnt, dann liegt ein anderer Fehler vor.
Und setze die Semikolons trotzdem richtig - das ist ein Fehler im medit das der die nicht anmeutert, aber Du brauchst sie für ein formal korrektes Skript - und ich weiß nicht wie das Hauptprogramm auf solche Fehler reagiert, das hat nämlich eigene Routinen zur Skriptanalyse.

Übrigens könnte das auch ein Fehlergrund sein: Wenn Du sagst das das Skript einzeln läuft - hast Du das dann im XForce oder im medit getestet?
verfasst am: 27.05.2006, 10:58 · Edited by: LennStar
Spielsatz Darkage

Registrierdatum: 01.03.2005, 13:47

 Beiträge: 1846
Zitat: DirkF
Wie sind die Scripte eingebunden und wie werden sie aufgerufen???

Dann erklär mir, was du meinst.
Aufrufen tu ich die mit "Mission testen", sonst kanns ja ewig dauern, bis das per zufall mal auftaucht.

Ressourcenbeschaffung ist im Gameset manuell und Ressourcensammler steht auf zufällig.
Zitat: DirkF
und ich weiß nicht wie das Hauptprogramm auf solche Fehler reagiert, das hat nämlich eigene Routinen zur Skriptanalyse.

Zitat: DirkF
Übrigens könnte das auch ein Fehlergrund sein: Wenn Du sagst das das Skript einzeln läuft - hast Du das dann im XForce oder im medit getestet?

Wie ich schon mehrmals sagte, zumindest das script mit dem Bodeneinsatz lief einwandfrei. (über test) Nur in Verbindung läuft das nicht korrekt.

Ich kann dir auch einfach mal den Spielsatz schicken.

edit: Ich hab jetzt MZUFO in MZUser geändert. Jetzt gehts einen Schritt weiter: Die Bodenmission wird erschaffen und was mehr ist, jetzt kommt das Auswahlfenster für Ereignisse (also EVENT_ONEINSATZWIN), nur steht da nichts drin. Ich kann nur abbrechen klicken.
Einzeln läufts aber nach wie vor komplett durch, einschließlich der Nachricht "Ressourcen wurden ihrem Lager hinzugefügt"

edit2: Ich habs jetzt mal komplett im Spiel durchlaufen lassen. Da geht es. Aber immer noch nicht im editor.


***
Vorhin hatte ich es mal im Spiel ausprobiert, Fehler bei mission_apiStartEinsatz
Und dann hatte ich das Spiel nicht ausgeschaltet (nur hauptmenü, Fenstermodus) und wollte es dann erneut starten (Verknüpfung).
Daraufhin kam "An Error occured while playing X-Force
This was a shit error. Das war ein Scheiß Fehler" O.O
Soll das was bedeuten oder ist das der Rest einer Frust-Nacht?
verfasst am: 27.05.2006, 11:24
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beiträge: 5596
Zitat: LennStar
Aufrufen tu ich die mit "Mission testen", sonst kanns ja ewig dauern, bis das per zufall mal auftaucht.

Naja, ich versuche nicht von ungefähr Dich seit einiger Zeit dazu zu bringen, die Skripte mal im Spiel im Hauptprogramm zu testen - wenn Dir der Zufall zu lange dauert kannst Du ja auch eine Testforschung mit 1 Stunde Forschungsarbeit erzeugen und "Forschung beendet" als Skriptbedingung setzen.

Das "Mission testen" geht auf die Einzelskripte im Missionsverzeichnis. Dort kannst Du aber im wesentlichen nur Einzelskripte testen - im Zusammenhang mit dem Einbau der globalen Variablen und der units hat es da einige Umstellungen gegeben.

Z.B. hatte Natter die $ifdefine-Befehle in die Einleitung nicht aus Jux oder um Dich zu Ärgern eingebaut - die sind notwendig wenn man das Skript einzeln testen will, weil sonst medit und dieses "Mission testen" keine Ahnung von den in anderen Skripten gesetzten globalen Variablen haben.

Allerdings weiß ich selber nicht welche $Defines man wann setzen muss, um ein im Hauptprogramm einwandfreies Skript für einen Testlauf in medit bzw. "mission testen" vorzubereiten - ich teste lieber gleich im Hauptprogramm, auch wenn das umständlicher ist (habe mir das schon vor XForce angewöhnt weil diese Simulatoren für Programmläufe immer ihre Eigenarten haben).

Oder mit anderen Worten:
Ja, es gibt in medit und in Mission testen Unterschiede ob man ein Script direkt und unabhängig oder in Kombination mit anderen Scripten und Units aufruft - aber diese Unterschiede existieren nicht im Spielprogramm.

Bevor Du also nach einem möglicherweise nicht existenten Fehler suchst, teste diese Skripte erstmal im echten Spiel und setze dafür auch mal ein paar game_api_messageboxen, damit Du genau weißt nach welchem Befehl das Skript abricht.
verfasst am: 27.05.2006, 11:33 · Edited by: LennStar
Spielsatz Darkage

Registrierdatum: 01.03.2005, 13:47

 Beiträge: 1846
Zitat: DirkF
Bevor Du also nach einem möglicherweise nicht existenten Fehler suchst, teste diese Skripte erstmal im echten Spiel und setze dafür auch mal ein paar game_api_messageboxen, damit Du genau weißt nach welchem Befehl das Skript abricht.


siehe edit2, hättest dir ne Menge Tipperei sparen können ;)
Hatt also scheinbar am MZUFO gelegen, das hat wohl Probleme gemacht.
k.A. was fürn Fehler dann am Anfang war mit MZUser. *ratlos* Vielelicht muss ja auch einfach nur ne komplette prozedur drinstehen, damit der editor nicht meckert? Also nicht das der erste "Befehl" der Missionstyp ist.

Und für die Zukunft merke ich mir, wenn ein Teil prima funktioniert, und mit nem anderen Teil im editor Probleme macht, dann mal im Spiel testen. Nur blöd, dass dann meist noch was fehlen dürfte.
verfasst am: 27.05.2006, 11:37
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beiträge: 5596
Zitat: LennStar
edit: Ich hab jetzt MZUFO in MZUser geändert. Jetzt gehts einen Schritt weiter: Die Bodenmission wird erschaffen und was mehr ist, jetzt kommt das Auswahlfenster für Ereignisse (also EVENT_ONEINSATZWIN), nur steht da nichts drin. Ich kann nur abbrechen klicken.
Einzeln läufts aber nach wie vor komplett durch, einschließlich der Nachricht Ressourcen wurden ihrem Lager hinzugefügt"

Also hangelt man sich langsam zum Ziel ;-)
Wenn es keine Events gibt, dann kann "onMissionWin" auch nie aufgerufen werden - das dürfte die Ursache dafür sein das keine Resourcen kommen.
Und so wie das aussieht kommt das wohl aus irgendwelchen Übergabeproblemen zwischen den Skripten, wenn es einzeln durchläuft.

Ich würde Dir an dieser Stelle (wie schon vor einiger Zeit gesagt) empfehlen die Resourcenaddition aus dem "onMissionWin" herauszunehmen und in die EinsatzWin-Funktion zu verschieben. Du beseitigst einige tehoretische Fehlerquellen (insbesondere dieses Event-Problem) und erzeugst einen deutlich gradlinigeren Code, der einfacher zu lesen und zu korrigieren ist.

Da muss nichts groß verändert werden:

procedure EinsatzWin(Sender: TObject);
var
     ZielBasis: TBasis;      //für Base ID (nicht Base-Index)
     ZZahl: integer;         //Zählzahl+X=Anzahl der Beute
begin
  savegame_api_Message('# ',lmMissionMessage,Nil);  //Win-Nachricht, Belohnung
  ZielBasis:= basis_api_GetMainBase;
  ZZahl:= random(10)+1+AlienZahl;
  lager_api_PutItems(ZielBasis.ID,1476478364,ZZahl);   //Elektronikschrott
  ZZahl:= random(10)+9+AlienZahl;
  lager_api_PutItems(ZielBasis.ID,72216835,ZZahl);     //Kunststoffreste
  ZZahl:= random(10)+6+AlienZahl;
  lager_api_PutItems(ZielBasis.ID,132230505,ZZahl);    //Metallschrott
  ZZahl:= random(10)+3+AlienZahl;
  lager_api_PutItems(ZielBasis.ID,3056462527,ZZahl);   //Stahlschrott
  Mission_Win;
end;


Zitat: LennStar
Vorhin hatte ich es mal im Spiel ausprobiert, Fehler bei mission_apiStartEinsatz

Sowas deutet eher darauf hin, das entweder das Skript nicht gefunden wird (z.B. falsche Namen im Spielsatz) oder fehlerhaft ist (ist das eingebundene Skript wirklich identisch mit dem XMS-File, oder hast Du einmal das eine verändert ohne die Änderung zu übertragen?)
verfasst am: 27.05.2006, 11:39 · Edited by: DirkF
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beiträge: 5596
Zitat: LennStar
siehe edit2, hättest dir ne Menge Tipperei sparen können ;)

Ich hatte aber schon getippt, bevor der Edit kam ;-)

Und ansonsten hast Du jetzt ja aus erster Hand gemerkt, weshalb ich lieber im Hauptprogramm statt in den Simulatoren teste ;-)
verfasst am: 27.05.2006, 12:02
Spielsatz Darkage

Registrierdatum: 01.03.2005, 13:47

 Beiträge: 1846
Zitat: DirkF
Ich würde Dir an dieser Stelle (wie schon vor einiger Zeit gesagt) empfehlen die Resourcenaddition aus dem "onMissionWin" herauszunehmen und in die EinsatzWin-Funktion zu verschieben. Du beseitigst einige tehoretische Fehlerquellen (insbesondere dieses Event-Problem) und erzeugst einen deutlich gradlinigeren Code, der einfacher zu lesen und zu korrigieren ist.

Das ging ja gestern nicht. Jetzt schon.
Zitat: DirkF
ist das eingebundene Skript wirklich identisch mit dem XMS-File, oder hast Du einmal das eine verändert ohne die Änderung zu übertragen

Mit Sicherhit kann ich dir nur sagen, dass es vor dem ganzen hin und her gleich war. Dann hast du ja gesagt, ich soll das aus dem Spielsatz heraus machen.
Das ändert aber nichts daran, dass ich nichts verändert habe, wenn ich mich richtig erinnere. Nur noch die Semis und heute das MZUser
verfasst am: 27.05.2006, 12:20
Programmierer, allgemeines

Registrierdatum: 06.06.2004, 17:19

 Beiträge: 3186
Nur mal 2 Sachen. Eigentlich funktionieren die Skripte in den meisten Fällen auch ohne Semikolon am ende eines Befehles. Trotzdem sollte man das Semikolon immer setzen.

Und dann nochwas zum Testen im Spiel: Wenn man über Mission Testen ein Skript ausprobiert, das eine Unit verwendet, dann muss diese Unit auch im Skriptverzeichnis vorhanden sein (nicht nur im Spielsatz). Ich vermute mal, dass dies bei mission_api_StartSkript ebenfalls so ist.
verfasst am: 27.05.2006, 12:39
Spielsatz Darkage

Registrierdatum: 01.03.2005, 13:47

 Beiträge: 1846
Zitat: Natter
Ich vermute mal, dass dies bei mission_api_StartSkript ebenfalls so ist.

Wär ja komishc wenn nicht, denn woher soll das erste script sonst wissen, wo es das zweite herkriegt?
Aber das war ja nicht das Problem hier.
verfasst am: 27.05.2006, 14:26
Programmierer, allgemeines

Registrierdatum: 06.06.2004, 17:19

 Beiträge: 3186
Zitat: LennStar
Wär ja komishc wenn nicht, denn woher soll das erste script sonst wissen, wo es das zweite herkriegt?

Aus dem Spielsatz. War bis kurz vor Veröffentlichung auch noch so (für units). Wurde aber für die 0.910 abgeändert.
verfasst am: 27.05.2006, 16:40
Spielsatz Darkage

Registrierdatum: 01.03.2005, 13:47

 Beiträge: 1846
Mit dem getimten Aufruf blick ich noch nicht so ganz durch.
Also so sieht ja bis jetzt der Start aus:
program Ressourcensammler;

procedure StartMission;
  var
    Losschicken: Boolean;  //Sammler loschicken ja/nein
    Auswahlzahl: integer;  //Zufallszahl für Missionstyp
    ZZahl: integer;        //Anzahl
    ZielBasis: TBasis;
begin
Wenn ich daraus jetzt folgendes mache:
program Ressourcensammler;
var
event : TTimerEvent;
procedure StartMission;
  var
    Losschicken: Boolean;  //Sammler loschicken ja/nein
    Auswahlzahl: integer;  //Zufallszahl für Missionstyp
    ZZahl: integer;        //Anzahl
    ZielBasis: TBasis;
begin
event := register_timed_event(@StartMission, nil, 1440);
event.Repeated := true; 
XXX


Dann wird erst mal registiert "in 1440 Minuten ab StartMission ausführen" und XXX wird ausgeführt?

Und wenn ich "An dieser Stelle XXX Minuten warten und dann weiter mit dem script" haben möchte, muss ich dann
event.Repeated := false;
machen oder wie?
verfasst am: 27.05.2006, 17:06
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beiträge: 5596
So wird das nur leider nichts - wenn die Funktion mit dem Timerevent sich selber aufruft, dann wird das Timer-Event auch immer wieder neu erstellt und überschrieben, das würde später Ärger machen wenn es nicht mehr um eine einfache Wiederholung geht (d.h. schon bei Deiner zweiten Überlegung zur Pause).

Stattdessen muss bei einer Wiederholung die wiederholte Funktion raus aus dem Startmission in eine eigene Funktion.

in verkürzter Form:
procedure resource
var 
  losschicken:Boolean;
begin
<schnipp> - hier steht Dein altes Script
end;

procedure Startmission;
begin
  event:=register_timed_event(@resource,nil,1440);
  event.repeated:=true;
end;


Zitat: LennStar
Und wenn ich "An dieser Stelle XXX Minuten warten und dann weiter mit dem script" haben möchte, muss ich dann
event.Repeated := false;
machen oder wie?

Nö - entweder Du veränderst den Zähler des Repeated-Events (habe ich z.B. in CON002randomUFO gemacht) oder aber Du schaltest das Timer-Event mit event.active:=false ab und erzeugst ein zweites einmaliges event2, das nach XXX minuten ausgelöst wird und wieder event.active:=true setzt.

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




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