Sie sind auf Seite 1von 332

2

E D I T I N G

G U I D E
by Mr-Murray

Sascha Mr-Murray Homann 2008 3

Vorwort Vorwort
Der Inhalt dieser Editieranleitung wird dir das Leben im Armed Assault Editor wesentlich angenehmer gestalten. Du hast hiermit die Mglichkeit auch ohne Programmierkenntnisse schnell und einfach anspruchsvolle Missionen fr Armed Assault zu erstellen. Ganz richtig, ohne Programmierkenntnisse! Gewisse Vorkenntnisse aus dem Vorgnger Operation Flashpoint wren natrlich von Vorteil, sind aber nicht zwingend notwendig. In dieser Anleitung werden dir die Teilbereiche des Editors erlutert und anhand von Beispielen nher erklrt. Dazu werden dir die nahezu unbegrenzten Mglichkeiten aufgezeigt, die du in diesem Spiel und dem Editor hast. Du wirst mit ein bisschen Geschick, Ideenreichtum und Kreativitt deine eigenen Szenarien umsetzen und dank der Kameramglichkeiten und dem Einbinden eigener Sounddateien Missionen erstellen, die schon fast mit einem Hollywoodlm zu vergleichen sind und den Spieler in seinen Bann ziehen werden. Dynamische Missionen erstellen, bei denen bei jedem Start das Wetter oder die Uhrzeit anders ist, dass Erfllen von Missionszielen bei jedem Spielablauf verschieden abluft und dass bestimmte Einheiten oder der Spieler bei jedem Neustart an einer anderen Position der Insel startet, sollte hiermit fr dich kein Problem mehr sein. Jetzt liegt es nur noch an deinem Ideenreichtum, deiner Kreativitt und natrlich dir, gute Missionen erstellen zu knnen. Ein Drehbuch, Szenario oder eine Story fr deine Mission ist hier nicht enthalten, dass musst du dir schon selbst ausdenken. Ansonsten hast du mit dem Editor und dieser Anleitung alles, was du brauchst um deine Ideen umzusetzen. Und wenn mal was nicht klappt, Editor aus, Spiel an und einfach mal entspannt in den Krieg ziehen. Dieses Spiel baut als Operation-Flashpoint-Nachfolger mit eigens entwickelter Programmiersprache auf seinen Vorgnger auf. Es sind zwar hier und da nderungen erfolgt und viele Neuheiten eingeossen, aber vom Grundkonzept ist alles nahezu gleich geblieben. Der Editor ist, wie auch bei seinem Vorgnger, mit gleicher bersichtlicher und benutzerfreundlicher Oberche zu bewundern. Und auch die Missionsordner und der Inhalt dieser, sind vom Grundsatz her gleich geblieben. Doch lies, probier und editier dich selbst mit Hilfe dieser Anleitung durch die Welt von Armed-Assault. Viel Erfolg und Spa mit dem Editor wnschen Bohemia Interactive und Mr-Murray.

Anmerkung Anmerkungen
Diese Anleitung ist als Einfhrung in den Armed Assault Editor gedacht und soll gerade dem Editieranfnger den Umgang mit dem Editor erleichtern. Hier aufgefhrte Skripte oder Ablufe sind frei erfunden und knnen selbstverstndlich weiterentwickelt und verbessert werden. Natrlich gibt es noch weit mehr Mglichkeiten im Editierbereich von Armed Assault als hier im Buch erlutert, wobei ich hier auf die ozielle Wiki http://community.bistudio.com/wiki verweisen mchte, die immer auf dem aktuellen Stand ist, was Editing, Scripting und sonstiges rund um Armed Assault betrit. Hier wurde lediglich das grundlegendste mit eingebunden und ein paar Blicke ber den Tellerrand gegeben, die dich anregen und auf eigene Ideen bringen sollen. Smtliche Skripte aus Kapitel 6 stehen im oziellen Forum (www.forum.german-gamers-club.de) fr dich zum Download bereit.

Danksagung Danksagungen
Ich mchte mich mit diesem Editing Guide bei allen Operation Flashpoint und natrlich Armed Assault Fans, die dem Spiel bis heute treu geblieben sind, bedanken. Mein nchster Dank gilt dem groartigen Team von Bohemia Interactive, ohne die es ein Spiel dieses Umfangs und somit diese Anleitung gar nicht geben wrde. Ein weiterer Dank richtet sich an das gesamte Mapfact-Team, BadAss, Chneemann, Flashpoint_K, JrgF., Kriegerdaemon, LockheedMartin$ch, MCPXXL, OneManGang, Silola, Sniping-Jack, Raedor, Lester und Wstenfuchs und unseren helfenden Hnden MemphisBelle, Simba, Marco-Polo-IV, Parvus, Sgt.Ace und SNKMan, welche mich in den letzten Jahren tatkrftig untersttzt haben. Wobei hier ein besonderer Dank Raedor, Chneemann und den oziellen BIS-Betatestern gilt, die mir bei diversen Problemen mit Armed Assault tatkrftig zur Seite standen. Ein weiterer ganz besonderer Dank geht an MemphisBelle, Metal0130 und Matt Rochelle fr die hervorragende englische bersetzung und Andre Scheufeld, Andreas Holzwart, Rastavovich sowie Wolle fr den hervorragenden Support. Des Weiteren bedanke ich mich noch bei allen Freunden und Bekannten und besonders bei meiner Familie und meiner Freundin, die mich in der Zeit der Realisierung dieses Werkes tatkrftig untersttzt und motiviert haben. Euer Sascha Mr-Murray Homann

Community Screenshot Contest


Im Rahmen der Neuauage dieses Buches entschied ich kurzerhand die Community auf irgend eine besondere Art mit ins Buch zu integrieren. Da es leider nicht viele Mglichkeiten dafr gibt, entschied ich mich, nach Rcksprache mit Morphicon dazu, dass dies am besten mit einem Bilderwettbewerb erfolgen knnte. Ich bedanke mich hiermit nochmal bei allen Teilnehmern, die am Wettbewerb teilgenommen haben und auch bei Armed-Assault.de fr die Realisierung und Umsetzung des Wettbewerbs auf selbiger Seite. Im gesamten Buchverlauf der vorausgegangenen Buchversion 1.02 sind die Ergebnisse des Wettberwerbs zumeist auf den Kapitelverzeichnissen, aber auch in den Kapiteln, zu bewundern. Die drei nun folgenden Bilder stellen die Pltze 1 bis 3 dar, welche von der Community als beste Bilder gevotet wurden. Die Gewinner sind keine anderen als:

Platz 1: Marcus-Ergalla (Aljosha Rall) Platz 2: Mr. Burns (Andreas Schmitz) Platz 3: Stoned Boy (Frank Nobis)

Platz 1: Marcus-Ergalla

Platz 2: Mr Burns

Platz 3: Stoned Boy

Inhaltsverzeichnis
Kapitel 1: Der Einstieg 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 1.10 Die Oberche Einheiten einfgen Gruppen einfgen Auslser einfgen Wegpunkte einfgen Synchronisieren Markierungen einfgen Einheiten und Objekte drehen Einheiten und Marker verbinden Einheiten mit Wegpunkten bearbeiten 16 20 26 27 30 35 36 39 39 40

Kapitel 2: Die Dateien 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 2.10 2.11 2.12 2.13 Der Missionsordner Die Mission.sqm Die Description.ext Die Stringtable.csv Die Init.sqs Das Skript (.sqs) Die Funktion (.sqf ) Das Paa-Format Die PBO Die Sounddateien Die Lip-Dateien Der Overview Das Brieng 42 43 48 51 53 54 55 55 56 56 57 58 59

Kapitel 3: Die Waen Fahrzeuge Einheiten Objekte 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 3.10 3.11 3.12 8 Die Handwaen und statische Waen Die Waenbezeichnungsliste Einheiten bewanen und ausrsten Die Waen- und Munitionskiste Fahrzeuge be- und entladen Waenauswahl im Brieng Die Fahrzeugklassen Die Fahrzeugwaen Die Einheitsklassen Die Shellklassen Die Objekt- und Gebudeklassen Die Panzenklassen 64 68 70 71 71 72 73 76 77 80 81 88

3.13 3.14 3.15 3.16 3.17 3.18 3.19 3.20 3.21 3.22

Die Steinklassen Die Schilderklassen Waen- und Magazintypen ausgeben lassen Abgefeuerten Typ ausgeben lassen Hat Einheit Wae? Primr- bzw. Sekundrwae einer Einheit Hat Einheit Munition? Mine erzeugen Waen und Magazine erzeugen Waenblickrichtung ausgeben lassen

90 91 92 92 92 93 93 93 94 95

Kapitel 4: Die Mission 4.1 4.2 4.3 4.4 4.5 4.6 4.7 Der Missionsname Der Missionsstart Das Missionszubehr Die Missionswertung Die Missionsziele Mission beenden Mission speichern 97 97 98 99 99 101 103

Kapitel 5: Das Missionszubehr 5.1 5.2 5.3 5.4 5.5 5.6 5.7 5.8 5.9 5.10 5.11 5.12 5.13 5.14 5.15 5.16 5.17 5.18 5.19 5.20 Leeres oder verschlossenes Fahrzeug Fahrer/Beifahrer eines Fahrzeugs Einheit hat Fahrzeugverbot Einheit in Fahrzeug? Fahrzeug fhrt erst, wenn Einheit eingestiegen ist Gruppe zu Missionsbeginn im Fahrzeug Ein- und Aussteigen lassen Geschwindigkeit einer Einheit Geschwindigkeit ausgeben lassen Einheit bleibt stehen Einheiten starten bzw. stoppen Einheit bewegt sich zum Bestimmungsort Streife laufen, fahren oder iegen Fluchtverhalten einer Einheit oder Gruppe Einheiten, Objekte, Auslser u. Marker versetzen Objekte versenken oder hher setzen Flughhe einer Einheit Punktgenaue Helikopterlandung Einheit begibt sich in ein Gebude Einheit verlsst eine Gruppe oder tritt anderer bei 106 106 106 107 107 108 108 108 108 109 109 110 110 110 111 111 112 112 112 113 9

5.21 5.22 5.23 5.24 5.25 5.26 5.27 5.28 5.29 5.30 5.31 5.32 5.33 5.34 5.35 5.36 5.37 5.38 5.39 5.40 5.41 5.42 5.43 5.44 5.45 5.46 5.47 5.48 5.49 5.50 5.51 5.52 5.53 5.54 5.55 5.56 5.57 5.58 5.59 5.60 5.61 5.62 5.63 10

Einheit ein Ziel zuweisen Einheit wendet sich anderer zu Einheit whlt Wae Einer Einheit Schaden zufgen bzw. heilen Einrichten einer Todeszone Das Prfen eines Bereiches Einheiten in einem Bereich ansprechen Einheitsstatus speichern oder laden Bekanntheitsgrad einer Einheit Freundlicher Feind Befreundete Parteien Der Alarm Tod als Bedingung Distanz zweier Einheiten oder Objekte Einem Fahnenmast eine Fahne zuweisen Brennende Feuerstelle Spielbare Einheit hinzufgen oder entfernen Spielerseite, -namen, typ auslesen bzw. ausgeben Spielereingabe unterdrcken Karte auf den Monitor erzwingen Sichtweite ndern Wetter einstellen Datum und Uhrzeit einstellen Zeitlupe oder Zeitsprint Einheiten und Objekte erzeugen Flares, Rauch und Explosionen erzeugen Einheiten und Objekte lschen Funkmen verndern Einer Gruppe ein Rufzeichen zuweisen Funkspruch abgeben Sound erstellen Eigenen Sound einbinden Identitt festlegen Mimiken Der Actionbefehl Der Animationsbefehl KI abschalten SetVelocity Der Informationstext Einheit bleibt liegen, kniet oder steht IDs verwenden Einheiten in Gebuden platzieren Einheit begibt sich zu Gebudeposition

113 114 114 114 115 115 115 116 117 117 118 119 120 120 120 121 121 121 121 121 122 122 123 123 124 126 127 127 128 129 129 130 134 135 136 139 144 144 144 144 145 148 153

5.64 5.65 5.66 5.67 5.68 5.69 5.70 5.71 5.72 5.73 5.74 5.75 5.76 5.77 5.78 5.79 5.80 5.81 5.82 5.83 5.84 5.85 5.86

Position auslesen Der Eventhandler Texteinblendarten Stringtable Grundwerte Wegpunkte erzeugen Auslser erzeugen Marker erzeugen Rund ums Vehikel Lichtquellen erzeugen Staub erzeugen Rauch erzeugen Feuer erzeugen Dienstgrad vergeben Einheit benutzt Fernglas Einheit ein Fahrzeug zuweisen Einheit ein Team zuweisen Einheit gibt Befehle Hat Einheit Schaden erhalten? Der Flugverkehr Grasdetails heruntersetzen Objekte schrg platzieren Mission verschlsseln bzw. freischalten Leerer Scheinwerfer mit Licht

153 155 157 158 159 160 162 165 167 167 168 169 171 172 172 173 174 174 175 176 176 177 177

Kapitel 6: Die Missions Specials 6.1 6.2 6.3 6.4 6.5 6.6 6.7 6.8 6.9 6.10 6.11 6.12 6.13 6.14 6.15 6.16 6.17 6.18 Die Fallschirmspringer Das GPS-System Der Actionmeneintrag Der Rucksack Zufallspositionen Der Mapclick Die Artillerie Tote Einheiten bzw. Fahrzeuge lschen Spielbeschleunigung dauerhaft unterdrcken Der Bullet Mode Das Feindmeldeskript Der Airstrike Der Airvehiclecreator Der Scheinwerfer Der Zeitzhler Das House-Patrol-Script Das Minen-Skript Das Vehikeltransportskript 179 180 181 181 185 187 189 194 195 196 197 198 201 203 204 205 208 209 11

6.19 6.20 6.21 6.22 6.23 6.24 6.25

Das Mwenskript Das Insektenskript Der Bombenleger Der Aufklrer Einheit ergibt sich Der Teleport Das Verfolgungsskript

213 215 216 217 218 221 222

Kapitel 7: Multiplayer 7.1 7.2 7.3 7.4 7.5 7.6 7.7 7.8 7.9 7.10 7.11 7.12 7.13 7.14 7.15 7.16 7.17 7.18 7.19 7.20 7.21 7.22 7.23 Die Multiplayermission Die Respawnpunkte Flexible Respawnpunkte Die MP-Description.ext Die Respawnarten Das Deathmatch Multiplayerbereich festlegen Zeit und Wertung Punkte vergeben bzw. anzeigen lassen Die Zeitanzeige Der Class Header Der Respawndialog Stringtable MP Grundwerte Fahrzeug-Respawn Mr-Murrays Fahrzeug-Respawn Flaggen Grundinformationen Capture The Flag Die Publicvariable Allgemeines Die Steuerungsbefehle Bewanung im MP Spielerbezogene Textmitteilung Join In Progress (JIP) 224 224 225 226 227 227 228 229 231 232 233 233 234 235 236 238 240 246 247 249 250 251 252

Kapitel 8: Das Camscripting 8.1 8.2 8.3 8.4 8.5 8.6 8.7 8.8 12 Die Steuerung Die Kamerakoordinaten Kamera erstellen Die erste Szene Kamera an ein Fahrzeug/Einheit heften Text- und Einblendeekte Kamera-Eekte Preload - Objekte und Positionen vorladen 255 256 257 258 260 261 262 262

8.9

Kartenanimation ausfhren

263

Kapitel 9: Scripting 9.1 9.2 9.3 9.4 9.5 9.6 9.7 9.8 9.9 9.10 9.11 9.12 9.13 Die Variable Wahrheitswerte Logische Operatoren Die While-Do-Schleife Der Zhler If-Then-Else Der Delay Random WaitUntil Die Klammer Das Semikolon Der Array Funktionen-Grundwissen 265 266 267 268 268 268 269 269 269 270 271 271 274

Kapitel 10: Dialoge 10.1 10.2 10.3 10.4 10.5 10.6 10.7 10.8 10.9 10.10 10.11 Was sind eigentlich Dialoge Basisdenitionen (Konstanten) Basisklassen und Subklassen Die Schriftarten Eine Grak einblenden Einen Text einblenden Visieransichten einblenden Eigene Landkarte einblenden Einen Button denieren Einen Rahmen denieren Die Videosequenz 279 280 283 286 287 288 289 291 292 294 297

Kapitel 11: Allgemeines 11.1 11.2 11.3 11.4 11.5 11.6 11.7 11.8 11.9 11.10 11.11 Eigenes Prol Die ArmA Cheats Der MOD-Ordner Die Verwendung von Addons Der Missionsrelease Die ArmA.rpt Das Natoalphabet Die Dienstgradabzeichen Die Squad.xml Die Startparameter Tastenkombinationen, Tipps und Tricks 299 301 302 303 304 305 306 307 308 311 313 13

Stichwortverzeichnis Syntaxverzeichnis Impressum

314 322 332

14

Kapitel 1

Kapitel 1
- Der Einstieg Dieses Kapitel soll dir zunchst mehr bersicht und Durchblick ber die Oberche des Editors verschaen und dich auf die weiteren Kapitel vorbereiten. Mit Hilfe dieses Kapitels wirst du einen sicheren Umgang mit der Oberche des Editors erlangen und erste gute Ergebnisse erzielen. Es erlutert dir zunchst die Hauptfunktionen der einzelnen Bereiche.

1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 1.10

Die Oberche Einheiten einfgen Gruppen einfgen Auslser einfgen Wegpunkte einfgen Synchronisieren Markierungen einfgen Einheiten und Objekte drehen Einheiten und Marker verbinden Einheiten mit Wegpunkten bearbeiten

16 20 26 27 30 35 36 39 39 40

15

1.1 - Die Oberche


Die Oberche des Editors ist, wie man sieht, recht berschaubar und sehr benutzerfreundlich aufgebaut. In Zusammenarbeit mit der Maus, den Pfeil- und F-Tasten hat man die Mglichkeit relativ schnell die einzelnen Bereiche und Unterbereiche anzuwhlen um damit zu arbeiten. Im Bereich Info deniert man Dinge wie Wetter, Datum, Uhrzeit, Jahreszeit und auf welcher Seite die Widerstandseinheiten kmpfen. Des Weiteren gibt man hier den Namen der Mission und darunter eine kurze Beschreibung der Mission mit an. Hier ist es mglich ein Startwetter festzulegen und anzugeben, wie es sich im spteren Missionsverlauf ndern soll. Der Nebel lsst sich hierbei unabhngig von dem Wetter einstellen. Das Verstellen der Jahreszeiten hat unter anderen auch nderungen auf den Wasserstand und die Helligkeit zu den verschiedenen Uhrzeiten zur Folge. Wie auch im echten Leben, sind die Tage im Sommer lnger als im Winter. Nachrichtendienst Name der Mission Beschreibung der Mission Datum und Uhrzeit Wettervorhersage Gegenwrtiges Wetter

Gegenwrtiger Nebel

Spteres Wetter

Spterer Nebel

Seite der Racs(Widerstand)

16

Kapitel 1

F-Tasten Mit Hilfe der F-Tasten 1 bis 6 whlt man die Untermens an. Dieser Abschnitt soll zunchst eine grobe Erluterung der F-Tasten darstellen, welche im Laufe des Kapitels noch einzeln und nher erklrt werden. 1 ermglicht es Einheiten, Fahrzeuge und Objekte auf die Karte zu setzen und individuell einzustellen. hat gleich zwei Funktionen. Zum einen kann man damit gleich ganze Gruppen auf die Karte setzen und zum anderen dient 2 als Verbindungstool, mit welchem man Einheiten und Auslser verbinden kann. Mit 3 setzt man Auslser, welche man sehr exibel und fr viele Aktionen verwenden kann. Als Beispiel soll hier das Funkmen dienen, welches unter anderem ja auch in den Auslsern deniert wird. Mit der 4-Taste weist man Einheiten oder auch einer Logik Wegpunkte zu, welche sie dann nacheinander abarbeiten und je nach Denition an gewissen Stellen Aktionen durchfhren oder auslsen ist eine Funktion, welche gerne bersehen wird, obwohl sie sehr ntzlich ist. Sie ermglicht es Wegpunkte und Auslser auf einander abzustimmen. Demnach wrde der nchste Wegpunkt erst angelaufen werden, wenn der damit verbundene Wegpunkt oder Auslser bereits ausgelst wurde. Die 6-Taste fhrt ins Untermen der Marker, mit welchem die Karte sehr taktisch gestaltet werden kann und dem Spieler ein wenig mehr bersicht ber die Mission gibt.

17

Einsatz Im oberen Abschnitt whlt man zunchst den Arbeitsbereich aus. Hier hat man die Auswahl zwischen Einleitung, Einsatz und Abspann gewonnen und Abspann verloren. Es stehen also vier Karten pro Mission zur Verfgung, welche genutzt werden knnen. Dies ist sehr vorteilhaft, denn es spart eine Menge Performance, da die Einleitungs- bzw. Abspann-Einheiten und -Objekte nicht auf der eigentlichen Missionskarte sind. Zustzlich hat man somit auch gleich mehr bersicht beim Editieren auf der Hauptkarte. Ein weiterer Punkt ist, dass der Spieler beim mehrfachen Spielen der Mission das Intro irgendwann nicht mehr sehen mag und dann die Mglichkeit hat, dieses per Leertaste wegzuklicken. Wrde das Intro auf der Hauptkarte erstellt, wre ihm dies nicht mglich und er msste die Sequenz jedes Mal bis zum Ende schauen, was auf Dauer etwas demotivierend sein kann. Laden Mit Laden ldt man, wie der Name schon sagt, seine Missionen in den Editor. Natrlich muss diese auch im Ordner C:\EigeneDateien\ArmA\Benutzer\Missions vorhanden sein. Sprich, man muss zunchst seine Mission abgespeichert haben. Denn nach der Installation des Spiels ist dieser Ordner noch leer! Fertige Missionen, welche im ArmA-Hauptmen zum Spielen ausgewhlt werden knnen, kann man ohne ein PBO-Tool nicht in den Editor laden. Diese mssen dazu erst mit einem solchen Tool entpackt werden. Zusammenfhren Zusammenfhren steht auch fr Importieren. Man kann hiermit eine andere Mission bzw. die Einheiten, Objekte, Auslser, Wegpunkte, Marker usw. aus einer anderen Mission importieren. Importiert wird hierbei alles, was auf dieser Karte zu nden ist, jedoch nicht der Ordnerinhalt. Das Zusammenfhren ist sehr ntzlich, wenn man beispielsweise eine sehr komplexe Mission, die eine Weile zum Laden bentigt, editiert. Wenn man nun an einer Position noch ein paar Objekte platzieren und ausrichten mchte, msste man teilweise ewig warten bis die Mission zur Vorschau startet. Aus diesem Grund ist es sinnvoll eine zweite Map anzulegen, welche man dann als Mission2 abspeichert und dort die Objekte setzt und ausrichtet. Ist man damit fertig, importiert man diese Mission danach einfach auf seine Hauptmissionskarte. Eine weitere gute Mglichkeit ist, wenn man sich Vorlagen anlegt. Also zum Beispiel Karten auf welchen nur bestimmte Dinge vorgefertigt sind. Zum Beispiel ein selbsterstelltes Lager oder hnliches. Man kann dies dann immer auf seine aktuelle Map importieren ohne es nochmal neu erstellen zu mssen. 18

Kapitel 1

Speichern Mit Speichern wird die Mission abgespeichert. Hierbei kann man auswhlen, ob die Mission zunchst als Editormission abgespeichert oder schon als fertige Mehrspielerbzw. Einzelspielermission exportiert werden soll. Whrend Editormissionen im Verzeichnis C:\EigeneDateien\ArmA\Missions hinterlegt werden, ndet man seine exportierten Mehrspielermissionen im Spieleverzeichnis unter MP-Missions und seine Einzelspielermission im Verzeichnis Missions wieder. Auf dem Bild sieht man den Ordner Missions unterEigene Dateien.

Zurcksetzen Mit Zurcksetzen subert man die Karte. Die Karte wird damit wieder in ihren Urzustand versetzt. Dabei wird lediglich alles was auf der Karte ist gelscht. Der Missionsordner samt Inhalt bleibt aber weiterhin vorhanden. IDs zeigen Mit dem Button IDs zeigen lsst man sich die IDs der Objekte auf der Karte anzeigen. Denn jedes Objekt auf der Karte hat eine ID, mit welcher man es ansprechen kann. Dies macht es mglich dem Objekt Schaden zuzufgen oder zu prfen, ob es noch am Leben oder, anders gesagt, noch existent ist. Texturen zeigen Hiermit lassen sich die Texturen einer Karte anzeigen. Jede Variante, also mit Texturen anzeigen oder ohne, hat gewisse Vor- und Nachteile beim Editieren. Letztendlich muss jeder fr sich entscheiden, wie er lieber editieren mchte. Vorschau Mit Vorschau kommt man in die Missionsvorschau, also direkt in die Mission, die man gerade editiert und kann sich so sein Editierergebnis anschauen und testen. Weiter Hiermit wechselt man die letzte Vorschau zurck. nderungen, die man bis dahin im Editor vorgenommen hat, sind dann noch nicht sichtbar. Beenden Mit Beenden verlsst man den Editor und kommt zurck zum Hauptmen.

19

1.2 - Einheiten einfgen (1)


Mit der Taste 1 oder per Mausklick whlt man das Untermen Einheit an, um eine Einheit, ein Objekt, ein leeres Fahrzeug, eine Logik oder hnliches einzufgen. Hier ist es mglich smtliche Einstellungen fr jede Einheit individuell vorzunehmen. Seite Osten Westen Widerstand Zivil Leer Logik Klasse Luft Munition Gepanzert Auto Men Minen Objekte Schie Sounds Statisch Untersttzung Auswahl der Seite Osteinheiten Westeinheiten Widerstand Zivilisten Leere Vehikel Logik Art der Einheit Helikopter, Flugzeug Waen- u. Munition Panzer Autos, Krad, Lkw Soldaten Minen Statische Objekte Boote Sounds Geschtze, MGs Support-Lkws

Kontrolle - Spieler oder Spielbar Hier whlt man aus, ob man Spieler dieser Einheit sein soll oder ob diese Einheit spielbar bzw. nicht spielbar, also eine KI ist. Spielbare Einheiten werden beispielsweise fr Multiplayermissionen bentigt, bei denen ja fr die Spieler mehrere Einheiten zur Auswahl stehen mssen. Fr Singleplayermissionen ist Playable ntig, wenn man den Characterswitch nutzen mchte. Der Spieler kann dann in der fertigen Mission zwischen den spielbaren Soldaten umherschalten und diese einzeln steuern und in Position bringen. Player Playable Non Playable Spieler Spielbar Nicht Spielbar

20

Kapitel 1

Bei Fahrzeugen hat man zustzlich die Auswahl, als was der Spieler im Fahrzeug sitzen soll und kann dies somit sofort festlegen. Player as Driver Player as Pilot Player as Gunner Spieler als Fahrer Spieler als Pilot Spieler als Schtze

Fahrzeugstatus - Einstellung des Fahrzeugs Default Locked Unlocked Voreinstellung Abgeschlossen Nicht abgeschlossen

Die Syntax fr externes Ansteuern ber ein Skript oder eine Initzeile sieht wie folgt aus:

Name lock true Name lock false

Fahrzeug verschlossen Fahrzeug offen

Dienstgrad - Dienstgrad der jeweiligen Einheit Hier wird der Rang bzw. Dienstgrad der jeweiligen Einheit eingestellt. Die Einheit mit dem hchsten Dienstgrad ist automatisch der Gruppenfhrer der Gruppe. Befrderungen im Spielverlauf werden im Kapitel 5.76 ausfhrlich erlutert. Private Corporal Sergeant Lieutenant Captain Major Colonel Soldat Gefreiter Feldwebel Leutnant Hauptmann Major Oberst

Die Syntax fr das Vergeben eines Ranges sieht dabei wie folgt aus: Player setRank "Sergeant" Einheit - Art der Einheit Nachdem man bei Klasse festgelegt hat, ob das Objekt ein Soldat oder Fahrzeug ist, kann man hier die Art des Objektes auswhlen. Je nach Klassen-Auswahl ist hier die Unterauswahl anders. Bei Infanterie hat man die Auswahl der Soldaten vom Grenadier bis zum Scharfschtzen, bei Fahrzeuge die Auswahl zwischen verschiedenen Fahrzeugen und so weiter.

21

Speziell - Besonderheit einer Einheit Hier lassen sich gleich verschiedene Einstellungen vornehmen, die beim Editieren gerne bersehen werden. Denn hier ist es nicht nur mglich einzustellen, ob ein Flugzeug oder Helikopter beim Start iegt, sondern noch weit mehr. Keine Wrde man sich eine Einheit mit dem Spezial Keine unterstellen und sie irgendwo weit weg auf die Karte stellen, wrde sie sich, wenn sie wei wo sich der Leader bendet, auf den Weg zu ihm begeben. Anders bei Formation Ist beim Spezial der unterstellten Einheit In Formation ausgewhlt, wird die Einheit gleich, egal wo sie auf der Karte steht, an ihrer Formationsstelle neben dem Leader stehen. Setzt man eine Gruppe auf eine Karte, von der eine Einheit ein Fahrzeug ist (muss nicht der Leader sein), und whlt bei allen anderen Einheiten bei Spezial Im Laderaum aus, werden alle Einheiten der Gruppe in dem Fahrzeug sitzen. Ein Flugzeug oder ein Heli sind bei Missionsstart gleich in der Luft.

In Formation

Im Laderaum

Fliegen

Name - Name der Einheit Hier wird der Name der jeweiligen Einheit oder des Objektes angegeben. Dieser ist sehr wichtig, wenn man diese Einheit per Skript oder hnliches anprechen mchte. Der hier angegebene Wert ist gleichzeitig eine globale Variable.

Fhigkeiten - Fhigkeiten einer Einheit Hier deniert man die Fhigkeiten einer Einheit. Diese bestimmt, wie gut diese schieen, reagieren und so weiter. Die Fhigkeiten werden mit einem Wert zwischen 0 und 1 deniert. 0 steht fr weniger gut und 1 fr sehr gut. In Syntaxform schaut das Ganze wie folgt aus: Name setSkill 0.8 Name setUnitAbility 0.6 Es ist auch mglich einen Zufallsskill einzustellen. Dazu msste man in der Initialisierungszeile der Einheit folgende Syntax eingeben: this setSkill (Random 0.6) Jetzt wrde der Einheit ein Zufallsskill im Bereich von 0 bis 0.6 zugewiesen. 22

Kapitel 1

Azimut - Die Blickrichtung einer Einheit Hier legt man beim Einstellen der Einheit eine grobe Blickrichtung fest und kann somit auch gleich den Blickrichtungswert sehen. Die Blickrichtungswerten sind, wie im realen Leben auch, von 0 bis 360 Grad deniert. Besttigt man nun mit OK, sieht man die Einheit mit der ausgewhlten Blickrichtung auf der Karte. Wenn man diese im Nachhinein nochmal drehen mchte, weil sie doch nicht in die richtige Richtung schaut, geht das auch in Kombination mit der Maus und der Shift-Taste. Dazu bleibt man auf der Karte und klickt sich nicht per Doppelklick ins EinheitenUntermen, sondern whlt die Einheit an, indem man sie nur ein Mal anklickt. Jetzt hlt man die Shift-Taste und die linke Maustaste gedrckt und bewegt die Maus. Die Einheit wird sich nun mit Hilfe der Mausbewegungen frei drehen lassen. Zum Drehen von mehreren Einheiten oder Objekten gilt das gleiche Prinzip. Dazu markiert man alle zu drehenden Einheiten und bewegt dann die Maus mit gedrckter linker Maustaste. Eine andere Mglichkeit eine Einheit beispielsweise in einer Sequenz auszurichten wre:

Name setDir Wert Name setFormDir Wert

Hierzu kann man den Wert aus dem Einheiten-Untermen mit der Tastenkombination Strg + C kopieren und fr Wert einfgen. Initialisierung - Die Initialisierungszeile Jede Einheit bzw. jedes Objekt hat eine Initialisierungszeile. Befehle, welche dort eingetragen werden, werden beim Missionsstart sofort ausgefhrt. Von hier aus kann man unter anderem Skripte starten oder wie oben bei Fhigkeiten eine Zufallsskillsyntax angeben. Generell lohnt es sich eine Init.sqs im Missionsordner zu erstellen, welche die Initalisierungsdatei der Mission darstellt und ohne angeben einer Syntax beim Missionsstart automatisch ausgefhrt wird. Eine nhere Erklrung der Init.sqs ndet man im Kapitel 2.5 Die Init.sqs. Befehle werden hier generell mit einem ; getrennt! Sogar whrend einer laufenden Mission ist es mglich einen Eintrag in der Initialisierungszeile einer Einheit vorzunehmen und ausfhren zu lassen. Dazu nutzt man zunchst den setVehicleInit-Befehl und zum Aufrufen dann processInitCommands. Player setVehicleInit "Player say 'Sound1' "; processInitCommands; Beschreibung - Die Infozeile In dieser Zeile gibt man einen Namen oder eine kleine Beschreibung zur jeweiligen Einheit an. Diese Beschreibung wird dann angezeigt, wenn die Einheit als spielbare Einheit deniert wurde und man das Switchmen net. 23

Gesundheit/Panzerung - Der Gesundheitsstatus Mit dem Schieberegler lsst sich der Gesundheits- bzw. Panzerungsstatus einer Einheit festlegen. Einheiten knnen also schon verletzt auf die Karte gestellt werden oder eben Fahrzeuge, wenn sie als Wrack dienen sollen, ohne jegliche Panzerung. Der Wert wird ebenfalls wieder von 0 bis 1 deniert und lsst sich auch extern des EinheitenUntermens mit einer Syntax festlegen. Diese schaut wie folgt aus:

Name setDamage 1 Name setDamage 0

Nun htte die Einheit, der Panzer oder das Objekt einen Schadenswert von 1 und ist tot oder zerstrt. Diesen Wert kann man natrlich wieder zurcksetzen und mit

wre die Einheit nun wieder geheilt oder repariert. Selbstverstndlich knnen auch Zwischenwerte verwendet werden. Mit 0.5 wre die Einheit halt nur zur Hlfte geheilt bzw. repariert usw. Support: Supportfahrzeuge wie Treibsto-, Munitions- und Reparaturfahrzeuge knnen mit einem Wert von 0 bis 1 versehen werden. Ist dieser 0, kann man diese nicht mehr zum Tanken, Reparieren oder Aufmunitionieren nutzen. Mit der Syntax

Name setRepairCargo 1
weist man einem Reparatur-Lkw einen Reparaturwert zu. Treibsto - Der Tankstatus Hier stellt man die Treibstomenge ein, die ein Fahrzeug haben soll. Diese lsst sich ebenfalls extern mit einer Syntax ansteuern, welche wie folgt aussieht:

Support:

Name setFuel 0 Name setFuel 1 Name setFuelCargo 0.3

steht fr einen leeren Tank steht fr einen vollen Tank weist Tank-Lkw einen Fllwert zu

Munition - Der Munitionsstatus Einstellung der Munitionsmenge, die die Einheit beim Missionsstart haben soll. Support:

Name setAmmoCargo 0.7 weist Munitions-Lkw einen Fllwert zu

24

Kapitel 1

Anwesenheit - Wahrscheinlichkeit der Anwesenheit Hier lsst sich die Wahrscheinlichkeit der Anwesenheit einer Einheit in Prozent einstellen. Stellt man den Regler auf die Mitte, wird die Einheit mit einer Wahrscheinlichkeit von 50% auf der Karte sein. Dies bringt sehr viel Dynamik ins Spiel, da man nie vorhersagen kann, ob die Einheit oder Einheiten wirklich auch auf der Karte sind. Anwesenheit - Bedingung der Anwesenheit Einheit ist nur anwesend, wenn eine Bedingung erfllt ist. Diese Bedingung wird hierbei beim Missionsstart abgefragt. Gibt man hier CadetMode ein, wird die Einheit nur im CadetMode auf der Karte sein. Radius der Platzierung - Platzierungsradius der Einheit Hier stellt man den Radius ein, in welchem die Einheit beim Spielstart stehen soll. Diese Einheit wird dann bei jedem Spielstart irgendwo in dem Radius erscheinen. Info-Alter - Bekanntheitsgrad einer Einheit Info-Alter bestimmt den Bekanntheitsgrad einer Einheit. Es sagt also aus, was die Gegnerseite ber diese Einheit wei und wie aktuell diese Information ist. Dabei gibt es folgende Auswhlmglichkeiten: "ACTUAL" "5 MIN" "10 MIN" "15 MIN" "30 MIN" "60 MIN" "120 MIN" "UNKNOWN" Das Info-Alter lsst sich auch anhand einer Syntax vergeben. Diese lautet dann wie folgt: Player setTargetAge "10 MIN"

25

1.3 - Gruppen einfgen (2)


Mit der Taste 2 whlt man das Untermen Gruppen an, welches es einem ermglicht gleich ganze Gruppen einzufgen. Dies spart eine Menge Zeit, da man nicht jede Einheit einzeln einsetzen muss. Hier gibt es fr jede Seite vordenierte Gruppen, welche man dann einfgen kann. Natrlich ist es auch mglich diese Gruppen nach belieben zu bearbeiten. Eine Gruppe zu vergrern, zu verkleinern oder alle Einheiten einer Gruppe individuell einzustellen und zu bewanen ist sehr leicht zu handeln. Nachdem man sich bei Seite fr eine Seite entschieden hat, hat man bei Typ die Wahl zwischen einer Infanterie-, Panzer, oder Helikoptergruppe, welche man so sehr schnell einfgen kann.

Bei Name hat man dann die Mglichkeit sich eine von fnf Typen auszusuchen.

Hier hat man zum Beispiel bei West und Ost die Auswahl zwischen: Basistrupp Waentrupp Spezialtrupp Motorisierte Patrouille Panzergrenadiertrupp Gemischte Infanteriegruppe Kleinere Infanteriegruppe Spezialeinheit Infanteriegruppe mit Fahrzeug Infanteriegruppe mit Schtzenpanzer

Eine hnliche Auswahl hat man neben den Infanterietruppen natrlich auch unter den Panzerplatoons oder den Luftgeschwadern. Bei den Air Squadrons muss man darauf achten, dass bei den einzelnen Vehikeln das Spezial auf Fliegen steht, wenn diese gleich zu Missionsbeginn iegen sollen. Mit Azimut stellt man hierbei wieder, wie auch bei anderen Einheiten, die Blickrichtung der Gruppe ein. 26

1.4 - Auslser einfgen (3)


Den Auslser kann man als Ein- bzw. Ausschalter oder Prfutensil benutzen. Er ermglicht unter anderem auch das Einfgen der Funksprche von Alpha bis Juliett. Von der Funktionsweise her unterscheiden sich Auslser und Wegpunkte bis auf ein paar Extras nicht sonderlich. Der Auslser ermglicht es im Missionsablauf gewisse Aktionen zu starten oder zu stoppen. Mit Hilfe des Untermens Eekte hat man sogar die Mglichkeit Sounds, Musik, Ressourcen einspielen zu lassen oder auch Videoanimationen zu starten. Mit der Aktivierungszeile hat man zustzlich die Mglichkeit beim Betreten des Auslserbereiches Skripte oder hnliches zu starten oder beim Verlassen des Auslserbereiches bei Deaktivierung wieder zu stoppen. Zudem kann man den Auslser auch als Lineal benutzen, wenn man z.B. mehrere Objekte gerade aneinander setzen mchte. Dazu wrde man z.B. bei Achse A den Wert 100 und bei Achse B den Wert 1 angeben. Jetzt hat man ein prima Lineal oder Abstandsmesser. Achse A/Achse B Winkel Ellipse/Rechteck Einmal/Mehrfach Wirkungsbereich Winkel Form der Flche Anzahl der Auslsung

Kapitel 1

Aktivierung durch Westen Osten Widerstand Zivilisten Spiellogik Jeder Funk AJ Erobert von Westen Erobert von Osten Erobert von Widestand Art der Aktivierung Vorhanden Auslser wird aktiviert, wenn bei Aktivierung zum Beispiel West ausgewhlt wurde und eine westliche Einheit den Auslserbereich betritt.

Nicht vorhanden Auslser wird deaktiviert, wenn bei Aktivierung zum Beispiel West ausgewhlt wurde und keine westliche Einheit mehr in dem Auslserbereich ist. Entdeckt durch Entdeckt durch Westen, Osten, Widerstand oder Zivilisten. Wird man im festgelegten Auslserbereich durch eine im Auslser festgelegt Seite entdeckt, werden die Aktionen ausgefhrt, die im Auslser deniert sind. 27

Countdown/Timeout - Zhler Hier wird festgelegt, ob der Auslser gleich bei Auslsung oder erst nach Ablauf einer festgelegten Zeit ausgelst werden soll. Durch die Mglichkeit einen Min, Mid und MaxWert einzugeben hat man auch hier wieder eine gewisse Dynamik. Whrend der MinWert fr die mindeste Wartezeit steht, stehen der Mid-Wert fr den Mittelwert und der Max-Wert fr den Maximalwert der Wartezeit. Durch Angabe aller drei Werte kann man die Auslsung dem Zufall berlassen. Gibt man berall den gleichen Wert ein, so wird der Auslser nach Ablauf der angegebenen Zeit auslsen. Typ - Auslsertyp Keine Von Westen bewacht Von Osten bewacht Von Widerstand bewacht Schalter Ende 1 bis 6 Verlieren Keine Geschtzt durch Westen Geschtzt durch Osten Geschtzt durch Widerstand Schalten Ende einer Mission Verloren am Ende

Text - Der Auslsertext Den Auslsertext kann man im Editor lesen, wenn man mit der Maus ber das Auslserfhnchen fhrt. Er soll die Orientierung auf komplexen Karten erleichtern. Man muss so nicht jeden Auslser wieder nen und schauen was darin deniert ist, sondern erkennt ihn so am selbst festgelegten Namen schnell wieder. Des Weiteren wird hier der Text fr das Funkmen deniert. Wenn man also mehrere der Funksprche verwendet, kann man diese hier entsprechend benennen und man sieht in der spteren Mission besser welcher Funkspruch fr welche Aktion vorgesehen ist. Zum Beispiel: Auslser 1: Auslser 2: Aktivierung: Text: Aktivierung: Text: Radio Alpha Artillerie anfordern Radio Bravo Untersttzung anfordern

Beim Funkgert auf der Kartenansicht wrde jetzt Artillerie anfordern und Untersttzung anfordern stehen, was ein gewisses Ma an bersicht gewhrleistet. Name - Der Auslsername Der Name eines Auslsers ist wichtig, wenn man diesen auf irgendeine Art ansprechen mchte. Wenn man ihn beispielsweise versetzen oder lschen will. Mehr zum Versetzen oder Lschen eines Auslsers gibt es auf Seite 30 zu lesen. 28

Kapitel 1

Bedingung - Die Bedingung Das Angeben einer Bedingung ermglicht es einen Auslser sozusagen auf Stand by zu setzen oder ihn etwas prfen zu lassen. Dabei wrde der Auslser erst starten, wenn diese Bedingung erfllt ist. Die Angabe von Bedingungen kann hierbei ganz verschieden aussehen. Zum Einen kann man hier die Variante Verwendung einer Variablen und zum Anderen das Prfung einer Bedingung verwenden. Die Bedigungszeile beinhaltet bereits automatisch das IF bzw. ?. Daher wird in dieser Zeile kein ? verwendet! Verwendung einer Variablen Gibt man in der Bedingungszeile eine Variable an, wird der Auslser erst ausgelst, wenn diese erfllt, also true ist. Wenn in der Bedingungszeile beispielsweise die Variable Angri steht, wartet der Auslser, bis Angri auf true geschaltet wurde. Irgendwo auf der Karte muss dazu bei Aktivierung eines Auslsers, eines Wegpunktes oder in einem Skript die Variable Angri also zunchst auf true gesetzt werden, damit dieser aktiviert wird. Das macht man mit folgender Syntax: Angri=true Der Auslser wurde nun aktiviert und startet die Aktionen, die darin deniert wurden.

Prfung einer Bedingung Eine andere Variante ist die Prfung, ob eine Bedingung erfllt ist. Zugegeben, eine Variable ist ja auch eine Bedingung, die geprft und erfllt werden muss. Hierbei ist eine Bedingung im vorstellbaren Sinne gemeint, welche man quasi als vorstellbare Aktion denieren kann. Zum Beispiel, dass Soldat1 nicht mehr lebt oder der Spieler(Player) im Fahrzeug Jeep1 sitzt. Dies wrde dann wie folgt aussehen: Bedingung: Spieler sitz in Jeep1: Player in Jeep1

oder

vehicle Player == Jeep1 !(alive Soldat1)

Bedingung: Soldat1 lebt nicht mehr: not alive Soldat1 oder

Bei Aktivierung In dieser Zeile kann man fast alles denieren, was ausgefhrt werden soll, wenn der Auslser ausgelst wird. Das Starten eines Skriptes, eine Bedingung auf true schalten usw.. Es ist also mglich so ziemlich jede Syntax hier anzugeben, die Armed Assault zu bieten hat. Natrlich gibt es auch Grenzen, aber da kann man ja dann auf ein Skript ausweichen. Auch der bersicht halber, ist es oftmals besser auf ein Skript auszuweichen, wenn hier zum Beispiel unzhlige Befehle oder hnliches angegeben werden. 29

Bei Deaktivierung Natrlich kann man bei einem Auslser auch eine Aktion starten lassen, wenn dieser deaktiviert wird. Als Beispiel dient hier mal die Variante mit einem Actionmeneintrag. Wenn der Spieler den Auslserbereich betritt, soll er einen Actionmeneintrag namens Eintrag bekommen und wenn er den Bereich wieder verlsst, soll er wieder gelscht werden. Dazu vergibt man:

bei Aktivierung: bei Deaktivierung:

ID=Player addAction ["Eintrag","skript.sqs"] Player removeAction ID

Auslser versetzen oder lschen Auslser lassen sich bei Bedarf verschieben oder auch lschen. Dazu muss der Auslser mit einem Namen versehen werden, um ihn direkt ansprechen zu knnen. Dazu werden unter anderem folgende Befehlszeilen verwendet: Auslsername setPos getPos Name Oder in Koordinatenform: Auslsername setPos [x,y,z]

1.5 - Wegpunkte einfgen (4)


Mit den Wegpunkten legt man nicht nur die Route fest, auf welcher sich eine Einheit bewegen soll, sondern auch Einstellungen wie Verhalten, Formation, Kampfmodus und Geschwindigkeit. Ein Wegpunkt kann von der Funktionsweise her mit einem Auslser verglichen werden. Wenn die jeweilige Einheit ihren Wegpunkt erreicht hat, wird eine Aktion ausgefhrt bzw. begibt sie sich weiter zu ihrem nchsten Wegpunkt. Hinzu kommen aber noch eine Menge weiterer Denitionsmglichkeiten, wie zum Beispiel Soundeekte oder Musik am jeweiligen Wegpunkt abzuspielen oder hnliches.

30

Kapitel 1

Typ Auswhlen - Die Aktionen Hier lassen sich fr jeden Wegpunkt individuelle Einstellungen festlegen, welche eine Einheit beim Erreichen des Wegpunktes ausfhren soll. Move Destroy Get in Seek and destroy Join Join and lead Get out Cycle Load Unload Transport unload Hold Sentry Guard Talk Scripted Support Get in next Released Bewegen Zerstren Einsteigen Suchen und Zerstren Anschlieen Anschlieen und fhren Aussteigen Wiederholen Laden Entladen Transport entladen Halten Aufklren Bewachen Sprechen Geskriptet Untersttzen In Nhestes einsteigen Entlassen

Aufklren Besonderheit Weist man einer Einheit/Gruppe einen solchen Wegpunkt zu, wird sie bis zu diesem Punkt laufen und dort auf Feindkontakt warten, bevor sie zum Nchsten weiterluft.

Wegpunktfolge Beim Anklicken dieser Option, kann man smtliche Wegpunkte einer Einheit mit jeweiliger Aktion auf einem Blick sehen und im Nachhinein sogar die Abfolge ndern, indem man einfach eine andere Zahl auswhlt.

Beschreibung Dies ist die Beschreibung eines Wegpunktes. Was hier eingetragen wird, wird dann spter nur im Cadet-Mode angezeigt werden und erleichtert dem Anfnger das Spielen und die Orientierung in einer groen und komplexen Mission. Beispiel: Zerstren Sie das Ziel 31

Kampfmodus Hier deniert man den Kampfmodus, den eine Einheit oder Gruppe haben soll. Nie schieen Nicht schieen Nicht schieen, Angri nach eigenem Ermessen Feuer ernen Feuer ernen, eigenstnd. Angri Blue Green White Yellow Red

Die Syntax, um das Verhalten per Auslser oder Skript festzulegen, schaut hierbei wie folgt aus: Name setCombatMode "Blue" Verhalten Hier lsst sich das Verhalten einer Einheit oder Gruppe denieren, wobei man folgende Auswahlmglichkeiten hat: Careless Safe Aware Combat Stealth Achtlos Sicher Wachsam Kampf Tarnung

Natrlich lsst sich das Verhalten auch wieder per Auslser oder Skript denieren. Die Syntax hierfr lautet: Name setBehaviour "Careless" Formation Diverse Situationen auf dem Schlachtfeld erfordern gewisse Formationen, welche in der jeweiligen Situation von Vorteil sind. Diese schauen wie folgt aus, wobei der Leader hier in grn zu sehen ist: Columm - Kolonne Staggered Columm - Gestaelte Kolonne

Wedge - Keil

Vee - V-Frmig

32

Kapitel 1

Echelon Left - Stael links

Echelon Right - Stael rechts

Line - Reihe

Delta - 3-Reihig

Column (Kolonne Kompakt)

Natrlich kann man einer Gruppe auch eine Formation per Auslser oder Skript zuweisen. Das Ganze schaut dann in Sytaxform wie folgt aus: Name setFormation "Line" Geschwindigkeit Hiermit wird die Geschwindigkeit einer Einheit am jeweiligen Wegpunkt deniert. Zum Beispiel ist es mglich, einer Einheit zum Wegpunkt 1 eine langsame und zum Wegpunkt 2 eine schnellere Geschwindigkeit zu geben. Dabei hat man die Auswahl zwischen drei Varianten. Auto / Limited / Normal / Full Hierbei ist es auch wieder mglich das Ganze in einem Auslser oder Skript zu denieren. Syntax: Name setSpeedMode "Limited" Platzierungsradius Der Radius eines Wegpunktes bringt wieder ein wenig mehr Dynamik ins Spiel. Hierbei wird in dem Bereich der festgelegt wird eine Zufallsposition bestimmt, die bei jedem Missionsstart anders ist. Dies bedeutet dass, wenn man dort zum Beispiel den Wert 100 angibt, ein Wegpunktradius von 100 Metern deniert wird, in dem der Wegpunkt dynamisch gesetzt wird. Timeout - Verzgerung Die Verzgerung bis zur Auslsung in Sekunden. Gibt man bei allen drei Positionen den gleichen Wert an, so ist die Auszeit dem Wert entsprechend lang. Durch das Angeben verschiedener Werte wird der jeweilige Wegpunkt per Zufallszeit aktiviert. Zufallszeit zwischen Min und Max mit Tendenz zum Mittelwert. Min Max Mid Mindestzeit bis zur Aktivierung Maximale Zeit bis zur Aktivierung Mittelwert 33

Das Verwenden der Zufallszeit bringt wieder einen gewissen Grad an Spannung ins Spiel, da man nie genau vorhersagen kann, wann die Einheiten auf der jeweiligen Stelle der Karte ankommen. Kombiniert mit dem Platzierungsradius und der Bedingung der Anwesenheit hat man sogar noch mehr Dynamik. Denn nun wei man nicht, ob es die Einheit gibt, wohin sie Punktgenau luft und wann sie kommt. Gerade dynamische Missionen haben einen hohen Spannungs- und Wiederspielgrad. ArmA besitzt anhand solcher Mglichkeiten die besten Vorraussetzungen dafr, seine Missionen so dynamisch wie mglich zu gestalten. Bedingung Das Angeben einer Bedingung ermglicht es einen Wegpunkt sozusagen auf Stand by zu setzen oder ihn etwas prfen zu lassen. Dabei wrde der Wegpunkt erst aktiviert, wenn diese Bedingung erfllt ist. Das Verwenden einer Bedingung ist bereits unter Bedingung beim Auslser erklrt. Bei Aktivierung In dieser Zeile kann man fast alles denieren, was ausgefhrt werden soll, wenn der Wegpunkt ausgelst wird. Das Starten eines Skriptes, eine Bedingung auf true schalten usw. usw. Es ist also mglich so ziemlich jede Syntax hier anzugeben, die Armed Assault zu bieten hat. Natrlich gibt es auch Grenzen, aber da kann man ja dann auf ein Skript ausweichen. Auch der bersicht wegen, ist es oftmals besser auf ein Skript auszuweichen, wenn hier zum Beispiel, unzhlige Befehle angegeben werden oder hnliches. Skript Diese Zeile ermglicht die Verwendung von Syntaxes, wie sie sonst nur in Skripten verwendet werden knnen. Wegpunkt zeigen Wegpunkte lassen sich anzeigen oder verbergen. Hierbei kann man festlegen, ob sie nur im Cadet-Mode, generell oder gar nicht sichtbar sind. Never Show Show in Cadet Mode Always Show Wird nie angezeigt Nur im Cadet Mode Wird immer angezeigt

Anschlieen und fhren Man setzt dazu zunchst zwei Gruppen auf die Karte, die an irgendeiner Position zu einer Gruppe verschmelzen sollen. Jede Gruppe bekommt jetzt einen Wegpunkt irgendwo auf der Karte. Bei dem einen Wegpunkt deniert man nun Anschlieen und bei dem anderen Wegpunkt Anschlieen und fhren. 34

Kapitel 1

Jetzt mssen die beiden Wegpunkte synchronisiert werden. Dazu ist die Synchronisation (5) notwendig, mit welcher die beiden Wegpunkte nun aufeinander abgestimmt werden. Wenn nun beide Gruppen ihre Wegpunkte erreicht haben und noch am Leben sind, werden sie zu einer Gruppe. Vorausgesetzt die Gruppen sind nicht zu gro. Die maximale Gruppengre in Armed Assault betrgt inklusive Leader 144 Einheiten. Auf der Karte sieht das Ganze dann etwa so aus:

1.6 - Sychronisieren (5)


Die Mglichkeit Wegpunkte mit Wegpunkten oder Wegpunkte mit Auslsern zu synchronisieren, wird gerne bersehen. Dank dieser Funktion kann man sich nmlich verschiedene Variablen sparen und man sieht auf einem Blick, wer wann wie starten darf. Auf dem Bild sieht man 2 Gruppen, die aus verschiedenen Richtungen kommen, aber das gleiche Ziel angreifen sollen. Jetzt soll die eine Gruppe am Wegpunkt verweilen, bis die andere Gruppe ihren Wegpunkt erreicht hat. Dazu whlt man mit 5 das Synchronisieren an, klickt mit der linken Maustaste auf den Wegpunkt der Gruppe 1, hlt die Maus gedrckt und zieht einen Strich zum Wegpunkt der Gruppe 2. Die Synchronisation wird dann mit einer blauen Linie angezeigt. Sobald die Gruppe 1 nun ihren Wegpunkt erreicht hat, wird sie warten, bis Gruppe 2 ihren Wegpunkt erreicht hat.

35

Gleichermaen luft dies bei der Auslser-Wegpunkt-Kombination. Die Gruppe wrde erst weiterlaufen, wenn der Auslser ausgelst wurde. Man muss also nicht bei dem Wegpunkt einer Gruppe eine Variable (z.B. Grp1go) angeben und dann in der Aktivierungszeile des Auslsers Grp1go=true angeben, damit die Gruppe losluft, wenn der Auslser ausgelst wird. Die 5-Variante ist doch viel einfacher und schneller. Ob der Auslser dabei durch eine Einheit, ein Objekt oder Funk aktiviert wird ist dabei egal.

Bei folgendem Bild werden drei Gruppen und ein Funkauslser aufeinander abgestimmt. Wenn alle drei Gruppen ihre Position erreicht haben, gibt der Spieler per Funk 0-0-1 den Befehl zum Angri. Erst dann werden sich die Gruppen zu ihrem nchsten Wegpunkt, also das Ziel, weiter bewegen.

1.7 - Markierungen einfgen (6)


Mit den Markern gestaltet man die zu Anfang noch jungfruliche Karte zur taktischen Karte um. Sie zeigt dem Spieler den Ablauf der Mission, die Ziele oder hnliche Sachen an. Dies macht den Missionsablauf noch bersichtlicher. Hierbei empehlt es sich jedem Marker einen Namen zu geben. Diese Marker lassen sich spter mit dem Brieng verlinken. Klickt man dann spter auf einen der Brieng-Links, wandert das Fadenkreuz auf der Karte zu dem zugehrigen Marker. 36

Kapitel 1 Name Hier wird der Name des Markers angegeben, welcher spter unter anderem fr die Verknpfung mit dem Brieng gebraucht, damit die Ziele durch das Fadenkreuz auf der Karte gezeigt werden knnen oder welcher es ermglicht den Marker zu versetzen oder ihm ein anderes Symbol zuzuweisen. Art Die Auswahl der Art des Markers. Dies kann statt einem Symbol auch ein Kreis oder ein Rechteck sein, mit dem man eine grere Flche markieren kann. Zum Beispiel ein Feindgebiet oder hnliches. Farbe Farbe des Markers. Die Farben beschrnken sich hierbei auf rot, schwarz, grn, blau, gelb und wei Symbol Hier eine bersicht der verschiedenen taktischen Zeichen mit Bezeichnung:

Pick Up

Marker

Join

End

Unknown

Warning

Empty

Start

Objective

Destroy

Flag

Arrow

Dot

Empty

Head- Command AirTeam quarter Team

Infantry MaintenTeam ance Team

Light Team

Heavy Team

Supply Team

Town Vehicle

Move

Defend

Attack

Depot

Camp

Fire Salvage Mission

Repair

Supply Destroyed Vehicle

37

Mit diesen taktischen Zeichen in Verbindung mit grochigen Markern (Ellipse/Rectangle) hat man schnell eine bersichtliche Karte geschaen. Die englischen Bezeichnungen sind zugleich auch die Klassennamen der Marker. Auer bei Objective! Objective hat seitens BIS den Klassennamen Flag bekommen.
Objective Flag1 Dot Destroy Start End Warning Join PickUp Unknown Marker - Ziel (Flag) - Fahne - Punkt - Zerstren - Start - Ende - Achtung - Beitreten - Auesen - Unbekannt - Markierung Arrow Empty Select Vehicle Defend Move Attack Headquarters Depot Camp Town - Pfeil - Leer - Leerer Kreis - Vehikel - Verteidigen - Bewegen - Angreifen - Stab - Depot - Lager - Stadt SalvageVehicle - Bergungs Fhz RepairVehicle - Reparatur Fhz SupplyVehicle - VersorgungsFhz DestroyedVehicle - Zerstrtes Fhz MaintenanceTeam - Reparatur CommandTeam - Fhrungsstab SupplyTeam - Versorger InfantryTeam - Infanterie LightTeam - Leichte Inf. HeavyTeam - Schwere Inf. AirTeam - Luftabwehr FireMission - Firemission

Achse A/Achse B Hier wird die Gre des Markers eingestellt. Winkel Hier hat man die Mglichkeit den Winkel des Markers zu bestimmen. Text Hier wird der Text angegeben, der spter auf der Karte lesbar sein soll. Zum Beispiel: Ziel Alpha. Mit folgender Syntax ist es sogar mglich dem Marker den Spielernamen oder Einheitennamen zuzuweisen: "S1M" setMarkerText Name S1 Dabei liest das Spiel den Spielernamen der Einheit mit Namen S1 automatisch aus. Dynamische Positionen Setzt man mehrere Marker auf die Karte und verbindet diese mit F2 (siehe Kapitel 1.9) mit einer Einheit, steht die Einheit bei jedem Start an einer anderen Markerposition. Marker versetzen, ndern oder lschen Marker lassen sich whrend des Spielverlaufs vom Symbol her ndern, versetzen oder auch lschen. Als Beispiel dient hier mal die Erfllung eines Missionsziels, bei welchem man den Marker von rot in grn einfrben oder ihn einfach lschen knnte. Dazu muss ein Marker erstmal benannt werden. Dieser heit jetzt fr die folgend aufgefhrten Syntaxformbeispiele mal Marker1. Man hat jetzt eine Menge von Mglichkeiten diesen anzusprechen. Dies kann wieder von einem Wegpunkt, Auslser oder auch Skript erfolgen. Hierbei gibt es unter anderem folgende Syntaxformen: 38

Kapitel 1

Marker wird zur Position [x,y] versetzt: "Marker1" setMarkerPos [x,y] Marker zur Position von Objekt Ziel versetzt: "Marker1" setMarkerPos getPos Ziel Marker1 wird zur Position von Marker2 versetzt: "Marker1" setMarkerPos getMarkerPos "Marker2" Setzt Art und Aussehen von Marker1: "Marker1" setMarkerType "Start" ndert die Farbe des Markers: "Marker1" setMarkerColor "ColorBlue" ndert die Markergre in [Hhe, Breite] "Marker1" setMarkerSize [2,4] Lscht den Marker: deleteMarker "Marker1"

1.8 - Einheiten und Objekte drehen


Zum Drehen einer Einheit oder ganzen Gruppen und Objekten, markiert man diese zunchst, drckt dann die Shift-Taste, klickt dann mit der linken Maustaste auf eine der Einheiten oder ein Objekt, hlt diese gedrckt und bewegt das Fadenkreuz in die jeweilige Richtung. So ist es auch mglich mehrere Einheiten oder Gruppen gleichzeitig zu drehen. Dazu markiert man diese und macht alles so, wie zuvor beschrieben.

1.9 - Einheiten und Marker verbinden


Einzelne Einheiten lassen sich im Editor je nach Bedarf zu Gruppen verbinden oder auch wieder trennen. Dazu whlt man zunchst die Taste 2, klickt mit der linken Maustaste auf die Einheit, hlt die Taste gedrckt und zieht den Verbindungsstrich zu der Einheit mit der diese verbunden werden soll oder einfach ins Leere, wenn man diese eine Einheit von einer Gruppe trennen mchte. Auf diese Weise kann man auch eine Einheit oder ein Objekt mit einem Auslser verbinden, wenn dieser beispielsweise nur von dieser einen Einheit bzw. diesem einen Objekt ausgelst werden soll. Auf dem linken Bild sieht man, wie eine Einheit gerade mit einer Gruppe verbunden wird und auf dem Rechten, wie ein Auslser objektbezogen angelegt wurde. 39

Das Gleiche geht nun auch mit Einheiten und Markern. Das Besondere hieran ist, das man der Einheit oder dem Objekt damit mehrere Zugfallspositionen zuweisen kann. Verbindet man die Einheit beispielsweise mit 3 Markern, kann diese Einheit beim Spielstart entweder an der ursprnglich gesetzten Position oder an einer der 3 Zufallspositionen stehen. Dies spart ein Skript und bietet gleichzeitig Dynamik.

1.10 - Einheiten mit Wegpunkten bearbeiten


Wenn man eine Einheit bereits mit einem Wegpunkt versehen hat und mchte diese im Nachhinein bearbeiten, wird man schnell feststellen, dass sich stets das Wegpunktmen net, aber nicht das Einheitsmen. Dazu fhrt man einfach mit dem Fadenkreuz auf die Einheit, drckt die Shift-Taste und hlt diese gedrckt. Jetzt sieht man, dass sich die Bezeichnung ndert. Klickt man nun doppelt auf die Einheit, wird sich das Einheitsmen nen.

40

Kapitel 2
- Die Dateien Kapitel 2 Nachdem du im Kapitel 1 in die Oberche eingefhrt wurdest, wird dich dieses Kapitel eine Ebene tiefer, nmlich zum Standgerst einer Mission fhren. Hier werden dir die einzelnen Dateien erklrt, die fr eine Mission wichtig sind. In ihnen werden unter anderem wichtige Informationen gespeichert und konguriert.

2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 2.10 2.11 2.12 2.13

Der Missionsordner Die Mission.sqm Die Description.ext Die Stringtable.csv Die Init.sqs Das Skript (.sqs) Die Funktion (.sqf ) Das Paa-Format Die PBO Die Sounddateien Die Lip-Dateien Das Overview Das Brieng

42 43 48 51 53 54 54 55 56 56 57 58 59

41

2.1 - Der Missionsordner


In einem Missionsordner werden alle Dateien abgelegt, die fr eine Mission bentigt werden. Es bietet sich hierfr an viele Ordner anzulegen, um dadurch eine bessere bersicht zu gewhrleisten. Um dies zu erreichen, sollte man fr jeden der Dateitypen, also Musik, Sounds, Skripte, Szenen, Bilder usw., einen extra Ordner anlegen. Wichtig ist auch, dass man alle Dateinamen klein schreibt. Ein fertiger Missionsordner schaut dann etwa so aus:

Die hier zu lesenden Dateinamen sind vorgegeben und nicht variabel! Lediglich das Bild Title.paa und die Ordner knnten anders benannt werden. Hier mal die nher erluterten Dateibedeutungen: Mission.sqm Description.ext Stringtable.csv Brieng.html Overview.html Titel.paa Missionskoordinaten Missionskonguration (Musik, Sound, Waen, Identitten, Ressourcen usw.) Textausgabe fr mehrsprachige Missionen Brieng beim Missionsstart Missionsinfo in Missionsauswahlmen Overview Bild

Die verschiedenen Briengdateien stellen das Brieng in verschiedenen Sprachen dar. Wenn man seine Mission natrlich nur mit einer Sprache ausstatten will, gengt die Brieng.html, der Rest der HTML-Dateien kann dann gelscht werden. Bei nur einer Sprache ist es egal, ob man in der Brieng.html deutsch, englisch oder sonstiges verwendet. Mehr aber im Kapitel 2.13 im Unterbereich Das Brieng. Music Sound Scripts Scenes Function Pictures Fr Musikdateien Fr Soundateien (z.B. Sprache oder Eekte) Fr die Skripte (.sqs) Fr die Zwischensequenzen (z.B. Intro, Outro usw.) Fr die Funktionen (.sqf ) Fr die Bilder (z.B. Titel.paa)

Mchte man eine Datei aus einem Unterordner aufrufen, gibt man in der Syntax den jeweiligen Ordner, dann Backslash und die jeweilige Datei an. Zum Beispiel das Aufrufen eines Skriptes: [] exec scripts\script.sqs 42

2.2 - Die Mission.sqm


Die Mission.sqm ist die wichtigste von allen Dateien, denn darin sind alle wichtigen Informationen und Koordinaten einer Mission gespeichert. Darunter sind unter anderem Informationen der im Editor gesetzten Einheiten, Objekte, Marker, Wegpunkte, Auslser usw. enthalten. Des Weiteren ndet man am Anfangsbereich noch diverse andere Informationen, wie verwendete Addons oder unter Info den Missionsnamen, Wetter und Uhrzeit. Die Erluterungen in diesem Unterkapitel knnten ein wenig schwieriger sein, aber sollen keinesfalls vom Editieren abschrecken. Man muss diese Datei nicht unbedingt auswendig beherrschen, aber ein paar Kenntnisse erleichtern das Editieren in einigen Bereichen ungemein. Der Anfangsbereich Auf der Folgeseite sieht man den Anfangsbereich einer Mission.sqm im Bereich Class Mission. Zunchst werden die verwendeten Addons gelistet. Hier sind nur original ArmAAddons zu sehen. Achtung! Ldt man ein externes Addon, das eine schlecht gemachte Cong.ccp hat, beim Missionsstart mit, kann es vorkommen, dass sich dieses Addon einfach mit in die Liste eintrgt, obwohl es in der Mission nicht verwendet wird. Man kann es dann einfach markieren und herauslschen. Das Problem kommt dann, wenn ein anderer Spieler diese Mission spielen mchte und das Addon nicht hat. Die Mission kann dann nicht geladen werden und der Download war umsonst. Dieses Problem gab es gerade in Operation Flashpoint sehr oft. Spieler, die keine Ahnung vom Editing haben, werden so eine Mission schnell beiseite legen und sich eine andere runterladen. Nach den Addons folgend kommt man zur Class Intel, in welcher unter anderem Briengname Widerstandseinstellung Startwetter Spteres Wetter Spterer Nebel Sichtweite Datum Uhrzeit deniert sind.
addOns[]= { "cacharacters", "sara", }; addOnsAuto[]= { "cacharacters", "sara" }; randomSeed=8635907; class Intel { briengName="@STR_M11_Name"; resistanceWest=0.000000; startWeather=0.000000; forecastWeather=0.000000; forecastFog=0.375187; viewDistance=1000.000000; month=6; day=2; hour=3; minute=50; };

Kapitel 2

43

Neben der Class Mission gibt es noch die Class Intro, Class OutroWin und OutroLoose, die vom Aufbau her genauso sind, wie die Class Mission. Hier sind jedoch die Einheiten, Wegpunkte usw. fr die jeweilige Sequenz deniert. Es ist mglich nderungen direkt in der Mission.sqm vorzunehmen. Dabei ist es wichtig, dass man die nderungen richtig vornimmt. Wenn man das Ergebnis danach im Editor sehen will, muss man die Mission dort erst neu laden. Sollte das Spiel beim Laden komplett abstrzen, ist wohl ein Fehler unterlaufen. Deshalb bietet es sich an vorher immer eine Kopie der Mission.sqm zu machen, um spter eine funktionierende Datei zu haben.

Einheits- und Objektklassen Nach dem Anfangsbereich kommt man in der Class Mission in den Unterbereich Class Groups und damit in den Unterbereich Class Vehicles in welcher die Einheiten, Objekte und die dazugehrigen Wegpunkte deniert sind.
class Groups { items=22; class Item0 { side="WEST"; class Vehicles { items=1; class Item0 { position[]={7973.895020,4.460081,9351.659180}; id=0; side="WEST"; vehicle="SoldierWB"; player="PLAYER COMMANDER"; leader=1; rank="CORPORAL"; skill=0.200000; text="aP"; init="this addWeapon ""binocular""; }; }; };

Wie man sieht, sind hier smtliche Informationen fr diese Einheit namens S1 deniert. Hier die Erluterung der Begrie: Items=1 Class Item0 Side Class vehicles Items=1 44 Zeigt die Anzahl der Items der Class Groups an. Also die Anzahl der Gesamtgruppen aller Seiten auf einer Karte Ist die Gruppe 0. Die nchste Gruppe hiee Class Item1 Die Seite der jeweiligen Gruppe. Auch eine einzelne Einheit wird als Gruppe deniert und angegeben! Sagt aus, dass es sich um ein Vehikel handelt Die Anzahl der Items(Einheiten) der Gruppe Class Item0 an

Class Item0

Presence Position Azimut ID Side Vehicle Player Leader Skill Health Ammo Text Init

Class Item0 ist Leader der Gruppe Class Item0. Der dem Leader unterstellte Soldat ist Class Item1, der nchste Class Item2 usw. Wahrscheinlichkeit der Anwesenheit (Nicht bei Spieler!) YXZ-Koordinaten des Spielers in der Anordnung X Z Y Blickrichtung der Einheit (Wert denierbar von 0 bis 360) ID der Einheit Spielerseite Art der Einheit Spieler Gibt an, ob die Einheit ein Leader ist. Fhigkeit der Einheit (Wert denierbar von 0 bis 1) Gesundheitsstatus (Wert denierbar von 0 bis 1) Munitionsstatus (Wert denierbar von 0 bis 1) Name der Einheit (Variable) Die Initzeile der Einheit (Angabe einer Syntax etc.)

Kapitel 2

Wegpunkt-Klassen Unter der jeweiligen Gruppe sind die zu der Gruppe gehrigen Wegpunkte angeordnet. Diese sind von der Anordnung her den Einheiten gleich, aber eben von der Zusammenstellung etwas anders.
class Waypoints { items=1; class Item0 { position[]={7970.289551,4.731988,9346.483398}; placement=50.000000; CombatMode="RED"; Speed="FULL"; combat="COMBAT"; description="Hold this position!"; expActiv="[] exec""scripts\script.sqs"; class Eects { timeoutMin=10.000000; timeoutMid=3.000000; timeoutMax=30.000000: }; showWP="NEVER"; }; };

Wie man sieht, sind hier smtliche Informationen fr diesen Wegpunkt der Gruppe deniert. Der nchste Wegpunkt schaut, je nach Einstellung wieder ganz anders aus. Hier die dazugehrigen Erluterungen: Items=1 Zeigt die Anzahl der Items der Class Waypoints an. Also die Anzahl der gesamten Wegpunkte der Gruppe. 45

Class Item0 Position Placement CombatMode Formation Speed Combat Description ExpActiv

TimeOutMin TimeOutMid TimeOutMax ShowWP

Class Item0 ist der erste Wegpunkt. Der zweite wrde dann Class Item1, der bernchste Class Item2 usw. heien. YXZ-Koordinaten des Wegpunktes, in der Anordnung XZY. Ist der zufallsbedingte Platzierungsradius des Wegpunktes. Der jeweilige Kampfmodus der Gruppe ab diesem Wegpunkt. Die jeweilige Formation der Gruppe ab diesem Wegpunkt. Die Geschwindigkeit der Gruppe ab diesem Wegpunkt. Das jeweilige Verhalten der Gruppe ab diesem Wegpunkt. Die Beschreibung des Wegpunktes, welche man, wenn der Wegpunkt im Spiel angezeigt wird, lesen kann. Die Aktivierungszeile des Wegpunktes, die bei Auslsung des Wegpunktes ausgelst wird. Hier wird ein Skript mit Namen Script.sqs aus dem Ordner Scripts aktiviert. Die krzeste Auslsezeit des Wegpunktes in Sekunden Der Mittelwert der Auslsezeit des Wegpunktes in Sekunden Die maximalste Auslsezeit des Wegpunktes in Sekunden Gibt an, ob der der Wegpunkt im Spiel angezeigt wird oder nicht.

Bei diesem Wegpunkt wurden keine Eekte deniert. Diese sind dann bei den Auslserklassen mit erklrt. Marker-Klassen Nach den Gruppen und den dazugehrigen Wegpunkten folgt die Klasse der Marker. Ab hier werden smtliche Marker aufgelistet, die in der Mission gesetzt werden. Das Ganze sieht etwa so aus:
class Markers { items=28; class Item0 { position[]={2452.061035,0.760200,3673.595703}; name="TargetOne"; text="Objective Alpha"; type="Flag"; a=2.000000 b=2.000000 angle=0.100000 }; };

Hier die Beschreibung der einzelnen Punkte: Items=1 Class Item0 Position 46 Zeigt die Anzahl der Items der Class Markers an. Also die Anzahl der gesamten Marker in der Mission Class Item0 ist der erste Marker. Der zweite wrde dann Class Item1, der bernchste Class Item2 usw. heien. YXZ-Koordinaten des Markers, in der Anordnung XZY.

Name Text Type a b Angle

Der Name des Markers. Die Beschreibung des Markers, die man spter auf der Karte liest Die Art des Markers. Hier ein Fadenkreuz. Die Gre des Markers in X-Richtung Die Gre des Markers in Y-Richtung Der Winkel des Markers.

Kapitel 2

Auslser-Klassen Diese sind von der Sache her hnlich wie ein Wegpunkt zu betrachten und auch die Anordnung ist, wie man sehen kann, fast gleich. Hier sind auch mal Eekte mit aktiviert worden, um diese mal in der Mission.sqm sehen zu knnen.
class Sensors { items=53; class Item0 { position[]={8012.703613,6.300000,9301.049805}; a=100.000000; b=100.000000; activationBy="WEST"; timeoutMin=10.000000; timeoutMid=3.000000; timeoutMax=30.000000: age="UNKNOWN"; name="DetectorOne"; expCond="Var1"; expActiv="[] exec ""scripts\script.sqs"""; expDesactiv="[] exec ""scripts\animation-end.sqs"""; }; };

Items=1 Class Item0 a b ActivationBy TimeOutMin TimeOutMid TimeOutMax Age Name ExpCond ExpActiv

ExpDesactiv

Zeigt die Anzahl der Items der Class Sensors an. Also die Anzahl der gesamten Auslser auf der Karte. Class Item0 ist der erste Auslser. Der zweite wrde dann Class Item1, der bernchste Class Item2 heien usw. Die Gre des Auslsers in X-Richtung Die Gre des Auslsers in Y-Richtung Aktivierung durch WEST Die mindest Auslsezeit des Auslsers Der Mittelwert der Auslsezeit des Auslsers Die maximalste Auslsezeit des Auslsers Unknown Der Name des Auslsers Die Bedingung der Auslsung. Hier die Variable Var1. Die Aktivierungszeile des Auslsers, die bei der Auslsung des Auslsers ausgelst wird. Hier wird ein Skript mit Namen Skript.sqs aus dem Ordner Scripts aktiviert. Die Deaktivierungszeile des Auslsers. Hier kann man den Auslser wieder deaktivieren. 47

2.3 - Die Description.ext


Die Description.ext ist fr unsere Mission genauso wichtig wie die Mission.sqm. In ihr werden zwar nicht die Einheiten gesetzt, aber eine Menge wichtiger Dinge deniert. Diese ist zustndig fr das Vordenieren von Musik, Sounds, Respawn, Ressourcen, das Auswhlen von Waen im Brieng, den Accessoires (Kompass usw.) und diversen anderen Dingen, die man zum Spielen bentigt. Die Description.ext wird in dem Missionsordner der jeweiligen Mission angelegt. Dazu erstellt man eine neue Textdatei und benennt diese in Description.ext um. Ganz wichtig hierbei ist, dass man diese mit einem Texteditor (z.B. Notepad) bearbeitet und nicht mit Word oder Excel! Hier wird die Description.ext aus bersichtsgrnden nur grob erklrt. Zu den Einzelheiten siehe in den jeweiligen Kapiteln nach, darin sind die Unterbereiche sehr ausfhrlich erlutert. Missionsstarttext Missionswertung Identitten Musik Sound Respawn Waenauswahl im Brieng Kapitel 4.2 Kapitel 4.4 Kapitel 5.53 Kapitel 5.52 Kapitel 5.52 Kapitel 7.2 Kapitel 3.6

Es ist, je nach Mission, nicht notwendig alle Bereiche in die Datei einzubauen. Man nimmt nur das, was fr die Mission bentigt wird. Damit spart man sich zum Einen eine Menge Arbeit und zum Anderen auch gleich mgliche Fehlerquellen, die dabei auftauchen knnen. Fr eine Einzelspielermission ist es schlielich vllig berssig, wenn man den Respawn mit angibt. Es ist auf jeden Fall darauf zu achten, dass alle Klammern { die genet werden, auch wieder geschlossen }; werden. Andernfalls strzt ArmA sofort ab! Auch andere Fehler machen sich teilweise durch einen Absturz bemerkbar! Deshalb ist hier ein gewissenhaftes Arbeiten angesagt. Mchte man Missionszubehr, wie den Kompass oder die Uhr in der Mission verbergen oder verfgbar machen, macht man das mit 1 oder true fr aktiv/sichtbar oder mit 0 oder false fr inaktiv/unsichtbar. Hinter die beiden // oder einem Semikolon ; hat man die Mglichkeit etwas zu schreiben, was ArmA ignoriert. Dies lediglich dient der bersicht in Form einer berschrift, die man bei einer groen Description schnell verlieren kann. Hat man nun nderungen in der Datei vorgenommen und wieder in den Editor gewechselt, muss man die Mission erst nochmal speichern oder neu laden, damit die 48

nderungen wirksam werden. Sollte das Spiel dabei abstrzen, nicht gleich die Geduld verlieren und einfach kurz nach dem Fehler suchen. Deshalb ist es sinnvoll einen Abschnitt nach dem anderen zu denieren. Somit wei man sofort, dass der Abschnitt betroen ist, den man gerade bearbeitet hat. Hier sieht man, wie eine Description.ext in etwa aussehen kann.
// ====================== Description.ext =====================> Debrieng = 1; OnloadIntro = 1; OnLoadIntroTime = 1; OnLoadMissionTime = 1; Saving = 0; // === Titlecut ==============================================> OnloadIntro= M r - M u r r a y p r o u d l y p r e s e n t s onLoadMission= A R M E D A S S A U L T // === Punktvergabe ==========================================> minScore=200 avgScore=2500 maxScore=6000 // === Missionszubehr =======================================> ShowCompass = 1; ShowMap = 1; ShowGPS = 1; ShowWatch = 1; // === Respawn ===============================================> respawn=3; respawndelay=10; // === Waen ================================================> class Weapons { class M4 { count = 4; }; class Javelin { count = 2; }; }; // === Magazine ===============================================> class Magazines { class 20Rnd_556x45_Stanag { count = 10; }; class Javelin { count = 6; }; }; // === Musik ================================================> class CfgMusic {tracks[]= { Track1,Track2}; class Track1 { name = "Track1"; sound[] = {\music\track1.ogg, db+0, 1.0}; };

Kapitel 2

49

class Track2 { name = "Track2"; sound[] = {\music\track2.ogg, db+0, 1.0}; }; }; // === Sounds ===============================================> class CfgSounds { sounds[]= {Sound1}; class Sound1 { name = "Sound1"; sound[] = {\sounds\sound1.ogg, db+0, 1.0}; }; }; // === Radio ================================================> class CfgRadio { sounds[] = { }; }; // === Umgebung =============================================> class CfgSFX { sounds[] = {}; }; class CfgEnvSounds { sounds[] = {}; }; // === Identitten ==========================================> class CfgIdentities { class MrMurray { name = "MrMurray"; face = "Face33"; glasses = "none"; speaker = "Dan"; pitch = 1.00; }; class Memphisbelle { name = "Memphisbelle"; face = "Face10"; glasses = "none"; speaker = "Howard"; pitch = 1.00; }; class Dan { name = "Dan"; face = "Face22"; glasses = "none"; speaker = "Russell"; pitch = 1.00; }; }; // End Of File

50

2.4 - Die Stringtable.csv


Die Stringtable.csv dient zum Hinterlegen von Textvariablen. Sie ermglicht es, verschiedene Sprachen in eine Mission einzubinden oder einfach nur Text zu hinterlegen. Diese Datei sollte dabei generell mit dem Texteditor bearbeitet werden! Windows schlgt aber standardmig Excel als Bearbeitungsprogramm vor. Wenn man diese Datei nun bearbeiten will, muss man auf diverse Kleinigkeiten achten. Zunchst deniert man den Kopf mit den jeweiligen Sprachen. Dabei achte man darauf, dass diese mit Kommas getrennt werden. LANGUAGE,English,German,Czech,Notes Auch in der jeweiligen Zeile werden die Sprachen nun durch ein Komma getrennt und in " " gesetzt. In der Praxis sieht das dann in der jeweiligen Zeile so aus: STR_Titel,"Night Patrol","Nacht Patrouille","...",Missionsname Hier sieht man nun ganz gut, wie das ausschaut. Am Anfang die Adresse, mit STR_Titel, dann folgend die Sprachen und zum Schluss noch eine Beschreibung, die zur Orientierung beitrgt. STR_ wird dabei generell zuerst angegeben. Das Wort Titel dahinter ist Variable und kann daher frei deniert werden. Eine Textzeile fr einen Text in einer Mission knnte dann so aussehen: STR_Mission_1,"Hold Position!","Position halten!","",Missionstext1 Mchte man den Text zum Beispiel beim Laden der Mission aufrufen, gibt man folgende Syntax an: onLoadMission=$STR_Titel; STR_Titel kann also als individuelle Adresse gesehen werden, welche man angibt, wenn man den Text in die Mission einbinden mchte. Dieser wrde dann in der jeweilig ausgewhlten und vordenierten Sprache ausgegeben. Das @ vor STR_ verwendet man im Editorbereich, also in einem Auslser oder Wegpunkt, whrend man in einer Cong oder der Description.ext das $ Zeichen verwendet. Aus dem Editor Text aufrufen: Aus der Description bzw. einer Cong: @STR_Titel $STR_Titel

Kapitel 2

Bei dem folgenden Bild, wurde ein Wegpunkt mit Text versehen, welcher direkt aus der Stringtable bezogen wird, welche dafr wie folgt deniert wurde: STR_Mission_1,"Hold Position!","Position halten!","",Missionstext1 51

Bei dem Wegpunkt wurde dabei folgendes in die Description-Zeile geschrieben: @STR_ Mission_1 Wie man hier sehen kann, wird der Text dann direkt so in die Mission bergeben.

Natrlich ist es hierbei auch mglich in einem Satz oder Text einen Zeilenumbruch anzugeben, was gleich etwas besser aussieht. Dazu verwendet man lediglich ein \n STR_Mission_1,"Hold Position\nand wait for orders!","","",Missionstext1 Hier wurde eine Texteinblendung verwendet, was in der Mission dann so aussieht:

Hier nochmal ein kurzes Dateibeispiel einer Stringtable aus einer originalen Armed Assault Mission, wobei man hier sehr gut erkennen kann, dass darin nur eine Sprache deniert wurde.
LANGUAGE,English,Notes STR_M11_Name,"Night Patrol",Mission Name STR_M11_OnLoad,"You're on duty tonight",Onload STR_M12_OnLoad,"Dontsleep and keep your eyes open!",Onload COMMENT, -------------- Main Mission ------------STRCAMP_OBJSTART,Guard the military installation, STRM_07an01,"Southern sector, Sahrani",prebrieng STRM_07an02,"NATO base in La Riviere, Sahrani",prebrieng STRM_07an03,"Near Paraiso - One hour later, Sahrani",prebrieng

Im Kapitel 5.67 ndet sich eine Auswahl von Stringtable Grundwerten, welche direkt in ArmA hinterlegt sind. Ebenso auch im Kapitel 7.13 in welchem aber nur MP-Werte aufgelistet sind. Diese kann man ganz einfach fr seine Mission verwenden, ohne eigene Stringtablewerte erstellen zu mssen. 52

2.5 - Die Init.sqs


Die Init.sqs kann sozusagen als Initialisierungsdatei angesehen werden, welche beim Missionsstart automatisch abgerufen wird und nicht gesondert gestartet werden muss. Diese Datei bringt eine Menge bersicht mit sich, da man nun nicht alle Befehle in die Initzeile einer Einheit oder des Spielers schreiben muss, welche dann, je nach Menge, sehr unbersichtlicht werden wrde. Denn gerade beim Spieler sammeln sich oftmals eine Menge Befehle an. Aber was schreibt man denn nun alles dieses Skript? Eigentlich alles, was beim Missionsstart sofort ausgefhrt, also initialisiert werden soll. Wie man sieht, sind im folgenden Beispiel nun ein GPS-System, die Spielbeschleunigung und die Verdeckung der Missionsziele 1-3 vordeniert. Zudem wird hier noch zum Editieren die Teleport.sqs gestartet, die uns das Editieren und Testen erleichtern soll. Diese sollte logischerweise dann spter deaktiviert oder entfernt werden.
;Einblendung titleCut [" ", "BLACK IN"]; titleFadeOut 4 ;Funktion vorladen SearchLight = compile preprocessFile "Searchlight.sqf"; ;Identitt zuweisen Player setIdentity "Mr-Murray"; ;Missionsziele werden verdeckt "MZiel1" ObjStatus "Hidden"; "MZiel2" ObjStatus "Hidden"; "MZiel3" ObjStatus "Hidden"; ;GPS-System [] exec "marker.sqs"; ;Spielbeschleunigung unterdrcken [] exec "time.sqs"; ;Editierskript. Wichtig! Nur fr die Editierzeit, spter entfernen bzw. deaktivieren!!! ;Teleport [] exec "teleport.sqs"; ;Ende

Kapitel 2

Natrlich kann man hier noch weit mehr vordenieren, als oben angegeben. Zum Beispiel das Verhalten von Einheiten, die Bewanung, Variablen, Einheitsstatus lschen, Funktionen laden und so weiter. Diese Datei sollte nur mal als Beispiel dienen. Alle hier angegebenen Skript oder hnliches mssen natrlich extra geschrieben werden bzw. die Missionsziele auch so vordeniert und benannt werden. Wie man auerdem sieht, ist hier alles sehr bersichtlich gehalten. Dabei wird alles, was hinter einem Semikolon steht, von ArmA ignoriert und dient hier als Beschreibung um die bersicht zu behalten. 53

2.6 - Das Skript


Ein Skript ist lediglich eine Datei im Missionsordner, welches fr bestimmte Zwecke geschrieben ist. Dieser Abschnitt erklrt nicht das Skripten selbst, sondern beschreibt lediglich die Datei und wie man diese aufruft. Mehr zum Thema Scripting ndet sich im Kapitel 9. Die Skripte in Armed Assault enden, wie auch schon bei Operation Flashpoint, mit der Endung .sqs. Zum Erstellen eines Skriptes erstellt man zunchst eine Textdatei, die man dann einfach umbenennt. Windows wird die Datei dann als unbekanntes Format deklarieren. Dem entgegnet man dann mit der Windowsmglichkeit Rechtsklick und anschlieend nen mit und whlt dort als Standardprogramm den Texteditor aus. Im Laufe der nchsten Kapitel wird man noch mit dem einen oder anderen Skript vertraut gemacht und wird verstehen um was es dabei geht. In einem Skript kann man sich dann relativ frei austoben, obwohl es natrlich auch hier Grenzen gibt. Die Init.sqs als solches ist ja schon ein Skript, welches ohne Verwendung einer Syntax automatisch beim Missionsstart von ArmA aufgerufen wird. Auch die Mission.sqm oder die Description.ext sind ja sozusagen auch irgendwo Skripte, nur halt mit einer anderen Endung und Funktion. Mchte man nun ein Skript per Auslser, Wegpunkt oder aus einem anderen Skript aufrufen, bentigt man diese Syntax: [] exec "scripte\meinskript.sqs" oder this exec "scripte\meinskript.sqs" Nachdem das Skript aufgerufen wurde, wird es seine Befehle abarbeiten und dann je nach Funktion und Ablauf dann am Skriptende, wo exit stehen sollte, beendet.

2.7 - Die Funktion


Die Funktion kann man von der Sache her mit einem Skript vergleichen. In beiden sind Befehle hinterlegt, aber es gibt doch kleine aber feine Unterschiede. Genauso wie ein Porsche und ein Kfer. Beides sind zunchst Autos, aber wenn man ins Detail geht, so wird man schnell feststellen, dass der Porsche dem Fortschritt nach weiter ist. Der Unterschied besteht im Wesentlichen darin, dass SQS-Skripte jedes Mal gelesen werden, wenn sie aufgerufen werden und die SQF-Funktionen nur einmal in den Speicher geladen werden. Whrend bei Operation Flashpoint noch grtenteils auf SQS-Basis gearbeitet wurde, wird bei Armed Assault empfohlen mehr auf SQF-Basis zu arbeiten. 54

Anwendungsmig sind Funktionen so zu benutzen, dass sie eine bestimmte Aufgabe lsen und dies mit einem so kurzen und bndigen Schreibaufwand wie mglich. Hinzu kommt, dass man diese Funktion dann auch in anderen Missionen jederzeit verwenden kann, ohne sie umschreiben zu mssen. Man schreibt sie lediglich ein einziges Mal zum Erfllen eines ganz bestimmten Zweckes. Beispielsweise ist es mglich mit Hilfe einer Funktion einen Vektor zu berechnen. Oder auch viele andere Bereiche lassen sich mit Funktionen wesentlich einfacher realisieren. Es ist besser viele kleine Funktionen zu haben, als nur ein langes Skript. Hierbei geht es weniger um die Performance. Wichtiger ist die Wiederverwertbarkeit dieser Funktion. Mehr zum Thema Funktionen kann man im Kapitel 9.13 nachlesen.

Kapitel 2

2.8 - Das Paa-Format


Das Paa-Format ist lediglich eine Bilddatei, wie auch das Jpg-Format. In Armed Assault sind grtenteils alle Graken im Paa- oder Pac-Format vorzunden. Hierzu gehren selbstverstndlich auch die Texturen smtliche Objekte in Armed Assault. Im Unterkapitel Der Missionsordner dieses Kapitels ist eine Grak zu sehen, auf der eine Datei namens Title.paa zu sehen ist. Diese Grak ist fr das Overview vorgesehen und ist in der Overview.html so deniert. Dieses Bild sieht man, wenn man im Einzelmissionsmen eine Mission zum Spielen auswhlt. Der Name fr dieses Bild ist aber variabel und msste dann dementsprechend auch so in der Overview.html angegeben werden. Mehr dazu aber in diesem Kapitel 2.12 im Unterbereich Der Overview. Arma untersttzt, wie auch schon Operation Flashpoint, das Jpg-Format. Man kann also auch Bilder in diesem Format einbinden. Ganz wichtig ist es darauf zu achten, dass die angegebene Bildergre passt. ArmA nimmt teilweise nur Graken an, die einen Zweierpotenzwert haben. Aber in manchen Bereichen gibt es auch Ausnahmen, wie z.B. im Brieng oder Overview. Zweierpotenzen sind: 2,4,8,16,32,64,128,256,... usw. Als Beispiel mal diese Formate: 64x64 128x128 128x64 256x256

Zum Betrachten und zum Bearbeiten von Paa- bzw. Pac-Dateien verweise ich auf die Armed Assault Fanseiten, auf denen man die entsprechenden Tools nden wird. 55

2.9 - Die PBO


Die PBO ist eine gepackte Datei in der alle Dateien, die sich vorher beim Editieren einer Mission im Missionsordner angesammelt haben, verpackt sind. Man knnte sie also mit einer Rar- oder Zip-Datei vergleichen, nur dass die gepackten Dateien von der Gre her nicht verkleinert werden. Die PBO entsteht, wenn man seine fertige Mission im Editor als Single- oder Multiplayermission abspeichert. Whrend Singleplayermissionen im Verzeichnis ArmA/Missions hinterlegt werden, sind die Multiplayermissionen im Verzeichnis ArmA/MPMissions zu nden. PBOs beschrnken sich natrlich nicht nur auf die Missionen. Auch smtliche Addons von Armed Assault sind, wie auch schon in Operation Flashpoint, in PBOs gepackt. Diese Dateien lassen sich mit Hilfe von diversen Tools packen und auch wieder entpacken. So dass man beispielsweise schon vorhandene Missionen oder Addons entpacken und aus ihnen lernen bzw. Skripte oder hnliches verwenden kann. Fr die Tools verweise ich wieder auf die Armed Assault Fanseiten.

2.10 - Die Sounddateien


Der berwiegende Teil der Sounddateien in Armed Assault ist im Wss-Format oder OggFormat konvertiert. Es ist aber auch mglich Wavedateien zu verwenden. Jedoch sollte man hier auf die Gre der Datei achten, da man ja die Mission auch irgendwann zum Download anbieten mchte. Das Wss- oder Ogg-Format ist hierfr genau das richtige, weil die Dateien je nach Soundlnge eine minimale Gre haben. Dies ermglicht die Verwendung von vielen Sounds in einer Mission, ohne dass diese am Ende eine berdimensionale Dateigre hat. Eine nhere Erklrung zum Einbinden von Sounds ndet man im Kapitel 5.52 im Bereich -Eigenen Sound einbinden-. Sounddateien, bis auf Musik, sollten Mono mit einer Frequenz von 44.100 kHz konvertiert sein. Mono daher, damit man den Entfernungseekt nutzen kann. Mchte man nmlich ein Objekt oder eine Einheit mit Name say "Soundname" etwas sagen bzw. erklingen lassen, wrde man es auf der ganzen Karte hren, was ja unlogisch wre. Deshalb Mono! Sind die Dateien also Stereo, erklingen die Sounds global. Die Konvertierungsprogramme fr diese Dateien ndet man auf den Armed Assault Fanseiten oder auch sonst bei anderen Anbietern im Internet. 56

2.11 - Die LIP-Dateien


Die Lip-Datei ist fr die Bewegung der Lippen zustndig. Jede Sounddatei, die fr die Sprachausgabe ausgelegt ist, kann mit einer Lip-Datei versehen werden, damit sich die Lippen der jeweiligen Einheit beim Sprechen auch bewegen. Hierbei gibt es lediglich 3 Werte(1,2,3), die man dafr bentigt. Zuerst legt man die Framerate der einzelnen Bewegungsbilder, hier mit dem Wert 0.040, fest. Man kann diesen Wert quasi als Zeitabschnitt bezeichnen. Alle 0.040 Sekunden bzw. Frames ndert sich nun die Mundbewegung. Nach der Festlegung der Framezeit beginnt der eigentliche Bewegungsablauf der Lippen, welche die nungsgrade 0 bis 3 haben. Wobei der Wert 0 fr geschlossenen und 3 fr weit geneten Mund steht. Hier wurde eine Sounddatei verwendet, die genau eine Sekunde lang ist. Teilt man 1 Sekunde durch 0.040 so erhlt man 25. Hier sind aber gar keine 25 Zeilen enthalten, sondern nur 20. Das liegt daran, dass man es auch so schreiben kann: Zum Beispiel von Zeit 0.560 setzt man den Lippenwert 1 und pausiert bis Zeit 0.720 und setzt dann den Lippenwert 2. Hier wurde also eine 4 Frame lange Bewegungspause der Lippen einsetzt.
frame = 0.040 0.000, 0 0.040, 1 0.080, 2 0.120, 3 0.160, 2 0.200, 1 0.240, 0 0.280, 1 0.320, 2 0.360, 1 weiter -->

Kapitel 2

0.400, 0 0.440, 1 0.480, 3 0.520, 0 0.560, 1 4 Frame-Pausen 0.720, 2 2 Frame-Pausen 0.800, 1 0.840, 2 0.920, 1 1.000, 2

Dieses Beispiel ist ja nur fr eine Sekunde. Man kann sich dann schon vorstellen, wie lang eine 10 oder 15 Sekunden lange Lip-Datei aussehen kann. Damit man das aber alles nicht per Hand machen muss, gibt es Tools, die fr die Erstellung solcher Dateien konzipiert sind. Hier verweise ich mal wieder auf die Armed Assault Fanseiten, auf denen man die entsprechenden Tools nden und runterladen kann.

57

2.12 - Das Overview


Das Overview ist der Abschnitt, den man bei der Einzelspielermissionsauswahl als kurzen Infoteil zur Mission sehen kann. Dieser wird in der Overview.html zusammen mit einem Bild erstellt. Im Spiel sieht das dann etwa wie auf dem Bild aus.

Rechts ist die Missionsauswahl und links die Info mit Bild zu der Mission zu sehen. Zum Erstellen eines Overviews wren gewisse Html-Kenntnisse von Vorteil, aber auch wer sich damit nicht auskennt, bekommt das ohne weiteres hin. Am besten ist es immer, wenn man sich die Overview aus einer anderen Mission herauskopiert, einfach umschreibt und mit einen eigenem Bild versieht. Zu Beginn erstellt man zunchst einmal eine Textdatei, welche man spter, wenn man alles fertig konguriert hat, dann in Overview.html umbenennt. Diese Textdatei net man dann und trgt dort etwa folgenden Quelltext ein, welcher aus einer original Armed Assault Mission stammt.
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1250"> <meta name="GENERATOR" content="VB"> <title>Overview</title> </head> <body bgcolor="#FFFFFF"> <br> <!--Nachtwache--> <br> <p align="center"><img src="Title.paa" width="230" height="115"></p> <BR> <p> <! ---Missionsinfo> Wieder steht eine langweilige Nachtwache an. Es ist eine warme Nacht <! ---Ende Missionsinfo> </p></body> </html>

58

2.13 - Das Brieng


Die Brieng.html, die das Brieng direkt zur jeweiligen Mission darstellt, ist schon etwas umfangreicher als die Overview.html zu schreiben. Sie umfasst wesentlich mehr Text in Form von Informationen zur Mission und die dazugehrigen Missionsziele. Im folgend zu sehenden Briengausschnitt sieht man ganz gut den Missionsinfotext und darunter die Missionsziele, von welchen das Erste bereits abgehakt ist und die anderen noch zu erfllen sind. Mehr Informationen zu den Missionszielen gibt es im Kapitel 4.5. Hier geht es zunchst erstmal darum eine Brieng.html zu erstellen und diese zu verstehen. Der einfachste Weg hierzu ist, wenn man sich eine Brieng.html aus einer schon bestehenden Mission herauskopiert und diese an seine eigenen Bedrfnisse bzw. Mission anpasst. Ein weiter einfacher Weg wre, eines der vielen Briengtools, die es auf den Armed Assault Fanseiten zum Download gibt, zu verwenden. Mchte man ein vorhandenes Brieng ndern, klickt man mit Rechtsklick auf die Datei und whlt nen mit und net die HTML-Datei dann ganz einfach mit dem Texteditor.

Kapitel 2

Trotz allem folgt hier jetzt der trockene Weg zum Erstellen eines Briengs. Im Brieng selbst gibt es ja, wie man oben sieht, den Abschnitt Plan und den Abschnitt Notes. Beide stellen zwei verschiedene Seiten dar, die aber in einer Datei verarbeitet werden. Zum Erstellen eines Briengs wird zunchst wieder eine ganz normale Textdatei bentigt. Diese wird zunchst wieder normal als Textdatei genet und in ihr der Quelltext nach den eigenen Bedrfnissen verfasst. Nach Abschluss der Arbeit, wird die Datei geschlossen und in Brieng.html umbenannt. 59

Wie man im Kapitel 2.1 -Der Missionsordner- sehen kann, gibt es mehrere Briengdateien, welche in den jeweiligen Sprachen verfasst sind. Normalerweise ist in der normal benannten Brieng.html alles in Englisch geschrieben. Aber wenn man nur eine Sprache fr seine Mission vordeniert, ist es egal welche Sprache darin vorkommt. Mchte man beispielsweise mehrere Sprachen einbinden, so sollte man sich schon an die Regel halten und die Dateien dementsprechend benennen. Brieng.German.html Overview.German.html Brieng.France.html Overview.France.html Das englische Brieng und Overview wrde in diesem Fall einfach nur wie folgt benannt: Brieng.html Overview.html Auf den folgenden zwei Seiten ist nun das passende Brieng zum Briengbild auf der Vorseite zu sehen. Es wurden lediglich die Notizen hinzugefgt, die im Bild als Notes benannt sind. Mit ein wenig Geduld, Ideenreichtum und Kreativitt kann jeder mit ein bisschen bung ein gut ausgefeiltes Brieng erstellen. So kann ein Brieng einer Mission spter im Quelltext etwa aussehen:
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1250"> <meta name="GENERATOR" content="vb"> <title>Brieng</title> </head> <body bgcolor="#FFFFFF"> <h2> <a name="Main"></a> </h2> <! --- Die Notizen ab hier werden die Notizen(Notes) eingetragen.> <h6> Damn thats my rst shooting lesson. <br> </h6> <! --- Ende der Notizen> <hr> <! --- Der Missionsplan Ab hier wird die Missionsbeschreibung angegeben.> <p><a name="Plan"></a> Successfully nish weapon qualication.<br>

60

Expert Marksman rie qualication required to unlock sniper course in line 6. </p> <hr> <! --- Die Missionsziele Ab hier erfolgt die Eintragung der Missionsziele> <p><a name="OBJ_1"></a> Listen to your drill instructor until he lets you go. </p><hr> <p><a name="OBJ_2"></a> Qualify with rie in line 1. </p><hr> <p><a name="OBJ_3"></a> Qualify with automatic weapon in line 2. </p><hr> <p><a name="OBJ_4"></a> Qualify with granade launcher in line 3. </p><hr> <p><a name="OBJ_5"></a> Familiarize with hand granades in line 4. </p><hr> <p><a name="OBJ_6"></a> Qualify with M9 pistol in line 5. </p><hr> <! --- Ende des Missionsplans> <! --- Abschlussbrieng Festlegung des Abschlussbriengs> <hr><br> <h2><p><a name="Debrieng:End1">Qualied</a></p></h2> <br><p> Now I'm a qualied infantryman. </p><br> <hr><br> <h2><p><a name="Debrieng:End2">Title</a></p></h2> <br><p></p><br> <hr><br> <h2><p><a name="Debrieng:End3">Title</a></p></h2> <br><p></p><br> <hr><br> <h2><p><a name="Debrieng:End4">Title</a></p></h2> <br><p></p><br> <hr><br> <h2><p><a name="Debrieng:End5">Title</a></p></h2> <br><p></p><br> <hr><br> <h2><p><a name="Debrieng:End6">Give UP</a></p></h2> <br><p> I gave it up. The infantry training is boring. </p><br> <! --- END debrieng ---> </body> </html>

Kapitel 2 61

Mit <html> und <head> wird die Html-Datei zunchst ernet. Danach folgen einige hier jetzt nicht so wichtige Standartzeilen. Die Hintergrundfarbe wird mit <body bgcolor="#FFFFFF"> deniert, obwohl die bei Armed Assault ohnehin fest ist. Viel wichtiger ist zum Beispiel <br>, was fr einen Zeilenumbruch steht. Hinzu kommen noch Befehle wie <hr> fr eine horizontale Linie, welche man aber nicht sehen kann, dann das <p>, welches fr einen Absatz steht und zu guter letzt das <a>, welches einen Link hervorhebt. Mann hat ja die Mglichkeit Wrter mit Marker zu verbinden, wo das Fadenkreuz dann hinwandert, wenn man diesen Link im Brieng anklickt. Folgend ein kurzes Beispiel: Hat man im Brieng beispielsweise einen Marker mit dem Namen Ziel gesetzt, verlinkt man diesen im Brieng wie folgt. Der Satz im Brieng lautet: Erobern Sie das Ziel. Von diesem Satz soll das Wort Ziel mit dem Marker namens Ziel verlinkt werden. Im Quelltext sieht das dann so aus: Erobern Sie das <a href="marker:ziel">Ziel</a> Wie man sieht, ist der Marker namens Ziel angegeben und zwischen dem <a> und </a> das Wort Ziel. Wenn man jetzt im Brieng auf das Wort Ziel klickt, wandert das Fadenkreuz beim Anklicken auf den Marker namens Ziel, wie auf dem unteren Bild sehr gut zu sehen ist. Befehle, die mit einem Backslash versehen sind, beenden die jeweilige Aktion.

62

Kapitel 3
Waen Fahrzeuge Einheiten Objekte
Nachdem du in den ersten beiden Kapiteln mit der Oberche und den Dateien vertraut gemacht wurdest, kommen wir nun zu den etwas spezielleren Bereichen. Du bist nun fhig Einheiten zu setzen, diese mit Wegpunkten zu verbinden und weit sogar, in welchen Dateien du welchen Bereich nden und kongurieren kannst. Hier werden dir nun alle Bereiche erlutert, die mit Waen, Fahrzeugen, Einheiten und Objekten verbunden sind.

Kapitel 3

3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 3.10 3.11 3.12 3.13 3.14 3.15 3.16 3.17 3.18 3.19 3.20 3.21 3.22

Die Handwaen und statische Waen Die Waenbezeichnungsliste Einheiten bewanen und ausrsten Die Waen- und Munitionskiste Fahrzeuge be- und entladen Waenauswahl im Brieng Die Fahrzeugklassen Die Fahrzeugwaen Die Einheitsklassen Die Shellklassen Die Objekt- und Gebudeklassen Die Panzenklassen Die Steinklassen Die Schilderklassen Waen- und Magazintypen ausgeben lassen Abgefeuerten Typ ausgeben lassen Hat Einheit Wae? Primr- bzw Sekundrwae einer Einheit Hat Einheit Munition Minen erzeugen Waen und Magazine erzeugen Waenblickrichtung ausgeben lassen

64 68 70 71 71 72 73 76 77 80 81 88 90 91 92 92 92 93 93 93 94 95

63

3.1 - Die Handwaen und statische Waen


Hier eine bersicht smtlicher Hand- und Statikwaen, mit den jeweiligen Bezeichnungen, den Magazinen und dem Zubehr. WESTEN / WIDERSTAND Leichte Handwaen

Wae: Magazin: Granate: Flares:

M16A2
20Rnd_556x45_Stanag 30Rnd_556x45_Stanag

M16A2GL
20Rnd_556x45_Stanag 30Rnd_556x45_Stanag 1Rnd_HE_M203 FlareWhite_M203 FlareGreen_M203 FlareRed_M203 FlareYellow_M203

M4GL - M4A1GL
20Rnd_556x45_Stanag 30Rnd_556x45_Stanag 1Rnd_HE_M203 FlareWhite_M203 FlareGreen_M203 FlareRed_M203 FlareYellow_M203

Wae: Magazin:

M4

M4A1SD

M4AIM

20Rnd_556x45_Stanag 20Rnd_556x45_Stanag 20Rnd_556x45_Stanag 30Rnd_556x45_Stanag 30Rnd_556x45_Stanag 30Rnd_556x45_Stanag 30Rnd_556x45_StanagSD 30Rnd_556x45_StanagSD 30Rnd_556x45_StanagSD

Wae: Magazin: Granate: Flares:

M16A4

M4A1

M16A4_GL
20Rnd_556x45_Stanag 30Rnd_556x45_Stanag 1Rnd_HE_M203 FlareWhite_M203 FlareGreen_M203 FlareRed_M203 FlareYellow_M203

M16A4_ACG_GL
20Rnd_556x45_Stanag 30Rnd_556x45_Stanag 1Rnd_HE_M203 FlareWhite_M203 FlareGreen_M203 FlareRed_M203 FlareYellow_M203

20Rnd_556x45_Stanag 30Rnd_556x45_Stanag

Wae: Magazin: 64

M16A4_ACG
20Rnd_556x45_Stanag 30Rnd_556x45_Stanag

MP5A5
30Rnd_9x19_MP5 30Rnd_9x19_MP5SD

MP5SD
30Rnd_9x19_MP5 30Rnd_9x19_MP5SD

Wae: Magazin:

M4SPR

M249

M240

20Rnd_556x45_Stanag 20Rnd_556x45_Stanag 100Rnd_762x51_M240 30Rnd_556x45_Stanag 30Rnd_556x45_Stanag 30Rnd_556x45_StanagSD 30Rnd_556x45_StanagSD 200Rnd_556x45_M249

Kapitel 3

Wae: Magazin:

G36a
30Rnd_556x45_ G36

G36C
30Rnd_556x45_G36

G36K
30Rnd_556x45_ G36

Wae: Magazin:

M24
5Rnd_762x51_M24

M107
10Rnd_127x99_M107

Wae: Magazin:

M9
15Rnd_9x19_M9 15Rnd_9x19_M9SD

M9SD
15Rnd_9x19_M9 15Rnd_9x19_M9SD

WESTEN / WIDERSTAND Schwere Handwaen

Wae: Magazin:

Stinger
Stinger

M136
M136

Javelin
Javelin

WESTEN / WIDERSTAND Statische Waen

Wae: Magazin:

M119
30Rnd_105mmHE_M119

M2StaticMG M2HD_mini_TriPod
100Rnd_127x99_M2

SearchLight

65

Wae: Magazin:

MK19_TriPod
48Rnd_40mm_MK19

TOW_TriPod
6Rnd_TOW_Tripod

Stinger_Pod
2Rnd_Stinger

OSTEN Leichte Handwaen

Wae: Magazin: Granate: Flares:

AK74
30Rnd_545x39_AK

AK74GL
30Rnd_545x39_AK 1Rnd_HE_GP25 FlareWhite_GP25 FlareGreen_GP25 FlareRed_GP25 FlareYellow_GP25

AKS74U
30Rnd_545x39_AK

Wae: Magazin:

AKS74UN
30Rnd_545x39_AK 30Rnd_545x39_AKSD

PK
100Rnd_762x54_PK

SVD
10Rnd_762x54_SVD

Wae: Magazin:

AKS74PSO
30Rnd_545x39_AK

KSVK
5Rnd_127x108_KSVK

Wae: Magazin:

Makarov
8Rnd_9x18_Makarov 8Rnd_9x18_MakarovSD

MakarovSD
8Rnd_9x18_Makarov 8Rnd_9x18_MakarovSD

66

OSTEN Schwere Handwaen

Wae: Magazin:

6G30
6Rnd_HE_6G30

RPG7V
PG7V

Strela
Strela

OSTEN Statische Waen Kapitel 3

Wae: Magazin:

D30
30Rnd_122mmHE_D30

DSHKM
50Rnd_127x107_DSHKM

DSHkM_Mini_TriPod
50Rnd_127x107_DSHKM

Wae: Magazin:

TOW_TriPod_East
6Rnd_TOW_Tripod

Stinger_Pod_East
2Rnd_Stinger

AGS
29Rnd_30mm_AGS30

Ausrstung allgemein

Wae: Magazin:

LaserDesignator
LaserBatteries

NVGoggles

Binocular

Wae: Magazin:

Handgrenade
Handgrenade

HandGrenadeTimed
HandGrenadeTimed

Pipebomb
Pipebomb

Wae: Magazin:

Mine
Mine

MineE
MineE

SmokeShell
SmokeShell SmokeShellRed SmokeShellGreen

67

3.2 - Die Waenbezeichnungsliste


Hier nochmal die Handwaen und Magazine in Listenform mit kurzer Bemerkung dazu. Natrlich macht es bei einer Wae ohne Schalldmpfer keinen Sinn ein Magazin mit dem Anhang SD zu vergeben. Westen / Widerstand Waenklasse
M16A2 M16A4 M16A4_ACG M4 M4A1 M4A1SD M4AIM M4SPR M16A2GL M16A4_GL M16A4_ACG_GL M4GL M4A1GL

Bezeichnung
M16A2 M16A4 M16A4 - Zielfernrohr M 4 - Standard M 4 A1 - Standard M 4 - Schalldmpfer M4 - Aimpoint M 4 - Zielfernrohr Sturmgewehre mit Granatwerfer

Munition
Magazin: 20Rnd_556x45_Stanag 30Rnd_556x45_Stanag 30Rnd_556x45_StanagSD

Magazin:

20Rnd_556x45_Stanag 30Rnd_556x45_Stanag 30Rnd_556x45_StanagSD 1Rnd_HE_M203 FlareWhite_M203 FlareGreen_M203 FlareRed_M203 FlareYellow_M203 20Rnd_556x45_Stanag 30Rnd_556x45_Stanag 200Rnd_556x45_M249 30Rnd_556x45_StanagSD 100Rnd_762x51_M240 30Rnd_556x45_G36

Granate: Flares:

M249

M249 SAW

Magazin:

M240 G36a G36C G36K M24 M107 MP5A5 MP5SD M9 M9SD M136 Javelin Stinger

M240 G 36 Standard G 36 - Kommando G 36 Kommando II Scharfschtzengewehr Scharfschtzengewehr MP5 - StandardMP5 Schalldmpfer Pistole Pistole - Schalldmpfer M136 - Panzerfaust Javelin - Panzerfaust Stinger - Fliegerfaust

Magazin: Magazin:

Magazin: Magazin: Magazin: Magazin: Magazin: Magazin: Magazin:

5Rnd_762x51_M24 10Rnd_127x99_M107 30Rnd_9x19_MP5 30Rnd_9x19_MP5SD 15Rnd_9x19_M9 15Rnd_9x19_M9SD M136 Javelin Stinger

68

Osten Waenklasse Bezeichnung


AK74 AK74GL AK 74 AK 74 mit Granatwerfer

Munition
Magazin: Magazin: Granate: Flares: 30Rnd_545x39_AK 30Rnd_545x39_AK 1Rnd_HE_GP25 FlareWhite_GP25 FlareGreen_GP25 FlareRed_GP25 FlareYellow_GP25 30Rnd_545x39_AK 30Rnd_545x39_AKSD 30Rnd_545x39_AK AK74PSO 100Rnd_762x54_PK 5Rnd_127x108_KSVK 10Rnd_762x54_SVD 8Rnd_9x18_Makarov 8Rnd _9x18_MakarovSD 6Rnd_HE_6G30 RPG7V Strela

Kapitel 3

AKS74U AKS74UN AKS74PSO PK KSVK SVD Makarov MakarovSD 6G30 RPG7V Strela

AKS 74 U - Standard AKS74UN - Schalldmpfer AKS74 - Zielfernrohr MG Scharfschtzengewehr Scharfschtzengewehr Pistole Pistole - Schalldmpfer Granatwerfer Panzerfaust Fliegerabwehr

Magazin: Magazin: Magazin: Magazin: Magazin: Magazin: Magazin: Magazin: Magazin:

Ausrstung Waenklasse
Handgrenade HandGrenadeTimed Grenade TimeBomb PipeBomb SmokeShell SmokeShellRed SmokeShellGreen Mine MineE Binocular NVgoggles LaserDesignator CarHorn SportCarHorn TruckHorn BikeHorn

Bezeichnung
Handgranate Handgranate (zeitverzgert) Granate Zeitbombe Sprengsatz Weie Rauchgranate Rote Rauchgranate Grne Rauchgranate Panzermine Schtzenmine Fernglas Nachsichtgert Lasermarkiergert Autohupe Sportautohupe Lkw-Hupe Fahrradklingel

Munition
Handgrenade HandGrenadeTimed Grenade TimeBomb PipeBomb SmokeShell SmokeShellRed SmokeShellGreen Mine MineE Binocular NVgoggles LaserBatteries CarHorn SportCarHorn TruckHorn BikeHorn

69

3.3 - Einheiten bewanen und ausrsten


Smtliche Einheiten aus Armed Assault lassen sich be- bzw. entwanen. Dazu muss man wissen, dass eine Einheit immer nur ein Gewehr tragen kann. Als zweite groe Wae kann maximal eine Panzer- oder Flugabwehrwae mitgefhrt werden. Man kann einer Einheit also erst eine Wae zuteilen, wenn man zuvor eine andere entfernt hat. Diese kann man dabei einzeln oder auch komplett entfernen. Mit folgender Syntax entfernt man eine einzelne Wae: this removeWeapon "M4" oder Name removeWeapon "M4" Die Magazine, Handgranaten usw. bleiben dabei weiterhin vorhanden. Wrde man dieser Einheit nun eine Wae zuweisen, die die gleichen Magazine bentigt, wre diese gleich zu Anfang geladen, was nicht immer so ist. Wenn man nmlich mit dem Befehl removeAllWeapons Name arbeitet, werden der Einheit alle Waen und alle Magazine abgenommen. Wenn man diese Einheit nun bewanen mchte, muss man eine gewisse Reihenfolge beachten, da die Wae sonst zu Missionsbeginn nicht geladen sein wird. Man gibt zuerst die Magazine und erst zuletzt die Wae an! Nachdem man bei der Einheit nun das M4 entfernt hat, weist man ihr mit dieser Syntax eine neue zu: this addWeapon "M4A1SD" oder Name addWeapon "M4A1SD"; Die Eintragungen kann man in der Initzeile der jeweiligen Einheit oder auch woanders vornehmen. Als Beispiel in Skripten, Auslsern oder Wegpunkten. Zum Entfernen eines Magazins gilt diese: this removeMagazine "30Rnd_556x45_Stanag" und zum zuweisen eines neuen Magazins diese Syntax: this addMagazine "30Rnd_556x45_StanagSD" Mchte man alle oder nur einige Magazine entfernen, kann man auch folgende Syntax nutzen. Dabei gelten wieder alle werte zwischen 0 und 1. Name setVehicleAmmo 0.5 Natrlich treen diese Befehle nicht nur auf die Waen, sondern auch auf die ntige Ausrstung zu. Der normale Soldat trgt in der Regel kein Fernglas oder Nachtsichtgert bei sich. Da aber ein Fernglas in den Weiten von Sahrani sehr von Vorteil wre und auch ein Nachtsichtgert in dunkler Nacht den notwendigen Durchblick verleiht, gibt man in der Initzeile der Einheit die jeweils aufgefhrte Syntax an. fr das Fernglas und fr das Nachsichtgert 70 this addWeapon "Binocular"; this addWeapon "NVGoggles";

3.4 - Die Waen- und Munitionskiste


Alle Waen- und Munitionskisten lassen sich individuell, also je nach Bedarf, ausstatten. Dabei ist es vollkommen egal, ob man Waen und Munition in eine oder verschiedene Kisten packt. Um eine Waen- bzw. Munitionskiste selbst zu denieren, muss man diese zunchst entleeren. Das macht man mit: clearWeaponCargo this oder clearWeaponCargo Name clearMagazineCargo this oder clearMagazineCargo Name Kapitel 3 Diese Eintrge nimmt man in der Initzeile der jeweiligen Kiste vor, ist aber auch in Bereichen wie Skripten, Auslsern usw. mglich. Nachdem die Kiste nun entleert wurde, fgt man die Waen und Ausrstung hinzu, welche die Kiste spter enthalten soll. Fr this kann auch jeweils der Name der Kiste angegeben werden. Im folgenden Beispiel wird eine Kiste mit 2 schallgedmpften M4A1, den dazu passenden 10 Magazinen und 6 Handgranaten beladen. this addWeaponCargo ["M4A1SD",2]; this addMagazineCargo ["30Rnd_556x45_StanagSD",10]; this addMagazineCargo ["Handgrenade",6]; Tipp! Auch Fsser lassen sich mit Waen und Munition befllen. Dort wird das gleiche Verfahren, wie bei den Munitionskisten verwendet, nur dass man die Fsser eben vorher nicht mit den Clearbefehlen leeren muss.

3.5 - Fahrzeuge be- und entladen


Viele Fahrzeuge in Armed Assault sind bereits mit Magazinen, Handgranaten und hnlichem beladen. Man hat dort also auch dort als Soldat jederzeit die Mglichkeit sich neu zu bewanen. Natrlich kann man die Fahrzeuge im Editor auch selbst mit Magazinen und Waen bestcken. Hierzu wird das gleiche Verfahren, wie bei den Munitionskisten verwendet. Das Entladen erfolgt wieder mit: clearWeaponCargo this clearMagazineCargo this und das Beladen mit der jeweiligen Syntax: this addWeaponCargo ["M4A1SD",2]; this addMagazineCargo ["30Rnd_556x45_StanagSD",10]; Hier wurden nun 2 schallgedmpfte M4A1 Sturmgewehre mit den dazugehrigen Magazintypen, hier 10 Magazine, in das Fahrzeug geladen. 71

3.6 - Waenauswahl im Brieng


Als Leader einer Mehrspielergruppe hat der Spieler spter ber das Brieng in der Mission die Mglichkeit sich und seine Gruppe selbst auszustatten, vorausgesetzt man hat dies vorher so in der Description.ext, siehe Kapitel 2.3, vordeniert. Dazu muss eine Klasse fr die jeweilige Wae und eine Klasse fr die dazugehrige Magazinsorte vordeniert werden. Im folgenden Beispiel wurden 6 schallgedmpfte M4A1 mit 20 dazugehrigen Magazinen, 2 M136 Panzerfuste mit 6 Schuss und dazu noch 20 Handgranaten festgelegt.
// Hier beginnt der Part Class Weapons class Weapons { class M4A1SD { count = 6; }; class M136 { count = 2; }; }; // Hier endet der Part Class Weapons // Hier beginnt der Part Class Magazines class Magazines { class 30Rnd_556x45_StanagSD { count = 20; }; class M136 { count = 6; }; class HandGrenade { count = 20; }; }; // Hier endet der Part Class Magazines

Die Art der Wae Die Anzahl der Waen Die Art der Wae Die Anzahl der Waen

Die Art der Magazine Die Anzahl der Magazine Die Art der Magazine Die Anzahl der Magazine Die Art der Wae Die Anzahl der Magazine

Mchte man die Waenauswahl erweitern, fgt man lediglich die jeweilige Klasse der Wae und die Klasse der Magazine selbst in diesen Abschnitt der Description.ext ein. 72

3.7 - Die Fahrzeugklassen


WESTEN Fahrzeug
M1Abrams M113 M113Ambul M113 Mobile HQ Vulcan Stryker ICV M2 Stryker ICV MK19 Stryker TOW HMMWV HMMWV M2 HMMWV TOW HMMWV MK 19 Truck 5 t Truck 5 t Open Truck 5 t MG Truck 5 t Repair Truck 5 t Reammo Truck 5 t Refuel Truck 5 t Ammo Truck Truck 5 t Supply Truck 5 t Salvage Motorcycle AH 1 Z AH 6 AV 8 B AV 8 B (GBU) A10 MH 6 UH 60 UH 60 (FFAR) Camel Parachute CRRC RHIB RHIB 2 Turret

Beschreibung Land
Kampfpanzer Schtzenpanzer Sanittsschtzenpanzer M113 - Mobiles Hauptquartier (Warfare) Flugabwehrpanzer Schtzenpanzer mit M2-Maschinengewehr Schtzenpanzer mit Granatwerfer Schtzenpanzer mit Panzerabwehrwae Hummer Hummer mit M2 Hummer mit Panzerabwehrwae Hummer mit Granatwerfer Lkw 5 Tonner Lkw 5 Tonner - oen Lkw 5 Tonner mit Maschinengewehr Lkw 5 Tonner - Reparaturfahrzeug Lkw 5 Tonner - Munitionsfahrzeug Lkw 5 Tonner - Tankfahrzeug Lkw 5 Tonner - Munitionsfahrzeug (Warfare) Lkw 5 Tonner - Transporter (Warfare) Lkw 5 Tonner - Bergungsfahrzeug(Warfare) Motorrad

Klassenname
M1Abrams M113 M113Ambul M113_MHQ Vulcan Stryker_ICV_M2 Stryker_ICV_MK19 Stryker_TOW HMMWV HMMWV50 HMMWVTOW HMMWVMK Truck5t Truck5tOpen Truck5tMG Truck5tRepair Truck5tReammo Truck5tRefuel WarfareTruck5tReammo WarfareWestSupplyTruck WarfareWestSalvageTruck M1030 AH1W AH6 AV8B2 AV8B A10 MH6 UH60MG UH60 Camel ParachuteWest Zodiac RHIB RHIB2Turret

Kapitel 3

Luft
Cobra-Kampfhubschrauber Little Bird Helikopter bewanet Harrier mit Raketen Harrier mit Bomben A10 mit Raketen und GAU12 Little Bird Helikopter unbewanet Blackhawk - Helikopter mit MG Blackhawk - Helikopter mit Raketenwerfer Doppeldecker Fallschirm

Wasser
Schlauchboot Patrouillenboot mit Maschinengewehr Patrouillenboot mit MG und Granatwerfer

73

OSTEN Fahrzeug
T72 BMP2 BMP2Ambulance BMP2 Mobile HQ ZSU BRDM2 BRDM2_ATGM UAZ UAZMG Ural Ural Open Ural Repair Ural Reammo Ural Refuel Ural Ammo Ural Supply Ural Salvage Motorcycle Datsun DshKm - 1 Datsun DshKm - 2 Datsun Pk -1 Datsun Pk -2 Hilux DshKm - 1 Hilux DshKm - 2 Hilux Pk -1 Hilux Pk -2 SU 34 SU 34B Mi 17 Mi 17 KA-50 Camel E Parachute PBX Boat

Beschreibung Land
Kampfpanzer Schtzenpanzer Sanittsschtzenpanzer BMP2 - Mobiles Hauptquartier (Warfare) Shilka Flugabwehrpanzer Schtzenpanzer Schtzenpanzer mit Panzerabwehrwae Jeep Jeep mit Maschinengewehr Lkw Lkw - oen Lkw - Reparaturfahrzeug Lkw - Munitionsfahrzeug Lkw - Tankfahrzeug Lkw - Munitionsfahrzeug (Warfare) Lkw - Transporter (Warfare) Lkw - Bergungsfahrzeug (Warfare) Motorrad Pick-up mit schwerem MG Pick-up mit schwerem MG Pick-up mit MG Pick-up mit MG Pick-up mit schwerem MG Pick-up mit schwerem MG Pick-up mit MG Pick-up mit MG

Klassenname
T72 BMP2 BMP2Ambul

BMP2_MHQ
ZSU BRDM2 BRDM2_ATGM UAZ UAZMG Ural UralOpen UralRepair UralReammo UralRefuel WarfareUralReammo WarfareEastSupplyTruck WarfareEastSalvageTruck TT650G DATSUN_DSHKM1 DATSUN_DSHKM2 DATSUN_PK1 DATSUN_PK2 HILUX_DSHKM1 HILUX_DSHKM2 HILUX_PK1 HILUX_PK2 SU34 SU34B Mi17_MG Mi17 KA50 Camel2 ParachuteEast PBX

Luft
SU 34 mit Raketen, FFAR, Bordkanone SU 34 mit Raketen und Bordkanone Helikopter mit Maschinengewehr Helikopter mit Raketenwerfer Kampfhubschrauber Doppeldecker Fallschirm

Wasser
Schlauchboot

74

WIDERSTAND Fahrzeug
T72 RACS M113 RACS Vulkan RACS 4x4 4x4 MG 4x4 Open AH6 RACS MH6 RACS UH60 (FFAR) RACS UH-60 RACS Parachute CRRC

Beschreibung Land
Kampfpanzer Schtzenpanzer Flugabwehrpanzer Jeep geschlossen Jeep mit Maschinengewehr M2 Jeep oen

Klassenname
T72_RACS M113_RACS Vulcan_RACS Landrover LandroverMG Landrover_Closed AH6_RACS MH6_RACS UH60RACS UH60MGRACS ParachuteG Zodiac2

Luft
Kampfhubschrauber Little Bird UH-60 (FFAR) RACS UH-60 RACS Fallschirm

Kapitel 3

Wasser
Schlauchboot

ZIVILISTEN Fahrzeug
Pick-Up Pick-Up 2 Pick-Up 3 Oroad Oroad2 Oroad3 Sedan Hatchback Skoda Skoda (Blue) Skoda (Red) Skoda (Green) Policecar HMMWV (Civil) Bus UralCivil UralCivil 2 Traktor Motorcycle Parachute Parachute DC3

Bemerkung Land
Pick-Up blau Pick-Up rot geschlossen Pick-Up grn Gelndewagen grau oen Gelndewagen rotes Verdeck Gelndewagen wei oen Auto wei Auto rot Skoda wei Skoda blau Skoda rot Skoda grn Polizeijeep HMMWV (Zivil) Stadtbus Lkw gelb geschlossen Lkw blau genet Traktor Motorrad

Klassenname
Datsun1_civil_1_open Datsun1_civil_2_covered Datsun1_civil_3_open Hilux1_civil_1_open Hilux1_civil_3_open Hilux1_civil_2_covered Car_sedan Car_hatchback Skoda SkodaBlue SkodaRed SkodaGreen Landrover_Police HMMWV_civil Bus_city UralCivil UralCivil2 Tractor TT650C ParachuteC Parachute DC3

Luft
Fallschirm Leerer Fallschirm DC3

75

3.8 - Die Fahrzeugwaen


Luft
Fahrzeug
UH60 Black Hawk MG UH60 Black Hawk FFAR AH 1 Supercobra AH6 Littlebird FFAR, MG

Wae
M134 FFARLauncher HellreLauncher FFARLauncher M197 TwinM134 FFARLauncher GAU12 SidewinderLauncher BombLauncher GAU12 MaverickLauncher GAU8 TwinVickers CamelGrenades 2A42 80mmLauncher VikhrLauncher PKT 57mmLauncher R73Launcher S8Launcher GSh301 Ch29Launcher GSh301

Magazin
200Rnd_762x51_134 38Rnd_FFAR 8Rnd_Hellre 38Rnd_FFAR 750Rnd_M197_AH1 4000Rnd_762x51_M134 14Rnd_FFAR 300Rnd_25mm_Gau12 4Rnd_Sidewinder_AV8B 5Rnd_GBU12_AV8B 300Rnd_25mm_Gau12 5Rnd_Maverick_A10 1350Rnd_30mmAP_A10 500Rnd_TwinVickers 6Rnd_Grenade_Camel 230Rnd_30mmHE_2A42 230Rnd_30mmAP_2A42 40Rnd_80mm 12Rnd_Vikhr_KA50 2000Rnd_762x54_PKT 96Rnd_57mm 4Rnd_R73 42Rnd_S8T 180Rnd_30mm_GSh301 6Rnd_Ch29 180Rnd_30mm_GSh301 250Rnd_30mmHE_2A42 250Rnd_30mmAP_2A42 2000Rnd_762x54_PKT 8Rnd_AT5_BMP2 500Rnd_145x115_KPVT 150Rnd_762x54_PKT 5Rnd_AT5_BRDM2 100Rnd_127x99_M2 2100Rnd_20mm_M168 20Rnd_120mmSABOT_M1A2 20Rnd_120mmHE_M1A2 1200Rnd_762x51_M240 23Rnd_125mmSABOT_T72 23Rnd_125mmHE_T72 2000Rnd_23mm_AZP85 2Rnd_TOW 100Rnd_127x99_M2 48Rnd_40mm_MK19 6Rnd_TOW_HMMWV 48Rnd_40mm_MK19 100Rnd_127x99_M2 29Rnd_30mm_AGS30 50Rnd_127x107_DSHKM 100Rnd_127x99_M2 100Rnd_127x99_M2

AV-8B Harrier AV-8B Harrier GBU A10 Camel KA-50

MI-17 MG MI-17 FFAR SU 34 SU 34 B

Land/Wasser
BMP 2 2A42 PKT AT5Launcher KPVT PKT AT5Launcher M2 M168 M256 M240_Veh D81 AZP85 TOWLauncher M2 MK19 TOWLauncherSingle MK19 M2 AGS30 DSHKM M2 M2

BRDM 2 BRDM 2 ATGM M113 MTW M113 Vulcan M1A2 Abrahams

T72, T72Racs Shilka Stryker ATGM Stryker ICV MG Stryker MK19 HMMWV TOW HMMWV MK19 5to LKW MG UAZ AGS 30 UAZ MG Army 4x4 M2 RHIB

76

3.9 - Die Einheitsklassen


WESTEN
Einheit
AA Specialist AT Specialist Automatic Rieman Camel Pilot Crewman Engineer Grenadier Machinegunner Medic Ocer Pilot Rieman Rieman SF Assault SF Marksman SF Recon SF Saboteur SF Saboteur 2 Sniper Squad Leader Team Leader Prisoner USMC Fire Team Leader USMC Machinegunner USMC AASpecialist USMC Rieman USMC Rieman (GL) USMC Rieman (Mines) USMC Rieman (M136) USMC Corpsman USMC Squad Leader USMC Automatic Rieman USMC AT Specialist (Javelin) USMC Sniper USMC Spotter (WDL) Rieman (WDL) Medic (WDL) Grenadier (WDL) AT Specialist (WDL) AA Specialist (WDL) Machinegunner (WDL) Engineer (WDL) Designated Marksman (WDL) Automatic Rieman (WDL) Team Leader (WDL) Squad Leader Mercenary Team Leader Mercenary Grenadier Mercenary Machinegunner Mercenary Engineer Mercenary Sniper Mercenary Saboteur

Beschreibung

Klassenname

Fliegerabwehrsoldat mit Stinger SoldierWAA Panzerabwehrsoldat mit M136 SoldierWAT MG-Schtze mit M249 SoldierWAR Doppeldecker Pilot mit M9 BISCamelPilot Fahrzeugbesatzung mit M4A1 SoldierWCrew Pionier mit M4 AIM SoldierWMiner Grenadier mit M4 203 SoldierWG MG-Schtze mit M240 SoldierWMG Sanittssoldat mit M4 AIM SoldierWMedic Ozier mit M9 OcerW Pilot mit M4A1 SoldierWPilot Schtze mit M4AIM SoldierWB Schtze mit M4AIM SoldierWNOG Special Forces mit M4A1GL SoldierWSaboteurAssault Special Forces mit M4 SPR SoldierWSaboteurMarksman Special Forces mit M4 A1 SD SoldierWSaboteurRecon Special Forces mit M4 A1 SD SoldierWSaboteurPipe Special Forces mit MP 5 SD SoldierWSaboteurPipe2 Scharfschtze mit M24 SoldierWSniper Zugfhrer mit M4 AIM SquadLeaderW Gruppenfhrer mit M4 AIM TeamLeaderW Gefangener ohne Wae SoldierWCaptive Gruppenfhrer M16A4 ACOG GL USMCD_Soldier_TL MG-Schtze mit M240 USMCD_Soldier_MG Fliegerabwehrsoldat mit Stinger USMCD_Soldier_AA Schtze mit M16A4 USMCD_Soldier_R Schtze mit M16A4 ACOG GL USMCD_Soldier_GL Schtze mit M16A4 und Minen USMCD_Soldier_Engineer Panzerabwehrsoldat mit M136 USMCD_Soldier_AT Sanittssoldat mit M4 AIM USMCD_Soldier_Med Zugfhrer mit M16A4 ACOG USMCD_Soldier_SL MG-Schtze mit M249 USMCD_Soldier_AR Panzerabwehrsoldat mit Javeline USMCD_Soldier_HAT Scharfschtze mit M24 USMCD_Soldier_Sniper Schtze mit M16A4 ACOG USMCD_Soldier_Spotter Schtze mit M16A4 (WDL) US_Soldier_WDL Sanitter mit M16A4 (WDL) US_Soldier_WDL_Med Schtze mit M16A4 RCO GL (WDL) US_Soldier_WDL_GL Panzerabwehrsoldat mit M136 (WDL) US_Soldier_WDL_AT Fliegerabwehrsoldat mit Stinger (WDL) US_Soldier_WDL_AA MG-Schtze mit M240 (WDL) US_Soldier_WDL_MG Schtze mit M16A4 und Minen (WDL) US_Soldier_WDL_Engineer Scharfschtze mit M24 (WDL) US_Soldier_WDL_Sniper MG-Schtze mit M249 (WDL) US_Soldier_WDL_AR Gruppenfhrer mit M4 AIM (WDL) US_Soldier_WDL_TL Zugfhrer mit M16A4 ACOG (WDL) US_Soldier_WDL_SL Sldner Anfhrer SoldierMTeamLeader Sldner Grenadier SoldierMG Sldner MG SoldierMMG Sldner Reparatur SoldierMR Sldner Sniper SoldierMS Sldner Sprengcommando SoldierMD

Kapitel 3 77

OSTEN Einheit

Beschreibung

Klassenname
SoldierEAA SoldierEAT BISCamelPilot2 SoldierECrew SoldierEMiner SoldierESaboteurPipe SoldierESaboteurMarksman SoldierESaboteurBizon SoldierEG SoldierEMG SoldierEMedic SoldierEB SoldierENOG OcerE SoldierEPilot SoldierESniper SquadLeaderE TeamLeaderE SoldierECaptive SoldierPTeamLeader SoldierPAT SoldierPSaboteur SoldierPMG SoldierPMedic SoldierPB

AA Specialist Fliegerabwehrsoldat mit Strela AT Specialist Panzerabwehrsoldat mit RPG 7 V Camel Pilot Doppeldecker Pilot Crewman Fahrzeugbesatzung Engineer Pionier Especas Speznaz mit AKS 74 U Especas Marksman Speznaz mit AKS74PSO Especas Saboteur Speznaz mit AKS 74 UN Grenadier Grenadier Machinegunner Soldat mit Maschinengewehr PK Medic Sanittssoldat Rieman Soldat mit AK-74 Rieman Soldat mit AK-74 Ocer Ozier Pilot Pilot Sniper Scharfschtze mit Dragunov (SVD) Squad Leader Zugfhrer Team Leader Gruppenfhrer Prisoner Gefangener Partisan Team Leader Partisane Anfhrer Partisan AT Specialist Partisane PzAbw Partisan Saboteur Partisane Saboteur Partisan Machinegunner Partisane MG Partisan Medic Partisane Sanitter Partisan Rieman Partisane Schtze

WIDERSTAND Einheit
AA Specialist AT Specialist Crewman Engineer Grenadier Machinegunner Medic Ocer Pilot Rieman Rieman Royal Commando Royal Guard Royal Marksman Sniper Squad Leader Team Leader Prisoner Spy

Beschreibung
Fliegerabwehrsoldat mit Stinger Panzerabwehrsoldat mit M136 Fahrzeugbesatzung Pionier Grenadier Soldat mit Maschinengewehr M240 Sanittssoldat Ozier Pilot Soldat mit M16 A2 Soldat mit M16 A2 Knigliches Kommando mit MP 5 SD Knigliche Garde mit G36c Kniglicher Scharfschtze mit G36a Scharfschtze mit M24 Zugfhrer Gruppenfhrer Gefangener Spion

Klassenname
SoldierGAA SoldierGAT SoldierGCrew SoldierGMiner SoldierGG SoldierGMG SoldierGMedic Ocer G SoldierGPilot SoldierGB SoldierGNOG SoldierGCommando SoldierGGuard SoldierGMarksman SoldierGSniper SquadLeader TeamLeader SoldierGCaptive SoldierSpy

78

ZIVILISTEN Einheiten, die hier mit N/A angegeben sind, sind im Editor selbst nicht verfgbar. Diese kann man, wie in Kapitel 5.45 erlutert, mit dem CreateVehicle-Befehl erzeugen. Einheit
Civilian bis Civilian21

Beschreibung

Klassenname

Nhere Beschreibung nicht erforderlich. Civilian Durchnummeriert von Civilian bis Civilian21

Civilian Man Civilian Man King War Correspondent Bodyguard Prime Minister Reporter (Female) Reporter (Female) Reporter (Female) Reporter (Female) Zombie Zombie Zombie Zombie Prisoner 1 Prisoner 2 Prisoner 3 Prisoner 4 Prisoner 5 Prince (civil) Prince (Army) Prince (Partisan) Chancellor Adjutant (Uniform) Adjutant (Prisoner) Arms trader SLA President SLA President

Zivilist mit roter Mtze Zivilist mit Rockershirt Knig Kriegsberichterstatter Leibwchter Premierminister Reporterin Reporterin Reporterin Reporterin Zombie Zombie Zombie Zombie Gefangener 1 Gefangener 2 Gefangener 3 Gefangener 4 Gefangener 5 Prinz(Zivil) Prinz(Armee) Prinz(Partisane) Kanzler Adjutant(Uniform) Adjutant(Gefangener) Waenhndler SLA Prsident SLA Prsident

D2_RCM03_Civilian1 D2_RCM03_Civilian2 King FieldReporter Anchorman NorthPrimeMinister MarianQuandt MarianQuandt02 MarianQuandt03 MarianQuandt04 Civil_Undead_1 Civil_Undead_2 Civil_Undead_3 Civil_Undead_4 Prisoner01 Prisoner02 Prisoner03 Prisoner04 Prisoner05 Prince_civil Prince_army Prince_resistance Chancellor AdjutantUniform AdjutantPrisoner ArmsTrader civil_nprem2 civil_nprem2_NoGeom

Kapitel 3

INSEKTEN

Typ
N/A N/A N/A N/A N/A N/A

Beschreibung
Mwe Libelle Hausiege Honigbiene Mosquito Schmetterling

Klassenname
Seagull Dragony HouseFly Honeybee Mosquito Buttery

79

3.10 - Die Shellklassen


Hier eine Auswahl von Shellklassen. Shells sind die Geschosse der einzelnen Waen. Mit ihnen kann man die verschiedensten Dinge umsetzen. Zum Beispiel eine Explosion erzeugen oder anderen Beschuss simulieren. Diese knne ganz einfach, wie in Kapitel 5.45/5.46 erlutert mit dem CreateVehicle-Befehl erzeugt werden. Als Beispiel: Bombe="SH_125_HE" createVehicle [x,y,z] Bombe="SH_125_HE" createVehicle position Player
B_9x18_Ball B_9x18_SD B_9x19_Ball B_9x19_SD B_127x108_Ball B_127x99_Ball_noTracer B_545x39_Ball B_545x39_SD B_556x45_Ball B_556x45_SD B_762x51_Ball B_762x54_Ball R_Hydra_HE R_57mm_HE R_80mm_HE R_M136_AT R_PG7V_AT R_KSVK R_PG7VR_AT M_Javelin_AT M_Stinger_AA M_Strela_AA M_AT5_AT Klassenname FxExploGround1 FxExploGround2 FxExploArmor1 FxExploArmor2 FxExploArmor3 FxExploArmor4 FxCartridge Bomb LaserTargetW LaserTargetE LaserTargetC Geschosstypen B_762x54_noTracer B_77x56_Ball B_127x99_Ball B_127x107_Ball B_145x115_AP B_20mm_AP B_20mm_AA B_23mm_AA B_25mm_HE B_30mm_AP B_30mm_HE B_30mmA10_AP Raketen- und Granattypen M_Sidewinder_AA M_TOW_AT M_Hellre_AT M_Maverick_AT M_Vikhr_AT BO_GBU12_LGB SH_125_HE SH_120_HE SH_122_HE SH_105_HE G_40mm_HE_6G30 Sonstiges Bezeichnung Steinbrocken Steinbrocken Splitter Splitter Splitter Splitter Patronenhlse Sprengkopf (bentigt setDamage-Befehl) Laser Ziel West Laser Ziel Osten Laser Ziel Zivil

80

3.11 - Die Objekt- und Gebudeklassen


Hier eine Auistung verschiedener Objekte, welche man direkt oder auch nicht direkt im Editor setzen kann. Diese Objekte lassen sich nun ganz einfach per CreateVehicle-Befehl, wie in Kapitel 5.45 erlutert, an einer beliebigen Position auf der Karte erzeugen.
Typ
A Camp Bmp2 Wreck Barrels Barrel (red) Barrel (brown) Barrel (yellow) Barrel (green rosty) Barrel (green rosty) Barrel (white purple) Body Blackhawk Wreck Camera Camp Camp Empty Camp East Camp East C Computer Danger DangerWest DangerGUE DangerEAST Datsun Wreck 1 Datsun Wreck 2 Fence Fire FireLit FlagCarrierWest FlagCarrierNorth FlagCarrierSouth Fortress1 Fortress2 FenceWood FenceWoodPalet JeepWreck1 JeepWreck2 JeepWreck3 Grave GraveCross1 GraveCross2 Grave CrossHelmet Heli Heli-H Empty Heli-H Civil Heli-H Rescue Hilux Wreck Land_ladder Land Radar Obstacle Training Training 2 Training 3 Carousel

Beschreibung
Zelt (klein) Bmp2 Wrack Fsser Fass rot Fass brown Fass gelb Fass grn rostig Fass grn rostig Fass wei-lila Leiche Hubschrauber Wrack Kamera auf Dreibein Zelt (oen) Zelt (oen) Zelt Ost (oen) Zelt Ost (oen) Computer Warnschild Warnschild Westen Warnschild Unabhngig (RACS) Warnschild Ost (SLA) Jeepwrack (Zivil) Jeepwrack (Zivil) Ecksandsack Feuer Feuer (angezndet) Fahnenmast WEST Fahnenmast OST (SLA) Fahnenmast Unabhngig (RACS) Festung 1 (klein) Festung 2 (gro) Sandsackmauer Sandsackmauer mit Palette Jeep Wrack 1 Jeep Wrack 2 Jeep Wrack 3 Grabhgel Grab mit Kreuz Grab mit Kreuz Grab mit Kreuz u. Helm Heli-H Heli-H Unsichtbar Heli-HZivil Heli-H Rettung Jeep Wrack (Zivil) Leiter Radar Hindernis bung bung 2 bung 3 Karussell

Klassenname
ACamp Bmp2Wreck Barrels Barrel1 Barrel2 Barrel3 Barrel4 Barrel5 Barrel6 Body BlackhawkWreck Camera1 Camp CampEmpty CampEast CampEastC Computer Danger DangerWest DangerGUE DangerEAST Datsun01Wreck Datsun02Wreck Fence Fire FireLit FlagCarrierWest FlagCarrierNorth FlagCarrierSouth Fortress1 Fortress2 FenceWood FenceWoodPalet JeepWreck1 JeepWreck2 JeepWreck3 Grave GraveCross1 GraveCross2 GraveCrossHelmet Heli HeliHEmpty Heli_H_Civil Heli_H_rescue HiluxWreck Land_ladder Land_radar Land_obihacka Land_podlejzacka Land_prolejzacka Land_prebehlavka Land_kolotoc

Kapitel 3 81

Typ
Carousel small Swing Prolezacka SandPit Obstakle Fuel Tank Small Fuel Tank Big Fuel Tank Letter Land Water Tank Land Water Tank MASH M113 Wreck Paleta1 Paleta2 Radio Shed Shed Small Shed Big TargetE TargetEpopup Wood tank TV Studio TV Studio (Building) TV Radio Tower TV Radio Tower Gangway Ural Wreck Bale Of Straw Closet Vysilacka Wall Map RahmadiMap Sleeping Bag Wire Wire Fence Barrier AmmoBoxWest SpecialBoxWest WeaponBoxWest AmmoBoxEast SpecialBoxEast WeaponBoxEast AmmoBoxGuer SpecialBoxGuer WeaponBoxGuer Little Church Big Church Middle Church Mexican Church Church House House House House House House House House House House

Beschreibung
Kleines Karussell Swing Klettergerst Sandkasten 3-Bein Hindernis Kleiner Treibstotank Groer Treibstotank Groer Treibstotank mit Leiter Wassertank Wassertank Feldlazarett M113 Wrack Palette Paletten Radio Tarnnetz (klein) Tarnnetz (gro) Unterstand (gro) Zielscheibendummy Zielscheibendummy (Popup) Holzpanzer Fernsehstudio Fernsehstudio (Gebude) TV-Sendeturm TV-Sendeturmverbindung Ural Wrack Strohballen Dixiklo Funkgert Landkarte Landkarte Rahmadi Schlafsack Stacheldraht Drahtzaun Schranke Munitionskiste West Gemischte Kiste West Waenkiste West Munitionskiste Ost Gemischte Kiste Ost Waenkiste Ost Munitionskiste Racs Gemischte Kiste Racs Waenkiste Racs Kleine Kirche Groe Kirche Mittlere Kirche Kirche (mexikanisch) Kapelle Hafenhaus Hafenhaus Wohnhaus Wohnhaus Wohnhaus Wohnhaus Wohnhaus Wohnhaus Wohnhaus Wohnhaus (begehbar)

Klassenname
Land_maly_kolotoc Land_houpacka Land_kulata_prolezacka Land_Piskoviste Land_jezekbeton Land_fuel_tank_small Land_fuel_tank_big Land_fuel_tank_stairs Land_water_tank Land_water_tank2 MASH M113Wreck Paleta1 Paleta2 Radio Shed ShedSmall ShedBig TargetE TargetEpopup TargetGrenade TVStudio Land_Vysilac_budova Land_Vysilac_vez Land_Vysilac_chodba UralWreck Vec03 Land_Toilet Vysilacka WallMap RahmadiMap Land_SleepingBag Wire WireFence ZavoraAnim AmmoBoxWest SpecialBoxWest WeaponBoxWest AmmoBoxEast SpecialBoxEast WeaponBoxEast AmmoBoxGuer SpecialBoxGuer WeaponBoxGuer Land_kostel Land_kostel2 Land_kostel3 Land_kostel_mexico Land_kostelik Land_sara_domek01 Land_sara_domek02 Land_sara_domek05 Land_sara_zluty_statek_in Land_sara_Domek_sedy Land_dum_mesto2 Land_sara_domek_sedy_bez Land_sara_domek_rosa Land_sara_zluty_statek Land_sara_domek_zluty

82

Typ
House House Houseblock (small) Houseblock (middle) Houseblock (big) Hotel Hotelruin Holiday-In Holiday-In Holiday-In-Ruin Holiday-In-Ruin Weekend Flat House (Oriental) House (Oriental) House (Oriental) House (Oriental) House (Oriental/Open) House (Oriental/Open) House (Oriental) House (Oriental) House (Oriental) House (Oriental) House (Oriental) House (Oriental/Open) House (Oriental) House (Oriental) House (Oriental) House (Oriental) Tall House (Oriental) Tall House (Oriental) Tall House (Oriental) Tall House (Oriental) Tall House (Oriental) House House House House House House House House (Classic) Little House Old House Red House Red House Red House City House (yellow) House House House House House House House House House House Houseblock (small) Houseblock (middle)

Beschreibung
Wohnhaus Wohnhaus Wohnblock (klein) Wohnblock (mittel) Wohnblock (gro) Hotel Hotelruine Ferienanlage Ferienanlage Ferienanlagenschutthaufen Ferienanlagenschutthaufen Wochenendhaus Haus (orientalisch) Haus (orientalisch) Haus (orientalisch) Haus (orientalisch) Haus (orientalisch/begehbar) Haus (orientalisch /begehbar) Haus (orientalisch) Wohnanlage (orientalisch) Haus (orientalisch) Haus (orientalisch) Haus (orientalisch) Haus (orientalisch/begehbar) Haus (orientalisch) Haus (orientalisch) Haus (orientalisch) Haus (orientalisch) Hochhaus (orientalisch) Hochhaus (orientalisch) Hochhaus (orientalisch) Hochhaus (orientalisch) Hochhaus (orientalisch) Haus Haus Haus Haus Haus Haus Haus Haus (klassisch) Kleines Haus Altes Haus Backsteinhaus Backsteinhaus Backsteinhaus Stadthaus (gelb) Wohnhaus Wohnhaus Wohnhaus Wohnhaus Wohnhaus Wohnhaus Wohnhaus Wohnhaus (begehbar) Wohnhaus Wohnhaus Wohnblock (klein) Wohnblock (mittel)

Klassenname
Land_sara_domek_zluty_bez Land_OrlHot Land_Panelak Land_Panelak2 Land_Panelak3 Land_Hotel Land_Hotel_ruins Land_hotel_riviera1 Land_hotel_riviera2 Land_hotel_riviera1_ruins Land_hotel_riviera2_ruins Land_house_y Land_dum_olez_istan1 Land_dum_olez_istan2 Land_dum_olez_istan2_maly Land_dum_olez_istan2_maly2 Land_dum_istan2 Land_dum_istan2b Land_dum_istan2_01 Land_dum_istan2_02 Land_dum_istan2_03 Land_dum_istan2_03a Land_dum_istan2_04a Land_dum_istan3 Land_dum_istan3_hromada Land_dum_istan3_hromada2 Land_dum_istan3_pumpa Land_dum_mesto3_istan Land_dum_istan4 Land_dum_istan4_big Land_dum_istan4_big_inverse Land_dum_istan4_detaily1 Land_dum_istan4_inverse Land_dumruina Land_dumruina_mini Land_sara_domek_kovarna Land_dum_rasovna Land_Statek_kulna Land_stanice Land_ryb_domek Land_statek_hl_bud Land_bouda1 Land_sara_domek_ruina Land_cihlovej_dum Land_cihlovej_dum_in Land_cihlovej_dum_mini Land_kasarna_rohova Land_sara_domek05 Land_sara_zluty_statek_in Land_sara_Domek_sedy Land_dum_mesto2 Land_sara_domek_sedy_bez Land_sara_domek_rosa Land_sara_zluty_statek Land_sara_domek_zluty Land_sara_domek_zluty_bez Land_OrlHot Land_Panelak Land_Panelak2

Kapitel 3 83

Typ
Houseblock (big) Hotel Hotelruin Holiday-In Holiday-In Holiday-In-Ruin Holiday-In-Ruin Weekend Flat House (Oriental) House (Oriental) House (Oriental) House (Oriental) House (Oriental/Open) House (Oriental/Open) House (Oriental) House (Oriental) House (Oriental) House (Oriental) House (Oriental) House (Oriental/Open) House (Oriental) House (Oriental) House (Oriental) House (Oriental) Tall House (Oriental) Tall House (Oriental) Tall House (Oriental) Tall House (Oriental) Tall House (Oriental) House House House House House House House House (Classic) Little House Old House Red House Red House Red House City House (yellow) City House (yellow) City House (yellow) City House (yellow) Pub Building Landhouse Landhouse Landhouse Landhouse City House (Classic) City House (Classic) House with House House (long) House (at) Big House

Beschreibung
Wohnblock (gro) Hotel Hotelruine Ferienanlage Ferienanlage Ferienanlagenschutthaufen Ferienanlagenschutthaufen Wochenendhaus Haus (orientalisch) Haus (orientalisch) Haus (orientalisch) Haus (orientalisch) Haus (orientalisch/begehbar) Haus (orientalisch /begehbar) Haus (orientalisch) Wohnanlage (orientalisch) Haus (orientalisch) Haus (orientalisch) Haus (orientalisch) Haus (orientalisch/begehbar) Haus (orientalisch) Haus (orientalisch) Haus (orientalisch) Haus (orientalisch) Hochhaus (orientalisch) Hochhaus (orientalisch) Hochhaus (orientalisch) Hochhaus (orientalisch) Hochhaus (orientalisch) Haus Haus Haus Haus Haus Haus Haus Haus (klassisch) Kleines Haus Altes Haus Backsteinhaus Backsteinhaus Backsteinhaus Stadthaus (gelb) Stadthaus (gelb) Stadthaus (gelb) Stadthaus (gelb) Gaststtte Amtsgebude Landhaus Landhaus Landhaus Landhaus Stadthaus (klassisch) Stadthaus (klassisch) Eckhaus Haus mit Tor Haus (lang) Haus (ach) Groes Haus

Klassenname
Land_Panelak3 Land_Hotel Land_Hotel_ruins Land_hotel_riviera1 Land_hotel_riviera2 Land_hotel_riviera1_ruins Land_hotel_riviera2_ruins Land_house_y Land_dum_olez_istan1 Land_dum_olez_istan2 Land_dum_olez_istan2_maly Land_dum_olez_istan2_maly2 Land_dum_istan2 Land_dum_istan2b Land_dum_istan2_01 Land_dum_istan2_02 Land_dum_istan2_03 Land_dum_istan2_03a Land_dum_istan2_04a Land_dum_istan3 Land_dum_istan3_hromada Land_dum_istan3_hromada2 Land_dum_istan3_pumpa Land_dum_mesto3_istan Land_dum_istan4 Land_dum_istan4_big Land_dum_istan4_big_inverse Land_dum_istan4_detaily1 Land_dum_istan4_inverse Land_dumruina Land_dumruina_mini Land_sara_domek_kovarna Land_dum_rasovna Land_Statek_kulna Land_stanice Land_ryb_domek Land_statek_hl_bud Land_bouda1 Land_sara_domek_ruina Land_cihlovej_dum Land_cihlovej_dum_in Land_cihlovej_dum_mini Land_kasarna_rohova Land_kasarna_brana Land_kasarna Land_kasarna_prujezd Land_hospoda_mesto Land_skola Land_deutshe Land_deutshe_mini Land_domek_rosa Land_dum_m2 Land_dum_mesto Land_dum_mesto_in Land_dum_mesto2l Land_dum_mesto3 Land_dum_olezlina Land_dum01 Land_dum02

84

Typ
House with House with Villa Convent Building (Corner) Convent Building Garage Garage Garage Beach Hut Beach Hut Beach Hut (open) Beach Hut Beach Hut Holiday Hut Little Hut Little Shanty Shelter (little) Shanty Latrine Big Barn (closed) Big Barn (open) Barn Barn (open) Barn (Closed) Barn (open) Old Barn Building (burned) Houseruin (burned) Houseruin (burned) Houseruin (burned) Pubruin (burned) Houseruin Houseruin Houseruin Houseruin (open) Churchruin Bus Stop Bus Stop 2 Market Stall Market Stall 1 Market Stall 2 Military Shelter Military Building (open) Military Building (little) Military Building (open) Military Building (closed) Military Building (open) Bus Stop Ammunition Bunker Ammunition Bunker Ammunition Bunker Metal Tower Wood Tower Metal Tower Airport Tower Military Building Military Building Military Building Military Building

Beschreibung
Haus mit Vordach Haus mit Vordach Villa Klostergebude (Eckhaus) Klostergebude Garage ohne Tor Garage (lang) Garage (kurz) Strandhtte Strandhtte Strandhtte (oene Seiten) Strandhtte Strandhtte Ferienhtte Hundehtte Kleine Holzhtte Schuppen (mini) Holzschuppen Latrine Groe Scheune (geschlossen) Groe Scheune (begehbar) Scheune Holzscheune (begehbar) Holzscheune (oene Seiten) Holzscheune (geschlossen) Alte Scheune (begehbar) Wohnblock (abgebrannt) Hausruine (abgebrannt) Hausruine (abgebrannt) Hausruine (abgebrannt) Gaststtte (abgebrannt) Hausruine Hausruine Hausruine Hausruine (begehbar) Kirchenruine Bushaltestelle Bushaltestelle2 Marktstand Marktstand 1 Marktstand 3 Unterstand (Garagenart) Militrunterkunft (begehbar) Militrgebude (klein) Militrgebude (begehbar) Militrgebude (geschlossen) Militrgebude (begehbar) Bushaltestelle Munitionsbunker (oen) Munitionsbunker Munitionsbunker Metallwachturm (gro) Holzwachturm (gro/Dach) Wachturm (klein/Dach) Flugplatztower Kasernengebude Kasernengebude Kasernengebude Kasernengebude

Klassenname
Land_sara_domek_hospoda Land_sara_domek_podhradi_1 Land_sara_domek_vilka Land_sara_dum_podloubi03klaster Land_sara_dum_podloubi03rovny Land_sara_hasic_zbroj Land_garaz Land_garaz_mala Land_hut01 Land_hut02 Land_hut03 Land_hut04 Land_hut06 Land_ZalChata Land_psi_bouda Land_bouda2_vnitrek Land_kulna Land_bouda3 Land_KBud Land_stodola_old Land_stodola_old_open Land_strazni_vez Land_sara_stodola Land_sara_stodola2 Land_sara_stodola3 Land_hut_old02 Land_afbarabizna Land_afdum_mesto2 Land_afdum_mesto2L Land_afdum_mesto3 Land_afhospoda_mesto Land_dulni_bs Land_dum_zboreny Land_dum_zboreny_total Land_hruzdum Land_kostel_trosky Land_zastavka_jih Land_zastavka_sever Land_stanek_1 Land_stanek_1B Land_stanek_1C Land_army_hut_storrage Land_army_hut_int Land_army_hut2 Land_army_hut2_int Land_army_hut3_long Land_army_hut3_long_int Land_aut_zast Land_garaz_s_tankem Land_garaz_bez_tanku Land_ammostore2 Land_hlaska Land_posed Land_vez Land_letistni_hala Land_budova1 Land_budova2 Land_budova3 Land_budova4

Kapitel 3 85

Typ
Military Building Guardhouse Military Hospital Repair Center Hangar (green) Hangar (grey) Hangar Hangar ruin Fuelstop (small) Fuelstop (small) Fuelstop (big) Fuelstop (Military) Factory Factory Tall Tower Metall Hut Little Metal Hut Glass Tower Transformer Station Transformer Station Radiotower Radiotower Radiotower Water Tower Silo Lighthouse Lighthouse Lighthouse with podest Lighthousepodest Harbour piece Harbour piece Harbour piece Bridge with roof Bridge Bridge (end) Fence Fencegate Wall Stonegate Archway Archway Stonefence Woodfence Basefence (camo) Basefence (grey) Basefence (Desert) Stoplight Stoplight 2 Landeld light Landeld light Landeld light Landeld light Power supply line Electricity pylon Power supply line Power supply line Ladder (big) Scaold Scaold

Beschreibung
Kasernengebude Wachhuschen Kasernenhospital Werkstatt Hangar (grn) Hangar (grau) Lagerhalle (Hangar) Hangarschutthaufen Tankstelle (klein) Tankstelle (klein) Tankstelle (gro) Tankstelle (Militr) Fabrikgebude Fabrikgebude Hoher Schornstein Metallbude (Kontrollposten) Kleine Blechhtte Glas Aussichtsturm Trafostation Trafostation Sendeturm Sendeturm Sendeturm (gro) Wasserturm Hochsilo Leuchturm Leuchturm Leuchturm mit Podest Leuchturmpodest Hafenanlage Hafenanlage Hafenanlage Steg (berdacht) Steg Steg (Endstck) Zaun Zauntor (Stein) Mauer mit Loch Steintor Torbogen mit Tor Torbogen ohne Tor Steinzaun (kaputt) Holzzaun (kaputt) Kasernenzaun (tarn) Kasernenzaun (grau) Kasernenzaun (Wste) Ampel Ampel 2 Landebahnbeleuchtung Landebahnbeleuchtung Landebahnbeleuchtung Landebahnbeleuchtung Stromleitung (Trafostation) Strommast (gro) Stromleitung Stromleitung Leiter (gro) Gerst Gerst

Klassenname
Land_budova4_in Land_budova5 Land_hospital Land_repair_center Land_SS_hangar Land_SS_hangarD Land_hangar_2 Land_SS_hangar_ruins FuelStation Land_fuelstation Land_benzina_schnell Land_fuelstation_army Land_Tovarna1 Land_Tovarna2 Land_komin Land_Hlidac_budka Land_bouda_plech Land_strazni_vez Land_trafostanica_velka Land_trafostanica_mala Land_Vysilac_FM Land_vysilac_FM2 Land_telek1 Land_watertower1 Land_Nasypka Land_majak Land_majak2 Land_majak_v_celku Land_majak_podesta Land_molo_beton Land_molo_krychle Land_molo_krychle2 Land_molo_drevo Land_molo_drevo_bs Land_molo_drevo_end Land_pletivo_dira Land_plot_zed_drevo1_branka Land_plot_istan1b_hole Land_plot_istan1_rovny_gate Land_brana02 Land_brana02nodoor Land_plot_zboreny Land_Plot_Ohrada_Pruchozi Land_zed_dira Land_zed_dira_desert Land_zed_dira_civil Land_Stoplight01 Land_Stoplight02 Land_Runway_PAPI Land_Runway_PAPI_2 Land_Runway_PAPI_3 Land_Runway_PAPI_4 Land_trafostanica_velka_draty Land_sloup_vn Land_sloup_vn_dratZ Land_sloup_vn_drat Land_ladder Land_leseni2x Land_leseni4x

86

Typ
Castletower Castlewall Castlewall Castlewall Castlewall Wall with door Wall ruin Wall ruin Wall with gate (closed) Wall with gate (open) Fountain Oil pump Citywall Citywall Citywall Citywall Citywall Citywall Citywall Citywall Citywall Citywall Citywall Stoned area Stoned area Scrapheap Scrapheap Scrapheap Minaret Old Silo Bam - Sawmill Old Silo Bam - Sawmill Big Carport Big Carport with camo net Tower with searchlight Camouaged water tower Aircraft Factory Aircraft Factory (West) Aircraft Factory (SLA) Airport Barracks Barracks (West) Barracks (East) Camp Contruction Site (West) Contruction Site (West) Contruction Site (East) Contruction Site (East) Crate Depot Headquarters (West) Headquarters (East) HeavyFactory HeavyFactory (West) HeavyFactory (East) LightFactory LightFactory (West) LightFactory (East) Mobile HQ (West) M113 Mobile HQ (East) BMP2

Beschreibung
Burgturm Burgmauer Burgmauer Burgmauer Burgmauer Mauer mit Durchgang Mauerruine Mauerruine Mauer mit Tor (geschlossen) Mauer mit Tor (oen) Brunnen (Handpumpe) lpumpe Stadtmauer (Podest) Stadtmauer (Podest) Stadtmauer (Podest) Stadtmauer (Podest) Stadtmauer (Podest) Stadtmauer (Podest) Stadtmauer (Podest) Stadtmauer (Treppen) Stadtmauer (Treppen) Stadtmauer (Treppen) Stadtmauer (Treppen) Gepasterte Flche Gepasterte Flche Schutthaufen Schutthaufen Schutthaufen Minarett Alte Siloscheune - Sgewerk Alte Siloscheune - Sgewerk Groes Carport Groes Carport (Tarnnetz) Wachturm mit Scheinwerfern Getarnter Wasserturm Flugzeug Fabrik Flugzeug Fabrik (Westen) Flugzeug Fabrik (Osten) Hangar Zelt mit Sandscken Zelt mit Sandscken (Westen) Zelt mit Sandscken (Osten) Sandsackstellung Container (Westen) Container (Westen) Container (Osten) Container (Osten) Holzkiste Groer Sandsackbunker (2-Stock) Hauptquartier (Westen) Hauptquartier (Osten) Groe Fabrik Groe Fabrik (Westen) Groe Fabrik (Osten) Kleine Fabrik Kleine Fabrik (Westen) Kleine Fabrik (Osten) Mobiles Hauptquartier (Westen) Mobiles Hauptquartier (Osten)

Klassenname
Land_helfenburk Land_helfenburk_brana Land_helfenburk_budova2 Land_helfenburk_cimburi Land_helfenburk_zed Land_zidka_branka Wallend Land_zidka03 Land_statek_brana Land_statek_brana_open Land_pumpa Land_vez_ropa Land_podesta_1_cube Land_podesta_1_cube_long Land_podesta_1_cornl Land_podesta_1_cornp Land_podesta_1_mid_cornl Land_podesta_1_mid_cornp Land_podesta_1_mid Land_podesta_1_stairs Land_podesta_1_stairs2 Land_podesta_1_stairs3 Land_podesta_1_stairs4 Land_podesta_5 Land_podesta_10 Land_AFbarabizna_ruins Land_AFDum_mesto2_ruins Land_AFDum_mesto2L_ruins Land_R_Minaret Land_Kamenolom_budova Land_pila Land_pristresek Land_pristresek_camo Land_Vez_svetla Land_vodni_vez WarfareBAircraftFactory WarfareBWestAircraftFactory WarfareBEastAircraftFactory WarfareBAirport WarfareBBarracks WarfareBWestBarracks WarfareBEastBarracks WarfareBCamp WarfareBWestContructionSite WarfareBWestContructionSite1 WarfareBEastContructionSite WarfareBEastContructionSite1 WarfareBCrate WarfareBDepot WarfareBWestHeadquarters WarfareBEastHeadquarters WarfareBHeavyFactory WarfareBWestHeavyFactory WarfareBEastHeavyFactory WarfareBLightFactory WarfareBWestLightFactory WarfareBEastLightFactory M113_MHQ_unfolded BMP2_MHQ_unfolded

Kapitel 3 87

Typ
Hesco Site Hesco 5x Hesco 10x Hesco 10x Tall Sandbag Site Nest Low Nest MG Nest M240 (West) MG Nest PK (SLA) MG Nest_M240 (Resistance) MG Static M2 (Resistance)

Beschreibung
Sandsackmauer Kleine Sandsackmauer Groe Sandsackmauer Hohe Sandsackmauer Sandsackmauer Kleines Schtzennest (knien) Kleines Schtzennest (liegen) Schtzennest mit M240 (Westen) Schtzennest mit PK (Osten) Schtzennest mit M240 (Widerstand) Maschinengewehr M2 (Widerstand)

Klassenname
WarfareBHescoSite WarfareBHesco5x WarfareBHesco10x WarfareBHesco10xTall WarfareBSandbagSite WarfareBNest WarfareBLowNest WarfareBWestMGNest_M240 WarfareBEastMGNest_PK WarfareBResistanceMGNest_M240 WarfareBResistanceM2StaticMG

3.12 - Die Panzenklassen


Typ
Bare tree Banana tree Banana tree Banana tree Banana tree Thistles High grasses Cep Flowers Brake Desert grass Gras owers Grass Long grass White owers Grass Yellow owers Mushroom Fly agaric Fly agaric Mushroom Flowers Grass White owers Tall conifer Tall conifer Bush Bush Desert grass Mixed grass Tree Tree Leaves Small bush Middle bush small bush Mini bush Grass bush Double grass

Beschreibung
Baum (blattlos) Bananenbaum Bananenbaum Bananenbaum Bananenbaum Disteln Hohe Grser Steinpilz Blumen Farne Wstengras Grasblumen Gras Langes Gras Weie Blumen Gras Gelbe Blumen Pilz Fliegenpilz Fliegenpilz Pilz Blumen Gras Weie Grasblumen Hoher Nadelbaum Hoher Nadelbaum Busch Busch Wstengras Gemischtes Gras Laubbaum Laubbaum Laub (liegend) Busch (klein) Busch (mittel) Busch (klein) Busch (mini) Grasbusch Doppelgras

Klassenname
AAPL000 AAPL001 AAPL002 AAPL003 AAPL004 AAPL005 AAPL006 AAPL007 AAPL008 AAPL009 AAPL010 AAPL011 AAPL012 AAPL013 AAPL014 AAPL015 AAPL016 AAPL017 AAPL018 AAPL019 AAPL020 AAPL021 AAPL022 AAPL023 AAPL024 AAPL025 AAPL026 AAPL027 AAPL028 AAPL029 AAPL030 AAPL031 AAPL032 AAPL033 AAPL034 AAPL035 AAPL036 AAPL037 AAPL038

88

Typ
Stocks of a trees Stocks of a trees Stock of a tree Grass Middle bush Tall bush Long bush Small bush Long bush Big tree Big tree Big tree Middle tree Tall conifer Tall conifer Big leave grass Bush tree Middle palm tree Middle palm tree Middle palm tree Middle palm tree Double palm tree Palm bush Tall palm tree Middle palm tree Tree stump Tree stump Conifer bush Small conifer Broad conifer Tall conifer Birch tree Tree Tree Tree Small tree Middle decoration tree Small tree Small tree Tree Small tree Tree Small tree Small bush Willow Birch tree Birch tree Bush tree Tree Bush tree Small bush Tall decoration tree Avenue tree Avenue tree Branchwood Branchwood Branchwood Branchwood

Beschreibung
Holzstmme (liegend) Holzstmme (liegend) Holzstamm (liegend) Grserbschel Busch (mittel) Busch (hoch) Busch (lang) Busch (klein) Busch (lang) Laubbaum (gro) Laubbaum (gro) Laubbaum (gro) Laubbaum (mittel) Nadelbaum (hoch) Nadelbaum (hoch) Groblattgras Buschartiger Baum Palme (mittel) Palme (mittel) Palme (mittel) Palme (mittel) Doppelpalme Palmenbusch Palme (gro) Palme (mittel) Baumstumpf Baumstumpf Nadelbusch Nadelbaum (klein) Nadelbaum (breit) Nadelbaum (gro) Birke Laubbaum Laubbaum Laubbaum Laubbaum (schmal) Zierbaum (mittel) Laubbaum (klein) Laubbaum (schmal) Laubbaum Laubbaum (schmal) Laubbaum Laubbaum (klein) Busch (schmal) Weide Birke Birke Buschbaum Laubbaum Buschbaum Busch (schmal) Zierbaum (gro) Alleebaum Alleebaum Gest (liegend) Gest (liegend) Gest (liegend) Gest (liegend)

Klassenname
AAPL039 AAPL040 AAPL041 AAPL042 AAPL043 AAPL044 AAPL045 AAPL046 AAPL047 AAPL048 AAPL049 AAPL050 AAPL051 AAPL052 AAPL053 AAPL054 AAPL055 AAPL056 AAPL057 AAPL058 AAPL059 AAPL060 AAPL061 AAPL062 AAPL063 AAPL064 AAPL065 AAPL066 AAPL067 AAPL068 AAPL069 AAPL070 AAPL071 AAPL072 AAPL073 AAPL074 AAPL075 AAPL076 AAPL077 AAPL078 AAPL079 AAPL080 AAPL081 AAPL082 AAPL083 AAPL084 AAPL085 AAPL086 AAPL087 AAPL088 AAPL089 AAPL090 AAPL091 AAPL092 AAPL093 AAPL094 AAPL095 AAPL096

Kapitel 3 89

3.13 - Die Steinklassen


Typ
Clutter Stone Small Granite stone Sandstone (big) Sandstone (big) Limestone (big) Limestone (big) Sandstone (big) Limestone (middle) Limestone (middle) Sandstone (big) Limestone (middle) Limestone (middle) Sandstone (middle) Limestone (middle) Limestone (middle) Sandstone (middle) Limestone (middle) Limestone (middle) Sandstone (little) Granite stones Granite stones Limestone rock (little) Limestone rock (big) Limestone rock (big) Limestone rock (big) Limestone rock (big) Sandstone (little) Sandstone (little) Sandstone (little) Sandstone (little) Sandstone (little) Sandstone (little) Sandstone (middle) Sandstone (little) Sandstone (little) Sandstone (little) Sandstone (little) Sandstone (little) Sandstone (middle) Sandstone (middle) Sandstone (middle) Sandstone (middle) Sandstone (middle) Limestone rock (big) Limestone rock (big) Sandstone (little) Limestone (middle) Sandstone (little) Sandstone (little) Sandstone (little) Sandstone (little)

Beschreibung
Kieselsteine Granitstein Sandstein (gro) Sandstein (gro) Kalkstein (gro) Kalkstein (gro) Sandstein (mittel) Kalkstein (mittel) Kalkstein (mittel) Sandstein (mittel) Kalkstein (mittel) Kalkstein (mittel) Sandstein (mittel) Kalkstein (mittel) Kalkstein (mittel) Sandstein (mittel) Kalkstein (mittel) Kalkstein (mittel) Sandstein (klein) Granitsteine Granitsteine Kalkstein Felsen (klein) Kalkstein Felsen (gro) Kalkstein Felsen (gro) Kalkstein Felsen (gro) Kalkstein Felsen (gro) Sandstein (klein) Sandstein (klein) Sandstein (klein) Sandstein (klein) Sandstein (klein) Sandstein (klein) Sandstein (mittel) Sandstein (klein) Sandstein (klein) Sandstein (klein) Sandstein (klein) Sandstein (klein) Sandstein (mittel) Sandstein (mittel) Sandstein (mittel) Sandstein (mittel) Sandstein (mittel) Kalkstein Felsen (gro) Kalkstein Felsen (gro) Sandstein (klein) Kalkstein (klein) Sandsteine (klein) Sandstein (klein) Sandstein (klein) Sandstein (klein)

Klassenname
AARO000 AARO001 AARO002 AARO003 AARO004 AARO005 AARO006 AARO007 AARO008 AARO009 AARO010 AARO011 AARO012 AARO013 AARO014 AARO015 AARO016 AARO017 AARO018 AARO019 AARO020 AARO021 AARO022 AARO023 AARO024 AARO025 AARO026 AARO027 AARO028 AARO029 AARO030 AARO031 AARO032 AARO033 AARO034 AARO035 AARO036 AARO037 AARO038 AARO039 AARO040 AARO041 AARO042 AARO043 AARO044 AARO045 AARO046 AARO047 AARO048 AARO049 AARO050

90

3.14 - Die Schilderklassen


Typ
Cyclist ahead! Walkers ahead! Walkers ahead! (old) Double bend L ahead! (old) Double bend L ahead! Double bend R ahead! (old) Double bend R ahead! Right of Way (old) Right of Way End (old) Right of Way End Right of Way Military Sign (SLA/RACS) Military Sign (SLA) Military Sign (RACS) Picnic area Camping ground Not attached curb ahead! Rustle shoot ahead! (old) Rustle shoot ahead! Cross-way ahead! (old) Right of way ahead! (old) Right of way ahead! Cross-way ahead! Air trac ahead! (old) Air trac ahead! Ahead! First aid (old) First aid Gravel ahead! Roadway repair service (old) Roadway repair service Rockfall ahead (old) Rockfall ahead Parking place (old) Parking place Ahead! Direction panel L Direction panel R Road works ahead! Crosswalk ahead! Right of way ahead! (old) Right of way ahead! Gas station (old) Gas station Straightforward RoadCone RoadBarrierlong RampConcrete

Beschreibung
Achtung Fahrradfahrer! Achtung Fussgnger! Achtung Fussgnger! (alt) Achtung S-Kurve L! (alt) Achtung S-Kurve L! Achtung S-Kurve R! (alt) Achtung S-Kurve R! Vorfahrt (alt) Vorfahrt Ende (alt) Vorfahrt Ende Vorfahrt Militrschild (SLA/RACS) Militrschild (SLA) Militrschild (RACS) Rastplatz Campingplatz Achtung nicht befestigter Seitenstreifen! Achtung Viehaustrieb! (alt) Achtung Viehaustrieb! Achtung Kreuzung! (alt) Achtung Vorfahrts-Kreuzung! (alt) Achtung Vorfahrts-Kreuzung! Achtung Kreuzung! Achtung Flugverkehr! (alt) Achtung Flugverkehr! Achtung! Erste Hilfe (alt) Erste Hilfe Achtung Schotter! Pannenhilfe (alt) Pannenhilfe Achtung Steinschlag (alt) Achtung Steinschlag Parkplatz (alt) Parkplatz Gefahrenstelle! Richtungstafel L Richtungstafel R Achtung Baustelle! Achtung Fussgngerberweg! Vorfahrt achten! (alt) Vorfahrt achten! Tankstelle (alt) Tankstelle Geradeaus Straenhtchen Straensperre Rampe

Klassenname
AASI012 AASI015 AASI016 AASI019 AASI020 AASI021 AASI022 AASI025 AASI026 AASI027 AASI028 AASI169 AASI181 AASI186 AASI189 AASI190 AASI195 AASI196 AASI197 AASI198 AASI199 AASI200 AASI201 AASI204 AASI205 AASI259 AASI260 AASI261 AASI268 AASI273 AASI274 AASI275 AASI276 AASI277 AASI278 AASI283 AASI284 AASI285 AASI286 AASI287 AASI288 AASI289 AASI290 AASI291 AASI292 RoadCone RoadBarrier_long RampConcrete

Kapitel 3 91

3.15 - Waen- und Magazintypen ausgeben lassen


Mit folgend erluterter Syntax hat man die Mglichkeit sich die Waen- und Magazintypen einer Einheit in Form einer Texteinblendung ausgeben zu lassen. Dabei verwendet man fr das Ausgeben der Waentypen: hint format ["%1", weapons this]; hint format ["%1", weapons Name]; und fr das Ausgeben der Magazintypen: hint format ["%1", magazines this];

3.16 - Abgefeuerten Typ ausgeben lassen


Neben dem Ausgeben von Waen- und Magazintypen, hat man natrlich noch die Mglichkeit sich ausgeben zu lassen, welche Einheit gerade mit was geschossen hat. Dabei werden folgende Daten anhand einer Texteinblendung ausgegeben: Name der Einheit Der Waentyp Der Geschosstyp Die Schussart (Single/Burst) Nachdem die Einheit Name im Spiel die Wae abfeuert, blendet dieser Text ein:

Dazu macht man sich einen Eventhandler zu Nutze, mit welchem die Syntax in der Initzeile einer Einheit, wie im folgenden Beispiel, angelegt wird: this addEventHandler ["Fired", {hint format ["%1", _this]}] Das Ganze geht natrlich auch namenbezogen fr externe Aktionen: Name addEventHandler ["Fired", {hint format ["%1", _this]}]

3.17 - Hat Einheit Wae?


Manche Situationen erfordern das Prfen, ob eine bestimmte Einheit eine bestimmte Wae hat. Dies kann man dann unter anderem als Bedingung oder hnliches verwenden. Dazu wird folgende Syntax verwendet: Player hasWeapon "M4" 92 bzw. im Skript ? Player hasWeapon "M4"

Als kleines Beispiel nun nochmal zwei Beispiel Syntaxes: ?! (Player hasWeapon "M4") : hint "Der Spieler hat sein M4 verloren!" ? (Player hasWeapon "M4") : hint "Der Spieler hat sein M4 wieder!" Bei der ersten Syntax kommt nun eine Meldung, dass der Spieler sein M4 verloren hat und bei der zweiten eine Meldung, dass er sein M4 zurck hat.

3.18 - Primr- bzw. Sekundrwae einer Einheit


Auch die Primrwae einer Einheit lsst sich jederzeit Abfragen oder auch als Bedingung fr etwas verwenden. Von der Sache her, lassen sich nun die gleichen Dinge, wie auch schon mit dem hasWeapon-Befehl realisieren. Hierzu wieder mal ein paar Beispiele. Primr- oder Sekundrwae ausgeben lassen: hint format ["%1", primaryWeapon Player]; hint format ["%1", secondaryWeapon Player]; Primr- oder Sekundrwae als Bedingung: ? (primaryWeapon Player != "M4") : hint "Der Spieler hat kein M4!" ? (primaryWeapon Player == "M4") : hint "Der Spieler hat ein M4 !" ? (secondaryWeapon Player != "Stinger") : hint "Der Spieler hat keine Stinger!"

Kapitel 3

3.19 - Hat Einheit Munition?


Die folgende Syntax gibt wieder, ob der Spieler noch Munition hat. Hat er kein Magazin mehr, wird die Variable auf true gesetzt. Dies kann man nun unter anderem als Bedingung fr etwas verwenden. ?!(someAmmo Player) : hint "Der Spieler hat keine Munition mehr!" ?(someAmmo Player) : hint "Der Spieler hat noch Munition!" hint format ["%1", someAmmo Player]; Dieser Befehl verbietet einer Einheit das Nachladen der Wae, wenn das Magazin leer ist. Name enableReload false

3.20 - Mine erzeugen


Mit folgend aufgefhrter Syntaxform lassen sich Minen ganz einfach an einer jeweilig gewnschten Position erzeugen. Mine = createMine ["MineMine", position player, [], 0] 93

3.21 - Waen und Magazine erzeugen


Waen und Magazine lassen sich nicht so ohne Weiteres erzeugen. Dazu bentigt man den Weaponholder-Befehl. Ein Weaponholder ist vergleichbar mit einer Waenkiste, nur mit dem Unterschied, dass der Weaponholder unsichtbar ist. Diesen kann man nun mit dem gleichen Befehl, wie auch bei den Waenkisten, mit Waen und Magazinen versehen. Nach dem Erzeugen liegen die Waen dann frei auf dem Boden und knnen vom Spieler aufgenommen werden. An welcher Position diese Waen erzeugt werden soll, kann man nun frei entscheiden. Also beispielsweise an an der XYZ-Position oder auch an der Position eines Objectes. Folgend mal ein paar Beispiele: Wae1 = "WeaponHolder" createVehicle getpos Obj1 Wae1 = "WeaponHolder" createVehicle position Player Wae1 = "WeaponHolder" createVehicle [x,y,z] Nachdem man nun seinen Weaponholder erzeugt hat, weist man ihm die Waen und Magazine zu. Dies macht man ganz normal mit den AddCargo-Befehlen. Wae1 addMagazineCargo ["10Rnd_127x99_M107",2]; Wae1 addWeaponCargo ["M107",1]; Natrlich kann man seinen Weaponholder auch ausrichten oder in der Hhe versetzen. Zum Beispiel, wenn man die Wae auf einen Tisch oder hnliches legen mchte. Um die Wae auszurichten benutzt man die normale SetDir-Syntax: Wae1 setDir Wert Und wie erwartet, gilt fr die Hhe die altbekannte Syntax: Wae1 setPos [getPos Wae1 select 0,getPos Wae1 select 1,Wert]

Im Spiel sieht das dann spter etwa wie folgt aus:

94

3.22 - Waenblickrichtung ausgeben


Mit den folgend aufgefhrten Syntaxformen hat man die Mglichkeit, sich die Blickrichtung einer Wae ausgeben zu lassen oder diese spter als eine Bedingung fr etwas zu verwenden. Diese Mglichkeit wird oft in Verbindung mit Fahrzeugen, wie einem Panzer oder hnliches verwendet, um die Blickrichtung des Turmes zu ermitteln. Zunchst zwei Syntaxformen zum Ausgeben der XYZ-Werte: hint format ["Blickrichtung: %1", Name weaponDirection "M56"] hint format ["%1", Name weaponDirection primaryWeapon Name] In folgendem Beispiel wird nur die Hhe ausgegeben: hint format ["%1", Name weaponDirection "M56" select 2] hint format ["%1", Name weaponDirection primaryWeapon Name select 2] Dies erklrt sich wie folgt. X bentigt select 0, Y erfordert select 1 und Z dann select 2. Folgend auch nochmal zwei Beispielverwendungsarten in einem Script: _dir = _unit weaponDirection "Klassenname" select 0 ? _dir <= Wert : hint "Falsche Schussrichtung!" Aufsplitten der XYZ-Werte _Direction = Name weaponDirection primaryWeapon Name _xDir = _Direction select 0 _yDir = _Direction select 1 _zDir = _Direction select 2

Kapitel 3 95

Kapitel 4
- Die Mission Nachdem du in den ersten drei Kapiteln die Oberche, die Dateien und die Waen kennen gelernt hast, kommen wir nun zu den etwas spezielleren Bereichen des Missionsdesigns. Hier wirst du lernen, wie man eine Mission startet, die Ziele festlegt, die Erfllung angemessen bewertet und am Ende die Mission ordentlich beendet.

4.1 4.2 4.3 4.4 4.5 4.6 4.7

Der Missionsname Der Missionsstart Das Missionszubehr Die Missionswertung Die Missionsziele Mission beenden Mission speichern

97 97 98 99 99 101 103

96

4.1 - Der Missionsname


Wenn man eine neue Karte erstellt, gibt man unter Info zunchst den Namen der Mission an. Dies ist zwar nicht unbedingt erforderlich, aber wenn man dass nicht macht, wird die Mission spter im Einzelmissionsauswahlmen mit dem Inselnamen angezeigt. Das sieht dann etwa so aus:

Bei Beispielmission wurde bei Info unter Name auch der Text Beispielmission eingetragen. Bei Beispielmission2 war das nicht der Fall und deshalb steht dort Beispielmission2.Intro. Kapitel 4

4.2 - Der Missionsstart


Beim Intro- und Missionsstart hat man die Mglichkeit eine Texteinblendung und Uhrzeit in individueller Form anzuzeigen zu lassen. Der Text dafr ist variabel, sollte aber auch nicht zu lang sein. Zum Anzeigen dieses Textes und der Uhrzeit muss man die Description.ext bearbeiten und falls diese im eigenen Missionsordner noch nicht vorhanden ist, muss man eine erstellen. Nhere Informationen zum Thema Description.ext ndet man im Kapitel 2.3.

Zum Vordenieren des Textes und der Uhrzeit trgt man im Kopf der Description.ext etwa folgendes ein:

onLoadIntro = Mr-Murray proudly presents onLoadMission = Convoy Attack onLoadIntroTime = true bzw. false onLoadMissionTime = false
oder

bzw.

Mchte man keines von Beiden anzeigen lassen, setzt man den Wert dazu lediglich auf 0 oder schreibt stattdessen die Wortform false hinter das Gleichheitszeichen und schon werden der Text und die Uhrzeit nicht angezeigt. 97

Als Text kann man hier natrlich auch die Adresse zur Stringtable.csv denieren. Das sieht dann etwa so aus: onLoadIntro = $STR_Missionsstart Mehr Informationen zum Thema Stringtable.csv sind im Kapitel 2.4 zu nden.

4.3 - Das Missionszubehr


Der Missionsersteller hat die Mglichkeit zu bestimmen, ob man das jeweilige Missionszubehr in einer Mission zur Verfgung stehen soll oder eben nicht. Dazu mssen wieder diverse Zeilen in der Description.ext deniert werden, um die Zubehrteile anzeigen oder verbergen zu lassen. Zum Anzeigen wird wieder der Wert 1 oder true und zum Verbergen der Wert 0 oder false verwendet. Folgend die bersicht der dazu bentigen Befehle:

ShowGPS = 1; ShowCompass = 1; ShowRadio = 1; ShowMap = 1; ShowNotePad = 1; ShowWatch = 1;

- GPS - Kompass - Funkgert - Karte - Brieng - Uhr

ShowDebrieng = 1; - Abschlussbrieng

Seit Version 1.08 ist es nun auch mglich diese Komponenten ganz ohne Description.extEintrag whrend des Spielverlaufes ein- oder gar auszublenden, was in den ersten ArmAVersionen und frher in OFP nicht so ohne Weiteres mglich war. Dazu setzt man den Wert lediglich auf true oder false. ShowMap true 98

4.4 - Die Missionswertung


Wie in jedem Spiel kann der Spieler in jeder Mission Punkte erreichen. Diese mssen dazu vorher in der Description.ext deniert werden. Die Anzahl der zu erreichenden Punkte kann dabei frei bestimmt werden. In der Description.ext wird das wie folgt angegeben: minScore=200 avgScore=3000 maxScore=6000 - Die Mindestpunkte - Die Mittelpunkte - Die Hchstpunkte

Der Spieler bekommt bereits im Spiel automatisch fr jede gettete Einheit Punkte zugewiesen. Wenn man aber nun machen mchte, dass der Spieler fr das Erfllen eines gewissen Missionziels eine gewisse Wertung erhlt, macht man das mit folgender Syntax: Player addRating Wert Natrlich kann man dem Spieler auch Punkte abziehen. Dann, wenn zum Beispiel etwas zerstrt oder gettet wurde, was nicht htte passieren drfen. Dazu msste dann bei obiger Syntax ein Minuswert verwendet werden. Player addRating -Wert Mchte man eine Abfrage starten dass, wenn der Spieler eine gewisse Punktzahl erreicht hat, die Mission zum Beispiel beendet wird, erstellt man einen Auslser mit der Gre (Achse a/b) 0 und schreibt in die Bedingungszeile: Rating Player > Wert oder Rating Player >= Wert Bei Typ whlt man nun einfach Ende1 aus. Wenn der Spieler nun den Wert erreicht oder berschritten hat, wird die Mission beendet und das Brieng wird mit der jeweiligen Wertung angezeigt. Kapitel 4

4.5 - Die Missionsziele


Die Missionsziele sind wohl das wichtigste an einer Mission. Denn ohne Missionsziel gibt es ja bekanntlich auch keine Mission! Diese mssen natrlich wieder auf irgendeine Art vordeniert werden. Die Missionsziele werden, wie man im Kapitel 2.13 nachlesen kann, angelegt und eventuell auch in der Init.sqs, siehe Kapitel 2.5, vordeniert, wenn man diese zunchst verdecken mchte. Verdecken heit, dass der Spieler das verdeckte Ziel zuerst nicht im Brieng sehen kann. In der Mission mssen jetzt natrlich noch die jeweiligen Ziele deniert und konguriert werden.

99

Beispielmission Der Spieler sieht im Brieng den Auftrag Erobern Sie diese Ortschaft. Der zweite Auftrag Zerstren Sie den Munitionstruck wird zunchst durch den Eintrag in der Init.sqs verdeckt. Wenn der Ort von Feinden befreit wurde, soll das erste Ziel abgehakt und das zweite Ziel sichtbar gemacht werden. Dazu setzt man ber die Ortschaft einen Auslser mit der Beispielgre 300 (bei Achse a/b), whlt bei Aktivierung die Seite aus, die den Ort bewachen soll und whlt bei Art der Aktivierung Nicht vorhanden aus. Der Auslser wrde also ausgelst werden, wenn die jeweilig ausgewhlte Seite nicht mehr im Auslserbereich vorhanden ist. In der Aktivierungszeile gibt man nun die Befehle an, die ausgefhrt werden sollen, wenn der Auslserbereich von Feinden befreit wurde. Dazu gehrten Ziel 1 abhaken und Ziel 2 sichtbar machen. Als kleinen Infotext fgt man ggf. noch einen Hint hinzu. Das Ganze schaut dann so aus: "1" ObjStatus "Done"; "2" ObjStatus "Visible"; hint "Missionsplan aktualisiert" Auf der Karte setzt man ber der Ortschaft, wie in der folgenden Brieng.html schon deniert, einen Marker namens ZielX, welchen das Briengfadenkreuz ansteuert, wenn der Spieler im Brieng auf den Link diese Ortschaft klickt. Beispielabschnitt der dazugehrigen Brieng.html:
<p> <a name="OBJ_1"></a> Erobern Sie <a href="marker:ZielX">diese Ortschaft </a> </p> <hr> <p><a name="OBJ_2"></a> Zerstren Sie den Munitionstruck! </p> <hr>

Der dazugehrige Eintrag in der Init.sqs, der das zweite Missionsziel zunchst verdeckt, muss hierbei "2" ObjStatus "Hidden" lauten. Nun folgend die unterschiedlichen Befehle, die fr den jeweiligen Missionszielstatus gebraucht werden: Hidden Visible Active Done Failed 100 - Missionsziel wird verdeckt - Missionsziel wieder sichtbar - Missionsziel wird wieder aktiviert - Missionsziel wird abgehakt - Missionsziel fehlgeschlagen

4.6 - Mission beenden


Nach dem Erfllen der Missionsziele sollte eine Mission normalerweise beendet werden. Natrlich gibt es da viele Mglichkeiten diese zu beenden. Diese hngen aber einzig und allein von der Story, den Missionszielen oder dem Verlauf der Mission ab. Hier mal ein paar mgliche Beispiele fr die Beendigung einer Mission. Einheitsbezogen aus lokaler Sicht Auf dem rechten Bild sind mehrere Einheiten zu sehen. Ziel soll es sein den Schtzenpanzer zu beseitigen. Dieser wurde mit der Taste 2 mit dem Auslser verbunden und der Auslser wie folgt deniert: Achse a/b: Typ: Aktivierung: 50 Ende #1 Nicht vorhanden Kapitel 4

Wird der Panzer nun zerstrt oder verlsst er den Auslserbereich, wird die Mission beendet. Da der Panzer aber auf jeden Fall zerstrt werden soll und die Mission nicht beendet werden soll, wenn dieser den Bereich verlsst kommen wir zur globalen Sichtweise.

Einheitsbezogen aus globaler Sicht Dazu setzt man ebenfalls einen Auslser, aber legt keinen Auslserbereich fest, und stellt diesen wie folgt ein: Achse a/b: Typ: Bedingung:

! (alive Panzer1)

0 Ende #1

Der Panzer wurde nun Panzer1 benannt und der Auslserwirkungsbereich mit dem Wert 0 auf globales Prfen geschaltet. Man kann den Auslser nun frei auf der Map platzieren, da er global prft, ob Panzer1 noch lebt. Als Bedingung der Auslsung wurde ja bei Bedingung die Syntax ! (alive Panzer1) angegeben. 101

Der Panzer kann sich nun frei auf der Karte bewegen und die Mission wird erst beendet, wenn dieser zerstrt ist. Natrlich knnte man bei der lokalen Sichtweise die Prfweite auf 5000 oder so stellen , dann wrde der Panzer den Bereich auch nicht verlassen knnen, aber der bersicht halber ist die globale Sichtweise zu bevorzugen. Je weniger Auslserkreise auf einer Karte, desto besser die bersicht beim Editieren. Einheitsbezogen aus globaler Sicht mit mehreren Einheiten Hierzu gelten die gleichen Vorgaben wie bei Einheitsbezogen aus globaler Sicht, nur werden in der Bedingungszeile, noch weitere Bedingungen angegeben. ! (alive Panzer1) AND ! (alive MG1) AND ! (alive Soldat1) Das AND steht fr UND und verbindet somit diese Bedingungen zu einer. Die Mission wird nun erst beendet, wenn die Objekte namens Panzer1, MG1 und Soldat1 tot sind.

Mission wird beendet, wenn der Auslserbereich feindleer ist Auf dem unteren Bild sind mehrere Einheiten zu sehen. Ziel soll es sein die Ortschaft (Auslserbereich) vom Feind zu befreien. Dabei ist es egal, ob diese eliminiert oder aus dem Auslserbereich vertrieben werden. Der Auslser wird hierbei wie folgt deniert:

Achse a/b: Typ: Aktivierung:

50 Ende #1 OSTEN Nicht vorhanden

Ab der Version 1.05 gibt es auch die Mglichkeit einen Auslser so zu kongurieren, dass der Auslser erst auslst, wenn alle Feindeinheiten eliminiert bzw. nicht prsent sind und mindestens eine befreundete Einheit im Auslserbereich ist. Dazu deniert man beim Auslser unter Aktivierung einfach, von welcher Seite (Erobert durch...) dieser Bereich erobert werden soll. Die verfeindete Gegenseite ist dabei egal.

102

Variablenbezogene Beendung der Mission Die variablenbezogene Auslsung einer Mission ist nicht unbedingt schwerer, aber je nach Ausma ein klein wenig aufwendiger. Als Beispiel knnte nun folgendes dienen. Drei unterschiedliche Auslserbereiche sollen vom Feind befreit werden. Erst wenn diese 3 Bereiche, als Beispiel 3 Ortschaften, befreit sind, soll die Mission beendet werden. Das Ganze kann man nun wie folgt lsen: Auslser 1 (Bereich 1): Achse a/b: 100 Aktivierung: OSTEN (nicht vorhanden) bei Aktivierung: Ziel1=true Auslser 2 (Bereich 2): Achse a/b: 150 Aktivierung: OSTEN (nicht vorhanden) bei Aktivierung: Ziel2=true Auslser 3 (Bereich 3): Achse a/b: 100 Aktivierung: OSTEN (nicht vorhanden) bei Aktivierung: Ziel3=true Auslser 4 (Prfer): Achse a/b: Typ: Bedingung: 0 Ende #1 Ziel1 AND Ziel2 AND Ziel3

Kapitel 4

Wie man nun oben sehen kann, wird bei jedem der drei Auslser bei der Auslsung eine Variable (Ziel1, Ziel2, Ziel3) auf true geschaltet. Beim Auslser 4 wurden diese 3 Variablen als Bedingung angegeben, um diesen auszulsen. Sind diese nun erfllt, wird die Mission beendet. Es bietet sich an bei Timeout noch ein paar Werte anzugeben, um die Beendungszeit etwas exibel zu gestalten.

4.7 - Mission speichern


Dieser Befehl ermglicht das Speichern whrend des Spielens. Der Missionsersteller kann so auf der Karte also Speicherpunkte setzen. Zum Beispiel, wenn der Spieler einen bestimmten Punkt auf der Karte erreicht oder ein Missionsziel erfllt hat, wird das Spiel so automatisch gespeichert. Die Syntax hierfr lautet lediglich:

Savegame

Whlt man spter im Men Neuer Versuch, beginnt der Spieler wieder an der Stelle, an welcher das Spiel gespeichert wurde. Mchte man Speichern komplett verbieten, schreibt man in die Description.ext lediglich: saving = 0; 103

Kapitel 5
- Missionszubehr In diesem Kapitel ist alles erlutert, was in einer Mission zu gebrauchen ist. Hier solltest du Antworten auf deine oenen Fragen und zudem noch eine Menge Anregungen fr deine Mission bekommen. 5.1 5.2 5.3 5.4 5.5 5.6 5.7 5.8 5.9 5.10 5.11 5.12 5.13 5.14 5.15 5.16 5.17 5.18 5.19 5.20 5.21 5.22 5.23 5.24 5.25 5.26 5.27 5.28 5.29 5.30 5.31 5.32 5.33 5.34 5.35 5.36 5.37 5.38 5.39 104 Leeres oder verschlossenes Fahrzeug Fahrer/Beifahrer eines Fahrzeugs Einheit hat Fahrzeugverbot Einheit in Fahrzeug? Fahrzeug fhrt erst, wenn Einheit eingestiegen ist Gruppe zu Missionsbeginn im Fahrzeug Ein- und Aussteigen lassen Geschwindigkeit einer Einheit Geschwindigkeit ausgeben lassen Einheit bleibt stehen Einheiten starten bzw. stoppen Einheit bewegt sich zum Bestimmungsort Streife laufen, fahren oder iegen Fluchtverhalten einer Einheit oder Gruppe Einheiten, Objekte, Auslser u. Marker versetzen Objekte versenken oder hher setzen Flughhe einer Einheit Punktgenaue Helikopterlandung Einheit begibt sich in ein Gebude Einheit verlsst eine Gruppe oder tritt anderer bei Einheit ein Ziel zuweisen Einheit wendet sich anderer zu Einheit whlt Wae Einer Einheit Schaden zufgen bzw. heilen Einrichten einer Todeszone Das Prfen eines Bereiches Einheiten in einem Bereich ansprechen Einheitsstatus speichern oder laden Bekanntheitsgrad einer Einheit Freundlicher Feind Befreundete Parteien Der Alarm Tod als Bedingung Distanz zweier Einheiten oder Objekte Einem Fahnenmast eine Fahne zuweisen Brennende Feuerstelle Spielbare Einheit hinzufgen oder entfernen Spielerseite, -namen, -typ auslesen bzw. ausgeben Spielereingabe unterdrcken 106 106 106 107 107 108 108 108 108 109 109 110 110 110 111 111 112 112 112 113 113 114 114 114 115 115 115 116 117 117 118 119 120 120 120 121 121 121 121

5.40 5.41 5.42 5.43 5.44 5.45 5.46 5.47 5.48 5.49 5.50 5.51 5.52 5.53 5.54 5.55 5.56 5.57 5.58 5.59 5.60 5.61 5.62 5.63 5.64 5.65 5.66 5.67 5.68 5.69 5.70 5.71 5.72 5.73 5.74 5.75 5.76 5.77 5.78 5.79 5.80 5.81 5.82 5.83 5.84 5.85 5.86

Karte auf den Monitor erzwingen Sichtweite ndern Wetter einstellen Datum und Uhrzeit einstellen Zeitlupe oder Zeitsprint Einheiten und Objekte erzeugen Flares, Rauch und Explosionen erzeugen Einheiten und Objekte lschen Funkmen verndern Einer Gruppe ein Rufzeichen zuweisen Funkspruch abgeben Sound erstellen Eigenen Sound einbinden Identitt festlegen Mimiken Der Actionbefehl Der Animationsbefehl KI abschalten SetVelocity Der Informationstext Einheit bleibt liegen, kniet oder steht IDs verwenden Einheiten in Gebuden platzieren Einheit begibt sich zu Gebudeposition Position auslesen Der Eventhandler Texteinblendarten Stringtable Grundwerte Wegpunkte erzeugen Auslser erzeugen Marker erzeugen Rund ums Vehikel Lichtquellen erzeugen Staub erzeugen Rauch erzeugen Feuer erzeugen Dienstgrad vergeben Einheit benutzt Fernglas Einheit einen Fahrzeugplatz zuweisen Einheit ein Team zuweisen Einheit gibt Befehle Hat Einheit Schaden erhalten? Der Flugverkehr Grasdetails heruntersetzen Objekte schrg platzieren Mission verschlsseln bzw. freischalten Leerer Scheinwerfer mit Licht

121 122 122 123 123 124 126 127 127 128 129 129 130 134 135 136 139 144 144 144 144 145 148 153 153 155 157 158 159 160 162 165 167 167 168 169 171 172 172 173 174 174 175 176 176 177 177 105

Kapitel 5

5.1 - Leeres oder verschlossenes Fahrzeug


Zum Erstellen eines leeren Fahrzeuges whlt man zunchst die Taste 1 und klickt doppelt auf die Karte. Nach dem nen des Mens schaltet man bei Auswahl der Seite auf Leer, whlt bei Klasse und Einheit den Vehikeltyp aus und klickt dann auf OK. Wenn das Fahrzeug verschlossen bzw. nicht nutzbar sein soll, whlt man bei Fahrzeugstatus einfach Abgeschlossen fr verschlossen aus. Mchte man das Fahrzeug spter nutzbar machen geht das wie folgt: Fahrzeugname lock true Fahrzeugname lock false - Verschliet das Fahrzeug - net das Fahrzeug

5.2 - Fahrer/Beifahrer eines Fahrzeugs


Mit den folgenden Befehlen lassen sich Einheiten an beliebige Positionen eines Fahrzeuges beamen. Dies lsst sich unter anderem in der Initzeile der jeweiligen Einheit oder auch in einem Skript etc. denieren. Gibt man das in der Initzeile der jeweiligen Einheit an, kann fr Name auch this stehen! Name moveInDriver Fhz1 Name moveInCargo Fhz1 Name moveInCommander Fhz1 Name moveInGunner Fhz1 Name moveInTurret Fhz1 Name moveInTurret [Fhz1,1]; Name moveInCargo [Fhz1,3] - Fahrer des Fahrzeugs - Beifahrer des Fahrzeugs - Kommandant des Fahrzeugs - Schtze des Fahrzeugs - Schtze des Fahrzeugs (i.d.R. MG) - Schtze Nr. 2 des Fahrzeugs (i.d.R. MG 2) - Mitfahrer auf beliebiger Cargoposition

5.3 - Einheit hat Fahrzeugverbot


Diesen Befehl verwendet man, wenn man mchte, dass eine bestimmte Einheit ein Fahrzeug nicht nutzen kann oder soll. Dazu trgt man in der Initzeile des Fahrzeugs folgende Syntax ein. In dieses Fahrzeug drfen Name1, Name2, Name3 nun nicht einsteigen. Mchte man das Fahrzeug spter wieder fr diese Einheiten nutzbar machen, schaltet man wieder auf true.

[Name1, Name2, Name3] allowGetIn false [Name1, Name2, Name3] allowGetIn true

106

5.4 - Einheit in Fahrzeug?


Manche Ablufe erfordern das Prfen, ob sich eine Einheit noch in einem Fahrzeug bendet oder auch nicht. Dieses kann man z.B. als Bedingung nehmen, um damit einen Auslser oder ein Skript zu starten. Um zu prfen, ob Name in dem Fahrzeug sitzt, nutzt man diese Syntax: Name in Fahrzeugname Player in (crew Fahrzeugname) und gibt sie in die Bedingungszeile eines prfenden Auslsers ein. Steigt die Einheit nun in das denierte Fahrzeug, wird der Auslser aktiviert. In einem Skript muss das Ganze so aussehen: ? Name in Fahrzeugname Um zu prfen ob eine Einheit nicht mehr in einem Fahrzeug sitzt, bentigt man folgende Syntax: NOT (Name in Fahrzeugname) Fr das NOT kann auch ein ! verwendet werden. Gleiche Eigenschaft!

Kapitel 5

5.5 - Fahrzeug fhrt erst, wenn Einheit eingestiegen ist


Angenommen man hat ein Fahrzeug auf der Karte, welches auch schon mit Wegpunkten versehen ist, welches erst losfahren soll, wenn eine bestimmte Einheit, als Beispiel der Spieler, eingestiegen ist. Dies kann ein normales Auto, Boot oder auch ein Helikopter sein. Dazu gibt man in der Bedingungszeile als Bedingung folgende Syntax an:

Name in Fahrzeugname

oder

Vehicle Name == Fahrzeugname

Gruppenbezogen Natrlich geht das Ganze auch gruppenbezogen. Das Fahrzeug soll warten, bis die Gruppe eingestiegen ist. Dazu wird bei der folgenden Syntax auch der Fahrer mitgezhlt, der schon im Truck sitzt. Man muss also die Gre der Gruppe plus den Fahrer rechnen. Dazu gibt man in der Bedingungszeile folgendes an:

count crew Truck1 >= 10

oder

count crew Truck1 == 10


107

5.6 - Gruppe zu Missionsbeginn in Fahrzeug


Wenn eine Gruppe gleich zu Missionsbeginn in einem Fahrzeug, als Beispiel einem Helikopter sitzen soll, muss in der Initialisierungszeile des Leaders der Gruppe folgende Syntax angegeben werden:

oder

{_x moveInCargo Heli1} forEach units group this {_x moveInCargo Heli1} forEach units Group1

5.7 - Ein- und aussteigen lassen


Dafr setzt man zunchst ein leeres Fahrzeug und einen Soldat auf die Karte. Dann weist man dem Soldaten einen Wegpunkt zu, welchen man genau auf das Fahrzeug setzt und whlt bei Typ Einsteigen aus. Dann setzt man den nchsten Wegpunkt an der Zielposition und whlt dort Aussteigen aus. Mchte man Einheiten per Syntax aussteigen lassen, geht das wie folgt: unassignVehicle Fahrzeug1 {unassignVehicle _x} forEach units Grp1 Leader befehlen dabei ihren Einheiten auszusteigen - Einheit verlsst Fahrzeug - Einheiten verlassen Fahrzeug

5.8 - Geschwindigkeit einer Einheit


Die Geschwindigkeit einer Einheit kann bei einem Wegpunkt unter Geschwindigkeit oder auch per Syntax bestimmt werden. Diese lauten wie folgt: Name setSpeedMode "Full" Name forceSpeed 120 Name limitSpeed 60 Name1 setSpeed getSpeed Name2 - Verfgbar in Auto,Limited,Normal,Full - Wert in km/h - Wert in km/h - Name1 bekommt Speed v. Name2

5.9 - Geschwindigkeit ausgeben lassen


Die Geschwindigkeit einer Einheit oder eines Fahrzeugs lsst sich jederzeit abfragen oder sogar als Bedingung fr etwas verwenden. Dazu gelten unter anderem folgend aufgefhrte Syntaxbeispiele. hint format ["Geschwindigkeit: %1" , speed Name] ? speed Name > 30 : hint " Du fhrst zu schnell!" 108

5.10 - Einheit bleibt stehen


Der Befehl dostop this in der Init-Zeile einer Einheit bewirkt, dass diese an ihrer gesetzten Position stehen bleibt. Dies ermglicht eine Gruppe auf die Karte zu setzen und die Mitglieder frei zu verteilen, ohne dass diese wieder zu ihrem Leader zurcklaufen und sich somit wieder in Formation begeben. Teambezogen Sehr ntzlich, wenn man Anfhrer einer Gruppe ist und nicht mchte, dass seine Untergebenen bei Missionsbeginn gleich hinter einem her laufen und sie selbst in Stellungen unterbringen mchte. Sie bleiben somit an der zuvor im Editor gesetzten Stelle stehen, wenn man bei der jeweiligen Einheit dostop this in die Initialisierungszeile eintrgt. Zustzlich ist es wichtig bei der jeweiligen Einheit unter Speziell den Wert Keine zu denieren! Feindbezogen Auch hier ist dieser Befehl sehr ntzlich, denn nun kann man ein feindliches Team sehr gut in der Landschaft verteilen. Hierbei ist es ebenfalls wichtig bei der Einheit bei Speziell Keine auszuwhlen. Wird der Feind nun angegrien, werden die Einheiten auf ihrer festgelegten Position in Stellung gehen.

Kapitel 5

5.11 - Einheiten starten bzw. stoppen


Als Beispiel dient hier eine Gruppe, die ihre zugewiesenen Wegpunkte anlaufen soll, wenn der Spieler einen Wegpunkt oder einen Auslser ausgelst hat. Dem Leader dieser Gruppe schreibt man dabei this stop true in die Initzeile, whrend man bei dem Wegpunkt des Spielers oder dem Auslser, den der Spieler auslsen soll, folgendes angibt: Name stop false Die Gruppe wird dann ihre Wegpunkte anlaufen. Oben wurde der Wert this verwendet, weil die Syntax in der Initzeile des Leaders der Gruppe angegeben wurde, whrend beim zweiten Befehl der Name des Leaders bentigt wird, weil der Befehl von dem Wegpunkt bzw. Auslser kommt. Der Leader muss also auch mit einem Namen versehen werden.

109

5.12 - Einheit bewegt sich zu Bestimmungsort


Man kann Einheiten auch ohne Wegpunkte zu bestimmten Punkten auf der Karte schicken, ohne sie zuvor mit Wegpunkten versehen zu haben. Hierbei gibt es verschiedene Mglichkeiten. Objektbezogen: ID-bezogen: Koordinatenbezogen: Markerbezogen: Name doMove getPos Name Name doMove getPos (position Name nearestObject ID) Name doMove [X,Y,Z] Name doMove getMarkerPos "Markername"

Mchte man eine Gruppe zu einer dort oben aufgefhrten Position schicken, lsst man das do von doMove weg, da sich sonst zunchst nur der Leader zu der angegebenen Position bewegen wird und die Gruppe erst folgt, wenn er sein Ziel erreicht hat. Hier ein Syntaxbeispiel fr Objektbezogen: Name move getPos Name oder Leader Name move getPos Name Sehr interessante Beispiele ndet man im Kapitel 6.6 unter -Der Mapclick- und Kapitel 6.2 -Das GPS-System-.

5.13 - Streife laufen, fahren oder iegen


Eine Streife soll stndig um ein Lager Streife laufen bzw. fahren. Dazu weist man der Streife die Wegpunkte zu und schliet den Kreis, indem man den letzten Wegpunkt in den Bereich des ersten setzt und im Wegpunktmen bei Typ den Befehl Wiederholen auswhlt.

5.14 - Fluchtverhalten einer Einheit oder Gruppe


Hiermit legt man das Fluchtverhalten von Einheiten fest. Diese werden, wenn die Situation aussichtslos erscheint, je nach Einstellung frher oder spter die Flucht ergreifen und irgendwo in den Weiten Sahranis untertauchen. Doch Achtung: Manchmal kommen sie auch zurck und greifen nochmal an. Hierbei gelten alle Werte zwischen 0 und 1, also auch die Dezimalwerte, wobei die 0 fr kein und 1 fr maximales Fluchtverhalten steht. Schreibt man in die Initzeile eines Gruppenfhrers diese Syntax: this allowFleeing 0.8 bezieht sich der Befehl auf die ganze Gruppe, welche je nach Einstellung die Flucht ergreifen wird. Viel abwechslungsreicher ist die Verwendung eines Zufallwertes: this allowFleeing (random 0.8) 110

5.15 - Einheiten, Objekte, Auslser u. Marker versetzen


Einheiten, Objekte und Auslser lassen sich auch whrend des Spielverlaufs beliebig versetzen oder besser ausgedrckt, an eine beliebige Positionen beamen. Dazu muss man das jeweilige zum Versetzen bestimmte Objekt zunchst mit einem Namen versehen. Danach lsst sich ein Objekt wie folgt versetzen: Objektbezogen: Vor, hinter, neben Objekt: ID-bezogen: Koordinatenbezogen: Markerbezogen: Marker zu Marker: Marker zu Objekt: Vehikelbezogen: Vehikelbezogen II: Name1 setpos getPos Name2 Name2 setpos Name1 modelToWorld [0,3,0] Name setPos getPos (position Name nearestObject ID) Name setPos [X,Y,Z] Name setPos getMarkerPos "Marker1" "M1" setMarkerPos getMarkerPos "M2" "Marker1" setMarkerPos getPos Name Name setPos getPos vehicle Player "Marker1" setMarkerPos getPos vehicle Player Kapitel 5

Ein weiterer Befehl mit Hhenangabe, hier mit dem Wert 10 deniert, wre: Name1 setPos [(getPos Name2 select 0),(getPos Name2 select 1),10] Name1 wrde nun an die Position von Name2 in 10 Meter Hhe versetzt werden. Eine Gruppe versetzt man hierbei mit dem jeweiligen Befehl von oben zum Ziel: {_x setpos getPos Name} foreach units Group1 Folgende Syntax ermglicht es, eine Einheit oder ein Objekt an eine Zufallsposition zu versetzen. Dabei setzt sich die Syntax aus XYZ-Koordinaten und Markern zusammen, woraus die Engine dann automatisch eine der Zufallspositionen auswhlt. Name setVehiclePosition [[1000,2000], ["Marker1", "Marker2", "Marker3"], 0]

5.16 - Objekte versetzen oder hher setzen


Smtliche in irgendeiner Form setzbaren Objekte lassen sich versenken bzw. hher setzen. Eine Ausnahme sind Fahrzeuge und Einheiten, welche sich nicht im Boden versenken, aber dennoch hher setzen lassen. Hiermit ist es beispielweise mglich, Soldaten in Husern oder auf Dchern hhengenau zu platzieren. Setzt man einen Soldaten oder ein Fahrzeug in eine Hhe X, wird dieser schwerkraftbedingt wieder zu Boden fallen. Statische Objekte, wie beispielsweise ein Sandsack, wrden aber trotz allem in der Luft schweben. Hierbei gibt es verschiedene Varianten. Die in der Initzeile eines Objektes eingetragene Syntax: this setPos [(getPos this select 0),(getPos this select 1),10]; lsst das Objekt an der im Editor gesetzten Position in einer Hhe von 10 Metern schweben. Im Multiplayer funktioniert dieser Befehl seit ArmA erst ab Version 1.08! 111

Der Inhalt des Arrays [ ] wird wie folgt deniert. Die erste ( ) stellt den Erhalt der XPosition, die zweite ( ) den Erhalt des Y-Position und die Zahl nach den Klammern die Z-Position des Objektes dar. Ersetzt man die beiden this, also das this vor der Klammer, welches fr das Objekt welches zu this, also dem this in der [] versetzt werden soll, durch einen Namen, wird es auch dieser Satz verstndlicher. Name1 soll zu Name2 versetzt werden: Name1 setPos [(getPos Name2 select 0),(getPos Name2 select 1),10]; bersetzt heit das: Name1 setze zu erhaltener X-Position und zu erhaltener Y-Position von Name2 auf Hhe 10 Meter. Neben dem setPos- und getPos-Befehlen gibt es noch setPosASL und getPosASL Befehle, welche die Hhe des Objektes ber dem Meeresspiegel wiedergeben.

5.17 - Flughhe einer Einheit


Die Flughhe einer Einheit lsst sich unterschiedlich bestimmen. Dies kann man an dem jeweiligen Wegpunkt der Einheit oder auch per Auslser oder Skript bestimmen. Hierzu gilt folgende Syntax: Name yInHeight 120

5.18 - Punktgenaue Helikopterlandung


Setzt man fr einen Helikopter einen Wegpunkt an der Position an der er landen soll, weicht die KI oftmals weit vom Landepunkt ab und landet, wo es ihr gerade mglich ist. Dies kann man umgehen, wenn man zunchst ein Heli-H setzt. Hierbei ist es vollkommen egal, ob es ein sichtbares oder unsichtbares Heli-H ist. Danach erst setzt man den Landewegpunkt direkt auf das Heli-H und whlt im Wegpunktmen bei Typ Transport Entladen oder Aussteigen aus. Der Helikopter wird nun an der festgelegten Position landen. Eine weitere Mglichkeit bietet diese Syntaxform: Heli1 land "Positionsname"

5.19 - Einheit begibt sich in ein Gebude


Dazu weist man der Einheit einen Wegpunkt zu, wobei man direkt auf das begehbare Gebude, bei dem die Bezeichnung am Fadenkreuz erscheint, wenn man mit der Maus ber das Gebude fhrt, klickt und im Wegpunktmen bei Position im Haus die jeweilige Position auswhlt. Die Einheit wird sich dann sofort zu der jeweiligen Position im Haus begeben. 112

5.20 - Einheit verlsst Gruppe oder tritt anderer bei


Dies lsst sich zum Einen mit Wegpunkten, wie im Kapitel 1.5 Wegpunkte einfgen im Unterbereich Anschlieen und fhren (Join and Lead) erklrt, oder zum Anderen mit einer Syntax realisieren. Mit folgender Syntax wrde Name1 eine Gruppe verlassen: [ Name1] join grpNull und mit dieser einer anderen Gruppe beitreten: [Name1] join Name2 Name1 wurde also zunchst einer Nullgruppe, die nicht existent ist, und danach der Gruppe Name2 unterstellt. Fr mehrere Einheiten sieht das Ganze so aus: [ Name1, Name2, Name3] join grpNull und danach: [ Name1, Name2, Name3] join Name4 Hiermit ist es sogar mglich seiner Gruppe einen Feindsoldaten zu unterstellen, der dann auf der eigenen Seite kmpft, nur eben wie ein Feindsoldat gekleidet ist. Kapitel 5

5.21 - Einheit ein Ziel zuweisen


Auch hier gibt es verschiedene Denitionsmglichkeiten, wobei die Einheiten keinen Unterschied zwischen Freund oder Feind machen. Die Syntaxes hierfr lauten wie folgt: Name1 Name1

doTarget Name2 commandTarget Name2 doFire Name2 doFire ObjNull fire "Waffentyp commandFire Name2

Name1 wendet sich Name2 zu Name1 beehlt einer Einheit auf Name2 zu zielen

Feuern Name1 Name1 Name1 Name1

Name1 schiet auf Name2 Name1 schiet auf nichts mehr Name1 feuert die Wae blind ab Name1 beehlt einer Einheit auf Name2 zu schieen

113

5.22 - Einheit wendet sich anderer zu


Um eine Einheit dazu zu bringen auf ein Objekt/Einheit zu schauen, bentigt man folgende Syntaxes. Unterschied: Bei der einen Befehlsform dreht sich die Einheit mit eigener Bewegung und bei der anderen Befehlsform wird sie in Blickrichtung gebeamt. Name1 setDir 160 - Name wird in Richtung 160 gedreht Name1 setFormDir 160 - Name dreht sich in Richtung 160 Name1 setDir getDir Name2 - Name bekommt Azimut von Name2 Name1 doWatch Name2 - Schaut zu Name2 (dreht sich bei Bedarf um) Name1 lookAt Name2 - Schaut zu Name2 (dreht sich bei Bedarf um) Name1 glaceAt Name2 - Schaut kurz zu Name2 (nur Kopfbewegung) _Pos=Name modelToWorld [0,0,0] - _Pos erhlt Koordinaten u. Versatz [x,z,y] von Name Name2 setPos _Pos Name2 wird mit Versatz [x,z,y] zu Name versetzt Textausgabe: hint format ["Blickrichtung: %1", getDir Name1]

5.23 - Einheit whlt Wae


Mit folgender Syntax bringt man eine Einheit dazu die Zweitwae zu whlen. Natrlich muss hierbei die Bezeichnung der Waenklasse stimmen und die Einheit die entsprechende Wae auch im Inventar haben. Name selectWeapon "Stinger"

5.24 - Einer Einheit Schaden zufgen bzw. heilen


Man kann Einheiten/Objekten per Syntax einen direkten Schadenswert zuweisen. Hierbei steht die 0 fr keinen Schaden und die 1 fr maximalen Schaden. Die Dezimalwerte zwischen 0 und 1 stellen die Zwischenwerte dar. Setdamage gibt es mit einem oder auch zwei m, wobei es getDammage nur mit doppelten m gibt! Name wird ein Schadenswert zugewiesen: Name1 setDamage 1 oder Name1 setDammage 1 Name1 setVehicleArmor 0.5 Name1 wird der Schadenswert von Name2 zugewiesen: Name1 setDamage getDammage Name2 Mchte man den Schadenswert als Bedingung verwenden, sieht das Ganze so aus: ? damage Name1 >= 0.5 oder ? getDammage Name1 >= 0.5 Um smtliche Objekte rund um ein Objekt zu zerstren hinterlegt man diese zunchst in einer Variable (Bereich1). Danach zerstrt man Diese durch Aufruf der zweiten Syntax. Bereich1 = nearestObjects [Objekt1,[],300] - Objekte um Objekt1 listen {_x setDamage 1} foreach Bereich1 - Zerstren (z.B. Radio Alpha) 114

5.25 - Einrichten einer Todeszone


Das Einrichten einer Todeszone kann verschiedene Grnde haben. Wenn man zum Beispiel auf die Schnelle ein Schlachtfeld mit vielen Gefallenen erstellen mchte oder wenn man einen Bereich absperren mchte den eine oder alle Seiten nicht betreten drfen. Dazu schreibt man in die Initzeile eines Auslsers, bei dem zuvor die gewnschte Gre eingestellt wurde, folgendes: {_x setDamage 1} foreach thisList Bei Art der Auslsung muss man nun nur noch die Seite denieren, durch die der Auslser ausgelst werden soll. Wenn der Auslser mehrfach auslsen soll, muss man ihn natrlich noch auf mehrfach stellen.

5.26 - Das Prfen eines Bereiches


Mit diesem Befehl kann man sich die Einheiten eines Auslserbereiches anzeigen lassen. Je nach Auslsereinstellung ist es mglich sich nur die jeweilige Seite oder alle Einheiten dieses Bereiches anzeigen zu lassen. Dazu verwendet man zwei Auslser, welche wie folgt deniert werden. Bei dem prfenden Auslser setzt man zunchst die Achse a/b auf die Gre des Bereiches, der geprft werden soll. Bei Art der Auslsung wird die jeweilige Seite, die gelistet werden soll, ausgewhlt und bei Name der Name Area1 eingegeben. Den Funkauslser deniert man bei Achse a/b mit 0, stellt ihn auf mehrfach und gibt in die Aktivierungszeile folgendes ein: hint format ["%1",list Area1] oder hint format ["%1", WEST countSide Area1] Wenn man nun den Funk benutzt, werden die Einheiten aus dem Bereich Area1 angezeigt. Nun hat man auch die Mglichkeit Bereiche zu addieren. Erstellt man nun noch einen zweiten Bereich namens Area2, kann man diese beiden Bereiche addieren und den Wert zum Beispiel als Bedingung fr etwas verwenden. hint format ["%1", (WEST countSide list Area1)+(WEST countside list Area2)]

Kapitel 5

5.27 - Einheiten in einem Bereich ansprechen


Mit der folgenden Befehlsform lassen sich Einheiten eines festgelegten Bereiches ansprechen. Dabei kann man dies wieder, wie im Kapitel 5.26 schon erlutert, seitenbezogen oder komplettbezogen denieren. Hierzu muss wieder ein Bereich mit Namen festgelegt werden und die folgende Syntax irgendwo in einem Wegpunkt, Skript oder wie in Kapitel 5.26 einem anderen Auslser angegeben werden. {_x setBehaviour "Stealth"} forEach list Bereich1 Alle Einheiten dieses Bereiches wrden nun in Deckung gehen. Statt dem Befehl setBehaviour "Stealth" kann man natrlich auch einen anderen Befehl verwenden. 115

5.28 - Einheitsstatus speichern oder laden


Dieser Befehl lsst sich hervorragend in Kampagnen verwenden, bei denen der Spieler oder auch die anderen Einheiten bei Beginn der Folgemission den Endstatus von der vorhergehenden Mission haben sollen. Mchte man diesen Befehl in seiner Kampagne nutzen, sollte man darauf achten, dass die Einheit, von der der Status gespeichert wird, auch noch am Leben ist. Zumindest dann, wenn dieser Status spter auf den Spieler bertragen werden soll. Mit Savestatus kann man, wie das Wort schon sagt, den Status einer Einheit speichern. Dies geht allerdings nur in Verbindung mit einer Kampagne , da der Wert direkt in der Objects.sav der Kampagne gespeichert wird. Im Single- sowie Multiplayerbereich ist dieser Befehl von daher nicht funktionsfhig. Savestatus Status1 ist eine Variable, die daher auch anders heien kann. Mit der folgenden Syntax wird nun der Status von Name1 unter der Variable Status1 gespeichert. xy=Name1 saveStatus "Status1" Dieser Speicherwert beinhaltet nun einige Informationen dieser Einheit. Hierzu gehren unter anderem: - die Identitt - der Gesundheitsstatus - der Waenstatus - der Munitionsstatus Wenn man jetzt einem anderen Soldaten genau diesen gespeicherten Status zuweisen will, macht man dies wie nun folgend erklrt. Loadstatus xy=Name2 loadStatus "Status1" Der Einheit mit Name2 wird dann der gespeicherte Status1 von Name1 zugewiesen. Das heit, dass Name2 genauso wie Name1 aussieht, genau die gleiche Wae trgt, den gleichen Munitionsstatus und den gleichen Gesundheitsstatus hat. Name2 ist dann also ein Klon von Name1. DeleteStatus Natrlich lsst sich jeder Satus auch lschen. Dies erfolgt mit: deleteStatus "Status1"

116

5.29 - Bekanntheitsgrad einer Einheit


Diese Syntax lsst sich fr viele ntzliche Bereiche verwenden. Zum Beispiel kann man so einer Einheit die Information ber eine andere Einheit geben oder den Bekanntheitsgrad auch als Bedingung fr eine dann auszufhrende Aktion verwenden. Hierbei gelten wieder alle Werte zwischen 0 und 4. 0 Name1 hat keine Kenntnisse von Name2 2 Name1 hat geringe Kenntnisse von Name2 3 Name1 hat ausreichend Kenntnisse von Name2 4 Name1 hat volle Kenntnisse ber Name2 Mchte man eine Einheit ber eine andere in Kenntnis setzen, weist man ihr einen den Kenntniswert wie folgt zu: Name1 reveal Name2 Name1 hat nun Kenntnis von Name2. Mchte man den Kenntniswert als Bedingung fr die Auslsung eines Auslsers verwenden, schreibt man in die Bedingungszeile folgendes: Name1 knowsAbout Name2 > 1 Wenn Name1 nun mehr als 1 von Name2 wei, wird der Auslser ausgelst und damit die Aktionen die darin deniert wurden durchgefhrt. Die Kenntnis wird im Laufe der Zeit weniger und landet irgendwann wieder beim Wert 0. Demnach lsst sich die obige Syntax auch andersrum, also mit kleiner als, verwenden. Name1 knowsAbout Name2 < 0.8 Dies ist ganz ntzlich, wenn die Einheit immer in der Nhe der anderen bleiben soll. Ist sie das nicht oder wird sie gettet, sinkt ja der Wert irgendwann unter, wie oben deniert, 0.8 und der Auslser wird ausgelst. Natrlich lsst sich dieser Wert auch wieder als Text ausgeben. Die Syntax lautet hierbei: hint format ["Bekannheitsgrad: %1", Name1 knowsAbout Player]

Kapitel 5

5.30 - Freundlicher Feind


Beendet man die folgend aufgefhrte Syntax fr eine Einheit an, so wird sie nicht mehr vom Feind beschossen und auch auf andere Weise ignoriert werden. Hiermit kann man zum Beispiel eine feindliche Einheit als Gefangenen denieren, die ja andernfalls sofort erschossen werden wrde. Das Ganze macht man dann mit: this setCaptive true oder Name setCaptive true Zurcksetzen kann man das dann wieder, indem man true wieder auf false setzt. 117

5.31 - Befreundete Parteien


Die feindlichen Seiten in Armed Assault lassen sich frei bestimmen. Hierbei ist es nun mglich West und Ost auf einer Seite gegen den Rest kmpfen zu lassen oder die Zivilisten als bse zu denieren. Man hat dabei einen so groen Spielraum, dass man dies sogar wieder mit einem Wahrscheinlichkeitswert(Random) belegen kann. Somit wei man nie genau, wie der Feind am nchsten Tag so drauf ist. Hierbei sind folgende Seiten frei gegeneinander denierbar: West - East - Guerrila - Civilian - Enemy - Logic Es kann auch festgelegt werden, dass die eine Seite friedlich zur anderen ist, aber nicht umgekehrt. Das heit, dass die eine Seite sofort das Feuer ernet, aber die andere Seite schiet nicht zurck. Statt Guer kann brigens auch Resistance verwendet werden. Der SetFriend-Wert bewegt sich auch hierbei wieder zwischen 0 und 1, wobei alle Werte ber 0.6 fr befreundet, und alle unter 0.6 fr feindlich stehen. Folgend mal ein paar Syntaxbeispiele: WEST setFriend [EAST,1] Jetzt wre West freundlich zu Ost, aber nicht umgekehrt, dazu braucht man eine zweite Syntax dieser Form. WEST setFriend [EAST,0.7]; EAST setFriend [WEST,0.7] Nun sind beide Seiten freundlich zueinander, was sich ja im Missionsverlauf dank dieser Syntax noch ndern kann oder auch nicht. Setzt man den Wert wieder runter, verfeinden sich beide Parteien wieder. WEST setFriend [EAST,0]; EAST setFriend [WEST,0] Zufallsbezogen Natrlich ist auch hier wieder alles per Zufall mglich, was eben dieses Spiel ausmacht. Man kann alles auch so denieren, dass man beim Missionstart gar nicht wei, ob sein gegenber Freund oder Feind ist. Dazu verwendet man dann diese Syntaxform: GUER setFriend [EAST,(Random 0.9)] Hier wurde nun Random mit eingetragen, welcher einen Zufallswert fr 0.9 ermittelt. Dieser kann dann mit 0.9 (freundlich), aber genauso gut mit 0.3 (feindlich) ausgegeben werden. Deathmatchbezogen Dies ist im Kapitel 7.6 ausfhrlich erlutert. Kurz, man kann eine Seite auch mit sich selbst verfeinden. EAST setFriend [EAST,0]

118

5.32 - Der Alarm


Mit den in Kapitel 5.27 erluterten Syntaxes lassen sich nun einige verschiedene Alarmformen realisieren. Natrlich liegt es am Ende immer an der Mission, wann ein Alarm ausgelst werden soll. Hier mal ein paar Beispiele. Beispiel 1 Alarmierung bei Entdeckung in einem Auslserbereich Hierzu setzt man einen Auslser mit folgenden Einstellungen auf die Karte: Aktivierung BLUFOR Von Osten entdeckt Eekte Alarm Wird in diesem Auslserbereich nun eine westliche Einheit von stlichen Einheiten entdeckt, wird der Auslser aktiviert und der Alarm ausgelst. Beispiel 2 Einheitsbezogene Alarmierung Hierbei soll nur Alarm ausgelst werden, wenn eine bestimmte Einheit entdeckt wird. Aktivierung Den Auslser mit der Einheit oder dem Spieler verbinden Von Osten entdeckt Eekte Alarm Beispiel 3 Alarm, wenn Einheit oder Objekt nicht mehr present (tot) ist Aktivierung Den Auslser mit der Einheit oder dem Objekt verbinden Nicht vorhanden Eekte Alarm Beispiel 4 Alarm, wenn die Gruppe namens Grp1 kleiner als Wert ist Aktivierung Keine Achse a/b 0 Bedingung Count Units Grp1 < Wert Eekte Alarm Beispiel 5 Alarm, wenn eine Einheit schiet Bei dieser Variante bekommen alle Einheiten aus dem Bereich einen Eventhandler zugewiesen. Schiet nun eine Einheit, wird der Alarm ausgelst und das Skript gestartet. Aktivierung Jeder Achse a/b 500/500 Aktivierung {_x addEventhandler ["Fired",{_this exec "Alarm.sqs"}]} foreach thisList Eekte Alarm Zustze Bei allen Alarmvarianten kann man zustzlich diverse Aktionen ber die Aktivierungszeile starten lassen. Zum Beispiel, dass alle Einheiten des Alarmbereiches namens Bereich1 ber die Einheit, hier der Spieler(Player), informiert werden. {_x reveal Player} forEach list Bereich1 119

Kapitel 5

5.33 - Tod als Bedingung


Um zu prfen ob eine Einheit noch am Leben ist, bentigt man einen Auslser mit den folgenden aufgefhrten Einstellungen. Natrlich gibt es auch hier wieder verschiedene Varianten. Hier mal eine sehr oft verwendete Methode. Aktivierung Achse a/b Bedingung Keine 0 ! (alive Name) oder not alive Name

Der Auslser prft nun durch Achse 0/0 global, ob Name noch lebt und lst bei Tod die bei Aktivierung oder Eekte gesetzten Aktionen aus.

5.34 - Distanz zweier Einheiten oder Objekte


Manche Situationen machen es notwendig, dass man die Distanz zweier Einheiten oder Objekte als eine Bedingung fr die Auslsung eines Auslsers oder hnliches bentigt wird. Die Syntaxes hierfr sehen unter anderem wie folgt aus: Player distance Jeep1<= 50 oder Player distance Jeep1 == 50 Lokaler Variable Wert zuweisen: _distance = Player distance Jeep1 Textausgabe: titleText [format["%1 Meter", Player distance Jeep1], "plain down"]

5.35 - Einem Fahnenmast eine Flagge zuweisen


Alle Fahnenmasten lassen sich individuell mit Fahnen bestcken. Das geht auch, wenn sie bereits eine Fahne haben, wie es ja in ArmA der Fall ist. Dazu packt man die jeweilige Fahne in den Missionsordner und gibt in der Initzeile der Fahne einfach den Namen der Datei mit der Dateierweiterung an. this setFlagTexture "Name.paa" Mglich sind die Dateiformate PAC, PAA und JPG in der Gre 512 x 256 Pixel. Spielintern sind folgende Flaggen mit dieser Syntax und diesem Pfand setzbar: this setFlagTexture "\ca\misc\data\usa_vlajka.paa"
USA usa_vlajka_co.paa Sowjetunion rus_vlajka_co.pac Racs jih_vlajka.paa

Russland rus_vlajka_co.paa

SLA sever_vlajka.paa

120

5.36 - Brennende Feuerstelle


Mchte man ein Feuer erst zu einem spteren Zeitpunkt anznden oder erlschen, gibt man dem Feuer zunchst einen Namen und nutzt folgende Syntax: this inFlame true bzw. Name inFlame false

5.37 - Spielbare Einheit hinzufgen oder entfernen


Mit den folgenden Befehlen ist es mglich dem Spieler whrend einer Mission switchbare Einheiten zuzuweisen oder auch zu entfernen. addSwitchableUnit Name - Einheit wird spielbar removeSwitchableUnit Name - Einheit wird unspielbar Mchte man als Spieler zu einer anderen Einheit wechseln, oder eine Einheit zum Leader machen, nutzt man folgende Syntaxes: selectPlayer Name oder group Name selectLeader Name Der einfache Befehl Teamswitch ruft das Teamswitchmen auf.

5.38 - Spielerseite , -namen, -typ auslesen bzw. ausgeben


Die Seite eines Spielers im Mehspielerbereich lsst sich wie folgt auslesen: ? side Player == West ? name Player = = "Mr-Murray" Textausgabe: titleText [format["%1 -Soldat", side Player],"plain down"] titleText [format["Hey %1", name Player],"plain down"] titleText [format["Typ: %1", typeOf Player],"plain down"]

Kapitel 5

5.39 - Spielereingabe unterdrcken


Fr einige Dinge, wie zum Beispiel Sequenzen, ist es manchmal von Vorteil die Spielereingabe zu unterdrcken. Zum Aktivieren setzt man disableUserInput auf true und zum Deaktivieren wieder aus false. disableUserInput true

5.40 - Karte auf den Monitor erzwingen


Das Erzwingen der Karte auf den Monitor ist ganz gut fr Sequenzen oder hnliches zu gebrauchen. Hier hat man dann die Mglichkeit die verschiedensten Dinge zu simulieren. Zum Beispiel Truppenbewegungen und vieles mehr. forceMap true Jetzt hat man u.a. die Mglichkeit Marker auf der Karte wandern zu lassen, um den Spieler in eine Situation einzuweisen. Dabei bietet es sich an die Spielereingabe zu unterdrcken. 121

5.41 - Sichtweite ndern


Fr manche Bereiche oder Aktionen bietet es sich an die Sichtweite zu erhhen oder herabzusetzen. Zum Beispiel bei einer Zwischensequenz, auf einem Berg, wo eine gute Aussicht dargestellt werden soll. So knnte man fr diese kurze Szene die Sichtweite kurzzeitig erhhen und spter wieder herabsetzen um Performance einzusparen. Als Sichtweite kann hierbei zwischen 500 bis 10.000 gewhlt werden. setViewDistance 500

5.42 - Wetter einstellen


Das Wetter wird ja zunchst ganz normal im Editor deniert. Mchte man es aber im Missionsverlauf oder einer Sequenz ndern bentigt man folgend aufgefhrte Syntax mit Werten zwischen 0 und 1. Je nach Mission bietet es sich immer an ein Zufallwetter zu bestimmen. Dies verbunden mit Zufallszeit und Zufallsnebel bringt gleich ein wenig mehr Abwechslung in die Mission. 120 setOvercast 0.8 Der erste Wert stellt die Zeit in Sekunden dar, in der das Wetter umschwenken soll. Der zweite Wert steht fr die Wetterart. Ist dieser 0, scheint die Sonne und der Himmel ist Wolkenleer. Mit jedem Dezimalwert, der nun dazu kommt, tauchen mehr Wolken am Himmel auf. Bei einem Wert von 0.5 ist der Himmel komplett bewlkt und bei einem Wert von 1 ist mit starken Gewittern zu rechnen. Zufallswetter: Dieses lsst sich mit einer Zufallssyntax bestimmen, welche den Wetterwert per Zufall bestimmt und festlegt. Lsst man diese Syntax gleich zu Missionsbeginn starten, ist bei jedem Missionsstart mit einem anderen Wetter zu rechnen. 0 setOvercast (random 0.8) Regen: Der Regen lsst sich auch unabhngig von SetOvercast einstellen. 0 setRain 0.8 10 setRain (random 0.8) Nebel: Die Nebelwerte werden nach gleichem Verfahren wie beim Wetter oder Regen bestimmt. Jedoch lautet die Syntax hierfr: 10 setFog 0.6 60 setFog (random 0.8) 122

5.43 - Datum und Uhrzeit einstellen


Auch dies ist whrend eines Missions- oder Kampagnenverlaufs mglich und kann dabei entweder mit einem festen Wert oder einer Zufallszeit bestimmt werden. Jahr, Datum, Uhrzeit: Mit folgend aufgefhrter Syntax bestimmt man gleich das Jahr, den Tag, die Stunde und die Minute auf einmal. Das Ganze deniert man dabei wie folgt: setDate [2006, 11, 30, 9, 0] Hier wurde jetzt der 30.11.2006 mit der Uhrzeit 09:00 bestimmt. Natrlich lassen sich hier auch wieder einige Werte per Zufall generieren. Hier mit Uhrzeitbeispiel: setDate [2006, 11, 30, (ceil random 8), (random 60)] Uhrzeit: Die Uhrzeit kann man mit dieser Syntax auch einzeln bestimmen. skipTime 1 skipTime 1 - Stellt die Zeit um 1 Stunde vor - Stellt die Zeit um 1 Stunde zurck

Kapitel 5

5.44 - Zeitlupe oder Zeitsprint


Mit der nun folgenden Syntax ist es mglich das Spiel zu verlangsamen, also in Zeitlupe zu versetzen oder aber auch zu beschleunigen. Gerade bei Zwischensequenzen kann man hiermit geniale Zeitlupenszenen gestalten. Des Weiteren ist es aber auch mglich einen Bullet Mode, wie in Kapitel 6.10 erlutert, in die Mission einzubauen, was zwar nicht sonderlich realistisch ist, aber dennoch als Feature verwendet werden kann. Zeitlupe: Alle Werte unter 1 stehen hierbei fr Zeitlupe, wobei gerade die Dezimalwerte den Eekt ausmachen. Je kleiner der Wert, desto langsamer der Ablauf. setAccTime 1 setAccTime 0.0500 - Normale Zeit - Zeitlupe

Zeitsprint: So, wie man die Zeit verlangsamen kann, kann man sie auch beschleunigen, wofr es aber eigentlich im Missionsbereich selbst keine richtige Verwendung geben sollte. Hierbei gelten alle Werte zwischen 1 und 8, welche der KI und dem Spieler schnelle Fe verleihen. 123

5.45 - Einheiten und Objekte erzeugen


Es ist whrend eines Missionsablaufs mglich Einheiten, ganze Gruppen oder auch Objekte frei auf der Karte zu erzeugen und auch wieder zu lschen. Damit kann man eine Menge Performance einsparen und die Einheiten erst erzeugen, wenn sie bentigt werden. Dabei gibt es verschiedene Varianten. Hier ein paar Beispiele. Objektbezogen: In folgendem Beispiel wird ein Geschtz mit Typ D30 an Position XYZ erzeugt: Ari1="D30" createVehicle [x,y,z] Mit dem setDir-Befehl richtet man dieses dann zustzlich aus. Ari1 setDir 190 Es kommt vor, dass ein Vehikel nach dem Erzeugen nicht nutzbar ist. Dafr gibt man dann zustzlich beim Erstellen den folgenden Befehl mit an: Ari1 lock false Somit ist es nun auf jeden Fall nutzbar. Mchte man ein Objekt direkt an der Position eines anderen Objektes oder eines Markers erzeugen, dann sieht das so aus: Bombe="SH_120_HE" createVehicle position Player Bombe="SH_120_HE" createVehicle getMarkerPos "Marker1" Folgend wird eine Bombe ber der Einheit S1 in der Hhe von 50 Metern erzeugt. Bombe=SH_120_HE createVehicle [(getpos S1 select 0),(getpos S1 select 1),50] Einheitsbezogen: Zum Erzeugen einer Einheit wird die Zeile schon etwas lnger. Hier wird ein Westsniper namens Name1 auf der Position seines Leaders namens S1, der vorher schon auf der Karte sein muss, erstellt. Der Leader knnte dabei auch eine Logik sein. Der nun erzeugte Soldat hat einen Skillwert von 0.4 und ist vom Dienstgrad her Corporal. "SoldierESniper" createUnit [position player, S1, "Name1=this",0.4,"Corporal"] Man kann das natrlich auch anders denieren, indem man als Position einen Marker angibt, welchen man zuvor auf die Karte an die Position des Leaders gesetzt hat. Diesem wrde man bei Achse a/b einfach den Wert 0 geben, damit der Marker nicht sichtbar ist "SoldierESniper" createUnit [getMarkerPos "Marker1",EGrp1,0.8,"Corporal"] Dieser hat jetzt mal keinen Namen zugewiesen bekommen, weil man das nur machen muss, wenn man diese Einheit spter auf irgendeine Art ansprechen mchte. Der Leader hiee in diesem Fall EGrp1. Folgend nochmal mit der Zuweisung einer Wae: "SoldierWSniper" createUnit [position Player, Player, "this addweapon ""binocular"" ", 0.8, "Corporal"] 124

Gruppenbezogen: Neben einzelnen Einheiten lassen sich auch Gruppen erstellen. Dazu kann man die Gruppen gleich individuell mit Namen versehen und sie so dann spter ganz einfach ansprechen. Als Beispiel soll hier folgendes Skript dienen, bei welchem eine Gruppe an der Position des Markers "GrpM" erstellt wird, den man zuvor auf die Karte gesetzt hat.
Grp1 = Creategroup EAST; _Leader="SquadLeaderE" createUnit [getMarkerPos "GrpM", Grp1, "Grp1=this", 1, "Sergeant"]; _Unit2="SoldierEB" createUnit [getMarkerPos "GrpM", Grp1, "", 1, "Corporal"]; _Unit3="SoldierEB" createUnit [getMarkerPos "GrpM", Grp1, "", 1, "Corporal"]; _Unit4="SoldierEG" createUnit [getMarkerPos "GrpM", Grp1, "", 1, "Corporal"]; _Unit5="SoldierEMG" createUnit [getMarkerPos "GrpM", Grp1, "", 1, "Corporal"]; _Unit6="SoldierEAT" createUnit [getMarkerPos "GrpM", Grp1, "", 1, "Corporal"]; _Unit7="SoldierESniper" createUnit [getMarkerPos "GrpM", Grp1, "", 1, "Corporal"]; exit

Wie man sieht, wurde hier der ersten Einheit, die lokal Leader benannt wurde, ein hherer Dienstgrad zugewiesen, was sie automatisch zum Leader der Gruppe macht. Der Name der Gruppe ist nun, wie am Anfang des Skriptes deniert, GrpOne. Damit diese Gruppe nun auch in der Mission richtig agiert, muss man noch einen weiteren, sehr wichtigen Punkt beachten. Merke: Erstellt man feindliche Einheiten erst im Laufe der Mission, ohne dass zuvor irgendwelche Einheiten dieser Seite auf der Karte platziert waren, muss man der Seite ein Center zuweisen, damit diese Einheiten miteinander kommunizieren knnen. Danach verwendet man den SetFriend-Befehl und verfeindet die Seiten miteinander. Macht man das nicht, wird die KI nicht auf gegnerische Einheiten feuern. Es bietet sich hierbei an, das Center und den SetFriend-Befehl in der Init.sqs zu initialisieren. Hat man jedoch von Anfang an Einheiten aller Kriegsparteien auf der Karte, so werden diese Center beim Missionsstart automatisch von der Engine erstellt. Folgend die Eintrge in einer Beispiel-Init.sqs: Init.sqs
Createcenter EAST Createcenter WEST WEST setFriend [EAST,0] EAST setFriend [WEST,0]

Kapitel 5

Center So wie man ein Center erstellen kann, kann man es mit deleteCenter SEITE auch wieder lschen, was aber eher unsinnig und unwirksam ist. 125

5.46 - Flares, Rauch und Explosionen erzeugen


Zum Erzeugen einer Flare oder einer Rauchgranate ber einem Objekt oder einer XYZPosition gilt zwar der gleiche Befehl, wie im Kapitel 5.45, aber die Klassennamen weichen von den Magazinnamen ab. Deshalb hier nochmal explizit. Flare1="F_40mm_Green" createVehicle [x,y,z] Oder ber oder an der Position eines anderen Objektes: Rauch="Smokeshell" createVehicle [(getPos Name1 select 0),( getPos Name1 select 1), 10] Wobei dies in einer Zeile stehen muss, was hier nicht mglich ist. Oder in kurz: Rauch=" Smokeshell" createVehicle position Name Merke! Flares sollten generell ab einer Hhe von 100 Metern erzeugt werden! Dabei stehen folgende Flares F_40mm_White F_40mm_Green F_40mm_Red F_40mm_Yellow

und folgende Rauch- und Gewehrgranaten zur Auswahl: Smokeshell SmokeshellGreen SmokeshellRed B_40mm_HE

Natrlich kann man statt einer Flare oder einer Rauchgranate auch ganz andere Arten erzeugen. Zum Beispiel eine SH_125_HE oder hnliches fr eine Explosion. Dazu bitte im Kapitel 3.10 nachschlagen. Unter den Shellklassen sind diverse Explosionskrper aufgelistet.

In der Vorschau sieht das dann spter etwa so aus:

126

5.47 - Einheiten und Objekte lschen


Whrend man zum Lschen von Objekten nur eine Syntaxform verwendet, bentigt man zum Lschen von Einheiten verschiedene Syntaxformen. Wenn man beispielsweise nur den Bordschtzen eines Helikopters lschen will, der ja nicht mit einem Namen versehen wurde. Die Syntaxes schauen wie folgt aus: deleteVehicle Name - Lscht alles, was einen festen Namen besitzt. Mchte man nun den Bordschtzen des Helikopters lschen, muss dieser das Fahrzeug zunchst verlassen. Vorher gibt man ihm aber noch einen Namen, indem man folgende Syntax in die Initzeile des Helis schreibt: Name=(Gunner Heli1) Jetzt lsst man ihn aussteigen, wobei man hier auch (Gunner Heli1) schreiben kann. Name action ["Eject", Heli1] oder einfach doGetOut Name Der Name wird erst beim Lschen wichtig, da (Gunner Heli1) nicht funktionieren wrde. deleteVehicle Name Auer dem Gunner gibt es noch den Commander, den Driver und die Crew. Einheiten in Bereich lschen Dazu setzt man einen Auslser beliebiger Gre und benennt ihn beliebig(hier: Zone1). Dann whlt man die Seite aus, die gelscht werden soll oder stellt ihn mit Jeder auf alle Seiten und Objekte. Die Syntax fr das Lschen schreibt sich dann: {deleteVehicle _x} forEach list Zone1 Kapitel 5

5.48 - Funkmen verndern


Hiermit hat man die Mglichkeit whrend einer Mission die Eintrge im Funkmenm umzubenennen. Diese sind von der Engine her von 1 bis 10 durchnummeriert. 1=Alpha, 2=Bravo, 3=Charlie, ... Umbenennen kann man Diese mit folgender Syntax: 1 setRadioMsg "Alpha-Team" Der erste Eintrag von Radio Alpha wurde nun in Alpha Team umbenannt. Mchte man einen leeren Funkmeneintrag haben, setzt man statt einem Text einfach ein Leerzeichen zwischen die Anfhrungsstriche. Die Funkmglichkeit ist zwar eigentlich noch da, aber der Spieler sieht sie nicht und denkt, dass sie nicht verfgbar ist. Statt dem Text wre dann nichts zu sehen. Dies kann man nutzen, wenn zum Beispiel ein Team ausfllt oder hnliches. 127

5.49 - Einer Gruppe ein Rufzeichen zuweisen


Mit setGroupId ist es mglich verschiedenen Gruppen verschiedene Rufzeichen zuzuweisen. Somit wei man immer genau, wer gerade gesprochen hat oder einen Sidechat abgegeben hat. Mit Armed Assault hat man im Gegensatz zu Operation Flashpoint nun auch die Mglichkeit seinen Gruppen uneingeschrnkt eigene Namen zu geben. und eine freie Farbe zu denieren. Hier die Syntaxbeispiele: Standard: Name setGroupID ["Alpha","GroupColor0"] Freier Text: Name setGroupID ["Assault-Team-Alpha","GroupColor2"]

Standardmig stehen folgende Werte fr Gruppenname und -farbe zur Auswahl: Gruppennamen: "Alpha" "Bravo" "Charlie" "Delta" "Echo" "Foxtrot" Gruppenfarben: 0 keine Farbe 1 Schwarz 2 Rot 3 Grn 4 Blau 5 Gelb 6 Orange 7 Rosa "Golf" "Hotel" "Kilo" "Yankee" "Zulu" "Bualo" "Convoy" "Guardian" "November" "Two" "Three"

Tipp: Seitens des Spiels gibt es ab und dann Probleme, dass die Farbe nicht ausgegeben wird, was aber schon seit Operation Flashpoint bekannt ist. Dies umgehen wir einfach, indem wir beides in eine Zeile schreiben. Die Farbe gibt man dabei manuell an und lsst den hinteren Part, wo man diese normalerweise angibt, einfach oen. Bei folgendem Beispiel heit das Team Assault-Team-Alpha und hat die Farbe Red bekommen. Name setGroupID ["Assault-Team-Alpha - Red",""] 128

5.50 - Funkspruch abgeben


Hierbei gibt es verschiedene Mglichkeiten diese auszugeben. Dabei knnen diese global, seiten-, gruppen- oder vehikelbezogen angezeigt werden. Hier die Syntaxform mit den verschiedenen Varianten: Name sideChat "Test 1-2" Name groupChat "Test 1-2" Name globalChat "Test 1-2" Name vehicleChat "Test 1-2" Name spricht zu seiner Truppenseite Name spricht nur zu seiner Gruppe Name spricht zu allen Seiten Name spricht zu Leuten innerhalb seines Fahrzeuges

Mchte man einen Funkspruch durch das Hauptquartier abgeben lassen: [Seite,"HQ"] sideChat "Move to your position and wait for further orders!"

Der Befehl enableRadio false blendet die Funksprche aus und macht sie unsichtbar.

5.51 - Sound erstellen


Was in Operation Flashpoint nicht mglich war, wurde in Armed Assault bercksichtigt. Das trit neben den vielen anderen neuen Mglichkeiten auch auf diesen Bereich zu. Man hat jetzt die Mglichkeit, die spielinternen Sounds an einer bestimmten Position zu erstellen. Im folgenden Beispiel wird der Sound namens LittleDog an der Position des Spielers erstellt. Hund1=createSoundSource ["LittleDog",position Player,[],10] Der Wert 10 steht dabei fr die Entfernung vom Spieler. Natrlich kann man diesen jetzt beliebig versetzen, da er beim Erstellen den Namen Hund1 bekommen hat und somit ansprechbar ist. Das geht dann, wie schon bekannt, mit: Hund1 setPos getPos Name So kann man sich nun beliebig die Sounds aus ArmA erstellen lassen, ohne irgendwas auf der Karte setzen zu mssen. Die Sounds ndet man hierbei unter Leer/Sounds oder in einem Auslser bzw. Wegpunkt unter Eekte. Unter anderem gibt es folgende Sounds: Stream, Alarm, BadDog, BirdSinging, Chicken, Cock, Cow, Crow, Crickets1, Crickets2, Crickets3, Crickets4, Dog, Frog, Frogs, LittleDog, Music, Owl, Wolf Mchte man eigene Sounds mit diesem Befehl irgendwo erstellen, so mssen diese erst in der Description.ext vordeniert werden und knnen dann ganz normal mit der Angabe des in der Description.ext festgelegten Namens aufgerufen werden. MeinSound=createSoundSource ["Soundname",position Player,[],10] 129

Kapitel 5

5.52 - Eigenen Sound einbinden


Wenn man eigenen Sound oder Musik in eine Mission einbinden mchte, so geht das nur ber die Description.ext, die bereits im Kapitel 2.3 erklrt wurde. Hier nun die explizite Erklrung zum Thema Musik und Sounds einfgen. Zunchst legt man im Missionsordner einen Ordner namens Sounds und einen Ordner namens Music, natrlich klein geschrieben, an und packt dort seine Sounddateien rein. Die Description bietet dafr verschiedene Unterbereiche, so dass man diese einzeln steuern kann, wenn man zum Beispiel die Melodie von der Lautstrke her runterfadet, soll der Funkspruch, der gleichzeitig luft seine Lautstrke behalten. Deshalb gibt es dafr verschiedene Unterbereiche(Soundklassen). Die Sound- oder Musikdenierung sieht in der Description.ext etwa wie folgt aus: Description.ext
// === Musik ================================================> class CfgMusic { tracks[]= { Track1,Track2 }; class Track1 { name = "Track1"; sound[] = {\music\track1.ogg, db+0, 1.0}; }; class Track2 { name = "Track2"; sound[] = {\musik\track2.ogg, db+0, 1.0}; }; }; // === Sounds ===============================================> class CfgSounds { sounds[]= { Artillerie }; class Artillerie { name = " Artillerie "; sound[] = {\sounds\ artillerie.ogg, db+0, 1.0}; }; };

Weiter auf nchster Seite. 130

// === Radio/Funk ============================================> class CfgRadio { sounds[] = {Funk1}; class Funk1 { name = "Funk1"; sound[] = {"sound\funk1.ogg", db+5, 1.0}; title = Das ist ein Funkspruck!; }; }; // === Umgebung ============================================> class CfgSFX { sounds[] = {}; }; class CfgEnvSounds { sounds[] = {}; };

Kapitel 5

Wie man oben sehen kann, sind dann noch Bereiche wie Funk (Radio) und zwei verschiedene Umgebungssoundklassen deniert.
class CfgMusic { tracks[]= { Track1,Track2 }; class Track1 { name = "Track1"; sound[] = {\music\track1.ogg, db+0, 1.0};

- Klasse CfgMusic - Trackliste - Klasse Track1 - Name Track1 - Quelle, db = Laustrke, 1.0 = Geschwindigkeit - Texteinblendung zum Sound

titles[] = { }; }; };

Mit db hat man die Mglichkeit die Lautstrke der Sounddatei festzulegen. Dabei kann man kann gut zu laute oder zu leise Dateien entsprechend anpassen. Die Geschwindigkeit, welche oben mit 1.0 festgelegt ist, bestimmt die Geschwindigkeit mit der die Sounddatei abgespielt wird. Somit kann man Sprachsamples hher oder tiefer klingen lassen. Doch sollte man den Wert nicht zu hoch setzen, sonst hat man schnell den M-Mouse Eekt. 131

Mchte man dann eine Sounddatei im Editor abspielen, so whlt man die im Wegpunkt oder einem Auslser im Untermen Eekte aus. Dazu muss man die Mission erst neu geladen oder gespeichert haben, damit ArmA die Description neu einlesen kann. Die nun denierten Sounds lassen sich natrlich auch per Syntax starten. playMusic "Track1" playMusic ["Track1", 30] (Spielt Track1 ab Sekunde 30) playSound "Artillerie" Name say "Soundname" Die lassen sich natrlich auch, wie schon erwhnt in der Laustrke herunterfaden. 10 Fadesound 0.5 10 Fademusic 1 0 FadeRadio 0.1

Der erste Wert steht fr die Zeit in der das geschehen soll und der zweite Wert fr den jeweiligen Lautstrkenwert, den der Sound erhalten soll. Der Befehl preLoadSound ermglicht es, den Sound vorab in den Speicher zu laden. preLoadSound "Track1" Sounds mit Text verknpfen Sounds lassen sich ohne Weiteres mit Text verknpfen. Dabei kann man auf einen Stringtablewert zurckgreifen oder einen eigenen Text direkt in der Description.ext mit angeben. Der Text wird dann beim Abspielen des Sounds mit angezeigt. Im Normalfall nutzt man das bei der Wiedergabe von Sprach- oder Funksounds. In der Description.ext sieht das dann etwa wie folgt aus:
// === Radio ================================================> class CfgRadio { sounds[] = {RadioMsg1, RadioMsg2}; class RadioMsg1 { name = "RadioMsg2"; sound[] = {"\sound\ radiosound1.ogg", db+10, 1.0}; title = "Its done. Now Im ready for further orders."; }; class RadioMsg2 { name = "RadioMsg2"; sound[] = {"\sound\radiosound2.ogg", db+10, 1.0}; title = {$STR_RADIO_2}; }; };

132

Zufallssound aus einem Array abspielen Auch im Soundbereich ist es durchaus mglich so einiges per Zufall zu bestimmen. Eine beliebte Methode ist dabei, die Sounds in einem Array zu denieren und diese dann spter per Zufall auswhlen zu lassen. Dies wird in folgendem Beispiel mal mit einem Skript umgesetzt, wobei die eingetragenen Musikstcke keine Description.ext erfordern, weil sie direkt in der Engine deniert sind. Dieses von uns angelegte Script kann nun ganz normal mit [] exec scripts\music.sqs aufgerufen werden. Hierbei wird nun bei jedem Skriptaufruf ein Sound per Zufall aus dem vordenierten Array ausgewhlt und abgespielt. _music = ["ATrack1","ATrack6", "ATrack10", "ATrack11", "ATrack12", "ATrack13", "ATrack14", "ATrack15", "ATrack19", "ATrack22"]; playMusic ( _music select oor(random((count _music) - 0.5 ))); exit; Zufallssound ohne Skript aufrufen Eine weitere sehr gute Methode der Sounddynamic wre das nun folgende Syntaxbeispiel, wobei man bei diesem aber die Auswahl der Sounds weniger gut selbst bestimmen kann. Wichtig ist hierbei, dass die Sounds, alle den gleichen Namen haben und am Ende eine Zahl. Also zum Beispiel: Track1, Track2, u.s.w.. Hierbei werden nun wieder armainterne Sounds verwendet, welche nach dem gleichen Prinzip von ATrack1 bis ATrack27 deniert sind. Die Namen der Queens Gambit Tracks gehen von QGTrack1 bis QGTrack9. Bei der nun folgenden Sytax steht statt der eigentlichen Zahl nur %1, welches in dem Fall als Platzhalter fr die Zahl steht. Im hinteren Teil der Syntax wird festgelegt aus welchem Wert von 0 bis, in diesem Fall 27, die Zahl generiert werden soll und fr %1 eingesetzt. playMusic format ["ATrack%1",ceil random 27]; Tipp: Folgende Tracks bentigen ebenfalls keine Description.ext-Eintrge: WithCare_Smile - WithCare_Suicide - WithCare_War - WithCare_What Selbstverstndlich kann man statt der Musik eben auch ganz andere Soundarten verwenden. Wenn diese nicht in der Engine defniert sind, muss man sie eben selbst in seiner eigenen Description.ext denieren. Folgendes Syntaxbeispiel zeigt das Ganze nochmal mit dem Befehl Say. Name1 say format ["Hilfe%1",ceil random 3]; Da die generierten Zufallswerte nie genau rund sind, werden sie mit dem Ceil-Befehl aufoder abgerundet, damit es einen runden Wert ergibt und die Engine wei, welcher Sound abgespielt werden soll. 133

Kapitel 5

5.53 - Identitt festlegen


Es lsst sich fr jede Einheit in einer Mission eine Identitt festlegen. Dies ist aber nicht unbedingt ratsam, weil es ein riesiger Aufwand wre. Deshalb sollte man sich mit dem Vergeben von Identitten lieber auf die Schlsselpersonen beschrnken. Eine Identitt wird zunchst in der Description.ext vordeniert, bevor sie eingebunden werden kann. Das Ganze sieht dann ungefhr so aus.
class CfgIdentities { class MrMurray { name = "MrMurray"; face = "Face33"; glasses = "none"; speaker = "Dan"; pitch = 1.00; }; class MemphisBelle { name = "MemphisBelle"; face = "Face10"; glasses = "none"; speaker = "Howard"; pitch = 1.00; }; class Dan { name = "Dan"; face = "Face22"; glasses = "none"; speaker = "Russell"; pitch = 1.00; }; };

Wie man erkennen kann, kann man die Namen frei vergeben. Lediglich die Gesichter und der Sprecher sind hierbei vorgegeben. Bitte auch wieder auf die Einhaltung der Klammern in der Description.ext achten! Mchte man im Spiel dann die Identitt der jeweiligen Einheit zuweisen, schreibt man lediglich den vordenierten Namen mit der Syntax in die Initzeile: Name setIdentity "DeinName" oder this setIdentity "Mr-Murray" 134

Diese Indentitt lsst sich in Verbindung mit einer Kampagne auch speichern und spter wieder laden. Der Wert wird dabei direkt in der Objects.sav der Kampagne gespeichert und kann mit deleteIdentity "xyz" ganz leicht wieder gelscht werden. Name saveIdentity "Name1Save" oder Name loadIdentity "Name1Save" Man kann einer Einheit auch nur ein Gesicht zuweisen, das geht dann hiermit: Name setFace "Face33" oder this setFace "Face33"

In Armed Assault stehen 57 Faces, die mit Face1 bis Face53 und FaceR01 bis FaceR04 durchnummeriert sind, zur Auswahl. Hat man eine eigene Facedatei im Missions- bzw. Userordner: Name setFace "MeinBild.jpg" Mgliche Gren: 1024*1024; 512*512; 256*256 Optimale Gre: 512*512; Dateigre 100 Kb Brille (Glasses): Hier eine bersicht der Brillenarten, die man in ArmA vergeben kann: glasses = "spectacles"; glasses = "sunglasses"; glasses = "none"; Normale Brille Sonnenbrille Keine Brille Kapitel 5

Sprecher: Folgende Sprecher stehen bis jetzt in ArmA zur Auswahl: Amy Dan Howard Robert Brian Dusan Mathew Russell

Ryan

Pitch: Mit dem Pitchwert (pitch = 1.00) wird hierbei die Sprachhhe oder -tiefe deniert.

5.54 - Mimiken
Mit folgenden Befehlen kann man den Einheiten Mimiken zuweisen. Das bedeutet, dass man ihnen verschiedene Stimmungen wie frhlich, ernst oder traurig zuweisen kann. Name setMimic "Smile" Normal - Surprised - Agresive - Hurt - Ironic - Smile - Cynic - Angry - Sad - Default Folgende Animation verndert die Gesichtszge mit den Werten 0 bis 1. Name setFaceAnimation 0.5 135

5.55 - Der Actionbefehl


Die Actionbefehle weisen der jeweiligen Einheiten einen Befehl zu, was diese zu machen hat. Dabei gibt es verschiedene Varianten wie man diese denieren kann. Hier die nhere Erluterung dazu: Object: Type: Target: Die Einheit(Name), die diese Aktion ausfhren soll. Nimmt man ein Fahrzeug, wird der Commander gewhlt. Name der Aktion (siehe Actionbefehlsbersicht) Meistens der gleiche Name, wie Name

Syntaxformen: Hier die verschiedenen Syntaxformen, die dafr in Frage kommen knnen: Name action [<type>] Name action [<type>, <target>] Name action [<type>, <target>, zustzliche Parameter] Fr zustzliche Parameter trgt man beispielsweise die Wae oder die Magazine ein, wie es in der Liste beschrieben ist. Neben Action gibt es noch Fire, was sich aber auf die wenigsten Befehle bezieht. Folgend nun mal ein paar Beispiele: Name re ["PipebombMuzzle", "PipebombMuzzle", Pipebomb] - legt Sprengsatz ["M203Muzzle", "M203Muzzle", "1Rnd_HE_M203"] - schiet Granate ["M203Muzzle", "M203Muzzle", "FlareGreen_M203"] - schiet Flare ["HandGrenadeMuzzle", "HandGrenadeMuzzle", "HandGrenade"] - wirft Granate ["SmokeShellRedMuzzle", "SmokeShellRedMuzzle", "SmokeShellRed"] - Wirft Rauch ["bombLauncher", "BombLauncher", "6Rnd_GBU12_AV8B"] - Harrier wirft Bombe ab Name action ["TouchO",Name] ["Eject",Heli1] ["Hidebody", Name2] ["CancelAction", Name] 136 - lst Sprengsatz aus - steigt aus - versteckt Leiche - bricht Aktion ab

Actionbefehlsbersicht Folgend nun eine Befehlsbersicht ber die wichtigsten Aktionbefehle. Einige funktionieren von Haus aus nicht bzw. sind von Haus aus noch nicht aktiviert worden. ["None", <target>] ["GetInCommander", <target>] ["GetInDriver", <target>] ["GetInGunner", <target>] ["GetInCargo", <target>] ["Heal", <target>] ["Repair", <target>] ["Refuel", <target>] ["Rearm", <target>] ["GetOut", <target>] ["LightOn", <target>] ["LightO", <target>] ["EngineOn", <target>] ["EngineO", <target>] ["SwitchWeapon", <target>, <weapon index>] ["UseWeapon", <target>, <weapon index>] ["TakeWeapon", <target>, <weapon name>] ["TakeMagazine", <target>, <magazine type name>] ["TakeFlag", <target>] ["ReturnFlag", <target>] ["TurnIn", <target>] ["TurnOut", <target>] ["WeaponInHand", <target>, <weapon name>] ["WeaponOnBack", <target>, <weapon name>] ["SitDown", <target>] ["Land", <target>] ["CancelLand", <target>] ["Eject", <target>] ["MoveToDriver", <target>] ["MoveToGunner", <target>] ["MoveToCommander", <target>] ["MoveToCargo", <target>] ["HideBody", <target>] ["TouchO", <target>] ["SetTimer", <target>]

Kapitel 5 137

["Deactivate", <target>] ["NVGoggles", <target>] ["ManualFire", <target>] ["AutoHover", <target>] ["StrokeFist", <target>] ["StrokeGun", <target>] ["LadderUp", <target>, <ladder index>, <ladder position>] ["LadderDown", <target>, <ladder index>, <ladder position>] ["LadderOnDown", <target>, <ladder index>, <ladder position>] ["LadderOnUp", <target>, <ladder index>, <ladder position>] ["LadderO", <target>, <ladder index>] ["FireIname", <target>] ["FirePutDown", <target>] ["LandGear", <target>] ["FlapsDown", <target>] ["FlapsUp", <target>] ["Salute", <target>] ["ScudLaunch", <target>] ["ScudStart", <target>] ["ScudCancel", <target>] ["User", <target>, <action index>] ["DropWeapon", <target>, <weapon name>] ["DropMagazine", <target>, <magazine type name>] ["UserType", <target>, <action index>] ["HandGunOn", <target>, <weapon name>] ["HandGunO", <target>, <weapon name>] ["TakeMine", <target>] ["DeactivateMine", <target>] ["UseMagazine", <target>, <magazine creator>, <magazine id>] ["IngameMenu", <target>] ["CancelTakeFlag", <target>] ["CancelAction", <target>] ["MarkEntity", <target>] ["Talk", <target>] ["Diary", <target>] ["LoadMagazine", <target>, <magazine creator>, <magazine id>, <weapon name>, <muzzle name>]

138

5.56 - Der Animationsbefehl


Ein Animationsbefehl lsst eine Einheit eine Animation ausfhren. Hierbei gibt es aber Unterschiede. Da gibt es einmal den Befehl SwitchMove, mit welchem die Einheit in die Animation geswitcht/geschaltet wird und PlayMove, mit welchem sie die Animation abspielt. Manche Befehle arbeiten nicht mit dem PlayMove-Befehl, wobei man dann auf den SwitchMove-Befehl zurckgreift. Des Weiteren dauert jede Animation eine gewisse Zeit. Diese sollte man bercksichtigen, wenn die Einheit danach eine weitere Animation ausfhren soll. Dazu setzt man einfach einen Delay (z.B.: ~10) zwischen die Befehlszeilen in seinem Skript. Animationsbefehle sind eine nettes Feature fr das Drumherum. Zum Beispiel ein Lager, in welchem Einheiten Sport treiben, sich Unterhalten oder ein Soldat grt, wenn jemand durch das Tor fhrt. All das regelt man mit den Animationsbefehlen. Die Syntaxformen fr das Ausfhren einer Animation sehen dabei so aus: Name playMove "Animationsbefehl" Name switchMove "Animationsbefehl" Kapitel 5

Gruppenbezogen Neben den Standartbefehlen gibt es natrlich wieder die verschiedensten Mglichkeiten per Zufall zu bestimmen wer eine solche Animation ausfhren soll oder welche Animation einer bestimmten Sorte ausgefhrt werden soll. Fr das Erstere gibt es zum Beispiel folgende Mglichkeit: (Units group Grp1 select 2) playMove "Animation" Hier wrde jetzt die Einheit 3 der Grp1 die Animation ausfhren. Aber wieso eigentlich die Einheit 3, wenn dort select 2 steht? Das erklrt sich wie folgt: select 0 select 1 select 2 Leader Einheit 2 Einheit 3

Gruppenzufalls-Variante Das Ganze ist natrlich auch wieder per Zufall. mglich. Das sieht dann wie folgt aus: ((Units group Grp1) select ceil random 5) playMove "AnimationsName" Hierbei wrde nun mit ceil random 5 ein Zufallswert zwischen 0 und 5 erzeugt, welcher nun die jeweilige, per Zufall ausgewhlte Einheit der Gruppe Grp1, die Animation ausfhren lsst. Die Gruppe sollte hierbei natrlich auch die richtige Gre von mindestens 6 haben.

139

Zufallsanimation Hierbei gibt es verschiedene Varianten, wobei wir uns hier jetzt mal auf zwei beschrnken. Zunchst gibt es die Variante, bei der die Animationen nummeriert sind, wie zum Beispiel die Panik-Animation, die von ActsPercMstpSnonWnonDnon_Panicking1 bis 7 durchnummeriert ist. Wichtig ist hierbei, dass der Name der Animation exakt gleich ist und nur der angehangene Wert, in Form einer Zahl, von einer anderen Animation unterscheidet. Name playMove format ["Animation%1",ceil random 7]; Zufallsanimation aus einem Array beziehen Die andere Variante whlt eine Animation aus einem Array aus. Der Vorteil daran ist, dass man in diesem Array diverse verschiedene Animationen festlegen kann. Dies macht man gewhnlich mit einem Skript, welches dabei wie folgt aussehen kann: [Name] exec "scripts\animation.sqs" _Unit = _this select 0 _Anim = ["Anim1", "Anim2", "Anim3", "Anim4", "Anim5", "Anim6"]; _Unit playMove ( _Anim select oor(random((count _Anim) -0.5 ))); exit; Animationsstatus Der Animationsstatus gibt wieder, ob die Animation noch luft oder schon beendet ist. Dies lsst sich nun natrlich wieder fr diverse Dinge zu Nutze machen. ? animationState _Unit == "Anim1" : hint Anim luft Animationswechsel verhindern Wer kennt das nicht, dass eine Einheit nach einer gewissen Zeit die Animation abbricht und wieder in die Ausgangshaltung wechselt. Dies tut sie genau dann, wenn die Animation beendet ist. Mchte man aber, dass die Einheit in jedem Fall in der gegebenen Animation verharren soll, muss man sich den DisableAI-Befehl zu Nutze machen. Dazu gibt man der Einheit zunchst den Befehl die Animation auszufhren und direkt im Anschluss verwendet man den Befehl DisableAI, was wie folgt aussieht: Name playMove "Animationsbefehl" Name disableAI "Anim" Mchte man, dass die Einheit irgendwann wieder aus der gehaltenen Animation auftaut und wieder in die normale Haltung wechselt, ruft man einfach folgende Syntax auf: Name enableAI "Anim" Eine weitere Mglichkeit einer Animationsschleife ist die Vergabe eines Eventhandlers. Name switchMove "Animation"; Name addEventHandler ["AnimDone", {Name switchMove "Animation"}]; 140

Folgend eine Liste der wichtigsten Animationsbefehle: Animation

Bezeichnung

Setzt sich hin AmovPsitMstpSlowWrDnon Sitzt ActsPercMstpSnonWnonDnon_MarianQ_TVstudioMan_Loop1 Sitzt und redet ActsPercMstpSnonWnonDnon_MarianQ_TVstudioMan_Loop2 Sitzt und redet ActsPercMstpSnonWnonDnon_MarianQ_TVstudioMan_Loop3 Sitzt und redet ActsPercMstpSnonWnonDnon_MarianQ_TVstudioMan_Loop4 ActsPercMstpSnonWnonDnon_MarianQ_TVstudioMan_LoopLong Sitzt und redet Steht rum ActsPercMstpSnonWnonDnon_MarianQ_WarReporter Wirft liegend Granate AwopPpneMstpSgthWnonDnon_throw Wirft Granate AwopPercMstpSgthWrDnon_Throw1 Schwimmt AswmPercMrunSnonWnonDf_AswmPercMstpSnonWnonDnon Stirbt DeadState SprintBaseDf (SprintBaseDfL=rennt links / SprintBaseDfR rennt rechts) Rennt mit Wae SprintCivilBaseDf (SprintCivilBaseDfL=links / SprintCivilBaseDfR=rechts) Rennt ohne Wae Benutzt Fernglas AmovPercMstpSnonWnonDnon_AwopPercMstpSoptWbinDnon Nimmt Haltung an AmovPercMstpSnonWnonDnon_Ease AmovPercMstpSnonWnonDnon_AmovPknlMstpSnonWnonDnon Kniet auf einem Knie Hnde hinter Kopf AmovPercMstpSsurWnonDnon Legt etwas hin (Pipebomb) AmovPercMstpSnonWnonDnon_AinvPknlMstpSnonWnonDnon Setzt sich auf Boden AmovPercMstpSlowWrDnon_AmovPsitMstpSlowWrDnon Kniet nieder und keucht AinvPknlMstpSnonWnonDnon_AmovPknlMstpSrasWpstDnon Kniet nieder und keucht AinvPknlMstpSlayWrDnon_AmovPknlMstpSrasWrDnon Heilanimation AinvPknlMstpSlayWrDnon_healed Heilanimation AinvPknlMstpSlayWrDnon_healed2 Heilanimation AinvPknlMstpSnonWnonDnon_healed_1 Heilanimation AinvPknlMstpSnonWnonDnon_healed_2 Verarztet Opfer AinvPknlMstpSlayWrDnon_medic Verarztet Opfer AinvPknlMstpSnonWnonDnon_medic_1 Verarztet Opfer AinvPknlMstpSnonWnonDnon_medic_2 Schultert Wae AidlPercMstpSnonWnonDnon08 Kniet nieder (Waenkiste) AinvPknlMstpSnonWnonDnon_1 Kniet nieder (Waenkiste) AinvPknlMstpSnonWnonDnon_2 Kniet nieder (Waenkiste) AinvPknlMstpSnonWnonDnon_3 Kniet nieder (Waenkiste) AinvPknlMstpSnonWnonDnon_4 Geht in Stellung AmovPercMrunSlowWrDf_AmovPpneMstpSrasWrDnon Fahrzeugkontrolle AmovPercMstpSnonWnonDnon_carCheckPush Fahrzeugkontrolle AmovPercMstpSnonWnonDnon_carCheckWheel Wscht Fahrzeug AmovPercMstpSnonWnonDnon_carCheckWash Macht Kampfsport AmovPercMstpSnonWnonDnon_exerciseKata Kniebeugen lang. AmovPercMstpSnonWnonDnon_exercisekneeBendA Kniebeugen schell AmovPercMstpSnonWnonDnon_exercisekneeBendB Liegesttze AmovPercMstpSnonWnonDnon_exercisePushup Wird am Bein getroen AmovPercMwlkSlowWrDf_ActsPercMstpSlowWrDnon_HitLeg AmovPercMstpSlowWrDnon_ActsPercMstpSlowWrDr_HideFromFire Weicht Beschuss aus ActsPpneMstpSnonWnonDnon_AmovPercMstpSnonWnonDnon_Injured3 Lehnt getroen an etwas an Vorwrts Mnner AsigPercMstpSlowWrDnon_AmovPercMrunSlowWrDnon_GoGo

Kapitel 5

141

Animation
AmovPercMstpSlowWrDnon_Salute AmovPercMstpSnonWnonDnon_seeWatch AmovPercMstpSnonWnonDnon_talking AmovPercMstpSlowWrDnon_talking ActsPercMstpSnonWnonDnon_MarianQ_shot1man ActsPercMstpSnonWnonDnon_MarianQ_shot3man ActsPercMstpSnonWnonDnon_MarianQ_shot4man ActsPercMstpSnonWnonDnon_MarianQ_shot5man ActsPercMstpSnonWnonDnon_MarianQ_TVstudioMan_Loop1 AmovPsitMstpSlowWrDnon_Smoking AmovPsitMstpSlowWrDnon_WeaponCheck1 (Gilt von 1-2) AmovPsitMstpSnonWnonDnon_ground AmovPsitMstpSlowWrDnon ActsPercMstpSnonWpstDnon_InterrogationSoldier ActsPercMstpSnonWnonDnon_InterrogationVictim ActsPercMstpSnonWrDnon_ArrestingSoldier ActsPercMstpSnonWnonDnon_ArrestingMan ActsPercMstpSnonWnonDnon_ArrestingManLoop AmovPlieMstpSnonWnonDnon ActsPknlMstpSnonWnonDnon_TreatingInjured ActsPpneMstpSnonWnonDnon_Injured1 (Zahl gilt von 1-2) ActsPknlMstpSnonWrDnon_TreatingSoldier AsigPercMstpSlowWrDnon_SendMenInAction ActsPercMstpSlowWrDnon_listeningOrdersUnderFire ActsPknlMstpSnonWnonDnon_ThingPassingStill ActsPercMrunSlowWrDf_FlipFlopPara AsigPercMstpSlowWrDnon_GoGo ActsPercMstpSnonWnonDnon_ThingPassingStill ActsPercMstpSlowWrDnon_ThingPassingMoving ActsPercMwlkSlowWrDnon_PatrolingBase1 (Zahl gilt von 1-4) ActsPercMstpSlowWrDnon_Lolling ActsPercMstpSnonWnonDnon_DancingDuoIvan ActsPercMstpSnonWnonDnon_DancingDuoStefan ActsPercMstpSnonWnonDnon_DancingStefan ActsPpneMstpSnonWnonDnon_Panicking ActsPercMstpSnonWnonDnon_Panicking1 (Gilt von 1 bis 7) ActsPercMrunSlowWrDf_TumbleOver ActsPknlMstpSlowWrDnon_ThingPassingMoving ActsPercMstpSlowWrDnon_Listening ActsPercMstpSnonWnonDnon_Listening ActsPercMstpSnonWnonDnon_Talking1 (Zahl gilt von 1-2) ActsPercMstpSlowWrDnon_Talking1 (Zahl gilt von 1-2) m2s1kancler m2s2kancler m2s1pobocnik m2s2Zoldak1

Bezeichnung
Soldat grt Schaut auf die Uhr Unterhlt sich Unterhlt sich Unterhlt sich Unterhlt sich Sicherung Sicherung 2 Sitzt Sitzt und raucht Sitzt, checkt Wae Sitzt/Hnde hinten Sitzt / Wae auf dem Scho Verhr Verhropfer Verhaftung einer Person Verhaftungsopfer Liegt gefesselt Legt sich getroen auf Boden Windet sich vor Schmerzen Windet sich vor Schmerzen Behandelt Verletzten im Kampf Gibt geduckt Anweisungen Hrt Anweisungen geduckt zu Kniet auf Boden und redet Luft und mach Vorwrtsrolle Vorwrts Mnner Ausweiskontrolle Ausweiskontrolle Langweilige Wache Ghnt und streckt sich Tanzt frhlich Tanzt frhlich Tanzt frhlich Panikanimation Panikanimation Stoplert, rennt weiter Luft geduckt und sichert Hrt sich Ansprache an Hrt sich Ansprache an Steht ohne Wae und redet Steht mit Wae und redet Luft/ gibt Zeichen Steht und hrt zu Steht und erzhlt Steht und ziehlt

142

Animation
m2s2Zoldak2 m2s2Orlando_centered m2s2Wicks_centered m2s2Lamb_centered m2s2kancler_centered m2s2bodyguard_centered XOutroZoldak1 XOutroZoldak2 XOutroLamb XOutroOrlando m1s1Wicks m1s2Wicks m2s1wicks m2s2Wicks m2s3Wicks x01Wicks m5s1orlando m2s2Orlando m2s3Orlando m6aS1Orlando m6aS2Orlando x03Orlando x04Orlando m5s1Gonzales m6aS1Gonzales m6aS2Gonzales M6bs2Gonzales M6bs3Gonzales x04Gonzales x05s1Gonzales x05s2Gonzales x05s4Gonzales x05s5bGonzales m1s1Pedros x05s1Lamb x05s2Lamb x05s3Lamb x05s4Lamb x05s5aLamb x05s5bLamb M6bs2Lamb M6bs3Lamb x01Lamb x03Lamb m1s2lamb m5s1Lamb

Bezeichnung
Steht / ziehlt aus Hfte Hebt Hnde / schtzt sich Steht mit Gewehr in Hfte Hlt Wae nach oben Luft panisch umher Steht mit erhobenen. Hnden und fllt Steht nach vorn gebeugt Leht sich an jemanden an Wae in Hfte und nickt Steht mit verschrnkten Armen Hlt Wae am Tragegri Hlt Wae auf Hfte hoch/gibt Zeichen Hlt Wae auf Hfte hoch Hlt Wae in Vorhalte Liegt getroen am Boden Hlt Wae am Tragegri/gibt Zeichen Luft mit gesch. Wae umher/gestikuliert Hebt Hnde, luft umher und schtzt sich Steht mit geschulteter Wae Steht mit verschrnkten Armen Steht mit verschrnkten Armen Luft herum Luft herum und gestikuliert Luft herum und gestikuliert Steht und hrt zu Luft herum und gestikuliert Luft herum und gestikuliert Steht, gestikuliert und verschrnkt Arme Schaut auf Boden und luft umher Steht mit Hand am Kinn Steht mit Hand am Kinn und gestikuliert Joggt nach vorne und erzhlt Faltet Hnde und erklrt Ruft um Hilfe und zeigt auf etwas Steht mit erhobener Wae Steht mit erhobener Wae Steht mit erhobener Wae u. gestikuliert Steht mit erhobener Wae und luft Steht mit erhobener Wae u. gestikuliert Steht mit erhobener Wae u. gestikuliert Luft mit Wae unterm Arm und gestikuliert Steht mit Wae unterm Arm Luft mit erhobener Wae Luft mit Wae in Vorhalte Hlt Wae hoch und Hand auf den Rcken Hlt Wae hoch und Hand auf Magazin

Kapitel 5 143

5.57 - KI abschalten
Mit folgenden Befehlen lassen sich KIs abschalten. Das bedeutet, dass sie dann nicht mehr schieen oder auch sich nicht mehr bewegen. Hierbei gibt es folgende Formen: Name disableAI "Move" Name disableAI "Target" Name disableAI "Autotarget" Name disableAI "Anim" Name disableAI "Watch" - Einheit bewegt sich nicht mehr - Einheit lsst von Ziel ab - Einheit verfolgt und beobachtet nichts - KI kann Animation nicht mehr wechseln - Einheit schaut sich nicht mehr um

Mit enableAI macht man das Ganze am Ende wieder rckgngig und die Einheit wird sich wieder normal verhalten.

5.58 - SetVelocity
Mit dem setVelocity-Befehl hat man die Mglichkeit, ein Objekt in eine Richtung gleiten zu lassen. Dabei iegt das Objekt in die angegebene Richtung, welche mit XYZ-Werten bestimmt wird. Die Syntax dafr schaut wie folgt aus: Name setVelocity [0,100,100]

5.59 - Der Informationstext


Mit den folgend erluterten Befehlen hat man die Mglichkeit kurze Infomationszeilen erscheinen zu lassen. Dabei gibt es Unterschiede welche wie folgt aussehen: hint "Text" hintC "Text" hintCadet "Text" - Erscheint nach Aufruf - Erscheint nach Aufruf und Spiel stoppt - Erscheint nur im Kadettmodus

5.60 - Einheit bleibt liegen, kniet oder steht


Mchte man machen, dass eine Einheit egal was passiert steht, liegen bleibt oder kniet, nutzt man dafr die folgend aufgefhrten Befehle. Kneel und KneelDown sind seitens BI vorgesehen, funktionieren aber noch nicht (Stand Version 1.15). Eventuell funktionieren diese Befehle in Zukunft und daher hier die Auistung. Name setUnitPos "Up" Name setUnitPos "Middle" Name setUnitPos "Kneel" Name setUnitPos "KneelDown" Name setUnitPos "Down" Name setUnitPos "Auto" 144 - Einheit bleibt stehen - Einheit kniet - Einheit kniet - Einheit kniet und whlt zwischen Liegen und Knien - Einheit bleibt liegen - Einheit entscheidet selbst

5.61 - IDs verwenden


Jedes der Objekte auf der Karte bzw. im Editor hat eine ID. Diese kann man sich im Editor mit dem Button IDs zeigen anzeigen lassen. Diese lassen sich nun direkt ansprechen. Man hat also die Mglichkeit zu prfen, ob ein Objekt noch vorhanden, beschdigt oder hnliches ist. Dies bringt gleich eine Menge Mglichkeiten mehr, was zum Beispiel die Missionsziele betrit. Der alte Befehl aus Operation Flashpoint lautete dabei wie folgt: (Object 12345) setDamage 1 Dieser luft allerdings in Armed Assault in dieser Form nicht mehr. In ArmA nimmt man sich nun den NearestObject- oder den NearestBuilding-Befehl zur Hilfe und regelt das damit. Dazu setzt man im Idealfall zunchst eine Spiellogik auf das Objekt, merkt sich die ID des anzusprechenden Objekts und trgt in die Initzeile der Logik folgende Syntax ein: House=position this nearestObject 441616 oder House=nearestObject this bzw. House=nearestBuilding this Kapitel 5 Hierbei ist House ein variabler Wert, welcher daher frei festgelegt werden kann. Hier knnte also auch Objekt1 stehen. Wichtig dabei ist der Rest der Syntax, bei welcher ja am Ende die eigentliche ID des Objektes steht, welches angesprochen werden soll. Diese Logik setzt man nun unmittelbar auf das anzusprechende Objekt. Statt einer Logik kann man alternativ natrlich auch ein anderes x-beliebiges Objekt verwenden. Wichtig ist, dass es auf oder im unmittelbaren Bereich der ID sitzt und die Initzeile richtig deniert wird. Verwendet man den Befehl mit direkter ID-Angabe, kann man die Logik frei setzen. Im Editor sieht das Ganze dann etwa so aus:

Nachdem man nun dem Objekt bzw. der ID einen Namen (oben: House) zugewiesen hat, kann man es auf verschiedene Weise ansprechen. Auf der folgenden Seite sind ein paar Mglichkeiten zur Auswahl, welche unter anderem mglich sind. Objekt Schaden zuweisen: Nachdem man nun das Objekt mit einem Namen versehen hat, kann man ihm Schaden zufgen oder es ganz normal heilen. Dies erfolgt dann wie folgt mit der gewohnten SetDamage-Syntax: House setDamage 1 145

Objektschaden auslesen: Mit Hilfe der folgend aufgefhrten Syntax hat man die Mglichkeit, den Schaden eines Objektes auszulesen und diesen dann fr andere Zwecke zu verwenden. getDammage House Diese Syntax knnte man zum Beispiel jetzt fr die Verwendung einer Bedingung nutzen, um zu prfen, ob das Gebude bzw. Objekt einer Schaden grer als Wert hat. In einem Prfauslser knnte das wie folgt aussehen: Prfauslser: Achse a/b: Bedingung: bei Aktivierung: 0 getdammage House > 0.7 hint Das Haus ist stark beschdigt!

Zerstrung als Bedingung oder Missionsziel: Wie auf der Vorseite bereits erwhnt, gibt es nun die Mglichkeit die Zerstrung eines Objektes als Bedingung oder Missionsziel zu denieren. Mchte man beispielsweise eine Bedingung haben, setzt man diese in die Bedingungszeile eines Auslsers oder Wegpunktes ein. Bedingung: ! (alive House) oder not alive House

Mchte man das zerstrte Objekt als Missionsziel denieren, geht das unter anderem, indem man einen Prfauslser auf die Map setzt und diesen als Ende 1 deniert. Prfauslser: Typ: Achse a/b: Text: Bedingung: Ende 1 Einmal 0 Missionsziel ! (alive House)

Hier bietet es sich wieder an den Countdown zu verwenden, damit Ende 1 nicht gleich bei Zerstrung, sondern erst ein wenig spter ausgelst wird. Ich verweise hier zustzlich auf das Kapitel 4.6, in welchem das Beenden einer Mission sehr gut erlutert ist.

146

Unzerstrbares Objekt: Mchte man in seiner Mission Objekte haben, die absolut nicht zerstrbar sein sollen, hat man unter anderem folgende Mglichkeit. Zunchst weist man, wie in Kapitel 5.61 bereits erklrt, dem Objekt einen Namen zu und setzt dann einen Prfauslser mit folgenden Einstellungen: Prfauslser: Typ: Achse a/b: Bedingung: bei Aktivierung: Mehrfach 0 getDammage House > 0.1 House setdamage 0

Wenn das Objekt nun einen greren Schaden als 0.1 ausweist, wird der Schaden wieder auf 0 gesetzt. Da der Auslser auf Mehrfach steht, wird das Objekt also nie zerstrt werden knnen. Tren eines Objektes nen/schlieen: Einige Objekte verfgen ber eine animierte Tr, welche man per Actionmen nen bzw. schlieen kann. Diese kann man nun auch steuern, wenn man das Objekt zuvor, wie in Kapitel 5.61 erlutert, mit einem Namen versehen hat. Die Syntax hierfr lautet: House animate ["Dvere1",1] Dvere1ist Tr 1. Fr jede weitere Tr dann eben Dvere2, Dvere3 usw. Mit 0 schliet man sie in der Regel und mit 1 net man sie dann wieder. Weiter Mglichkeiten sind: Schranke animate ["Bargate",1] Ziel animate ["Terc",1] - zum Bedienen der Schranke - zum Bedienen der Zielscheibe

Kapitel 5

Laternen bzw. Lichter ausschalten: Mit Hilfe der IDs hat man auch die Mglichkeit Lampen oder Lichter auszuschalten. Hierzu muss man dem Objekt zunchst erstmal mittels dieser Syntax einen Namen zuweisen: Lampe1=nearestObject this Dazu also einen Logikpunkt neben die Lampe setzen, die obige Syntax in die Initzeile eintragen und danach von wo aus auch immer ansprechen (Wegpunkt, Auslser, etc.). Dafr bentigt man nun noch diesen Befehl: Lampe1 switchLight "O" Trgt man die beiden Befehlszeilen komplett in die Logikinit ein, ist die Lampe gleich von Beginn an ausgeschaltet. Lampe1=nearestObject this; Lampe1 switchLight "O" 147

5.62 - Einheiten in Gebuden platzieren


Viele Gebude in Armed Assault sind, wie auch schon in Operation Flashpoint, begehbar. Als Neuheit ist ja hinzugekommen, dass man als Anfhrer einer Gruppe seinen Soldaten direkte Huserpositionen per Mausklick zuweisen kann, welche sie dann beziehen. Dies sind im Modell des Gebudes fest vergebene Hauspositionen, von denen jede Position eine feste Nummer hat. Als Editierer kann man nun gezielt Einheiten oder auch Objekte in und auf den Gebuden an den jeweiligen Positionen platzieren. Als hervorragendes Beispiel dient hier das Hotel, welches mit seinen 265 festgelegten Positionen die meisten davon aufweist. Da dieses zum Teil sehr unbersichtlich ist, sind auf den folgenden Seiten alle fnf Etagen mit den Hauspositionen aufgefhrt. Als besonderes Feature ist im Kapitel 6.16 der Missionsspecials ein Haus-Patroillenskript zu nden, welches Einheiten in dem Hotel Streife laufen lsst. Um eine Einheit nun in einem Gebude zu platzieren setzt man diese direkt auf das Gebude und trgt folgende Syntax in die Initialisierungszeile ein: this setPos (nearestBuilding this buildingPos Positionsnummer) Dieser Befehl ist wesentlich unkomplizierter als Name SetPos [x,y,z], weil man nicht zustzlich die Koordinaten ermitteln muss. Hat man dem Gebude vorher einen Namen zugewiesen, wie in Kapitel 5.61 erklrt, geht auch diese Syntax: this setPos (Hausname buildingPos Positionsnummer) Mchte man eine Einheit auf einer Zufallsposition eines Gebudes platzieren, nimmt man den Randombefehl: this setPos (nearestBuilding this buildingPos Random 265) Mit diesem wird jetzt eine Zufallsposition im Hotel von 0-265 bestimmt. Erdgeschoss (Positionen 0 bis 42)

148

1. Etage (Positionen 44 bis 101 + 262, 263, 264, 265)

Kapitel 5

2. Etage (Positionen 104 bis 165 + 260)

149

3. Etage (Positionen 166 bis 227 + 259)

Dach (Positionen 228 bis 258)

150

Rundfunkstudio Erdgeschoss (Positionen 0 bis 27)

1. Etage (Positionen 28 bis 47)

151

2. Etage (Positionen 48 bis 70)

Dachgeschoss (Positionen 71 bis 90)

152

5.63 - Einheit begibt sich zu Gebudeposition


So wie man Einheiten an Gebudepositionen setzen kann, kann man natrlich auch Einheiten den Befehl erteilen, sich an eine x-beliebige Position im Gebude zu begeben. Hierzu verwendet man eine der folgenden Syntaxes: Name doMove (nearestBuilding this buildingPos 123) Name doMove (Haus1 buildingPos 123) Oder zu einer Zufallsposition: Name doMove (Haus1 buildingPos random 123) Wie man einem Gebude oder einem Objekt einen Namen gibt, ist im vorherigen Kapitel 5.61 ausreichend erlutert. Zum Beispiel: Haus1=nearestBuilding this

5.64 - Position auslesen


Die Position einer Einheit lsst sich auslesen und dann als Text ausgeben oder als Bedingung fr etwas verwenden. Hierbei gelten ganz normal die XYZ-Werte, wobei der Unterschied zwischen getPosASL und getPos zu beachten ist. getPos getPosASL X-Position Y-Position Z-Position gibt die Hhe ber dem Land bzw. einem Objekt aus gibt die exakte Hhe ber dem Meeresspiegel aus getPos Name select 0 getPos Name select 1 getPosASL Name select 2 Kapitel 5

Textausgabe einer Position: Hierzu macht man sich die Hint format oder der Titletext format Syntax zunutze, welche verschieden und je nach Bedarf deniert werden kann. Man kann sich hier einen einzelnen Wert oder auch alle drei Werte gleichzeitig ausgeben lassen. Die folgende Syntax gibt alle drei Werte in der XYZ-Reihenfolge mit exakter Hhe ber dem Meeresspiegel aus. GetPosASL ist bei X und Y uninteressant. hint format ["%1", getPosASL Name] oder hint format ["%1", position Name] Mchte man nur einen einzelnen Wert haben, deniert man die Syntax mit dem entsprechenden Select-Wert. Hier als Beispiel die Ermittlung der Hhe . Meer. hint format ["%1", getPosASL Name select 2] hint format ["Ihre Flughhe betrgt %1", getPosASL Name select 2] titleText [format["%1 Meter", getPosASL Name select 2],"plain down"] 153

Natrlich sollte man es mit den Positionen ausgeben lassen auch nicht bertreiben.

Position als Bedingung: Die Position kann man nun auch als Bedingung fr etwas verwenden. Zum Beispiel soll ein Auslser ausgelst werden, wenn Heli1 hher als 100 Meter iegt oder der Spieler gewarnt wird, wenn er in einen greren Y-Wert erreicht, als er darf. Also zu weit nach Norden oder Sden gelaufen, gefahren oder geogen ist. Man kann so eine Spielche ganz einfach beschrnken. Fr die Flughhe sieht die Syntax hierbei wie folgt aus: ? getPosASL Heli select 2 > 100 Oder als Beispiel die Prfung ob die Einheit den Y-Wert schon berschritten hat. ? getPosASL Name select 1 > 10600

154

5.65 - Der Eventhandler


Einen Eventhandler kann man als eine Bedingung sehen, welche man einer oder mehreren Einheiten oder Objekten zuweisen kann. Ist diese Bedingung erfllt, wird die entsprechend festgelegte Aktion ausgefhrt. Man fgt einer Einheit also einen Event bzw. ein Ereignis zu, welches als Bedingung fr etwas deniert wird. Eventhandler lassen sich ganz einfach vergeben (addEventhandler) oder auch wieder entfernen (removeEventhandler). Eventhandler vergeben Um einen Eventhandler zu vergeben verwendet man folgende Syntax: Name addEventHandler ["Eventhandler", Code] Code steht fr die Aktion, welche ausgefhrt werden soll, wenn das Ereignis eintritt. Hierbei hat man vollen Handlungsspielraum, was man dort denieren mchte. In folgendem Beispiel wird der Eventhandler Killed vergeben und als Code ein Skript deniert, welches ausgelst werden soll, wenn das Ereignis, also der Tod der Einheit, eingetreten ist. Name addEventHandler ["Killed", {_this exec "Skript.sqs"}] In folgendem Beispiel wird der Eventhandler an mehrere Einheiten vergeben. Tritt jetzt bei einer der festgelegten Einheiten der Tod ein, kommt die denierte Textmeldung "Test". {_x addEventHandler ["Killed", {hint "Test"}]} foreach [Name1, Name2,...] Als hervorragendes Beispiel dient hier auch eine Textausgabe, welche anzeigen soll, welche Einheit wen gettet hat. Dies ist fr den Multiplayerbereich sehr interessant. Dabei vergibt man den Eventhandler an alle Einheiten, die dabei bercksichtigt werden sollen. Die Syntax schaut hierbei wie folgt aus. {_x addEventHandler ["Killed", {hint format["%1 killed by %2", _this select 0, _this select 1]}]} foreach [S1, S2, S3, S4] Wird jetzt die Einheit S1 durch S2 gettet, wird der im Editor denierte Name, also S1, per Texteinblendung angezeigt. S1 killed by S2. Hier nochmal der hint format Abschnitt einzeln aufgefhrt: hint format ["%1 killed by %2",_this select 0, _this select 1] Eventhandler fr Einheiten in einem Bereich vergeben Eventhandler lassen sich auch gleich fr mehrere Einheiten in einem Auslserbereich vergeben. Hier zum Beispiel der Fired-Eventhandler, der das Skript Alarm.sqs auslst. {_x addEventHandler ["Fired",{_this exec "Alarm.sqs"}]} foreach thisList Eventhandler entfernen: So einfach wie sich Eventhandler vergeben lassen, kann man sie auch wieder entfernen. Hierzu verwendet man lediglich folgende Syntax: Name removeEventHandler ["Killed", 0] 155 Kapitel 5

Eventhandler-bersicht: Hier eine bersicht mit verschiedenen Syntaxbeispielen zu den Eventhandlern. Eventhandler Beispiel
AnimChanged Syntax: Name addEventHandler ["AnimChanged", {[Einheit, Animation]}] Wird immer ausgelst, wenn die denierte Animation gestartet wird. AnimDone Syntax: Name addEventHandler ["AnimDone", {[Einheit, Animation]}] Wird immer ausgelst, wenn die denierte Animation beendet wird. Dammaged Syntax: Name addEventHandler ["Dammaged", {hint str (_this)}] Wird ausgelst, wenn die Einheit beschdigt wird und zeigt an was an der Einheit beschdigt bzw. getroen wurde. Engine Syntax: Name addEventHandler ["Engine", {hint str (_this)}] Wird ausgelst, wenn das Fahrzeug angeschaltet wird. Fired Syntax: Name addEventHandler ["Fired", {hint "Feuer einstellen"}] Dieser Eventhandler wird aktiviert, wenn die Einheit ihre Wae abfeuert. Fuel Syntax: Name addEventHandler ["Fuel", {hint str (_this)}] Wird ausgelst, wenn sich der Tankstatus ndert. (1=voll/0=leer) Gear Syntax: Name addEventHandler ["Gear", GearState] GearState: TRUE - Fahrwerk ausgefahren / FALSE Fahrwerk drin GetIn Syntax: Name addEventHandler [Name, Fahrzeugposition, Fahrzeugname] Wird ausgelst, wenn die Einheit in das Fahrzeug einsteigt. Positionen: Driver, Gunner, Commander, Cargo GetOut Syntax: Name addEventHandler [Name, Fahrzeugposition, Fahrzeugname] Wird ausgelst, wenn die Einheit aus dem Fahrzeug aussteigt. Hit Syntax: Name addEventHandler ["Hit", {hint "Diese Einheit wurde getroen"}] Diese Aktion lst nicht immer aus. Init Syntax: Name addEventHandler [] Macht nur in einer Cong Sinn! Wird beim Missionsstart ausgefhrt, aber eher unfunktionell und unwichtig. IncomingMissile Syntax: Name addEventHandler ["IncomingMissile", {hint "Treer"}] Wird ausgelst, wenn Einheit mit einer Rakete beschossen wird. Killed Syntax: Name addEventHandler ["Killed", {_this exec "script.sqs"}] Wird ausgelst, wenn die Einheit gettet wurde.

156

5.66 - Texteinblendarten
Texteinblendungen sind, wie sicher schon festgestellt, nicht nur wichtig fr eine Mission, sondern vor allem auch fr das Editing oder Scripting. Man hat hiermit die Mglichkeit sich Informationen ausgeben zu lassen, um spter darauf aufbauen zu knnen oder diese fr andere Bereiche verwenden zu knnen. Folgend nun eine Zusammenfassung der Texteinblendarten in Armed Assault. Hierbei wird auch nochmal erlutert, wie welche Texteinblendung gemacht wird und wie Textvariablen mit eingebunden werden knnen. Die Hint-Variante Zunchst gibt es da die Hint-Variante, mit welcher man oben links am Bildschirmrand eine Meldung bekommt. Diese kann man nun auf seine Bedrfnisse anpassen. Standard: hint "Mein Text"

Hier die Ausgabe der Koordinaten des Spielers ber Meeresspiegel: hint format ["Koordinaten: %1", getPosASL Player] hint format ["Ihre Flughhe betrgt %1", getPosASL Player select 2] Oder die Ausgabe der Waen bzw. Munitionstypen oder der Seite dieser Einheit: Kapitel 5 hint format ["%1", weapons Name]; hint format ["%1", magazines this]; hint format ["%1", side Name]; hint format ["%1 gegen %2", side Name1, side Name2]; Hier in Verbindung mit einem Eventhandler: Name addEventHandler ["Fired", {hint format ["%1", _this]}] Und hier mit Zugri auf einen Stringtablewert: hint localize "STR_MP_04" Die TitleText-Variante Die TitleText-Variante funktioniert vom Prinzip her genauso, wie die der Hint-Variante. Hier erfolgt die Einblendung nur eben dort, wo man sie deniert. Also zum Beispiel mitten auf dem Bildschirm oder am unteren Rand. Standard: titleText ["Paraiso\nOne day later","Plain",4]

Variante zum Ausgeben einer Entfernung zweier Einheiten bzw. Position Spieler: titleText [format["%1 Meter", Name1 distance Name2],"Plain Down"] titleText [format["%1 Meter", getPosASL Player select 2],"Plain Down"] Und hier mit Zugri auf einen Stringtablewert: titleText [format [localize "STR_ART_H7"], "Plain Down"]; 157

5.67 - Stringtable Grundwerte


In Armed Assault sind von Haus aus Unmengen an Textvariablen vordeniert, welche ja im gesamten Spiel in Form von Texteinblendungen im Men sowie im Spiel usw. auftauchen. Einige davon kann man somit hervorragend fr seine Mission verwenden, ohne eine eigene Stringtable.csv schreiben zu mssen. Hier eine kleine bersicht einiger mehr oder weniger wichtiger Stringtablewerte, welche man ganz einfach mit dem Hintoder Titletext-Befehl verwenden kann. Quelle
STR_ARMEDASSAULT_CAPITAL STR_ARMEDASSAULT STR_ARMA_SPLASH_1 STR_SAHRANI_ISLAND STR_SAHRANI STR_SAHRANI_SOUTH STR_SAHRANI_NORTH MISSION_COMPLETED_CA MISSION_FAILED_CA MISSION_SUCCESFULL MISSION_DEFEATED STR_MISSION_OBEY STR_MP_GAME_DESC_OBJECTIVES STR_MP_GAME_DESC_PILOTDOWN STR_MP_GAME_DESC_CSWEAP STR_MP_GAME_DESC_ESCAPE STR_MP_GAME_DESC_WARCRY STR_MP_GAME_DESC_CITYCONFLICT STR_ART_H1 STR_ART_H8 STR_ART_H7 STR_ART_H3 STR_ART_H6 STR_ART_H9 STR_ART_H10 STR_MARKER_START STR_WP_HOLD STR_WP_BASE STR_WP_ENEMYBASE STR_WP_MEETINGPOINT STR_WP_PICKUP STR_WP_SAD STR_WP_ATTACK STR_WP_DESTROY

Text

Armed Assault ARMED ASSAULT Prsentiert Sahrani Island Sahrani Das Knigreich Sd-Sahrani Demokratische Republik Sahrani Einsatz abgeschlossen Einsatz fehlgeschlagen Einsatz erfolgreich Feindliche Truppen besiegt Einsatz gescheitert. Sie haben die Befehle nicht befolgt. Zerstren Sie die feindlichen Ziele Finden und retten Sie die Piloten. Kehren Sie lebend zurck! Entkommen Sie im Hubschrauber von der Insel! Eine groangelegte Operation: Befreien Sie die Stadt. Erobern und verteidigen Sie die Stadt. Klicken Sie auf die Karte ZUERST GLTIGE ZIELKOORDINATEN EINGEBEN! ZIELKOORDINATEN AKZEPTIERT FEUERMISSION WIRD GESTARTET AUSSER REICHWEITE! NEUE ZIELPOSITION WHLEN! FEUERMISSION VORBEI KANN NICHT FEUERN Inltrationspunkt Position halten Basis Feindliche Basis Trepunkt Abholpunkt Suchen und zerstren Angreifen Zerstren STR_WP_DESTROYTARGET Ziel zerstren STR_WP_SEIZEANDHOLD Erobern und verteidigen STR_WP_EXTRACT Exltrationspunkt STR_MP_GAME_DESC_HUNTING Transportieren Sie unter Beschuss strategische Ressourcen

158

5.68 - Wegpunkte erzeugen


Armed Assault bietet die Mglichkeit Wegpunkte fr Gruppen bzw. Einheiten whrend des Spielens zu erstellen oder auch zu lschen und diese Wegpunkte auch mit Wegpunkttypen, also Wegpunktfunktionen zu versehen. Syntax: WP1 = Name addWaypoint [position, Radius] In folgendem Beispiel wird fr die Gruppe Group1 ein Wegpunkt mit Namen WP1 und einem Radius von 100 Metern an der Position des Spielers erstellt. WP1 = Group1 addWaypoint [position Player, 100] Dieser bekommt jetzt noch eine Wegpunktfunktion zugewiesen, welche im Kapitel 1.5 aufgelistet sind. In diesem Beispiel bekommt der WP1 die Funktion Sentry. WP1 setWaypointType "SENTRY" [Group1, 2] setWaypointType "SENTRY" Dazu gibt es jetzt noch eine Menge weiterer Mglichkeiten, diesen Wegpunkt zu denieren. Die grundlegenden Denitionen fr einen Wegpunkt ndet man im Kapitel 1.5 unter -Wegpunkte einfgen-. Zustzlich gelten folgende Befehle: Befehl
setWaypointBehaviour

Kapitel 5

Beispiel [Name, Wegpunktnummer] setWaypoint

[Group1, 2] setWaypointBehaviour "AWARE" Wegpunktname setWaypointBehaviour "AWARE" setWaypointCombatMode [Group1, 2] setWaypointCombatMode "RED" setWaypointDescription [Group1, 2] setWaypointDescription "Beziehen Sie Stellung" setWaypointFormation [Group1, 2] setWaypointFormation "LINE" setWaypointHousePosition [Group1, 2] setWaypointHousePosition 1 setWaypointPosition [Group1, 2] setWaypointPosition [position player, 0] setWaypointScript [Group1, 2] setWaypointScript "target.sqs player" setWaypointSpeed [Group1, 2] setWaypointSpeed "FULL" setWaypointStatements [Group1, 2] setWaypointStatements ["true", ""] setWaypointTimeout [Group1, 2] setWaypointTimeout [5, 10, 6] setWaypointType [Group1, 2] setWaypointType "HOLD" showWaypoint [Group1, 2] showWaypoint "ALWAYS" [Group1, 2] setWpPos [x, y, z] setWpPos _Pos = getWpPos [Group1,1] getWpPos

Wegpunkte entfernen So wie sich Wegpunkte erstellen lassen, kann man sie auch wieder entfernen. Dazu verwendet man folgende Syntax: deleteWaypoint [Name, Wegpunktnummer] deleteWaypoint Wegpunktname 159

5.69 - Auslser erzeugen


So einfach, wie sich Wegpunkte, Einheiten und auch Objekte erzeugen lassen, lassen sich natrlich auch Auslser erzeugen, was eine Menge neuer Mglichkeiten mit sich bringt. Hier wird erlutert und anhand von Beispielen gezeigt, wie man Auslser erzeugen und mittels Syntaxes kongurieren kann. Da ein Auslser, je nachdem was man machen mchte, ein wenig mehr als nur eine kurze Syntax bentigt, schlage ich vor, diesen per Skript oder Funktion zu erstellen. Hier eine genauere bersicht mit den jeweiligen Erluterungen dazu. CreateTrigger Mit diesem Befehl wird zunchst ein Auslser erstellt. Diesen kann man dann ganz normal mit einem Namen erstellen. Zunchst ist er aber dann noch roh und muss mit den hiernach erklrten Befehlen konguriert werden. Zunchst die Erstellung: ASL1 = createTrigger ["EmptyDetector", position Player] ASL1 = createTrigger ["EmptyDetector", [X,Y,Z]] Der Auslser mit Namen ASL1 wird damit an der Position vom Player oder eben der angegebenen Koordinate erstellt. SetTriggerArea Jetzt braucht der Auslser ASL1 noch eine Gre, Winkel und Form, welche nun wie folgt deniert werden. Dabei gibt man alles bis auf die Form in Zahlen an. Die Form, also Kreis oder Rechteck wird mit True und False deniert, wobei True fr Rechteck steht und False fr den Kreis. ASL1 setTriggerArea [X, Y, Winkel, Form] SetTriggerText Jetzt hat man die freie Wahl dem Auslser auch einen Text zuzuweisen. Dies macht vor allem Sinn, wenn man einen Funkauslser erstellen mchte. Dann hat man nmlich im Funkmen den entsprechenden Text dazu. ASL1 setTriggerText "Artillerie-Support" SetTriggerTimeout Hiermit lsst sich die Auszeit des Auslsers festlegen und, ob er als Countdown oder Timeout fungieren soll. Die Werte fr die Zeiten werden hierbei wieder ganz normal als Zahlwert eingetragen. ASL1 setTriggerTimeout [Min, Mid, Max, False]

160

SetTriggerType Zustzlich kann fr den Auslser ASL1 noch ein Typ festgelegt werden. Diese Typen sind ganz normal wie im Editor vordeniert. ASL1 setTriggerType "WIN" Typenbersicht: "NONE" "WEST G" "EAST G" "GUER G" "SWITCH" "END1" "END2" "END3" "END4" "END5" "END6" "LOOSE" "WIN" "WEST SEIZED" "EAST SEIZED" "GUER SEIZED" Keine Von West bewacht Von Ost bewacht Von Widerstand bewacht Schalter Ende 1 Ende 2 Ende 3 Ende 4 Ende 5 Ende 6 Verlieren Gewinnen Erobert durch Westen Erobert durch Osten Erobert durch Widerstand

Kapitel 5

SetTriggerActivation Hiermit deniert man die Art der Aktivierung, also ob der Auslser durch West, Ost, per Funk oder wie auch immer ausgelst werden soll. Die Syntax dafr lautet: ASL1 setTriggerActivation ["WEST", "EAST D", true] Dieser Auslser wurde nun wie folgt deniert: Aktivierung durch West // von Osten entdeckt // Mehrfach Erster Arrayteil: Seite: Funk: Sonstige: "NONE", "EAST", "WEST", "GUER", "CIV", "LOGIC", "ANY" "ALPHA", "BRAVO", "CHARLIE", "DELTA", "ECHO", "FOXTROT", "GOLF", "HOTEL", "INDIA", "JULIET", "STATIC", "VEHICLE", "GROUP", "LEADER", "MEMBER".

Zweiter Arrayteil: "PRESENT", "NOT PRESENT", "WEST D", "EAST D", "GUER D", "CIV D". Dritter Arrayteil: True steht hierbei fr Mehrfach- und False fr Einmal-Auslsung des Auslsers. 161

SetTriggerStatements Hiermit deniert man nun die Bedingungszeile, die Aktivierungszeile und die Deaktivierungszeile des zuvor erstellten Auslsers. Hier bitte auch die richtige Schreibweise im Array achten! ASL1 setTriggerStatements [Bedingung, Aktivierung, Deaktivierung] ASL1 setTriggerStatements ["this", "Wert = true", "Wert = False"] SetMusicEect Mit diesem Befehl wird der Musikeekt des Auslsers festgelegt. ASL1 setMusicEect "ATrack1" Die originalen Musikstcke erfordern keine Description.ext und lauten ATrack1 bis ATrack27. Die Namen der Queens Gambit Tracks gehen von QGTrack1 bis QGTrack9. SetSoundEect Mit diesem Befehl versieht man den Auslser oder mit einem Soundeect. ASL1 setSoundEect [Anonym, Stimme, Umgebung, Auslser] ASL1 setSoundEect ["Alarm, , , ] Hier nochmal eine kleine bersicht einiger Soundarten: Stream, Alarm, BadDog, BirdSinging, Chicken, Cock, Cow, Crow, Crickets1, Crickets2, Crickets3, Crickets4, Dog, Frog, Frogs, LittleDog, Music, Owl, Wolf

5.70 - Marker erzeugen


Bei den Markern hat man die Mglichkeit diese lokal oder global zu erstellen. Dies hat bei lokal den Vorteil, dass nicht mehr jeder die Marker sehen kann, sondern nur diejenigen die vorbestimmt sind. Also so kann man beispielsweise Marker nur fr die jeweilige Spielseite oder nur fr einen bestimmten Spieler erstellen. CreateMarker Mit diesem Befehl erstellt man den Marker zuerst, wobei man ihm einen Namen und eine Position zuweist. Merke: Normalerweise setzt man Marker beim Ansprechen in die " " . Die ist bei erstellten Markern nicht unbedingt notwendig. Grundstzlich ist es aber nicht schlecht die " " auch fr nachtrglich erstellte Marker zu verwenden. _Marker1 = createMarker ["M1", position Player] _Marker1 = createMarker ["M1", [X,Y]]

162

SetMarkerType Mit SetMarkerType legt man, wie der Name schon sagt, den Typ des Markers fest. "M1" setMarkerType "Arrow" Hier eine bersicht der verfgbaren Icon-Typen:
Objective Flag1 Dot Destroy Start End Warning Join PickUp Unknown Marker - Ziel (Flag) - Fahne - Punkt - Zerstren - Start - Ende - Achtung - Beitreten - Auesen - Unbekannt - Markierung Arrow Empty Select Vehicle Defend Move Attack Headquarters Depot Camp Town - Pfeil - Leer - Leerer Kreis - Vehikel - Verteidigen - Bewegen - Angreifen - Stab - Depot - Lager - Stadt SalvageVehicle - Bergungs Fhz RepairVehicle - Reparatur Fhz SupplyVehicle - VersorgungsFhz DestroyedVehicle - Zerstrtes Fhz MaintenanceTeam - Reparatur CommandTeam - Fhrungsstab SupplyTeam - Versorger InfantryTeam - Infanterie LightTeam - Leichte Inf. HeavyTeam - Schwere Inf. AirTeam - Luftabwehr FireMission - Firemission

SetMarkerText Hiermit legt man den Text fr den Marker fest. "M1" setMarkerText "Hold Position" SetMarkerShape Hier deniert man die Form des Markers. Also ob es ein Icon, Rechteck, oder Kreis sein soll. Bei Icons ist es nicht unbedingt ntig die Gre des Markers festzulegen, weil die normal angezeigt werden. Nicht aber bei Rechteck oder Kreis, da ist es wichtig dem Marker noch eine Gre zuzuweisen. "M1" setMarkerShape "ELLIPSE" Hierbei hat man die Auswahl zwischen: "RECTANGLE" "ELLIPSE" "ICON" SetMarkerBrush Mit dem SetMarkerBrush-Befehl kann man das Aussehen eines Marker mit dem MarkerShape Rectangle oder Ellipse bestimmen. "M1" setMarkerBrush "FDiagonal" Dabei stehen folgende Designs zur Verfgung: Horizontal - Horizontale Linien Vertical - Vertikale Linien Grid - Horizontales Raster DiagGrid - Schrges Raster FDiagonal - Schrge Linien BDiagonal - Schrge Linien Cross - Kreuz-Raster 163

Kapitel 5

SetMarkerColor Hiermit erfolgt die Festlegung der Farbe. Standardmig werden diese in rot erstellt was, wenn man diese Farbe behalten mchte, diesen berssig macht. "M1" setMarkerColor "ColorBlue" Hierbei stehen folgende Farben zur Auswahl: "ColorRed" "ColorRedAlpha" "ColorBlack" "ColorGreen" "ColorGreenAlpha" "ColorWhite" "ColorBlue" "ColorYellow" "Default"

SetMarkerSize Denition der Gre des Markers. Die Syntax dafr schaut wie folgt aus: "M1" setMarkerSize [100, 200] SetMarkerDir Mit SetMarkerDir erfolgt die Ausrichtung des Markers in Angabe von Grad. "M1" setMarkerDir 90 Marker lschen Fr das Lschen eines Marker gilt der altbewhrte Befehl: deleteMarker "M1" Lokale Marker erzeugen Das Erzeugen und Denieren der Eigenschaften eines lokalen Markers erfolgt genauso, wie auch bei den Globalen, nur dass der Befehl eben nur lokal gilt. Hierbei gelten genau die gleichen Befehle, welche nur die Erweiterung Local tragen. Ansonsten ist das Verfahren genau das Gleiche. Hier trotzdem nochmal die bersicht der Befehle fr lokale Marker: CreateMarkerLocal SetMarkerSizeLocal SetMarkerTextLocal DeleteMarkerLocal SetMarkerTypeLocal SetMarkerShapeLocal SetMarkerDirLocal SetMarkerColorLocal SetMarkerBrushLocal SetMarkerPosLocal

Weitere wichtige und vor allem grundlegende Informationen ndet man im Kapitel 1.7 unter Markierungen einfgen.

164

5.71 - Rund ums Vehikel


In diesem Unterkapitel sollen nochmal ein paar Dinge rund um Vehikel, also Fahrzeuge, erlutert werden. Hier gibt es ja die verschiedensten Dinge, die man machen oder auch abfragen kann. Deshalb nochmal diese durchaus wichtige Zusammenfassung. Schaden abfragen oder zuweisen Ein Schaden lsst sich gezielt zuweisen, abfragen oder es kann geprft werden, ob das Fahrzeug berhaupt noch fahren kann bzw. am Leben ist. ? getDammage Fahrzeug1 > 0.5 - Wenn Schaden grer als 0.5, dann... ?!(canMove Fahrzeug1) - Wenn Vehikel nicht mehr fahren kann, dann... ? !(alive Fahrzeug1) - Wenn Vehikelnicht mehr lebt, dann... Fahrzeug1 setDamage 0.5 - Setzt einen Schaden von 0.5 {_x setDamage 1} forEach crew Fahrzeug1 - Komplette Besatzung erhlt Schaden Die ersten drei Syntaxes lassen sich, wie gewohnt, in einem Prfauslser unter Bedingung eintragen. Dort bitte das Fragezeichen weglassen! Im Skript bleibt die Syntax so bestehen. Einheit in Fahrzeug Hiermit lsst sich prfen, ob sich eine Einheit in einem Fahrzeug bendet: Name in Fahrzeug Player in (crew Fahrzeug) Typ des Vehikels abfragen Wenn eine bestimmte Einheit oder der Spieler ein bestimmtes Fahrzeug benutzt, soll etwas ausgefhrt werden. Dazu verwendet man die nun folgende Syntax, wobei zwischen den Anfhrungszeichen der Klassenname des Vehikeltyps angegeben wird. typeOf vehicle Player == "M1030" typeOf vehicle Name == "AH1W" Fahrzeug fr bestimmten Einheitstyp sperren Mit TypeOf lsst sich nun der Typ einer Einheit prfen und somit auch ein Fahrzeug fr gewisse Einheitstypen sperren. Dies bietet sich an, wenn man machen mchte, dass nur der Einheitentyp Pilot ein Luftfahrzeug iegen darf. Dies lsst sich unter anderem neben einem Skript auch per Prfauslser realisieren. Prfauslser: Aktivierung: Achse a/b: Bedingung: bei Aktivierung: Mehrfach 0 typeOf driver Fahrzeug1 != "SoldierWPilot" Driver Fahrzeug1 action ["Eject",Fahrzeug1] Kapitel 5 165

Steigt jetzt ein Spieler mit einem anderen Einheitstyp in das Fahrzeug ein, lst der Auslser aus und der Spieler mit dem Actionbefehl Eject wieder aus dem Fahrzeug entfernt.

Fahrzeug fr Name sperren Mchte man ein Fahrzeug oder eine Fahrzeugposition fr den Spieler oder fr Einheit Name1 sperren, kann man dies unter anderem mit den nun folgenden Syntaxes machen. Als Beispiele sind ein Prfauslser und die Skriptvarianten angegeben. Prfauslser: Aktivierung: Achse a/b: Bedingung: bei Aktivierung: Skriptsyntaxes: ? vehicle Name1 == Fahrzeug1 : Name1 action ["Eject",Fahrzeug1] ? driver Fahrzeug1 == Name1 : Name1 action ["Eject",Fahrzeug1] ? gunner Fahrzeug1 == Name1 : Name1 action ["Eject",Fahrzeug1] ? commander Fahrzeug1 == Name1 : Name1 action ["Eject",Fahrzeug1] Geschwindigkeit eines Fahrzeugs abfragen/setzen Um die Geschwindigkeit eines Fahrzeugs als Bedigung fr etwas zu nutzen gilt: speed Fahrzeug1 > 30 und zum Festlegen einer Geschwindigkeit (Full,Normal,Limited,Auto): Fahrzeug1 setSpeedMode "Full" Fahrzeug1 forceSpeed 120 - Wert in km/h Fahrzeug1 limitSpeed 60 - Wert in km/h Fahrer oder Gunner vorhanden? Der Befehl isNull prft, ob die Position im Fahrzeug leer ist. Als Bedingungsabfrage gilt: isNull driver Fahrzeug1 - Ist Position Fahrer leer, dann... ! isNull driver Fahrzeug1 - Ist Position Fahrer besetzt, dann... Laufendes Fahrzeug Der Befehl isEngineOn prft, ob der Motor des Fahrzeugs eingeschaltet ist. isEngineOn Fahrzeug1 - Ist Motor von Fahrzeug1 an, dann... Tankstatus Folgende Befehle werden fr Tankstatus eines Fahrzeugs verwendet: Fuel Fahrzeug1 == 0.5 Fahrzeug1 setFuel 0.8 Fahrzeug1 setFuelCargo 1 166 - Ist Tankfllung gleich Wert, dann... - Setzt einen Tankfllwert - Setzt Tankwert fr Tankfahrzeug Mehrfach 0 Vehicle Name1 == Fahrzeug1 Name1 action [Eject, Fahrzeug1]

5.72 - Lichtquellen erzeugen


Lichtquellen lassen sich unter anderem per Skript oder auch Funktion erzeugen. In folgendem Beispiel wird eine Lichtquelle per Skript an der Position eines Objektes erzeugt. Dieses startet man dann mit folgender Syntax: [Objektname] exec "skripte\light.sqs" Light.sqs
_object = _this select 0; _light = "#lightpoint" createVehicle position _object; _light setLightColor [0, 0, 8]; _light setLightAmbient [0.9, 0.9, 0.9]; _light setLightBrightness (0.1 / 0.1); exit;

Hierbei hat man nun ganz einfach die Mglichkeit das Licht farblich frei zu gestalten. Dabei kommen, je nach Einstellung, die skurrilsten Farben zum Vorschein. Man muss dazu lediglich die Werte im jeweiligen Array ndern, was sich dann bei der nchsten Vorschau dann sofort bemerkbar macht. Die Nutzung der Dezimalwerte macht den Eekt aus! _light setLightColor [0, 0, 1] _light setLightAmbient [0, 0, 1] _light setLightBrightness (0.1 / 0.1) - Festlegung der Lichtfarbe - Festlegung des Umgebungslichts - Festlegung der Helligkeit Kapitel 5

Ein solches Licht lsst sich natrlich auch nur lokal erzeugen. Das macht man dann mit dem lokalen Createbefehl, der wie folgt lautet: _light = "#lightpoint" createVehiclelocal _pos

5.73 - Staub erzeugen


Folgend ein Beispiel einer kleinen Staubwolke. Diese kann man natrlich durch das verndern der Werte ganz schnell vergrern, verfrben oder natrlich auch verformen. [Objektname] exec "skripte\dust.sqs" Dust.sqs
_object = _this select 0 _dust = "#particlesource" createVehicle position _object; _dust setParticleParams [["\Ca\Data\Cl_basic.p3d", 1, 0, 1], "", "Billboard", 1, 0.7, [0, 0, 0], [0,0,0], 5, 0.2, 0.2, 0.0, [0.8, 1], [[0.7,0.6,0.5,0.25],[0.7,0.6,0.5,0.0]], [0, 1], 1, 0, "", "", _object]; _dust setParticleRandom [0, [0.5, 1.5, 0], [1, 1, 0], 0, 0, [0, 0, 0, 0], 0, 0]; _dust setParticleCircle [0, [0, 0, 0]]; _dust setDropInterval 0.02; ~2 deleteVehicle _dust exit;

167

5.74 - Rauch erzeugen


Hier ein kleines Beispiel, wie man eine Rauchsule in ArmA realisieren kann. Das dies noch ausbaufhig ist, sollte gnzlich klar sein, aber dieses kleine Beispiel ist mehr als nur ein guter Ansatz dafr. Rauch sowie Feuer erzeugt man mit so genannten Drop-Befehlen. Diese sind unter Umstnden meistens etwas lnger, wie man unten gut erkennen kann. Denn die beiden Zeilen ab Drop stellen wieder eine Zeile dar, was hier nicht mglich ist. In diesen Arrays werden die verschiedensten Dinge, wie Farbe, Form, Verhalten und Geschwindigkeit deniert. Das Ganze wurde hier in eine Schleife gepackt. Bei jedem Durchlauf wird der lokale Wert _i um den Wert 1 vergrert. Erreicht _i, wie im unteren Teil des Skriptes angegeben, den Wert 800, wir das Skript beendet und der Rauch hrt auf. Die Werte sind alle variable und knnen nach belieben angepasst werden. Das Skript startet man am Ende mit folgender Syntax: [Objektname] exec "skripte\smoke.sqs" Smoke.sqs _vehicle = _this select 0 _position = [0, 0, 0] _i = 0 #Loop _i = _i + 1 drop ["\ca\data\cl_basic", "", "Billboard", 6, 6, _position, [0,0,0], 1, 1, 1.5, 0.02, [1,30], [[0,0,0,0],[0,0,0,0.7],[0,0,0,0]], [0], 1.2, 1, "", "", _vehicle] ~0.1 ? _i == 800 : exit goto "Loop" Dieses Skript kann man nun hervorragend auslsen, wenn zum Beispiel ein Tankfahrzeug oder hnliches zerstrt wurde. Hier mal ein Prfauslserbeispiel: Prfauslser: Aktivierung: Achse a/b: Bedingung: bei Aktivierung: Einfach 0 not alive Fahrzeug1 [Fahrzeug1] exec "smoke.sqs"

Des Weiteren kann man noch die Position um das Objekt oder Fahrzeug bestimmen. Hierzu werden wieder die XYZ-Werte benutzt, welche im Array festgelegt sind. _position = [0, 0, 0] 168

5.75 - Feuer erzeugen


Mit folgendem Beispiel hat man die Mglichkeit ein Feuer an der Position eines Objektes zu erzeugen. Auch hier hat man wieder vollen Modikationsspielraum. Dazu kann man die skriptinternen Werte jederzeit seinen Ansprchen anpassen. Auch der Startauslsearray bietet einige freie Denitionsmglichkeiten. [Objekt,60,0] exec "skripte\re.sqs" Objekt steht fr Name des Objektes, der zweite Wert fr die Brenndauer in Sekunden und der dritte Wert fr die Hhe ber dem Objekt. Fire.sqs _object=_this select 0; _time=_this select 1; _zpos=_this select 2; _delay=0.15; _timecheck=0; _i=0 Kapitel 5 ; Die Folgende Zeile stellt eine Zeile dar, was hier nicht mglich ist: _light = "#lightpoint" createVehicle [(getPos _object select 0), (getPos _object select 1),_zpos]; _light setLightBrightness 0.03; _light setLightAmbient[0.03, 0.028, 0.0]; _light setLightColor[1.0, 0.9, 0.0]; #Loop _pos=getPos _object _x=(_pos select 0) _y=(_pos select 1) _z=(_pos select 2) _vx=0.2-(random 0.4) _vy=0.2-(random 0.4) _vz=random 0.15 _m=(2.1-(random 0.1)) _Fire=[2,6] select (random 1.5) ; Die Folgende Zeile stellt eine Zeile dar, was hier nicht mglich ist: drop [["\ca\data\ParticleEects\FireAndSmokeAnim\FireAnim",8,_Fire,32], "", "Billboard", 9, (0.7+(random 0.3)), [_x,_y,_z+_zpos+(random 1)], [_vx,_vy,_vz], 0, _m, 2, 1, [0.5,1,2],[[1,1,1,0.5],[1,1,1,1],[1,1,1,0]],[0], 0,0,"","",logic] Weiter auf der Folgeseite! 169

? _i<=3: goto "Loop2" _Smoke=3; _s=(2.2-(random 0.1)); ; Die Folgende Zeile stellt eine Zeile dar, was hier nicht mglich ist: drop [["\ca\data\ParticleEects\FireAndSmokeAnim\SmokeAnim",8, _Smoke,32], "", "Billboard", 9, (2.5+(random 0.5)), [_x,_y,_z], [_vx,_vy,_vz], 0, _s, 2, 2, [0.2,5],[[0,0,0,0],[1,1,1,0.8],[1,1,1,0]],[0], 0,0,"","",logic]; _i=0; #Loop2 ~_delay _i=_i+1 _timecheck=_timecheck+_delay ? _time>=_timecheck: goto "Loop" deleteVehicle _light exit Dieses Skript enthlt unter anderem eine Lichtquelle, einen Feuerdropbefehl und dazu einen Rauchdropbefehl und fast damit die Unterkapitel 5.73, 5.74 und 5.75 zu einer Aktion zusammen. Die Dropbefehle mssen logischerweise wieder in einer Zeile stehen! Das folgende Bild simuliert einen Motorbrand.

170

5.76 - Dienstgrad vergeben


Einheiten lassen sich auch whrend des Spielverlaufs befrdern. Das bedeutet, dass man den Spieler im Verlauf einer Mission oder Kampagne aufgrund seiner guten Leistungen befrdern oder bei schlechten Leistungen wieder degradieren kann. Dabei stehen folgende Dienstgrade zur Verfgung: Private Corporal Sergeant Lieutenant Captain Major Colonel Soldat Gefreiter Feldwebel Leutnant Hauptmann Major Oberst

Diese Dienstgrade lassen sich jetzt mit folgender Syntax vergeben: Name1 setRank "Major" oder Player setRank "Major" Kapitel 5 Anwendungsbeispiel Der Spieler soll befrdert werden, wenn er eine gewisse Punktezahl berschritten hat. Das knnte man jetzt auf verschiedene Art und Weise machen. Hier soll mal die Variante mit einem Prfauslser als Beispiel dienen. Prfauslser: Aktivierung: Achse a/b: Bedingung: bei Aktivierung: Einfach 0 Rating Player >= Wert Player setRank "Major"; hint format ["Sie wurden soeben zum %1 befrdert",rank Player]

Der Spieler wird nun befrdert, wenn er die Punktzahl erreicht hat. Als Bedingung Den Rang einer Einheit kann man jetzt auch als Bedingung fr etwas verwenden. Zum Beispiel bei der Vergabe von Waen oder dem Nutzen von Fahrzeugen. Zum Beispiel knnte man dem Spieler so das Nutzen von Fahrzeugen oder bestimmten Waensorten zunchst verbieten. Da Leistung gerne belohnt wird, wird er sich nun mehr anstrengen und versuchen Punkte zu sammeln, um mglichst schnell befrdert zu werden. ? rank player == "Major" : exit ? rank Name1 != "Major" : exit 171

5.77 - Einheit benutzt Fernglas


Diese Mglichkeit bietet zwar keinen groen Nutzen, aber ist fr Kamerasequenzen durchaus ein nettes Feature. Bevor die Einheit aber das Fernglas benutzt, muss man ihr erstmal eins zuweisen. Dies geht wie gewohnt mit: Name1 addWeapon "Binocular"; Nachdem die Einheit nun mit einem Fernglas ausgerstet ist, nimmt man sich den SelectWeapon-Befehl zur Hand und beelt der Einheit per Auslser oder Skript, wie nun folgt deniert, das Fernglas zu benutzen. Name1 selectWeapon "Binocular"; Name1 setBehaviour "safe"; Natrlich lsst sich dies auch mit einem Animationsbefehl umsetzen, wie in Kapitel 5.56 ausreichend erklrt ist.

5.78 - Einheit einen Fahrzeugplatz zuweisen


Es besteht die Mglichkeit einer Einheit einen Fahrzeugplatz zuzuweisen. Diese Einheit wird aber nach der Zuweisung nicht in dem Fahrzeug sitzen. Wozu soll das also nun gut sein? Man hat damit die Mglichkeit die Einheiten erstmal neben dem Fahrzeug zu positionieren und zum Beispiel bei Alarm den Befehl geben einzusteigen. Denn kein normaler Soldat sitzt ewig auf seinem Gunnersitz, wenn eigentlich gar kein Grund dazu besteht. So knnten also auch MGs oder Scheinwerfer erstmal unbesetzt bleiben und wenn beispielsweise der Alarm ausgelst wird, strmen die Einheiten zu ihren zugewiesenen Fahrezeugen etc.. Hinzu kommt, dass so auch der Spieler die Mglichkeit hat die Besatzung einer Panzers vorher schon auszuschalten, bevor sie eingestiegen ist. Dazu gelten die nun folgenden Befehle: Name assignAsCargo Truck1 Name assignAsDriver Panzer1 Name assignAsGunner Panzer1 Name assignAsCommander Panzer1 - Bekommt einen Mitfahrerplatz - Bekommt den Fahrerplatz - Bekommt den Schtzenplatz - Bekommt den Kommandantenplatz

Mit unAssignVehicle Name, verweist man die Einheit wieder eines Fahrzeugs. Sie wei dann, dass das unassigned Vehikel nicht mehr ihr Fahrzeug ist und steigt nach dem Aussteigebefehl auch nicht automatisch wieder ein. Nachdem man der Einheit ein Fahrzeug zugewiesen hat kann man ihr Befehlen ihren Platz darin einzunehmen. Dafr gilt folgende Syntax: [Name] orderGetIn true [Name] orderGetIn false - Einheit steigt ein - Einheit steigt aus

Fr mehrere Einheiten gilt folgende Syntaxform: [Name1, Name2, Name3] orderGetIn true 172

Es besteht auch die Mglichkeit sich ausgeben zu lassen welches Fahrzeug der Einheit zugewiesen wurde oder welchen Platz sie darin gerade bezogen hat. Gerade ein Spieler kann ja mehrere oder gar alle Positionen im Fahrzeug beziehen. Diese kann man dann als Bedigung fr etwas verwenden (siehe Kapitel 5.71). Zugewiesenes Fahrzeug ausgeben lassen: hint format ["Zugewiesenes Fahrzeug: %1", assignedVehicle Player] Gegenwrtige Position im Fahrzeug ausgeben lassen: hint format ["Position im Fahrzeug: %1", assignedVehicleRole Player]

5.79 - Einer Einheit ein Team zuweisen


Als Leader einer Einheit hat man die Mglichkeit seine Gruppenmitglieder in Teams aufzuteilen, welche dann Farbnamen bekommen. Dies ist natrlich auch im Editor mglich. Man kann so vorab schon die Gruppe des Spielers in unterschiedliche Teams aufteilen. Mi folgender Syntax teilt man eine Einheit einem Team zu: Name assignTeam "BLUE" und hiermit lsst man ihn wieder austreten: unassignTeam Name Man kann das Team auch wieder ausen. Dazu verwendet man folgende Syntaxform: dissolveTeam "BLUE" Als Teamfarben steht hierbei folgende Auswahl zur Verfgung: MAIN RED GREEN BLUE YELLOW

Kapitel 5

Im Editor sieht das Ganze dann wie folgt aus:


Kein Team Blaues und rotes Team Blaues, rotes, grnes Team

173

5.80 - Einheit gibt Befehle


Mit folgender Syntax gibt die jeweilige Einheit mit Namen Name1 den Befehl etwas auszufhren und fhrt es dabei selbst aus. Als Beispiel das erste Syntaxbeispiel. Bei diesem fhrt Name1 den Befehl CommanFire aus und schiet auf Name2. Name1 Name1 Name1 Name1

commandFire Name2 commandTarget Name2 commandMove Name2 commandStop Name2

- Name1 schiet auf Name2 - Name1 bekommt als Ziel Name2 - Name1 begibt sich zu Name2 - Name1 bleibt stehen

Das Ganze kann man natrlich noch gruppenbezogen aufhren. Jetzt kommt auch der Sinn des Command... etwas hervor. Wenn man nun dem Leader und den Einheiten den Befehl gibt, spricht der Leader oder die angegebene Einheit dieser Gruppe den Befehl hrbar aus, worauf die Untergebenen dann auch reagieren und den Befehl ausfhren. (units group Name1) commandFire Name2

5.81 - Hat Einheit Schaden erhalten?


Generell lsst sich der Schaden einer jeden Einheit oder auch eines Objektes abfragen und ausgeben bzw. als Bedingung verwenden. Hierbei gibt es unterschiedliche Mglichkeiten. Zum Beispiel, ob eine Einheit noch laufen kann oder in der Lage ist zu schieen. Hierfr machen wir uns die folgenden Befehle zu Nutze: canStand - canMove - canFire - handsHit - getDammage Folgend nun ein paar Syntaxbeispiele in Skriptform: ?! (canStand Name) : Name sideChat "Aah... meine Beine!" ?! (canMove Name) : Name sideChat "Mein Auto ist defekt!" ?! (canFire Name) : hint "Name kann nicht feuern!" ? (handsHit Name == 1) : Name sideChat "Aah... meine Hnde!" ? (getDammage Player) > 0.5 : hint "Du bist verletzt!" Bedenke: In der Bedingungszeile eines Auslsers setzt man kein ?, weil das schon integriert ist. Deshalb folgend nochmal kurz das Auslserbeispiel. Achse a/b: Bedigung: bei Aktivierung: 174 0 (handsHit Name == 1) Name sideChat "Aah... meine Hnde!"

5.82 - Der Flugverkehr


Auch der Flugverkehr hat sein System und seine Ordnung. Und so gibt es auch dabei so einiges zu beachten. Zunchst ist wichtig zu wissen, dass der Startugplatz auch immer der Heimatugplatz ist. Der Flieger bekommt den Wert des Heimatugplatzes automatisch zugewiesen. Wenn also die Engine bemerkt, dass der Heli1 auf Flugplatz A steht, bekommt er automatisch den Wert des Flugplatzes A zugewiesen. Startet der Flieger zu Missionsbeginn aber irgendwo in der Luft, so bekommt er automatisch den nchstgelegenen Flugplatz als Heimatugplatz zugewiesen. Jeder Flugplatz hat also einen Wert, welchen man einem Flieger zuteilen kann. Die Werte fr die einzelnen Flugpltze sind dabei wie folgt zugeordnet: 0 1 2 3 - Paraiso - Rahmadi - Pita - Antigua

Mchte man nun einen Flieger einen Flugplatz zuweisen, macht man dies mit: Flieger1 assignToAirport 1 Diesem Flieger1 kann man nun auch befehlen auf einem der Flugpltze zu landen. Flieger1 landAt 1 Nachdem nun bekannt ist, dass die Flupltze eine festen Index haben und dass man seinen Flugzeugen und Hubschraubern einen Flugplatz zuweisen und diese dort landen lassen kann, fehlt eigentlich nur noch eines. Der Flugplatz braucht noch eine Seite. Diese vergibt man mit folgender Syntax: 0 setAirportSide WEST WEST EAST GUER CIV LOGIC

Kapitel 5 175

5.83 - Grasdetails heruntersetzen


Die Grasdetails lassen sich whrend des Missionsverlaufs ganz einfach herabsetzen oder gar ganz entfernen. Damit wre die Landschaft dann frei von Gras. Das Herabsetzen des Grasbewuchses knnte man zum Beispiel nutzen, wenn Frames gerade wichtiger sind, als es das Gras ist. Zum Beispiel eine Sequenz oder was auch immer. Die Syntax dafr lautet: setTerrainGrid 12.5 Dafr gibt es fest vergebene Werte. Gibt man stattdessen einen anderen Wert an, whlt die Engine automatisch den nch denierten Wert. Hierbei gil, je kleiner der Wert, desto grer der Grasanteil. Die Werte lauten dabei wie folgt: 50 25 12.5 6.25 3.125 - Kein Gras - Weniger Gras - Mittelmiges Gras - Standardgras - Hoher Grasanteil

5.84 - Objekte schrg platzieren


Mit folgenden Syntaxformen lassen sich Objekte schrg platzieren. Dies ermglicht es ganz leicht, Fahrzeuge, Objekte, oder was auch immer, auf die Seite zu kippen oder gar aufs Dach zu legen. Dazu gelten alle Werte zwischen -1 und 1. Dabei gelten folgende Syntaxes: Objekt setVectorUp [0,0,0] Objekt setVectorDir [0,0,0] Beide Arten gibt es auch als Kombination: Objekt setVectorDirAndUp [[0,0,0],[0,0,0]] Die Reihenfolge der Koordinaten ist bei allen Varianten nicht xyz, sondern xzy! Objekt setVectorUp [x,z,y]

176

5.85 - Missionen verschlsseln bzw. freischalten


Einige originale Armed Assault Missionen greifen auf diese Verschlsselung zurck. Das bedeutet, dass man sie erst spielen kann, wenn man vorher die Ausbildungen absolviert hat oder gewisse andere Missionen zuvor gespielt hat. Das Ganze macht fr eine einzelne Mission nicht unbedingt viel Sinn, da sie der User, der sie zuvor heruntergeladen hat, ja spielen mchte. Als Beispiel knnte man zwei Missionen releasen, bei der man die Zweite verschlsselt und erst freischaltet, wenn der Spieler die erste gespielt hat. Die Keys mssen in der Description.ext aufgefhrt werden.Dabei gelten folgende Regeln: keys[] = {"Key1", "Key2", "Key3"}; keysLimit = 2; doneKeys[] = {"Key4"}; - Hier werden die geforderten Keys aufgefhrt - Mindeste Anzahl der bentigten Keys, um die Mission freizuschalten - Name des Keys welcher in den SP-Missionen als abgehakt dargestellt wird.

Nach erfolgreicher Beendigung der Mission, gibt man nun folgende Syntax an: activateKey "Key1" Mehr zu diesem Thema ndet sich im Kapitel 11.2 - Die ArmA-Cheats -.

5.86 - Leerer Scheinwerfer mit Licht


Setzt man einen, mit einer KI besetzten, Scheinwerfer auf die Karte, so wird dieser bei Nacht automatisch angeschaltet sein. Bei einem leeren Scheinwerfer sieht das Ganze schon wieder anders aus. Wenn man ihn leuchten lassen mchte, ohne dass eine Einheit dahinter steht, geht das unter anderem mit der Verwendung einer Spiellogik. Dazu setzt man zunchst einen leeren Scheinwerfer mit dem Namen Lampe1 und eine Spiellogik auf die Karte, wobei man in die Initialisierungszeile der Logik folgendes angibt: this moveInGunner Lampe1 Die Spiellogik ist damit sozusagen die KI, die den Scheinwerfer bedient. Nachteil dabei ist, dass die Logik den Scheinwerfer nicht bewegt. In Verbindung mit dem Skriptbeispiel aus Kapitel 6.14 besteht natrlich die Mglichkeit diesen beweglich zu machen. Das Ganze gilt natrlich auch fr Fahrzeuge. Mchte man ein leeres Fahrzeug mit eingeschaltetem Licht auf der Karte platzieren, regelt man das auch mit einer Logik!

177

Kapitel 6
- Missions Specials Nachdem du nun alle Kapitel aufmerksam durchgelesen haben solltest, kommen hier ein paar Besonderheiten fr deine Mission, die sich mit ein klein wenig mehr Aufwand schnell realisieren lassen. Deine Mission wird Dank dieser Zustze um einiges interessanter und spannender werden. All die Features dieses Kapitels sind zwar auf Skriptbasis aufgebaut, sind deshalb aber keineswegs weniger funktionell oder weniger gut als Funktionen. Die Scripte sind teiweise so aufgebaut, dass du sie verstehen kannst, um besser in die Thematik einsteigen zu knnen. Verbesserungs- oder Erweiterungsmglichkeiten gibt es bei jedem dieser Skripte. Da diese Beispiele teilweise sehr umfangreich sind und ein Abtippen oft zu Fehlern fhrt, werden diese auch in Foren wie www.forum.german-gamers-club.de oder www.mapfact.net von mir, mit geeigneter Beispielmission, zum Download angeboten. 6.1 6.2 6.3 6.4 6.5 6.6 6.7 6.8 6.9 6.10 6.11 6.12 6.13 6.14 6.15 6.16 6.17 6.18 6.19 6.20 6.21 6.22 6.23 6.24 6.25 Die Fallschirmspringer Das GPS-System Der Actionmeneintrag Der Rucksack Zufallspositionen Der Mapclick Die Artillerie Tote Einheiten bzw. Fahrzeuge lschen Spielbeschleunigung dauerhaft unterdrcken Der Bullet Mode Das Feindmeldeskript Der Airstrike Der Airvehiclecreator Der Scheinwerfer Der Zeitzhler Das House-Patrol-Script Das Minen-Skript Das Vehikeltransportskript Das Mwenkript Das Insektenskript Der Bombenleger Der Aufklrer Einheit ergibt sich Der Teleport Das Verfolgungsskript 179 180 181 181 185 187 189 194 195 196 197 198 201 203 204 205 208 209 213 215 216 217 218 221 222

178

6.1 - Die Fallschirmspringer


Fallschirmspringer sind ein nettes Feature fr jede Mission. Hier wird eine von vielen mglichen Varianten erlutert. Der Helikopter Zunchst erstellt man einen Helikopter, hier mit dem Namen Heli1. Wenn dieser zunchst noch nicht iegen soll, setzt man den Spritwert des Helis zunchst mit dem Befehl this setFuel 0 auf leer. Wenn der Heli spter starten soll, muss der Wert wieder auf 1 gesetzt werden. Zur Zeit steigt die Besatzung noch aus, wenn Fuel auf 0 steht. Patchhonung. Die Flughhe Die Flughhe sollte schon mindestens 80 bis 100 Meter betragen, da sich die Einheiten sonst verletzen knnten. Diese legt man mit folgender Syntax fest: Heli1 yInHeight 120 Die Landezone Die Landezone sollte fernab von Ortschaften und dichten Wldern sein, um der KI eine gute Landemglichkeit zu bieten. Andernfalls knnten Verletzungen oder hnliche Probleme auftreten. Die Gruppe Damit die Gruppe am Missionsstart schon im Helikopter sitzt, bekommt der Leader der Gruppe, welche hier mal Gruppe1 heit, folgenden Eintrag in seine Initzeile: Kapitel 6 {_x moveInCargo Heli1} foreach units Gruppe1 Das Skript Das Skript, welches frei benannt werden kann, sieht dabei wie folgt aus:
_aunits = units Gruppe1; _i = 0; _j = count _aunits; #Here (_aunits select _i) action ["EJECT", Heli1] ; unAssignVehicle (_aunits select _i) ; _i=_i+1; ~1 ?_j>_i : goto "Here" exit;

Das Skript kann man dann beispielsweise am Absprungpunkt per Wegpunkt oder Auslser mit der Syntax this exec "skripte\heli.sqs" starten. Eine weitere Mglichkeit, ohne ein eigenes Skript anlegen zu mssen wre die Verwendung eines im Spiel integrierten Skriptes, welches wie folgt ausgelst wird: [Gruppe,Heliname] exec "para.sqs" 179

6.2 - Das GPS-System


Dieses System ist sehr nutzvoll, wenn man mehrere Einheiten auf dem Schlachtfeld mit taktischen Zeichen versehen will bzw. einfach nur den eigenen Standort oder den einer anderen Einheit auf der Karte verfolgen mchte. Hierzu wird wieder ein Skript verwendet, welches in der Init.sqs oder Initzeile des Spielers gleich zu Missionsbeginn gestartet wird. Dieses nun erluterte Skript setzt nicht nur die Marker an die Position der angegebenen Einheiten, sondern prft dazu noch, ob diese noch am Leben sind. Ist dies nicht der Fall, wird der Marker gelscht. Beispiel 1:
"S1-Symbol" setMarkerText Name Soldat1; #Start ; Prfen, ob Soldat1 lebt. Wenn nicht, springt das Skript zum Label Ende. ? (!(alive Soldat1)) : goto "Ende"; ; Marker setzen #Marker "S1-Symbol" setMarkerPos getpos Soldat1; ~1 ;Skript springt wieder zum Start goto "Start"; #Ende deleteMarker "S1-Symbol"; exit;

Beispiel 2: Dies lsst sich natrlich auch per If-Then-Else-Syntax realisieren, welche in einer Zeile stehen sollte, was hier leider aus Platzgrnden nicht mglich ist. Diese Variante ist krzer, da man alles in wenige Befehlszeile packen kann.
#Start If(alive Soldat1)Then{"S1-Symbol" setMarkerPos getpos Soldat1} Else{"S1-Symbol" setMarkerType "Empty";exit}; ~0.5 Goto Start ;

Erklrung: Wenn (If) Soldat1 lebt dann (Then) setze S1-Symbol auf Soldat1 ansonsten (Else) lsche S1-Symbol und verlasse Skript (Exit). Anmerkung: Ein weiteres beliebtes GPS-Verfahren, welches hier nicht erklrt wird ist, die Marker fr die jeweilige Einheit erst mit dem Skript zu erstellen und an sie zu heften. Wer aber dieses Buch sogfltig durcharbeitet, ist im Anschluss selbst in der Lage so etwas zu skripten. 180

6.3 - Der Actionmeneintrag


Das Actionmen ist jenes, welches sich rechts unten in der Ecke bendet. Hier ist es mglich Eintrge hinzuzufgen und diese spter auch wieder zu entfernen. Zum Hinzufgen eines Eintrages bentigt man zunchst diese Syntax: ID = Player addAction ["Eigener Eintrag","skript.sqs"] whrend man zum Entfernen diese Syntax verwendet: Player removeAction ID Zum Lschen des Eintrages gibt man lediglich den Namen des Eintrags an, welcher hier kurz mit ID festgelegt wurde. Mchte man einen Eintrag haben, wenn die Einheit in einem Fahrzeug sitzt, gibt man dazu den Fahrzeugnamen an. ID = Fahrzeug addAction ["Eigener Eintrag","skript.sqs"] Auslserbeispiel: Zunchst setzt man einen Auslser auf die Karte, verbindet ihn mit dem Spieler, so dass nur er ihn auslsen kann und nimmt etwa folgende Einstellungen vor: Aktivierung: Achse a/b: bei Aktivierung: bei Deaktivierung: Mehrfach 5 ID = Player addAction ["Eigener Eintrag","skript.sqs"] Player removeAction ID Kapitel 6

Zum Testen luft man nun ein paar Mal in den Bereich und wieder raus. Das Ergebnis wird sein, dass der Eintrag beim Betreten erscheint und beim Verlassen wieder verschwindet.

6.4 - Der Rucksack


Mit Hilfe der Actionmeneintrge kann man nun hervorragend einen Rucksack, Beintaschen oder hnliches simulieren. Hier mal als kleines Feature das Rucksackbeispiel, an welchem man gut erkennen kann, was mit den Eintrgen so alles mglich ist. Dieses Beispiel ist zunchst nur fr Einzelspieler ausgelegt. Zunchst setzt man dazu den Spieler mit folgendem Eintrag in der Initzeile: RID = Player addAction ["Open Backpack","backpack\rucksack.sqs"] Fr den Rucksack legt man nun im Missionsordner einen eigenen Unterordner namens Backpack an. Dateien im Missionsordner bitte immer klein schreiben! In diesen Ordner kommen nun die Skripte fr die verschiedenen Aktionen. Fr diesen Fall werden jetzt mal die vier folgenden Skripte angelegt. rucksack.sqs save.sqs rstaid.sqs close.sqs 181

Rucksack.sqs Hier wird zunchst der Eintrag -Rucksack nen- entfernt und erst dann werden die anderen Eintrge hinzugefgt. Die Besonderheit hierbei ist, dass man nur drei Mal die Mglichkeit hat sich zu heilen. Damit nun immer der richtige Eintrag erscheint, wird bei jedem Heilen eine Variable auf true gesetzt und beim Wideraufruf des Skriptes bercksichtigt. Angenommen man htte jetzt schon 3 Mal gespeichert (siehe: ? verband3 : goto "Close), wre die Variable Verband3 schon true und somit springt das Skript zum Label #Close ber und fhrt die Close.sqs aus. Das Skript wre somit beendet.
; Eintrag wird entfernt Player RemoveAction RID Playsound "Rucksackauf" ; Eintrge werden hinzugefgt RIID = Player AddAction ["- Speichern","backpack\save.sqs"]; #Verband ? verband3 : goto "Close"; ? verband2 : goto "Verband3"; ? verband1 : goto "Verband2"; #Verband1 RIIID = Player AddAction ["- First aid (3)","backpack\rstaid.sqs"]; goto"Close"; #Verband2 RIIID = Player AddAction ["- First aid (2)","backpack\rstaid.sqs"]; goto"Close"; #Verband3 RIIID = Player AddAction ["- First aid (1)","backpack\rstaid.sqs"]; #Close RIIIID = Player AddAction ["- Close Backpack","backpack\close.sqs"]; exit;

Eine weitere Besonderheit bei diesen Skripten ist, dass hier fr die jeweiligen Aktionen Sounds angegeben wurden. Siehe: Playsound "Rucksackauf". Diese, welche natrlich nicht unbedingt wichtig sind und daher auch wegfallen knnten, mssen natrlich zuvor in der Description.ext deniert werden. Ein zweites Feature hierbei ist, dass der Spieler bei der jeweilig durchgefhrten Aktion eine Animation ausfhren soll, um es etwas realistischer zu gestalten. Als Beispiel hierfr dient die nun folgende FirstAid.sqs, bei der der Spieler, wenn er sich heilt, auf dem Boden liegen soll. Achtung! Diese vier Skripte sind miteinander verschachtelt!

182

Firstaid.sqs Hier sieht man nun, dass das Skript zunchst prft, ob und wie oft schon gespeichert wurde. Wrde man zum ersten Mal speichern, wre noch keine Variable auf true geschaltet. Das Skript wrde zum Label #Verband1 durchlaufen, die Variable Verband1 auf true setzen und von dort aus auf das Label #Heilen springen, wo alle Untereintrge wieder gelscht werden, der Spieler wieder den Eintrag Open Backpack bekommt und die Aktionen durchgefhrt werden, die zur Heilung fhren. Beim zweiten Speichern wrde das Skript beim Prfen zum Label #Verband2 springen, da ja Verband1 bereits true ist. Beim dritten Speichern wrde es gleich von der zweiten Zeile aus zu Label #Verband3 springen. Jetzt wre auch Verband3 true und das Skript wrde beim nochmaligen Ausfhren sofort beendet (? verband3 : exit).
? verband3 : exit; ? verband2 : goto "Verband3"; ? verband1 : goto "Verband2"; #Verband1 verband1=true; goto "Heilen"; #Verband2 verband2=true; goto "Heilen"; #Verband3 verband3=true; goto "Heilen"; #Heilen RID = Player AddAction ["Open Backpack","backpack\rucksack.sqs"]; Player RemoveAction RIID; Player RemoveAction RIIID; Player RemoveAction RIIIID; ~0.2 Player playmove "AinvPknlMstpSlayWrDnon_healed"; ~1 Playsound "Sanipack"; ~2 Player switchmove "AinvPknlMstpSlayWrDnon_healed"; ~5 Playsound "Schmerz"; ~1 Player setdammage 0; exit;

Kapitel 6 183

Save.sqs Hier kommt nun die Save.sqs, mit welcher das Spiel gespeichert wird. Zunchst werden wieder alle Eintrge gelscht, in dem von hier aus die Close.sqs gestartet wird und dann das Spiel gespeichert.
[] exec " backpack\close.sqs"; Savegame; exit;

Close.sqs Und hier natrlich noch die letzte Datei, die gebraucht wird, wenn man den Eintrag Close Backpack bettigt.
Playsound "Rucksackzu"; Player RemoveAction RIID; Player RemoveAction RIIID; Player RemoveAction RIIIID; RID = Player AddAction ["Open Backpack","backpack\rucksack.sqs"]; exit;

Jetzt nur nochmal eine nhere kurze Beschreibung der vergebenen Eintrags-namen, dann kann der Rucksack erfolgreich gepackt werden. Name: RID Der Eintrag, der fr das nen des Rucksackes zustndig ist. RID = Player addAction ["Open Backpack","backpack\rucksack.sqs"] Name: RIID Der Name, der fr das Speichern festgelegt wurde. RIID = Player addAction ["- Speichern","backpack\save.sqs"] Name: RIIID Wurde fr alle Firstaid-Eintrge deniert, da ja immer nur einer aktiv ist. RIIID = Player addAction ["- First aid (1)","backpack\rstaid.sqs"] RIIID = Player addAction ["- First aid (2)","backpack\rstaid.sqs"] RIIID = Player addAction ["- First aid (3)","backpack\rstaid.sqs"] Name: RIIIID Ist der Name, der fr das Schlieen des Rucksacks deniert wurde. RIIIID = Player addAction ["- Close Backpack","backpack\close.sqs"] 184

6.5 - Zufallspositionen
Eine Mission, die immer gleich abluft, kann mit der Zeit sehr langweilig werden und wird daher schnell zur Seite gelegt oder gelscht. Hat man aber eine Mission geschaen, welche eine Menge berraschungen aufweist und man nie genau wei woher die Feinde kommen werden, ist doch da schon mal ein wenig mehr Spannung vorhanden. Gerade im Mehrspielerbereich kann es sehr anstrengend sein, wenn man dauernd gesagt bekommt, wo was steht und von wo der Feind kommt. Dazu kann man noch verschiedene Startpunkte fr den Spieler oder auch verschiedene Zielpunkte denieren. Natrlich hat man ja im Editor bei jeder Einheit die Mglichkeit den Radius der Platzierung festzulegen, was ja auch eine Menge Dynamik bringt. Diese nun erluterte Variante ist aber eher fr feste Punkte bestimmt, die zuvor deniert wurden. Dieses Skript startet man von der Initzeile des Spielers oder der Init.sqs, um ganz zu Anfang die Positionen festzulegen. Beispiel: Dynamische Startpunkte Hierbei macht man sich den Random-Befehl zunutze. Das Ganze kann dann in Skriptform etwa wie folgt aufgefhrt aussehen: Hier wurde ein Randomwert von 3 verwendet. Beim Starten des Skriptes wird ein Wert ausgelost und danach geprft wie gro dieser Wert ist. Dann folgt der nchste Schritt. Kapitel 6 Ist er kleiner als 1 springt das Skript zu #P1 Ist er kleiner als 2 springt das Skript zu #P2 Ist er kleiner als 3 springt das Skript zu #P3 Hinter dem jeweiligen Label, also beispielsweise #P1, kann man nun die Position angeben. Bei #P1 und #P2 wurde jeweils eine XYZ-Position deniert, whrend der Spieler bei #P3 auf ein unsichtbares Heli-H namens HP1 gesetzt wird, was auch eine Mglichkeit ist.

_start = random 3; ? _start < 1 : goto "P1"; ? _start < 2 : goto "P2"; ? _start < 3 : goto "P3"; #P1 Player setpos [x,y,z]; exit; #P2 Player setpos [x,y,z]; exit; #P3 Player setpos getpos HP1; exit;

Man spart sich dann den Aufwand die XYZ-Positionen zu ermitteln und setzt stattdessen lediglich ein paar unsichtbare Heli-Hs auf die Karte und benennt sie entsprechend. Hierbei bietet sich zustzlich an, den Radius der Platzierung des einzelnen Heli-Hs auszunutzen und ihm einen groen Radius zu geben. Jetzt htte man zum Einen die Dynamik, dass man nicht wei, an welche Position (P1,P2,P3) der Spieler gesetzt wird und zum Anderen, dass das jeweilige Heli-H ja auch noch einen Platzierungsradius hat, so dass der jeweilige Punkt auch nicht genau deniert werden kann. 185

Beispiel: Dynamische Startpunkte Koordinatenbezogen In dem folgend erluterten Beispiel wird ein XYZ-Punkt bestimmt, welcher mit einem zustzlichen variablen Platzierungsradius (_radius = 500) versehen wird. Zunchst wird die Position _pos mit [0,0,0] deniert, der Radius bestimmt und fr _start ein Randomwert von 3 deniert, welchen das Skript beim Start zufllig bestimmt. Danach prft das Skript, wie gro dieser Wert ist und springt an die jeweilige Position. _pos bekommt dann einen der drei XYZ-Werte zugewiesen (_pos = [X,Y,Z]), welche man vorher rausgesucht und deniert hat. Nun hat _pos eine feste XYZ-Position erhalten und bekommt jetzt noch einen zustzlichen Radius (_radius = 500) um diese Position zugewiesen, in welchem die Einheit, hier der Spieler, dann per Zufall gesetzt wird.
_pos = [0,0,0] ; _radius = 500; _start = random 3; ? _start < 1 : _pos = [X,Y,Z]; ? _start < 2 : _pos = [X,Y,Z]; ? _start < 3 : _pos = [X,Y,Z]; ; Diese Zeile sollte in einer Zeile deniert werden, was hier nicht mglich ist: _pos = [(_pos select 0) + _radius/2 - random _radius, (_pos select 1) + _radius/2 - random _radius, _pos select 2]; Player setPos _pos; exit;

Auf eine Karte kann man sich das etwa so vorstellen, wobei die grnen Marker die Startpunkte des Spielers oder der Einheit darstellen.

186

6.6 - Der Mapclick


Der Mapclick ernet jedem Missionsdesigner eine Menge Mglichkeiten, wie man anhand dieses Kapitels im Unterbereich Die Artillerie sehr gut erkennen kann. Natrlich gibt es noch viel mehr Mglichkeiten diesen einzusetzen. Als Beispiele dienen hier das steuern von anderen Gruppen, Anforderung eines Airstrikes, steuern von Nachschubbewegungen und vieles mehr. Dieses Beispiel ist fr Einzelspieler ausgelegt. Anhand des folgenden Beispiels soll eine KI-Gruppe namens Alpha1 durch den Spieler per Funkmen frei auf der Karte gesteuert werden. Dabei wird die Zielposition zunchst mit einem Mapklick festgelegt und dazu ein Marker mit Namen AMoveP an die geklickte Stelle gebeamt. Im gleichen Moment bekommt der Leader der Einheit den Befehl sich zum Marker AmoveP zu bewegen und besttigt dies mit einem eingespielten RogerSound, welchen man dazu selbst in der Description.ext denieren muss. Die Gruppe selbst wird, wie in diesem Kapitel unter Das GPS-System erklrt, mit einem Marker auf der Karte gekennzeichnet und verfolgt, was hier jetzt aber nicht weiter erklrt wird. Der Marker AmoveP soll dann wieder von der Karte verschwinden und erst beim nchsten Mapclick wieder auftauchen. Dazu wird dieser Marker am Skriptende so lange an die Position [0,0] gebeamt.

Gruppe Alpha 1: Name: Initzeile: Gruppengre: Funkauslser: Aktivierung: Achse a/b: Text: bei Aktivierung: Marker: Name: Text: Symbol: Achse a/b:

Alpha1 Alpha1=group this Frei festlegbar

Kapitel 6

Radio Alpha Mehrfach 0 0-0-1 Alpha 1 [] exec Scripts\Alpha.sqs"

AmoveP Alpha 1 Movepoint Dot 1

187

Alpha.sqs Bei dem Skript geschieht nun folgendes. Zunchst wird die Variable alphaclick auf true gesetzt und auf dem Monitor erscheint ein Text, der den Spieler auordert auf die Karte zu klicken. Danach merkt sich ArmA, was bei onMapSingleClick festgelegt wurde und das Skript pausiert bei @!alphaclick, bis der Spieler auf die Karte geklickt hat und damit alle Befehle nach OnMapSingleClick in den " " ausgefhrt werden. Unter anderem wird dort die Variable alphaclick wieder auf false gesetzt. Jetzt wird der Einblendtext wieder gelscht und ein Soundsample namens Roger abgespielt. Nach einer Pause von 20 Sekunden, wird der Marker AmoveP zu einer nicht sichtbaren Position gebeamt und verschwindet somit bis zum nchsten Klick wieder.
alphaclick=true; titletext ["Klicke auf die Karte!","plain down"]; ;Die folgende Zeile muss in einer Reihe stehen, was hier nicht mglich ist. onMapSingleClick "Leader Alpha1 move _pos; alphaclick=false;""AMoveP"" setMarkerPos _pos"; @!alphaclick; onMapSingleClick ""; titleText ["","plain down"]; ~1 playSound "Roger"; ~20 "AMoveP" setMarkerPos [0,0] ; exit;

188

6.7 - Die Artillerie


Ein ganz besonderes Feature in einer Mission ist die Artillerie. Sei es, dass der Spieler die Mglichkeit hat dieser per Mapclick einen Zielpunkt zu geben oder, dass die KI Artillerieuntersttzung zu der Position einer entdeckten Feindeinheit, zum Beispiel dem Spieler, ruft. Die Besonderheit an dieser Artillerie ist, dass diese auch wirklich auf der Karte existent ist, was fr ein Artillerieskript eigentlich nicht unbedingt wichtig ist. Hinzu kommt, dass man den Geschtzen jederzeit zuschauen kann, wie sie ihre Rohre ausrichten und danach in die fr sie festgelegte Richtung feuern. Dies ist leider nicht ohne ein wenig Skriptaufwand mglich, welcher aber noch recht berschaubar ist. Zunchst nimmt man einige Einstellungen im Editor vor und erstellt im Missionsordner einen Unterordner namens: Artillerie (klein geschrieben!) Spielerbezogen: Der Spieler soll per Funk die Mglichkeit haben Artillerie zu rufen und dieser per Mapclick auf der Karte einen Zielpunkt zuweisen knnen. Dabei soll ein Marker namens Firepoint diesen Punkt whrend des Feuervorgangs markieren und danach wieder verschwinden. Funkauslser: Aktivierung: Achse a/b: Text: bei Aktivierung: Marker: Name: Symbol: Achse a/b: Firepoint Destroy 1 Radio Alpha Mehrfach 0 0-0-1 Artillerie [] exec Artillerie\Setre.sqs"

Kapitel 6

Unsichtbares Heli H: Name: Position: Die Geschtze: Dieses Beispiel ist mit 6 Geschtzen der Seite BLUEFOR und dem Geschtztyp M119 deniert. Diese setzt man auf die Karte und benennt diese wie folgt: Namen: W1, W2, W3, W4, W5, W6 ATarget Irgendwo auf die Karte

Ein anderer Geschtztyp funktioniert bei diesem Beispiel nicht! Erklrung folgt. 189

Setre.sqs Beim Benutzen des Funkauslsers, wird das nun folgende Skript gestartet. Dabei wird die Variable setre auf true gesetzt und es erscheint ein Text (titleText), der den Spieler auordert auf die Karte zu klicken, um so den Feuerpunkt zu bestimmen. In der darauf folgenden Zeile wird die Denition des Mapclicks gestartet und das Skript pausiert an der Position @!setre und wartet darauf, dass der Spieler auf die Karte klickt. Beim Klicken wird das unsichtbare Heli-H namens ATarget an die angeklickte Position _pos gebeamt, die Variable setre wieder auf false gesetzt und somit die Bedingung !setre (not setre) erfllt. Das Skript kann nun weiterlaufen. Als nchstes wird der Marker Firepoint an die Position des Heli-Hs ATarget gesetzt und der onMapSingleClick deaktiviert. Danach wird das Skript ari.sqs aufgerufen und der Text, der den Spieler auordert auf die Karte zu klicken wieder entfernt.
setre=true; titletext ["Click on the map to set your redirection","plain down"]; onMapSingleClick "ATarget setPos _pos;setre=false"; @!setre; "Firepoint" setMarkerPos getPos ATarget; onMapSingleClick ""; [] exec "artillerie\ari.sqs"; titleText ["","plain down"]; ~15 "Firepoint" setMarkerPos [0,0] ; exit;

Ari.sqs Nachdem dieses Skript durch den Mapklick aktiviert wurde, wird zunchst ein Funksound mit einer Lnge von 10 Sekunden abgespielt, den man natrlich erst in der Description.ext denieren muss und erst nach dem Delay von ~10 wird das Skript re.sqs durch das jeweilige Geschtz und dem ATarget gestartet. Dies wre jetzt nur eine Schussfolge!
playsound "Firedirection"; ~10 ;Feuer {[_x, ATarget] exec "Artillerie\Fire.sqs"} foreach [W1,W2,W3,W4,W5,W6] exit;

Mchte man mehrere Schussfolgen haben, kopiert man den Abschnitt Feuer einschlielich dem Delay und fgt ihn zwischen dem letzten Feueraufruf (W6) und Exit ein. Die Geschtze wrden dann nach einer Nachladepause nochmal feuern. 190

Fire.sqs Nachdem dieses Skript durch die Objekte, also Geschtz und ATarget, dieses Arrays [_x,ATarget] in der Ari.sqs aufgerufen wurde, richten sich die Geschtze aus und schieen auf die angeklickte Position. Dabei wird das erste Objekt des Arrays, also beispielsweise W1, mit der lokalen Variable _K und das zweite Objekt des Arrays, also das ATarget mit der lokalen Variable _Z belegt. Danach bekommt die lokale Variable _X die X-Position vom ATarget(also _Z) und die lokale Variable _Y den Y-Wert von ATarget zugewiesen. Mit dem Befehl _K doWatch [_X,_Y,5000] sagt das Skript zu W1(also _K), dass dieser zu ATarget und in Hhe 5000 schauen soll. Nach einem kurzen Delay von 5 Sekunden bekommt W1 mit _K re "M119" den Befehl zu schieen. Kurz darauf werden die Granaten in einem bestimmten Randombereich _X+((random 80)-40) und _Y = _Y+((random 80)-40), welcher variabel denierbar ist, einschlagen. Mit dem Befehl _H say "Ari" wird ein Artilleriesound, welcher zunchst auch in der Description.ext deniert werden muss, mit dem Gerusch eines aniegenden Artilleriegeschosses abgespielt. Diesen hrt man auch nur, wenn man sich in der Nhe des Einschlagbereiches bendet.

_K = _this select 0; _Z = _this select 1; _X = getPos _Z select 0; _Y = getPos _Z select 1; _K doWatch [_X,_Y,5000] ; _A =_K Ammo "M119"; ~5 _K re "M119"; @ _A > _K Ammo "M119"; ~2 _N = nearestObject [_K,"HeatM119"]; _X = _X+((random 80)-40) ; _Y = _Y+((random 80)-40) ; _H = "HeliHEmpty" createVehicle [_X,_Y] ; ~1 _H say "Ari"; ~1 _N setPos [_X,_Y,0]; "SH_125_HE" createVehicle [_X,_Y,0] ; deleteVehicle _H; exit

Kapitel 6 191

Dieses Beispiel funktioniert nur mit dem Geschtz M119, da es in diesem Skript so deniert wurde. Mchte man ein Geschtz eines anderen Typs verwenden, muss man die Klasse des Geschtzes (hier: M119) und der Munition (hier: HeatM119) dementsprechend angeben. Die Klassen der Geschtze ndet man im Kapitel 3.2 in der Waenbezeichnungsliste. Feindbezogen: Der Spieler oder befreundete Einheiten sollen in einem denierten Auslserbereich, wenn sie durch die Gegnerseite entdeckt werden, mit Artillerie beschossen werden. Das Verfahren ist das Gleiche, wie bei der der zuvor erklrten Variante, nur dass die Skripte nun im Unterordner Feindartillerie liegen und eine Setre.sqs nicht bentigt wird. Auch einen Marker, der die Beschusszone zeigt, und ein Heli-H wird es nicht geben. Variante 1: Man msste jetzt noch nicht mal stliche Artillerie verwenden, sondern setzt lediglich einen Auslser mit folgenden Einstellungen auf die Karte: Auslser: Aktivierung: Westen Mehrfach Von Osten entdeckt 2000 (den Bereich festlegen!) [thislist] exec Feindartillerie\Ari.sqs"

Achse a/b: bei Aktivierung:

und ndert die Ari.sqs im Unterordner, wie auf der nchsten Seite erlutert wird, dementsprechend ab. Lediglich die Ari.sqs wrde hierbei abgendert werden. Die Fire.sqs bleibt dabei auf den Geschtztyp M119 eingestellt! Alle Westeinheiten, die nun in diesem Bereich durch Osteinheiten entdeckt werden, werden mit Artillerie beschossen. Dass dies die eigene Artillerie ist, merkt man dabei nicht. Variante 2: Mchte man aber fr die Ostseite extra Artillerie anlegen, deniert man das wie folgt: Auslser: Aktivierung: Westen Mehrfach Von Osten entdeckt 2000 (den Bereich festlegen!) [thislist] exec Feindartillerie\Ari.sqs"

Achse a/b: bei Aktivierung: 192

Die Geschtze: Dieses Beispiel ist mit 6 Geschtzen der Seite Ost und dem Geschtztyp D30 deniert. Diese setzt man auf die Karte und benennt sie wie folgt: Namen: E1, E2, E3, E4, E5, E6 Ari.sqs Die Besonderheit dieser Ari.sqs ergibt sich aus der festgelegten Auslsesyntax im Auslser, welche ja wie folgt deniert wurde: [thislist] exec " ". Das bedeutet, dass jede Westeinheit, die durch die Ostseite entdeckt wird, im Skript die lokale Variable _Ziel zugewiesen bekommt und somit die Zielkoordinate darstellt. Das jeweilige Geschtz und _Ziel wrden dann die Fire.sqs im Unterordner Feindartillerie aufrufen.
_Ziel = _this select 0; ;Feuer {[_x,_Ziel] exec "Feindartillerie\Feuer.sqs"} foreach [E1,E2,E3,E4,E5,E6] exit;

Fire.sqs Dieses Skript wird nun nur noch auf den Ost-Geschtztyp D30 abgestimmt. Dabei muss der Klassenname des Geschtzes, hier D30, und der Munitionsname, hier HeatD30, vergeben werden. Man knnte hier als Geschtz also auch einen Panzer o.. verwenden. Im Kapitel 3.16 wird erklrt, wie man sich den Waen- und Munitionstyp ausgeben lsst. Kapitel 6
_K = _this select 0; _Z = _this select 1; _X = getPos _Z select 0; _Y = getPos _Z select 1; _K doWatch [_X,_Y,5000]; _A =_K Ammo "D30"; ~5 _K re "D30"; @ _A > _K Ammo "D30"; ~3 _N = nearestObject [_K,"HeatD30"]; _X = _X+((random 80)-40); _Y = _Y+((random 80)-40); _H = "HeliHEmpty" createVehicle [_X,_Y] ; _H say "Ari"; ~1 _N setPos [_X,_Y,0]; "SH_125_HE" createVehicle [_X,_Y,0]; deleteVehicle _H; exit;

193

6.8 - Tote Einheiten bzw. Fahrzeuge lschen


Gerade im Mehrspielerbereich ist es sehr wichtig, eine gute Performance zu haben, was aber auch im Einzelspielerbereich nicht unbeachtet bleiben sollte. Je mehr Einheiten sich auf der Karte bewegen bzw. dargestellt werden mssen, desto langsamer oder auch manchmal unfunktioneller die Mission. Dieses Skript lscht in einem zuvor festgelegten Auslserbereich und in variabel denierbarer Zeit tote Einheiten von der Karte. In dieser Auslsesyntax [2] exec "bodydelete.sqs" kann man die Anzahl der toten Einheiten, die maximal auf der Karte liegen bleiben sollen, frei denieren. Statt der 2 gibt man dazu einfach einen hheren Wert an und somit bleiben mehr Leichen liegen. Dieses Skript ist nicht seitenbezogen. Hier kommt es darauf an, wie man den Auslser einstellt. Dies ist mal ein Einstellungsbeispiel fr Osten: Auslser: Aktivierung: OSTEN Einfach Vorhanden 2000 (den Bereich festlegen!) [2] exec "Scripts\Bodydelete.sqs"

Achse a/b: bei Aktivierung:

Mchte man, dass alle Einheiten egal welcher Seite gelscht werden sollen, whlt man bei Aktivierung einfach nur Jeder aus. Mchte man, das nur Westeinheiten gelscht werden sollen, eben Westen und so weiter. Fr dieses Skript wurde im Missionsordner ein Unterordner namens Skripte angelegt. Die Besonderheit an dem Skript ist, dass Soldaten bevor sie gelscht werden, dank dieser Zeile: (Gravedigger) action ["hidebody",_P] erst im Boden versinken. Dazu braucht man einen Dummy, der im Skript Gravedigger benannt wurde. Dieser macht es dann erst mglich, dass die toten Soldaten zunchst im Boden versinken, bevor sie gelscht werden. Diesen setzt man einfach irgendwo weit weg vom Geschehen auf eine Insel, damit ihm nichts passiert. Hierbei ist es egal, was es fr eine Einheit ist. Er kann jeder Seite angehren. Lediglich der Name muss mit dem im Skript bereinstimmen. Fahrzeuge werden dabei nicht im Boden versinken, sondern direkt gelscht! Soldatenbezogen: Dieses Skript ist auf die Typenklasse Man (_T="Man") festgelegt. Es lscht also nur Vehikel, die auch diese Typenklasse haben. Gibt man hier Land an, lscht es alle Typenklassen, die Land unterstellt sind. Da sich auer Flugzeuge und Boote alles andere auf Land bewegt, wird somit alles was diese Typenklasse besitzt und nicht mehr lebt, von der Karte gelscht.

194

Das Skript Bodydelete.sqs sieht dabei wie folgt aus:


? !(local server):exit; _W=_this select 0; _L=[]+thislist; _A=[]; _G=[]; _T="Man"; { if (_T counttype [_x] == 1) then {_G=_G+[_x]} } foreach _L; #Again { if (not alive _x) then {_A=_A+[_x]} } forEach _G; _G=_G-_A; ? count _A > _W :_P=_A select 0;_A=_A-[_P] ; (Gravedigger) action ["Hidebody",_P] ; ~10 deleteVehicle _P; ? count _A == _W and count _G == 0 :exit; goto "Again"

6.9 - Spielbeschleunigung dauerhaft unterdrcken


In manchen Missionen ist es vorteilhaft die Spielbeschleunigung zu unterdrcken. Zum Beispiel, wenn man nicht mchte, dass der Spieler den Ablauf beschleunigt. Denn dies knnte je nach Situation negative Auswirkungen auf den Missions- und Spielverlauf haben. Wenn man zum Beispiel eine hohe Skriplast oder hnliches hat, knnte die Spielbeschleunigung gegebenenfalls zu Fehler fhren. Da man dies im Editor nicht mit nur einem Befehl lsen kann, regelt man das mit einem kleinen Skript, welches etwa wie folgt aussehen kann:
; Spielbeschleunigung unterdrcken #Check ? not alive Player : exit; setAccTime 1.0; ~0.1 goto "Check"

Kapitel 6

Dieses Skript startet man gleich zu Beginn der Mission direkt aus der Init.sqs oder der Initzeile einer Einheit oder eines Objektes. Es setzt die Zeit immer wieder auf 1. Auch wenn der Spieler die Beschleunigung anklickt, wird sich nichts verndern. 195

6.10 - Der Bullet Mode


Hier ein kleines Feature, welches zwar nicht sonderlich realistisch ist, aber trotzdem ein wenig die Mglichkeiten vorn Armed Assault aufzeigen soll. Mit diesem Bullet Mode ist es mglich, whrend des Spielens auf Zeitlupe umzuschalten, so dass man Kampfszenen in Zeitlupe sehen und mit einem Screenshot festhalten kann. Dies wurde hierbei mit einem Actionmeneintrag und zwei Skripten realisiert. Natrlich ist das Ganze nur im Singleplayerbereich mglich und fr Multiplayer eher unbrauchbar. Zunchst versieht man den Spieler mit einem Actionmeneintrag: ID=Player AddAction ["Bullet Mode ON", "Bulleton.sqs"]; Das ist der Eintrag, mit dem man den Bullet Mode zunchst startet. Das Skript sieht dabei wie folgt aus: Bulleton.sqs
;Eintrag wird entfernt Player removeAction ID; ;Eintrag wird hinzugefgt IID = Player addAction ["Bullet-Mode OFF ", "bulleto.sqs"]; ;Zeitlupe wird gesetzt setAccTime 0.0900; exit;

Dem Spieler wird nach dem Auslsen des Bulletmodes der Eintrag Bullet-Mode ON entfernt und er bekommt den Eintrag Bullet-Mode OFF hinzugefgt. Alles luft jetzt, bis der Spieler den Bulletmode wieder ausschaltet, in Zeitlupe ab. Bei folgendem Skript wird das gleiche Verfahren wie oben verwendet, nur eben umgekehrt. Bulleto.sqs
;Eintrag wird entfernt Player removeAction IID; ;Eintrag wird hinzugefgt ID = Player addAction ["Bullet-Mode ON ", "bulleton.sqs"]; ;Zeitlupe wird zurckgenommen setAccTime 1.0; exit;

Ein nettes Zusatzfeature wre es, wenn man einen Musiktitel mit angibt, der abgespielt wird, wenn der Modus aktiviert und gestoppt wird, wenn der Modus wieder ausgeschaltet wird. 196

6.11 - Das Feindmeldescript


Mchte man in einer Mission haben, dass eine befreundete KI irgendwelche Feindeinheiten meldet und diese dann auf der Karte fr einen Moment mit einem blinkenden Marker markiert werden sollen, damit man beispielsweise seine Artillerie darauf lenken oder andere Einheiten dorthin schicken kann, kann man das wie im nun folgenden Beispiel realisieren. Im Multiplayer wrde man das Skript nur Serverseitig ausfhren. Dazu in der ersten Skriptzeile den Zusatz ?(!(local server)):exit mit angeben. Man setzt irgendwo einen Marker auf die Karte und dazu einen Auslser, der den Bereich festlegt, welche wie folgt eingestellt: Auslser: Aktivierung:

Achse a/b: bei Aktivierung: Marker: Name: Farbe: Achse a/b: Symbol:

OSTEN Von Westen entdeckt Mehrfach 5000 thislist exec "Scripts\Signal.sqs"

Target1 Red 1 Destroy Kapitel 6

Das Skript dazu sieht dann etwa so aus:


_Target = _this select 0; signalcounter = 0; "Target1" setMarkerPos getPos _ Target; "Target1" setMarkerType "Destroy"; #Start ? (signalcounter>=10) OR not alive _Target : goto "Ende"; signalcounter = signalcounter+1; ~0.8 "Target1" setMarkerColor "ColorRed"; ~0.8 "Target1" setMarkerColor "ColorBlack"; goto "Start" #Ende ~1 signalcounter = 0; "Target1" setMarkerType "Empty"; "Target1" setMarkerColor "ColorBlack"; exit;

197

6.12 - Der Airstrike


Luftschlge sind auf jedem Schlachtfeld ein taktischer Vorteil. Deshalb wird hier eine Mglichkeit vorgestellt, wie man einen Airstrike umsetzen kann. Diese Version muss gegebenenfalls an die jeweilige Mission angepasst werden. Das heit, man testet den Airstrike vorher im vorgesehenen Missionsgebiet und verndert gegebenfalls die Flughhe oder die Zeit bis zum Abwurf. Dabei werden die Treer zum Teil genauer. Dieses Beispiel ist leider nicht multiplayertauglich, da die Bombe des Harriers das Spiel abstrzen lsst. Um diesen Airstrike in die Mission einzubauen setzt man zunchst folgende Objekte auf die Karte. Unsichtbares Heli-H: Leer/Objekte: H (invisible) Name: ASTarget Funkauslser: Aktivierung: Text: Achse a/b: bei Aktivierung: Marker: Name: Farbe: Symbol: Achse a/b:

Radio Alpha 0-0-1 AIRSTRIKE 0 [] exec "Scripts\Airstrike.sqs"

Firedirection rot Destroy 1

Nach dem Aktivieren von Radio Alpha klickt der Spieler auf die Karte und dabei werden das Atarget und der Marker Firedirection auf diese Position gesetzt. Danach wird ein Flugzeug mit Pilot generiert, der dieses Ziel aniegt. Wenn es in einer gewissen Distanz zum Ziel ist, bekommt es den Bombenabwurfbefehl und wirft die gefhrliche Fracht ab. Danach iegt es weg und wird am Ende wieder gelscht.

198

Airstrike.sqs Die Logik und den Marker setzt man hierbei irgendwo an den Kartenrand, damit diese fr den Spieler nicht zu sehen sind und der Marker und das Ziel spter wieder an eine nicht sichtbare Position auf der Karte gebeamt werden knnen. Jetzt muss man nur noch folgendes Skript anfertigen und es kann losgehen.
setre=true; titleText ["Click on the map to set your redirection","plain down"]; onMapSingleClick "ASTarget setPos _pos; setre=false"; @!setre; "Firedirection" setmarkerpos getPos ASTarget; playSound "Firedirection"; onMapSingleClick ""; titleText ["", "plain down"]; ;=========DEFINE======================= _dropPosition = getpos ASTarget; ~0.5 _dropPosX = _dropPosition select 0; _dropPosY = _dropPosition select 1; _dropPosZ = _dropPosition select 2; ~0.1 _planespawnpos = [_dropPosX + 3000, _dropPosY, _dropPosZ + 1000]; _pilotspawnpos = [_dropPosX + 3000, _dropPosY, _dropPosZ + 1000]; ;=========CREATE======================= _PlaneG = creategroup WEST; _plane = createVehicle ["AV8B",_planespawnpos,[], 0, "FLY"]; _plane setPos [(getPos _plane select 0),(getPos _plane select 1),900] ; _pilot = "SoldierWPilot" createUnit [getMarkerPos "Firedirection", _PlaneG, "P1=this"]; _Plane setVelocity [100,0,0] ; ~0.4 P1 moveinDriver _plane; P1 setDamage 0; P1 action ["gear_up", vehicle P1] ; _plane yinHeight 100; _plane setSpeedMode "full"; #CHECK P1 doMove getPos ASTarget; P1 doTarget ASTarget; P1 doWatch ASTarget; ? (_plane distance ASTarget) < 1500 : goto "DROP" goto "CHECK"

Kapitel 6

Weiter auf der nchsten Seite 199

;=========FIRE======================= #DROP _i = 0 _plane yInHeight 100; _plane setPos [(getPos _plane select 0),(getPos _plane select 1),100] ; ~13 #FIRE _i=_i+1 _plane re "BombLauncher"; ~0.2 ? _i <= 6 : goto "FIRE" ;=========FLY AWAY======================= ASTarget setPos [0,0,0]; "Firedirection" setMarkerPos [0,0]; _plane setSpeedMode Full ~4 _plane yInHeight 300; P1 doMove getPos ASTarget; #Check2 _plane setDamage 0; P1 setDamage 0; ? (_plane distance Player) > 2500 : goto "ENDE"; goto "Check2" ;=========DELETE======================== #ENDE; deleteVehicle _plane; deleteGroup _PlaneG deleteVehicle P1; exit

Wenn man die grn markierten Werte bei dem Label #Drop und #Check verndert, wirkt sich das auf die Treergenauigkeit aus. Je nach geographischer Gegebenheit ist diese besser oder eher schlechter, was ja in der Realitt auch so ist. Nachdem der Bomber das Ziel erreicht und seine Bomben abgeworfen hat, bekommt der den Befehl zum versetzten ASTarget zu iegen um, wenn er ausreichend weit vom Spieler entfernt ist, gelscht zu werden. Wrde man ihn sofort lschen, wrde der Sound sofort verschwinden, was ja nicht so realistisch ist. Am Anfang des Skriptes wurde ein Sound (Playsound "Firedirection") gestartet, der natrlich auch vorhanden sein muss und zuvor in der Description.ext deniert werden sollte. 200

6.13 - Der Airvehiclecreator


Dieses Skript ermglicht es dir Luftfahrzeuge in beliebiger Anzahl und beliebigen Typ whrend des Spielverlaufs zu erstellen. Dabei legt man in der Mission einen Startpunkt, z.B. ein unsichtbares Heli-H, fest und weist der per Skript erstellten Einheit ein Ziel, z.B. eine Einheit oder ein weiteres Heli-H zu. Das Besondere hieran ist der Array, in dem man eine Menge vordenieren kann. Man hat unter anderem die Mglichkeit den Spieler oder irgendeine andere Einheit im Kampfgebiet als Leader einzutragen oder setzt einfach eine Einheit Namens Dummy auf irgendeine Insel weit weg vom Kampfgeschehen. Im Multiplayer fr Leader nie das Wort Player verwenden, sondern den Namen der Einheit. Wichtig: Spiellogik Server setzen! Der Array und die Syntax zum Starten des Skriptes sehen hierbei wie folgt aus: [StartPos, "ParachuteC", "SoldierWB", ZielPos, 100, 0, 0.6, "Combat", Dummy, 10] exec "aircreate.sqs" Dieser sollte natrlich in einer Reihe stehen, was hier nicht mglich ist. Die Startposition: Hier ein Objekt auf der Karte mit dem Namen Startpos. Idealerweise ein unsichtbares HeliH, welches man, je nachdem was fr ein Luftfahrzeug erstellt werden soll, etwas weiter weg vom Spielgeschehen platzieren sollte. Bei Kampugzeugen am besten weit drauen ber dem Meer. Hier kommt der Klassenname des Fahrzeugs rein, welches erzeugt werden soll. Oben mit "ParachuteC" festgelegt. Hier wird der Soldatentyp festgelegt, der das Objekt iegen soll. Normalerweise ein Pilot. Da aber auch Fallschirmspringer mglich sind, wurde es so ausgelegt, dass man auch andere Einheitstypen angeben kann. Jede Einheit die erstellt wird bentigt einen Leader. Hier kann man jede x-beliebige Einheit auf der Karte festlegen. In diesem Fall wurde ein Dummy deniert. Hier gibt man die Flughhe in Metern an. Diese wurde oben mit 100 festgelegt. Da manche Luftfahrzeuge nicht ber einen Gunnerplatz verfgen, hat man hier die Mglichkeit diesen auszuschalten. Der Wert 0 steht hierbei fr kein Gunner und der Wert 1 fr Gunner. An dieser Stelle legt man den Skill der Einheit fest. Was oben mit Wert 0.6 deniert wurde, kann auch per Zufall geschehen. Dazu einfach einen Randomwert benutzen (z.B.: random 1). 201 Kapitel 6

Die Fhz-Klasse: Der Einheitstyp:

Der Leader:

Die Flughhe: Der Gunner:

Der Skill:

Das Verhalten: Das Ziel:

Hier wird das Verhalten der Einheit festgelegt. Oben wurde hierbei "Combat" verwendet. Hier gibt man das Ziel an, welches oben mit ZielPos deniert wurde und ein Objekt auf der Karte ist, welches diesen Namen trgt. Hier knnte man auch Player oder hnliches angeben. Und zu guter letzt die Anzahl der Fahrzeuge, die erstellt werden sollen.

Die Anzahl: Aircreate.sqs

?!(local server):exit; _StartPos = _this select 0; _Airtyp= _this select 1; _Pilottyp = _this select 2; _Target = _this select 3; _Height = _this select 4; _Gunner = _this select 5; _skill = _this select 6; _behaviour = _this select 7; _Leader = _this select 8; _count = _this select 9; _counter = 0; #Start _counter = _counter +1; _Typ = createVehicle [_Airtyp,[(getPos _StartPos select 0)+ random 200,(getPos _StartPos select 1)+ random 200,_Height + random 150], [], 0, "FLY"]; _Typ FlyInHeight _Height; _Typ SetSpeedMode "full"; _Typ setDir getdir _StartPos; _pilot = _Pilottyp createUnit [[(getPos _StartPos select 0),(getPos _StartPos select 1), 2000], _Leader,"Pilot1=this"]; Pilot1 moveInDriver _Typ; Pilot1 setSkill _Skill; Pilot1 doMove getPos _Target; Pilot1 setBehaviour "_behaviour"; ? _gunner == 0 : goto "Next" _gunner = _Pilottyp createUnit [[(getPos _StartPos select 0),(getPos _StartPos select 1), 2000], _Leader,"Gunner1=this"]; Gunner1 moveInGunner _Typ; Gunner1 setSkill _Skill; Gunner1 setBehaviour "_behaviour"; #Next ? _counter >= _count : exit; ~0.5 goto "Start"

202

6.14 - Der Scheinwerfer


Da der Scheinwerfer zum Teil nur bewegungslos in die Gegend leuchtet, habe ich dieses Skript dafr entworfen. Hierbei hat man die Mglichkeit in einem Array die ueren beiden Bewegungsgrenzen frei zu denieren. Das bedeutet, dass die Einheit am Scheinwerfer bis zu ihrem linken im Array festgelegten Punkt leuchtet und dann wieder zurck bis zu ihrem rechten im Array festgelegten Punkt. Der Scheinwerfer bewegt sich dabei langsam von der jeweiligen Richtung in die andere. Jetzt liegt es am Editierer, wie weit die Einheit leuchten darf. Zunchst die Scheinwerfereinheit erstellen und mit einem Namen versehen (z.B.: Wache1) und dann den Array der Syntax dafr festlegen. Hierfr wird folgende Syntax bentigt, um das Skript zu starten: [Name,Linkswert,Rechtswert] exec "Light.sqs" [Wache1,100,180] exec "Light.sqs" Diese Werte werden dann bei dem Aufruf an das Skript Light.sqs bergeben. Light.sqs
_Unit = _this select 0; _left = _this select 1; _right = _this select 2; _dir = (getDir _Unit); #Start ? !(alive _Unit) : exit; ~0.5 _dir = _dir+1; _Unit setFormDir _dir; ?(_dir > _right) : goto "Next" goto "Start" #Next ? !(alive _Unit) : exit; ~0.5 _dir = _dir -1; _Unit setFormDir _dir; ?(_dir < _left) : goto "Start"; goto "Next"

Kapitel 6 203

Known Bug Da in Armed Assault vom System her sehr zurckgefahren wird und Objekte, die weiter vom Spieler entfernt sind teilweise quasi abgeschaltet werden, kommt es vor, dass der Scheinwerfer erst anfngt sich zu bewegen, wenn irgendeine Einheit ihren Weg kreuzt. Dazu einfach eine Streife davor entlang laufen lassen oder kurz eine Einheit direkt vorm Scheinwerfer createn und dann wieder lschen (siehe Kapitel 5.45).

6.15 - Der Zeitzhler


Mchte man seine Mission mit einem Zeitzhler versehen, so kann man dies auf unterschiedliche Art und Weise machen. Hier mal zwei Beispiele. Einmal mit einer Titletext-Einblendung und einmal mit einer Hint-Einblendung. Die Auslsesyntax wird hierbei wie folgt deniert : [60] exec "Time.sqs" Wobei die 60 fr den Wert steht. Dieser Wert wird jetzt so lange runtergezhlt und auf dem Monitor angezeigt, bis er den Wert 0 erreicht hat und das Skript dann beendet wird. Time.sqs Zunchst die Titletext-Variante, bei welcher die Zahlen am unteren Rand des Bildschirms eingeblendet und langsam runtergezhlt werden.
_time = _this select 0; #Start ~1 _time = _time -1; Titletext [format["Noch %1 Sekunden", _time],"plain down"]; if (_time >= 1) then {goto "Start"} else {}; Titletext ["","plain down"]; exit;

Und hier noch die Hint-Variante, bei welcher die Zahlen oben links am Bildschirmrand eingeblendet und langsam runtergezhlt werden.
_time = _this select 0; #Start ~1 _time = _time -1; Hint format["Noch %1 Sekunden", _time]; if (_time >= 1) then {goto "Start"} else {}; Titletext ["","plain down"]; exit;

Mchte man einen Wert hoch zhlen lassen, setzt man die Zeile _time = _time -1 statt dem - ein +, ndert (_time >= 1) auf (_time <= _time) und passt den Text entsprechend an (z.B.: %1 Sekunden). Die Syntax startet man dann mit [0] exec "Time.sqs" 204

6.16 - Das House-Patrol-Script


Dieses Skript ermglicht es Einheiten durch ein Gebude streifen zu lassen. Dazu muss aber erwhnt werden, dass dies derzeit nur bei dem Hotel wirklich Sinn macht. Man hat dank des wirklich groen Arrays die Mglichkeit, dieses Skript optimal fr seine Bedrfnisse zu nutzen. Dieses Skript luft ohne Weiteres hervorragend im Multiplayer. Dieses wird dabei mit der folgenden, teilweise recht unbersichtlichen Syntax, ausgelst. Damit man jetzt versteht, wie man diesen Array fr seine Bedrfnisse anpassen kann, folgt natrlich gleich eine Erluterung dazu. Zunchst die Auslsesyntax mit dem Array: [Name, "SAFE", Hotel, 161, 1, 160, 2, 10, 100, 200, 256, 0, 1] exec "housepos.sqs"; Bezeichnung
Name Verhalten Gebude

Erklrung Name der Einheit Verhalten der Einheit Name des Gebudes (siehe Kapitel 5.61!) Logik auf das Gebude setzen und in die Initzeile: Hotel=nearestBuilding this Startposition _startpos Startposition der Einheit im Gebude Zufall _accident Zufallspositionen (1=an / 0=aus) Hier aktiviert man die Zufallspositionen fr zustzliche Wegpunkte im Gebude. Ist der Wert 0, werden Zufallspositionzahl und Zufallspositionanzahl berlesen. Zufallspositionzahl _accidentnr Zufallspositionszahl Hier gibt man den Wert an, aus dem eine Zufallsposition ermittelt werden soll. Zum Beispiel wie oben der Wert 160. Es wird jetzt eine Zufallsposition zwischen 0 und 160 ermittelt und als Wegpunkt vergeben. Zufallspositionanzahl _accidentcount Anzahl der Zufallspositionen Wie oft soll eine solche Position generiert werden. Oben sind 2 Ablufe deniert. Pause _rest Pause an Position (oben: 10) Wie lange soll die Einheit an der Position warten, bis sie zur nchsten weiterluft. Wegpunkt 1 _wp1 Erster Wegpunkt (oben: 100) Wegpunkt 2 _wp2 Zweiter Wegpunkt (oben: 200) Endwegpunkt _ende Endwegpunkt (oben: 250) Statisch/Dynamisch _form Start (Statisch=0/Dynamisch=1) Ist der Wert wie oben 0, dann wird die Einheit an die denierte Startposition im Haus gesetzt.
_man _behaviour _house Wiederholen _loop

Skript

Kapitel 6

Skript wiederholen.oder Streife beenden. 205

Werte wie Pause oder Start-, Wegpunkt 1, Wegpunkt 2 oder Endwegpunkt kann man hervorragend zustzlich mit Random belegen und somit noch mehr Dynamik einbringen. Dazu einfach Random vor den Wert im Array schreiben. Dieser Array erfordert ein wenig Konzentration kongurieren, da dort eine Menge Zahlenwerte hintereinander folgen und man schnell durcheinander kommt. Deshalb muss man hier mal wieder ein wenig gewissenhaft und konzentriert vorgehen. HousePos.sqs
?!(Local Server): exit _man = _this select 0; _behaviour = _this select 1; _house = _this select 2; _startpos = _this select 3; _accident = _this select 4; _accidentnr = _this select 5; _accidentcount = _this select 6; _rest = _this select 7; _wp1 = _this select 8; _wp2 = _this select 9; _ende = _this select 10; _form = _this select 11; _loop = _this select 12; #LOOP _counter = 0; _man setbehaviour _behaviour; ;//Form of employment (Static=0/Dynamic=1) ? _form == 0 : {_x setpos (_house buildingPos _startpos)} foreach units _man; ;//First Waypoint (Enable=Buildingposition;Disable=0) #WP1 ? _wp1 == 0 : goto "WP2" Leader _man move (_house buildingPos _wp1); #WP1Dest ~1 ? Leader _man distance (_house buildingPos _wp1) > 2 : goto "WP1Dest"; ~ _rest ;//Second Waypoint (Enable=Buildingposition;Disable=0) #WP2 ? _wp2 == 0 : goto "AccidentPos"; Leader _man move (_house buildingPos _wp2);

Weiter nchste Seite. 206

#WP2Dest ~1 ? Leader _man distance (_house buildingPos _wp2) > 2 : goto "WP2Dest"; ~ _rest ;//Accidenpositions (Enable=1;Disable=0) #AccidentPos ? _accident == 0 : goto "EndP"; #Accident; _counter = _counter +1; _apos = random _accidentnr; ~1 Leader _man move (_house buildingPos _apos); #APosCheck ~1 ? Leader _man distance (_house buildingPos _apos) > 2 : goto "APosCheck" ? _counter >= _accidentcount : goto "EndP" ~ _rest goto "Accident" ;//End Waypoint (Enable=Buildingposition;Disable=0) #EndP ? _ende == 0 : goto "Ende" ~ _rest Leader _man move (_house buildingPos _ende);

Kapitel 6

#EndPDest ~1 ? Leader _man distance (_house buildingPos _ende) > 2 : goto "EndPDest" ;// LOOP (Enable=1;Disable=0) #Ende ? _loop == 1 : goto "Loop" exit;

Dieses Skript kann man nun sehr exibel einsetzen. Als Beispiel mal folgendes: Man mchte, dass Einheiten ein paar Wegpunkte um das Gebude ablaufen, dann an einem Wegpunkt das Skript aktivieren, diese Positionen ablaufen und danach wieder um das Gebude laufen. Dazu wrde man dynamisch/statisch auf 1, also auf dynamisch setzen. Somit wrde die Einheit zunchst den Befehl bekommen den Wegpunkt 1 anzusteuern. Loop setzt man dabei logischerweise auf 0! Generell sollte eine Gruppe nicht mehr als 1-3 Einheiten fr eine Streife in dem Gebude haben. Wobei wohl 1-2 Einheiten realistisch wren. In dem Hotel hat man schon die Mglichkeit mehrere Streifen laufen zu lassen. Zuzglich fest gesetzter Einheiten in dem Gebude hat es ein Spieler nicht leicht dort heil oder unbemerkt rein oder herauszukommen. 207

6.17 - Das Minen-Skript


Da die Minen nicht wirklich die Funktion einer Mine erfllen, muss dabei eben nachgeholfen werden. Das lst man hierbei wieder mit einem Skript. Hierbei werden zwei verschiedene Skripte angelegt. Eins fr Antipersonenminen und eins fr Panzerminen. Der Unterschied besteht dabei nur bei dem Shelltyp, der fr die Explosion bentigt wird. Schlielich haben Panzerminen eine grere Sprengkraft als Antipersonenminen. Dazu setzt man zunchst eine Mine auf die Karte und als Ergnzung einen Auslser, der dann das Skript bei Auslsung aktiviert und die Explosion herbeifhrt. Diesen setzt man direkt auf die Mine so dass, wenn eine Einheit in den Bereich der Mine bzw. Auslser kommt, dieser auslst. Antipersonenmine Auslser: Aktivierung: Achse: bei Aktivierung: APmine.sqs
?(!(Local Server)): exit; _Soldier = _this select 0; _Bomb="SH_125_HE" createVehicle position _Soldier exit;

SEITE Einfach 1/1 thislist exec "apmine.sqs"

Der Vorteil hieran ist, dass man eine Mine mit dem denierten Auslser mit Copy & Paste in beliebiger Anzahl vervielfltigen kann, ohne noch irgendwas anderes denieren zu mssen. Ein Skript fr hunderte von Minen. Panzermine: Fr die Panzermine kann man das gleiche Verfahren verwenden, nur dass man eben im Skript einen strkeren Sprengkrper, also eine andere Shellklasse, verwendet. Diese gibts wie gewohnt im Kapitel 3.10. Das Skript benennt man dabei dann eben pzmine.sqs. Fr Panzerminen bietet es sich an den Radius des Auslsers ein wenig zu vergrern.

208

6.18 - Das Vehikeltransportskript


Dieses Skript ermglicht es Fahrzeuge und Objekte an ein Fluggert zu hngen und an ein Ziel zu transportieren. Hierbei sind zwei Varianten mglich. Zum Ersten die, dass man zwei Objekte (Helikopter(Heli) und Ladung(Veh1)) auf der Karte vordeniert und mit dessen Namen das VehTrsp-Skript aufruft. Dabei wird die Ladung von dem Startpunkt des Helikopters bis zum denierten Zielpunkt geogen und dort abgesetzt. Aufgrund der Nichtfunktionalitt von Setpos im Multiplayer, luft dieses Beispiel zur Zeit nur im Singleplayer vernnftig. Das Skript wird mit folgender Syntax aufgerufen: [Heli,Veh1, 70, Player, EndPos] exec "vehtrsp.sqs" Der Array erklrt sich hierbei wie folgt: [Transporter, Ladung, Flughhe, Absetzpunkt, Endposition] VehTrsp.sqs
?!(Local Server): exit _TranspVeh = _this select 0 _Cargo = _this select 1 _Height = _this select 2 _Place = _this select 3 _EndPos = _this select 4 _TranspVeh domove getpos _Place; _TranspVeh yinheight _Height; ;/////////////////////////////TRANSPORT///////////////////////////////// #Loop _xPos = (getPos _TranspVeh) select 0 _yPos = (getPos _TranspVeh) select 1 _zPos = (getPos _TranspVeh) select 2 _Cargo setPos [_xPos, _yPos, _zPos -10]; _Cargo setDir (getDir _TranspVeh); ? _TranspVeh distance Player < 100 : goto "Next" ~.01 goto "Loop" ;/////////////////////////////LANDING////////////////////////////////// #Next _TranspVeh yinheight 13; _TranspVeh setspeedMode "Limited"; _TranspVeh action ["AUTOHOVER", _TranspVeh]; #Loop2 _xPos = (getPos _TranspVeh) select 0 _yPos = (getPos _TranspVeh) select 1 _zPos = (getPos _TranspVeh) select 2 _Cargo setPos [_xPos, _yPos, _zPos -10]; _Cargo setDir (getDir _TranspVeh); ? (getPos _Cargo select 2) < 1.5 : goto "Loop3" ~.01 goto "Loop2"

Kapitel 6 209

##Loop3 _xPos = (getPos _TranspVeh) select 0 _yPos = (getPos _TranspVeh) select 1 _zPos = (getPos _TranspVeh) select 2 _Cargo setPos [_xPos, _yPos, _zPos -10]; _Cargo setDir (getDir _TranspVeh); ? speed _TranspVeh < 1 : goto "Ende"; ~.01 goto "Loop3" ;/////////////////////////////UNLOADING////////////////////////////////// #Ende _Cargo setpos [(getpos _Cargo select 0),(getpos _Cargo select 1),0] _TranspVeh action ["CANCELACTION", _TranspVeh] _TranspVeh yinheight _Height _TranspVeh domove getpos _EndPos _TranspVeh setSpeedMode "Normal" exit

Spawn-Variante Zum Zweiten gibt es die Variante, mit der beide Vehikel an einem Startpunkt auf der Karte erzeugt werden, der Heli mit der Ladung zu dem Absetzpunkt iegt, dort die Ladung abgesetzt und dann weiter zum denierten Endpunkt iegt, wo er dann gelscht wird. Damit dies auch im Editor bersichtlich gestaltet werden kann, ist das Ganze mit drei unsichtbaren Heli-Hs mit Namen: StartPos Target EndPos

realisiert. Diese kann man nun frei auf der Karte platzieren. Das Besondere hieran ist, dass der Heli beim Start in die Blickrichtung des StartPos-Objektes ausgerichtet wird. So kann man durch drehen des StartPos-Objektes schon mal die Flugrichtung des Transporthubschraubers bestimmen. Natrlich hat man hier auch die Mglichkeit als Absetzpunkt den Spieler oder hnliches anzugeben. Dazu wrde man statt Target einfach Player oder den Namen der Einheit dort angeben, bei dem die Ladung abgesetzt werden soll. Als Leader fr den zu erstellenden Heli wurde eine Einheit mit Namen Dummy auf der Karte vordeniert. Dies hat den Grund, dass der Transporthubschrauber dann erfahrungsgem besser iegt und besser landet. Folgend die Syntax, mit der das Skript aufgerufen wird. ["UH60MG", "HMMWVMK", "SoldierWPilot", 70, StartPos, Target, EndPos, Dummy] exec "vehtrspcreate.sqs" Der Array erklrt sich hierbei wie folgt: ["HeliTyp", "Ladungstyp", "Pilottyp", Flughhe, Startposition, Absetzpunkt, Endposition, Leader] 210

VehTrspCreate.sqs
?!(Local Server): exit _AirVeh = _this select 0 _Vehicle = _this select 1 _Pilottyp = _this select 2 _Height = _this select 3 _StartPos = _this select 4 _Place = _this select 5 _EndPos = _this select 6 _Leader = _this select 7 ;/////////////////////////////CREATE//////////////////////////////////// _TranspVeh = createVehicle [_AirVeh,[(getpos _StartPos select 0),(getpos _StartPos select 1),_Height], [], 0, "FLY"]; _TranspVeh setdir getdir _StartPos _Cargo = _Vehicle createVehicle getpos _TranspVeh _pilot = _Pilottyp createUnit [[(getpos _StartPos select 0),(getpos _StartPos select 1),2000], _Leader,"Pilot1=this"] Pilot1 moveinDriver _TranspVeh _TranspVeh yinheight _Height ;/////////////////////////////TRANSPORT///////////////////////////////// #Loop Pilot1 domove getpos _Place _xPos = (getPos _TranspVeh) select 0 _yPos = (getPos _TranspVeh) select 1 _zPos = (getPos _TranspVeh) select 2 _Cargo setPos [_xPos, _yPos, _zPos -10]; _Cargo setDir (getDir _TranspVeh); ? _TranspVeh distance _Place < 90 + random 50 : goto "Next" ~.01 goto "Loop" ;/////////////////////////////LANDING/////////////////////////////////// #Next _TranspVeh yinheight 13; _TranspVeh setSpeedMode "Limited"; _TranspVeh action ["AUTOHOVER", _TranspVeh]; #Loop2 _xPos = (getPos _TranspVeh) select 0 _yPos = (getPos _TranspVeh) select 1 _zPos = (getPos _TranspVeh) select 2 _Cargo setPos [_xPos, _yPos, _zPos -10]; _Cargo setDir (getDir _TranspVeh);

Kapitel 6 211

? (getPos _Cargo select 2) < 1.5 : goto "Loop3" ~.01 goto "Loop2" #Loop3 _xPos = (getPos _TranspVeh) select 0 _yPos = (getPos _TranspVeh) select 1 _zPos = (getPos _TranspVeh) select 2 _Cargo setPos [_xPos, _yPos, _zPos -10]; _Cargo setDir (getDir _TranspVeh); ? speed _TranspVeh < 0.7 : goto "Ende"; ~.01 goto "Loop3" ;/////////////////////////////UNLOADING////////////////////////////////// #Ende _Cargo setpos [(getpos _Cargo select 0),(getpos _Cargo select 1),0] _TranspVeh action ["CANCELACTION", _TranspVeh] _TranspVeh yinheight _Height _TranspVeh domove getpos _EndPos _TranspVeh setSpeedMode "Full" ;/////////////////////////////DELETE//////////////////////////////////// @ _TranspVeh distance _EndPos < 100 deleteVehicle _TranspVeh deleteVehicle Pilot1 exit

212

6.19 - Das Mwenskript


Ein Schwarm Mwen bringt mal wieder eine Menge Atmosphre ist Spiel. Es iegt zwar schon so allerlei durch die Lfte, aber wenn man einen Schwarm gezielt umheriegen lsst, hat das auch etwas Besonderes. Das Ganze realisiert man mal wieder per Skript. Fr dieses Beispiel setzt man zwei Objekte, idealerweise unsichtbare Heli Hs, mit Namen Start und Ziel auf die Map und deniert diese im Auslsearray fr das Skript. [Start,Ziel,Anzahl] exec "scripte\bird.sqs" Bird.sqs
_spos = _this select 0 _zpos = _this select 1 _count = _this select 2 _i = 0 #Check _x = (random 30) + 10 _y = (random 30) + 10 _z = (random 30) + 10 ? _i >= _count : exit _i = _i + 1 _bird="seagull" camcreate [(getpos _spos select 0) - (sin getdir _spos * _x), (getpos _spos select 1) - (cos getdir _spos * _y), _z] [_bird,_spos,_zpos] exec "birdpos.sqs" goto "check"

Kapitel 6

Nach Auslsung des Skriptes werden die Vgel an der Startposition in einem Randombereich (deniert bei: _x,_y,_z) erzeugt, welchen man natrlich jederzeit frei ndern kann. Jeder erstellte Vogel lst dann das zweite Skipt aus und bekommt ein Zufallsziel per Randomwert zugewiesen, den er dann aniegt.

213

Birdpos.sqs
_bird = _this select 0 _spos = _this select 1 _zpos = _this select 2 _x = (random 10) + 10 _y = (random 10) + 10 _z = (random 10) + 10 #Loop _bird camsetpos [(getpos _zpos select 0) - (sin getdir _zpos * _x), (getpos _zpos select 1) - (cos getdir _zpos * _y), _z] ? _bird distance _zpos <= 30 : goto "Loop2" ~1 goto "Loop" #Loop2 _bird camsetpos [(getpos _spos select 0) - (sin getdir _spos * _x), (getpos _spos select 1) - (cos getdir _spos * _y), _z] ? _bird distance _spos <= 30 : goto "Loop" ~1 goto "Loop2"

Natrlich lsst sich dieses Beispiel jederzeit noch um weitere Mglichkeiten und Positionen erweitern. Statt der Mwe knnte man hier auch Bienen oder hnliches angeben. Dazu bitte im Kapitel 3.9 bei den Einheitsklassen nachschauen. Folgend noch ein paar Syntaxbeispiele. deletevehicle _bird _bird camSetPos position Player _bird camsetpos [x,y,z] _bird camCommand "Landed" - Der Vogel wird gelscht - Der Vogel iegt zum Spieler - Der Vogel iegt zu XYZ-Position - Der Vogel landet

214

6.20 - Das Insektenskript


Das Insektenskript gleicht vom Aufbau her dem Mwenskript. Dieses wurde nur ein wenig anders angelegt. Hier sollen Fliegen ber einer Leiche erstellt werden, die diese dann umkreisen. Dazu schreibt man lediglich die folgende Syntax in die Initzeile der jeweiligen Einheit. [this,60] exec "skripte\insect.sqs" Statt this kann dort natrlich auch der Name der Einheit stehen. Die 60 steht hierbei fr die Anzahl der Fliegen, die die Leiche umkreisen sollen. Alternativ kann man natrlich noch einen Insektensound denieren, der dann im Bereich der Leiche abgespielt wird. Insect.sqs
?(!(local server)) : exit _deadman = _this select 0 _count = _this select 1 _i = 0 @not alive _deadman #Check _x = random 1 _y = random 1 _z = random 3 ? _i >= _count : exit _i = _i + 1 _insect="HOUSEFLY" camcreate [(getpos _deadman select 0) + _x, (getpos _deadman select 1) + _y,_z] [_deadman,_insect] exec "insectpos.sqs" goto "check"

Kapitel 6

Insectpos.sqs
_deadman = _this select 0 _insect = _this select 1 #Loop _insect camsetpos position _deadman ? _insect distance _deadman <= 0.1 : goto "Loop2" ~2 goto "Loop" #Loop2 _x = (random 3) + 1 _y = (random 3) + 1 _z = (random 3) + 2 _insect camsetpos [(getpos _deadman select 0) + (sin getdir _deadman * _x), (getpos _deadman select 1) + (cos getdir _deadman * _y), _z] ? _insect distance _deadman >= _x : goto "Loop" ~2 goto "Loop2"

215

6.21 - Der Bombenleger


Dieser Abschnitt zeigt anhand eines Beispiels, wie man eine KI als Bombenleger einsetzen kann. Diese bewegt sich dann zum Zielpunkt, legt die Bombe und zndet sie, wenn sie weit genug entfernt ist bzw. ihren nchsten Wegpunkt erreicht hat. Dafr nun ein ganz simples Beispiel mit nur drei Wegpunkten. Zunchst muss die Einheit natrlich auch ber Sprengstze verfgen, welche man ihr mit this addMagazine "pipebomb"; zuweisen kann. In diesem Beispiel wird ein Ost-Saboteur verwendet, welcher bereits ber Sprengstze verfgt und von daher nicht extra ausgerstet werden muss. Zunchst wird die Einheit mit Namen Enemy1 auf die Map gesetzt und ganz normal mit Wegpunkten versehen. Dabei trgt man an jedem Wegpunkt, wo eine Bombe gelegt werden soll Enemy1 re "PipeBombMuzzle" in die Zeile bei Aktivierung ein. Der letzte Wegpunkt wird dann mit dem Auslsebefehl versehen, bei welchem die KI die Sprengstze znden soll. Enemy1 action ["TOUCHOFF", Enemy1]; Beipielgrak

Natrlich kann man das Ganze jetzt noch unendlich ausschmcken. Etwa mit weiteren Wegpunkten, Aktionen und so weiter. Die Einstellung der Wegpunkte liegt am Missionsersteller selbst. Dinge wie Verhalten oder Geschwindigkeit sind nicht gerade unwesentlich. Auch die Verwendung der Zeitwerte (Min, Mid, Max) ist sehr interessant und verleiht wieder eine gewisse Dynamik. 216

6.22 - Der Aufklrer


Dieses Beispiel zeigt, wie man einen Aufklrer realisieren knnte. Hiermit hat man die Mglichkeit per Funkmen in die Einheit zu switchen um sich mit eigenem Blick einen Eindruck von der Umgebung zu verschaen, in der sich der Aufklrer gerade aufhlt. Hierbei ist es egal, ob es ein Soldat, ein Panzer oder ein Flugzeug ist. Der Grundbefehl ermglicht es zunchst in verschiedene Perspektiven der Einheit zu switchen. Hierbei stehen folgende Perspektiven zur Auswahl: "INTERNAL" "EXTERNAL" "GUNNER" "GROUP" - Sicht aus Einheit (1st person) - Sicht aus Rcken der Einheit (3rd person) - Sicht aus Visier der Einheit (Optic) - Gruppenansicht (nur bei Leader)

Mit der folgenden Befehl switcht man in die Einheit und die denierte Perspektive: Player switchCamera "Internal" Bei dem nun folgenden Skriptbeispiel, bei welchem die Startsyntax mal wieder frei defniert werden kann, hat der Spieler die Mglichkeit fr einen vom Editierer festgelegten Zeitwert in die vom Editierer festgelegte Perspektive des Aufklrers zu switchen. Nach Ablauf der Zeit schaltet die Kamera wieder zurck auf den Spieler. Als Aufklrer knnte in diesem Beispiel jede Einheitsform dienen. Die Auslsesyntax lautet wie nun folgt, wobei man den Spieler, den Scout, die Zeit und die "Perspektive" angibt. [Player,Scout,10,"external"] exec "scoutswitch.sqs" Scoutswitch.sqs
_leader = _this select 0 _scout = _this select 1 _timeo = _this select 2 _mode = _this select 3 _i = 0 disableuserinput true _scout switchCamera _mode #Loop _i = _i + 1 ? _i >= _timeo : goto "Ende" ~1 goto "Loop" #Ende titlecut [" ", "Black Out"]; titleFadeOut 1 ~0.5 _leader switchCamera "Internal" disableuserinput false titlecut [" ", "Black In"]; titleFadeOut 1 exit

Kapitel 6 217

6.23 - Einheit ergibt sich


Hier mal ein Beispiel, wie man es umsetzen kann, dass sich Einheiten ergeben, wenn bestimmte Bedingungen erfllt sind. Bedingungen knnten sein, das die Einheit weniger Munition hat als vordenierter Wert, mehr verletzt ist als vordenierter Wert oder im Bereich weniger verbndete Einheiten als vordenierter Wert sind. Diese lassen sich nun bndeln, damit sicht nicht jede Einheit gleich ergibt, obwohl noch gengend Verbndete in der Nhe sind. Es mssen also mehrere Bedingungen erfllt sein, bevor sich die Einheit ergibt. Als Beispiel: ?!(canStand _enemy) AND (_ammo < _AmmoStat) : goto "PutDown" Hier wre die Bedingung wenn Einheit nicht mehr stehen kann und zustzlich, wenn Munitionsstatus kleiner als vorgegebener Wert ist. Sind beide erfllt, wrde das Skript zum Label PutDown springen und die Einheit sich ergeben. Im Beispielskript wurden unter dem Label Check mehrere gemischte Bedingungszeilen untereinander gesetzt. Trit eine davon zu, wird sich die Einheit ergeben. Doch jetzt noch was Besonderes. In der Realitt ergeben sich Soldaten manchmal und greifen pltzlich doch wieder zur Wae oder haben gar noch eine Wae irgendwo in der Tasche. Andere wiederum geben ganz auf. Dieses Skript ermglicht es dies exibel zu denieren. Man kann festlegen, dass die Einheit sich wirklich ergibt oder auch, dass die Einheit irgendwann versucht zu iegen. Es kann zustzlich sogar noch deniert werden, ob alle Waen gelscht werden sollen oder gar noch eine vorhanden bleiben soll. Wenn sich eine Einheit nun ergibt, legt sie ihre Primr- sowie Sekundrwae ab und legt die Hnde hinter den Kopf. Wurde deniert, dass die Einheit x stehen bleiben soll, passiert nichts weiter. Wurde deniert, dass die Einheit abhauen soll, kann es passieren dass sie, wenn nicht alle Waen gelscht wurden, zurckschiet oder gar eine Handgranate wirft. Es kommt sogar vor, dass sich die Einheit an einer Leiche neu bewanet. Die KI wird Dank setCaptive nicht auf kapitulierte Einheiten schieen, auer sie haut ab oder greift wieder zur Wae, dann sieht das schon ganz anders aus. Verwendet man in dem Auslsearray feste Werte, dann wei man genau, dass sich eine Einheit ergibt, wenn sie beispielsweise nicht mehr stehen kann und weniger als vordenierte Munition hat. Versieht man den Auslsearray aber mit Randomwerten, so kann man gar nicht vorhersagen wie die einzelne Einheit reagieren wird. Der Auslsearray Der Auslsearray erklrt sich hierbei wie folgt [Name,Fluchtwert,Munition,Verletzt,Waenweg,Fix,Freunde,Bereich] Hier ein Beispiel mit der Verwendung fester Werte: [this,0.5,1,0.5,0,0,3,150] Hier ein Beispiel mit der Verwendung einiger variabler Werte: [this,random 0.7,2,random 1,random 1.5,random 2,6+(random3),200] 218

Diese Werte, egal ob x oder variable, werden dann an das Skirpt bergeben. Natrlich muss dieses noch hinter den Array angegeben werden. Die Auslsesyntax lautet dann: [this,0.5,1,0.5,0,0,3,200] exec "capitulation.sqs"; Arraydenitionen Name Fluchtwert Munition Verletzt Waenweg - Name der Einheit. In der Initzeile auch this mglich. - Fluchtwert der Einheit, welche eine der Bedingungen darstellt. - Mindestwert an Munition der zum Ergeben erreicht sein muss. - Mindestwert der Verletzung der zum Ergeben erreicht sein muss. - Alle Waen lschen oder nicht. Wert 1 lscht alle. Bis 0.9 erhlt die Waen. Durch Radomwert random 1.5 ungewiss. Ab >=1 sind die Waen weg. Randomwert sollte nicht grer als 1.5 sein! - Einheit bleibt nach Ergeben denitiv an der Stelle stehen stehen. Werte <= 1 xiert die Einheit, Werte <=2 gibt Fluchtmglichkeit. Im Variablebeispiel wurde random 2 deniert. Also Ungewissheit. - Wie viele Verbndete sind mindestens noch im Bereich. Wird der Wert unterschritten, ist die Bedingung erfllt. Im Beispiel wurde hier der Wert 6+(random3) verwendet. Also mindestens 6 plus Zufallswert. Im Skipt wurden Osteinheiten deniert. Mchte man eine andere Seite anlegen, muss man dort die Soldaten- und Fahrzeugklassen der Seite angeben. - Bereich, welcher geprft werden soll in Metern. Sind in dem Bereich keine der denierten vorhanden, ist eine weitere Bedingung erfllt.

Fix

Freunde

Kapitel 6

Bereich

Einzelne Einheit Mchte man nur eine einzelne Einheit mit dem Skript belegen, so schreibt man die Auslsesyntax in die Initzeile der Einheit und deniert die gewnschten Werte. [this,0.5,1,0.5,0,0,3,200] exec "capitulation.sqs"; Einheiten in einem Bereich Mit folgender Auslsesyntax lsen alle Einheiten eines Auslserbereiches einzeln das Skript aus. Durch Verwendung der Randomwerte verhlt sich nun jede Einheit anders. Auslser: Aktivierung: Achse a/b: bei Aktivierung:

Ost Einfach beliebig {[_x,random 0.7,2,random 1,random 1.5,random 2,6,200] exec "capitulation.sqs"} forEach thislist 219

Dieses Thema lsst sich unendlich ausweiten und auch die Bedingungen bis ins kleinste Detail festlegen, aber irgendwo muss ja mal eine Grenze sein.
?(!(local server)):exit _Enemy = _this select 0 _Fleeing = _this select 1 _AmmoStat = _this select 2 _Injurned = _this select 3 _Removeall = _this select 4 _Standx = _this select 5 _friendly = _this select 6 _Area = _this select 7 _Enemy allowFleeing _Fleeing #Check ? not alive _enemy : exit _ammo = count magazines _enemy _dammage = getdammage _enemy ;Folgende drei Zeilen stellen eine lange Zeile dar! Klassen bei Bedarf ergnzen. _friends = count nearestObjects [_enemy, ["SoldierEAA","SoldierEAT","SoldierECrew","SoldierEMiner","SoldierEG","SoldierEMG", "SoldierEMedic","SoldierESniper","SquadLeaderE","T72","BMP2","UAZMG","ZSU"], _area] ;Folgende zwei Zweierzeilen stellen je eine lange Zeile dar. Also goto hinter die : ? (_friends < _friendly) AND (_ammo < _AmmoStat) AND (_dammage > _Injurned) : goto "PutDown" ? (_ammo < _AmmoStat) AND (_dammage > _Injurned) AND (_Fleeing > 0.6) : goto "PutDown" ~5 goto "Check" #PutDown _enemy action ["DROPWEAPON", _enemy, primaryWeapon _enemy] ~1 playSound "Dont-shoot" _enemy action ["DROPWEAPON", _enemy, secondaryWeapon _enemy] ~2 ? _Removeall >= 1 : removeallWeapons _enemy _enemy playMove "AmovPercMstpSsurWnonDnon" ~1 ? _standx <= 1 : goto "Standx" ? _standx <= 2 : goto "Fleeing" exit #Standx _enemy disableAI "ANIM" _enemy setCaptive true #Fleeing _enemy disableAI "ANIM" _enemy setcaptive true ~30 + (random 60) _enemy enableAI "ANIM" _enemy allowFleeing _Fleeing _enemy setCaptive false exit

220

6.24 - Teleport
Dieses Skriptbeispiel ist eigentlich nicht als Missionsfeature gedacht, sondern lediglich als eine sehr gute Editierhilfe. Es ermglicht, dass sich der Missionsauthor per Mapclick an beliebige Stellen der Karte beamen kann, um so Spielablufe oder hnliches zu kontrollieren, ohne erst dorthin laufen oder fahren zu mssen. Dies erspart eine Menge Zeit und Nerven. Dieses Beispiel ist fr diesem Fall mit einem Funkauslser kombiniert. Zunchst sollte man im Missionsordner eine Init.sqs anlegen oder die folgende Syntax statt dort in die Initzeile einer Einheit oder eines Objektes schreiben, um das Skript gleich zu Missionsbeginn zu starten. [] exec "teleport.sqs" Mit dem Funkauslser wird dann spter die Variable Teleport auf true gesetzt und das Skript fngt an zu arbeiten. Nachdem der Spieler dann auf die Karte geklickt hat, wird er an die zuvor geklickte Stelle gebeamt und das Skript wird wieder beendet. Dabei wird der Marker PosM an die geklickte Stelle gebeamt, damit er spter auf der Karte sieht, wo er sich hingebeamt hat. Funkauslser: Aktivierung: Text: bei Aktivierung: Marker: Name: Farbe: Symbol: Achse a/b: Teleport.sqs
#start @teleport titletext ["Click on the map to teleport yourself","plain down"] onMapSingleClick "player setpos _pos; teleport=false; ""PosM"" setMarkerPos _pos" @!teleport titletext [" ", "plain down"] ~10 "PosM" setMarkerPos [0,0] goto "start"

Radio Juliet Mehrfach 0-0-0 Juliet teleport=true Kapitel 6

PosM rot Destroy 1

Eine skriptfreie Alternative ist folgender Eintrag in der Init.sqs, welche dann dauerhaft aktiv ist. Nutzt man in der Mission Skripte mit Mapclick wird auch der Spieler versetzt. onMapSingleClick "Player setPos _pos"; 221

6.25 - Das Verfolgungsskript


In folgendem Beispiel wird eine mgliche Variante eines Verfolgungsskriptes nher erlutert. Hierbei bekommt der Verfolger namens Hunter zunchst einmal das richtige Verhalten zugewiesen, bevor er sich auf den Weg zum Spieler macht. Das Skript luft dabei so lange, bis entweder der Spieler oder die verfolgende Gruppe nicht mehr am Leben ist. Das Ganze wird dabei mit folgender Sytax gestartet: [Hunter, Player] exec "skripte\hunter.sqs"; Hunter.sqs
_hunter = _this select 0 _target = _this select 1 _hunter setBehaviour "AWARE" _hunter setCombatMode "RED" _hunter setSpeedMode "Full" _hunter doTarget _target #Loop ?_target distance _hunter >= 10 : {_x doMove getPos _target} foreach units _hunter ~4 ? (count units _hunter) <= 1 : exit ?(!(alive _target)) : exit goto "Loop"

Natrlich gibt es auch die Mglichkeit so etwas mit Wegpunkten zu gestalten. Dies ist nur ein Beispiel, wie man so etwas umsetzen knnte. Hierbei soll auch immer gleich die Zusammenarbeit der Befehle gezeigt werden und die eigenen Ideen begeln Befehle zu kombinieren und optimal fr die individuellen Ideen auszunutzen.

222

Kapitel 7
- Multiplayer In diesem Kapitel werden dir einige grundlegende Bereiche aus dem Bereich Multiplayer erlutert und nher gebracht. Du wirst Dank dieses Kapitels in der Lage sein deine eigene Multiplayermission erfolgreich zu erstellen.

7.1 7.2 7.3 7.4 7.5 7.6 7.7 7.8 7.9 7.10 7.11 7.12 7.13 7.14 7.15 7.16 7.17 7.18 7.19 7.20 7.21 7.22 7.23

Die Multiplayermission Die Respawnpunkte Flexible Respawnpunkte Die MP-Description.ext Die Respawnarten Das Deathmatch Multiplayerbereich festlegen Zeit und Wertung Punkte vergeben bzw. anzeigen lassen Die Zeitanzeige Der Class Header Der Respawndialog Stringtable MP Grundwerte Fahrzeug Respawn Mr-Murrays Fahrzeug Respawn Flaggen Grundinformationen Capture The Flag Die PublicVariable Allgemeines Die Steuerungsbefehle Die Bewanung im Multiplayer Spielerbezogene Textmitteilung Join In Progress (JIP)

224 224 225 226 227 227 228 229 231 232 233 233 234 235 236 238 240 246 247 249 250 251 252

Kapitel 7 223

7.1 - Die Multiplayermission


Das Erstellen einer Multiplayermission erfordert schon etwas mehr Wissen, was ein weiteres Buch dieses Umfangs fllen wrde. Deshalb wird dieser Themenbereich hier nur zum Ansatz behandelt und ein paar grundlegende Bereiche erklrt, die dir das Erstellen einer einfachen Multiplayermission ermglichen. Grundstzlich gilt es schon mal eine Logic mit den Namen Server auf jede Multiplayermap zu setzen! Einheiten Zunchst setzt man Einheiten auf die Karte, welche Playable deniert sind. Wird in der Description.ext disabledAI=1 deniert, so werden nur die tatschlichen Spieler angezeigt. Spielbare Einheiten, die nicht durch einen Spieler belegt sind, werden somit gelscht und nicht durch KI ersetzt.

Anzahl der menschlichen Spieler? Selbstverstndlich lsst sich auch dies ausgeben oder als Bedingung verwenden! hint format [ "West: %1\nEast: %2", playersNumber WEST, playersNumber EAST]; oder als Bedingung ? playersNumber > 4 : hint format [WEST: %1, playersNumber WEST]

7.2 - Die Respawnpunkte


Als feste Respawnpunkte legt man idealerweise Marker mit folgenden Bezeichnungen an: West: East: Respawn_west Respawn_east Widerstand: Zivilisten: Respawn_guerrila Respawn_civilian

Ein weiterer Resp-Punkt pro Seite hiee dann Respawn_west_1, Respawn_west_2,...

Statt eines Marker hat man natrlich auch die Mglichkeit ein Objekt oder eine Spiellogik als Respawnpunkt zu verwenden. Der Nachteil hierbei ist, dass man dann direkt an dem Punkt gespawnt wird, whrend man bei einem Marker exibel im Bereich der Markerche gespawnt wird. 224

7.3- Flexible Respawnpunkte


Mchte man seine Mission mit exiblen Respawnpunkten versehen, kann man dies auf unterschiedliche Art und Weise machen. Hier soll als Beispiel mal die Erfllung eines Missionsziels dienen. Bei jeder Mission fngt man irgendwo auf der Map an und hat ein oder mehrere Ziele. Der Respawnpunkt sitzt zunchst am allgemeinen Startpunkt und soll erst dann versetzt werden, wenn Missionsziel 1 erfllt ist. Logischerweise sollte er dann auch in den Bereich des ersten Missionsziels versetzt werden, um von dort aus dann, bei Erfllung des zweiten Missionsziels, auf die Position des zweiten Missionsziels versetzt zu werden. Dazu hat man dann wieder verschiedene Mglichkeiten. Hier ein Beispiel: Respawnmarker Name: Achse a/b: Auslser Typ: Name: Achse a/b: Art der Auslsung: bei Aktivierung: Respawn_West 50/50

AreaOne
Einfach

"Respawn_West" setMarkerPos getPos AreaOne hint "Gratulation - Ziel 1 ist erfllt!"


Kapitel 7

50 OPFOR Nicht vorhanden

In diesem Beispiel wurde nun ein Auslser mit Namen AreaOne gesetzt, der prft, ob der Bereich feindfrei ist. Ist dies erfolgt, wird der Marker Respawn_West an die Position des Auslsers mit Namen AreaOne versetzt und es erscheint eine Texteinblendung "Gratulation - Ziel 1 ist erfllt!". Natrlich kann man den Marker auch an eine andere Position des ersten Ziels versetzen. Dies sollte hier lediglich als kleines Beispiel dienen.

225

7.4 - Die MP-Description.ext


In der Description.ext deniert man die Grundstze fr die MP-Mission. Also zum Beispiel die Art oder Zeit bis zum Respawn. Hierzu gehren unter anderem folgende Komponenten: respawn=3; respawnDelay=6; respawnVehicle=3; respawnVehicleDelay=10; disabledAI=1; AIKills=1; - Die Art des Respawn - Die Zeit bis zum Respawn - Die Art des Vehiclerespawn - Die Zeit bis zum Vehiclerespawn - Einheiten, die als spielbar deniert wurden werden als KI nicht dargestellt. - Die Punkte der KI werden auch gewertet

Folgend ein Auszug einer Multiplayer-Description.ext in welcher alle wichtigen, fr eine Multiplayermission bentigten Komponenten, deniert sind. Description.ext
respawn=3; respawnDelay=6; respawnVehicle=3; respawnVehicleDelay=10; disabledAI=0; AIkills=1; respawnDialog = false; class Header { gameType = CTF; minPlayers = 2; maxPlayers = 10; }; titleParam1 = "Time limit:"; valuesParam1[] = {10000, 300, 600, 900, 1200, 1500, 1800, 2100, 3600, 7200}; defValueParam1 = 1800; textsParam1[] = {"Unlimited", "5 min", "10 min", "15 min", "20 min", "25 min", "30 min", "35 min", "60 min", "120 min", }; titleParam2 = "Score to win:"; valuesParam2[] = {10000, 5, 7, 10, 15, 20, 25, 30}; defValueParam2 = 5; textsParam2[] = {"Unlimited", 5, 7, 10, 15, 20, 25, 30};

226

7.5 - Die Respawnarten


In einer Multiplayermission gibt es verschiedene Arten des Respawns. Diese legt man gleich beim Editieren in der Description.ext fest. Dies gilt fr Fahrzeuge genauso, wie fr Soldaten. Allerdings macht es nicht Sinn fr ein Fahrzeug einen Respawn als Mwe festzulegen. Fr den Vehiclerespawn verweise ich auf Kapitel 7.14 bzw. 7.15, in welchen sehr umfangreiche Vehiclerespawnarten erlutert sind. Respawnarten: 0 oder "None" 1 oder "Bird" 2 oder "Instant" 3 oder "Base" 4 oder "Group" 5 oder "Side" - Kein Respawn - Respawn als Mwe - Respawn am Todesplatz - Markerrespawn (respawn_west,) - Gruppenrespawn (Ist keine weitere KI vorhanden, dann Respawn als Mwe!) - Seitenrespawn (Ist keine weitere KI vorhanden, dann Respawn als Mwe!)

Bei Vehikeln gelten die Werte 0, 2 und 3 mit den gleichen Respawnarten.

7.6 - Das Deathmatch


Mchte man eine Deathmatch Mission erstellen, die ein oder mehr Spieler auch alleine gegeneinander und die KI spielen knnen, ist es ja notwendig die eigene Seite zu verfeinden, damit sich auch die KIs Einheiten ihrer Seite beschieen. Variante 1 Der Setfriend-Befehl wre eine Mglichkeit: East setFriend [East,0.1] Hat man mehrere Seiten, muss man eben alle gegeneinander verfeinden. Variante 2 Diese Variante verfeindet die Einheiten egal welcher Seite gegeneinander: this addRating ((- rating this) - 100000) Einheiten die diesen Eintrag nicht haben, werden nicht von Einheiten der eigenen Seite beschossen. Merke Bei Deathmatch-Missionen mit KI ist es notwendig diese mit mindestens 2 Wegpunkten und groem Radius zu versehen, damit diese sich auch bewegt. 227

Kapitel 7

7.7 - Multiplayerbereich festlegen


Da das Areal auf dem gespielt werden kann, mit seinen ber 400 Quadratkilometern doch etwas gro ist, gibt es die Mglichkeit einen Spielbereich einzugrenzen. Dies muss man dann auf der Karte, sowie auch direkt in der Landschaft sehen knnen. Dazu gibt es eine integrierte Funktion, mit welcher man einen solchen Bereich festlegen kann. Dazu bedarf es lediglich eines Objektes auf der Karte, welches den Mittelpunkt dieser Zone darstellt und in dem die Syntax eingetragen wird. Dieses Objekt ist im Idealfall ein unsichtbares Helipad, welches man unter Leer/Objekte nden kann. Dieses setzt man nun in die Mitte des spielbaren Bereiches und gibt in der Initzeile folgende Syntax zum Aufruf der Funktion an:

Bereich1 = [this,400,400,100,10] execVM "area.sqf"

Beim Start der Mission wird das Objekt, also das Helipad, automatisch Bereich1 genannt und je nach deniertem Bereich erscheinen um diesen Mittelpunkt herum Warnschilder und auf der Karte Marker, die diesen Bereich eingrenzen. Der Array erklrt sich hierbei wie folgt:

Name = [Mittelpunkt,X-Wert,Y-Wert,Objektanzahl,Winkel]

Alle Werte sind hierbei variabel und knnen somit frei bestimmt werden. Auf der Karte und in der Mission knnte das spter etwa so aussehen:

Mit Hilfe dieser Funktion erspart man sich somit eine Menge Arbeit, Zeit und Nerven, die Objekte alle selbst setzen zu mssen. Um das abgesperrte Gelnde kann man nun Todesauslser oder hnliches setzen, um ein Verlassen des Bereiches durch einen Mitspieler zu vermeiden. 228

7.8 - Zeit und Wertung


Die Zeitfestlegung und Wertung sind Multiplayeroptionen, die man mit angeben kann, aber nicht unbedingt muss. Dazu muss man zwei Parameter in der Description.ext denieren, welche wie folgt aussehen und spter in der Multiplayerlobby mit angezeigt werden. Zeitlimit titleParam1 valuesParam1[] defValueParam1 textsParam1[] = "Time limit:"; = {10000, 300, 600, 900, 1200, 1500, 1800, 2100, 3600, 7200}; = 1800; = {"Unlimited", "5 min", "10 min", "15 min", "20 min", "25 min", "30 min", "35 min", "60 min", "120 min"};

Alle Werte sind hierbei variabel. Die Zeitwerte knnen jetzt im Men als Zeitgrenze ausgewhlt werden. Der dazugehrige Text der Zeit ist in der letzten Zeile deniert und kann auch frei beschriftet werden. Punktelimit titleParam2 valuesParam2[] defValueParam2 textsParam2[] = "Score to win:"; = {10000, 5, 7, 10, 15, 20, 25, 30}; = 5; = {"Unlimited", 5, 7, 10, 15, 20, 25, 30};

Auch hier sind die Werte wieder frei nderbar und stellen die zu erreichenden Punktezahlen bis zur Beendung der Mission dar. Wie man nun auf dem Bild sehen kann, sind die oben denierten Parameter genau so bernommen worden und nun in der Multiplayerlobby frei whlbar. Kapitel 7

Somit ist die grobe Konguration schon mal fertig. Der Spieler hat nun die Mglichkeit die Punkt- oder Zeitbegrenzung frei nach seinem Interesse einzustellen. Jetzt fehlt nur noch die Konguration auf der Map, die dem Spiel sagt, dass die Punkte erreicht sind oder die Zeit um ist. Dazu kommen jetzt die Prfauslser. 229

Prfauslser Zustzlich werden nun noch drei Prfauslser gebraucht, welche das Vorgehen berwachen. Diese mssen hierbei wie folgt deniert werden: Auslser 1(Zeitberwacher): Name: Bedingung: bei Aktivierung: Achse a/b: Zeitende (Param1<10000) and (time>=param1) Ende=true 0/0

Auslser 2 (Punktberwacher): Name: Bedingung: bei Aktivierung: Achse a/b: Punktende (Param2 < 10000 and (({score _x >= Param2}) count [S1, S2, S3, S4, S5, S6] > 0)) Ende=true 0/0

Auslser 3 (Endauslser): Typ: Achse a/b: Bedingung: Ende 1 0/0 Ende

In der Bedingungszeile sind Einheiten mit Namen S1, S2, S3, S4, S5, S6 deniert. Diese knnen natrlich auch anders benannt werden, sollten aber dann in der Bedingungszeile des Auslsers 2 entsprechend angepasst werden. Damit die Punkte einer KI auch gezhlt werden knnen, muss das in der Description.ext mit AIkills=1 vordeniert werden.

230

7.9 - Punkte vergeben bzw. anzeigen lassen


Es gibt verschiedene Varianten sich die Punkte anzeigen zu lassen. Dies kann erfolgen, wenn jemand eine Fahne erobert bzw. anderweitig gepunktet hat oder ein Missionsziel erfllt wurde. Je nach Mission eben. Zunchst deniert man die Description.ext, wie in Kapitel 7.8 erlutert. Punktelimit titleParam2 valuesParam2[] defValueParam2 textsParam2[] = "Score to win:"; = {10000,5,7,10,15,20,25,30}; = 5; = {"Unlimited",5,7,10,15,20,25,30};

Jetzt deniert man in der Initzeile einer Einheit oder in der Init.sqs die Punktevariablen, die hier mal mit WestScore = 0 EastScore = 0 deniert werden und gleich zu Missionsbeginn den Wert 0 zugewiesen bekommen. Wird jetzt irgendeine Bedingung erfllt, also ein Gegner gettet, ein Missionziel erfllt oder wie auch immer, soll ja die jeweilige Seite Punkte zugewiesen bekommen. Dies wrde man dann mit WestScore = Westscore +1 festlegen. Also jedes Mal, wenn die vom Editierer festgelegte Bedingung erfllt ist, wird der jeweiligen Seite mit der obigen Syntax der Wert 1 (1 Punkt) hinzugefgt. Mit Westscore = Westscore -1 knnte man auch Punkte abziehen. Mchte man diese nun anzeigen lassen, kann man das auch auf unterschiedliche Weise machen. Zum Einen vielleicht mit einem Funkauslser, welchen ja dann jeder bei Bedarf benutzen kann oder zum Anderen, dass die Punkte angezeigt werden, wenn eine der beiden Seiten wieder gepunktet hat. Dazu wird dann in der Regel folgende Syntax verwendet:
Titletext [format [localize "STR_MP_STATUS", WestScore, EastScore], "Plain down"]

Kapitel 7

In einem Funkauslser knnte das dann so aussehen: Wertunganzeiger (Funkauslser) Aktivierung Achse a/b Text bei Aktivierung Radio Alpha (Mehrfach) 0 @STR_MP_SHOWSCORE Titletext [format [localize "STR_MP_STATUS", WestScore, EastScore], "Plain down"] 231

7.10 - Die Zeitanzeige


In einigen Missionen bietet es sich an, die Zeit ab und dann einblenden zu lassen, um die Mitspieler zu informieren, dass die Mission bald beendet ist und sie somit gleich noch ein bisschen anzuheizen, noch mglichst viele Punkte zu sammeln. Eine bewhrte Methode ist die, dass man dafr mehrere Prfauslser in die Mission setzt, die nach Ablauf der vom System gezhlten Zeit ab Spielbeginn ausgelst werden. Diese deniert man dann wie nun folgend erlutert. Zunchst muss man aber erst wieder den Parameter in der Description.ext denieren. Zeitlimit titleParam1 valuesParam1[] defValueParam1 textsParam1[] = "Time limit:"; = {10000, 300, 600, 900, 1200, 1500, 1800, 2100, 3600, 7200}; = 1800; = {"Unlimited", "5 min", "10 min", "15 min", "20 min", "25 min", "30 min", "35 min", "60 min", "120 min"};

Die letzten beiden Zeilen stellen eine lange Zeile dar, was hier nicht realisierbar ist. Hier mal ein Prfauslser, welcher anzeigt, dass nur noch 1 Stunde bis zum Missionsende Zeit ist, diese erfolgreich zu bewltigen. Zeitanzeiger (Prfauslser) Bedingung Achse a/b bei Aktivierung (Param1<10000) and (Param1>=3600) and ((Param1-time) <=3600) 0 Hint localize "STR_MP_07"

Jetzt msste man bei jedem weiteren Prfauslser eben den entsprechenden Wert denieren. Als Texteinblendung wurden die Stringtable Grundwerte, welche im Kapitel 7.13 aufgefhrt sind, verwendet. Hier mal eine nhere Erluterung der Bedingung: (Param1<10000) and (Param1>=Wert) and ((Param1-time)<=Wert) Wert ist hierbei der in Parameter1 bei valuesParam1 vergebene Wert (z.B.: 600) (Param1<10000) and (Param1>=600) and ((Param1-time)<=600) Jetzt wrde man bei Aktivierung eben den richtigen Stringtablewert dazu angeben, welcher dann angezeigt werden soll. In diesem Fall wre das: Hint localize "STR_MP_04" - Noch 10 Minuten 232

7.11 - Der Class Header


Der Class Header ist eine Denition in der Description.ext und sollte bei jeder MP-Mission dringenst mit angegeben werden. In ihm wird die min- und maximale Spieleranzahl, sowie der Missionstyp deniert, was einem Spieler spter bei der Auswahl eines Spielservers (siehe Grak) mit angezeigt wird. Auf dem Bild wurde beim oberen Server ein Class Header deniert, aber beim unteren nicht.

GameType:

Hier wird der Missionstyp mit angegeben. Zum Beispiel: SC DM CTF COOP TEAM - Sector Control - Deatmatch - Capture The Flag - Cooperation - Team

MinPlayers: MaxPlayers:

Angabe der minimalen Spieleranzahl Angabe der maximalen Spieleranzahl

In der Description.ext sieht das dann wie folgt aus:


class Header { gameType = CTF; minPlayers = 2; maxPlayers = 8; };

Kapitel 7

7.12 - Der Respawndialog


Der Respawndialog ist jener, welcher angezeigt wird, wenn man das Zeitliche gesegnet hat und auf seinen Respawn wartet. Diesen kann man in der Description.ext ein- bzw ausschalten. Das macht man mit folgendem Eintrag:

respawnDialog = false;

Zum Einschalten des Dialogs vergibt man den Wert true.

233

7.13 - Stringtable MP Grundwerte


Im Spiel selbst sind diverse Stringtablewerte verankert, welche man aufrufen kann, ohne eine eigene Stringtable.csv im Missionsordner erstellen zu mssen. Folgend nun eine kleine bersicht einiger Stringtablewerte die zum Multiplayerbereich gehren.

STR_MP_POINT_W STR_MP_POINT_E STR_MP_FLAG_TAKEN_W STR_MP_FLAG_TAKEN_E STR_MP_FLAG_BACK_W STR_MP_FLAG_BACK_E STR_MP_SECTOR_ATTACK_W STR_MP_SECTOR_ATTACK_E STR_MP_SECTOR_W STR_MP_SECTOR_E STR_MP_02 STR_MP_03 STR_MP_04 STR_MP_05 STR_MP_06 STR_MP_07 STR_MP_NOLIMIT STR_MP_SCORE STR_MP_SHOWSCORE STR_MP_TIME STR_MP_STATUS STR_MP_GAMEOVER_W STR_MP_GAMEOVER_E STR_MP_GAME_DESC_CTF

- USA punktet - SLA punktet - Name hat die Flagge - Name hat die Flagge - Die US Flagge ist wieder da - Die SLA Flagge ist wieder da - Die USA greifen Sector an - Die SLA greifen Sector an - Sektor ist jetzt unter Kontrolle der USA - Sektor ist jetzt unter Kontrolle der SLA - Noch 1 Minuten - Noch 5 Minuten - Noch 10 Minuten - Noch 20 Minuten - Noch 30 Minuten - Noch eine Stunde - Unbegrenzt - Punkte - Punkte zeigen - Zeit - Status USA: SLA: - Die USA gewinnen - Die SLA gewinnt - 2 Teams, 2 Flaggen, Erobern Sie die feindliche Flagge STR_MP_GAME_DESC_DM - Jeder kmpft fr sich, es gibt keine Verbndeten STR_MP_GAME_DESC_SCONTROL - Sammeln Sie Punkte, indem Sie die vorgegebenen Sektoren kontrollieren STR_MP_GAME_DESC_PILOTDOWN - Finden und retten Sie die Piloten STR_MP_GAME_DESC_HOLDCASTLE - USA: Erobern Sie die Festung, SLA: Verteidigen Sie die Festung Zum Aufrufen kann man die verschiedenen Texteinblendsyntaxes verwenden, mit welchen man Text einblenden kann. Siehe die Verwendung im Kapitel 7.17. 234

7.14 - Der Fahrzeug Respawn


Fr den Vehikelrespawn gibt es verschiedene Mglichkeiten. Zum Einen die Standardvariante und zum Anderen die selbstentwickelte Variante, welche ich im Folgepunkt vorstelle. Hier erst einmal die Standardvariante: Mit folgender Syntax in der Initzeile des jeweiligen Fahrzeugs, legt man fr dieses die individuelle Konguration fest. Die Syntax hierfr lautet: Fahrzeug1 respawnVehicle [Zeit,Anzahl] Fahrzeug1 respawnVehicle [Zeit] Hat man fr dieses Fahrzeug nun einen individuellen Respawnzeitwert vergeben, so wird das Spiel die Zeitvorgabe aus der Description.ext bersehen und die fr das Fahrzeug denierte Zeit nutzen. Setzt man die Anzahl der Respawns in der Initzeile auf 0, wird das Fahrzeug unendlich gespawnt. In der Description.ext legt man Standardmig folgende Zeilen fest: respawnVehicle=3; - Die Art des Vehiclerespawn respawnVehicleDelay=10; - Die Zeit bis zum Vehiclerespawn Die Respawnarten Bei Fahrzeugen hat man, was die Respawnarten angeht, nur zwei Mglichkeiten. Hierbei stehen der Respawn am Todesplatz (2) oder der Respawn am Seitenrespawnplatz (3) zur Auswahl. Diesen deniert man ganz normal in der Description.ext: respawnVehicle=3; 0 oder "None" 2 oder "Instant" 3 oder "Base" - Die Art des Vehikelrespawn - Kein Respawn - Respawn am Todesplatz - Markerrespawn (respawn_west,)

Kapitel 7

Die Respawnpunkte Die Respawnpunkte fr die Vehikel lauten dabei wie folgt: Westen: Respawn_Vehicle_West Widerstand: Respawn_Vehicle_Guerrila Osten: Respawn_Vehicle_East Zivilisten: Respawn_Vehicle_Civilian

235

7.15 - Mr-Murrays Fahrzeug Respawn


Da die Standardvariante nicht sonderlich viele Features mit sich bringt, habe ich mich ein wenig damit auseinandergesetzt und die nun folgende, sehr ausfhrliche Lsung herbeigefhrt, welche keinen Description.ext-Eintrag bentigt. Zunchst setzt man ein Fahrzeug auf die Karte, was fr den Respawn vorgesehen sein soll. Dieses bekommt den Namen Veh1 und einen festen Respawnpunkt, wofr eine Logik mit dem Namen Veh1Pos gesetzt wird. Jetzt ist ein Fahrzeug mit Spawnpunkt festgelegt. Was nun noch fehlt ist ein Prfauslser, welcher prft, ob das Fahrzeug noch lebt bzw. fahren kann. Jedes Fahrzeug, welches am Ende spawnbar sein soll bekommt hierbei einen eigenen Positionspunkt(Logik) und einen eigenen Prfauslser mit dem jeweiligen Namen des Fahrzeugs. Prfauslser (Vehikelberwacher) Name: Bedingung: Bei Aktivierung: Achse a/b: Veh1Guard !Canmove Veh1 [Veh1,"M1Abrams",Veh1Pos,360,2,10,1,0,0] exec "vehicle-respawn.sqs" 0/0

Logik (Positionspunkt) Name: Veh1Pos

Der in der Aktivierungszeile des oben aufgefhrten Prfauslsers angegebene Array beinhaltet alle Denitionsmglichkeiten die wichtig sind. Man muss also nicht mehr in das Skript wechseln und kann alles fr jedes Fahrzeug individuell in dem jeweiligen Array kongurieren. Dieser erklrt sich hierbei wie folgt: [Fahrzeugname, Fahrzeugklasse, Respawnpunkt, Azimut, Respawnzeit, Respawnanzahl, Delete, Statisch, Eekt] exec "vehicle-respawn.sqs" Fahrzeugname Fahrzeugklasse Respawnpunkt Azimut Respawnzeit Respawnanzahl Delete Statisch Eekt 236 - Name des Fahrzeugs - Klasse des Fahrzeugs (siehe Kapitel 3.7) - Respawnpunkt - lickrichtung (Wert der Blickrichtung) - Zeit bis zum nchsten Respawn - Anzahl der Respawns (0=Kein Respawn) - Fahrzeug lschen (0=nein; 1=ja) - Respawn statisch oder exibel (0=Flexibel; 1=Statisch) - Explosionseekt beim Lschen (0=Kein Eekt; 1=Eekt)

Der eben aufgefhrte Array ruft das nun folgende Skript Vehicle-respawn.sqs auf. ?!(Local Server): exit _vehicle = _this select 0 _vehicleClass = _this select 1 _respawnArea = _this select 2 _azimutCode = _this select 3 _respawnDelay = _this select 4 _respawnrate = _this select 5 _deletevehicle = _this select 6 _staticrespawn = _this select 7 _deleteeect = _this select 8 _counter = 0 #Start ~1 ?(Canmove _Vehicle) : goto "Start" ;// Respawnrate (Number of Respawns) ? (_counter >= _respawnrate) : exit _counter = _counter +1 ;// Staticposition (0=Flexible/1=Static) ? (_staticrespawn == 0) : _respawnArea setpos getpos _vehicle ? (_staticrespawn == 0) : _VehAzimut = getdir _vehicle ~_respawnDelay ;// Deletevehicle (0=No Delete/1=Delete) ? (_deletevehicle == 0) : goto "Respawn" deleteVehicle _vehicle ;// Delete eect ? (_deleteeect == 0) : goto "Respawn" _bomb="M_Javelin_AT" createVehicle [0,0,1000] _bomb setpos getpos _vehicle ;// Respawn #Respawn ~2 _vehicle = _vehicleClass createVehicle getpos _respawnArea _vehicle setdir _azimutCode ? (_staticrespawn == 0) : _vehicle setdir _VehAzimut goto "Start" Kapitel 7 237

7.16 - Flaggen Grundinformationen


Um Missionen wie Capture the Flag (CTF), Sector Control (SC) oder hnliches erstellen zu knnen, bentigt man ein gewisses Grundwissen ber die Verwendung der Fahnen, welches nun in diesem Abschnitt erlutert wird. Zunchst gilt zu erwhnen, dass man den Fahnen eine Seite zuweisen kann. Ist einer Fahne eine Seite (z.b West) zugewiesen worden, so ist es der eigenen Seite nicht mglich die Fahne abzunehmen. Alle anderen Seiten knnen jedoch die Fahne aufnehmen. Die Syntax hierfr lautet: this setFlagSide Seite Diese Syntax wird in der Initzeile der jeweiligen Fahne eingegeben. Jede Fahne wird nun einzeln konguriert. Also jede Fahne bekommt nun einen separaten Eintrag in der Initzeile. Folgend eine Denitionsmglichkeit fr eine Fahne: this setFlagSide WEST; this setFlagTexture "Flagge.jpg" Mit diesen beiden Eintrgen in der Initzeile ist die Fahne nun fertig deniert. Die Fahne hat nun die Seite West und eine eigene Fahnentextur zugewiesen bekommen. Fr die Fahnentexturen verweise ich hier auf Kapitel 5.35 oder die nchste Seite. Zudem muss jede Fahne variabel benannt werden. Also zum Beispiel die Westfahne FlagWest und die Ostfahne FlagEast. Kommt nun ein Ostsoldat an diese Fahne, hat er die Mglichkeit diese aufzunehmen. Dabei wir sie ihm auf die Schulter gesetzt und er trgt sie mit sich. Stirbt er Unterwegs, so wird die Flagge bei seinem Krper liegen bleiben. Kommt ein Mitspieler seiner Seite vorbei, hat dieser die Mglichkeit die Fahne an der Leiche aufzunehmen. Kommt ein Gegenspieler und nimmt die Fahne auf, so wird diese in der Regel wieder an den Fahnenmast zurckgebeamt. Nun gibt es noch verschiedene Befehle, welche dafr bentigt werden: ObjNull Dieser Wert steht fr Null, was bedeutet dass, wenn die Fahne an ihrem Mast hngt, genau dieser Zustand besteht. Hat ein Spieler die Fahne, so ist der Zustand nicht mehr ObjNull. Dieser Zustand lsst sich bewusst herstellen oder abfragen. Abfragen eines Zustandes: agOwner FlagWest == objNull agOwner FlagWest == EAST Herstellen eines Zustandes:

FlagWest setFlagOwner objNull FlagWest setFlagOwner Name

238

FlagOwner FlagOwner ist der Fahnenbesitzer. Dieser Befehl gibt den Besitzer der Fahne zurck. Ist niemand Eigentmer der Fahne wird der Befehl objNull zurck-gegeben. Die Bedingungssyntax hierfr lautet: agOwner FlagWest agOwner FlagWest == Name1 SetFlagOwner Mit dieser Syntax wird der Fahnenbesitzer bestimmt. Gibt man statt einem Namen objNull an, wird die Fahne zurck an den Masten gebeamt. Hierfr ist folgende Syntax relevant: Rckgabe an Mast: FlagWest setFlagOwner objNull Vergabe an Spieler: FlagWest setFlagOwner Name1 Flag Mit dem Befehl Flag lsst man sich die Fahne zurckgeben, welche eine Einheit gerade trgt. Es ist also somit eine Prfung auf Fahnenbesitz. Ist niemand im Besitz der Fahne wird wieder der Wert objNull zurckgegeben. Flag Name1 Beispiel: Prfung auf Fahnenbesitz: Flag Name1 == FlagWest Kapitel 7 SetFlagTexture Mit setFlagTexture wird die Textur der Fahne bestimmt. Dies ist unter anderem im Kapitel 5.35 erlutert. Die Syntax fr eine eigene Fahne, welche im Missionsverzeichnis liegt lautet: this setFlagTexture "Flagge.jpg" Und fr eine spielinterne Fahne wird der Quellpfand mit angegeben (siehe Kapitel 5.35): this setFlagTexture "\ca\misc\data\usa_vlajka.paa" SetFlagSide Hiermit wird die Seite der Flagge vergeben. Einheiten dieser Seite knnen die Flagge dann nicht aufnehmen. Die Syntax hierfr lautet: this setFlagSide Seite 239

7.17 - Capture The Flag


Capture the Flag ist ein Spielverfahren bei dem die eine Seite der anderen die Fahne klaut und zur eigenen Fahne bzw. in den eigenen Bereich bringt und damit punktet. Gewinner ist die Seite, die die vorher im Men festgelegte Punktzahl zuerst erreicht hat oder in der vorgegebenen Zeit die meisten Punkte erreicht hat. Was sich beim Spielen sehr einfach anhrt ist im Editor noch lange nicht so einfach zu bewltigen. Natrlich gibt es auch hier wieder unzhlige Mglichkeiten eine solche Mission zu realisieren. Hier wird eine Variante erlutert mit der man fr seine CTF-Mission die CTF-Basis festlegen kann. Sprich: wenn man dieses jetzt zeichengenau in die Map bernimmt, ist die Funktion schon mal gewhrleistet. Nachdem man die auf den folgenden Seiten erklrten Komponenten auf die Map gesetzt hat, sollte die Map am Ende zunchst wie folgt aussehen:

Links ist die Fahne West (FlagWest) mit dazugehrigem Auslserbereich (ZoneWest), einem grnen Marker (nur markierende Bedeutung) und ganz links die drei dazugehrigen Prfauslser zu sehen. East, hier rechts, hat jeweils die gleichen Komponenten, nur mit anderen Werten. Die Fahne Ost heit hierbei FlagEast und der Auslserbereich ZoneEast. Dazu noch der rote Marker, der die Position der Fahne auf der Karte zeigt und ganz rechts die drei dazugehrigen Prfauslser. Die drei unteren Auslser unter dem Spieler beinhalten einen Initialisierungsauslser, einen Zeit- und Punkteberwachauslser und den Endauslser, der die Mission nach Erfllung der Bedingung Zeit oder Punkte beendet. Dieses Beispiel beinhaltet noch keinen Respawn oder hnliches. Hier ist nur das reine CTF-Zubehr zu sehen, welches die sptere CTF-Funktionalitt sicherstellt. 240

CTF-Komponenten Hier nun die einzelnen Komponenten mit der jeweiligen Kongurierung. Steht bei Aktivierung, Bedingung oder Init etwas untereinander, so stellt dies trotzdem eine Zeile dar, weil dies hier ja aus Platzgrnden nicht anders realisierbar ist. W E S T S E I T E Fahne Westen: Name: Init:

FlagWest this setFlagSide WEST; this setFlagTexture "\ca\misc\data\usa_vlajka.paa"

Bereich Westen (Auslserbereich): Name: ZoneWest Achse a/b: 10/10 Erreicht der Eroberer der Ostagge diesen Auslserbereich, bekommt die Westseite Punkte zugewiesen, was durch eine Texteinblendung angezeigt wird. Eroberer Ostagge (Prfauslser I): Achse a/b: 0/0 Bedingung: not isNull agowner FlagEast and agOwner FlagEast != OwnerEast Aktivierung: OwnerEast = agOwner FlagEast; titletext[format [localize "STR_MP_FLAG_TAKEN_E", name OwnerEast], "Plain down"]; FlagManW=true Dieser Auslser prft wer Besitzer der Ostagge ist. Solange diese am Mast hngt passiert nichts. Sobald ein Westsoldat diese aufnimmt kommt eine Texteinblendung welche angibt, welcher Spieler die Flagge aufgenommen hat. Eroberer Ostagge punktet (Prfauslser II): Achse a/b: Bedingung: Aktivierung: 0/0 (OwnerEast in list ZoneWest) and not FlagManE and not Wert1 Kdo=OwnerEast; OwnerEast=objNull; FlagEast setFlagOwner objNull; WestScore=WestScore+1; titletext[format [localize "STR_MP_POINT_W", WestScore, EastScore], "Plain down"]; FlagManW=false; Kdo addScore 5; {_x addScore 5} forEach units Group Kdo 241 Kapitel 7

Dieser Auslser berwacht nun, ob der Eroberer der Ostagge, also der FlagOwner FlagEast, den Auslserbereich ZoneWest betreten hat. Ist diese Bedingung erfllt, bekommt die Westseite einen Punktewert zugewiesen, was wieder durch eine Texteinblendung angezeigt wird. Eroberer Ostagge verliert Flagge (Prfauslser III): Achse a/b: 0/0 Bedingung: (isNull agowner FlagEast) and FlagManW Aktivierung: FlagManW=false; titletext[localize "STR_MP_FLAG_BACK_E", "Plain down"] Dieser dritte Auslser berwacht, ob die Fahne noch im Besitz des Eroberers ist. Stirbt dieser und nimmt ein Ostsoldat die Fahne von der Leiche auf, wird die Fahne zurck an den Fahnenmast gebeamt und es kommt eine Texteinblendung, dass die Ostseite ihre Fahne zurck hat.

O S T S E I T E Fahne Osten: Name: Initzeile:

FlagEast this setFlagSide EAST; this setFlagTexture "\ca\misc\data\ rus_vlajka_co.paa"

Bereich Osten (Auslserbereich): Name: ZoneEast Achse a/b: 10/10 Erreicht der Eroberer der Westagge diesen Auslserbereich, bekommt die Ostseite Punkte zugewiesen, was durch eine Texteinblendung angezeigt wird. 242

Eroberer Westagge (Prfauslser I): Achse a/b: 0/0 Bedingung: not isnull agOwner FlagWest and agOwner FlagWest != OwnerWest Aktivierung: OwnerWest = agowner FlagWest; titletext[format [localize "STR_MP_FLAG_TAKEN_W", name OwnerWest], "Plain down"]; FlagManE=true Dieser Auslser prft, wer Besitzer der Westagge ist. Solange diese am Mast hngt, passiert nichts. Sobald ein Ostsoldat diese aufnimmt, kommt eine Texteinblendung welche angibt, welcher Spieler die Flagge aufgenommen hat.

Eroberer Westagge punktet (Prfauslser II): Achse a/b: 0/0 Bedingung: (OwnerWest in list ZoneEast) and not FlagManW and not Wert1 Aktivierung: Kdo=OwnerWest; OwnerWest=objNull; FlagWest setFlagOwner objNull; EastScore=EastScore+1; titletext[format [localize "STR_MP_POINT_E", WestScore, EastScore], "Plain down"]; FlagManE=false; {_x addScore 5} forEach units group Kdo Dieser Auslser berwacht nun, ob der Eroberer der Westagge, also der FlagOwner FlagWest, den Auslserbereich ZoneEast betreten hat. Ist diese Bedingung erfllt, bekommt die Ostseite einen Punktewert zugewiesen, was wieder durch eine Texteinblendung angezeigt wird.

Kapitel 7

Eroberer Westagge verliert Flagge (Prfauslser III): Achse a/b: 0/0 Bedingung: (isnull agowner FlagWest) and FlagManE Aktivierung: FlagManE=false; titletext[localize "STR_MP_FLAG_BACK_W","Plain down"] Dieser dritte Auslser berwacht, ob die Fahne noch im Besitz des Eroberers ist. Stirbt dieser und nimmt ein Westsoldat die Fahne von der Leiche auf, wird die Fahne zurck an den Fahnenmast gebeamt und es kommt eine Texteinblendung, dass die Westseite ihre Fahne zurck hat.

243

Zustze: Nachdem nun fr jede der Seiten die funktionellen Bereiche festgelegt wurden, fehlen nur noch der Initialisierungsauslser, der Zeit- und Punkteberwachauslser und der Endauslser, um die Mission auch beenden zu knnen. CTF-Init (Initialisierungsauslser): Name: CTF-Init Achse a/b: 0/0 Bedingung: true Aktivierung: Wert1=false; WestScore=0; EastScore=0; OwnerWest= objNull; OwnerEast=objNull; FlagManE=false; FlagManW=false; Zeit=0; Diesen Auslser kann man alternativ auch weglassen und die Befehle aus der Aktivierungszeile in die Init.sqs schreiben. Aus funktionell sichereren Grnden habe ich diese Variante vorgezogen. Hier werden verschiedene Variablen deniert, welche mit den Auslsern der jeweiligen Seiten zusammenarbeiten. Wertungsprfer (Prfauslser): Name: PunktZeitWache Bedingung: (param1<10000 and ((time >= param1) or (Zeit >= param1))) or (param2<10000 and ((WestScore>=param2) or (EastScore>=param2))) Aktivierung: Zeit=Time; publicVariable "Zeit"; Wert1=true; titletext[format [localize "STR_MP_GAMEOVER_FINAL", WestScore, EastScore], "Plain"]; EndOfGame=true Dieser Auslser berwacht die Zeit- und Punktevorgaben, die vor dem Spielstart vom Admin eingestellt wurden. Ist die jeweilige Bedingung erfllt, wird die Mission beendet. Bei diesem Beispiel wird die Mission sofort beendet, da in der Aktivierungszeile EndOfGame=true deniert wurde. Dies knnte man auch weglassen und alternativ ein Outroskript (z.B.: [] exec "outro.sqs") mit einbinden und in diesem dann erst am Ende des Skriptes die Variable EndOfGame auf true setzen. Der Auslser prft also, ob der jeweilige Variablenwert (Westscore, Eastscore fr die Punkte oder Time fr die Zeit) den vorgegebenen Parameterwert (Param1(Punkte), Param2(Zeit)) erreicht oder berschritten hat, womit die Bedingung dann erfllt ist und der Auslser auslst. Hierbei gilt darauf zu achten, dass man in der Description.ext die Zeit- und Punkteparameter denieren muss, wie in Kapitel 7.8 ausfhrlich beschrieben wurde. Bitte nur den Description.ext-Eintrag vornehmen, weiter nichts. Die Auslser sind ja bereits deniert.

244

Endauslser (Prfauslser): Name: EndWache Bedingung: EndOfGame Typ Ende 1 Der Endauslser wird erst ausgelst, wenn die Variable EndOfGame auf true gesetzt wurde und beendet dann die Mission. Hier ist es Vorteilhaft eine kleine Zeitverzgerung (Min-Mid-Max) anzugeben, damit der Auslser nicht gleich sofort anspringt, sondern noch ein paar Sekunden wartet. Wertunganzeiger (Funkauslser): Aktivierung: Radio Alpha (Mehrfach) Achse a/b: 0 Text: @STR_MP_SHOWSCORE Aktivierung: titletext[format [localize "STR_MP_STATUS", WestScore, EastScore], "Plain down"] Alternativ kann dieser Auslser, welcher auf der Gesamtgrak nicht zu sehen ist, noch mit eingefgt werden. Er ermglicht es, dass jeder Spieler jederzeit den aktuellen Punktestand per Funk Alpha aufrufen kann. Punkt- und Zeitdenition in der Description.ext: Damit die Punkt- und Zeitberwachung komplett ist, mssen diese noch so in der Description.ext deniert werden, wie es in Kapitel 7.8 erlutert ist. Hier aber trotzdem die Zeilen, die hierfr in der Description.ext erscheinen mssen: Zeitlimit: titleParam1 valuesParam1[] defValueParam1 textsParam1[] Kapitel 7

= "Time limit:"; = {10000, 300, 600, 900, 1200, 1500, 1800, 2100, 3600, 7200}; = 1800; = {"Unlimited", "5 min", "10 min", "15 min", "20 min", "25 min", "30 min", "35 min", "60 min", "120 min"};

Die letzten beiden Zeilen stellen eine lange Zeile dar, was hier nicht realisierbar ist. Punktelimit: titleParam2 valuesParam2[] defValueParam2 textsParam2[]

= "Score to win:"; = {10000, 5, 7, 10, 15, 20, 25, 30}; = 5; = {"Unlimited", 5 , 7, 10, 15, 20, 25, 30}; 245

7.18 - Die Publicvariable


Die Publicvariable wird ausschlielich im Multiplayer bentigt, deshalb ist sie auch in diesem Kapitel erlutert und nicht im Scriptingkapitel. Sie ist von der Form her mit der globalen Variable vergleichbar, unterscheidet sich jedoch trotzdem ein wenig von ihr. Mit dem Befehl Publicvariable macht man eine globale Variable publik. Das bedeutet, dass die Information von einem Client an alle brigen Clients und dem Server oder Host gesendet wird und dort dann die jeweilige Aktion ausgefhrt wird. Dierenzieren wir noch einmal. Lokale Variable Nur in einem lokalen Bereich gltig. Als Beispiel in einem Skript(SQS) oder einer Funktion (SQF). Zu erkennen ist diese Variable an dem Unterstrich davor. Bsp.: _Variable

Globale Variable Die globale Variable gilt, wie der Name schon sagt, global. Also im gesamten Bereich der Mission. Beispiel: Vergibt man einen Namen an eine Einheit, ist das schon eine globale Variable. Spielt man nun im Multiplayer, wird man ja als Client lokal gesehen, was bedeutet, dass also die globale Variable, die in der ganzen Mission und auf der ganzen Karte gilt, so gesehen zu einer lokalen Variable wird. Bei fest vergebenen Namen gibt es kein Problem, da jeder Client die Mission startet und somit die Werte bernimmt. Mchte man nun aber einer Variablen einen Wert zuweisen, also sie auf True oder False setzen, passiert das nur auf dem jeweiligen Client. Diese Information muss also nun an alle anderen gesendet werden, damit die Variable auch auf allen anderen Clients den richtigen Wert bekommt und die jeweilige Aktion auch dort ausgelst werden kann. Um eine globale Variable publik machen, gibt man das wie folgt an: Ziel1=true; publicVariable "Ziel1" Man setzt also Ziel1 auf True und macht diesen Wert mit dem Zusatz PublicVariable "Ziel1" publik. Diese Information wird nun an alle anderen Clients und dem Server oder Host gesendet. Verwendet man in seiner Mission mehrere Variablen, die spter den Wert true oder false bekommen sollen, legt man sie vorher in der Init fest und setzt diese zunchst auf False, damit alle Clients bzw. Host oder Server mit den gleichen Werten starten.

Variable1=False Variable2=False publicVariable"Variable1" publicVariable "Variable2"

246

7.19 - Allgemeines
In diesem Unterkapitel werden ein paar grundlegende Bereiche erklrt, die unter anderem im Multiplayerediting sehr wichtig sind. Da gerade im Editingbereich wesentliche Unterschiede zwischen Einzelspieler- und Mehrspielermissionen bestehen, ist es wichtig hier kurz zu erlutern, worauf man beim Multiplayerediting so alles achten muss. Dedicated Server Der Dedicated Server ist ein fest zugeordneter(dedizierter) Server, auf welchen alle Clients, auch der Administrator, von extern zugreifen. Dieser ist ausschlielich als Server bestimmt. Es sitzt also kein Spieler an diesem System. Dieser Server kann berall auf der Welt stehen und kann beim jeweiligen Provider angemietet werden. Gesteuert wird dieser ingame dann mit den Steuerungsbefehlen, welche hier im Kapitel 7.20 erlutert sind. Host Ein Host ist ein Spieler, welcher auf seinem Rechner eine Mehrspielermission ernet(hostet), auf welche mehrere Mitspieler(Clients) von extern zugreifen. Der Host spielt dann an dem gleichen System. Er ist somit Server und Spieler. Client Ein Mitspieler wird im Multiplayer als Client bezeichnet. Egal ob dabei auf einem Dedicated Server oder auf einem Host gespielt wird. Spielen alle auf einem Dedicated Server, so sind alle Clients. Ernet einer ein Spiel auf dem Rechner auf dem er auch spielt, so ist er Host und alle anderen Clients.

Kapitel 7 Unterschied Einzelspieler und Mehrspieler Wie sicherlich beim Testen einer Mission im Editor und spter im Multiplayer gibt es wesentliche Unterschiede im jeweiligen Bereich. Alles was in der Editorvorschau oder im Einzelspielerbereich funktioniert muss nicht gleich im Multiplayerbereich funktionieren. Deshalb ist es wichtig die jeweiligen Unterkapitel dieses Kapitels zu bercksichtigen und in seiner Multiplayermission zu entsprechend zu denieren. 247

Logik Server bzw. Logik AI Bei Mehrspielermissionen setzt man grundstzlich eine Logik auf die Karte, die Server heit. Eine alternative Variante wre AI, wie BI sie bezeichnet, was aber grundstzlich keinen Unterschied macht. Also bleibt man dabei, die Logik mit dem Namen Server zu versehen. Diese Logik wird nur vom Server erstellt und taucht auf den Clients nicht auf. Diese gibt an, dass das System Server ist. Mit folgenden Befehlen kann man also nun festlegen, was auf dem Server ausgefhrt werden soll und was nicht. ? !(local player) : exit Diese Syntax am Anfang eines Skriptes stellt sicher, dass das Skript nur auf den Clients abluft. Es wird also geprft ob das System ein Client ist. Da jeder Spieler beim Verbinden vom System die feste Variable Player zugewiesen bekommt, wei das System, dass es das Skript ausfhren darf. Die Informationen werden hierbei an alle Clients weitergegeben. Ist der Client gleichzeitig Host, wird das Skript auch bei ihm ausgefhrt, weil er gleichzeitig Server und Client ist. ? !(local server) : exit Taucht diese Syntax am Anfang eines Skriptes auf, wird das Skript nur auf dem Server ausgefhrt. Das System macht hierbei keinen Unterschied zwischen einem Lokal Host und einem Dedicated Server. Das Skript wird nun auf jeden Fall bei beiden Varianten ganz normal ausgefhrt. Diese Syntax wird grundstzlich verwendet. Es wird also serverseitig bzw. global gearbeitet, was ja in der Regel am meisten Sinn macht, da ja die meisten Informationen auch an die Mitspieler weitergegeben werden mssen. Wir arbeiten also grundstzlich global! Alternativ gibt es noch isServer. Beispiele: ? isServer : hint "Server" oder ?! isServer : hint "Not Server" Spielerbezogenes Skript Mchte man ein Skript nur bei einem Spieler mit einem bestimmten im Editor festgelegten Namen ausfhren, legt man das am Anfang des Skriptes fest. Zunchst benennt man die Einheiten natrlich entsprechend im Editor. Ist dies erfolgt, deniert man die Syntax. Das Ganze schaut dann so aus: player != Soldier1 : exit Ist der Spieler also nicht die im Editor benannte Einheit Soldier1, dann wird das Skript beendet. Dies kann man machen, wenn ein Sound nur bei dieser einen Einheit Soldier1 abgespielt werden soll, eine Texteinblendung nur dieser eine Spieler erhalten soll oder hnliches. Hier nochmal zwei weitere Syntaxbeispiele. Ist Player == Soldier1 dann mach dies oder bei der zweiten Syntax, ist der Name von Spieler == "Mr-Murray", dann mach das (hier: exit) (player == Soldier1) : exit (name vehicle player == "Mr-Murray") : exit 248

7.20 - Die Steuerungsbefehle


Dieser Bereich hat zwar nichts mit dem Editing zu tun, aber ist dennoch erwhnenswert, weil ja am Ende doch jeder mal online spielt oder seine Mission testen mchte. Im Multiplayerbereich gibt es verschieden Befehle, mit denen es als Spieler unter anderem mglich ist, einen Administrator zu voten, ber den Rausschmiss eines Cheaters abzustimmen und vieles mehr. Dem Admin des Servers stehen hierbei noch weit mehr Befehle zur Verfgung. Diese Befehle sind nahezu identisch zum Vorgnger Operation Flashpoint. Lediglich drei Neue sind hinzugekommen. Folgend nun die Auistung und Erluterung der Befehle. Administratorbefehle #login password #logout #vote admin (name or ID) #mission lename #missions #restart #reassign #kick (name or ID) #shutdown #init #monitor (Interval in Sek.) #debug #exec users #exec kick ID #exec ban ID Login als Administrator Logout als Admin Administrator voten (auch fr Clients) Auswahl einer Mission mit bekannten Namen Aufruf des Missionsauswahlmens Neustart der Mission Neustart und Auswahl einer Rolle Kickt Spieler anhand von Name oder ID Startet den Server neu Ldt die Server Cong Datei neu Zeigt Performance Informationen des Servers an (Angabe Zeit in Sekunden. 0 stoppt das Monitoring) Ruft verschiedene Informationen auf (checkle, console, totalsent, usersent, userinfo, userqueue) Ruft eine Liste aller connecteten Spieler auf Erlaubt einen Spieler vom Server zu kicken. Erlaubt einen Spieler vom Server zu verbannen

Kapitel 7

Mitspielerbefehle (Client) #vote missions #vote mission (name) #vote kick (name/ID) #vote restart #vote reassign #userlist Abstimmung zur Missionsauswahl Abstimmung zu bestimmter Mission Abstimmung ber Mitspielerkick Abstimmung ber Neustart der Mission Neustart und Auswahl einer Rolle Zeigt eine Liste aller connecteten Mitspieler an

Die Aufrufe lassen sich mit der Chatmglichkeit im Spiel starten. Dazu drckt man die Taste, auf der auch der Unterstrich _ deniert ist, gibt den jeweiligen Befehl ein und besttigt mit Enter. 249

7.21 - Die Bewanung im Multiplayer


Zunchst gibt es bei der Bewanung eines Soldaten im Multiplayer keinen Unterschied. Hier wir das gleiche Verfahren verwendet, wie auch schon im Singleplayer. Eben die vorigen Waen mit dem removeWeapon-Befehl entfernen und die neuen mit dem addWeapon-Befehl hinzufgen. Problematisch wird es nur, wenn der Spieler einmal das Zeitliche gesegnet hat und respawnt wird. Denn dann hat die Einheit die Standardwaen, die sie hat, wenn man sie uneditiert auf die Map setzt. Dem Problem hilft man sich mir einem Skript ab. Zunchst setzt man einen Prfauslser auf die Map, welcher berprft, ob die Einheit namens Soldat1 noch am Leben ist. Prfauslser Typ: Bedingung: Bei Aktivierung: Achse a/b: Mehrfach ! alive Soldat1 [Soldat1] exec "weapon.sqs" 0/0

Wurde Soldat1 nun gettet, lst dieser Auslser aus und startet das Skript Weapon.sqs. Das Skript pausiert nun am Anfang bei @alive _Unit und wartet, bis Soldat1 wieder respawnt wurde, was ja von der Konguration der Description.ext abhngt. Je nachdem welche Delaygre man dort deniert hat, dauert es eine Weile. Nachdem Soldat1 aber respanwt wurde, luft das Skript weiter und entfernt erst alle Waen und fgt dann die Neuen hinzu. Im Skript legt man lediglich man dann die Waen nach Bedarf fest. _Unit = _this select 0 @alive _Unit removeallWeapons _Unit _Unit addweapon "Binocular"; _Unit addweapon "NVGoggles"; _Unit addmagazine "8Rnd_9x18_MakarovSD"; _Unit addmagazine "8Rnd_9x18_MakarovSD"; _Unit addmagazine "8Rnd_9x18_MakarovSD"; _Unit addmagazine "8Rnd_9x18_MakarovSD"; _Unit addmagazine "8Rnd_9x18_MakarovSD"; _Unit addmagazine "8Rnd_9x18_MakarovSD"; _Unit addweapon "MakarovSD"; _Unit addmagazine "30Rnd_545x39_AKSD"; _Unit addmagazine "30Rnd_545x39_AKSD"; _Unit addmagazine "30Rnd_545x39_AKSD"; _Unit addmagazine "30Rnd_545x39_AKSD"; _Unit addmagazine "30Rnd_545x39_AKSD"; _Unit addmagazine "30Rnd_545x39_AKSD"; _Unit addweapon "AKS74UN"; exit; 250

7.22 - Spielerbezogene Textmitteilung


Textmitteilungen sind ja normalerweise relativ leicht umzusetzen. Im Muliplayerbereich gibt es aber, je nach Mission, eben das Problem, dass der Text global angezeigt wird. Was also bedeutet das, wenn man einen Hint oder eine andere Texteinblendung machen mchte, die spieler- oder seitenbezogen laufen soll, man etwas anders arbeiten muss. Das Ganze wird hier wieder mit einem kleinen Skript gelst, bei welchem lediglich die erste Skriptzeile entscheident ist. Hier muss nmlich deniert werden, wer die Mitteilung sehen darf und wer nicht. Hierbei nimmt man sich u.a. folgende Syntaxformen zur Hilfe: Spielerbezogen: ? (player == Name1) : exit ? (player != Name1) : exit ? (name vehicle player != "Mr-Murray") : exit ? side Player == EAST : exit ? side Player != EAST : exit

Seitenbezogen:

Man kann sich selbst so ziemlich jede Syntaxform selbst stricken, ist nur eine Frage der Parameter. Die obigen Syntaxformen sind lediglich ein paar Beispiele. Anwendungsbeispiele Bei folgendem Beispiel bekommt die Mitteilung jetzt nur der Client, der die Einheit spielt, die im Editor mit S1 benannt wurde. Zum Beispiel der Leader. ? (player != S1) : exit hint format ["%1, Sie haben mit Ihrer Gruppe einen neuen Auftrag", name S1]; exit Kapitel 7 Das Ganze kann man natrlich auch anders machen. Zum Beispiel, wenn der Spieler einen bestimmten Spielernamen hat, soll er die Nachricht nicht oder erst recht bekommen. ? (name vehicle S1 != "Mr-Murray") : exit hint format ["Hallo %1, du spielst die Einheit XY.", name S1]; exit Wie man sich sicher denken kann, ist die Variante der Texteinblendungen vllig egal. Die obigen Beispiele sind mit Hints dargestellt, was aber kein Muss ist. Titletext oder eine Ressourceneinblendung wren hier genauso mglich. titleText [format["%1, Sie haben einen neuen Auftrag", name S1],"Plain Down"] 251

7.23 - Join In Progress (JIP)


Join In Progress ist ein wichtiger Punkt der sehr genau betrachtet und daher schon beim Erstellen einer Multiplayermission voll bercksichtigt werden sollte. Erstellt man eine MPMission, werden immer Spieler connecten oder disconnecten, sofern diese public gehostet ist. Und damit kommt das eigentliche Problem auf! Connectet ein Spieler mitten im Spielverlauf, muss ja auf seinem Rechner der gleiche Status herrschen, wie auf den anderen Clients. Gerade die Missionsziele und die Variablenwerte mssen dann abgeglichen werden. Ist als Beispiel Missionsziel 1 bereits abgehakt und die Variable Start schon true (Start=true), dann mssen diese Werte auf dem gerade connecteten Client angepasst werden. Normalerweise sollte das vom Server her geschehen. Dabei wrden Dinge wie Missionszielstatus oder auch Variablenstatus automatisch auf allen Parteien angeglichen. Da dies aber beim derzeitigen Stand von ArmA leider nicht der Fall ist, muss man in diesem Bereich etwas nachhelfen, damit die Mission am Ende auch auf einem Dedicated Server vernnftig luft. Hierzu lsst man den Server regelmig, zum Beispiel, wenn ein Spieler connectet oder ein Missionsziel erfllt wurde, die Publicvariablen aufrufen. Er macht damit den aktuellen Stand einer Variable publik und sendet ihn an alle Clients. Zunchst mal die Init.sqs, in welcher man den Variablen generell erstmal einen einheitlichen Wert zuweist, damit alle Mitspieler auf einem Stand sind. Init.sqs
Var1=FALSE Var2=FALSE Var3=FALSE ? ( ! ( Local Server ) ) : goto "Skip" PublicVariable "Var3"; PublicVariable "Var2"; PublicVariable "Var3"; #Skip onPlayerConnected "Server exec ""scripts\update.sqs"" ";

Eine ganz interessante Zeile ist die OnPlayerConnect-Zeile. Connected ein Spieler, so wird der Server aufgefordert das Skript Update.sqs auszufhren, welches hier im selbst angelegten Ordner Scripts hinterlegt wurde. Der Server ruft dann nochmal alle Publicvariablen auf und sychronisiert damit die Variablenstadien auf allen Systemen. 252

Update.sqs Die Update.sqs ist sehr einfach und kurz gehalten. In ihr sind nur die Publicvariablen deniert, welche dann bei Aufruf durch den Server nochmal publik gemacht werden.
? ( ! ( Local Server ) ) : exit publicVariable "Var1"; publicVariable "Var2"; publicVariable "Var3"; exit;

Missionsziele Mit Missionszielen verhlt sich das Ganze hnlich. Auch hier sollte bei Join In Progress sychronisiert werden, das es sonst vorkommen kann, dass der gerade connectete Mitspieler noch anstehende Missionsziele hat, die eigentlich schon abgehakt sind. Auch hier bietet es sich an ein Skript oder eine Funktion dafr zu verwenden. Dieses lsst man idealerweise jedes Mal starten, wenn ein Ziel abgehakt wurde oder ein Spieler neu connectet hat. Vom Verfahren her, kann man das Gleiche nutzen, wie auch bei den Publicvariablen. Die Init.sqs bekommt zustzlich die Zeile: onPlayerConnected "[] exec ""scripts\zielupdate.sqs"" "; Zielupdate.sqs
? ( ! ( Local Server ) ) : goto "Skip" publicVariable "Var1"; publicVariable "Var2";

Kapitel 7

#Skip ~4 ? Var1 : "1" objStatus DONE ? Var2 : "2" objStatus DONE ?! (alive Name1) : "3" objStatus DONE exit;

Hier wurden die Variablen als Bedingung zur Erfllung eines Missionsziels verwendet. Zum Beispiel, wenn eine Gruppe einen Wegpunkt erreicht hat was ein Missionsziel darstellt. Die Variable Var1 wrde dann auf true gesetzt und wenn nun das Skript aufgerufen wird und feststellt, dass Var1 true ist, das Missionsziel 1 auf Done gesetzt. Ein weiteres Beispiel wre Missionsziel 3 welches erreicht ist, wenn Name1 nicht mehr am Leben ist. Generell bietet es sich so also an dieses kleine Skript bei jedem Erfllen eines Missionszieles oder Connecten eines Mitspielers kurz aufzurufen. 253

Kapitel 8
- Das Camscripting Hier kommen wir zu einem Kapitel, was zwar teilweise sehr arbeitsaufwendig ist, aber die Ergebnisse locker mit Hollywoodlmen zu vergleichen sind. Kleine Intros, Outros oder Zwischensequenzen heben eine Mission immer ein wenig hervor und man wird besser in die Rolle des Charakters versetzt. Da man ber diese Thematik auch ein eigenes Buch dieses Umfangs schreiben knnte, kommen hier lediglich ein paar Einfhrungen zum Erstellen eigener Szenen.

8.1 8.2 8.3 8.4 8.5 8.6 8.7 8.8 8.9

Die Steuerung Die Kamerakoordinaten Kamera erstellen Die erste Szene Kamera an ein Fahrzeug/Einheit heften Text- und Einblendeekte Kamera-Eekte Preload - Objekte und Positionen vorladen Kartenanimation ausfhren

255 256 257 258 260 261 262 262 263

254

8.1 - Die Steuerung


Die Steuerung einer Kamera hngt von der Tastaturbelegung ab und ist ansonsten ziemlich einfach. Folgend erluterte Tastaturbelegung ist von der Installation her standardmig so vorhanden. Doch bevor man berhaupt eine Kamera steuern kann, so sollte man sie erstmal starten. Name exec "camera.sqs" oder this exec "camera.sqs" Dies sind zunchst die wichtigsten Tasten um Positionen festzulegen, Objekte anzuvisieren und so weiter. Im Tastatureinstellungsmen hat man natrlich noch eine etwas grere Auswahl an Tasten, die aber jetzt erstmal weniger interessant sind. Diese reichen aus um groartige Sequenzen zu realisieren. Linke Maustaste Maus vor zurck Pfeiltaste auf Pfeiltaste ab Pfeiltaste links Pfeiltaste rechts Numpad 4 Numpad 6 Numpad 8 Numpad 2 Numpad + Numpad Bild auf Bild ab L V Shift links Strg - Position speichern - Kamera vor und zurck bewegen - Kamera vorwrts bewegen - Kamera rckwrts bewegen - Kamera nach links bewegen - Kamera nach rechts bewegen - Nach links schwenken - Nach rechts schwenken - Kamera schaut auf - Kamera schaut ab - Ranzoomen - Wegzommen - Kamera anheben - Kamera senken - Fadenkreuz an/aus - Kamera aus - Kamera beschleunigen - Objekt selektieren (siehe Bild)

Kapitel 8 255

8.2 - Die Kamerakoordinaten


Nachdem man seine Kamera nun ausgerichtet hat, klickt man die linke Maustaste. Die Kamerakoordinaten werden nun im Zwischenspeicher gespeichert. Bei Operation Flashpoint drckte man damals die Strg-Taste und es wurde eine Clipport.txt im Hauptverzeichnis erstellt, in der dann alle Kameradaten erfasst wurden. Nachdem man also seine Position nun im Zwischenspeicher gespeichert hat, muss man sie ja irgendwo einfgen. Dazu erstellt man in seinem Missionsordner eine neue Textdatei, welche man dann frei benennen kann. Diese heit jetzt mal Intro.sqs. In diese fgt man nun die Koordinaten mit Strg-V oder Rechtsklick mit der Maustaste und Einfgen whlen, ein. Das Ganze schaut dann etwa wie folgt aus: ;=== 0:06:18 _camera camPrepareTarget [101880.56,-28486.36,1887.85] _camera camPreparePos [9626.16,10062.31,2.00] _camera camPrepareFOV 0.691 _camera camCommitPrepared 0 @camCommitted _camera Das ist eine gerade festgelegte Kameraposition als Datenblock. Hier sind unter anderem die nun folgend erluterten Daten enthalten.

;=== 0:06:18 Die Uhrzeit der Festlegung. Diese ist eher unwichtig und kann wegfallen. _camera camPrepareTarget [101880.56,-28486.36,1887.85] Blickrichtung der Kamera, fr die auch ein Objekt angegeben werden kann. _camera camPreparePos [9626.16,10062.31,2.00] Kameraposition (X,Y,Z) _camera camPrepareFOV 0.700 Kamerazoom. Je kleiner der Wert, desto grer der Zoom. _camera camCommitPrepared 0 Die Zeit, wie lange die Kamera zu dieser Position braucht. Bei dem Wert 0 ist sie sofort da. Schreibt man aber einen greren Wert dahin, braucht die Kamera von der alten bis zu dieser neuen Position die jeweils denierte Zeit. @camCommitted _camera Hier pausiert das Skript und warten, bis die Kamera ihre Position erreicht hat.

256

8.3 - Kamera erstellen


Wenn man nun einen solchen Koordinatenblock gespeichert hat, muss man das Skript erstmal so denieren, dass die Kamera jetzt auch an dieser Position startet. Dabei kommen folgende Zeilen hinzu: _camera = "camera" camCreate [9626.16,10062.31,2.00] Fr die XYZ-Werte kann man nun den _camera camPreparePos-Wert angeben oder auch auf [0,0,0] lassen, wenn die Kamera ohne Zeitverzgerung gleich weitergesetzt wird. _camera camPrepareTarget [101880.56,-28486.36,1887.85] _camera camPrepareFOV 0.691 _camera camCommitPrepared 0 @camCommitted _camera Und der jeweilige Eekt muss jetzt natrlich hiermit noch angegeben werden. _camera cameraEect ["Internal","back"] Der folgende Befehl schaltet den Cinemarahmen ab und man hat Vollbild. showCinemaBorder false Nachdem die ganzen Daten nun verarbeitet wurden, sieht das Skript so aus: _camera = "camera" camCreate [9626.16,10062.31,6.00] _camera camPrepareTarget [101880.56,-28486.36,1887.85] _camera camPrepareFOV 0.700 _camera camCommitPrepared 0 @camCommitted _camera _camera cameraEect ["internal","back"] showcinemaborder false Dies ist jetzt eher unspektakulr, da die Kamera erzeugt wird und starr in der Luft steht, ohne dass irgendwas passiert (siehe Bild). Dazu sind nun noch mehr Zeilen notwendig.

Kapitel 8

257

8.4 - Die erste Szene


Dazu wird die erste Kameraposition gleich bernommen, aber fr den Targetwert bei _camera camPrepareTarget [101880.56,-28486.36,1887.85] ein Objekt angegeben. Die Kamera wird dann erstellt und schaut genau auf dieses Object, was hier mal Flieger1 heit. Zudem wurde auch der Zoomwert auf 600, also ranzoomen, verndert. Jetzt braucht man aber einen weiteren Koordinatenblock um die Kamera dorthin wandern zu lassen. Nachdem dem der nun festgelegt wurde, wird er gleich in das Skript integriert und angepasst. Intro.sqs
;Introsequenz titleCut [" ", "BLACK IN"]; titleFadeOut 4 Playmusic "Track1" ;Position 1 Flugzeug _camera = "camera" camCreate [9626.16,10062.31,6.00] _camera camPrepareTarget Flieger1 _camera camPrepareFOV 0.600 _camera camCommitPrepared 0 @camCommitted _camera _camera cameraEect ["internal","back"] showcinemaborder false ;Position 2 Flugzeug _camera camPrepareTarget Flieger1 _camera camPreparePos [9657.99,10121.22,1.04] _camera camPrepareFOV 0.500 _camera camCommitPrepared 30 @camCommitted _camera

Wie man sehen kann wurden hier gleich zwei weitere Zeilen eingefgt: titleCut [" ", "BLACK IN"]; titleFadeOut 4 Blendet schwarz in die Sequenz mit einer Dauer von 4 Sekunden ein. playMusic "Track1" Zeitgleich wird ein eigenes Musikstck gestartet, um die Sequenz soundtechnisch ein wenig zu untermalen. Die Kamera ist nun auf Flieger1 xiert und braucht 30 Sekunden bis zur nchsten Kameraposition, wobei sie whrend der Fahrt langsam ranzoomt, aber der Flieger einfach schneller ist und irgendwann am Horizont verschwindet. 258

Position 1 Flugzeug:

Position 2 Flugzeug:

Nun kann man das natrlich noch ausweiten, aber die Funktion sollte somit verstanden sein. Jetzt muss das Skript natrlich auch beendet werden. Dazu kommen am Ende des Skriptes noch folgende Zeilen hinzu:
6 Fademusic 0 titleCut [" ", "black out"]; titleFadeOut 4 ~6 player cameraEect ["terminate","back"] camDestroy _camera ~1 Playmusic "" 0 Fademusic 1 exit

Kapitel 8 259

Die Szene blendet nun langsam aus und auch die Musik wird dabei leiser. Nach 6 Sekunden wird die Kamera gelscht und der Spieler kann seine Mission starten. Nachdem man die Musik mal, wie oben zu sehen, runtergefadet hat, fadet man sie am Ende des Skriptes wieder hoch, damit man spter wieder Musiksound hat.

8.5 - Kamera an ein Fahrzeug/Einheit heften


Man hat auch die Mglichkeit die Kamera an ein Fahrzeug zu hngen, damit diese dann das Fahrzeug verfolgt. Die Kamera lsst sich dabei so gut ausrichten, dass man sie frei an einer Position des Fahrzeugs positionieren kann. Dazu wird zunchst erstmal die Einheit oder das Fahrzeug erstellt, welches hier mal den Namen Auto hat. ;Kamera erzeugen _camera = "camera" camCreate [0,0,0] _camera camSetTarget Auto _camera camSetPos [0,0,0] _camera camSetFOV 0.700 _camera camCommit 0 @camCommitted _camera _camera cameraEect ["internal","back"] ; Position der Kamera im/am/um das Fahrzeug _car = Auto ;Position der Kamera lngs des Fahrzeugs (vorne/hinten/in) _dx = -6 ;Position der Kamera neben dem Fahrzeug (links/rechts/in) _dy = 0 ;Hhe der Kamera (unter/ber/in) _dz = 2 #LOOP ;Die folgenden zwei Blcke sind jeweils eine Zeile, was hier nicht mglich ist. _camera camSetTarget [(10 * sin (getdir _car))+(getpos _ car select 0), 10*cos (getdir _car)+(getpos _car select 1), (getpos _car select 2)] _camera camSetPos [(getpos _ car select 0) + _dx * sin (getdir _car) - _dy * cos (getdir _car), (getpos _car select 1) + _dx * cos (getdir _car) + _dy * sin (getdir _car), (getpos _car select 2)+_dz] _camera camSetFOV 0.900 _camera camCommit 0 @camCommitted _camera ;Um das Skript zu beenden, setzen wir eine Bedingung. Hier: Wenn unser Auto ;nher als 50 Meter an die Einheit (P1) kommt, soll die Szene beendet werden. ?P1 distance Auto < 50 : goto "Ende" goto "LOOP" #Ende P1 cameraEect ["terminate","back"] camDestroy _camera exit

260

8.6 - Text- und Einblendeekte


Man hat die Mglichkeit verschiedene Arten von Texteinblendungen zu denieren. Dabei verwendet man unter anderem folgende Syntaxformen: titleCut ["Hallo", "Black Out"]; titleFadeOut 6 titleText ["Test", "White In"]; titleFadeOut 6 cutText ["Test", "Black In"]; titleFadeOut 6 Hier eine bersicht ber die einzelnen Varianten: Plain Plain Down Black Black Faded Black In Black Out White In White Out - Text erscheint mitten auf dem Bild - Text erscheint am unteren Bildrand - blendet vom Bild ins Schwarze - blendet vom Bild ins Schwarze - blendet von schwarz ins Bild - blendet Bild ins Schwarze aus - blendet von wei ins Bild - blendet Bild ins Weie aus

Zeilenumbruch Um einen Zeilenumbruch mit einzusetzen setzt man lediglich ein \n an die jeweilige Position im Text. Setzt man zwei \n\n hintereinander hat man eine Leerzeile und so weiter. titleText ["Paraiso\nOne day later", "Black In"]; titleFadeOut 4 Ingame schaut das dann spter etwa so aus:

Composetext Neben dem Standardhint gibt es noch den Composetext. Dieser kann farblich und schriftgrentechnisch vllig frei deniert werden. Die u.a. Syntax stellt eine Zeile dar! hint composeText [parsetext format ["<t size='1.2' align='center' color='#0000'>Hallo %1</t>", name player]];

Kapitel 8

Und folgend nochmal eine Syntax in Verbindung mit Text aus der Stringtable.csv: hint composeText [localize "STR_RA_M01V03",parsetext format ["<t size='1.2' align='center' color='#0000'>%1</t>", name player]]; 261

8.7 - Kamera-Eekte
Dieses Unterkapitel zeigt einige Eekte auf, welche man in seinen Sequenzen hier und da ganz gut gebrauchen kann. Diese reichen vom Nachtsichteekt bis hin zu Soundeekten. Kinorahmen abschalten Der folgend aufgefhrte Befehl schaltet die Kinobalken ab und man Vollbild. showCinemaBorder false Kamera mit Nachtsicht Damit die Kamera die Nachtsichfunktion nutzen kann, bentigt man folgenen Befehl: camUseNVG true Spielgrak erhellen oder verdunkeln Der folgend aufgefhrte Befehl erhellt oder verdunkelt die Spielgrak. setAperture 1 - hell setAperture 200 - dunkel Kamera etwas sagen lassen Die Kamera wird wie ein Objekt behandelt, daher gilt hierfr der normale Say-Befehl. _camera say "Sound1" Umgebungssound abschalten Wer mchte schon gerne Vogelgezwitscher oder sonstigen Sound neben der Musik in seinem Intro oder seiner Zwischensequenz haben. Hierbei gelten folgende Befehle: enableEnvironment false 3 fadeRadio 0 4 fadeSound 0 2 fadeMusic 0 - Schaltet den Umgebungssound ab - Zeit fadeRadio Funklautstrke - Zeit fadeSound Soundlautstrke - Zeit fadeMusik Musikstrke

8.8 - Preload - Objekte und Positionen vorladen


Die uerst aufwendig gestaltete Umwelt und das stndige Laden und Lschen von Texturen und Objekten kann, bei groen Kamerasprngen schnell zu fehlerhafter Darstellung der Umgebung und ruckeln fhren. Das System und die Engine kommen dabei dem Kamerasprung nicht so schnell nach und somit kommt es zu solchen Fehlern. Um diesem Problem entgegenzuwirken und fehlerhafte Darstellungen und Ruckler zu vermeiden gibt es die Preloadbefehle. Diese laden Objekte, Positionen, Sounds oder was immer man mchte, vor ab in den Arbeitsspeicher. Je nach Befehlsform wird die Kamera erst an die neue Position versetzt, wenn der Bereich oder die Objekte fertig in den Arbeitsspeicher geladen wurden. Folgend nun ein paar Preload-Syntaxbeispiele. preloadObject preloadCamera 262 - Ldt ein Objekt vor (siehe Beispiel) - Ldt Kameraposition vor (siehe Beispiel)

preLoadMusic Track1 preloadSound Sound1 preloadTitleRsc ["BIS", "Plain] preloadTitleObj ["BisLogo", "Plain]

- Ldt ein Musikstck vor - Ldt einen Sound vor - Ldt eine Ressource vor - Ldt eine Ressource bzw. Objekt vor

Hier mal zwei Beispiele der Verwendung von preLoadObject und preLoadCamera. Beim ersten Beispiel werden alle Daten der Umgebung geladen. Das Skript luft erst weiter, wenn der Ladevorgang abgeschlossen ist und lscht am Ende den lokalen Wert _preload. _preload = [] spawn {waitUntil {preloadCamera position Name}} @scriptDone _preload terminate _preload Gleiches bei preloadObjekt, dort wird das Objekt Name mit Distanz (5) geladen. _preload = [] spawn {waitUntil {5 preloadObject Name}}

8.9 - Kartenanimation ausfhren


Whrend eines Briengs ist es sehr interessant eine Kartenanimation ablaufen zu lassen. Dabei kann man die Kamera auf der Karte zu den verschiedenen Markerpositionen wandern lassen, Marker lschen oder verndern und vieles mehr. Folgend ein kurzes Beispiel, wie man so ein Animationsskript gestalten kann. Dabei ist es sinnvoll das Brieng oder auch das Funkgert auszublenden. Man sollte zudem fr jeden angesteuerten Marker 2 Blcke zu denieren, wie im Beispiel zu sehen ist. Block1=Ranzoomen, Block2=wegzoomen und danach erst weiter zur nchsten Position.
forceMap true showPad false disableUserInput true ;// net die Karte ;// Verbirgt das Brieng ;// Sperrt Spielereingabe

;//Marker Pos1 in 3 Sekunden bis auf Wert 0.1 ranzoomen mapAnimAdd [3, 0.1, markerPos "Pos1"] ;// Fgt Animation hinzu [Zeit, Zoom, Position] mapAnimCommit ;// Fhrt Animation aus @mapAnimDone ;// Wartet bis die Animation beendet ist ~2 ;//Aus Marker Pos1 in 1 Sekunde auf Wert 1 rauszoomen mapAnimAdd [1, 1, markerPos "Pos1"] mapAnimCommit @mapAnimDone ~1 ;//Kartenanimation beenden und Urzustnde wiederherstellen forceMap false ;// Schliet die Karte mapAnimClear ;// Lscht Werte von MapAnimAdd showPad true ;// Zeigt das Brieng wieder an disableUserInput false ;// Gibt dem Spieler die Kontrolle zurck exit;

Kapitel 8 263

Kapitel 9
- Scripting In diesem Kapitel werden dir einige allgemeine Abschnitte aus dem Bereich Scripting nher gebracht. Du wirst Dank dieses Kapitels einige Skripte und Befehle in diesem Buch besser verstehen und bist am Ende sogar in der Lage eigene kleine oder auch grere Skripte zu schreiben und anzuwenden.

9.1 9.2 9.3 9.4 9.5 9.6 9.7 9.8 9.9 9.10 9.11 9.12 9.13

Die Variable Wahrheitswerte Logische Operatoren Die While-Do-Schleife Der Zhler If-Then-Else Der Delay Random WaitUntil Die Klammer Das Semikolon Der Array Funktionen-Grundwissen

265 266 267 268 268 268 269 269 269 270 271 271 274

264

9.1 - Die Variable


Eine Variable ist ein vernderbarer Wert. Dieser kann dabei ein Wort oder auch eine Zahl sein, dass ist vllig egal. Hierbei gibt es die lokale und die globale Variable. Whrend eine globale Variable berall gltig ist, ist eine lokale Variable nur fr einen Bereich deniert. Hier mal ein Beispiel mit Variablen: Heli1 yInHeight 120 Der Name Heli1 stellt eine globale Variable dar, whrend 120 nur ein variabler Wert aber keine Variable in Form eines Namens ist. Man kann eine Zahl nur als Wert verwenden und nicht als Namen vergeben. Verbinden man die Zahl mit einem Buchstaben, wie oben mit Heli1 dargestellt, sieht das schon wieder ganz anders aus. Lokale Variable Eine lokale Variable erkennt man an dem Unterstrich vor der Variable. Diese Variable ist nur in diesem Skript bzw. Bereich gltig. So ist es mglich, die Variable fr mehrere Einheiten zu verwenden, ohne das man noch weitere Variablen vergeben muss. Als Beispiel dient hier mal ein Skript, welches so deniert ist, dass zunchst drei Einheiten Name1, Name2 und Name3 eine Animation ausfhren sollen. Da es aber irgendwo auf der Karte vielleicht auch noch weitere Einheiten gibt, die auf das Skript zugreifen sollen, verwendet man darin eine lokale Variable. Man muss dafr also nur ein Skript schreiben und vergibt darin eine lokale Variable fr eine Vielzahl von Einheiten. Die Namen, die das Skript auslsen sollen, gibt man dabei in einen Array mit an: [Name1,Name2,Name3] exec "skript.sqs" Wird das Skript nun gestartet, wird jedem der drei Beispielsoldaten die lokale Variable _man zugewiesen. Jede der drei Einheiten wird also in dem Skript lokal behandelt und angesprochen. Im Skript sieht das dann etwa so aus: ;Animationsskript ;Einheit bekommt lokalen Wert zugewiesen _man = _this select 0 ;Einheit fhrt Animation aus _man playMove "Animation"; ;Skript wird verlassen exit Kapitel 9

Diese Einheit, mit dem globalen Namen z.B. Name1, hat nun die lokale Variable _man zugewiesen bekommen und fhrt den angegebenen Befehl aus. 265

Globale Variable Neben lokalen Variablen gibt es natrlich noch die globalen Variablen. Whrend eine lokale Variable nur in einem ihr vorbestimmten Bereich gltig ist, wird eine globale Variable, wie der Name schon sagt, fr den globalen Bereich festgelegt. Wenn man einem Soldaten einen Namen gibt, so ist das eine globale Variable und diese kann nur einmal vergeben werden. Mchte man einem zweiten Soldaten im Editor den gleichen Namen geben, wird sich das Programm mit einer Fehlermeldung melden. Diese Variable kann man nun von berall, also Skript, Funktion, Auslser und Wegpunkt ansprechen. Fest vergebene Variablen Einige Werte sind vom Spiel aus schon fest vergeben. Diese lauten wie folgt: Player This Time _time _x _this Pi - Der Spieler - Einheit oder Objekt - Uhrzeit im Spiel - Lokalzeit - Ein Element eines Arrays - Lokale Einheit - 3,14

Variablenzustnde Man kann einer Variable Zustnde oder Werte zuweisen. Zum Beispiel kann man sie in ihrem Zustand auf true schalten oder ihr einen Textstring zuweisen. Name1= true Name1= 44 Name1= "MeinText" Name1= [Wert1,Wert2] - Variable bekommt den Wert WAHR - Variable bekommt einen Wert - Variable bekommt einen Textstring - Variable bekommt einen Arraywert

Variable speichern Variablen lassen sich auch jederzeit speichern und sind im weiteren Verlauf aufrufbar. saveVar "Variablenname"

9.2 - Wahrheitswerte
Ein Wahrheitswert ist ein Zustand eines Wertes. Man kann ihn mit einem Ein- oder Ausschalter vergleichen. Setzt man eine Variable auf true, wird die jeweilige Aktion gestartet und setzt man sie auf false wird die Aktion wieder beendet. Fr true kann man auch 1 und fr false auch 0 schreiben. true false 266 Wird zurckgegeben wenn Bedingung erfllt ist Wird zurckgegeben wenn Bedingung nicht erfllt ist

9.3 - Logische Operatoren


Hier eine bersicht einiger allgemein bekannter wichtiger Operatoren. AND OR NOT ! ? : If Then Else Exit Do # Goto > < <= >= == ~ ; @ ForEach ThisList Count Random Case Ceil Floor Round - Logisches UND zum Verknpfen von zwei oder mehreren Variablen - Logisches ODER zur kontrollierten Auswahl zwischen zwei oder mehreren Variablen - Logisches NICHT zur kontrollierten Bestimmung von zwei oder mehreren Variablen - Steht ebenfalls fr NOT, also NICHT - WENN - DANN - WENN - DANN - SONST - Stoppt die Ausfhrung eines Skriptes - Mach (siehe While Do) - berschrift (Label) - Gehe zu - Grer als - Kleiner - Kleiner oder gleich - Grer oder gleich - Gleich - Zeitverzgerung in Sekunden (~3) - Ist im Kapitel 9.10 nher erlutert - Pausiert und wartet bis die Bedingung dahinter true ist - Fr jede Einheit {_x reveal Player} foreach List Bereich1 - Fr jede Einheit (Seite) in einem Auslserbereich - Gibt die Anzahl der vorhandenen Elemente eines Arrays zurck - Bestimmt einen Zufallswert - Falls (Bsp: case 1 : exit (bersetzt: Ist Fall gleich Wert 1 dann exit) - Rundet Wert auf. (Bsp: ceil 5.25 wre 6 / ceil -5.25 wre 5) - Rundet Wert ab. (Bsp: round 5.25 wre 5 / round -5.55 wre -6) - Rundet Wert auf/ab. (Bsp: round 5.25 wre 5 / round 5.55 wre 6) 267

Kapitel 9

9.4 - Die While-Do-Schleife


Diese Schleife luft so lange, bis a grer als b ist. Zu a wird dabei so lange der Wert 1 zu hinzugezhlt, bis a grer ist und somit die Schleife beendet wird. Der maximale Wert fr Armed Assault liegt derzeit bei 100.000.

While {a<b} do {a=a+1}

bersetzt: Solange a kleiner ist als b, zhle zu a den Wert 1 dazu.

9.5 - Der Zhler


Mchte man einen Zhler in ein Skript einsetzen, muss man zunchst den Ursprungswert am Skript- oder Missionsstart auf 0 setzen. Der Variable Counter wird somit zunchst der Wert 0 zugewiesen. Danach startet der eigentliche Zhler und zhlt zur lokalen Variable _Counter bei jedem Durchlauf den Wert 1 hinzu. Dies passiert aber nur so lange, bis die Variable _Counter >=, also grer gleich, 10 ist und beendet dann das Skript. _counter = 0; #Start; ? (_counter>=10) : exit _counter = _counter+1; goto Start;

9.6 - If-Then-Else
Diese Syntax heit bersetzt so viel wie: Wenn Dann Sonst. Oder eben so viel wie: WENN Bedingung erfllt, DANN mach dies, ANSONSTEN mach das. Hier nochmal zwei Syntaxformen dazu: IF (a>b) THEN {c=1} ELSE {c=2} Als Beispiel mal folgendes. Ein Marker soll, solange die Einheit lebt, immer an die aktuelle Position dieser Einheit gesetzt werden. Ist diese Einheit nicht mehr vorhanden, soll das Skript beendet werden. #Start; ~0.5 If(alive Soldat1)Then{"S1-Symbol" setMarkerPos getpos Soldat1} Else{"S1-Symbol" setMarkerType "Empty";exit}; goto Start; Wenn (If) Soldat1 lebt dann (Then) setze S1-Symbol auf Soldat1 ansonsten (Else) lsche S1-Symbol und verlasse Skript (Exit). 268

9.7 - Der Delay


Ein Delay ist eine Verzgerung und wird in Skripten (SQS) verwendet. In Funktionen nimmt man stattdessen den Befehl Sleep. Diese bekommen dann einen Wert der als Sekunden gewertet wird. Das Skript oder die Funktion zhlt dann den gesetzten Wert runter und folgt erst dann dem weiteren Verlauf. ~300 ~random 300 Sleep 300 - Skript pausiert 300 Sekunden bis zur Weiterfhrung - Generiert einen Zufallswert von 0-300 und pausiert - Funktion schlft 300 Sekunden

9.8 - Random
Mit dem Befehl Random hat man die Mglichkeit einen Wert per Zufall generieren zu lassen. So knnte man zum Beispiel eine Variable mit einem Zufallswertwert versehen. Das Ganze schaut dann etwa wie folgt aus: _start = random 4 ? _start < 1 : goto "Start1"; ? _start < 2 : goto "Start2"; ? _start < 3 : goto "Start3"; ? _start < 4 : goto "Ende"; Hier wurde ein Wert bis maximal 4 generiert und das Skript prft danach wie gro dieser Wert ist und springt zum jeweiligen Label Start oder Ende. Natrlich kann man diesen Operator auch anderweitig benutzen. Zum Beispiel um eine Einheit an eine Zufallsposition in einem Gebude setzen oder einen Delay mit einem Zufallswert versehen. Das schaut dann etwa so aus: Name1 setPos (nearestBuilding this buildingPos random 10) oder der Delay: ~random Wert

9.9 - Waituntil
WaitUntil heit bersetzt warte bis und kann somit als Bedingung fr etwas genutzt werden. Es ist also wie ein @ nur eben fr Funktionen. Die Funktion wartet dann, bis diese Bedingung erfllt ist. _Wert = 0; waitUntil {_Wert = _Wert +1; _Wert >= 100}; 269 Kapitel 9

9.10 - Die Klammer


Beim Skripten werden diverse Klammern verwendet, von denen jede ihre eigene Eigenschaft besitzt. Dabei unterscheidet man zwischen folgenden Varianten: [] {} () "" - Array (im Kapitel 9.12 erlutert) - Code (geschweifte Klammer) - mathematische Operatoren - Textstrings

Setzt man eine Klammer, so fasst man etwas zusammen und teilt dem System bzw. ArmA mit, dass dies zusammen ausgefhrt werden muss. {} Code Mit der geschweiften Klammer lsst man Code verarbeiten, also alles, was man in Codeform aufrufen und weiterverarbeiten mchte. Als gutes Beispiel dient hier: {_x moveInCargo Heli1} forEach Units GAlpha Dabei sollen alle Einheiten der Gruppe GAlpha in den Frachtraum des Fahrzeugs Heli1 gesetzt werden. () - Mathematische Operatoren Mit der normalen Klammer () verarbeitet man mathematische Operatoren. Das Ganze luft wie in der Mathematik, um Punkt-vor-Strich zu umgehen. (a+b)*c Beispiel: In folgendem Beispiel soll eine Einheit an eine Position in einem Gebude laufen. Dazu sagt man: Einheit gehe zu Haus plus Position Wert. Dabei ist durch die Klammer festgelegt, dass die Position zu dem Haus gehrt. Als Syntax, sieht das Ganze so aus: _Man move (_House buildingPos 120) Wren dort keine Klammern deniert, wrde ArmA lesen: Einheit gehe zu Haus und zu einer Position 120. Wobei die Engine nicht wei, dass diese Position zu dem Gebude gehrt und gibt somit Fehlermeldung aus. Textstrings Mit Hilfe der "" legt man Textstrings fest. Alternativ kann man fr diese auch einen ' verwenden, welcher auf der Tastatur in der Regel auf der #-Taste zu nden ist. "" knnen auch geschachtelt werden. Hier mal ein Beispiel der Verwendung anhand eines Mapklicks. onMapSingleClick "Leader Alpha1 move _pos; Player say ""Hallo""" 270

9.11 - Das Semikolon


Das Semikolon steht in der Skriptsprache fr Trennung bzw. Absatz. Man kann hiermit zwei Befehlszeilen voneinander trennen (siehe Initzeile einer Einheit) oder weitergeben, dass die Zeile zu Ende ist und somit gleich die nchste Zeile gelesen wird. Es sollte also generell jede Skript- oder jede Funktionszeile mit einem Semikolon beendet werden. Des Weiteren gilt zu bemerken, dass in einem Skript oder einer Funktion die Zeichen hinter einem Semikolon nicht gelesen werden. Dies ermglicht, dass man dahinter einen Vermerk oder hnliches schreiben kann. Hier mal ein Skriptbeispiel: ;Animationsskript ;Einheit bekommt lokalen Wert zugewiesen _man = _this select 0 playSound "Move"; ;Einheit fhrt Animation aus _man playmove "Animation"; ;Skript wird verlassen exit Bei der Funktion hat man damit zustzlich die Mglichkeit Befehle voneinander zu trennen. Hier mal eine Beispielsyntax, welche zwei Semikolon beinhaltet, die den Code darin voneinander trennen. Beispiel = {private["_a","_b"]; _d=[getPos player,_this select 0]; _b = 100}; Achtung! Hat man einen Delay wie z.B. ~10 vergeben oder ein Label # gesetzt, setzt man dahinter kein Semikolon, da das Skript sonst nicht funktionieren wird!

9.12 - Der Array


Mit einem Array hat man die Mglichkeit, Werte an ein Skript oder eine Funktion zu bergeben. Er Vorteil daran ist, dass man nun ein Skript sehr exibel fr viele Einheiten oder hnliches verwenden kann, indem man darin nur lokale Variablen benutzt. Eine Funktion msste man dann nur einmal schreiben und kann diese dann gleich fr sehr viele Aktionen verwenden. Es ist also nicht auf ein spezielles Objekt oder eine spezielle Einheit festgelegt, sondern fr viele. Ein Array ist also eine Auistung von mehreren Werten, die mit Klammern zusammengehalten und dann weitergegeben werden. Kapitel 9 Array Der Array besteht aus den eckigen Klammern []. Alles was jetzt darin aufgelistet ist, kann dann so an das Skript bergeben werden. Hier mal ein Syntaxbeispiel: [Wert1, Wert2, Wert3, Wert4] exec "skript.sqs" 271

Die im Array festgelegten Werte werden jetzt im Skript wie folgt deniert: _Wert1 = _this select 0 _Wert2 = _this select 1 _Wert3 = _this select 2 _Wert4 = _this select 3 Da wir im Skript mit lokalen Werten arbeiten mchten, weist man dem jeweiligen Wert aus dem Array im Skript eine eigene lokale Variable zu. Im nun folgenden Beispiel wird das Ganze sicher deutlicher. Hier soll ein Objekt mit einem Skript erstellt werden. Dies soll hier mal ein leerer BMP2 sein, der an der Position eines unsichtbaren Heli-Hs namens Point1, mit der Ausrichtung 100 und einem Treibstowert von 0.5, createt werden soll. Was man jetzt noch alles im weiteren Skriptverlauf denieren knnte, bleibt hier mal freigestellt. Zunchst die Syntax mit dem denierten Array: ["BMP2", Point1, 100, 0.5] exec "skript.sqs" _Object = _this select 0 _StartPos = _this select 1 _Azimut = _this select 2 _Fuel = _this select 3 _Vehicle = "_Object" createVehicle position _StartPos; _Vehicle setDir _Azimut; _Vehicle setFuel _Fuel; exit In diesem Skript bekommen nun die Werte aus dem Array jeweils eine lokale Variable zugewiesen. Dabei wurden diese wie folgt bergeben: "BMP2" Point1 100 0.5 bekommt die lokale Variable Wert _Object bekommt die lokale Variable _StartPos bekommt die lokale Variable _Azimut bekommt die lokale Variable _Fuel

Mit diesen vergebenen lokalen Variablen wird nun im Skript weitergearbeitet, wie man im unteren Skriptteil sehr gut erkennen kann. Der Vorteil ist nun, dass man nur ein Script bentigt, welches man beliebig oft verwenden kann. Die folgende Syntax wre nun genauso darauf anwendbar. Wobei hier mit Random ein Zufallstankfllwert zwischen 0 und 1 deniert wird und das Objekt, hier ein Heli, nun an der Position des Spielers erstellt wird. ["AH1W", Player, 100, random 1] exec "skript.sqs" 272

Zufallswert aus einem Array beziehen Mit folgender Vorgabe hat man die Mglichkeit sich einen Zufallwert aus einem Array auswhlen zu lassen und diesen dann fr etwas Bestimmtes zu verwenden. _array = [47,73,78,85,101,103]; _Pos = _array select (random (count _array)-0.5); Als gutes Beispiel dient folgendes. Man mchte die Einheit Soldier1 mit einem im Aufrufarray denierten SetUnitPos-Wert an eine Zufallsposition des Hotels setzen. Dabei sollen aber nur Positionen bercksichtig werden, die auf der ersten Etage sind und vorher im Skriptarray festgelegt wurden. [Soldier1, "Middle", Hotel] exec "skript.sqs" _Unit = _this select 0 _Pos = _this select 1 _House = _this select 2 _array = [47,73,78,85,101,103]; _BPos = _array select (random (count _array)-0.5); _Unit setPos (_House buildingPos _BPos); _Unit setUnitPos _Pos; exit; Hierbei whlt das System einen Wert aus dem Skriptarray aus und setzt die Einheit an diese Position im Hotel. Da hier mit einem Objekt auf der Karte gearbeitet wird, bitte das Kapitel 5.61 beachten, um das Gebude zu benennen.

Kapitel 9 273

9.13 - Funktionen Grundwissen


Bereits in OFP Resistance wurden Funktionen eingefhrt. Zunchst einmal waren sie an der anderen Dateiendung erkennbar, die nmlich nicht SQS, sondern SQF lautet. Daran hat sich mit und in Armed Assault im Grunde nicht viel gendert. Es gibt immer noch die klassischen Funktionen mit der typischen Dateiendung SQFund es gibt auch noch genau wie bei OFP, Skripte mit der Dateiendung SQS. Wie im Kapitel 2.7 schon erlutert, ist die Funktion(SQF) im Grunde genommen eine Weiterentwicklung der normalen Skript-Syntax(SQS). Jedoch muss erwhnt werden, dass sie keinesfalls das Skript ersetzt. Zumindest nicht in allen Bereichen. Es gibt nach wie vor die SQS-Syntax auf welche die SQF-Syntax nur aufbaut. Fr und mit Armed Assault hat BIS auch die Mglichkeiten fr Skripte und Funktionen erweitert. So gibt es jetzt eine ganze Reihe neuer Skript-Befehle und Ergnzungen der Control Structures, die bereits in OFP bekannte SQF-Syntax wurde also deutlich erweitert. Und hier beginnt -unntigerweise- leider auch die Verwirrung. Einige der neuen Befehle erwarten eine bestimmte Syntax, genauso wie einige alte Befehle eine bestimmte Syntax erwarten. Wenn man den Exec-Befehl verwendet, muss man zwangslug die OFP Skriptsyntax, also die Sqs-Syntax verwenden. Dort kann man dann auch weiterhin Labels und Goto-Loops anwenden. Man kann das Skript jederzeit mit Exit verlassen. Neu ist allerdings, dass jedes Statement mit einem Semikolon ; beendet werden muss und dass man bei der Verwendung von Code nicht mehr wie bei OFP Anfhrungszeichen "", sondern geschweifte Klammern {} verwenden muss. Die Anfhrungszeichen "" werden nun fr Strings verwendet. OFP Beispiel: "_x addWeapon ""Binocular"" " foreach units group player ArmA-Beispiel: {_x addWeapon "Binocular"} foreach units group player; Wer sich eine solche Funktion jetzt mal ansieht, wird schnell die Unterschiede zu den normalen OFP-Skripten erkennen. In Funktionen gibt es keine Wartezeiten (Delays), keine Labels # und damit auch keine Goto-Funktionen. Dafr werden in Funktionen hug While-do- und If-Then-Else-Konstruktionen benutzt. Mit ArmA sind auch neue Befehle wie Switch, Do oder Case hinzugekommen. Diese Befehlskombinationen werden auch Control Structures genannt. Ich verweise hier auf die ozielle Wiki von BI: http://community.bistudio.com/wiki/Control_Structures 274

Eine Funktion hat die Hauptaufgabe eine Lsung kurz und ezient herbeizufhren und besteht daher in der Regel aus einer eher kurzen Befehlsfolge, whrend ein Skript, je nach Aufgabe, schon mal etwas lnger ausfallen kann. Funktionen werden oft aus Skripten aufgerufen, um zum Beispiel einer Variablen einen Wert zuzuweisen, Werte bzw. Daten umzuwandeln oder im weitesten Sinne etwas errechnen zu lassen. Beispiele wren: - die Entfernung zweier Positionen errechnen, - aus einer Anzahl bekannter Einheiten alle Anfhrer herauszultern, - den bekanntesten Feind herausnden, -einer bestimmten Anzahl von Einheiten bestimmte Waen zuweisen - Elemente eines Arrays suchen oder zufllig vertauschen und vieles mehr. Oftmals liefert eine Funktion einen Wert zurck an das Skript. Genauer gesagt wurden viele Funktionen gerade dazu geschrieben, einen Wert, den sogenannten Return, an ein Skript zurckzuliefern, was mit einem Skript nicht mglich ist. Funktionen sind im Gegensatz zu Skripten in den allermeisten Fllen Missions- oder Addonunabhngig verwendbar. Wenn sie mit den geeigneten Daten gefttert werden, liefern sie unbestechlich und unbeirrbar ihr Ergebnis, whrend viele Skripte auf einen recht speziellen Kontext zugeschnitten sind. Funktionen bieten den Vorteil, dass man diese beim Missionsstart vorladen kann. Sie werden dann in der Engine gespeichert und sind bei Aufruf sofort verfgbar. Sie sind somit schneller verfgbar und werden mit hherer Prioritt als ein Skript bearbeitet. Idealerweise ldt man seine Funktionen aus der Init.sqs oder Init.sqf heraus. Mchte man seine Funktion beim Missionsstart vorladen, versieht man sie zunchst mit einem Variablennamen, mit welchem man spter die Funktion wieder aufrufen kann. Das System wei dann: Variablenname = Ergebnis der vorgeladenen SQF Die Syntax zum Laden der Funktion lautet dann: SearchLight = compile preprocessFile "Searchlight.sqf"; SearchLight ist die Variable die, wie oben erklrt, beim Aufruf der Funktion vergeben wurde. SearchLight steht jetzt fr die Lsung bzw. dem gesamten Inhalt der Funktion. Oder anders... SearchLight ist jetzt die Funktion! Kapitel 9

275

Wichtig dabei ist, bei dem Variablennamen (z.B.: SearchLight) darauf zu achten, dass diese Variable keinem Befehl gleichen darf, der in ArmA verwendet wird. Zum Beispiel fr eine Positions-Funktion. Position = compile preprocessFile "Position.sqf"; Dies wrde jetzt eine Fehlermeldung zur Folge haben, da Position ein ArmA-Befehl ist. Deshalb unbedingt immer Variablennamen whlen, die keinen Befehlen gleichen! Mchte man seine Funktion spter im Verlauf der Mission wieder aufrufen, verwendet man dazu grundstzlich mit dem Call-Befehl! _variable = [Daten] call SearchLight Da diese Funktion vorgeladen bzw. prkompiliert wurde, stehen die Informationen sofort zur Verfgung und die Funktion muss von der Engine nicht mehr zeilenweise interpretiert werden, wie es bei einem Skript der Fall ist. Natrlich kann man manche Aufgabe einer Funktion auch im Skript selbst lsen, auch darin ist es mglich und blich mit While-Do oder If-Then-Else zu arbeiten. Manchmal ist es aber einfach bersichtlicher, diese Aufgabe einer Funktion zu bergeben und somit gewissermaen auszulagern. In diesem Fall ruft man die Funktion mit Call auf und kann in der nchsten Zeile des Skriptes schon mit dem Ergebnis der Funktion fortfahren. Wie bereits erwhnt, wurde die SQF-Syntax fr ArmA grozgig erweitert und um viele Mglichkeiten reicher. Sie kann jetzt sogar fr Skripte verwendet werden, die damit auch die Dateinamenerweiterung SQF bekommen. In den Skripten werden, wie auch sonst berall in ArmA, Code-Blcke von geschweiften Klammern {} umschlossen und Statements mit einem Semikolon ; abgeschlossen. Natrlich kann man auch in Skripten mit SQF-Syntax Wartezeiten einbauen, dazu wird aber nicht wie bei SQS-Skripten die Tilde ~ benutzt, sondern der Befehl Sleep verwendet. Skripte, die die SQF-Syntax verwenden, mssen mit den Befehlen Spawn oder execVM aufgerufen werden. Wenn ein Skript mehrfach ausgefhrt werden soll, empehlt es sich das Skript wie eine Funktion vorzuladen, damit es bereits im Speicher bereit liegt und so rascher ausgefhrt werden kann. Skript vorladen: BeispielSkript = compile preprocessle "BeispielSkript.sqf"; Skript aufrufen: [Daten] spawn BeispielSkript; 276

Fr Skripte, die nur selten ausgefhrt werden sollen, kann man den Befehl execVM verwenden, da hier das Skript nicht vorgeladen werden muss. [Daten] execVM "BeispielSkript.sqf"; Soll ein Skript aus dem Editor aufgerufen werden, ist es leider meistens ntig, den Skriptaufruf etwas zu verndern. Er sieht dann so hnlich wie ein Funktionsaufruf aus, obwohl das Skript natrlich keinen Wert zurckgibt. Skript aus Editor aufrufen (vorkompiliert): Variable = [Daten] spawn BeispielSkript; oder (nicht vorkompiliert): Variable = [Daten] execVM "BeispielSkript.sqf"; Variable ist nur ein Platzhalter, der momentan lediglich Fehlermeldungen verhindert. Man kann die Variable als Dummy betrachten und auch so bezeichnen oder schlicht und einfach mit d abkrzen. d = [Daten] execVM "BeispielSkript.sqf"; Skripte mit der SQF-Syntax enden einfach, wenn der Interpreter an ihr Ende gelangt, der Exit-Befehl ist nicht nur unntig, sondern auch ungeeignet, weil es ein SQS-Sytnaxbefehl ist. Sollte es einmal ntig sein, ein SQF-Skript vor dem Dateiende abzubrechen, dann benutzt man folgende Konstruktion: if (Abbruchbedingung) exitWith {}; Man kann in den geschweiften Klammern des exitWith-Befehls natrlich auch noch Code ausfhren. Beispielweise: if (Abbruchbedingung) exitWith {Player sidechat "Ende!"};

Kapitel 9 277

Kapitel 10
- Dialoge und Ressourcen In diesem Kapitel werden dir einige grundlegende Bereiche zum Thema Dialoge nher gebracht. Ich habe mich hier wirklich auf ein paar wesentliche Bereiche beschrnkt, da mein Wissen im Bereich Dialoge begrenzt ist. Dennoch werde ich dir hier aufzeigen, wie du es schast ein Bild, einen Text oder als Highlight sogar ein kleines Video in deine Mission einzubinden. Alle Themen sind selbstverstndlich erweiterbar. Dies sind nur ein paar kleine Einleitungen, damit du schon mal ein Basiswissen bekommst, um spter auch mal eine Grak oder hnliches einbinden zu knnen. Da Dialoge sehr viel Sorgfalt im Bezug auf Arbeit mit der Description.ext erfordern, muss man auch die notwendige Geduld, Ruhe und das ntige Grundwissen ber die Description.ext mitbringen. Das Vergessen eines Semikolons oder einer Klammer fhrt selbst bei Pros regelmig zu CTDs (Crash to Desktop). Deshalb nicht gleich das Handtuch werfen, sondern ruhig und strukturiert an die Sache herangehen.

10.1 10.2 10.3 10.4 10.5 10.6 10.7 10.8 10.9 10.10 10.11

Was sind eigentlich Dialoge Basisdenitionen(Konstanten) Basisklassen und Subklassen Die Schriftarten Eine Grak einblenden Einen Text einblenden Visieransichten einblenden Die eigene Lagekarte Einen Button denieren Einen Rahmen denieren Die Videosequenz

279 280 283 286 287 288 289 291 292 294 297

278

10.1 - Was sind eigentlich Dialoge


Dialoge sind Bilder, Texte oder Schaltchen, die sich fr eine Mission oder auch fr Missionfeatures frei denieren lassen. Man kann so zum Beispiel Graken, Texte oder auch Visieransichten whrend der Mission oder einer Sequenz einblenden lassen. Richtig interessant wird es erst, wenn man Schaltchen oder Dropdownmens deniert und diese etwas ausfhren lsst. Als Beispiel dient hier der Editor, der ja fast nur aus Dialogen besteht. Alle Mens, die sich nen lassen sind ebenfalls Dialoge. Ein ebenfalls sehr gutes Beispiel ist die Windowsoberche. All das luft auf Dialogbasis. Folgend mal ein Dialog aus dem Editor zum Gruppen einfgen mit Dropdownmen

Kapitel 10

In Armed Assault wurden die Mglichkeiten gegenber Operation Flashpoint um einiges erweitert. Dialoge knnen jetzt noch viel ansprechender gestaltet und deniert werden. Zum Beispiel mit Farbverlufen, Schatten oder als iegende Schrift, wie bei den Credits von Armed Assault zu sehen ist. Dialoge sind aber, so schn wie sie sind, dennoch ein Kapitel fr sich und teilweise sehr aufwendig umzusetzen. Dieses Kapitel beinhaltet lediglich eine Einfhrung und gewhrt mit der themenabschlieenden Videosequenz einen kleinen Blick ber den Tellerrand, um zu zeigen, was in diesem Bereich so alles mglich ist. Das Anlegen von Dialogen erfordert eine sehr disziplinierte und sorgfltige Arbeitsweise, da man diese in der Description.ext denieren muss und einen CTD (Crash to Desktop) zur Folge hat, wenn man mal eben etwas bersieht zu denieren. Als bestens Beispiel dienen hier das Vergessen eines Semikolons oder eine falsche Klammersetzung. Auf dem folgenden Bild wurde die Schrift iegend animiert.

279

10.2 - Basisdenitionen (Konstanten)


Um Dialoge zu erstellen oder Ressourcen zu nutzen, kommt man meistens nicht darum herum einige Basisdenitionen vorzunehmen. Hier sind gerade die Denes gemeint, welche eigentlich schon tief in der Engine von Armed Assault verankert sind, aber dennoch auch fr den eigenen Bedarf umdeniert oder neu angelegt werden knnen. Fr einige Bereiche ist es nicht notwendig alle Denes mit in die Description.ext aufzunehmen. Manchmal braucht man sogar gar keine, solange man mit den Basisdenitionen zufrieden ist. Siehe dazu bei Grak oder Schrift einblenden, dort wurden gar keine Denes angegeben. Mchte man aber ganz und gar sicher gehen, kann man auch gerne alle mit in die Description.ext aufnehmen und entgeht damit ganz sicher einem CTD (Crash to Desktop) oder einem anderen Fehler. Aber was sind denn jetzt eigentlich diese Denes? Denes sind Platzhalter. Fr jedes Dene sind von der Engine aus zunchst Werte hinterlegt. Solange diese Werte den eigenen Zweck erfllen, gibt es keine Notwendigkeit eigene zu denieren. Mchte man aber zum Beispiel fr seine Schrift oder was auch immer einen eigenen Dene denieren, so ist das durchaus mglich. Als Beispiel mal folgendes. Es gibt ja die Werte True und False fr welche man ja auch 1 fr True oder 0 fr False setzen kann. In der Engine von Armed Assault sollte es von daher folgende Denierung geben: #dene false 0 #dene true 1 Diese kann man zum Beispiel auch in der entpackten Missions.pbo unter Armory.intro und darin in der rscCommon.hpp sehen. Dort sind fr die unterschiedlichsten Dinge die verschiedensten Werte deniert. Dene heit ja am Ende denieren. Man deniert also etwas nach seinen Ansprchen. Dies knnten hierbei unter anderem Booleans Sounds Elemente Schriften Farben - Aussagewerte wie true oder false - Sounds fr Buttons etc. - Rahmen, Flchen, Buttons, Listboxen uvm. - Die Schriftarten - Die Farben

sein, oder vieles mehr. Man hat hierbei einen relativ groen Spielraum fr eigene Denitionen, wobei es am Ende aber dann doch irgendwann Grenzen geben wird. Einfach gesehen knnte man es ein Wort fr einen Wert vergeben bezeichnen, da man sich ein Wort am Ende besser als irgendwelche Zahlen merken kann. Als Beispiel soll hier mal die eigene Denierung von einer eigenen Schriftfarbe dienen. Farben wie scharz oder wei, sind zahlentechnisch nicht so ganz so schwer zu merken. Hat man aber irgendwelche Zwischenwerte, um ein ganz bestimmtes rot, blau oder was auch immer

280

Kapitel 10

haben zu wollen, ist es doch einfacher, sich diese selbst zu denieren. Die Werte der Farben schwarz und wei sind also, wie hier zu sehen recht einfach: #dene Color_White #dene Color_Black {1, 1, 1, 1} {0, 0, 0, 1}

Bei einer anderen Farbe sieht es da schon wieder anders aus. Etwa ein blau: #dene Mein_Blau {0, 0, 0.7, 1}

Exkurs Farben werden aus Werten gemischt. Hierbei gelten alle Werte zwischen 0 und 1. Der letzte Wert gibt dabei die Transparenz an. {rot, grn, blau, Transparenz} Ende des Exkurs! Dene-Namen Wie bei dem obigen Dene der Farbe blau zu erkennen, wurde dort ein eigener Denename (Mein_Blau) vergeben. Es ist also auch mglich eigene Namen zu vergeben. Generell bietet es sich an, die Standarddenes so zu belassen und zustzlich eigene anzulegen und spter zu vergeben. Damit geht man gegebenfalls einer Menge rger aus dem Weg. Folgend mal eine sehr kleine Auistung einiger Standarddenes mit Namen und Wert: #dene CT_STATIC #dene CT_BUTTON #dene CT_EDIT #dene CT_SLIDER #dene ST_TITLE_BAR #dene ST_PICTURE 0 1 2 3 32 48

Diese Namen zu whlen wre jetzt nicht besonders sinnvoll. Deshalb sollte man seine Namen so whlen, dass es ganz sicher keine berschneidung gibt. #dene Murray_Title #dene Murray_Schrift #dene Murray_Sound ST_TITLE_BAR + ST_CENTER "Zeppelin32" {"\ca\ui\data\sound\mouse2", 0.09, 1}

Im oberen Beipiel wurde ein eigener Name vergeben und diesem die Werte von ST_Title_Bar und ST_Center zugewiesen, was so auch mglich ist. Hier ist aber jetzt Schluss zum Thema Denes! Man wei nun, dass es mglich ist eigene Namen und Werte zu vergeben und auch, wie sich die Farben zusammensetzen. Auf der Folgeseite nur noch mal ein Ausschnitt von Standarddenes, welche in vielen der oziellen Missionen etc. wiederzunden sind. 281

Standarddenes Folgend eine Auswahl von Standarddenes aus Armed Assault. Generell bietet es sich an, diese aus irgendeiner oziellen Description.ext einer ArmA-Mission zu kopieren. Hat man sich ein Mal ein Muster, also Template, angelegt, so kann man es immer wieder verwenden.
// Control Types #dene CT_STATIC #dene CT_BUTTON #dene CT_EDIT #dene CT_SLIDER #dene CT_COMBO #dene CT_LISTBOX #dene CT_TOOLBOX #dene CT_CHECKBOXES #dene CT_PROGRESS #dene CT_HTML #dene CT_STATIC_SKEW #dene CT_ACTIVETEXT #dene CT_TREE #dene CT_STRUCTURED_TEXT #dene CT_CONTEXT_MENU #dene CT_CONTROLS_GROUP #dene CT_XKEYDESC #dene CT_XBUTTON #dene CT_XLISTBOX #dene CT_XSLIDER #dene CT_XCOMBO #dene CT_ANIMATED_TEXTURE #dene CT_OBJECT #dene CT_OBJECT_ZOOM #dene CT_OBJECT_CONTAINER #dene CT_OBJECT_CONT_ANIM #dene CT_LINEBREAK #dene CT_USER #dene CT_MAP #dene CT_MAP_MAIN 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 40 41 42 43 44 45 80 81 82 83 98 99 100 101 // Static Styles #dene ST_POS #dene ST_HPOS #dene ST_VPOS #dene ST_LEFT #dene ST_RIGHT #dene ST_CENTER #dene ST_DOWN #dene ST_UP #dene ST_VCENTER #dene ST_TYPE #dene ST_SINGLE #dene ST_MULTI #dene ST_TITLE_BAR #dene ST_PICTURE #dene ST_FRAME #dene ST_BACKGROUND #dene ST_GROUP_BOX #dene ST_GROUP_BOX2 #dene ST_HUD_BACKGROUND #dene ST_TILE_PICTURE #dene ST_WITH_RECT #dene ST_LINE #dene FontM //My Denes #dene Murray_Title #dene Murray_Font 32 + 64 "TahomaB" 0x0F 0x03 0x0C 0x00 0x01 0x02 0x04 0x08 0x0c 0xF0 0 16 32 48 64 80 96 112 128 144 160 176

"Zeppelin32"

Die obigen beiden Fenster stellen eigentlich ein Fenster dar und die Denes sollten daher untereinander stehen, was hier aus Platzgrnden leider nicht mglich ist. Deshalb die Aufteilung in zwei Tabellen. Zunchst sind die Control Types und danach die Static Styles nacheinander aufgelistet, wobei die Reihenfolge dabei aber keine Rolle spielt. Wie man erkennen kann ist hierbei eine gewisse Ordnung gegeben. Zum Ende wurde mit FontM eine Schriftart deniert. Eigens angelegte Denes setzt man nun einfach mit unten an, dann sieht man mal abgesehen vom eigenen Denenamen gleich, dass ab dort die Eigenen kommen. 282

10.3 - Basisklassen und Subklassen


Zum Anlegen von Dialogen oder zum Nutzen von Ressourcen bentigt man Basis- und Subklassen. In einer Basisklasse deniert man erstmal grundlegende Dinge und in der Subklasse dann das Klassenspezische. Als Parallelbeispiel dienen hier mal die normalen Soundklassen, welche man ja auch in der Description.ext deniert.
class CfgSounds { sounds[] = { Sound1 }; class Sound1 { name = "Sound1"; sound[] = {"\sounds\sound1.ogg", db+0, 1.0}; titles[] = {}; }; };

Kapitel 10

Auch hier gibt es die Basis- und die Subklasse. Die Basisklasse CfgSounds legt erstmal fest, dass es sich um einen Sound handelt, whrend die Subklasse, hier Sound1, die jeweiligen Denitionen zu Sound1 beinhaltet. Genau so sieht es auch bei den Klassen aus, die fr Dialoge bzw. Ressourcen bentigt werden. Allerdings gibt es hier weit mehr Denitionsmglichkeiten, als bei den Sounds. Basisklasse Folgend mal eine Basisklasse, in welcher grundlegende Dinge wie Typ, Style, Hintergrund, Textfarbe, Schriftart und Schriftgre deniert sind. Diese Basisklasse RscText kann man jetzt grundstzlich als Basis fr alle folgenden Subklassen verwenden.
class RscText { type = CT_STATIC; idc = -1; style = ST_CENTER; colorBackground[] = {0, 0, 0, 0}; colorText[] = {0, 0, 0, 0}; font = "TahomaB"; sizeEx = 0.080; };

// Hintergrundfarbe // Textfarbe // Schriftart // Schriftgre

Nachdem man nun eine Basis geschaen hat, kann man die Subklassen zustzlich noch individuell anpassen. Als Beispiel knnte man in der Subklasse Schrift1 eine grere und andersfarbige Schrift, als bei der Subklasse Schrift2 oder eben eine andere Position auf dem Monitor denieren. 283

Subklasse Die Subklasse ansich teilt sich nun auch nochmal auf. Sie hat in dem Sinne auch nochmal eine Subklasse. Diese nennen wir hier jetzt lieber mal Komponente, um Verwechselungen zu vermeiden. In folgendem Beispiel mal eine Gliederung:
// Mainklasse class RscText { }; // Subklasse class RscTitles { [Auistung der Ressourcen] class MeineRessource { [Auistung der Komponenten] class MeineKomponente { }; }; };

Man achte hierbei auf die Anordnung der geschwungenen Klammern, welche eine gewisse bersichtlichkeit mitbringen. Man kann so genau erkennen, was zu wem gehrt. In folgendem Beispiel aus Kapitel 10.6 in welchem es darum geht eine Schriftressource zu denieren. Hier sieht man die zunchst festgelegt Basisklasse RscText und die darunterliegende Subklasse Schrift1. Description.ext
// Basisklasse class RscText { type = CT_STATIC; idc = -1; style = ST_CENTER; h = 0.05; colorBackground[] = {0, 0, 0, 1}; colorText[] = {0, 0, 0, 1}; font = "TahomaB"; sizeEx = 0.040; }; // Weiter auf der Folgeseite!

// Hintergrundfarbe // Textfarbe // Schriftart // Schriftgre

284

Kapitel 10

// Subklasse class RscTitles{Titles[]={"Schrift1"}; // Liste der Ressourcen: Schrift1, Schrift2,. . . class Schrift1 { Idd= -1; MovingEnable=False; Duration=10; // Einblenddauer FadeIn=1; // Einblendzeit Name=" Schrift1"; // Name Controls[]={"SchriftButton1"}; // Liste class SchriftButton1 : RscText { ColorText[]={1,1,1,1}; Font="Bitstream"; Text="OPERATION SNAKEBITE"; x = 0.30; y = 0.50; w = 0.50; h = 0.05; }; };

// Schriftfarbe // Schriftart // Text // X-Achse // Y-Achse // Fensterbreite // Fensterhhe

Wie man in der Basisklasse RscText erkennen kann, wurde als Schriftfarbe {0, 0, 0, 1}, also schwarz, deniert. Aber wie auf dem unteren Bild zu sehen ist, ist die Farbe der Schrift wei. Das liegt daran, dass in der Subklasse SchriftButton1 fr Schrift1 die Farbe Wei {1, 1, 1, 1} deniert wurde. Wie man des Weiteren erkennen kann wurden in der Subklasse zustzlich noch viel mehr Dinge deniert. Eine ganz wichtige Zeile ist die class SchriftButton1 : RscText Daran erkennt man, dass der Klasse SchriftButton1 die Denitionen von RscText zugewiesen werden. Also alles was in der Basisklasse RscText vordeniert wurde, wird hier bernommen und knnte in dieser Subklasse ohne weiteres weggelassen werden. Im obigen Beispiel wurde jedoch fr SchriftButton1 die Schriftfarbe und Schriftart neu deniert. Deshalb sind diese Zeilen dort mit angegeben. Diese Einblendung wird nun wie folgt aufgerufen:

TitleRsc ["Schrift1", "PLAIN"];

285

10.4 - Die Schriftarten


In Armed Assault sind diverse Schriftarten vordeniert, welche man, je nachdem was man machen mchte, auswhlen kann. Man hat die Mglichkeit bei den Denes oder in der jeweiligen Klasse bzw. Subklasse eine dieser Schriftarten zu denieren. Hier eine kleine Auswahl der vorhandenen Schriftarten: Arial Bold Bitstream TahomaB Zeppelin33 Zeppelin33Italic Zeppelin32 Folgend mal zwei Bildbeispiele: TahomaB

Zeppelin33Italic

Bei folgendem Description.ext-Beispiel wird der Ressource RscText die Schriftart Bitstream mit einer Gre von 0.04 zugewiesen.
class RscText { idc = -1; type = CT_STATIC; style = ST_LEFT; colorText[] = {1, 1, 1, 1}; colorBackground[] = {0, 0, 0, 0}; font = Bitstream; sizeEx = 0.04; };

286

10.5 - Eine Grak einblenden


Um eine einfache Grak einzublenden ist die Denierung von Denes in der Description.ext nicht unbedingt notwendig und kann ohne weiteres weggelassen werden. Fr die Grak muss allerdings eine Klasse in der Description.ext angelegt werden, damit diese auch benutzt werden kann. Als Beispiel knnte hier mal die kurze Einblendung einer Grak beim Beginn einer Mission oder hnliches dienen. Dafr wird lediglich eine einfache Klasse fr das Bild in der Description.ext deniert. Im unteren Beispiel ist alles deniert, was dazu bentigt wird. Der Aufruf erfolgt hierbei mit: titleRsc ["Bild1","PLAIN"]; Description.ext
class RscPicture { idc = -1; type = CT_STATIC; style = ST_PICTURE; colorBackground[] = {0, 0, 0, 0}; colorText[] = {1, 1, 1, 1}; font = Zeppelin32; sizeEx = 0; }; class RscTitles { titles[] ={Bild1}; class Bild1 { idd=-1; movingEnable = true; duration=10; fadein=2; name = "Bild1"; controls[]={Picture}; class Picture : RscPicture { x = 0.30; y = 0.50; w = 0.40; h = 0.05; text = "bilder\bild1.paa"; sizeEx = 0.04; style=48; }; }; };

Kapitel 10

// Dauer der Einblendung // Einfadezeit // Name im Editor

// X-Achse // Y-Achse // Fensterbreite // Fensterhhe // Die Grak mit Pfad

287

10.6 - Einen Text einblenden


Das Denieren eines eigenen Textes kann unter anderem schon etwas aufwendiger sein, als das Einblenden einer Grak. Hierfr deniert man zustzlich Dinge wie Schriftart, Gre, Farbe, Style und die Position, um mal die Wichtigsten zu nennen. Zunchst deniert man die Basisklasse, in welcher man die Basics festlegt. Danach folgt fr jede Texteinblendung bzw. Satz oder wie auch immer eine eigene Subklasse, die man individuell denieren kann. Bei der ersten Subklasse (Schrift1) knnte quasi eine berschrift mit grerer und farbiger Schrift deniert sein und in der zweiten Subklasse (Schrift2) eine kleinere Schrift in weier Farbe. Die Einblendung erfolgt wieder mit: titleRsc ["Schrift1","Plain"] Description.ext
class RscText { type = 0; idc = -1; style = 0; h = 0.05; colorBackground[] = {0, 0, 0, 0}; colorText[] = {0, 0, 0, 0}; font = TahomaB; sizeEx = 0.080; }; class RscTitles{Titles[]={"Schrift1"}; class Schrift1 { Idd=-1; MovingEnable=0; Duration=10; FadeIn=1; Name=" Schrift1"; Controls[]={"Control01"}; class Control01: RscText { ColorText[]={1,1,1,1}; Font="TahomaB"; Size=0; Text="OPERATION SNAKEBITE"; x = 0.30; y = 0.50; w = 0.40; h = 0.1; }; };

// Hintergrundfarbe // Textfarbe // Schriftart // Schriftgre

// Einblenddauer // Einblendzeit // Name

// Schriftfarbe // Schriftart // Text // X-Achse // Y-Achse // Fensterbreite // Fensterhhe

288

10.7 - Visieransichten einblenden


Die normalen Visieransichten der Waen lassen sich auch fr Sequenzen wie Intros, Outros und so weiter verwenden. Das Fernglas lsst sich dabei am unkompliziertesten einblenden. Dazu bentigt man lediglich die folgende Syntax: cutRsc ["Binocular", "PLAIN",0.1] oder titleRsc ["Binocular", "PLAIN",0.1] Alle Anderen muss man zunchst in der Decription.ext denieren. Nach der Denition hat man die Mglichkeit diese Ressource per Auslser unter Eekte und dort unter Typ und Ressource auswhlen oder idealerweise per Skript aufrufen. Folgend eine kleine Auswahl der Visieransichten mit dem jeweiligen Quellenpfad, wobei zu beachten gilt, dass einige Waen das gleiche Visier nutzen. Von daher wurden hier nicht alle Waen einzeln aufgefhrt, sondern lediglich eine kleine Auswahl. Visiertypen Wae
G36 M4SPR M4 M4GL SVD Javeline Binocular Laserdesignator NVGoggles M119 Stryker BRDM AH1ZGunner Ka50 Tankdriver Tankgunner M1A1 ZSU Gunner ZSUCommander T72Gunner

Kapitel 10

Quellpfad \ca\Weapons\G36_optics \ca\weapons\optika_sniperw \ca\Weapons\optika_ACOG \ca\Weapons\optika_ACOG \ca\weapons\optika_snpiere \ca\Weapons\optika_TOW \ca\weapons\optika_dalekohled \ca\weapons\optika_SOFLAM \ca\weapons\optika_night \ca\weapons\optika_M119 \ca\Wheeled\optika_stryker_driver \ca\Tracked\optika_stryker_gunner \ca\wheeled\optika_BRDM \ca\air\optika_heli_gunner \ca\air\optika_AH1Z \ca\air\optika_Ka50_rocket.p3d \ca\Tracked\optika_tank_driver \ca\Tracked\optika_tank_gunner \ca\Tracked\optika_M1A1_commander \ca\Tracked\optika_zsu_gunner \ca\Tracked\optika_tanke_auxiliary \ca\Tracked\optika_T72_gunner 289

Description.ext
#dene CT_OBJECT 80 class RscObject { type = CT_OBJECT; scale = 1.0; direction[] = {0, 0, 1}; up[] = {0, 1, 0}; }; class RscTitles { titles[] = {SNIPER}; class SNIPER { idd=-1; movingEnable = false; duration=10; name = "SNIPER"; objects[]= {SNIPER}; class SNIPER : RscObject { model= "\ca\weapons\optika_SOFLAM"; idc=-1; position[] = {0,0,0.065}; direction[] = {sin 0, sin 0, cos 180}; up[] = {0, 1, 0}; }; };

Die hier festgelegte Ressource SNIPER wird nun wie folgt aufgerufen. titleRsc ["SNIPER","Plain"]

Mchte man diese Ressource spter wieder ausblenden geht das, je nach Auswahl, mit: titleRsc ["default","plain",2] oder cutRsc ["default","plain",2] 290

10.8 - Die eigene Lagekarte


Die Mglichkeit ein Bild einzufgen ernet jetzt natrlich diverse neue Mglichkeiten. Statt einem Logo knnte man nun eine eigene Lagekarte bzw. geheime Plne, ein Fahndungsfoto oder noch viel mehr realisieren. Als Beispiel dient hier mal eine Lagekarte. Wie man diese aufruft soll hierbei mal jedem selbst berlassen bleiben. Funk, Actionmen oder wie auch immer. Auf jeden Fall sollte die Aufrufsyntax enthalten sein: titleRsc ["Lagekarte","PLAIN"]; Description.ext
class RscPicture { type = CT_STATIC; idc = -1; style = ST_PICTURE; colorBackground[] = {0, 0, 0, 0}; colorText[] = {1, 1, 1, 1}; font = Zeppelin32; //Schriftart sizeEx = 0; }; class RscTitles{titles[] ={Lagekarte}; class Lagekarte { idd=-1; movingEnable = true; duration=10; // Dauer der Einblendung fadein=2; // Einfadezeit name = "Lagekarte"; // Name im Editor controls[]={Picture}; class Picture : RscPicture { x = 0.10; // X-Achse y = 0.40; // Y-Achse w = 0.80; // Fensterbreite h = 0.05; // Fensterhhe text = "bilder\lagekarte.jpg"; // Die Grak mit Pfad sizeEx = 0.04; style=48; }; };

Kapitel 10

Wie man erkennen kann, gleicht diese Description.ext genau dem Beispiel aus Kapitel 10.5, nur dass eben einige Werte verndert wurden.

291

10.9 - Einen Button denieren


Einen Button zu denieren ist schon etwas komplexer als das Einfgen eines einfachen Bildes oder Textes. Hierbei mssen auf jeden Fall die Denes verwendet werden und sogar noch einiges mehr, wie man gleich bemerken wird. Man hat hierbei unzhlige Mglichkeiten, wobei sich aber dieses Beispiel nur auf ein paar Basics bzw. einen einfachen Standartbutton beschrnken wird. Description.ext
#dene CT_BUTTON #dene Color_White #dene Color_Black #dene Color_Grey #dene FontHTML 1 {1, 1, 1, 1} {0, 0, 0, 1} {0.5, 0.5, 0.5, 1} "BitStream"

class RscButton { type = CT_BUTTON; style = ST_CENTER; // Text Denitionen font = FontHTML; colorText[] = Color_White; colorDisabled[] = Color_Black; // Hintergrund-Einstellungen colorBackground[] = Color_Black; colorBackgroundDisabled[] = Color_Black; colorBackgroundActive[] = Color_Grey; osetX = 0.001; osetY = 0.002; osetPressedX = 0.003; osetPressedY = -0.003; colorFocused[] = Color_Black; // Schatten Einstellungen colorShadow[] = Color_Black; // Rahmen-Einstellungen colorBorder[] = Color_White; borderSize = 0.02; // Sounds soundEnter[] = {"\ca\ui\sound\pageopen", 0.1, 1}; soundPush[] = {"\ca\ui\sound\pageclose", 0.1, 1}; soundClick[] = {"\ca\ui\sound\obutton", 0.1, 1}; soundEscape[] = {"\ca\ui\sound\obutton", 0.1, 1}; };

Weiter auf der nchsten Seite. Im ersten Teil der Description.ext wurden zunchst die Rahmendaten fr den Button deniert. Im zweiten Teil nun der Button selbst. 292

Kapitel 10

class DemoButton { idd = 100; movingEnable = false; controls[] = { MEIN_BUTTON }; class MEIN_BUTTON : RscButton { idc = 100; sizeEx = 0.018; text = "Klick Mich"; // Position x = 0.4; y = 0.4; // Gre w = 0.15; h = 0.04; // Action action = "ctrlSetText [100, ""Danke""]; hint ""TEST"" "; }; };

Hier wurde nun der Button selbst deniert. Er bekommt dabei die Rahmendaten von dem im ersten Description.ext-Teil vordenierten RscButton zugewiesen. Dieser Button lsst sich nun mit folgender Syntax ganz einfach aufrufen: ok = createDialog "DemoButton" Diese Syntax kann berall ganz frei eingesetzt werden, um den Button aufzurufen. Zum einfachen Testen eignet sich ein Funkauslser recht gut. Die Actionzeile knnte auch ganz anders aussehen. Hier sollte nur mal gezeigt werden, dass sich der Text eines Buttons beim anklicken auch ndern kann. Ansonsten gibt man darin die Befehle an, die beim anklicken ausgefhrt werden sollen. Die Actionzeile knnte beispielsweise auch so aussehen: action = "closeDialog 0; [] exec ""script.sqs"" "; Wie man sieht, lsst sich die Actionzeile recht frei denieren. Man kann hier ganz normal wie bei allen anderen Dingen etwas ausfhren lassen oder hnliches. Wichtig ist dabei die Beachtung der Zeichen wie Klammern, Anfhrungsstriche etc. Der Befehl closeDialog 0 schliet den Dialog letztendlich. Diesen Butten kann man jetzt noch mit einem Rahmen verzieren oder vieles mehr. Dies sollte lediglich ein schlichtes Beispiel sein, um zu zeigen, wie man einen Button erstellt. 293

10.10 - Einen Rahmen denieren


In folgendem Beispiel wird ein ganz normaler Rahmen deniert. Als kleine Besonderheit, hat dieser Rahmen noch einen kleinen Text mit integriert. Zunchst werden im Kopf wieder die Denes festgelegt, welche man dann im restlichen Verlauf zuordnet. Description.ext
#dene CT_STATIC #dene Color_White #dene Color_Black #dene FontHTML #dene ST_FRAME 0 {1, 1, 1, 1} {0, 0, 0, 1} "BitStream" 64

class RscText { Idc = -1; Type = CT_Static; Font = FontHTML; ColorBackground = Color_White; }; class My_Frame : RscText { Style = ST_FRAME; x = 0.22; y = 0.12; w = 0.40; h = 0.20; }; class RscTitles {Titles [] = {"Rahmen1"}; class Rahmen1 { Idd= -1; MovingEnable=False; Duration=10; FadeIn=1; Name="Rahmen1"; Controls[]={"SchriftRahmen1"};

// Einblenddauer // Einblendzeit // Name // Liste

class SchriftRahmen1 : MY_Frame { ColorText[]= Color_Black; Text="OPERATION SNAKEBITE"; SizeEx = 0.030; }; };

//Schriftfarbe // Text

294

Kapitel 10

Im Spiel sieht das Ganz dann wie folgt aus, wobei man den Rahmen wie folgt aufruft: titleRsc ["Rahmen1", "PLAIN"];

10.11 - Die Videosequenz


Das abschlieende Highlight zu diesem Dialogkapitel soll nun die Erstellung einer eigenen Videosequenz darstellen. Eine solche Sequenz wird mit einer Reihe von einzelnen Frames, also vielen einzelnen Bildern und einem kleinen Skript umgesetzt. Natrlich muss, wie bei allen anderen Dialogen auch, erstmal die Description.ext dafr ausgelegt werden. Description.ext
class RscPicture { Idc = -1; Type = 0; Style = 48; ColorBackground[] = {0, 0, 0, 0}; ColorText[] = {1, 1, 1, 1}; Font = BitStream; SizeEx = 0; }; class Videodialog { Idd = -1; MovingEnable = true; Controls[] = {Picture_1}; class Picture_1 : RscPicture { idc = 200; x = 0.0; y = 0.0; w = 1.0; h = 1.0; text = "video\frame1.jpg"; size = 0; }; };

// Die ID // Gre und Position // Dateipfad

295

Nachdem die Description.ext deniert wurde, wird noch ein Skript bentigt, mit welchem die Sequenz aufgerufen und gesteuert wird. Das Skript schaut dabei wie folgt aus: Video.sqs:
playMusic "ATrack8" TitleCut [" ", "BLACK IN"]; titleFadeOut 4 _video = createdialog "Videodialog" _x = 1 _delay = 1/24 #Loop ctrlSetText [200, format ["video\frame%1.jpg", _x]] ~ _delay _x = _x + 1 ? _x < 150 : goto "Loop" closedialog 0 TitleCut [" ", "BLACK IN"]; titleFadeOut 4 exit;

Wie man erkennen kann, wurden hier gleich einige Eekte mit eingebracht. Die Sequenz blendet Dank dem Titelcut erstmal langsam ein. Dazu wird gleich Musik abgespielt. Etwa gleichzeitig wird der Videodialog erstellt und die Bilder laufen ab. Dazu jetzt aber noch ein paar kurze Erluterungen. _x - Wird fr den eingebauten Zhler verwendet. Solange der Wert kleiner als 150 ist, wird der Loop wiederholt. 150 ist die Anzahl der Bilder, welche im Ordner Video liegen. Dies knnen natrlich noch weit mehr sein. - Hiemit legt man die Abspielgeschwindigkeit der Bilder fest. ndert man den Wert zum Beispiel auf 1/12, laufen die Bilder langsamer ab und es entsteht der Zeitlupeneekt. 1/48 lsst die Bilder noch schneller ablaufen.

_delay

video\frame%1.jpg - Im Ordner Video sind die einzelnen Bilder hinterlegt, welche als frame1, frame2, ... durchbenannt sind. In diesem Beispiel wurden 150 Bilder verwendet. Mchte man also noch mehr Bilder verwenden, muss man den Wert im Skript einfach anpassen. 296

Kapitel 10

Die Bilder bzw. Frames Nachdem nun das Gerst steht, fehlt nur noch der eigentliche Inhalt. Wie schon erwhnt werden dafr einzelne Bilder bentigt. Die lnge der Sequenz bestimmt sich also aus der Anzahl der Bilder, die dafr verwendet werden. Dafr gibt es spezielle Freewareprogramme, welche es einem ermglichen, aus einem Video die einzelnen Bilder zu exportieren. Aus rechtlichen Grnden werde ich diese hier jetzt nicht nennen. Dies knnen, je nach Lnge oder eigenem Vorhaben schon eine ganze Menge Bilder werden. Bei dem Beispielskript wurden ganze 150 Bilder verwendet, wobei die Sequenz aber am Ende nur ein paar Sekunden lang ist. Deshalb sollte man sich berlegen, in welcher Form man ein solches Feature anwendet. Es besteht ja auch die Mglichkeit die Bilder zu verkleinern und so anzupassen, dass sie nur einen kleinen Teil des Bildschirms belegen. So eine Art kleines Infovideo, Action Hud oder was auch immer. Mchte man das Video aber ber die ganze Bildche legen, sollte man die Bilder entsprechend gro speichern. Zum Beispiel 512x512 Pixel. Dabei sollte man aber auch nicht zu groe Dateien verwendet. Was die Dateigre angeht. Da die Mission am Ende vom Gesamtumfang zu gro werden knnte. Ordner Es bietet sich fr die einzelnen Bilder an einen extra Ordner anzulegen. Denn diese im Rootverzeichnis der Mission abzulegen wre etwas unprofessionell. In diesem Beispiel wurde der Ordner Video benannt. Daraus ergibt sich dann der Pfand: video\frame%1.jpg Folgend auch nochmal ein Screen, welcher die nahezu gleichnamigen, aber gleichmig durchnummerieren Bilder enthlt.

Die Engine ersetzt den Wert %1 dann, dank der richtigen Syntax, mit der nchst hheren Zahl. Im Skript schaut diese Syntax wie folgt aus (siehe auch links im Skript): ctrlSetText [200, format ["video\frame%1.jpg", _x]] Im Kapitel 5.66 sind diesbezglich einige sich selbst erklrende Syntaxarten in speziell dieser Form. Damit sollte sich dieses Verfahren auch von selbst erklren. Jetzt bleibt nur noch...

Film ab!
297

Kapitel 11
- Allgemeines In diesem nun letzten Kapitel werden dir noch einige allgemeine Bereiche aus dem Spiel erlutert. Zum Beispiel das Anlegen oder die Verwendung von MOD-Ordnern, die Verwendung von Addons in deiner Mission oder was du beachten solltest, wenn du deine Mission verentlichen mchtest. Zum Schluss dann noch das Natoalphabet, welches du als Arma-Soldat auf jeden Fall beherrschen solltest.

11.1 11.2 11.3 11.4 11.5 11.6 11.7 11.8 11.9 11.10 11.11

Eigenes Prol Die ArmA Cheats Der MOD-Ordner Die Verwendung von Addons Der Missionsrelease Die ArmA.rpt Das Natoalphabet Die Dienstgradabzeichen Die Squad.xml Die Startparameter Tastenkombinationen, Tipps und Tricks

299 301 302 303 304 305 306 307 308 311 313

298

11.1 - Eigenes Prol


Das eigene Prol, smtliche gespeicherte Spielstnde und die eigenen Editormissionen sind ja von Haus aus unter C:\EigeneDateien\ArmA\Benutzer\Missions zu nden. Natrlich ist dies nicht weiter schlimm, aber wenn man sehr viele Missionen editiert und der Ordner immer grer wird, ist die Systemfestplatte C:\ irgendwann voll. Man sollte seine Systemfestplatte, im Normalfall C:\, generell nur fr sein System und die Programme nutzen. Alle weiteren Daten sollten auf einer anderen Festplatte oder Partition gespeichert bzw. hinterlegt werden. Armed Assault legt von Haus aber den Ordner nun unter Eigene Dateien an, was nicht sehr sinnvoll ist. Msste man nun sein Windows aus Virengrnden oder was auch immer neu installieren, wren alle Daten weg. Gerade bei selbsteditierten Missionen, in welche man eine Menge Zeit investiert hat, ist das sehr rgerlich. Zudem luft Windows mit der Zeit immer schlechter, wenn man dauernd irgendwelche Daten auf der C-Festplatte hin und her kopiert. Hat man sein Armed Assault nun also auf einer anderen Festplatte bzw. Partition installiert, hat man auch die Mglichkeit sein Prol im Armed Assault Verzeichnis anzulegen. Dazu muss man zunchst eine Verknpfung zur Arma.exe erstellen. Dann klickt man per Rechtsklick darauf und whlt Eigenschaften. Danach ndert man einfach nur noch den vorhandenen Pfad in: D:\ArmA\arma.exe -proles=D:\ArmA\ -name=Username Natrlich muss man den Pfad entsprechend anpassen. Je nachdem, wo ArmA halt installiert ist. Zustzlich knnte man noch folgende Parameter mit angeben: -window -nosplash - hat zur Folge das ArmA im Fenstermodus luft - startet ArmA ohne Vorabscreens (Schnellstart) Kapitel 11

In einer Zeile wrde das dann etwa so aussehen: C:\ArmA\arma.exe -nosplash -window -proles=D:\ArmA\ -name=Username Mit der obigen Zeile wrde also das Prol im ArmA-Ordner angesprochen und das Spiel im Fenstermodus(Window) und ohne Vorabscreens gestartet. Tipp: Mchte gerade man nur editieren, lohnt es sich ArmA im Fenstermodus laufen zu lassen, da man so viel schneller zwischen Skripten und Spiel switchen kann.

299

Username.ArmAProle Im Prolordner ndet sich eine Datei namens Username.ArmAProle, in welcher alle Kongurationen des Users gespeichert bzw. hinterlegt sind. Hierzu gehren unter anderem, nur um mal die wichtigsten zu nennen: - Grakeinstellungen(Helligkeit,Gamma,Schatten,Shading,etc.) - Soundeinstellungen - Tastenkonguration - Mauseinstellungen - zuletzt gespielte SP-Mission - zuletzt gespielte MP-Mission - zuletzt gespielte Kampagnen-Mission - ausgewhlte Kampagne - Multiplayereinstellungen (Filter, etc.) - Schwierigkeitsgrad - benutzerdenierter Schwierigkeitsgrad - eigene Indetitt (wie etwa in Description.ext) - aktive Missionskeys - aktive Vehikelkeys (Waenkammer) - Blut (ein/aus) Diese Datei kann man ganz normal mit dem Texteditor nen. Man hat somit also auch die Mglichkeit, die Einstellungen direkt darin vorzunehmen. ArmA.cfg Eine weitere wichtige Datei im Prolordner ist die ArmA.cfg. In dieser nden sich direkte Systemeinstellungen zum Spiel. Also Dinge wie Grakausung, RAM usw. winX=0; winY=5; winW=1024; winH=746; winDefW=1028; winDefH=746; FSAA=2; HDRPrecision=8; lastDeviceId="4318,661,107156578"; localVRAM=527429632; nonlocalVRAM=260046847; - Bildposition X-Achse - Bildposition Y-Achse - Ausung X-Achse - Ausung Y-Achse - relative Ausung X-Achse - relative Ausung Y-Achse - AntiAliasing - HDR - Gesamtschlssel der Informationen - Grakkartenspeicher - Vom MB zugewiesener Shaderspeicher

300

11.2 - Die ArmA-Cheats


Die nun folgend aufgefhrten Cheats fr Armed Assault sind in dem Sinne eigentlich gar keine Cheats. Zumindest verschaen sie dem Spieler beim Spielen, mal abgesehen von dem Cheat Savegame, nicht unbedingt einen Vorteil. Dennoch sind sie in gewisser Hinsicht nette Features, welche ab und dann von Nutzen sein knnen. Alle nun folgend erklrten Cheats erfordern folgende Vorgehensweise. Dazu hlt man die linke Shift-Taste gedrckt und klickt kurz die Minus-Taste (-) auf dem Nummernblock. Dann den angegebenen Code mit gedrckter Shif-Taste eingeben. War dies erfolgreich, erscheint oben links am Bildschirmrand eine kurze Einblendung des zuvor eingegebenen Codes als Besttigung. Wichtig zu wissen ist, dass fr die Eingabe des Codes keine Eingabezeile erscheint. Man gibt diesen also blind ein und bekommt dann eben die Besttigung durch die Einblendung. CAMPAIGN - Schaltet die Kampagne komplett frei, ohne dass man diese durchspielen muss. Dazu muss man zunchst auf die Kampagnen bersicht wechseln und gibt dann den Code ein. - Schaltet die Missionen komplett frei, ohne dass man zunchst eine andere gespielt haben muss, damit die nchste freigeschaltet wird. Dazu wechselt zunchst in die Missionsbersicht und gibt dann den Code ein.

Kapitel 11

MISSIONS

ENDMISSION - Gibt man diesen Code whrend einer Mission an, wird diese beendet. SAVEGAME - Speichert den aktuellen Spielstand beim Spielen einer SP-Mission.

TOPOGRAPHY - Generiert eine Map im EMF-Vektor-Format und hinterlegt diese im Verzeichnis C:\. Die Datei wird generiert, wenn man nach der Eingabe das nchste Mal auf die Map wechselt. Vorsicht bei verstellter Tastatur! Dann wird das als Z gesehen. Dazu dann TOPOGRAPHZ eingeben. FLUSH - Lscht unntige Dateien, Texturen und Objekte aus RAM-Speicher

Einzelspielermissionen freischalten Die Einzelspielermissionen lassen sich auch auf andere Art und Weise freischalten. Dies erfordert die Editierung des eigenen ArmA-Proles. Dazu wechselt man zunchst in den eigenen Prolordner, net anschlieend die Datei Username.ArmAProle mit dem Texteditor und trgt dort die noch nicht vorhandenen aktive Keys mit ein. Das Ganze muss am Ende dann etwa so aussehen: activeKeys[]= { "M00", "M01", "M02", "M03", "M04", "M05", "M06", "M07", "M08", "M09", "M10", "TT01", "TT02", "TT03", "TT04", "TT05", "TT06" }; Nach dem Speichern der nderung, wird diese sofort wirksam und bleibt bestehen.

301

11.3 -Der MOD-Ordner


Die Verwendung von MOD-Ordnern gewhrleistet eine bessere bersicht bei der Benutzung von MODs und Addons. Zudem hat man dann die Wahl, welche Addons man mitladen mchte und welche nicht. Viele Addons aus der Community beinhalten fehlerhafte Congs, welche sich dann mit in die Mission.sqm eintragen, ohne dass man das Addon berhaupt darin verwendet hat. Hinzu kommt, dass sich die Ladzeit des Spiels unntig in die Lnge zieht, wenn man jedes Mal alle Addons mitladen muss, obwohl man sie gerade nicht bentigt. Deshalb verwendet der schlaue Arma-Spieler MOD-Ordner! MOD-Ordner kann man unterschiedlich benutzen. Hier mal eine Anregung: Missionsbezogen Themenbezogen MOD-bezogen @MeineMission @IIWeltkrieg @ECP-MOD

Die Namen der Ordner sind dabei variabel benennbar. Auer bei MODs, die ja vorgegeben sind, kann man jeden Namen frei vergeben. Bei den oberen Anregungen ist zum Beispiel ein Ordner Namens @MeineMission. In diesen kommen nun alle Addons, die man in seiner Mission verwendet hat. Der Vorteil ist nun, dass man diesen jetzt mit zum Download anbieten kann, damit sich die Spieler der Mission nicht erst alle Addons mhevoll zusammensuchen mssen. Der Spieler hat jetzt beim Spielstart die Wahl, ob er die Addons mitldt oder nicht. Mchte er die Mission gerade nicht spielen, braucht er auch die Addons nicht zu laden und spart somit Zeit und Performance. Das Anlegen eines MOD-Ordners Einen MOD-Ordner legt man direkt im Spielverzeichnis von ArmA an und gibt ihm einen passenden Namen. Jetzt net man seinen MOD-Ordner und erstellt darin einen Ordner namens Addons. In diesen Unterordner kommen nun alle Addons, die man fr seine Mission, oder was auch immer, bentigt.

302

Vor den Namen Mapfact wurde ein @ gesetzt, damit der MOD-Ordner im ArmAVerzeichnis gleich ganz oben mit angezeigt wird. Benennt man nun alle Ordner zuerst mit dem @, werden alle entsprechend sortiert angezeigt und man sieht gleich, was ein MOD-Ordner ist und was nicht. Natrlich kann man auch ein anderes Zeichen oder was auch immer benutzen. Dies ist lediglich eine Anregung. Das Laden eines MOD-Ordners Mchte man einen MOD-Ordner laden, kann man dies durch das Hinzufgen eines Parameters in einer eigens dafr erstellten Verknpfung zur ArmA.exe realisieren oder man nutzt einen ArmA-Launcher, welchen es im Internet zum Download gibt. Zweiteres ist natrlich die elegantere Lsung. Hier jedoch der Parameter, mit welchem man die Verknpfung ergnzt. Um diesen nun in die Verknpfung mit einzufgen klickt man mit der rechten Maustaste auf die Verknpfung und passt diese entsprechend an: D:\ArmA\arma.exe -mod=@MAPFACT Diese Verknpfung knnte man jetzt ArmA-Mapfact oder hnlich benennen.

Kapitel 11

11.4 - Die Verwendung von Addons


Addons sind eine nette Sache, erweitern ArmA ungemein und gestalten es auf lange Sicht gesehen wesentlich interessanter. Ganz klar, dass diese natrlich auch in einer Mission nicht fehlen sollten. Doch dabei gibt es einiges zu beachten, was nun hier erlutert wird. Mchte man Addons in seiner Mission verwenden, sollte man darauf achten, dass diese nicht zu performanceunfreundlich sind. Viele Addonbastler vergessen gerade die Performance nur zu gerne. Es werden oft Unmengen an Polygonen und unntig groe Texturen fr Dinge verwendet, die meistens eher unwesentlich sind. Grtenteils lsst sich all das meistens viel performancefreundlicher, also somit mit weniger Polygonen und kleineren Texturen umsetzen. Hat man sich nun das richtige Addon rausgesucht steht dem Editing nichts mehr im Weg. Jetzt sollte man nur noch darauf achten, dass man nicht zu viele Mods und Addons fr nur eine Mission verwendet. Die Spieler mssen sich dann oft die Addons zusammensuchen und ewig runterladen. Nach all der Mhe folgt dann oft die Enttuschung, dass die Mission schlecht umgesetzt ist oder so gut wie gar nicht spielbar ist, weil eben zu viele Addons verwendet wurden, die nicht gut zusammenarbeiten. Also immer daran denken weniger ist mehr! Nicht die Anzahl der verwendeten Addons in einer Mission ist wichtig, sondern viel mehr die Umsetzung, Funktionalitt, Story und vor allem die Spielbarkeit! 303

11.5 - Der Missionsrelease


Hat man seine Mission nach einigen Nervenzusammenbrchen und etwas mehr oder weniger investierter Zeit nun endlich fertig gestellt, steht die Verentlichung dieser vor der Tr. Endlich will man sein Werk der entlichkeit prsentieren und fr seine Arbeit ein anstndiges Feedback bekommen. Doch auch hierbei gibt es einige nicht gerade unwesentliche Dinge zu beachten. Es ist unwichtig, ob die Mission heute oder morgen kommt. Lieber einen Tag lnger testen und ein vernnftiges Ergebnis abliefern, als eine halbfertige Mission. Testen, testen, testen Die Mission sollte bis ins Detail auf Funktionalitt und Spielbarkeit von dir und deinen Freunden oder Bekannten getestet werden. Die Mission sollte eine gute Story und einen schlssigen Ablauf haben. Der oder die Spieler mssen immer wissen, was als nchstes ansteht und sollten durch die Story und die Spannung ein wenig in den Bann gezogen werden. Bei deiner Mission sollte mindestens eine Readme enthalten sein. Darin sollte stehen, von wem die Mission ist, vielleicht eine Kontaktemailadresse, die verwendeten Addons mit Downloadlink, einige Hinweise zur Mission und ggf. eine Auhrung aller bekannten Bugs, die man einfach nicht gext bekommen hat. Idealerweise bietet man mit der Mission einen MODOrdner zu seiner Mission mit an. Dieser sollte dann alle kleineren Addons enthalten, die in der Mission verwendet wurden. Fr grere Mods oder hnliches kann man gerne einen Downloadlink angeben. Am Ende sollte das Ganze als Rar- oder Zip-Datei gepackt werden und mindestens folgendes beinhalten: die Mission.pbo, eine Readme und den Modordner Wenn du die zuvor erwhnten Punkte einigermaen befolgt hast, sollte deinem Release und dem Erfolg deiner Mission jetzt nichts mehr im Wege stehen.

Story und Ablauf

Die Readme

Verwendete Addons

Das Paket

Also dann viel Erfolg fr deinen ersten Missionsrelease!

304

11.6 - Die ArmA.rpt


Die ArmA.rpt ist die Fehlerreportdatei von Armed Assault. Die Engine hinterlegt hier wichtige Informationen. Wenn ArmA beispielsweise mal wieder einen CTD (Crash To Desktop) herbeigefhrt hat, kann man darin nachsehen, wo der Fehler gelegen hat. Als Beispiel dient hier die Description.ext, mit der wohl die meisten Editierer ab und dann wieder auf dem Desktop landen und sich dann fragen, was denn nun falsch sein knnte. Ein Blick in die ArmA.rpt verweist dann auf den Fehler. In dieser Datei werden unter anderem Fehler von: - Missionen - Skripten - Funktionen - Addons hinterlegt. Dies knnten fehlende Zeichen, Texturen, Modelle, Materialien oder auch Congfehler sein. Die ArmA.rpt ist aber nicht nur eine Fehlerreportdatei. Sie kann auch als Log-Datei gesehen werden. Unter anderem sind hier auch - Statusnderungen von Einheiten und Objekten - Statusnderungen Spieler - Multiplayeraktivitten und vieles mehr zu nden. Sie ist somit der optimale Wegweiser bei Fehlern und so weiter. Mchte man also seine Mission oder sein Addon verentlichen, lohnt sich zuvor immer nochmal ein Blick in die Rpt. Denn dort kann man sehen, ob es eventuell noch Fehler gibt, die sich nicht unmittelbar und sichtbar bemerkbar machen. Es empelt sich, diese Datei ab und dann zu leeren oder ganz zu lschen. ArmA wird diese dann wieder neu anlegen. Diese Datei lsst sich dabei ganz normal mit dem Texteditor nen. Folgend mal ein kleiner Auschnitt: No more slot to add connection at De61 (6952.9,8228.9) Client: Object 8:57 (type UpdatePositionVehicle) not found. *** Remote: Identity Mr-Murray transferred from 8:98 to 8:120 File update_v1\RscDene.hpp, line 0: '.100': Missing ';' at the end of line File update_v1\RscDene.hpp, line 0: '.120': Missing ';' at the end of line Updating base class ->Helicopter, by ca\air\cong.bin/CfgVehicles/UH60MG/ Die ArmA.rpt ndet sich, wenn man mit -prole, wie im Kapitel 11.1 erlutert,arbeitet, normalerweise im ArmA-Root-Verzeichnis. Ansonsten unter: C:\Dokumente und Einstellungen\User\Anwendungsdaten\ArmA 305

Kapitel 11

11.7 - Das Natoalphabet


A B C D E F G H I J K L M N O P Q R S T U V W X Y Z Alpha Bravo Charlie Delta Echo Foxtrott Golf Hotel India Juliett Kilo Lima Mike November Oskar Papa Quebec Romeo Sierra Tango Uniform Viktor Whisky X-Ray Yankee Zulu

306

11.8 - Die Dienstgradabzeichen


Folgend nun die Dienstgradabzeichen verschiedener NATO-Lnder. Natrlich gibt es in dem ein oder anderen Land noch diverse andere Dienstgrade, aber das wrde hier jetzt den Rahmen sprengen. Kapitel 11 Deutschland
Mannschaften Gefreiter Obergefreiter Hauptgefreiter Stabsgefreiter Oberstabsgefreiter Unteroziere Unterozier Stabsunterozier Feldwebel Oberfeldwebel Hauptfeldwebel Stabsfeldwebel Oberstabsfeldwebel Fahnenjunker Fhnrich Oberfhnrich Oziere Leutnant Oberleutnat Hauptmann Major Oberstleutnant Oberst Brigadegeneral Generalmajor Generalleutnant General

USA
Private --Private First Class ----Corporal --Sergeant Sta Sergeant Sergeant First Class Master Sergeant Sergeant Major --Cadet --Second Lieutnant First Lieutenant Captain Major Lieutenant Colonel Colonel Brigadier General Major General Lieutenant General General/Field Marshal

Grobritanien
Private --Lance Corporal ----Corporal --Sergeant Sta Sergeant --Warrant Ocer Class 2 Warrant Ocer Class 1 --Ocer Cadet --Second Lieutnant Lieutenant Captain Major Lieutenant Colonel Colonel Brigadier Major General Lieutenant General General/General of Army

Frankreich
Premire Classe Caporal Caporal Chef ----Sergent Sergent Chef Adjudant --Adjudant Chef Major ----Aspirant --Sous Lieutenant Lieutenant Capitaine Commandant Lieutenant Colonel --Gnral de Brigande Gnral de Division
Gnral de Corps dArmee

Gnral dArmee

307

11.9 - Die Squad.xml


Die Squad.xml eignet sich hervorragend um auf dem Schlachtfeld eine Zuordnung fr verschiedene Clans zu schaen. Hiermit ist es mglich jedem Spieler eines Clans ein Logo zuzuweisen. Dazu macht es natrlich Sinn, wenn jedes Teammitglied das gleiche Logo benutzt. Natrlich kann man auch als einzelner Spieler, wenn man nicht Mitlied eines Clans ist, ein eigenes Logo verwenden. Das Logo wird spter dann ingame auf Fahrzeugen etc. angezeigt (siehe Bild).

Das Benutzen einer Squad.xml erfordert ein paar Voraussetzungen. Man bentigt dafr einen Server, auf dem die nun folgend aufgefhrten Dateien abgelegt werden knnen. Dazu legt man auf seinem Server ein neues Verzeichnis an und legt die zugehrigen Dateien dort ab, welche man vorher seinen Bedrfnissen angepasst hat, was dann als nchstes erklrt wird.

Abzulegende Dateien Abzulegende Dateien sind hierbei: squad.xml squad.css squad.dtd squad.xsl squadpic.paa Hierbei merkt man sich die URL, welche man spter etwa so aussehen knnte: http://www.meinserver.de/armaxml/squad.xml 308

Diese gibt man dann spter, wie auf dem folgenden Bild zu sehen, bei Squad URL an. Kapitel 11 Player ID Eine weiterer wichtiger Punkt ist die Player ID, welche unten rechts im Bild zu sehen ist. Jeder Spieler hat eine eigene ID, welche in der Squad.xml deniert werden muss. Die Konguration Die einzigsten Dateien, welche hierbei bearbeitet werden mssen sind die Squad.xml und die Squadpic.paa. Die anderen sind dabei eher unwichtig, aber mssen der Funktionalitt halber auf dem Server liegen. Squad.xml In ihr wird die eigentliche Konguration vorgenommen. Hierbei wird im oberen Abschnitt die Squad deniert und im unteren Abschnitt die einzelnen Spieler. <Squad Nick> <Name> <EMail> <Web> <Picture> <Title> - Squadabkrzung (Clan-Tag) - Squadname - Squadkontakt - Squadwebseite - Bild (Squadpic.paa) - Squadname

Diese Datei keinesfalls mit Excel, sondern mit dem Texteditor bearbeiten! 309

Im unteren Abschnitt wird der Spieler deniert: <Member ID> <Nick> <Name> <EMail> <ICQ> <Remark> - Player ID (siehe Prolbild) - Nickname (Prolname) - Name - Spielerkontakt - IM-Kontakt - Bemerkung

In einer fertigen Datei sieht das Ganze dann etwa so aus:


<?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE squad SYSTEM "squad.dtd"> <?xml-stylesheet href="squad.xsl?" type="text/xsl"?> <squad nick="MAP"> <name>Mr-Murray</name> <email>mr-murray@bossmail.de</email> <web>www.mr-murray.de.vu</web> <picture>squadpic.paa</picture> <title>Mr-Murray</title> <member id="12345678" nick="Mr-Murray"> <name>Mr-Murray</name> <email>mr-murray@bossmail.de</email> <icq>N/A</icq> <remark></remark> </member> </squad>

Squadpic.paa Die Squadpic.paa ist das Logo, welches hinterher im Prol angezeigt wird. Dieses ist aber nicht zwingend vorgeschrieben und man kann es also auch weglassen. Wenn man es aber haben mchte, muss es auf jeden Fall im gleichen Ordner liegen, wie die Squad.xml! Squadpic ist hierbei wieder ein variabler Name. Benennt man die Datei anders, muss man das logischerweise auch in der Squad.xml anpassen. Mchte man nun ein eigenes Squadlogo erstellen, macht man das mit einem Grakprogramm. Dazu erstellt man zunchst ein neues Bild im TGA-Format und legt die Mae fest, welche wie folgt lauten knnen: 16/16, 32/32, 64/64, 128/128, 256/256 Anschlieend gestaltet man sein Logo den eigenen Wnschen entsprechend und speichert das Ergebnis ab. Mit dem Programm TexView ld man sein Logo dann und speichert es anschlieend als PAA-Datei. 310

Ergebnis Drckt man nun spter ingame in einer Mehrspielermission egal ob Hostet oder Dedicated die P-Taste, wird folgendes Ergebnis angezeigt: Kapitel 11

Template Ein downloadbares Template ndet man auf www.mr-murray.de.vu Dieses muss man dann, wie zuvor erklrt, lediglich seinen Bedrfnissen anpassen.

11.10 - Die Startparameter


Fr Armed Assault gibt es zahlreiche Startparameter, die sich an die ArmA.exe oder eine entsprechende Verknpfung zur ArmA.exe anhngen lassen. Mit diesen Parameten hat man nun eine Menge Vorteile. Ein Vorteil, der wohl mit am beliebtesten ist, ist der, ArmA im Fenstermodus starten zu lassen oder die Voreinblendungen abzuschalten. Folgend nun eine kleine bersicht der wichtigsten Parameter. Weitere nden sich in der BIS-Wiki. Bildschirm Optionen -window -nosplash -x=Wert -y=Wert - Startet ArmA im Fenstermodus - Startet Arma ohne Voreinblendungen - Ausungsbreite - Ausungshhe 311

Verschiedene Optionen -nomap -noland - buldozer -init= -proles= -name=Username -noPause -maxMem=Wert -world=Sara -mod=@rdner Netzwerk Optionen -port= -password= -host -server -connect= -netlog -cfg= Einbindung eines Parameters

- Startet ArmA nur mit bentigten Addons - Startet ArmA ohne Insel - Startet ArmA im Buldozer Mode - -init=playMission[,'M04Saboteur.Sara'] - Bestimmt den Userordner (-proles=F:\ArmA\) - Ldt das jeweilige Benutzerprol - Spiel luft auch im Hintergrund weiter - Maximale Speichermenge (MB) - Ldt die angegebene Insel (Sara=Sahrani, Intro=Rahmadi, Empty=keine) - Ldt den angegebenen MOD-Ordner mit

- Port zum Server (Local Host bzw. Dedicated Server) - Passwort zum Dedicated Server - Startet einen Host-Server - Server einen Dedicated Server - Server zu dem verbunden werden soll - Aktivert das Protokolieren der Netzwerkaktivitt - Auswahl einer Cfg-Datei

Einen Parameter hngt man an die ArmA.exe bzw. einer extra dafr angelegten Verknpfung. Dazu klickt man mit der rechten Maustaste auf die Exe und whlt die Egenschaften aus. Jetzt net sich ein solches Fenster, wie rechts zu sehen ist. Bei Ziel gibt man dann die jeweiligen Parameter an und Speichert das Ganze. Hier mal ein Beispielparameter: C:\ArmA\arma.exe -nosplash -nomap Man hat auch die Mglichkeit verschiedene Verknpfungen anlegen, die man dann individuell kongurieren kann. Jedoch sparen Community-Tools, wie etwa ein Arma-Launcher, eine Menge Arbeit, da man damit noch viel bersichtlicher Arbeiten kann. 312

11.11 - Tastenkombinationen, Tipps und Tricks


Wie auch in jedem anderen Programm, gibt es auch im Armed Assault Editor diverse Tastenkombinationen, Knie und Tricks, die ein schnelleres Editieren ermglichen. Kapitel 11 Tastenkombinationen [STR] und [C] [STR] und [X] [STR] und [V] [Entfernen] [Shift] und [Entfernen] [Shift] und [linke Maustaste] [Shift] und [linke Maustaste] [Linke Maustaste] - Kopieren einer Einheit/Objekt - Ausschneiden einer Einheit/Objekt - Einfgen einer Einheit/Objekt - Lscht markierte Einheit/Objekt - Lscht alle markierten Einheiten/Objekte - Einheiten drehen
(Tasten gedrckt halten und Maus bewegen)

- Einheit mit Wegpunkt bearbeiten


(F1 whlen, Shift gedrckt halten und linke Maus drcken)

- Einheit/Objekt verschieben /Bereich markieren


(Tasten gedrckt halten und Maus bewegen)

[Linke] und [rechte Maustaste] - Karte Bewegen


(Tasten gedrckt halten und Maus bewegen)

[Mausrad]

- Karte ran- oder wegzoomen

Templates Generell lohnt es sich fr gewisse Missionsinhalte so genannte Templates zu erstellen. Wenn man zum Beispiel eine Stellung oder hnliches gebaut hat, muss das ja nicht unweigerlich heien, dass diese nur fr die eine Mission zu gebrauchen ist. Oder andere Dinge wie Zufallspositionen etc. Erstellt man sich fr jedes Missionsfeature ein rohes Template, hat man so die Mglichkeit es jederzeit schnell in seine aktuelle Mission zu importieren und zu verwenden. Man spart sich damit denitiv eine Menge Zeit, welche man dann sinnvoller nutzen kann. Dazu erstellt man sich einfach eine simple Mission mit dem jeweiligen Inhalt, etwa der Stellung und speichert sie zum Beispiel als Editormission mit Namen _Temp_Bunker ab. Templates II Hat man eine groe und komplexe Mission geschaen, kommt es oft vor, dass man pltzlich noch eine tolle Idee hat, die unbedingt mit implementiert werden soll. Zum Beispiel eine neue Basis oder wie auch immer. Also etwas, wo man wieder ein wenig bauen, verschieben und in die Vorschau wechseln muss. Bei der Mission wre es dann so, dass beim Start ja alles gestartet wird, was man zuvor darin deniert hat. Dafr lohnt es sich eine neue Map (Template) zu erstellen, auf der man diese Basis nun ohne ablenkendes Drumherum bauen kann, nach der Fertigstellung speichert man diese einfach als Editormission, wechselt zu seiner Hauptmission und nutzt die Importfunktion Zusammenfhren, um das Template in seine Mission zu importieren. 313

Stichwortverzeichnis
A
Bezeichnung Kapitel Seite

Abgefeuerter Typ ausgeben lassen Actionbefehl Actionmeneintrag Airstrike Airvehiclecreator Alarm Allgemeines MP Animationsbefehl Arma.rpt Array Artillerie Aufklrer Auslser und Wegpunkte synchronisieren Auslser einfgen Auslser erzeugen Auslserbereich prfen Auslserbereiche addieren B
Bezeichnung

3.16 5.55 6.3 6.12 6.13 5.32 7.19 5.56 11.6 9.12 6.7 6.22 1.6 1.4 5.69 5.26 5.26

92 136 181 198 201 119 247 139 305 271 189 217 35 27 160 115 115

Kapitel

Seite

Bedingung Tod Beendigung einer Mission Befreundete Parteien Bekanntheitsgrad einer Einheit Bereich prfen Bewanung im MP Bombe erzeugen Bombenleger Brieng Briengzubehr Bullet Mode C
Bezeichnung

5.33 4.6 5.31 5.29 5.26 7.21 5.46 6.21 2.13 4.3 6.10

120 101 118 117 115 250 126 216 59 98 196

Kapitel

Seite

Camskripting Capture The Flag Cheats Class Header 314

8.1 7.17 11.2 7.11

255 240 301 233

D
Bezeichnung Kapitel Seite

Datum und Uhrzeit einstellen Deathmatch Delay Description.ext Dialoge Dienstgrad vergeben Dienstgradabzeichen Distanz zweier Einheiten oder Objekte E
Bezeichnung

5.43 7.6 9.7 2.3 10.1 5.76 11.8 5.34

123 227 269 48 279 171 307 120

Stichwortverzeichnis

Kapitel

Seite

Editoroberche Eigenes Prol Einheiten/Fahrzeuge einfgen Einheiten/Fahrzeuge erzeugen Einheiten bewanen und ausrsten Einheiten und Objekte drehen Einheiten verbinden Einheit begibt sich in Gebude Einheit bleibt stehen Einheit bewegt sich zu Bestimmungsort Einheit ergibt sich Einheit hat Wae Einheit mit Wegpunkten bearbeiten Einheitsklassen Einheit in Fahrzeug Einheiten starten bzw. stoppen Einheiten zu Missionsbeginn im Fahrzeug Ein- und aussteigen lassen Einheit verlsst Gruppe und tritt anderer bei Einheit whlt Wae Einheit wendet sich anderer Einheit zu Einheit ein Ziel zuweisen Einheiten in einem Bereich ansprechen Einheitsstatus speichern oder laden Einheit begibt sich zu Gebudeposition Eventhandler Explosionen , Rauch und Flares erzeugen

1.1 11.1 1.2 5.45 3.3 5.15 1.9 5.19 5.10 5.12 6.23 3.17 1.10 3.9 5.4 5.11 5.6 5.7 5.20 5.23 5.22 5.21 5.27 5.28 5.63 5.65 5.46

16 299 20 124 70 111 39 112 109 110 218 92 40 77 107 111 108 108 113 114 114 113 115 116 153 155 126 315

F
Bezeichnung Kapitel Seite

Fahne vergeben Fahrzeugklassen Fahrzeugwaen Fahrzeuge be- und entladen Fahrer/Beifahrer eines Fahrzeugs Fahrzeugverbot fr Einheit Fahrzeug fhrt erst, wenn Einheit eingestiegen ist Fallschirmspringer Fahrzeug Respawn Fahrzeug Respawn (Mr-Murray) Fehlerreportdatei / Arma.rpt) Feindmeldeskript Fernglasbenutzung durch Einheit Feuer (brennend/erloschen) Feuer erzeugen (Skriptversion) Flexible Respawnpunkte Freundlicher Feind Flaggen Grundinformationen MP Flares, Rauch und Explosionen erzeugen Fluchtverhalten einer Einheit oder Gruppe Flughhe einer Einheit Funkmenu verndern Funkspruch abgeben Funktionen Grundwissen (SQF) G
Bezeichnung

5.35 3.7 3.8 3.5 5.2 5.3 5.6 6.1 7.14 7.15 11.6 6.11 5.77 5.36 5.75 7.3 5.30 7.16 5.46 5.14 5.17 5.48 5.50 9.13

120 73 76 71 106 106 108 179 235 236 305 197 172 121 169 225 117 238 126 110 112 127 129 274

Kapitel

Seite

Gebudepositionen Geschwindigkeit einer Einheit/Fahrzeug Geschwindigkeit ausgeben lassen GPS-System Grakformate (Paa/Pac) Gruppen erzeugen Gruppe zu Missionsbeginn im Fahrzeug

5.62 5.8 5.9 6.2 2.8 5.45 5.6

148 108 108 180 55 124 108

316

H
Bezeichnung Kapitel Seite

Helikopterlandung Hhenversetzung eines Objektes House-Patrol-Skript I


Bezeichnung

5.64 5.16 6.16

153 111 205

Kapitel

Seite

Stichwortverzeichnis

Identitt festlegen IDs verwenden If-Then-Else Informationstext Init.sqs Insektenskript J


Bezeichnung

5.53 5.59 9.6 5.59 2.5 6.20

134 144 268 144 53 215

Kapitel

Seite

Jahreszahl, Datum festlegen K


Bezeichnung

5.43

123

Kapitel

Seite

Kameraeekte Kamerasteuerung Kamerakoordinaten Kamera erstellen Kamera an Fahrzeug oder Einheit heften Kartenanimation KI abschalten Klammereigenschaften Karte auf den Monitor erzwingen L
Bezeichnung

8.7 8.1 8.2 8.3 8.5 8.9 5.57 9.10 5.40

262 255 256 257 260 263 144 270 121

Kapitel

Seite

Laternen abschalten Leeres Fahrzeug Leerer Scheinwerfer mit Licht Lichtquellen erzeugen (Skriptversion) Liegen, knien und stehen Lip-Dateien Lschen von Einheiten und Objekten Logische Operatoren

5.61 5.1 5.86 5.72 5.60 2.11 5.45 9.3

145 106 177 167 144 57 124 267 317

M
Bezeichnung Kapitel Seite

Mapclick Marker einfgen Marker erzeugen Marker mit Einheiten verbinden Minen-Skript Mimiken Missionsordner Mission.sqm Missionsname Missionsstart Missionszubehr Missionswertung Missionsziele Mission beenden Mission speichern Missionsrelease MOD-Ordner Mwen-Skript Munitionskiste Multiplayer-Allgemeines Multiplayer-Bewanung Multiplayer-Description.ext Multiplayerbereich festlegen Musik oder Sound einbinden N
Bezeichnung

6.6 1.7 5.70 1.9 6.17 5.54 2.1 2.2 4.1 4.2 4.3 4.4 4.5 4.6 4.7 11.5 11.3 6.19 3.4 7.19 7.21 7.4 7.7 5.52

187 36 162 39 208 135 42 43 97 97 98 99 99 101 103 287 302 213 71 247 250 226 228 130

Kapitel

Seite

Natoalphabet Nachladen verbieten O


Bezeichnung

11.7 3.19
Kapitel

306 93
Seite

Objekt- und Gebudeklassen Objekte Versetzen oder hher setzen Overview

3.11 5.16 2.12

81 111 58

318

P
Bezeichnung Kapitel Seite

Patrouille laufen, fahren oder iegen PBO-Datei Panzenklassen Proleigenschaften Positionen (xyz) auslesen Publicvariable Punktvergabe MP Punkte vergeben bzw. anzeigen lassen MP Q
Bezeichnung

5.13 2.9 3.12 11.1 5.64 7.18 7.8 7.9


Kapitel

110 56 88 299 153 246 229 231


Seite

Stichwortverzeichnis

R
Bezeichnung Kapitel Seite

Random Rauch erzeugen (Skriptversion) Rauch, Flares und Explosionen erzeugen Respawnpunkte Respawnarten Respawndialog Rufzeichen vergeben Rund ums Vehikel Rucksack S
Bezeichnung

9.8 5.74 5.46 7.2 7.5 7.12 5.49 5.71 6.4

269 168 126 224 227 233 128 165 181

Kapitel

Seite

Schadenwert vergeben Scheinwerfer Schilderklassen Seiten verfeinden Sekundr- oder Primrwae Semikolon Setvelocity Shellklassen Sichtweite ndern Skript (.sqs) Staub erzeugen

5.24 6.14 3.14 5.31 3.18 9.11 5.58 3.10 5.41 2.6 5.73

114 203 91 118 93 81 144 80 122 54 167

319

Sound erstellen Sound oder Musik einbinden Spielerseite auslesen Spielereingabe unterdrcken Speichern Spielbeschleunigung unterdrcken Spielerbezogene Textmitteilung Spielbare Einheit hinzufgen Squad.xml Startparameter Staub erzeugen Stehen, knien und liegen Steinklassen Streifen laufen, fahren oder iegen Stringtable.csv Stringtable Grundwerte Stringtable Grundwerte MP Sychronisieren T
Bezeichnung

5.51 5.52 5.38 5.39 4.7 6.9 7.22 5.37 11.9 11.10 5.73 5.60 3.13 5.13 2.4 5.67 7.13 1.6

129 130 121 121 103 181 251 121 308 311 167 144 90 110 51 158 234 35

Kapitel

Seite

Tote Einheiten/Fahrzeuge lschen Todeszone erstellen Texteinblendarten Text- und Einblendeekte U


Bezeichnung

6.8 5.25 5.66 8.6

194 115 157 261

Kapitel

Seite

Unzerstrbares Objekt Umgebungssound abschalten V


Bezeichnung

5.61 8.7

145 262

Kapitel

Seite

Variable Vehikeltransport-Skript Verschlossenes Fahrzeug Versetzen von Objekten, Auslsern und Markern Verwendung von Addons

9.1 6.18 5.1 5.15 11.4

265 209 106 111 303

320

W
Bezeichnung Kapitel Seite

Waen und Magazine erzeugen Waen und statische Waen Waenwahl einer Einheit Waenauswahl im Brieng Waen der Fahrzeuge Waen- und Magazintypen ausgeben lassen Waenbezeichnungsliste Waen und Munitionskiste Wahrheitswerte WaitUntil Wegpunkte einfgen Wegpunkte erzeugen Wegpunkte und Auslser synchronisieren Wetter einstellen While-Do-Schleife X
Bezeichnung

3.21 3.1 5.23 3.6 3.8 3.15 3.2 3.4 9.2 9.9 1.5 5.68 1.6 5.42 9.4

94 64 114 72 76 92 68 71 266 269 30 159 35 122 268

Stichwortverzeichnis

Kapitel

Seite

XYZ-Positionen auslesen Y
Bezeichnung

5.64

155

Kapitel

Seite

Z
Bezeichnung Kapitel Seite

Zhler Zeitanzeige im Multiplayer Zeitlupe oder Zeitsprint Zeitzhler Zielzuweisung fr eine Einheit Zufallsanimation Zufallsmusik Zufallspositionen Zufallspositionen Zufallswetter Zuwendung einer Einheit

9.5 7.8 5.44 6.15 5.21 5.56 5.52 1.9 6.5 5.42 5.22

268 229 123 204 113 139 130 39 185 122 114

321

Syntaxverzeichnis
A
Bezeichnung Kapitel Seite

Active Action AddAction AddEventhandler AddRating AddSwitchableUnit AddWeapon AddMagazine AddWeaponCargo AddWaypoint AddMagazineCargo AIKills Alive AllowGetin AllowFleeing And Animate AnimationState AssignAsCargo AssignAsCommander AssignAsDriver AssignAsGunner AssignTeam AssignToAirport AssignedVehicle AssignedVehicleRole AVGScore B
Bezeichnung

4.5 5.55 6.3 5.65 4.4 5.37 3.3 3.3 3.4 5.68 3.4 7.4 5.71 5.3 5.14 9.3 5.61 5.56 5.78 5.78 5.78 5.78 5.79 5.82 5.78 5.78 4.4

99 136 181 155 99 121 70 70 71 159 71 226 165 106 110 267 145 139 172 172 172 172 173 175 172 172 99

Kapitel

Seite

BuildingPos C
Bezeichnung

5.62

148

Kapitel

Seite

Call CamUseNVG CanMove CanFire CanStand 322

9.13 8.7 5.81 5.81 5.81

274 262 174 174 174

Case Ceil ClearWeaponCargo ClearMagazineCargo CloseDialog CommandTarget CommandFire CommandMove CommandStop CommandTarget Compile ComposeText Count CreateDialog CreateGroup CreateMarker CreateMine CreateSoundSource CreateTrigger CreateVehicle CreateVehicleLocal CreateUnit Crew CutRsc CutText D
Bezeichnung

9.3 9.3 3.4 3.4 10.9 5.21 5.80 5.80 5.80 5.80 9.13 8.6 9.3 10.9 5.45 5.70 3.20 5.51 5.69 5.45 5.45 5.45 5.71 10.7 8.6
Kapitel

267 267 71 71 292 113 174 174 174 174 274 261 267 292 124 162 93 129 160 124 124 124 165 289 261
Seite

Syntaxverzeichnis

Damage Default DefValueParam DeleteMarker DeleteStatus DeleteVehicle DeleteWaypoint Driver Done DoFire DoGetOut DoMove DoStop

5.24 1.2 7.8 5.70 5.28 5.47 5.68 5.71 4.5 5.21 5.47 5.12 5.10

114 20 229 162 116 127 159 165 99 113 127 110 109 323

DoTarget DoWatch DisableAI DisableUserInput DissolveTeam Distance E


Bezeichnung

5.21 5.22 5.57 5.39 5.79 5.34

113 114 144 121 173 120

Kapitel

Seite

EnableAI EnableEnvironment EnableRadio EnableReload Enemy ExecVM ExitWith F


Bezeichnung

5.57 8.7 5.50 3.19 5.31 9.13 9.13

144 262 129 93 118 274 274

Kapitel

Seite

FadeMusic FadeRadio FadeSound Failed Fire False Flag FlagOwner Floor FlyInHeight Format ForEach ForceMap ForceSpeed Fuel G
Bezeichnung

5.52 5.52 5.52 4.5 5.21 9.2 7.16 7.16 9.3 5.17 5.66 9.3 5.40 5.71 5.71

129 129 129 99 113 266 238 238 267 112 157 267 121 165 165

Kapitel

Seite

GameType GetDammage GetDir 324

7.11 5.24 5.22

233 114 114

GetMarkerPos GetPos GetPosASL GetSpeed GlaceAt GlobalChat Goto Group GroupChat GrpNull Gunner H
Bezeichnung

1.7 5.22 5.64 5.8 5.22 5.50 9.3 5.6 5.50 5.20 5.71

36 114 153 108 114 129 267 108 129 113 165 Syntaxverzeichnis

Kapitel

Seite

HandsHit HasWeapon Hidden Hint, HintC, HintCadet I


Bezeichnung

5.81 3.17 4.5 5.59

174 92 99 144

Kapitel

Seite

If then else In InFlame IsEngineOn IsNull IsServer J


Bezeichnung

9.6 5.71 5.36 5.71 5.71 7.19


Kapitel

268 165 121 165 165 247


Seite

Join K
Bezeichnung

5.20
Kapitel

113
Seite

KnowsAbout L
Bezeichnung

5.29

117

Kapitel

Seite

Land LandAt

5.18 5.82

112 175 325

Leader LimitSpeed List Localize Local Player Local Server Lock, Locked LookAt LoadIdentity LoadStatus M
Bezeichnung

5.79 5.71 9.3 5.66 7.19 7.19 5.1 5.22 5.53 5.28

173 165 267 157 247 247 106 114 134 116

Kapitel

Seite

Magazines MapAnimAdd MapAnimClear MapAnimCommit MapAnimDone MaxPlayers MaxScore MinPlayers MinScore ModelToWorld Move MoveInCargo MoveInCommander MoveInDriverMoveInGunner MoveInTurret N
Bezeichnung

3.15 8.9 8.9 8.9 8.9 7.11 4.4 7.11 4.4 5.15 5.12 5.2 5.2 5.2 5.2

92 263 263 263 263 233 99 233 99 111 110 106 106 106 106

Kapitel

Seite

NearestBuilding NearestObject Not O


Bezeichnung

5.61 5.61 9.3

145 145 267

Kapitel

Seite

ObjNull ObjStatus OnLoadIntro 326

5.21 4.5 4.2

113 99 97

OnLoadIntroTime OnLoadMission OnLoadMissionTime OnPlayerConnected OnMapSingleClick OrderGetIn P


Bezeichnung

4.2 4.2 4.2 7.22 6.6 5.78

97 97 97 252 187 172

Kapitel

Seite

Player PlayMove PlayMusic PlaySound Position PreLoadCamera PreLoadMusic PreLoadObject PreLoadSound PreLoadTitleRsc PreLoadTitleText PreProcessFile PrimaryWeapon PublicVariable Q
Bezeichnung

9.1 5.56 5.52 5.52 5.64 8.8 8.8 8.8 5.52 8.8 8.8 9.13 3.18 7.18

265 139 130 130 153 262 263 262 130 263 263 274 93 246

Syntaxverzeichnis

Kapitel

Seite

R
Bezeichnung Kapitel Seite

Random Rank Rating RemoveAction RemoveEventhandler RemoveWeapon RemoveAllWeapons RemoveMagazine RemoveSwitchabeUnit Respawn

9.8 5.76 4.4 6.3 5.65 3.3 3.3 3.3 5.37 7.4

269 171 99 181 155 70 70 70 121 226 327

RespawnDelay RespawnDialog RespawnVehicle RespawnVehicleDelay Reveal S


Bezeichnung

7.4 7.12 7.14 7.14 5.29

226 233 235 235 117

Kapitel

Seite

Saving SaveGame SaveIdentity SaveStatus SaveVar Say ScriptDone SecondaryWeapon SelectLeader SelectPlayer SelectWeapon Server SetAccTime SetAirportSide SetAmmoCargo SetAperture SetBehaviour SetCaptive SetCombatMode SetDamage, SetDammage SetDate SetDir SetFace SetFace Animation SetFlagOwner SetFlagSide SetFlagTexture SetFog SetFormation SetFormDir SetFriend SetFuel SetFuelCargo 328

4.7 4.7 5.53 5.28 9.1 5.51 8.8 3.18 5.37 5.37 5.23 7.19 5.44 5.82 1.2 8.7 1.5 5.30 1.4 5.24 5.43 1.2 5.53 5.53 7.16 7.16 5.35 5.42 1.5 1.2 5.31 5.71 5.71

103 103 134 116 265 129 263 93 121 121 114 247 123 175 20 262 30 117 27 114 123 16 134 134 238 238 120 122 30 20 118 165 165

SetGroupID SetIdentity SetLightAmbient SetLightBrightness SetlightColor SetMarkerBrush SetMarkerColor SetMarkerDir SetMarkerPos SetMarkerShape SetMarkerSize SetMarkerText SetMarkerType SetMusicEect SetMimic SetOverCast SetPos SetRadioMessage SetRain SetRank SetRepairCargo SetSkill SetSoundEect SetSpeedMode SetTargetAge SetTerrainGrid SetTriggerActivation SetTriggerArea SetTriggerStatements SetTriggerText SetTriggerTimeOut SetTriggerType SetUnitAbility SetUnitPos SetVehicleAmmo SetVehicleArmor SetVehicleInit SetVehiclePosition SetVeloCity SetViewDistance SetWaypointType

5.49 5.53 5.73 5.73 5.73 5.70 5.70 5.70 1.7 5.70 5.70 5.70 5.70 5.69 5.54 5.42 5.15 5.48 5.42 5.76 1.2 1.2 5.69 5.8 1.2 5.83 5.69 5.69 5.69 5.69 5.69 5.69 1.2 5.60 3.3 5.24 1.2 5.15 5.58 5.41 5.68

128 134 167 167 167 162 162 162 36 162 162 162 162 160 135 122 111 127 122 171 20 20 160 108 20 176 160 160 160 160 160 160 20 144 70 114 20 111 144 122 159 329

Syntaxverzeichnis

SetWaypointBehaviour SetWaypointCombatMode SetWaypointDescription SetWaypointFormation SetWaypointHousePosition SetWaypointPosition SetWaypointScript SetWaypointSpeed SetWaypointStatements SetWaypointTimeOut SetWaypointType ShowCinemaBorder ShowCompass ShowDebrieng ShowGPS ShowMap ShowNotePad ShowRadio ShowWatch ShowWaypoint Side SideChat SkipTime Sleep SomeAmmo Spawn SpeedIsNull Stop SwitchLight SwitchMove SwitchCamera T
Bezeichnung

5.68 5.68 5.68 5.68 5.68 5.68 5.68 5.68 5.68 5.68 5.68 8.4 4.3 4.3 4.3 4.3 4.3 4.3 4.3 5.68 5.38 5.50 5.43 9.7 3.19 9.13 5.71 5.11 5.61 5.56 6.22

159 159 159 159 159 159 159 159 159 159 159 260 98 98 98 98 98 98 98 159 121 129 123 269 93 274 165 109 145 139 217

Kapitel

Seite

This ThisList Terminate TextParam Time TitleCut TitleFadeOut 330

9.1 9.3 8.8 7.8 9.1 8.6 8.6

265 267 263 229 265 261 261

TitleText TitleParam TitleRsc True TypeOf U


Bezeichnung

5.66 7.8 10.3 9.2 5.71

157 229 283 266 165

Kapitel

Seite

UnAssignTeam UnAssignVehicle Unlocked Unit, Units V


Bezeichnung

5.79 5.7 1.2 5.6

173 108 20 108

Syntaxverzeichnis

Kapitel

Seite

ValuesParam Variable Vehicle VehicleChat Visible W


Bezeichnung

7.8 9.1 5.71 5.50 4.5

229 265 165 129 99

Kapitel

Seite

WaitUntil Weapons WeaponDirection WeaponHolder While do X


Bezeichnung

9.9 3.15 3.22 3.21 9.4

269 92 95 94 268

Kapitel

Seite

Y
Bezeichnung Kapitel Seite

Z
Bezeichnung Kapitel Seite

331

IMPRESSUM
Autor: Webseite: Text, Layout und Design: Grak und Coverdesign: Lektorat: Englische bersetzung: Sascha Mr-Murray Homann www.mr-murray.de.vu

Sascha Homann Sascha Homann Sascha Homann, Daniel Schnyan, Dan Bolan Daniel "Memphisbelle" Schnyan Stephen "Steevo" White Englisches Lektorat: Dan "Metal0130" Bolan and Matt Rochelle Publisher: Mr-Murray Spielentwickler: Bohemia Interactive (www.bistudio.com) Credits: Memphisbelle, Metal0130, Parvus, Wolle, Blackland, Woody, Placebo, Maruk, Suma, Ivan, Pete, Shadow, Jan Hlavat, Dslyecxi, Hoz, Jahve, Planck, RichUK, Q, Raedor, Rastavovich, Vilem, Jerry Hopper, Deadeye, Matt Rochelle, M-E, Foxhound, C930, Marco-Polo-IV, MCPXXL, Silola, Chneemann, Lester, Swat, Pit, Sgt Ace, SNKMan, Legislator, Imutep, Crowe, Wolf der Kleine, Bergho, Al Simmons, Pitti, Sniping-Jack, JrgF, BadAss, Unterfeld, OneManGang, Flashpoint_K, Kriegerdaemon, Wstenfuchs, LockheedMartin$ch, Burns, Simba, LordOfTheFlames, Spinor, OFPEC-Team, Deadeye, Luemmel, Zenshin, Moses, Hardrock, TheArmALord, Bolek, Flimmi, Lima, NoFu, Tajin, John Silver,T_D , Redsh, Buliwyf, Big X, Teufelsklaue, Clausewitz, Vektorboson Cervo,Mandoble,Vienna,NeoArmageddon,Mondkalb,ColonelKlink Credits Screenshotcontest: Marcus-Ergalla, Burns, Stoned Boy, Laggingape, Swat, Xsive, Woody, Evil Ash, Legislator, Arctic, AlexXx, Blechreiz, Churchill, Switcher83, Blacktiger Spielversion: Dieses Buch basiert auf Spieleversion 1.15

Copyrighthinweis 2008 Sascha Mr-Murray Homann. Alle Rechte vorbehalten. Die in diesem Medium verwendeten Firmennamen, Namen, Logos, Graken, Warenzeichen und Produktbezeichnungen dienen nur Identikationszwecken. Sie verbleiben im alleinigen Eigentum der jeweiligen Rechteinhaber. Das Cover-Artwork ist Eigentum von Bohemia Interactive (BIS) 2008 und wurde mit freundlicher Genehmigung von BIS zur Verfgung gestellt. 2008 Bohemia Interactive. Alle Rechte vorbehalten.

332

333

Das könnte Ihnen auch gefallen