Einzelnen Beitrag anzeigen
Alt 11.01.2013, 20:58   #5 (permalink)
Vienna
SQF Zauberer 10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von Vienna
 
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
Standard

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.
Vienna ist offline