Einzelnen Beitrag anzeigen
Alt 06.06.2011, 10:46   #4 (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

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;
Angehängte Dateien
Dateityp: zip Radio_in_Vehicle-utes.zip (932,3 KB, 63x aufgerufen)
Vienna ist offline