Armed-Assault.de Twitter
Antwort
 
Themen-Optionen Ansicht
Alt 07.10.2012, 17:06   #1 (permalink)
50 Beiträge
 
Registriert seit: 30.10.2009
Beiträge: 55
Standard was passt Arma 2 OA hier nicht?

Hi zusammen,
ich habe zum Testen ein Script geschrieben:

Code:
private ["_cnt", "_unit"];

_cnt         = count wmpArrCivPeople;
_unit        = "";


for "_cnt" from 1 to _cnt do
    {
        _unit = wmpArrCivPeople select _cnt;
        hint format ["%1\n%2", _cnt, _unit];
        sleep hintTimeN;
    };
    
hint "Schleife beendet!";
sleep hintTimeD;


if (true) exitWith {};
die beiden globalen Variablen (wmpArrCivPeople & hintTimeN) werden in einem anderen Script gesetzt und werden auch in dem Test-Script angesprochen.
Das Script macht eigentlich was es soll. Array (classnames Zivis) zählen, und dann pro Schleifen-Durchlauf einen Hint mit dem nächsten Array-Element.


Trotzdem bekomme ich immer einen Fehlereintrag in der RPT-Datei:


Code:
Error in expression <lect _cnt;hint format ["%1\n%2", _cnt, _unit];sleep hintTimeN;};hint "Schle>

  Error position: <_unit];sleep hintTimeN;};hint "Schle>
  Error Undefined variable in expression: _unit

File C:\Users\Wesley\Documents\ArmA 2\missions\WMP_Spielwiese.Bootcamp_ACR\scripts\wmp_Testfile.sqf, line 28
Da der Fehler nur einmal in`s RPT geschrieben wird und nicht bei jedem Schleifen-Durchlauf neu, gehe ich davon aus, dass die Variable "_unit" nur beim ersten Schleifen-Durchlauf nicht als definierte Variable erkannt wird. Aber warum?

Wo ist mein Fehler?

Grüße
Wes
Wesley Pipes ist offline   Mit Zitat antworten
Alt 07.10.2012, 17:19   #2 (permalink)
5000 Beiträge
 
Benutzerbild von Xeno
 
Registriert seit: 03.01.2008
Alter: 77
Beiträge: 6.547
Standard

*deleted*

Xeno

Geändert von Xeno (08.12.2013 um 16:28 Uhr).
Xeno ist offline   Mit Zitat antworten
Alt 07.10.2012, 17:19   #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

Hi..

streiche:
Code:
for "_cnt" from 1 to _cnt do
setze:
Code:
for "_i" from 1 to _cnt do
Weiterhin füge hinter Deine Zeile folgendes ein:
Code:
hint format ["%1\n%2", _cnt, _unit];
_cnt = _cnt + 1;
...damit das Script weiß um wieviel _cnt bei jedem Durchlauf erhöht werden muss.
__________________
Buliwyf ist offline   Mit Zitat antworten
Alt 07.10.2012, 17:41   #4 (permalink)
50 Beiträge
 
Registriert seit: 30.10.2009
Beiträge: 55
Standard

Hi,
ich hab´s nun so abgeändert (ich hoffe so hast Du`s gemeint)

Code:
private ["_cnt", "_unit"];

_cnt         = count wmpArrCivPeople;
_unit        = "";


for "_i" from 1 to _cnt do
    {
        _unit = wmpArrCivPeople select _cnt;
        hint format ["%1\n%2", _cnt, _unit];
        _cnt = _cnt + 1;
        sleep hintTimeN;
        
    };
    
hint "Schleife beendet!";
sleep hintTimeD;
Effekt:

Jetzt wird das Array gezählt (88 Elemente)
Ausgabe bei jedem Schleifen-Durchlauf : 88 (immer 1 hochgezählt) <null>
In der RPT wird bei jedem Schleifen-Durchlauf ein Fehler erzeugt:

Error Undefined variable in expression: _unit


EDIT:
nun habe ich das Script so abgeändert:

Code:
private ["_cnt", "_unit"];

_cnt 		= count wmpArrCivPeople;
_i 		= _cnt;
_unit		= "";


for "_i" from 1 to _i do
	{
		_unit = wmpArrCivPeople select _i;
		hint format ["%1\n%2", _i, _unit];
		//_i = _i + 1;
		sleep hintTimeN;
		
	};
	
hint "Schleife beendet!";
sleep hintTimeD;


if (true) exitWith {};
.

der Effekt - wie in meinem Start-Post:
Script macht was es soll, aber beim ersten Schleifen-Durchlauf wird Fehler in´s RPT eingetragen.

Geändert von Wesley Pipes (07.10.2012 um 17:54 Uhr). Grund: Änderung wegen weiterführendem Test
Wesley Pipes ist offline   Mit Zitat antworten
Alt 07.10.2012, 17:55   #5 (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

Hm.. dann folgendes:

Code:
for "_i" from 1 to (_cnt - 1) do
...und/oder nimm mal die Zeile _unit=""; aus dem Script raus.

Hilft beides nicht, dann scheinen mir Deine globalen Variblen nicht zu passen.

__________________
Buliwyf ist offline   Mit Zitat antworten
Alt 07.10.2012, 18:28   #6 (permalink)
50 Beiträge
 
Registriert seit: 30.10.2009
Beiträge: 55
Standard

nach hin und her testen -bin ich zum selben Ergebnis gekommen und jetzt wird´s auch logisch.

Der RPT-Fehler trat nicht beim ersten sondern beim letzten Schleifen-Durchlauf auf.
Der Zähler ist am Ende vom Array angekommen und hat dann noch einen Durchlauf gemacht. Da aber das letzte Array-Element schon aufgerufen wurde, konnte Arma mit dem letzten mal "_unit = wmpArrCivPeople select _cnt;" nichts mehr anfangen.

Danke Euch beiden für die Unterstützung.
Eine Frage noch:
sollte man in einer for-Schleife zwingend die "_i"-Variable nehmen? Ich hab´s jetzt wieder in meiner Ursprungs-Form ohne "_i" und es funzt.

Aber beide seid Ihr auf die Variable in der Abfrage gekommen.

Thx & Gruß
Wesley Pipes ist offline   Mit Zitat antworten
Alt 07.10.2012, 19:15   #7 (permalink)
50 Beiträge100 Beiträge250 Beiträge
 
Benutzerbild von Saint
 
Registriert seit: 04.01.2008
Alter: 43
Beiträge: 306
Standard

Ich denke nicht, das es relevant ist wie die Variablen benannt sind. ob _i,_n oder _k....

Stichwort: Gaußsche Summenformel.
__________________
"Um nirgends eine gähnende Leere zu lassen, wollen wir uns vorstellen, daß aller Orten und zu jeder Zeit etwas Wahrnehmbares vorhanden ist. Um nicht Materie oder Elektrizität zu sagen, will ich für dieses Etwas das Wort Substanz brauchen."

Hermann Minkowski
Saint ist offline   Mit Zitat antworten
Alt 07.10.2012, 22:30   #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

Ich habe den Skript-Code in "spanw" gepackt. Da kannst du ihn zum Testen in "Bei Akt." in einen Funk-Auslöser reinkopieren und über Funk ausführen.

Code:
temp = [wmpArrCivPeople, hintTimeN] spawn
 {
  private ["_units", "_pause"];
  _units = _this select 0;
  _pause = _this select 1;  
  for "_i" from 0 to count _units - 1 do
   {
    hint format ["%1\n%2", 1 + _i, _units select _i];
    sleep _pause
   };
   player groupChat "Schleife beendet!"
 }
Vienna ist offline   Mit Zitat antworten
Alt 08.10.2012, 19:06   #9 (permalink)
50 Beiträge
 
Registriert seit: 30.10.2009
Beiträge: 55
Standard

danke Onkel, danke Vienna.

@Vienna
Mittlerweile funktioniert es auch in meinem Script fehlerfrei.
Der casus knaxus war :

Code:
for _"cnt" from 1 to (_cnt -1) do
beim Aufruf hat das Script einmal zuviel die Schleife ausgeführt, ist aber vorhin schon am Ende des Arrays angekommen und konnte somit mit der letzten Ausführung der Schleife nichts mehr anfangen.

Danke Allen nochmal für die Hilfen - ich bin erst mal zufrieden gestellt.
Bis zur nächsten doofen Frage a ´la Wes

Gruß
der Selbige
Wesley Pipes ist offline   Mit Zitat antworten
Alt 08.10.2012, 22:04   #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

Fehlerfrei? Du solltes den Code von mir genau beachten!

Es hat ja einen Grund warum _cnt - 1 sein muss ... weil der Index im Array bei 0 beginnt.

Darum: for "_i" from 0 to count _cnt - 1 do ...

Sonst bleibt der erste Array-Inhalt unberücksichtigt!


Da du globale Variable verwendest, würde in deiner Variante das Skript optimal so aussehen:

Code:
for "_i" from 0 to count wmpArrCivPeople - 1 do
 {
  hint format ["%1\n%2", 1 + _i, wmpArrCivPeople select _i];
  sleep hintTimeN
 };
Bis auf das "_i" gibt keine lokale Variable.

Es ist aber nach Möglichkeit zu vermeiden in Skripten globale Variable zu verwenden. Darum habe ich im vorherigen Posts diese Variablen dem Code als Parameter übergeben. Auch ist so der Code ohne Änderung für andere Daten verwendbar.
Vienna ist offline   Mit Zitat antworten
Alt 08.10.2012, 23:57   #11 (permalink)
50 Beiträge
 
Registriert seit: 30.10.2009
Beiträge: 55
Standard

hmm ich dachte schon dass es so wie ich es am Schluß hatte funktionierte.

Mein globales Array besteht aus Civi-Classnames - insgesammt 88 Elemente.
Das ertse Element ist "Assistant" und das letzte Element ist "Rita_Ensler_EP1".

In der Hint-Ausgabe erwarte ich (Zeilenumbruch \n unbeachtet)
1 Assistant
2 Citizen1
...
88 Rita_Ensler_EP1

Und so passiert es auch.
Und es wird kein Fehler im RPT erzeugt.

Hat sich aber mittlerweile "erledigt", weil ich schon wieder ein ganzes Stück weiter mit meinem "Testscript" bin.
Bisher macht es was es soll und es werden keine Fehler erzeugt.

Trotzdem Danke vienna - mir geht in vielen Sachen noch das Hintergrund-Wissen ab und ich wiesel mich so mit Versuch, Fehlschlag (*x), Versuch, Erfolg, Erkenntnis, etc. durch die Scripterei.
Ich werde mit Sicherheit Deinen Post noch ein paar mal "nachschlagen" ;-)

Gruß
Wesley Pipes ist offline   Mit Zitat antworten
Alt 09.10.2012, 00:24   #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

array = [1,2,3]
index -> 0 1 2

count array gibt 3 aus!

for "_i" from 1 to 3 enthält 2 Fehler!

array select _i beginnt mit Index 1 und endet mit Index 3. Index 0 wird ausgelassen und Index 3 gibt es nicht.

Daher: for "_i" from 0 to 3 - 1
Vienna ist offline   Mit Zitat antworten
Alt 09.10.2012, 15:14   #13 (permalink)
Newbie
 
Registriert seit: 24.11.2011
Ort: Wien
Alter: 45
Beiträge: 30
Standard

Yup! Kann nur so gehen, wie es Vienna erklärt.

for "_i" from 0 to <anzahl der Felder im Array> - 1
Troublemaker 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
ArmA Wargames mwd2 Die Litfaßsäule 4 18.10.2012 20:37
Patch 1.60! Xeno Community 69 11.01.2012 12:41
1.60 rc Dieter66 Community 47 22.12.2011 15:49
ArmA 2 DVD - ArmA OA Steam | Probleme und Hilfesuche Console Technische Fragen & Probleme 17 01.03.2011 10:25
ArmA 2 - ACE 2 Missionen in Combined Operations funktionieren nicht Flo66 Mods & Addons 4 19.08.2010 12:17


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