HX3 Foren

HX3 Foren (https://hx3.de/)
-   Editing & Scripting (https://hx3.de/editing-scripting-167/)
-   -   setVariable & getVariable (https://hx3.de/editing-scripting-167/setvariable-getvariable-24682/)

JoBro 07.03.2015 00:21

setVariable & getVariable
 
Ich hab mir mehrmals setVariable und getVariable angeschaut und frage mich immer noch:
Wann findet setVariable und getVariable genau Verwendung. Ich komm schon dahinter .... (lange Leitung im diesen Fall)


Man hinterlegt etwas an einem Objekt oder einer Gruppe oder ... , aber in der Praxis sieht das jetzt wie aus? Es gibt doch schon Variablen.

Warum zum Beispiel an einem Objekt das festmachen. Mir fehlt da, glaube ich, eine wichtige Info - beziehungsweise ist mir eine Problematik nicht ganz klar.

Ein einfaches Beispiel wäre super.

Moerderhoschi 07.03.2015 10:36

Das hat einfach etwas mit dem Speicherort der Variable zu tun.

Wenn Du einer Variable einen Wert zuweist, dann wird dieser Wert einer Variable im missionNameSpace zugewiesen.

Beispiel 1:
Code:

myVar = 123;
ist das selbe wie
Code:

missionNamespace setVariable ["myVar", 123];
Beispiel 2:
Code:

myVar = "hoschi"; publicVariable "myVar";
ist das selbe wie
Code:

missionNamespace setVariable ["myVar", "hoschi", true];
Das bedeutet jede einfache Zuweisung (ohne setVariable sondern einfach nur x = y) speichert den Wert in einer Variable im missionNameSpace

Jetzt besteht aber noch die Moeglichkeit, Variablen auch an anderen Orten und Namensraeumen zu hinterlegen.

Auszug aus dem Wiki:

All available data type combinations:
  • Namespace setVariable Array
  • Control setVariable Array (static map editor control only)
  • Object setVariable Array
  • Group setVariable Array
  • Team_Member setVariable Array
  • Task setVariable Array
  • Location setVariable Array

Nehmen wir jetzt als Beispiel ein Objekt.

Ich platziere eine Auto mit dem Namen "car1" im editor und moechte in diesem Objekt einer Variable einen Wert zuweisen.
Code:

car1 setVariable ["varStoredInCar1", 123];
Wenn Du nun eine Abfrage auf die Variable varStoredInCar1 machst liefert dir die Engine nil zurueck, da eine einfache Abfrage immer den missionNameSpace abfragt
Code:

hint format ["%1",varStoredInCar1]; // liefert nil zurueck
fragst Du aber gezielt die Variable die im Objekt hinterlegt ist ab, liefert Dir die Engine auch den Wert den wir vorher zugewiesen haben zurueck.
Code:

hint format ["%1", car1 getVariable "varStoredInCar1" ]; // liefert 123 zurueck
SetVariable bietet Dir also die Moeglichkeit deine Variablen auch an anderen Orten zu hinterlegen als im missionNameSpace.

Ein gutes Beispiel hierfuer ist der ProfileNameSpace. Daten die im ProfileNameSpace gespeichert werden gehen nicht verloren, da diese in der \Eigene Dateien\Arma 3\name.vars gespeichert werden. Hier hast Du also die Moeglichkeit, Dir Werte an einem Ort zu hinterlegen, der beim beenden der Mission nicht verloren geht.

Hier wird jetzt also die Variable permanentVariable mit dem Wert 123 in dem profileNameSpace gespeichert:
Code:

profileNameSpace setVariable ["permanenteVariable", 123];
nach dem beenden der mission und einem neustart von arma sind diese daten nach wie vor noch vorhanden.

Du kannst als eine neue Mission starten und die Variable im profileNameSpace wieder abfragen
Code:

hint format ["%1", profileNameSpace getVariable "permanenteVariable" ]; // liefert 123 zurueck
Empfohlene Lektuere zum Thema:
https://community.bistudio.com/wiki/setVariable
https://community.bistudio.com/wiki/getVariable

gruß
hoschi

Drunken Officer 07.03.2015 12:14

:daumen:

Super geil erklärt!

JoBro 09.03.2015 09:20

Cool, Danke. Und die Lektüre: macht jetzt alles einen Sinn. Ich denke manchmal zu kompliziert und ich sollte genauer lesen.

Übrigens von den ganzen Foren, Themen unabhängig vom Handwerker bis zur IT, finde ich dieses am Besten, weil viele leider zu oft schreiben:
Ich habe so viele Fragen beantwortet und so viele Jahren geschrieben und du hast erst 5 Fragen beantwortet, also habe ich Recht und du nicht. Blöderweise kommentieren dann alle "Erfahrenen Leute" das positiv. Kein Widerspruch. "Ich rede und sabbel so viel, deswegen bin ich so schlau", sagt ja so auch keiner in der Realität. So entsteht zu viel Müll, meine ich.

Hier dagegen sucht man das Argument, ist keins, vergeblich. Zum Glück. Hut ab vor den Leuten, die trotz entsprechenden Wissen und Erfahrungen auf den Teppich bleiben. Danke!!! :daumen::daumen::daumen:

Drunken Officer 13.03.2015 21:42

Mal ne Frage, das hinterlegen funktioniert das nur bei der selben Mission oder kann man die auch in einer anderen Mission verwenden?

z.B. baue ich bei A3 gerade mehrere Teile. Könnte ich da rein theoretisch, Ausrüstung übergeben?

Moerderhoschi 13.03.2015 21:53

alles was Du im profileNameSpace hinterlegst ist in jeder Mission verfuegbar, solange die \Eigene Dateien\Arma 3\name.vars nicht geloescht wird.

Drunken Officer 26.05.2015 16:29

Auch wenn der Thread schon 2 Monate alt ist, mal was zum Verständis
Zitat:

Zitat von JoBro (Beitrag 481907)

Man hinterlegt etwas an einem Objekt oder einer Gruppe oder ... , aber in der Praxis sieht das jetzt wie aus? Es gibt doch schon Variablen.

Das hatte ich mich auch gefragt, bis ich selber darüber gestolpert bin. Warum eine Variable in einem Objekt speichern?

Ich hatte das Problem, dass aus irgendwelchen Gründen beim Verbinden nicht immer der mit dem höchsten Rang auch gruppenführer ist. (Die Figuren traten erst nach dem Start einer Gruppe bei).

Was brauchte man, eine Variable. Und da, sieht an, diese darf nicht im missionnamespace gespeichert werden, da die sonst jedesmal überschrieben wird. Also die selbe Variable mit unterschiedlichen Werten ans Objekt geheftet.
A1 setVariable ["DOF_RANK", 3, true];
A2 setVariable ["DOF_RANK", 1, true];
A3 setVariable ["DOF_RANK", 7, true];
A4 setVariable ["DOF_RANK", 9, true];
A5 setVariable ["DOF_RANK", 2, true];

Jetzt gibt es die selbe Variable mit unterschiedlichen Werten. Und diese Werte können dann als Vergleichswerte herangezogen werden. z.B. Wer als erstes durch einen Sniper erschossen werden soll. Oder wer Führer einer Gruppe wird etc pp...


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:03 Uhr.

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 117