Du hast vermutlich das unten angeführte Skript verwendet, mit dem man das Radio über Aktionsmenü ein- und ausschalten kann. Den Kommentar am Beginn habe ich etwas abgeändert.
Dieses Skript verwendet mehrmals ein globale Variable
(fett dargestellt), in der gespeichert ist ob der Radio ein oder aus ist.
Wenn du mehrere Fahrzeug mit dem Radio ausstatten willst, dann musst du Skripts mit verschiedenen Namen verwenden, von denen in jedem Skript diese globale Variable einen anderen Namen hat. z.B. eine Zahl hinten anfügen
ViennasRadio1 Diese Änderung muss unbedingt im jeweiligen Skript an jeder Stelle gleich geändert werden!
Für einen Respawn ist die Aktion nach createVehicle so anzuführen (dabei auf den jeweiligen Skriptnamen achten):
Code:
_veh = "AH1Z" createVehicle position Player;
_veh setVehicleInit ' temp = this addAction ["*** Radio ein- oder ausschalten ***","Sounds\Radio.sqf",["BlackAttack",127],-1,false,true,""] ';
processInitCommands;
Im Mehrspielermodus ist das aber nicht synchronisiert, weil der say Befehl nur lokal ist. Da muss jeder Spieler den Radio separat ein- und ausschalten. Es hört also nur der Spieler den Sound der ihn jeweils eingeschalten hat. Das zu synchronisieren wäre sehr aufwendig.
Ein im Mehrspielermodus funktionierendes Beispiel findest du im Anhang. Allerdings wird der Sound automatisch ein- und ausgeschalten, abhängig davon ob ein Driver im Fahrzeug ist. Dafür kommt man mit einem Skript für alle Fahrzeuge aus, weil keine globale Variable verwendet wird. Unterschiedliche Soundnamen sind dabei möglich und werden als Parameter übergeben. Der Sound ist in der Umgebung der Fahrzeuge von allen Spielern zu hören. Eine "Bedienungsanleitung" findest du im Kommentar oben im Skripts vom Download.
Radio.sqf
Code:
/* Aufruf Lokal | Vienna 30.12.2010
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,""]
Wichtig! Im 2. Übergabewert Soundlänge die Abspieldauer des Sounds eingeben (im Beispiel 127 Sekunden)!
Beispiel 1: temp = this addAction ["*** Radio ein- oder ausschalten ***","Sounds\Radio.sqf",["BlackAttack",127],-1,false,true,""]
Beispiel 2: Für Vehicle welche mit createVehicle erstellt werden
_veh = "AH1Z" createVehicle position Player;
_veh setVehicleInit ' temp = this addAction ["*** Radio ein- oder ausschalten ***","Sounds\Radio.sqf",["BlackAttack",127],-1,false,true,""] ';
processInitCommands;
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: unsichtbares Objekt
_r = "HeliHEmpty" createVehicle getPos _o;
// 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;