Seite: 1 [2] [3] [4] [5] [6] [7] [8] [9] [10] .. [11] [12] >> |
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: 5596
|
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: 5596
|
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: 5596
|
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) |
|
verfasst am: 27.11.2021, 15:19
|
Registrierdatum: 29.10.2021, 14:57
Beiträge: 763
|
|
|
verfasst am: 27.01.2022, 13:12
|
Registrierdatum: 27.01.2022, 13:07
Beiträge: 318
|
|
|
verfasst am: 22.11.2023, 10:17
|
Registrierdatum: 22.11.2023, 07:10
Beiträge: 47355
|
|
Registrierdatum: 22.11.2023, 07:10
Beiträge: 47355
|
|
|
verfasst am: 13.01.2024, 19:21
|
Registrierdatum: 22.11.2023, 07:10
Beiträge: 47355
|
|
|
verfasst am: 13.01.2024, 19:22
|
Registrierdatum: 22.11.2023, 07:10
Beiträge: 47355
|
|
|
verfasst am: 13.01.2024, 19:23
|
Registrierdatum: 22.11.2023, 07:10
Beiträge: 47355
|
|
|
verfasst am: 13.01.2024, 19:24
|
Registrierdatum: 22.11.2023, 07:10
Beiträge: 47355
|
|
|
verfasst am: 13.01.2024, 19:25
|
Registrierdatum: 22.11.2023, 07:10
Beiträge: 47355
|
|
|
verfasst am: 13.01.2024, 19:26
|
Registrierdatum: 22.11.2023, 07:10
Beiträge: 47355
|
|
|
verfasst am: 13.01.2024, 19:27
|
Registrierdatum: 22.11.2023, 07:10
Beiträge: 47355
|
|
Seite: 1 [2] [3] [4] [5] [6] [7] [8] [9] [10] .. [11] [12] >> |