07.10.2012, 18:06 | #1 (permalink) |
Registriert seit: 30.10.2009
Beiträge: 59
|
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 {}; 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 Wo ist mein Fehler? Grüße Wes |
07.10.2012, 18:19 | #3 (permalink) |
Registriert seit: 11.03.2005
Ort: HH
Alter: 52
Beiträge: 1.930
|
Hi..
streiche: Code:
for "_cnt" from 1 to _cnt do Code:
for "_i" from 1 to _cnt do Code:
hint format ["%1\n%2", _cnt, _unit]; _cnt = _cnt + 1; |
07.10.2012, 18:41 | #4 (permalink) |
Registriert seit: 30.10.2009
Beiträge: 59
|
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; 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 18:54 Uhr). Grund: Änderung wegen weiterführendem Test |
07.10.2012, 19:28 | #6 (permalink) |
Registriert seit: 30.10.2009
Beiträge: 59
|
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ß |
07.10.2012, 20:15 | #7 (permalink) |
Registriert seit: 04.01.2008
Alter: 50
Beiträge: 314
|
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
|
07.10.2012, 23:30 | #8 (permalink) |
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
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!" } |
08.10.2012, 20:06 | #9 (permalink) |
Registriert seit: 30.10.2009
Beiträge: 59
|
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 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 |
08.10.2012, 23:04 | #10 (permalink) |
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
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 }; 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. |
09.10.2012, 00:57 | #11 (permalink) |
Registriert seit: 30.10.2009
Beiträge: 59
|
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ß |
09.10.2012, 01:24 | #12 (permalink) |
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
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 |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
Themen-Optionen | |
Ansicht | |
|
|
Ähnliche Themen | ||||
Thema | Autor | Forum | Antworten | Letzter Beitrag |
ArmA Wargames | mwd2 | Die Litfaßsäule | 4 | 18.10.2012 21:37 |
Patch 1.60! | Xeno | Community | 69 | 11.01.2012 13:41 |
1.60 rc | Dieter66 | Community | 47 | 22.12.2011 16:49 |
ArmA 2 DVD - ArmA OA Steam | Probleme und Hilfesuche | Console | Technische Fragen & Probleme | 17 | 01.03.2011 11:25 |
ArmA 2 - ACE 2 Missionen in Combined Operations funktionieren nicht | Flo66 | Mods & Addons | 4 | 19.08.2010 13:17 |