Armed-Assault.de Twitter
Antwort
 
Themen-Optionen Ansicht
Alt 17.08.2016, 21:31   #1 (permalink)
Newbie
 
Registriert seit: 13.08.2016
Beiträge: 15
Standard 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{
while {true} do 
{
radio_1 say3D "Radiotrack1";
sleep 217;
radio_1 say3D "Radiotrack2";
sleep 205;
	};
};
Das funktioniert soweit auch problemlos.
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
Martins ist offline   Mit Zitat antworten
Alt 17.08.2016, 22:47   #2 (permalink)
500 Beiträge1000 Beiträge
 
Benutzerbild von Pfandgiraffe
 
Registriert seit: 16.09.2008
Ort: Berlin
Alter: 32
Beiträge: 1.737
Pfandgiraffe eine Nachricht über ICQ schicken Pfandgiraffe eine Nachricht über Skype™ schicken
Standard

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).
Pfandgiraffe ist offline   Mit Zitat antworten
Alt 18.08.2016, 00:05   #3 (permalink)
Newbie
 
Registriert seit: 13.08.2016
Beiträge: 15
Standard

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;
	};
};
Dann kommt ein Error:
1 Element angegeben, 2 erwartet.
Martins ist offline   Mit Zitat antworten
Alt 18.08.2016, 01:58   #4 (permalink)
Newbie
 
Registriert seit: 08.11.2015
Beiträge: 18
Standard

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
TimmK ist offline   Mit Zitat antworten
Alt 18.08.2016, 08:39   #5 (permalink)
500 Beiträge1000 Beiträge
 
Benutzerbild von Pfandgiraffe
 
Registriert seit: 16.09.2008
Ort: Berlin
Alter: 32
Beiträge: 1.737
Pfandgiraffe eine Nachricht über ICQ schicken Pfandgiraffe eine Nachricht über Skype™ schicken
Standard

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).
Pfandgiraffe ist offline   Mit Zitat antworten
Alt 18.08.2016, 09:14   #6 (permalink)
Newbie
 
Registriert seit: 13.08.2016
Beiträge: 15
Standard

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
Martins ist offline   Mit Zitat antworten
Alt 18.08.2016, 11:07   #7 (permalink)
500 Beiträge1000 Beiträge
 
Benutzerbild von Pfandgiraffe
 
Registriert seit: 16.09.2008
Ort: Berlin
Alter: 32
Beiträge: 1.737
Pfandgiraffe eine Nachricht über ICQ schicken Pfandgiraffe eine Nachricht über Skype™ schicken
Standard

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>>>___
Pfandgiraffe ist offline   Mit Zitat antworten
Alt 18.08.2016, 19:05   #8 (permalink)
Newbie
 
Registriert seit: 13.08.2016
Beiträge: 15
Standard

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.
Martins ist offline   Mit Zitat antworten
Alt 18.08.2016, 21:41   #9 (permalink)
500 Beiträge1000 Beiträge
 
Benutzerbild von Pfandgiraffe
 
Registriert seit: 16.09.2008
Ort: Berlin
Alter: 32
Beiträge: 1.737
Pfandgiraffe eine Nachricht über ICQ schicken Pfandgiraffe eine Nachricht über Skype™ schicken
Standard

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>>>___
Pfandgiraffe ist offline   Mit Zitat antworten
Alt 19.08.2016, 06:56   #10 (permalink)
500 Beiträge1000 Beiträge
 
Benutzerbild von Drunken Officer
 
Registriert seit: 15.05.2011
Beiträge: 1.109
Standard

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).
Drunken Officer ist offline   Mit Zitat antworten
Alt 20.08.2016, 16:50   #11 (permalink)
Newbie
 
Registriert seit: 13.08.2016
Beiträge: 15
Standard

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
Martins ist offline   Mit Zitat antworten
Alt 21.08.2016, 22:27   #12 (permalink)
Newbie
 
Registriert seit: 13.08.2016
Beiträge: 15
Standard

Zitat:

say3D hat einen lokalen Effekt. Also auf jedem Clienten ausführen, wenn es sich um eine MP Mission handelt

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;
};
Martins ist offline   Mit Zitat antworten
Alt 22.08.2016, 20:30   #13 (permalink)
500 Beiträge1000 Beiträge
 
Benutzerbild von Drunken Officer
 
Registriert seit: 15.05.2011
Beiträge: 1.109
Standard

Falsch. Der Dedi braucht es eben nicht.
Die Spieler benötigen es.
__________________
Bewegende Momente bei ArmA 3
Drunken Officer ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Ähnliche Themen
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


Kontakt - HX3.de - Archiv - Nach oben

Angetrieben durch vBulletin, Entwicklung von Philipp Dörner & Tobias



SEO by vBSEO 3.2.0 ©2008, Crawlability, Inc.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116