HX3 Foren

HX3 Foren (https://hx3.de/)
-   Editing & Scripting (https://hx3.de/editing-scripting-167/)
-   -   [Frage] globale variable lokal verarbeiten und wieder global machen (https://hx3.de/editing-scripting-167/frage-globale-variable-lokal-verarbeiten-global-18711/)

SmartGun 01.03.2010 10:11

[Frage] globale variable lokal verarbeiten und wieder global machen
 
Hallo zusammen!

ich habe ein kleines problem, das mir das kanze script versaut.

folgendes:

-globale variable definiert in der init.sqf
Code:

alarm_1 = false;
-ein trigger mit der Bedingung
Code:

alarm_1
-der script- Aufruf
Code:

nul=[trg_alarm_1,alarm_1] execVM "script.sqf";


-script.sqf:
Code:

_trigger = _this select 0;
_var = _this select 1;


// code //

_var = true;
puplicvariable "_var";

das funktioniert aber nicht.

wen ich _var so auslese:
Code:

hint format ["%1",_var];
dann bekomme ich "true" zurück

es muss doch irgendwie gehen eine lokale variable global zu machen und an alle clients + server zu senden.

Ich komm einfach nicht drauf.

Weis vielleicht jemand Rat?

währ echt nice

Grüße!

Buliwyf 01.03.2010 11:11

publicvariable "_var";

:zahn:

Wobei _var kein globaler Standard wegen dem Unterstrich ist, sondern nur lokal ist. Du solltest _var in zB meineVariable ändern...

Hier nachzulesen

;)

Lester 01.03.2010 11:18

Du versuchst zudem dort die scriptlokale Variable _var global zu machen, das kann nur in die Hose gehen.

SmartGun 01.03.2010 12:12

Danke für die schnellen Antworten!

jup, das "publicvariable" war ein typo. :D

Zitat:

Du versuchst zudem dort die scriptlokale Variable _var global zu machen
stimmt, das gehört so:
Code:

publicvariable "alarm_1";
aber ich möchte ja das alarm_1 im Aufruf frei wählen können damit ich immer das gleiche script verwenden kann aber halt mit anderen parametern z. b.

nul=[trg_alarm_453,alarm_453] execVM "script.sqf";

versucht habe ich auch schon diesen Aufruf:

nul=[trg_alarm_1,"alarm_1"] execVM "script.sqf";
würde bedeuten:

Code:

publicvariable _var;
entspricht
Code:

publicvariable "alarm_1";
oder nicht?

Pfandgiraffe 01.03.2010 13:56

Zitat:

Code:
publicvariable _var;
entspricht
Code:
publicvariable "alarm_1";
oder nicht?

...na eben nicht. du hast deine globale variable alarm_1 zu einer in der .sqf lokalen _var umgeformt.
wenn du die lokale variable _var wieder auslesen und public machen willst, musst du sie erst wieder global machen. d.h.:

Code:

_trigger = _this select 0;
_var = _this select 1;
alarm_an = false;


// code //
hint format ["%1",_var];


_var = true;
if (_var == true) then
{
alarm_an = true;
}
                  else
{
if (true) exitwith {};
};

puplicvariable "alarm_an";

...falls deine lok.v. true gesetzt wird wird eine andere glob. var. ebenfalls true gesetzt die dann wierum public gemacht werden kann. es gibt auch einfachere lösungen (im sinne von weniger schreibarbeit) aber in dieser wird das prinzip hoffentlich deutlich. dein hint-text sollte eigentlich funktionieren solange du ihn in dem skript öffnest bzw. abfragst. kommt aber auch darauf an was du da abfragen willst... das sieht man ja nun nicht weil dein code fehlt.




mfg

SmartGun 01.03.2010 17:03

Hi und Danke für die ausführliche Erklährung!

das hab ich soweit gecheckt.

der hint war nur zum debuggen hat also nix mit dem script zu tun.

das ich die lokale var erst wieder in eine globale "konvertieren" muss um sie public zu machen ist mir klar.

nur wollte ich umgehen die globale var innerhalb des scripts "namentlich anzusprechen". (sorry für die laienhaften Umschreibungen, bin nur hobbybastler :zahn: )

die globale var ist ja schon im script-Aufruf gegeben und das sollte reichen.
Andernfalls ist das script ja nicht mehr universell einsetztbar sondern ich müsste für jede globale var ein eigenes script machen.

Ich denke aber ich bin einen Schritt weiter.
hab folgendes probiert und es funzt zumindest im Editor...

Aufruf:
Code:

nul=["alarm_1"] execVM "script.sqf";
script.sqf:
Code:

_var = _this select 0;

// code //

call compile format ["%1=true",_var];
publicVariable _var;

If (true) exitWith {};

was das -> publicVariable _var;

angeht bin ich mir nicht sicher.
es kommt keine Fehlermeldung und in die .rpt schreibt er mir auch nix.

wird sich wohl erst auf dem dedi-server zeigen ob das läuft :)

den code hab ich weggelassen, da er zu lang währe und mit den variablen direkt nix zu tun hat.

Gruß!

Pfandgiraffe 01.03.2010 17:40

jetzt versuchst du schonwieder die lok.v. public zu machen... das funzt im mp nicht.

Cyborg11 01.03.2010 17:44

Die lokale Variable "_var" existiert nur solange, solange das Skript läuft. Ist das Skript beendet, ist die Variable _var auch verschwunden ;)
Andere Skripte können lokale Variablen auch nicht benutzen.

SmartGun 02.03.2010 21:00

Nabend!

also wenn ich das so schreibe
Code:

publicvariable "_var";
dann behandelt er _var als währe sie eine gobale var, was sie aber nicht ist, weil mit _. -> funzt nicht

schreibe ich
Code:

publicvariable _var
dann entspricht das
Code:

publicvariable alarm_1
was auch nicht geht weil alarm_1 bei o.g. scriptaufruf ja ein STRING ist und keine globale var. ausserdem fehlen die beiden "" .

das heißt ich muss meinen STRING in eine globale var verwursten was dann so aussehen könnte:

Code:

call compile format ["publicvariable '%1'", _var];
habbich´s jetzt geblickt? :naughty:

Cyborg11 02.03.2010 21:23

Nein! du kannst KEINE lokalen Variablen public machen, auch wenn du in deinem Skript
Code:

_var = _this select 0
schreibst und deine globale Variable an dein Skript übergibst. Die Variable _var hat dann zwar diesen Wert:
Code:

_var = alarm_1
Das heißt aber du hast jetzt aus deiner GLOBALEN Variable eine LOKALE gemacht, die nur auf deinem PC bzw. nur in diesem Skript existiert.
Du kannst keine lokalen Variablen public machen.

Was du willst, sind dynamische globale Variablen, hab ich Recht?

Pfandgiraffe 03.03.2010 05:58

einfacher wäre es glaube ich script oder die ganze mission mal anzuhängen. dann kann man gucken was du vor hast und dir dementsprechende lösungswege zeigen. denn mitlerweile versteh ich nicht mehr was du willst.:komisch:

Lester 03.03.2010 08:12

Zitat:

Zitat von SmartGun (Beitrag 299047)
Code:

call compile format ["publicvariable '%1'", _var];
habbich´s jetzt geblickt? :naughty:

Ich hab zwar keinen Schimmer was das sonst keiner damit zufrieden ist, aber das funzt prächtig wenn _var einen String enthält der den gewünschten Varablennamen enthält. :daumen:

SmartGun 03.03.2010 08:14

Moin,

und Danke für eure Zeit, Leute.

werd heut abend ne mission anhängen.

und mich zwischenzeitlich schlau machen was "dynamische globale Variablen"
überhaupt sind ;)

// edit

THX Lester!

haben gleichzeitig gepostet.

das bedeutet die var wird an alle clients gesendet obwohl das script auf dem server local ist?


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:48 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 118 119