In Arma1 habe ich den Sound für ein Logic-Objekt erstell, welches ich z.B. einem Fahrzeug nachführte. Abgeschalten wurde durch Löschen des Logic-Objekts.
Code:
// Aufruf Lokal | Vienna 03.08.2008
//
// Radio über Aktionsmenü ein- und ausschalten
//
// 1. Aufruf schaltet Radio ein. Nächster Aufruf schaltet aus. usw.
//
// Aufruf in der Initialisierung eines Objekt: temp = this addAction ["Aktionstext","Dateiname",["Soundname",Soundlänge],-1,false,true,""]
// Beispiel: temp = this addAction ["*** Radio ein- oder ausschalten ***","Sounds\Radio.sqf",["BlackAttack",127],-1,false,true,""]
//
// In der description.ext ist die Klasse für den Sound einzufügen.
// Lokale Variable
private ["_o","_s","_l","_r","_t"];
//globale Variable beim ersten Aufruf für Radio Kontrolle initialisieren.
if (isNil "ViennasRadio") then {ViennasRadio = false};
// _o: Objekt welches den Sound abgibt
_o = _this select 0;
// _s: Soundname aus dem Parameter in der Aktion laden
_s = (_this select 3) select 0;
// _l: Länge des Musikstücks (darf nicht viel kürzer sein, sonst Überschneidung)
_l = (_this select 3) select 1;
//Wenn aufrufendes Objekt zerstört, dann Aktion entfernen
if (!alive _o) exitWith {player groupChat "---- Radio nicht mehr betriebsbereit! ----"; _o removeAction (_this select 2)};
// Radio einschalten wenn ViennasRadio false und ausschalten wenn ViennasRadio true
///////////////////////////////////////////////////////////////////////////////////
if (!ViennasRadio) then //Radio erstellen (Radio einschalten)
{
ViennasRadio = true;
// _r: logisches "Radioobjekt"
_r = "Logic" createVehicle getPos player;
// Hauptschleife Sound starten (Wiederholung bis abgeschaltet wird)
while {ViennasRadio AND alive _o} do
{
// Sound starten
_r say _s;
// _t: nach Zeitablauf Sound neu starten
_t = time + _l - 5;
// Warteschleife bis Soundende und "Radio" dem Objekt _o nachsetzen
while {_t > time AND ViennasRadio AND alive _o} do
{
_r setPos position _o;
sleep 0.5
}
};
deleteVehicle _r
}
else // vorherigen Radioskriptaufruf beenden (Radio ausschalten)
{
ViennasRadio = false;
}
In Arma2 wird man das Logic-Objekt mit attachTo an das Fahrzeug binden.
Wenn es geht, dass ein neuer Sound den laufenden beendet, dann ist die Lösung mit dem kurzen "leeren" Sound vielleicht einfacher.