Classname als Array benutzen?
Hallo,
ich befasse mich erst seit ein paar Tagen mit Arma 3 Scripten und hänge momentan an den Arrays fest. Mir stellt sich jetzt die Frage ob es möglich ist, ein Classname als Array anzugeben. Grund: Ich wollte zum Testen ein Radiosender erstellen in dem einiges an Musik im Loop läuft. Momentan sieht es so aus: Code:
[] spawn{ Jetzt wollte ich, das auf allen Radios die ich platziere automatisch das Script läuft. Das Radio hat den Classname Land_FMradio_f. Ist das so überhaupt machbar? Habe zwar schon nach Lösungen gesucht aber bin nicht fündig geworden. Gruß Martins |
https://community.bistudio.com/wiki/allMissionObjects
oder https://community.bistudio.com/wiki/entities Zweiteres kann direkt den Classname verarbeiten. Keine Ahnung was am Ende performanter ist. (lässt sich ja auch schnell ermitteln über diag_codePerformance) Grüße |
Danke für die Antwort aber leider versteh ich das nicht was dort auf den Seiten beschrieben steht.
Ich hab jetzt die ganze Zeit versucht damit etwas hin zu basteln, unter anderen sah es dann so aus: Code:
[] spawn{ 1 Element angegeben, 2 erwartet. |
allMissionObjects gibt dir ein Array zurück,
say3D kann allerdings nur mit einem einzelnem Object arbeiten. Mit forEach kannst du ein Script über jeden Eintrag aus einem Array laufen lassen. https://community.bistudio.com/wiki/forEach |
So könnte das aussehen:
Code:
martins_radio = { |
danke für die Arbeit, ich dachte schon ich wäre nah dran mit meiner Lösung aber da lag ich wohl daneben.
Naja ich steh ja erst am Anfang beim lernen, irgendwann wird es bestimmt noch :lol: Ich will nu keine Umstände machen aber was genau machen folgende Zeilen? Code:
... |
Der count-Loop (funzt genauso wie der forEach-Loop) cycelt durch jeden Eintrag in _allRadiosArray. Also jedes Radio-Objekt was gefunden wurde. Innerhalb des Loops wird dieses mit der Magic-Variable _x angesprochen. _x ist also bei jedem Durchlauf der Schleife ein anderes Radio.
Dein eigentliches Script zum abspielen deines Sounds habe ich in eine eigene Instanz (martins_radio) ausgelagert. (das könnte auch eine komplett eigene Datei werden) Mit "_x spawn wasAuchImmer" übergebe ich das aktuelle radio in diese Instanz. Dort ist es dann die Magic-Variable _this. Mit _radio = _this; gebe ich diesem Radio eine in der Instanz lokale Variable. (eben _radio) Und mit dem private davor mache ich diese Variable global in der Instanz. Das stellt sicher, dass der while-Loop auch was mit _radio anfangen kann. Das ist eine Sicherheitsmaßnahme damit die Variable _radio nie Nil sein kann. (also unbekannt) Das könnte z.B. passieren wenn die Ausführung der Instanz länger als ein Frame benötigt. Also in Frame Y wird _radio = _this. Dann ist ist die Zeit für jegliche Ausführung in der sheduled environment zu ende (3ms). In Frame Z wäre die Variable _radio jetzt fremd. Alles klar?! :ugly: Grüße |
Es ist mir auf jeden Fall jetzt klarer als vorher, danke :daumen:
Ich hab jetzt noch zu dem befehl say3D ne Frage: Kann man damit nur eigens eingebundene .ogg's abspielen? Ich habe damit noch etwas herum gespielt und wollte den Arma Track "This Is War" abspielen. Aber das ging nicht, es kam auch keine Fehlermeldung dazu. |
Keine Ahnung. Probiere es mal mit playSound3D. Ich arbeite immer nur mit dem Befehl.
|
https://community.bistudio.com/wiki/say3D
say3d fordert eine zuvor definierte Variable in der CfgSound der Description.ext. This is war ist kein sound, sondern Musik. (cfgmusic) https://community.bistudio.com/wiki/....ext#CfgSounds say3D hat einen lokalen Effekt. Also auf jedem Clienten ausführen, wenn es sich um eine MP Mission handelt |
Nochmals danke für die Infos, ich werde noch ein paar Scripte schreiben und schauen ob ich das so wirklich verstanden habe und umsetzen kann :daumen:
|
Zitat:
Ist es richtig dass die Abfrage dann wie folgt laufen müsste?: Code:
if (isDedicated) exitWith { |
Falsch. Der Dedi braucht es eben nicht.
Die Spieler benötigen es. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:11 Uhr. |
Angetrieben durch vBulletin, Entwicklung von Philipp Dörner & Tobias