Also erst einmal kann man in Arma nicht wirklich einen Sound, der bereits angefangen hat, beenden. Quelle: BI Forums.
https://forums.bistudio.com/forums/t...omment=1808120
Ähnlicher Workaround:
Erstelle ein invisible H, attachTo Player. Lass das H den Sound ausgeben und wenn du willst, dass er beendet wird, lösch das invisible H. Ist der Spieler wieder unter Wasser mit createVehicle ein neues H und so weiter...
Und den While true loop würde ich eher mit einem EventHandler lösen, wenn das möglich ist.
Vllt. mit AnimChanged. Ist auch gleich der Erste in der Liste:
https://community.bistudio.com/wiki/...rs#AnimChanged
Dann finde heraus, wie die Animation unter Wasser heißt und gleiche diese dann mit If Else Condition ab.
Das Problem mit While {true} ist, dass dieser niemals endet. Endlosschleife. Irgendwie nicht gut.
Zu der Möglichkeit, ob der Sound fertig ist. Meines Wissens nicht. Jedoch kannst du einfach die genaue Zeit der Sound File herausfinden (z.B. 5 Sekunden) und mit sleep 5 halt dein Script schreiben.
Würde eine .sqf verwenden.
Code:
_unit addeventHandler {"AnimChanged", {if ((animationState player) == "deine_animation") then {"deineSqf.sqf"};}};
deineSqf.sqf
Code:
_h = "Land_HelipadEmpty_F" createvehicle (position player);
player attachTo [_h, [0, 0, 0] ]; // zweiter Array ist bezogen auf offset
_soundLength = 3; // oder '_this select 0' für Parameter beim Aufruf der Funktion /SQF
while {(animationState player) == "deine_animation"} do {
_h playSound3D _soundfile;
sleep _soundLength;
};