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 —› Testversion —› [V0.910X-Skript] neues Eventsystem Teil1

Autor Mitteilung
verfasst am: 13.05.2006, 13:14
Programmierer, allgemeines

Registrierdatum: 06.06.2004, 17:19

 Beitrge: 3186
In Version 0.910 wurde die Skriptsprache deutlich verbessert. Hier sollen nach und nach die wichtigsten nderungen bzw. Erweiterungen von X-Skript besprochen werden, als da wren:

- berarbeitung des Event-Systems
- uses-Support
- Globale Variablen
- nderungen beim erzeugen von Nachrichten
- sonstige interessante neue Befehle

Da die Umstellung des Event-Systems dafr sorgen wird, dass ein Groteil der Skripte aus 0.900 (alle mit alten register-Funktionen) nicht mehr fehlerfrei in 0.910 laufen, wird dieser Themenkomplex als erstes vorgestellt.

Whrend in Version 0.903 fr jedes Event (also z.B. UFO-Abschuss, Einsatz gewonnen etc.) eine eigene Registerfunktion vorhanden war, wird mit v0.910 ein anderer Weg beschritten. In der neuen Version gibt es insgesamt nur noch 4 Registerfunktionen:

- register_ufo()
- register_timed_event() : TTimerEvent
- register_event() : TEvent
- register_special_event() : TEvent

register_ufo() dient lediglich dazu, festzulegen, welche UFOs beim Missionstyp mzUFO fr die Siegbedingung (Abschuss aller UFOs) bercksichtigt werden (dies kann man sich sparen, wenn man schon ein Register fr Abschuss, Entkommen etc. angelgt hat). Hier hat sich nichts gegenber Version 0.903 gendert.

register_timed_event() ersetzt die alte Funktion event_register(). Mit ihr kann man eine Zeit festlegen, nach der eine andere Prozedur aufgerufen werden soll. Im Gegensatz zum Vorgnger event_register()
mssen der neuen Funktion aber 3 Parameter bergeben werden.

Der erste Parameter ist wie gehabt ein @ gefolgt vom Namen der aufzurufenden Prozedur (Anmerkung: Mit Version 0.910 gibts ein Feature im Skripteditor (medit.exe), was einem die Arbeit etwas erleichtert. Wenn man nach eingeben des @ die Tasten Strg+Leertaste drckt, erscheint eine Liste mit allen vorhandenen Prozeduren, aus der man dann die passende aussuchen kann - oder man whlt den Punkt "neue Funktion anlegen". Dann kann man den gewnschten Namen der aufzurufenden Prozedur eingeben, und das Grundgerst dieser Prozedur wird automatisch im Skript ergnzt).

Der zweite Parameter ist eine beliebige Objekt-Variable, die der aufgerufenen Prozedur bergeben wird. Damit kann man in der augerufenen Prozedur z.B. auf ein an anderer Stelle erzeugtes UFO zugreifen. (Anmerkung: wer sich nicht sicher ist, welche Variablen alles Objektvariablen sind, der kann in medit ja mal im Objektbrowser unter Typen->Objekte nachschauen). Natrlich muss die aufgerufene Prozedur auch mit einem entsprechenden Parameter deklariert werden. Dabei hat dieser Parameter in der aufgerufenen Prozedur den Typ TObject. Um ihn zu verwenden muss er erst entsprechend weiterverarbeitet werden (siehe dazu Skriptbeispiel unten). Will man eigentlich kein Objekt bergeben, kann man stattdessen auch einfach den Wert NIL bergeben.

Der dritte Parameter ist vom Typ LongInt. Er gibt an, nach wievielen Minuten die angegebene Prozedur aufgerufen werden soll.

Neben der Parameteranzahl gibt es gegenber der alten Funktion event_register() eine weitere nderung. Der Rckgabewert ist nicht mehr vom Typ TEvent, sondern vom Typ TTimerEvent. ber eine entsprechende Variable kann man aber wie gehabt den Timer auf repeat setzen (soll heien, nachdem die Prozedur aufgerufen wurde beginnt der Timer erneut, bis das Skript beendet ist). Auch kann man so die Anzahl der Minuten (TTimerEvent.Interval) oder das zu bergebende Objekt (TTimerEvent.obj) nachtrglich ndern bzw. auslesen. Mit TTimerEvent.Active schlielich kann der Timer aktiviert bzw. deaktiviert werden.

So, nun wird es aber Zeit fr ein Beispielskript:
program YourName;

procedure UFOBeschleunigen(Sender: TOBJECT);  // erhht Geschwindigkeit des UFOs auf maximal 20
var
  UFO   : TUFO;
  Model : TUFOModel;
begin
  UFO := TUFO(Sender); // das Objekt Sender muss zurck zu TUFO gecasted werden
  Model := UFO.Model;
  
  if (Model.Pps >= 20) then // Mission beenden, sobald Ufo Geschwindigkeit 20 erreicht hat
  begin
    mission_win;
  end;

  Model.Pps := Model.Pps + 1;
  UFO.Model := Model;
end;

procedure StartMission;
var
  event : TTimerEvent;
  UFO   : TUfo;
begin
  UFO := ufo_api_CreateUfo;

  event := register_timed_event(@UFOBeschleunigen,UFO,30); // Das UFO wird der Funktion 
                                                           // UFOBeschleunigen als Parameter Sender bergeben
  event.Repeated := true; // Event soll sich stndig wiederhohlen
end;

begin
  MissionName := 'YourName';
  MissionType := mzUser;
end.


Die beiden anderen register_* Funktionen werden aufgrund des Umfangs im nchsten Teil beschrieben.
verfasst am: 19.05.2006, 22:49 · Edited by: LennStar
Spielsatz Darkage

Registrierdatum: 01.03.2005, 13:47

 Beitrge: 1846
Hab folgende Zeile im script die als Fehler angezeigt wird:
end;
register_Einsatz_win(@EinsatzWin,Einsatz);

Womit muss ich die nun ersetzen?


Und wo ich schon frage: Wie kann man ein UFO aktiv/inaktiv schalten?
verfasst am: 19.05.2006, 23:53
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beitrge: 5596
Zitat: LennStar
Und wo ich schon frage: Wie kann man ein UFO aktiv/inaktiv schalten?

ber Changeactivestate - schau mal in meine Demo, ich mache das im SPS002-Script
verfasst am: 19.05.2006, 23:59
Spielsatz Darkage

Registrierdatum: 01.03.2005, 13:47

 Beitrge: 1846
Kann man das auch mit "Handelbar" bei Gegenstnden machen?
verfasst am: 20.05.2006, 00:04
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beitrge: 5596
Da ist das doch direkt eine Eigenschaft im TLagerItem, da braucht man keine Befehle.
Das Aktivieren/Deaktivieren der Gegenstnde klappt aber leider noch nicht...
verfasst am: 20.05.2006, 00:34 · Edited by: LennStar
Spielsatz Darkage

Registrierdatum: 01.03.2005, 13:47

 Beitrge: 1846
Zitat: DirkF
Da ist das doch direkt eine Eigenschaft im TLagerItem, da braucht man keine Befehle.
Das Aktivieren/Deaktivieren der Gegenstnde klappt aber leider noch nicht...

Ich nix versteh... :(


Ich wei, dass das eine Eigenschaft im editor ist, da kann man ein Hkchen setzen. Ich will sie aber beliebig ein und ausschalten. z.B. wenn du eine Bodenmission machst, und als Ergebniss kannst du mit bestimmten Gegenstnden handeln. Oder du versiebst eine, und dein Abnehmer kratzt ab.
Und fr Herstellbar wrs auch nicht schlecht- eine bestimmte Technologie/ein Ereignis erlaubt erst den (Nach)Bau.
verfasst am: 20.05.2006, 06:10
Registrierdatum: 26.03.2006, 08:29

 Beitrge: 83
Was Dirk meint ist, dass man keine extra-Funktion in x-skript braucht, weil man die eigenschaften eines Gegenstandes direkt anwhlen/ndern kann. Nur leider haben solche nderungen leider noch keine auswirkungen auf den spielablauf. ich hab's grade eben getestet, obwohl ich da (ber skript) die Kevlar-Panzerung auf 'nicht handelbar' gesetzt hatte, wurde an- und verkaufspreis angezeigt.
verfasst am: 20.05.2006, 06:14
Registrierdatum: 26.03.2006, 08:29

 Beitrge: 83
Zitat: LennStar
Hab folgende Zeile im script die als Fehler angezeigt wird:
end;
register_Einsatz_win(@EinsatzWin,Einsatz);

Der Fehler ist, wie du vielleicht schon weit, dass es die funtkion/prozedur register_einsatz_win nicht mehr gibt. versuchs doch mal mit einer eigenen prozedur wie 'onEinsatzWin', bei anderen Skripten funktioniert das gut.
verfasst am: 20.05.2006, 10:33
Programmierer

Registrierdatum: 23.08.2003, 19:16

 Beitrge: 2261
Zitat: LennStar
Kann man das auch mit "Handelbar" bei Gegenstnden machen?
Nein!
Zitat: LennStar
Hab folgende Zeile im script die als Fehler angezeigt wird:
Schau dir unter datascriptsmission mal das Script einsatztest.xms an. Da ist ein Beispiel fr EinsatzWin drin.
verfasst am: 23.11.2023, 00:59
Registrierdatum: 22.11.2023, 07:10

 Beitrge: 69718
verfasst am: 02.12.2023, 16:05
Registrierdatum: 22.11.2023, 07:10

 Beitrge: 69718
audiobookkeeper.rucottagenet.rueyesvision.rueyesvisions.comfactoringfee.rufilmzones.rugadwall.rugaffertape.rugageboard.rugagrule.rugallduct.rugalvanometric.rugangforeman.rugangwayplatform.rugarbagechute.rugardeningleave.rugascautery.rugashbucket.rugasreturn.rugatedsweep.rugaugemodel.rugaussianfilter.rugearpitchdiameter.ru
geartreating.rugeneralizedanalysis.rugeneralprovisions.rugeophysicalprobe.rugeriatricnurse.rugetintoaflap.rugetthebounce.ruhabeascorpus.ruhabituate.ruhackedbolt.ruhackworker.ruhadronicannihilation.ruhaemagglutinin.ruhailsquall.ruhairysphere.ruhalforderfringe.ruhalfsiblings.ruhallofresidence.ruhaltstate.ruhandcoding.ruhandportedhead.ruhandradar.ruhandsfreetelephone.ru
hangonpart.ruhaphazardwinding.ruhardalloyteeth.ruhardasiron.ruhardenedconcrete.ruharmonicinteraction.ruhartlaubgoose.ruhatchholddown.ruhaveafinetime.ruhazardousatmosphere.ruheadregulator.ruheartofgold.ruheatageingresistance.ruheatinggas.ruheavydutymetalcutting.rujacketedwall.rujapanesecedar.rujibtypecrane.rujobabandonment.rujobstress.rujogformation.rujointcapsule.rujointsealingmaterial.ru
journallubricator.rujuicecatcher.rujunctionofchannels.rujusticiablehomicide.rujuxtapositiontwin.rukaposidisease.rukeepagoodoffing.rukeepsmthinhand.rukentishglory.rukerbweight.rukerrrotation.rukeymanassurance.rukeyserum.rukickplate.rukillthefattedcalf.rukilowattsecond.rukingweakfish.rukinozones.rukleinbottle.rukneejoint.ruknifesethouse.ruknockonatom.ruknowledgestate.ru
kondoferromagnet.rulabeledgraph.rulaborracket.rulabourearnings.rulabourleasing.rulaburnumtree.rulacingcourse.rulacrimalpoint.rulactogenicfactor.rulacunarycoefficient.ruladletreatediron.rulaggingload.rulaissezaller.rulambdatransition.rulaminatedmaterial.rulammasshoot.rulamphouse.rulancecorporal.rulancingdie.rulandingdoor.rulandmarksensor.rulandreform.rulanduseratio.ru
languagelaboratory.rulargeheart.rulasercalibration.rulaserlens.rulaserpulse.rulaterevent.rulatrinesergeant.rulayabout.ruleadcoating.ruleadingfirm.rulearningcurve.ruleaveword.rumachinesensible.rumagneticequator.rumagnetotelluricfield.rumailinghouse.rumajorconcern.rumammasdarling.ru



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

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