Armed-Assault.de Twitter
Antwort
 
Themen-Optionen Ansicht
Alt 09.03.2013, 14:10   #1 (permalink)
Newbie
 
Registriert seit: 03.06.2009
Beiträge: 46
Standard warum, wieso, weshalb der Fehler?

Ich will ein Zielobjekt an eine Position verschieben lassen, welche durch einen RANDOM-WERT und IF/THEN/ELSE ermittelt wird.

Der RANDOM-Wert wird ordentlich erzeugt. Doch springt er immer ins erste IF. Selbst wenn der Random-Wert größer als "1" ist. Auch wenn ich zb. statt "<" ein "==" nutze, geht er ins ins erste IF.

WARUM?

Tarsius ist offline   Mit Zitat antworten
Alt 09.03.2013, 14:25   #2 (permalink)
Imperator fori nocturni - This sucks more than anything that has ever sucked before 10 Jahre hx3
20.000 Beiträge
 
Benutzerbild von burns
 
Registriert seit: 13.04.2003
Ort: Monerica
Alter: 35
Beiträge: 32.254
Standard

Hatten wir erst kürzlich, Random erzeugt Gleitkommazahlen, die Chance das 1,2 oder 3 rauskommt folglich eher gering. Da darfst du dann mit floor oder ceil rumtricksen: http://community.bistudio.com/wiki/Math_Commands


edit: Ah, das stand ja sogar in deinem Bild das da keine grade Zahl rauskam
__________________

burns ist offline   Mit Zitat antworten
Alt 09.03.2013, 15:51   #3 (permalink)
Newbie
 
Registriert seit: 03.06.2009
Beiträge: 46
Standard

Wie jetzt? Die scrip-sprache kann keine "ganze Zahl" mit einer "reellen Zahlen vergleichen"? Wie gesagt geht es mir ja nicht darum einen "==" Vergleich machen. Sondern lediglich zu ermitteln das zb. "2.45218" nicht kleiner "1" ist. oO

Ergo müsste es helfen "_start = floor _start;" drunter zu klatschen, und dann mit "==" prüfe?

EDIT: Ich ging davon aus, das es eh nur "number" als Zahlentyp gibt. Wird wirklich wie in C zwischen int, float, double und co. differenziert?

Geändert von Tarsius (09.03.2013 um 15:57 Uhr).
Tarsius ist offline   Mit Zitat antworten
Alt 09.03.2013, 15:57   #4 (permalink)
50 Beiträge100 Beiträge250 Beiträge
 
Benutzerbild von Rettich
 
Registriert seit: 06.04.2008
Ort: bei Kiel
Alter: 44
Beiträge: 313
Rettich eine Nachricht über Skype™ schicken
Standard

Die random- Geschichten mach ich immer so...

start= 999;
if (isServer) then {
start = round random 3;
publicVariable "start";
}
else {
waitUntil {start != 999};
};

//start= 0;

switch (start) do {
case 0: { Marken_1 setpos getpos SP1; };
case 1: { Marken_1 setpos getpos SP2; };
case 2: { Marken_1 setpos getpos SP3; };
case 3: { Marken_1 setpos getpos SP1; };
};

start= 999;


Mit der "start=... " Zeile kannst du die einzelnen cases testen.
Rettich ist offline   Mit Zitat antworten
Alt 09.03.2013, 16:54   #5 (permalink)
Newbie
 
Registriert seit: 03.06.2009
Beiträge: 46
Standard

Danke Rettich. Werde es wenn ich von Arbeit komme mal testen. Zwar ist die Wahrscheinlichkeit auf "SP1" so um 3% höher als bei den anderen Beiden. xD
Aber darauf ist ja geschissen.
Tarsius ist offline   Mit Zitat antworten
Alt 10.03.2013, 02:58   #6 (permalink)
Newbie
 
Registriert seit: 03.06.2009
Beiträge: 46
Standard

Also mit switch schaltet er komplett auf stur.

Code:
_start = round random 3;

switch (_start) do {
    case 0: { Obj_Mis_Target setpos getpos Obj_Mis_01; };
    case 1: { Obj_Mis_Target setpos getpos Obj_Mis_02; };
    case 2: { Obj_Mis_Target setpos getpos Obj_Mis_03; };
    case 3: { Obj_Mis_Target setpos getpos Obj_Mis_01; };
};
Es wird kein CASE ausgelöst, obwohl die Zahl korrekt auf 0,1,2,3 gerundet wird.

Und auch im Hauptfall bleibt das Problem erhalten.

Ich mein. Warum in drei Teufels Namen, geht er mit ner "2" überhaupt ins erste IF rein, wenn dessen "Zugang" nur für 1 gestattet ist?


Geändert von Tarsius (10.03.2013 um 03:02 Uhr).
Tarsius ist offline   Mit Zitat antworten
Alt 10.03.2013, 10:15   #7 (permalink)
50 Beiträge100 Beiträge
 
Registriert seit: 01.06.2009
Beiträge: 103
Standard

Du wärst wohl besser früher ins Bett gegangen.

Du hast zum einen vergessen die If- Abfragen mit ";" zu beenden, was auch entsprechend in der ArmA3.rpt vermerkt wird (bitte doch immer zuerst mal da nachgucken, bevor man in einem Forum um Hilfe ersucht).

Zum anderen verwendest Du "exit" in einem sqf- Script. Das wird dort ignoriert. Das kann man bloss in einem sqs- Script verwenden. Daher funktioniert Dein Vorhaben so auch dann nicht befriedigend, wenn Du die Strichpunkte korrekt setzt. Steht _start auf 2 oder 3 klappts ordentlich. Steht _start auf 1 wird die erste If- Abfrage korrekt ausgeführt und danach der else- Teil der zweiten If- Abfrage. Steht _start auf 0 dann wird natürlich auch wieder der Else- Teil der zweiten if- Abfrage ausgeführt.

switch- do - case bietet sich - wie von Rettich schon angemerkt - als Lösung an.

Edit: Die von Dir gepostete switch - do - case -Abfrage schaltet nicht auf stur. Es wird dabei korrekt auf den case- Abschnitt gesprungen welcher dem Wert von _start entspricht. Das Problem muss also beim Code innerhalb des case -Blocks liegen
Code:
Obj_Mis_Target setpos getpos Obj_Mis_01;
. Was sagt den die ArmA3.rpt dazu?

Geändert von Asso-Loki (10.03.2013 um 10:26 Uhr).
Asso-Loki ist offline   Mit Zitat antworten
Alt 10.03.2013, 11:55   #8 (permalink)
Newbie
 
Registriert seit: 03.06.2009
Beiträge: 46
Standard

Jipp, Bett wäre ne gute Idee gewesen. Vorallem weil ich wieder auf dem Weg zur Arbeit bin. xD

Ich hab gestern auch schon mal hinter "}" ein ";" gesetzt. Es ändert leider nichts. Es werden in beiden Fällen auch keine Beschwerden gemeldet. (Ich starte über diese Kommandozeilen-Erweiterung die einem Scripfehler ingame meldet.)

Auch wenn ich _start explizit eine "2" oder "3" zuweise geht er ins erste IF. Demnach fällt ein Fehler mit "round" oder "random" auch aus.

Zumal es eben (für mich persönlich) nicht erklärt, warum er mit ner 2 oder 3 ins erste IF geht. Er könnte gleich ans ende wackeln, oder nen Fehler melden wenn es an den ";" liegt. Aber rein zu gehen, ist für mich das Unlogischste.

Beim CASE habe ich mir zum debugen auch einfach nur mal nen Text ausgeben lassen. Jedoch kam keiner. Er ist in keine CASE-Ebene gesprungen. Demnach konnte es nicht an der Zeile mit der "Zuweisung" liegen. Zumal diese Zuweisung korrekt funktioniert, wenn ich sie einfach nur in die Datei ballere.

Für den Hinweis mit dem Exit danke ich dir. Ist gut zu wissen. Ich werde es mir heut abend noch mal zu Gemüte führen.

Kann es ja mal über ne Verschachtelung versuchen, in der ich die beiden anderen Optionen ins ELSE des ersten IF`s packe.

Code:
IF {1} THEN {Pos01} ELSE { IF {2} THEN {Pos02} ELSE { Pos03 };};
Wobei es ja theoretisch keinen Unterschied machen dürfte. oO

Wünsche allen einen schönen Sonntag.
Tarsius ist offline   Mit Zitat antworten
Alt 10.03.2013, 13:21   #9 (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

Code:
_objekte = [Obj_Mis_01,Obj_Mis_02,Obj_Mis_03,Obj_Mis_04];
Obj_Mis_Target setpos (getpos(_objekte select(floor(random(count _objekte)))));
Die Anzahl der Objekte in _objekte ist egal.


ALICE und SILVIE
Vienna ist offline   Mit Zitat antworten
Alt 10.03.2013, 14:09   #10 (permalink)
50 Beiträge100 Beiträge
 
Registriert seit: 01.06.2009
Beiträge: 103
Standard

Ich habe - gewissenhaft wie ich bin - natürlich sowohl Deine If- Variante wie auch Deine switch-do-case Geschichte brav nachgestellt (bei der If- Variante sogar ohne ";") und überprüft. Die fehlenden ";" werden in der ArmA3.rpt als Fehler eingetragen. Mit ";" entspricht das Verhalten dem von mir beschrieben. Die switch-do-case flutscht absolut sauber.

Aaaaabeeeer, nimm einfach Viennas Variante. Sauber, effizient, übersichtlich...schlicht die optimale Wahl.
Asso-Loki ist offline   Mit Zitat antworten
Alt 10.03.2013, 16:58   #11 (permalink)
Newbie
 
Registriert seit: 03.06.2009
Beiträge: 46
Standard

Danke Asso-Loki für die Mühe. Werde es heut Abend noch einmal testen. Auch wenn ich wie du schon sagst, wohl eher zu Vienna`s Variante greife. Die sieht einfach charmant aus.
Tarsius 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
GUI Fehler Jack4576 Technische Fragen & Probleme 0 02.02.2013 22:07
Fehler in meiner Mission. Script Fehler? Feldmarschall Editing & Scripting 4 08.10.2012 19:52
Arma 2 CRC Fehler nochance4u Technische Fragen & Probleme 7 07.09.2012 16:28
Fehler beim Laden einer gespeicherten Mission TeTeT Editing & Scripting 0 12.12.2011 14:39
Söldner Secret Wars Termi Action & Shooter 27 10.08.2011 09:46


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