Say3D ohne Loop

Verweist auf description.ext! Exakte Schreibweise und Pfad beachten! Die Datei wird nur einmal abgespielt.

 

1. Ohne remoteExec (funktioniert, wenn alle beim Serverstart dabei sind):

a) Als einfache Objekt-Init:

          this say3D ["Sounddatei", Reichweite, 1];

b) mit addAction (siehe auch Einträge zu addAction):

          Objektname addAction [ "MUSIC ON", {Objektname this say3D ["Sounddatei", Reichweite, Pitch];}];


2. Mit remoteExec:

          [smartphone, ["song", 15, 1, false]] remoteExec ["say3D", 0, true];

Die Syntax ist:

          [Objekt, ["Datei", Reichweite, Pitch, Radioeffekt]] remoteExec ["say3D", targets, JIP];

Erläuterung zu targets: (0=global, -2=alle außer Server), JIP (true/false)

 

ACHTUNG: Ein Sound kann in Arma 3 nur beendet werden, indem man die Quelle des Sounds löscht!

Will man also einen Sound beenden, ohne das Objekt zu zerstören, muss man es löschen und an exakt der gleichen Position wieder erstellen - autoradios sind so nur möglich, wenn man an die Fahrzeuge ein Objekt anhängt (attach) und es als Emitter nutzt. Habe ich aber noch die gemacht.

Im Beispiel unten spielt das "Smartphone" den Song per Aktionsmenü ab, sofort werden alle bisherigen Aktionsmenü-Einträge gelöscht ("removeAllActions"), damit der Sound durch die Clients kein weiteres Mal abgespielt werden kann (keine Überlagerungen!). 

Der neu erzeugte addAction-Eintrag "Radio aus" löst bei Aktivierung global (remoteExec) folgendes aus: Er findet die genaue Position (getPosATL) des Smartphones und dessen Ausrichtung (getDir), löscht das Objekt und spawnt es genau dort wieder (ohne die Aktionsmenü-Einträge!).

Das sieht dann so aus:

     [smartphone, ["sameintheend", 15, 1, false]] remoteExec ["say3D", 0, true];
     smartphone remoteExec ["removeAllActions"];

[smartphone, ["Radio aus",
          {
               _pos = getPosATL (_this select 0);
               _dir = getDir (_this select 0);
               deleteVehicle (_this select 0);

               smartphone = "Land_MobilePhone_smart_F" createVehicle [0, 0, 0];
               smartphone setPosATL [_pos select 0, _pos select 1, _pos select 2];
               smartphone setDir _dir;

          }]] remoteExec ["addAction"];

Man könnte nun mit diesem laufenden Script die alten Einträge wieder hinzufügen und folgendes einfach anhängen. Fertig wäre das fertige Radio zum Ein- und Ausschalten:

     [smartphone, ["Sublime", {execVM "scripts\playRadio1.sqf"}, [], 6, false, true, "", "", 2]] remoteExec ["addAction"];
     [smartphone, ["Dylan", {execVM "scripts\playRadio2.sqf"}, [], 5, false, true, "", "", 2]] remoteExec ["addAction"];
     [smartphone, ["Ataris", {execVM "scripts\playRadio3.sqf"}, [], 5, false, true, "", "", 2]] remoteExec ["addAction"];
     [smartphone, ["CCR", {execVM "scripts\playRadio4.sqf"}, [], 5, false, true, "", "", 2]] remoteExec ["addAction"];