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 —› Erweiterte Events

Autor Mitteilung
verfasst am: 07.11.2009, 18:38
Spielsatz Alliances

Registrierdatum: 14.07.2004, 14:47

 Beiträge: 1185
Nein, das ist keine Nachfrage. Es ist die Antwort ;-)
Eine Antwort, die es erlaubt, beliebige Events zu definieren, die in einem Skript ausgelöst und von allen laufenden behandelt werden! CallUserSpecialEvent ist das Zauberwort. Wird das ausgelöst, springen erstmal alle TNotifyEvents darauf an, die für das Event EVENT_SPECIAL_ONUSERCALL registriert sind. Ohne Parameter, ohne Informationen, sozusagen "blind". Das ist ein Problem, aber auch dieses Problem muss vor der ungeheuerlichen Vielseitigkeit der globalen Variablen weichen. Aber genug geschwafelt, Verwendungshinweise in Kurzform:

(0. wird das Skript notfalls selbst erledigen, daher optional aber empfohlen: Globalen String mit dem Namen aus der Konstanten CE_NAMECACHE und globales Objekt mit dem Namen aus der Konstanten CE_OBJECTCACHE anlegen)
1. In beliebigem Skript (z.B. UFO-AI) die Unit CustomEvent via uses einbinden
(1.1 wenn Fehlermeldung "Fehler in Unit CustomEvents: ..." im Spiel: Sicherstellen, dass die beiden globalen Vars nirgendwo sonst verwendet werden)
2. An der gewünschten Stelle procedure ce_Notify(Desc: String); oder procedure ce_NotifyWithObject(Desc: String; Obj: TObject); aufrufen lassen
3. In allen Skripten, die darauf reagieren sollen, EVENT_SPECIAL_ONUSERCALL registrieren und bei Aufruf abhängig von CE_NAMECACHE etwas beliebiges (z.B. Skript abbrechen, andere Prozeduren aufrufen, Variablen ändern, usw) machen
(3.1 Ggf. CE_OBJECTCACHE mit einbeziehen)

Die jeweils aktuellste Version der Unit, eine Kopie der obigen Anwendungshinweise und ggf Erweiterungen derselben finden sich hier.
verfasst am: 07.11.2009, 22:11
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beiträge: 5595
alternativ findet man das auch im Galwar ähnlich gelöst, ebenfalls vorbereitet für eine der default-units, die man in jedem Spielsatz benutzen kan ohne sich Gedanken darüber zu machen.
Allerdings ist die default-unit noch nicht ordentlich dokumentiert und dadurch natürlich noch nicht wirklich bekannt...
verfasst am: 07.11.2009, 22:28 · Edited by: sujin
Spielsatz Alliances

Registrierdatum: 14.07.2004, 14:47

 Beiträge: 1185
Ist zumindest mir bekannt. Allerdings sehe ich meine Lösung, man möge mir die Arroganz nachsehen, als etwas griffiger für den Skripter an. Auch wenn die Gefahr steigt, dass ein Tippfehler zum lästigen, weil unauffälligen Bug wird.

Wobei ich persönlich, sollte ich je im größeren Stil mit Events arbeiten, wohl bei dem Weg aus GEN03 bleiben werde. Eben aufgrund der Fehlersicherheit, z.B. ist ne Konstante case-insensetive...
verfasst am: 12.06.2011, 19:42
Registrierdatum: 22.08.2008, 15:51

 Beiträge: 403
Ich steig nicht so ganz durch das Konzept der Specialevents durch. Was können die Bewerkstelligen?
Grund meiner Frage ist folgende: Es gibt zurzeit kein Event, dass ausgelöst wird, wenn eine Einheit im Bodeneinsatz getroffen wird. Deshalb will ich mir das selber basteln.
verfasst am: 12.06.2011, 23:22 · Edited by: sujin
Spielsatz Alliances

Registrierdatum: 14.07.2004, 14:47

 Beiträge: 1185
Das geht leider nicht. Solche in Skripten definierten Events werden nur von anderen Skripten ausgelöst (könnte man also verwenden, wenn ein Skript auf andere ebenfalls geskriptete Aktionen reagieren soll; v.A. wenn ersteres Skript mehrmals oder auch garnicht laufen kann) - ob und wann eine Einheit getroffen wird, weiß aber nur das Spiel =/
verfasst am: 12.06.2011, 23:43
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beiträge: 5595
Specialevents sind vordefinierte und fest einprogrammierte Situationen oder Ereignisse, bei denen das Programm ein Signal an alle Skripte sendet, die sich vorher für das jeweilige Event registriert haben.

Wenn es für eine Situation noch kein passendes Event gibt, dann kannst Du höchstens ein Mantis-Ticket mit dem Wunsch nach einem solchen Event schreiben.
Komplett neue Events können nicht in X-Skript definiert werden, sondern müssen im Delphi-Programmcode definiert und eingebaut werden.

Das "Userevent" kann von einem Skript erzeugt werden und so andere Skripte aufrufen, aber dafür muss das aufrufende Skript bereits aktiv sein - und ein Skript kann nur durch bereits vordefinierte Events gestartet werden, nicht durch ein noch nicht existierendes Event.
verfasst am: 13.06.2011, 18:49
Programmierer, allgemeines

Registrierdatum: 06.06.2004, 17:19

 Beiträge: 3186
Hmm - im Bodeneinsatz ist das mit den Events auch nicht ganz einfach, bzw. man muss aufpassen, wie man die einsetzt. Ein Event fürs getroffen werden hat z.B. den Nachteil, das es vermutlich in der Gegnerrunde ausgelöst wird - weshalb die Einheit darauf nicht reagieren kann, selbst wenn du ihr z.B. sagst, sie solle sich irgendwohin bewegen. Die Frage ist also, wie du auf einen Schuss reagieren willst.
verfasst am: 13.06.2011, 18:58
Registrierdatum: 22.08.2008, 15:51

 Beiträge: 403
Ich will ein Alien basteln, dass abhängig von der Häufigkeit mit der es getroffen wurde sich verändert.
verfasst am: 13.06.2011, 20:26
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beiträge: 5595
Zitat: Kreks
Ich will ein Alien basteln, dass abhängig von der Häufigkeit mit der es getroffen wurde sich verändert.

momentan geht da wohl nur ein Workaround, der die Hitpoints abfragt und zu Beginn der jeweiligen Runden gestartet wird.

Zitat: Natter
Ein Event fürs getroffen werden hat z.B. den Nachteil, das es vermutlich in der Gegnerrunde ausgelöst wird - weshalb die Einheit darauf nicht reagieren kann,

Skripte können auch andere Aufgaben haben als eine AI-Steuerung. Kreks hat da eine Möglichkeit angesprochen mit seinem Zähler, aber ich kann mir auch noch eine ganze Reihe anderer denken (für die Teilweise aber auch noch die verschiedenen nötigen Skriptbefehle fehlen).

Allerdings ist das mit den Runden im Bodeneinsatz wirklich ein Problem, da sollte man eventuell irgendwie erkennbar machen das gerade eine Gegnerrunde ist bzw. das einige Events keine Figurensteuerung erlauben etc.
Deshalb sollten wir sowas im Kopf behalten, aber nicht kurzfristig sondern erst nach einiger Überlegung umsetzen (und eventuell umstellen)



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

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