Loadouts erstellen

Aus TTT Wiki
Wechseln zu: Navigation, Suche

Beim Erstellen von Loadouts gibt es verschiedene Ansätze. Gegebenenfalls gefällt dir ein anderer besser. Hier wird ein klassenbasiertes Loadout aufgrund von Zusammenklicken im Arsenal vorgestellt.

Bestimmte Gegenstände wie Bandagen und Funkgeräte braucht man immer, müsste man so aber sich zusammenklicken – ggf. hilft hier eine Art Vorlage oder ein anderes System.

Anzumerken ist, dass das Zuweisen des Loadouts im Eden-Editor nicht – ohne weitere Zuhilfe – mit einem Respawn funktioniert.

Vorarbeit

Bevor ihr anfangt, solltet ihr euch überlegen, wie ihr eure Truppstruktur in der Mission aufbaut und welche Loadouts ihr letztendlich braucht – ob diese z.B. klassenbasiert oder einheitenbasiert sind.

  • Klassenbasiert: jeder Truppenführer, jeder Medic, jeder MG-Schütze etc. hat das gleiche Loadout
  • Einheitenbasiert: jede Einheit hat ein individuelles Loadout

TTT-Loadouts sind z.B. einheitenbasiert, da sich etwa die Uniform von Trupp zu Trupp unterscheidet und so jeder Truppführer ein anderes Loadout hat.

Des Weiteren empfiehlt es sich, das SQF-Syntax-Highlighting Plugin für den Notepad++ zu installieren. [1] Es erleichtert ungemein die Übersicht innerhalb eines Skriptes.

Inhalt des Loadout

Zusätzlich sollte euch bewusst sein, was wir von einem Loadout gewissen Mindestanforderungen erwarten. Sollten diese nicht eingehalten werden, muss dies im Briefing vermerkt werden.

Möchte man beispielsweise ein älteres Setting haben, bei dem der einfache Soldate keine Karte und Funkgerät besitzt, schreibt man dies einfach bei den zusätzlichen Informationen.

Schütze

  • Waffe
    • mit ca. 180 Schuss
    • LMG/MG mit ca. 400 Schuss
    • Visier mit Vergrößerungsfunktion
  • medizinisches Material
  • Rauchgranaten
    • 3-5 weiße
    • 1-3 grüne
    • 0-2 violette
  • Fernglas
  • Funkgerät
  • Karte

Truppführer

  • Tablet und/oder GPS

Empfehlung für Tablet:

OPL ACE_DK10_b
Sonst ACE_GD300_b

Mögliche GPS-Geräte:

  • ACE_microDAGR
  • ItemGPS

Funker / FAC

bei CAS:

  • Laserdesignator
    • mit Batterien
    • funktioniert mit vorhandenen CAS-Geräten

Jet-Pilot

  • Overall zu Verhinderung der Ohnmächtigkeit
    • U_B_PilotCoveralls

Scharfschütze

  • Visier muss mit ACE justierbar sein

Der Spotter sollte folgende Materialien haben

  • ACE_ATragMX
  • ACE_Kestrel4500
  • Entfernungsmesser
    • Empfehlung: ACE_Vector

Sonstiges

Die folgenden Punkte müssen nicht im Briefing erwähnt werden, wenn diese im Loadout fehlen.

Unterlaufgranatwerfer
  • (rote) Rauchgranaten
    • Truppführer
    • Funker / FAC
  • 40mm HE-Granaten
    • Grenadier
Rucksack

Muss nicht jeder haben, da etwa Munition via ACE-Interaktion weitergegeben werden kann. Dies funktioniert auch mit den AT-Raketen der Javelin.

Fahrzeug

In den Fahrzeugen muss kein Vorrat sein. Sollte vergessen werden der standardmäßige Vorrat der Mod-Fahrzeuge zu löschen und nicht zum Loadout passen, müssen diese vom Soldaten ignoriert werden.

Erstellen der Loadouts

Wie Eingangs erwähnt könnt ihr euch diese einfach im Virtual Arsenal zusammenklicken und auch abspeichern. Dazu gibt es glaub ich nicht allzuviel zu sagen, es gibt nur ein paar Dinge, die man beim Virtual Arsenal beachten muss:

Magazin in der Waffe

Das Virtual Arsenal erlaubt euch nicht, ein Magazin direkt in die Waffe zu tun. Wollt ihr z.B. einem Raketenschützen insgesamt zwei Raketen mitgeben (eine in der Waffe und eine im Rucksack), der Rucksack selbst fasst aber nur 1 Rakete, so könnt ihr diesem Raketenschützen im Arsenal auch nur insgesamt eine Rakete mitgeben. In der Mission wird diese Rakete jedoch letztendlich automatisch in die Waffe geladen, sodass im Rucksack wieder Platz für eine Rakete wäre.

Fehlende Gegenstände

Es gibt einige wenige Gegenstände von Mods, die im Virtual Arsenal nicht aufgelistet sind.

Besondere Gegenstände in Rucksack

Es ist im Virtual Arsenal nicht möglich, Gegenstände, die in bestimmte Slots gehören (z.B. GPS, Nachtsichtgerät, Visiere etc.), einfach in eine Weste oder einen Rucksack zu packen.

Ausprobieren im Arsenal

Speichert das Loadout ab (mit der Speicher-Funktion oder per Export in Notepad++), bevor ihr das ausprobiert (Try). Sonst wird es passieren, dass Ihr während des Ausprobierens etwas am Loadout ändert.

Exportieren des Loadouts

Nachdem ihr eure Loadouts im Virtual Arsenal erstellt bzw. geladen habt, können wir dieses exportieren.

  1. Drückt den Button "Export" bzw. "Exportieren"
  2. Öffnet eine neue Datei im Notepad++
  3. Drück Strg + V (bzw. Kopieren im Kontextmenü)
  4. Speichert die Datei mit einem passenden Namen und der Endung ".sqf" ab - z.B. "tf.sqf"

Empfehlenswert ist ein Ordner "loadouts" im Missionsordner, unter dem alle SQF-Dateien gesammelt werden.

Wiederholt diese Schritt natürlich für alle benötigten Klassen.

Anpassen der Loadouts

Der Inhalt jeder dieser Dateien sollte jetzt in etwa so aussehen:
comment "Exported from Arsenal by TTT";
 
comment "Remove existing items";
removeAllWeapons this;
removeAllItems this;
removeAllAssignedItems this;
removeUniform this;
removeVest this;
removeBackpack this;
removeHeadgear this;
removeGoggles this;
 
comment "Add containers";
player forceAddUniform "rhs_uniform_cu_ocp_patchless";
for "_i" from 1 to 2 do {player addItemToUniform "rhs_mag_m18_green";};
player addItemToUniform "ACE_EarPlugs";
player addItemToUniform "ACE_MapTools";
for "_i" from 1 to 2 do {player addItemToUniform "SmokeShell";};
for "_i" from 1 to 2 do {player addItemToUniform "ACE_HandFlare_Green";};
for "_i" from 1 to 2 do {player addItemToUniform "9Rnd_45ACP_Mag";};
player addVest "rhsusf_iotv_ocp_Rifleman";
for "_i" from 1 to 8 do {player addItemToVest "rhs_mag_30Rnd_556x45_M855A1_Stanag_Tracer_Red";};
player addItemToVest "ACE_IR_Strobe_Item";
player addItemToVest "ACE_M84";
player addBackpack "rhsusf_assault_eagleaiii_ocp";
for "_i" from 1 to 7 do {player addItemToBackpack "ACE_fieldDressing";};
for "_i" from 1 to 3 do {player addItemToBackpack "ACE_packingBandage";};
player addItemToBackpack "ACE_tourniquet";
player addHeadgear "rhsusf_ach_helmet_ocp";

comment "Add weapons";
player addWeapon "rhs_weap_m4a1_grip";
player addPrimaryWeaponItem "rhsusf_acc_anpeq15";
player addPrimaryWeaponItem "rhsusf_acc_ACOG3";
player addWeapon "hgun_ACPC2_F";
player addWeapon "ACE_Vector";
 
comment "Add items";
this linkItem "ItemMap";
this linkItem "ItemCompass";
this linkItem "ItemWatch";
this linkItem "tf_anprc152_4";
this linkItem "ItemGPS";
 
comment "Set identity";
this setFace "PersianHead_A3_01";
this setSpeaker "Male01ENG";
Wir müssen diese Dateien ein bisschen anpassen, damit sie für unsere Zwecke nutzbar sind.

Dazu bedienen wir uns der erweiterten Textbearbeitungsfunktionen des Notepad++.

  1. Alle Dateien gleichzeitig mit Notepad++
  2. Alle Dateien markieren → Rechtsklick → Edit with Notepad++
  3. Alle Dateien markieren → per Drag & Drop in Notepad++ ziehen
  4. STRG+H drücken, um das "Suchen und Ersetzen"-Fenster des Notepad++ aufzurufen
  5. Bei "Search Mode" "Reguläre Ausdrücke" einstellen
  • Wenn wir nur etwas Ersetzen wollen, drücken wir "Replace All in All Opened Documents".
  • Wir speichern alle geöffneten Dokumente mit Strg + ⇧ Shift + S

Abändern der magischen Variable this

Als Erstes müssen wir für den von uns vorgesehenen Zweck alle "this"-Einträge ersetzen.

Für eine einfache Variante ersetzen wir
this
mit
player

Entfernen der Identität

Zusätzlich wollen wir den Abschnitt entfernen, der Gesicht und Sprache festlegt (die letzten Punkte im Virtual Arsenal). Wir bedienen uns hierbei dem Prinzip der regulären Ausdrücke, mit denen sich relativ einfach komplexe Textpassagen beschreiben lassen.

Wir suchen nach
(comment "Set identity";)\r\n(player setFace "(\w)*";)\r\n(player setSpeaker "(\w)*";)
und ersetzen es mit nichts bzw. einem leeren Feld.

Radio ID entfernen

Abschließend müssen wir die Task-Force-Radio ID entfernen – Task Force Radio vergibt jedem Funkgerät im Spiel eine eindeutige ID. Da wir die Loadouts über das Virtual Arsenal erstellt haben, waren wir quasi im Spiel - in unserer Mission wollen wir aber natürlich, dass alle IDs neu vergeben werden.

Wir suchen nach
player linkItem "tf_(\w*)";
und ersetzen es mit
player linkItem "tf_anprc152";
Hierbei gibt es weitere Funkgeräte (je nach Fraktion)
player linkItem "tf_anprc152"; // BlueFor
player linkItem "tf_fadak"; // CSAT
player linkItem "tf_anprc148jem"; // AAF
player linkItem "ItemRadio"; // Setting von TFAR

Hinzufügen von zusätzlicher Ausrüstung

Wollt ihr jetzt noch Gegenstände zu eurem Loadout hinzufügen, die über das Virtual Arsenal nicht verfügbar waren, so müsst ihr diese jetzt manuell in das Skript hineinschreiben.

Hierzu stehen euch drei Befehle zur Verfügung:
player addItemToUniform "ACE_MapTools";
player addItemToVest "optic_Aco";
player addItemToBackpack "ACE_fieldDressing";
Wollt ihr einen Gegenstand mehrere Male hinzufügen, so kann man den entsprechenden Befehl zwar auch mehrere Male untereinander hinschreiben, es empfiehlt sich jedoch folgende Schreibweise:
for "_i" from 1 to 3 do {player addItemToUniform "30Rnd_65x39_caseless_mag";};
Hierbei wird das Magazin 3x hinzugefügt.

Magazin in der Waffe

Um ein Magazin in der Waffe zu haben, muss ein Magazin am Soldaten sein, bevor die Waffe zugewiesen wird.
player addItemToBackpack "RPG32_F";
player addWeapon "launch_RPG32_F";
Wenn man etwa eine Rakete im Rucksack tragen kann, könnte man nach dem Hinzufügen der Waffe erneut eine Rakete zum Rucksack hinzufügen, weil die Vorherige in den Werfer geladen wurde.

Beispiel

comment "Exported from Arsenal by TTT";

comment "Remove existing items";
removeAllWeapons player;
removeAllItems player;
removeAllAssignedItems player;
removeUniform player;
removeVest player;
removeBackpack player;
removeHeadgear player;
removeGoggles player;

comment "Add containers";
player forceAddUniform "rhs_uniform_cu_ocp_patchless";
for "_i" from 1 to 2 do {player addItemToUniform "rhs_mag_m18_green";};
player addItemToUniform "ACE_EarPlugs";
player addItemToUniform "ACE_MapTools";
for "_i" from 1 to 2 do {player addItemToUniform "SmokeShell";};
for "_i" from 1 to 2 do {player addItemToUniform "ACE_HandFlare_Green";};
for "_i" from 1 to 2 do {player addItemToUniform "9Rnd_45ACP_Mag";};
player addVest "rhsusf_iotv_ocp_Rifleman";
for "_i" from 1 to 8 do {player addItemToVest "rhs_mag_30Rnd_556x45_M855A1_Stanag_Tracer_Red";};
player addItemToVest "ACE_IR_Strobe_Item";
player addItemToVest "ACE_M84";
player addBackpack "rhsusf_assault_eagleaiii_ocp";
for "_i" from 1 to 7 do {player addItemToBackpack "ACE_fieldDressing";};
for "_i" from 1 to 3 do {player addItemToBackpack "ACE_packingBandage";};
player addItemToBackpack "ACE_tourniquet";
player addHeadgear "rhsusf_ach_helmet_ocp";

comment "Add weapons";
player addWeapon "rhs_weap_m4a1_grip";
player addPrimaryWeaponItem "rhsusf_acc_anpeq15";
player addPrimaryWeaponItem "rhsusf_acc_ACOG3";
player addWeapon "hgun_ACPC2_F";
player addWeapon "ACE_Vector";

comment "Add items";
player linkItem "ItemMap";
player linkItem "ItemCompass";
player linkItem "ItemWatch";
player linkItem "ItemRadio";
player linkItem "ItemGPS";

comment "Manuell hinzugefügte Gegenstände";
player addItemToBackpack "rhsusf_acc_compm4";
player addItemToBackpack "ACE_NVG_Wide";
player addItemToBackpack "rhsusf_acc_rotex5_grey";

Zuweisen der Loadouts

Wir haben unsere Loadouts jetzt zwar fertig erstellt, aber unseren Einheiten diese Loadouts noch nicht zugewiesen. Um das zu tun, gehen wir jetzt in den Editor in unsere Mission und schreiben in die init-Zeile jeder Einheit, welches Loadout sie kriegen soll. Der Befehl, den man dazu in die init-Zeile schreiben muss, lautet:
this setVariable ["loadout", "tf"];
Nachdem das erledigt ist, gehen wir in unseren Missionsordner und erstellen dort eine Datei namens "onPlayerRespawn.sqf". In diese Datei schreiben wir jetzt ein sogenanntes "switch-case" rein, welcher abfragt, welches Loadout der Spieler beim Spawnen kriegen soll und somit das entsprechende Loadoutskript aufruft. Das switch-case funktioniert folgendermaßen:
switch (player getVariable ["loadout",""]) do {
	case ("tf"):{
		call compile preprocessFileLineNumbers "loadouts\tf.sqf";
	};
	case ("medic"):{
		call compile preprocessFileLineNumbers "loadouts\medic.sqf";
	};
	case ("helipilot"):{
		call compile preprocessFileLineNumbers "loadouts\helipilot.sqf";
	};
	case ("tankcrew"):{
		call compile preprocessFileLineNumbers "loadouts\tankcrew.sqf";
	};
	default {
		call compile preprocessFileLineNumbers "loadouts\default.sqf";
	};
};
Hierbei müssen dann die Namen nach dem "case" und die jeweils aufzurufende Datei angepasst werden.

Die Namen nach dem "case" müssen denen entsprechen, die in der init-Zeile der Einheit definiert wurden. Der Einfachheit können diese mit dem Skriptnamen übereinstimmen.

Unter "default" könnt ihr ein Loadout eintragen, das aufgerufen werden soll, wenn keiner der vorherigen Fälle zutrifft – quasi ein Standardloadout, für den Fall, dass ihr euch z.B. beim Zuweisen der Loadoutvariable vertippt habt. Am besten werden dort zum Testen alle Items weggenommen.
removeAllWeapons player;
removeAllItems player;
removeAllAssignedItems player;
removeUniform player;
removeVest player;
removeBackpack player;
removeHeadgear player;
removeGoggles player;
Möchte man mehr als 4 Klassen nutzen, kann man einen weiteren Block ergänzen.
	case ("otherclass"):{
		call compile preprocessFileLineNumbers "loadouts\otherclass.sqf";
	};

Der Name "onPlayerRespawn.sqf" lässt es vermuten: Diese Datei wird beim Respawn (und beim Spawn) aufgerufen. Damit das funktioniert, muss aber der Respawn richtig eingestellt sein. Das heißt Marker gesetzt und Respawn auf BASE in der "description.ext" oder "Respawn on Custom Position" im EDEN-Editor. [2]

Abschließende Worte

Damit sind unsere Loadouts nun komplett fertig und ihr könnt sie in eurer Mission testen. Beachtet dabei bitte jedoch, dass diese Loadouts nur übernommen werden, wenn die Einheit auch von einem Spieler gespielt wird – für KI werden diese Skripte nicht aufgerufen.

Damit bleibt mir dann nur noch, euch viel Spaß beim Missionsbauen und Skripten zu wünschen und Fett_Li von Gruppe W zu danken, der TheConen auf die Idee mit der Loadoutvariable gebracht hat und mir damit einiges an Arbeit erspart hat :)

Weiterführende Links

  1. http://www.armaholic.com/page.php?id=8680
  2. https://github.com/TacticalTrainingTeam/Missionsmanagement/blob/master/ttt-mission-simple.Stratis/description.ext#L14-L16