![]() |
#1 (permalink) |
![]() Registriert seit: 13.08.2016
Beiträge: 15
|
![]()
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{ while {true} do { radio_1 say3D "Radiotrack1"; sleep 217; radio_1 say3D "Radiotrack2"; sleep 205; }; }; 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 |
![]() |
![]() |
#2 (permalink) |
![]() ![]() |
![]()
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
__________________
Niemand hat die Absicht eine Tüte zu bauen! ![]() ___<<<A3 Wounding System>>>___ Geändert von Pfandgiraffe (17.08.2016 um 23:00 Uhr). |
![]() |
![]() |
#3 (permalink) |
![]() Registriert seit: 13.08.2016
Beiträge: 15
|
![]()
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{ while {true} do { _allMObjects = allMissionObjects "Land_FMradio_F"; _allMObjects say3D "Radiotrack1"; sleep 217; }; }; 1 Element angegeben, 2 erwartet. |
![]() |
![]() |
#4 (permalink) |
![]() Registriert seit: 08.11.2015
Beiträge: 18
|
![]()
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 |
![]() |
![]() |
#5 (permalink) |
![]() ![]() |
![]()
So könnte das aussehen:
Code:
martins_radio = { private _radio = _this; while {true} do { _radio say3D "Radiotrack1"; sleep 217; _radio say3D "Radiotrack2"; sleep 205; }; }; _allRadiosArray = allMissionObjects "Land_FMradio_F"; { _x spawn martins_radio; true } count _allRadiosArray;
__________________
Niemand hat die Absicht eine Tüte zu bauen! ![]() ___<<<A3 Wounding System>>>___ Geändert von Pfandgiraffe (18.08.2016 um 08:43 Uhr). |
![]() |
![]() |
#6 (permalink) |
![]() Registriert seit: 13.08.2016
Beiträge: 15
|
![]()
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 ![]() Ich will nu keine Umstände machen aber was genau machen folgende Zeilen? Code:
... private _radio = _this; ... ... ... _x spawn martins_radio; true |
![]() |
![]() |
#7 (permalink) |
![]() ![]() |
![]()
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?! ![]() Grüße
__________________
Niemand hat die Absicht eine Tüte zu bauen! ![]() ___<<<A3 Wounding System>>>___ |
![]() |
![]() |
#8 (permalink) |
![]() Registriert seit: 13.08.2016
Beiträge: 15
|
![]()
Es ist mir auf jeden Fall jetzt klarer als vorher, danke
![]() 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. |
![]() |
![]() |
#9 (permalink) |
![]() ![]() |
![]()
Keine Ahnung. Probiere es mal mit playSound3D. Ich arbeite immer nur mit dem Befehl.
__________________
Niemand hat die Absicht eine Tüte zu bauen! ![]() ___<<<A3 Wounding System>>>___ |
![]() |
![]() |
#10 (permalink) |
![]() ![]() Registriert seit: 15.05.2011
Beiträge: 1.110
|
![]()
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
__________________
Bewegende Momente bei ArmA 3 Geändert von Drunken Officer (19.08.2016 um 06:59 Uhr). |
![]() |
![]() |
#12 (permalink) |
![]() Registriert seit: 13.08.2016
Beiträge: 15
|
![]() Ich habe bisher noch nichts für eine MP Mission gemacht aber ich hab mir dazu mal einiges durchgelesen. Ist es richtig dass die Abfrage dann wie folgt laufen müsste?: Code:
if (isDedicated) exitWith { GC_radio = { private _radio = _this; while {true} do { _radio say3D "Radiotrack10"; ... }; }; _allRadiosArray = allMissionObjects "Land_FMradio_F"; { _x spawn GC_radio; true } count _allRadiosArray; }; |
![]() |
![]() |
#13 (permalink) |
![]() ![]() Registriert seit: 15.05.2011
Beiträge: 1.110
|
![]()
Falsch. Der Dedi braucht es eben nicht.
Die Spieler benötigen es.
__________________
Bewegende Momente bei ArmA 3 |
![]() |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
Themen-Optionen | |
Ansicht | |
|
|
![]() |
||||
Thema | Autor | Forum | Antworten | Letzter Beitrag |
Neuer Classname vom Ifrit | Sol.LrMartyn | Editing & Scripting | 6 | 27.03.2013 12:00 |
Problem mit Helmand Karte und Aiaktalik - Help please! | FlashAUT | Mods & Addons | 8 | 24.11.2011 09:05 |
Linux Server aufsetzen . Vorgehen ? | Nightshift | Multiplayer | 2 | 29.08.2011 21:37 |
Frage Array | Ghost_Aut | Editing & Scripting | 3 | 13.04.2011 17:57 |
Classnames WEST OpA | Muecke | Editing & Scripting | 9 | 29.06.2010 13:37 |