Armed-Assault.de Twitter
Antwort
 
Themen-Optionen Ansicht
Alt 17.06.2014, 18:35   #1 (permalink)
Newbie
 
Registriert seit: 17.06.2014
Beiträge: 10
Standard Globale Variable, senden dann rechnen

Ich möchte eine Globale Variable festlegen und an eine andere Datei senden und dann mit dieser rechnen, zu dieser Zahl z.B. 1 addieren usw.:

Was ich kann:

Code:
MeineVariable=10;

[MeineVariable] exec "Skript.sqs";

Skript.sqs

Code:
_zahl  = _this select 0;
_neu = 0;

if (_Zahl  == 10) then {hint "gut";} else {};


_neu = _neu + _ zahl ;

if (_neu == 10) then {hint "gut";} else {};
Aber was nicht geht, was ich einfach nicht finden/lösen kann, ist wie folgendes;
Code:
(_this select 0) = (_this select 0)+1;

if (MeineVariable == 11) then {hint "gut";} else {hint "schlecht";};
geht nicht!


Mir fallen nur umständliche Sachen ein, wie eine zusätzliche Nummer mit senden:

Code:
MeineVariable1=10;
MeineVariable2=50;
MeineVariable3=70;
....

[1, MeineVariable1] exec "Skript.sqs";
Skript.sqs

Code:
_nr  = _this select 0;

_zahl  = _this select 1;

if (_nr == 1) then { MeineVariable1 = MeineVariable1 +1;} else {};
if (_nr == 2) then { MeineVariable2 = MeineVariable2 +1;} else {};
...
Das kann ja nicht die Lösung sein.

Ich weiß, dass die eckige Klammer [] ein Array ist!

Kann man da nicht was drehen??? Oder gibt es da ein einfachen Trick?

Danke im Voraus
JoBro ist offline   Mit Zitat antworten
Alt 18.06.2014, 12:06   #2 (permalink)
SQF Zauberer 10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von Vienna
 
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
Standard

Die globale Variable brauchst du nicht als Parameter übergeben, die kann in jedem Skript direkt angesprochen werden.

z.B.
Code:
if (MeineVariable == 10) then {hint "gut";} else {};


MeineVariable = MeineVariable + 1;

if (MeineVariable == 11) then {hint "gut";} else {};

usw.
Vienna ist offline   Mit Zitat antworten
Alt 18.06.2014, 14:54   #3 (permalink)
10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von Buliwyf
 
Registriert seit: 11.03.2005
Ort: HH
Alter: 46
Beiträge: 1.927
Standard

...und vor allem: Hör auf mit SQS zu scripten!
__________________
Buliwyf ist offline   Mit Zitat antworten
Alt 19.06.2014, 16:31   #4 (permalink)
Newbie
 
Registriert seit: 17.06.2014
Beiträge: 10
Standard

Erst einmal danke für die Antworten.

Sorry, konnte nicht sofort darauf eingehen, weil ich erstmal viel lesen musste.
Ich möchte ungerne das Fragen, was andere schon gefragt haben.

Ich hab noch nie was mit SQF gemacht. Ich schau mir halt so einige Sachen von anderen an und SQF sah schon fast bedrohlich aus .... z.B. UPS (Unbegreiflicher Psycho Skript)
OK Kritik/Vorschlag verdaut - Ab jetzt Kein SQS...

  • Ich habe mehrere Bergwerke in denen Eisen gefördert wird (1 tonne pro Minute)
  • Ich habe mehrere Lager
  • LKWs fahren zum Bergwerk, laden das Eisen auf und bring es zu einem Lager, Ein LKW pro Bergwerk

Also, so gut es geht in SQF:

Die Förderung/Produktion:

Produktion.sqf
Code:
_loop=true;
while {_loop} do {
If (getdammage BergWerk1 == 1) then {

	} else {
	BergWerk1Eisen = BergWerk1Eisen + 1;
		};
If (getdammage BergWerk2 == 1) then {

	} else {
	BergWerk2Eisen = BergWerk2Eisen + 1;
		};
sleep 60;
};
Und der Rohstoff-Transport:

Rohstoff_Transport.sqf
Code:
_beladen=0;
_loop=true;
while {_loop} do {
If (_beladen == 0) then {
If (BergWerk1LKW distance BergWerk1 <= 100) then {
	_beladen = _beladen + BergWerk1Eisen;
	sleep 0.1;
	BergWerk1Eisen = 0;
	};

};
If (_beladen >= 1) then {
If (BergWerk1LKW distance Lager1 <= 100) then {
	Lager1Eisen = Lager1Eisen + _beladen;
	sleep 0.1;
	_beladen = 0;
	};

};
sleep 10;
}
Was aber, wenn es mehrere Lager gibt, die ein LKW anfahren kann.
Ich wurde das mit mindestens [Lager1] oder [Lager2] .. usw. starten

Code:
_lager=_this select 0;
_beladen=0;
_loop=true;
while {_loop} do {
If (_beladen == 0) then {
If (BergWerk1LKW distance BergWerk1 <= 100) then {
	_beladen = _beladen + BergWerk1Eisen;
	sleep 1;
	BergWerk1Eisen = 0;
	};

};
If (_beladen >= 1) then {
If (BergWerk1LKW distance _lager <= 100) then {
	Lager1Eisen = Lager1Eisen + _beladen;
	sleep 1;
	_beladen = 0;
	};

};
sleep 10;
}
aber Lager1Eisen stimmt dann nicht bei Lager2!!!
Klar kann man für jedes Lager mit entsprechenden Bergwerk kopieren und einfügen ... Würde man das Ganze nicht anders machen?

Ich hoffe, dass da nicht alles Falsch ist und auf eine baldige Antwort.
Danke.
JoBro ist offline   Mit Zitat antworten
Alt 19.06.2014, 19:06   #5 (permalink)
SQF Zauberer 10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von Vienna
 
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
Standard

Mit dieser Routine kann jeder LKW jedes Bergwerk und jedes Lager anfahren.

Ein Beispiel für jeweils 3 Objekte, die Anzal kann beliebieg geändert werden.
Code:
private ["_lkwName","_lkwLadung"];

TransportSchleife = true; //mit false wird das Skript beendet


//Initialisieren von Bergwerken, Lager und LKWs

 //in Array mehrdimensionales Array für jedes Bergwerk: [Bergwerk-Name,Inhalt]
 Bergwerke = [[Bergwerk_A,100],[Bergwerk_B,100],[Bergwerk_C,100]];
 //in Array mehrdimensionales Array für jedes Lager: [Lager-Name,Inhalt]
 Lager     = [[Lager_A,0],[Lager_B,0],[Lager_C,0]];
 //in Array mehrdimensionales Array für jeden LKW: [LKW-Name,Inhalt]
 LKWs      = [[LKW_A,0],[LKW_B,0],[LKW_C,0]];

while {TransportSchleif} do
 {
  //Abfrage ob LKW zum Laden bei einem Bergwerk oder zum Entladen in einem Lager ist
  for "_i" from 0 to count LKWs - 1 do //durchläuft alle LKWs
   {
    _lkwName   = (LKWs select _i)select 0;
    _lkwLadung = (LKWs select _i)select 1;
    if (_lkwLadung == 0) then //LKW leer auf dem Weg zu einem Bergwerk
     {
      {
       if(_lkwName distance _x select 0 < 20)exitWith //LKW bei einem Bergwerk eingetroffen?
        {
         if (_x select 1 > 0) then             //Bergwerk-Inalt > 0 ?
          {
           LKWs select _i set [1,1];           //LKW mit 1 beladen
           _x set [1,(_x select 1)-1] //Bergwerk-Inhalt -1
          }
        }
      }forEach Bergwerke; //durchläuft alle Bergwerke  
     }
    else //LKW ist beladen auf dem Weg zu einem Lager
     {
      {
       if(_lkwName distance _x select 0 < 20)exitWith //LKW bei einem Lager eingetroffen?
        {
         LKWs select _i set [1,0];           //LKW entladen
         _x set [1,(_x select 1)+1] //Lager-Inhalt +1
        }
      }forEach Lager; //durchläuft alle Lager  
     }
   }
 };
Ist nicht getestet, sollte aber so funktionieren.

Geändert von Vienna (28.06.2014 um 07:44 Uhr). Grund: _x select 1 set ... auf _x set ... berichtigt!
Vienna ist offline   Mit Zitat antworten
Alt 19.06.2014, 21:50   #6 (permalink)
Newbie
 
Registriert seit: 17.06.2014
Beiträge: 10
Standard

Cool, danke!

Das ist eine Lösung: mehrdimensionale Array.
Ich schau mir das genau an, weil ich da viele Ideen habe, die ich da super einbringen kann. Außerdem brauch ich das Wissen für andere Sachen auch.

Kling Komisch, aber auf die schnell verstehe ich die Array mit den Parametern ganz gut, aber:

Code:
exitWith
Wenn das nicht der Fall ist, beende den Abschnitt ???
Oder
Wenn das der Fall ist, beende den Abschnitt mit dem Folgenden???
Bitte erklären.
Die andere Fragen versuche ich erstmal selber zu beantworten.

PS: Sollte es nicht funktionieren und ich finde den Fehler nicht, dann habe ich das nicht ganz verstanden. Ich schau mal in den nächsten Tagen, wenn ich Zeit habe. (Erinnert mich an Matrizen)
JoBro ist offline   Mit Zitat antworten
Alt 20.06.2014, 03:18   #7 (permalink)
Newbie
 
Registriert seit: 17.06.2014
Beiträge: 10
Standard

Bin eben mit der Antwort auf meine Frage aufgewacht! Verrückt!

da steht:
Code:
forEach Bergwerke;
forEach Lager;
In diesem Zusammenhang klar:
exitWith

Ist plötzlich selbsterklärend, was das da soll!!!
JoBro ist offline   Mit Zitat antworten
Alt 20.06.2014, 10:45   #8 (permalink)
SQF Zauberer 10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von Vienna
 
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
Standard

Das Unterbewustsein arbeitet durchgehend.

Hier eine Liste der Befehle: https://community.bistudio.com/wiki/...Commands_ArmA2


In der Hauptschleife ist ein Fehler! Die Initialisierungszeilen der Arrays gehören aus diesere Schleife natürlich raus.

Habe ich oben korrigiert.
Vienna ist offline   Mit Zitat antworten
Alt 20.06.2014, 20:01   #9 (permalink)
Newbie
 
Registriert seit: 17.06.2014
Beiträge: 10
Standard

Man kann echt viel machen, nicht nur Geiseln retten usw. sondern was neues.
Auch wenn man nur zwei Sachen, die es schon gibt, kombinieren:
Code:
  if (PlumpsKloManagerWirtschaft and Arma2taktischesVorgehen) then {
  	Durchgeknallt=true;
	Patient = Patient +1;
	hint "Sie werden eingewiesen";
	}
Ok, muss man das Thema jetzt irgend wie als beantwortet abhacken?

Und noch mal danke
JoBro ist offline   Mit Zitat antworten
Alt 22.06.2014, 10:37   #10 (permalink)
SQF Zauberer 10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von Vienna
 
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
Standard Globale Variable, senden dann rechnen

Senden brauchst du die globalen Variablen nur im Mehrspielermodus, falls erforderlich. Diese Variablen sind nur auf dem jeweiligen PC global. Soll eine Inhaltsänderung einer globalen Variablen auch den anderen PCs mitgeteilt werden, dann geht das z.B. mit:

https://community.bistudio.com/wiki/publicVariable
Vienna ist offline   Mit Zitat antworten
Alt 25.06.2014, 15:50   #11 (permalink)
Newbie
 
Registriert seit: 17.06.2014
Beiträge: 10
Standard

Jetzt habe ich grade mit der Array gespiet und da steht ja:

Code:
 Lager     = [[Lager_A,0],[Lager_B,0],[Lager_C,0]];
Code:
	  {
       if(_lkwName distance _x select 0 < 20)exitWith //das _x select 0 ist irgend ein Lager
        {
         LKWs select _i set [1,0];           //LKW entladen
         _x select 1 set [1,(_x select 1)+1] //das _x select 1 ist doch schon der Inhalt
        }
      }forEach Lager;
Müsste da nicht so was stehen:
Code:
	  _x set [1,(_x select 1)+1]
	    }
      }forEach Lager;
Ich kam nicht da zu das auszuprobieren, weil ich grade die ganzen Lektüren durchgehen und leider auch nicht so viel Zeit hatte.
JoBro ist offline   Mit Zitat antworten
Alt 25.06.2014, 22:19   #12 (permalink)
SQF Zauberer 10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von Vienna
 
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
Standard

Da hast du Recht! _x ist das jeweilige mehrdimensionale Array, der Index steht im ersten Feld von set.

Ich habe das wieder oben berichtigt.
Vienna ist offline   Mit Zitat antworten
Antwort

Stichworte
array, globale variable


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
Variable an Server geben zum Zusammenrechnen Nokman Editing & Scripting 3 07.04.2014 12:14
Lokale Variable per ParamsArray Definieren? Kingderek Editing & Scripting 3 03.10.2013 10:15
RPT wird mit "Error Undefined variable in expression" überflutet [GNC]Lord-MDB Editing & Scripting 32 24.08.2013 15:43
Variable auf dem Server ändern sich nicht ! N939 Editing & Scripting 3 26.07.2010 14:36
globale variablen ändern/einstellen Deagle105 Editing & Scripting 9 01.07.2010 10:52


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