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 —› Fragen zu Typen/Funktionen/Prozeduren...

Seite: 1 [2] >>

Autor Mitteilung
verfasst am: 15.07.2009, 21:49
Spielsatz Alliances

Registrierdatum: 14.07.2004, 14:47

 Beiträge: 1185
Ich wühl mich grade durch die Referenz, genauer die Typen, ganz genau gesagt die Aufzählungs-Typen. Später mach ich mich an die Funktionen und Prozeduren und dort werden vermutlich ebenfalls Fragen aufkommen, deshalb der allgemein gehaltene Threadtitel.

Meine erste Frage bezieht sich auf den Typ LongBool:
Klingt schon so seltsam (Bool soll doch möglichst kurz/eindeutig sein und nur einen Bit belegen) und die Darstellung in der Referenz kann irgendwie nicht stimmen:
LongBool = );
... ist alles was dort steht. Also googel ich und finde erstaunlich wenig... dsa einzig verwertbare stammt von http://www.gnu-pascal.de/gpc-hr/LongBool.html und besagt:
     type
       LongBool = Boolean attribute (Size = BitSizeOf (LongInt));
The intrinsic LongBool represents boolean values, but occupies the same memory space as a LongInt. It is used when you need to define a parameter or record that conforms to some external library or system specification.

Kann ich also davon ausgehen, dass es einfach nur ein Boolean ist, der vergleichsweise viel Speicher verbraucht und nur in Spezialfällen benötigt wird?
verfasst am: 15.07.2009, 23:11
Programmierer, allgemeines

Registrierdatum: 06.06.2004, 17:19

 Beiträge: 3186
Ja. Am besten garnicht verwenden ;)
verfasst am: 15.07.2009, 23:15
Spielsatz Alliances

Registrierdatum: 14.07.2004, 14:47

 Beiträge: 1185
Ok, ich hab auch so genug Typen die ich mir nicht merken kann ^^
Nur interessehalber: wie sähe die korrekte Aufzählung aus - genau wie bei einem normalen Boolean?
verfasst am: 15.07.2009, 23:18
Programmierer, allgemeines

Registrierdatum: 06.06.2004, 17:19

 Beiträge: 3186
Was meinst du mit Aufzählung? Ich denke, das sollte sich genauso nutzen lassen, wie normale Boolean-Variablen. Es kann aber sein, dass man nicht einfach LongBoolean und Boolean vermischen kann (falls die Vergleichsoperatoren keine entsprechenden Typumwandlungen beherrschen sollten).
verfasst am: 15.07.2009, 23:23
Spielsatz Alliances

Registrierdatum: 14.07.2004, 14:47

 Beiträge: 1185
Aufzählung aka mögliche Zustände beim Bool ist ja: (False, True). Meine Frage war, ob ein LongBool dito nur 1/0 kennt.
Ich versteh das hier:
Zitat: Natter
Ich denke, das sollte sich genauso nutzen lassen, wie normale Boolean-Variablen.

mal als ja.

Danke dir :)
verfasst am: 15.07.2009, 23:39
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beiträge: 5596
Noch eine Zusatzinfo:
X-Skript-spezifische Typen beginnen alle mit T.
Diejenigen Typen deren Namen nicht mit T anfängt, sind aus PascalSkript übernommen und nicht speziell für X-Force definiert.

Und derartig übernommene Typen können durchaus für unsere Zwecke unnütz sein, diesen LongBool braucht man meines wissens in keiner einzigen X-Skript-Funktion. Und die in dem Wiki-Auszug erwähnten externen Libraries gibt es im X-Skript gar nicht...
verfasst am: 15.07.2009, 23:44 · Edited by: sujin
Spielsatz Alliances

Registrierdatum: 14.07.2004, 14:47

 Beiträge: 1185
Zitat: DirkF
X-Skript-spezifische Typen beginnen alle mit T.
Diejenigen Typen deren Namen nicht mit T anfängt, sind aus PascalSkript übernommen und nicht speziell für X-Force definiert.

Ist bekannt, ich erinnere mich dunkel das das letztens irgendwo im Forum erwähnt wurde. Namenskonventionen und so weiter...
Zitat: DirkF
Und die in dem Wiki-Auszug erwähnten externen Libraries gibt es im X-Skript gar nicht...

Gut zu wissen.

Werde mich jedenfalls hüten, LongBool(s) zu verwenden ;)
verfasst am: 31.07.2009, 17:19
Spielsatz Alliances

Registrierdatum: 14.07.2004, 14:47

 Beiträge: 1185
TGameFigure => procedure EndRound;

Ich kann mich erinnern, dass es damit mal Probleme gab, deshalb frage ich nach. Wird durch Figure.EndRound; ...
a) einfach die ZE auf 0 gesetzt(keine Aktion mehr möglich)?
b) selbiges für alle Einheiten der TAIGroup gemacht?
c) a/b ausgeführt und die jeweils andere TAIGroup ist automatisch dran (Reaktion nicht möglich)?
d) die ZE nicht angerührt und die andere TAIGroup ist automatisch dran (Reaktion also noch möglich)?

Ich gehe mal von d aus. Dem entsprechend müsste/dürfte man nur bei einer einzelnen Einheit EndRound anwenden?
verfasst am: 31.07.2009, 22:02
Programmierer, allgemeines

Registrierdatum: 06.06.2004, 17:19

 Beiträge: 3186
Nichts davon. Erstmal betrifft es nur die aktuelle Einheit und nicht die Gruppe. Die ZE werden auch nicht angerührt. Es werden nur die Statusflags so gesetzt, dass die Einheit als Zug beendet gilt, und dann aus der Zugliste entfernt werden kann. Ich glaube, inzwischen ist der Aufruf überflüssig geworden (eine Einheit sollte automatisch diesen Status erreichen, wenn sie mehrere Fr4ames ohne Befehle bleibt), bin mir da aber nicht sicher. Das müsste man erst testen.
verfasst am: 31.07.2009, 22:22
Spielsatz Alliances

Registrierdatum: 14.07.2004, 14:47

 Beiträge: 1185
Wird der Rundenwechsel denn automatisch ausgelöst, wenn bei allen Einheiten der Statusflag auf "Zug beendet" steht?
Bzw, kann der Rundenwechsel per Skript eingeleitet werden?
verfasst am: 31.07.2009, 22:28
Registrierdatum: 26.06.2008, 13:42

 Beiträge: 648
was planst du da?!
ich hab da kein gutes Gefühl ;)
verfasst am: 31.07.2009, 22:38 · Edited by: Natter
Programmierer, allgemeines

Registrierdatum: 06.06.2004, 17:19

 Beiträge: 3186
Das ganze läuft etwas anders. Es gibt intern eine MovingList. Diese enthält alle Einheiten, die momentan am Zug sind. Alle paar ms wird die Funktion PerformFrame ausgeführt (und damit alle Laufbewegungen etc.). Wenn dabei eine Einheit nichts mehr zu tun hat, so wird sie aus der MovingList entfernt (und z.B. ein MoveTo hat dann bei dieser Einheit in dieser Runde keine Auswirkungen mehr). Das Entfernen wird aber nicht mit EndRound erzielt, sondern es werden lediglich einige Statusflags neu gesetzt. Wenn man z.B. in einem Skript direkt danach MoveTo aufruft, dann wird der Status wieder geändert - und in PerformFrame wird die Einheit dann auch nicht aus der MovingList entfernt.

Beendet ist eine Runde dann, wenn die MovingList keine Einheiten mehr enthält. dann wird die Zugseite gewechselt, und alle Einheiten der anderen AIGroup in die Movinglist aufgenommen.

Auf Spielerseite funktioniert das natürlich etwas anders (außer man hat AutoPlay aktiviert), sonst wäre die Runde ja schon beendet, bevor man den Einheiten irgendwelche Befehle gibt. Beim Spielerzug werden Einheiten erst aus der MovingList entfernt, wenn der Spieler auf Runde beenden geklickt hat (danach funktioniert es aber genau wie bei Aliens - daher laufen die Soldaten auch noch zu ihren Zielen etc.).

Einen Befehl zum Runde Beenden gibt es nicht, und der macht imho auch keinen Sinn. Schließlich würde man dann die Einheiten in einem undefinierten Zustand lassen (z.B. zwidchen 2 Feldern).
verfasst am: 31.07.2009, 22:54
Spielsatz Alliances

Registrierdatum: 14.07.2004, 14:47

 Beiträge: 1185
Zitat: Speedy
was planst du da?!
ich hab da kein gutes Gefühl ;)

Ist erstmal rein konzeptionell, ich weiß noch nicht ob/wie ich das dann anwenden würde.
Zitat: Natter
Einen Befehl zum Runde Beenden gibt es nicht, und der macht imho auch keinen Sinn. Schließlich würde man dann die Einheiten in einem undefinierten Zustand lassen (z.B. zwidchen 2 Feldern).

Leuchtet ein. Ich meinte mit "Runde beenden" eher das, was beim Klick auf den Runde-Beenden-Button passiert: Bewegungen werden quais automatisch zu Ende geführt, bis MovingList leer und dann wird die Zugseite gewechselt. Also praktisch eine Simulation des "Runde Beenden"-Knopfs.
Ich gehe mal nicht davon aus, dass man mitten im Einsatz das AutoPlay an- und ausknipsen kann? (Das geht jetzt mehr in den theoretischen Bereich... für meine Testzwecke würde ich dann vor Einsatzstart Autoplay anschalten und die SoldierAI für was-auch-immer verwenden).
verfasst am: 31.07.2009, 23:43
Programmierer, allgemeines

Registrierdatum: 06.06.2004, 17:19

 Beiträge: 3186
Zitat: sujin
Ich gehe mal nicht davon aus, dass man mitten im Einsatz das AutoPlay an- und ausknipsen kann?

Das sollte eigentlich kein Problem sein. Zum Testen kann man übrigens auch mit dem Cheatmenü Autoplay aktivieren/deaktivieren.
verfasst am: 31.07.2009, 23:53
Spielsatz Alliances

Registrierdatum: 14.07.2004, 14:47

 Beiträge: 1185
Mitten in seinem Zug kann man dem Spieler die Kontrolle wegnehmen und die SoldierAI übernehmen lassen? Ich danke demjenigen, dessen weises Coding das möglich gemacht hat, hiermit auf Knien :D
verfasst am: 01.08.2009, 07:42
Registrierdatum: 26.06.2008, 13:42

 Beiträge: 648
Zitat: sujin
Mitten in seinem Zug kann man dem Spieler die Kontrolle wegnehmen und die SoldierAI übernehmen lassen? Ich danke demjenigen, dessen weises Coding das möglich gemacht hat, hiermit auf Knien :D


Hab ich doch richtig geahnt! :)
Darüber könnte man ja "Gedankensteuerung" bzw Panikattacke einbauen...
verfasst am: 01.08.2009, 08:01
Programmierer, allgemeines

Registrierdatum: 06.06.2004, 17:19

 Beiträge: 3186
Dazu braucht man aber kein Autoplay. Auch Spielereinheiten können normal per Skript (z.B. RangeEffect) gesteuert werden.
verfasst am: 01.08.2009, 15:29
Spielsatz Alliances

Registrierdatum: 14.07.2004, 14:47

 Beiträge: 1185
Jo. Autoplay bräuchte man dafür nur, wenn der Spieler nach dieser Panikattacke ein paar Runden "aussetzen" soll, also die Panikattacke (oder was auch immer) von alleine und ohne drücken des Runde-beenden-Knopfs abläuft.
verfasst am: 02.08.2009, 10:58
Registrierdatum: 22.08.2008, 15:51

 Beiträge: 403
Zitat: sujin
Mitten in seinem Zug kann man dem Spieler die Kontrolle wegnehmen und die SoldierAI übernehmen lassen? Ich danke demjenigen, dessen weises Coding das möglich gemacht hat, hiermit auf Knien :D

Ich auch...
verfasst am: 02.08.2009, 13:07
Programmierer, allgemeines

Registrierdatum: 06.06.2004, 17:19

 Beiträge: 3186
Danke. Aber ganz perfekt ist es noch nicht. Der Spieler kann dem Skript momentan glaube noch "reinpfuschen". Eventuell lässt sich das durch das Setzen von AutoPlay=true vermeiden, das müsste mal jemand ausprobieren (das AutoPlay-Skript wird dadurch nicht gestartet - dazu muss AutoPlay schon beim Erstellen des Bodeneinsatzes auf true gesetzt sein).

Seite: 1 [2] >>




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

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