![]() |
#1 (permalink) |
![]() |
![]()
Hallo zusammen,
ich habe einen Range gebaut, mittels des Befehls: "nopop=true" habe ich einige Ziele so eingestellt das sie nicht wieder aufstehen. Das lief auch soweit ganz gut. Nun stellte ich aber fest, sobald ich das "nopop=true" bei 1 Target in die init schreibe das er das wohl überall ausführt -.-. Auch soweit noch nicht schlimm, schlimm wird es erst jetzt wo ich für eine Range möchte das diese Targets wieder aufstehen. Wie kriege ich das am besten gelöst? Den sobald ich bei diesen bestimmten Targets "nopop=false" reinkloppe bricht das totale chaos aus ![]() Danke für eure Hilfe!
__________________
![]() |
![]() |
![]() |
#2 (permalink) |
![]() ![]() ![]() ![]() Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
![]()
Ich nehme an nopop ist eine globale Variable, welche als "Schalter" steuert ob sich eine getroffene Zielscheibe wieder aufstellt oder nicht.
Wenn du die Ziele einzeln (oder in Gruppen) steuern willst, dann brauchst du für jedes Ziel (oder Gruppe) einen eigenen "Schalter". Um die Ursache des Chaos zu beurteilen, müsste man die Programmroutine kennen, mit der du das steuerst. |
![]() |
![]() |
#3 (permalink) |
![]() |
![]()
Hallo,
wir haben einen großen CQB Übungsplatz gebaut, da sollen die Ziele wie man es kennt automatisch aufstehen. Hier wurden die nur hingestellt und sonst nichts. Beim Schießstand ist es gewollt das die Scheiben am boden bleiben. Deshalb hab ich dort den Befehl überall in die Init Felder der Scheiben gesteckt. Wenn dann jemand da schießen will geht er an die Tafel des jeweiligen Standes und aktiviert die Schilder. Es wird dort ein Script aufgerufen welches die 10 Schilder per Random hochstellt. Insgesamt 30 mal passiert das. Scripttechnisch habe ich das ganz simpel mit einer Case abfrage geregelt. Der Random Wert bestimmt welche Scheibe kurz hochgeht und das wars. Danke für deine Hilfe
__________________
![]() |
![]() |
![]() |
#4 (permalink) |
![]() ![]() ![]() Registriert seit: 11.03.2005
Ort: HH
Alter: 52
Beiträge: 1.930
|
![]()
Grandios beschrieben.. hilft nur keinem wirklich weiter... das Script wäre hilfreich...
![]() Aber wie Vienna schon sagt, benutze für jede Scheibe eine eigene Variable... ansonsten is klar, dass da ein Chaos entsteht, wenn alle Scheiben die gleiche Variable nutzen. Nurr weil Du die Variable in jede einzelne Init-Zeile der Scheibe schreibst, heisst das nicht, das die nur lokal für die Scheibe zugewiesen ist... ![]() |
![]() |
![]() |
#5 (permalink) |
![]() |
![]()
Bin leider nicht zuhause, hab das Script nicht hier daher hatte ich versucht es grob zu erklären
![]() ok eigene Variable sagst du, das heißt wenn ich: Code:
_targets = [pt1,pt1_1, pt1_2, pt1_3, pt1_4, pt1_5, pt1_6, pt1_7]; _many = count _targets; nopop=true; //Pseudocode: Randomwert Generieren Schleife 30x wiederholen -> Case (Caseabfrage checkt Randomwert) Case Randomwert = 1 -> Zielscheibe 1 Case Randomwert = 2 -> Zielscheibe 2 . . . Schleife ende <- nopop=false; // Damit die Targets sich wieder normal verhalten P.S Hab mich gerade mal dieses Scriptes bedient: Armaholic - FORUMS - Popup Targets Hint Besten dank euch!
__________________
![]() |
![]() |
![]() |
#6 (permalink) |
![]() ![]() ![]() ![]() Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
![]()
Aus deinem oder dem Skirpt von Armaholic ist nicht ersichtlich welche Auswirkung die Variable nopop hat. Vermutlich soll durch diese Variable der Aufruf des Skripts an anderer Stelle verhindert werden.
Beim Spielstart muss die Variable nopop=false initialisiert sein. Einmalig nur beim Spielstart! Sonst wird der Zustand der Variablen nur mehr im Skript geändert. Die Bedingungen für den Skriptaufruf könnte dann so lauten: BedingungDesSchießstandes and not nopop Beim Start des Skript sperrt es dann den Aufruf für andere Bedingungen mit nopop=true und gibt den Aufruf am Ende mit nopop=false wieder allgemein frei. Dein Problem liegt vermutlich bei den Bedingungen für den Skriptaufruf bei den einzelnen Schießständen. Edit: Wenn du das Skript für mehrere Schießstände verwenden willst, dann übergib die List der Scheibennamen als Parameter. |
![]() |
![]() |
#8 (permalink) |
![]() ![]() ![]() ![]() Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
![]()
Beim Skriptaufruf z.B. in einem Auslöser.
temp = [[pt1,pt1_1, pt1_2, pt1_3, pt1_4, pt1_5, pt1_6, pt1_7], 20] execVM "Skript.sqf" Im Skript dann die Scheiben übernehmen mit: _targets = _this select 0; Die Anzahl der Wiederholungen mit: _wiederholen = _this select 1; So kannst du das Skript für verschiedene Scheiben mit verschiedener Anzahl von Wiederholungen verwenden. Mit dem Skript vom Armaholic würde das dann so aussehen. Code:
// Aufruf in Auslöser: temp = [[Scheibe1, Scheibe2,...],20] execVM "SkriptName.sqf" // die 20 steht für die Wiederhloungen. _targets = _this select 0; _wiederholen = _this select 1; _inc = 0; _count = 0; _many = count _targets; nopop=true; {_x animate["terc",1]} forEach _targets; while {_inc < _wiederholen} do { _rnumber = floor (random _many); _rtarget = _targets select _rnumber; _rtarget animate["terc", 0]; sleep 6; if (_rtarget animationPhase "terc" > 0.1) then { _count = _count+1; }; hint format ["Targets :%1 Hit :%2",_inc+1,_count]; _rtarget animate["terc", 1]; _inc = _inc + 1; }; nopop=false; |
![]() |
![]() |
#9 (permalink) |
![]() ![]() ![]() ![]() Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
![]()
Das Skript funktioniert nicht mit den Pappscheiben, man muss die "Zielscheibe(klein)" verwenden!
Getroffene Scheiben spinnen aber. Sie stellen sich danach unkontrolliert auf. Das wird im folgenden Skript verhindert. Es gibt auch eine Test-Mission im Anhang. Code:
//Zielscheiben zufällig aufklappen [Vienna 26.01.2012 Arma2] // // !!! "Zielscheibe(klein)" verwenden !!! // // Aufruf in Auslöser: temp = [[Scheibe1, Scheibe2,...],20] execVM "ZielScheiben.sqf" // die 20 steht für die Wiederhloungen. private ["_zielscheiben","_wiederholen","_i","_treffer","_anzahl","_scheibe","_zeit","_alt"]; _zielscheiben = _this select 0; _wiederholen = _this select 1; _treffer = 0; _anzahl = count _zielscheiben; //alle Scheiben umlegen titleText ["Warten auf Feuerbefehl!","plain"]; {_x animate["terc",1]} forEach _zielscheiben; sleep 3; titleText ["\n\n\nFeuer frei!","plain"]; //Runden starten for "_i" from 1 to _wiederholen do { //Erste Scheibe auswählen if(_i==1)then{_scheibe=_zielscheiben select(floor(random _anzahl))}; //Scheibe aufrichten _scheibe animate["terc", 0]; //Maximale Zeit zum Schießen (minimum 4 Sekunden) _zeit = time + 6; sleep 4; //Mindestwarten bis Scheibe steht bzw. die vorherige umgelegt wird //Trefferabfrage waituntil {time > _zeit or _scheibe animationPhase "terc" > 0.2}; if (_scheibe animationPhase "terc" > 0.2) then { _treffer = _treffer+1 }; //Trefferanzeige Zwischenergebnis hint format ["\nZiele: %1\n\nGetroffen: %2",_i,_treffer]; //Scheibe in _alt speichern _alt = _scheibe; //Unterroutine welche die Scheibe jetzt 3 Sekunden lang umlegt _alt spawn { private "_r"; for "_r" from 1 to 30 do { _this animate["terc", 1]; //Scheibe umlegen sleep 0.1 } }; //Weitere Scheibe (darf nicht die vorherige sein) while {_scheibe==_alt}do{_scheibe=_zielscheiben select(floor(random _anzahl))}; //Treffer Endergebnis anzeigen if (_i==_wiederholen) then {titleText [format ["%1 Ziele. Davon %2 getroffen.",_i,_treffer],"plain"]}; }; |
![]() |
![]() |
#11 (permalink) |
![]() |
![]()
Ich habe das Script jetzt mal versucht für 2 Ziele umzuschreiben.
Allerdings ist nun das Problem wenn: Runde 1: Target 1 Target 2 Runde 2: Target 4 Target 1 Ein Ziel in der Runde vorher schonmal genutzt wurde stellt sich dieses nicht auf :-( Anderes Problem ist wenn per Random 2x die gleichen Werte gewürfelt werden dann steht auch nur 1 Target. Da würd ich aber einfach eine IF machen das er nochmal würfeln sollte sofern _scheibe und _scheibe2 gleiche Werte haben. thx4help Code:
//Zielscheiben zufällig aufklappen [Vienna 26.01.2012 Arma2] // // !!! "Zielscheibe(klein)" verwenden !!! // // Aufruf in Auslöser: temp = [[Scheibe1, Scheibe2,...],20] execVM "ZielScheiben.sqf" // die 20 steht für die Wiederhloungen. private ["_zielscheiben","_wiederholen","_i","_treffer","_anzahl","_scheibe","_scheibe2","_zeit","_alt"]; _zielscheiben = _this select 0; _wiederholen = _this select 1; _treffer = 0; _anzahl = count _zielscheiben; //alle Scheiben umlegen titleText ["Warten auf Feuerbefehl!","plain"]; {_x animate["terc",1]} forEach _zielscheiben; sleep 3; titleText ["\n\n\nFeuer frei!","plain"]; //Runden starten for "_i" from 1 to _wiederholen do { //Erste Scheibe auswählen if(_i==1) then { _scheibe=_zielscheiben select(floor(random _anzahl)); player sidechat format ["Target: %1",_scheibe]; _scheibe2=_zielscheiben select(floor(random _anzahl)); player sidechat format ["Target: %1",_scheibe2]; }; //Scheibe aufrichten _scheibe animate["terc", 0]; _scheibe2 animate["terc", 0]; //Maximale Zeit zum Schießen (minimum 4 Sekunden) _zeit = time + 6; sleep 4; //Mindestwarten bis Scheibe steht bzw. die vorherige umgelegt wird //Trefferabfrage waituntil {time > _zeit or _scheibe animationPhase "terc" > 0.2 AND _scheibe2 animationPhase "terc" > 0.2}; if (_scheibe animationPhase "terc" > 0.2) then { _treffer = _treffer+1 }; if (_scheibe2 animationPhase "terc" > 0.2) then { _treffer = _treffer+1 }; //Trefferanzeige Zwischenergebnis hint format ["\nZiele: %1\n\nGetroffen: %2",_i,_treffer]; //Scheibe in _alt speichern _alt = _scheibe; _alt2 = _scheibe2; //Unterroutine welche die Scheibe jetzt 3 Sekunden lang umlegt _alt spawn { private "_r"; for "_r" from 1 to 30 do { _this animate["terc", 1]; //Scheibe umlegen sleep 0.1 } }; _alt2 spawn { private "_r"; for "_r" from 1 to 30 do { _this animate["terc", 1]; //Scheibe umlegen sleep 0.1 } }; //Weitere Scheibe (darf nicht die vorherige sein) while {_scheibe==_alt}do{_scheibe=_zielscheiben select(floor(random _anzahl))}; player sidechat format ["Target: %1",_scheibe]; while {_scheibe2==_alt2}do{_scheibe2=_zielscheiben select(floor(random _anzahl))}; player sidechat format ["Target: %1",_scheibe2]; //Treffer Endergebnis anzeigen if (_i==_wiederholen) then {titleText [format ["%1 Ziele. Davon %2 getroffen.",_i,_treffer],"plain"]}; }; {_x animate["terc",0]} forEach _zielscheiben;
__________________
![]() |
![]() |
![]() |
#12 (permalink) |
![]() ![]() ![]() ![]() Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
![]()
Ich habe geändert, dass die selbe Scheibe nicht gewählt wird. Vielleicht ist dann auch der andere Fehler weg.
In waituntil war die Abfrage falsch. Bei a oder b und c muss immer c wahr sein. Wenn a allein wahr ist, wird nicht ausgelöst. Richtig ist: a oder (b und c) Hier wird ausgelöst wen a wahr ist oder b und c. Code:
//Zielscheiben zufällig aufklappen [Vienna 26.01.2012 Arma2] // // !!! "Zielscheibe(klein)" verwenden !!! // // Aufruf in Auslöser: temp = [[Scheibe1, Scheibe2,...],20] execVM "ZielScheiben.sqf" // die 20 steht für die Wiederhloungen. private ["_zielscheiben","_wiederholen","_i","_treffer","_anzahl","_scheibe","_scheibe2","_zeit","_alt"]; _zielscheiben = _this select 0; _wiederholen = _this select 1; _treffer = 0; _anzahl = count _zielscheiben; //alle Scheiben umlegen titleText ["Warten auf Feuerbefehl!","plain"]; {_x animate["terc",1]} forEach _zielscheiben; sleep 3; titleText ["\n\n\nFeuer frei!","plain"]; //Runden starten for "_i" from 1 to _wiederholen do { //Erste Scheibe auswählen if(_i==1) then { _scheibe=_zielscheiben select(floor(random _anzahl)); player sidechat format ["Target: %1",_scheibe]; _scheibe2=_zielscheiben select(floor(random _anzahl)); //wenn die selbe Scheibe gewählt wurde, dann nochmals wählen while {_scheibe==_scheibe2}do{_scheibe2=_zielscheiben select(floor(random _anzahl))}; player sidechat format ["Target: %1",_scheibe2]; }; //Scheibe aufrichten _scheibe animate["terc", 0]; _scheibe2 animate["terc", 0]; //Maximale Zeit zum Schießen (minimum 4 Sekunden) _zeit = time + 6; sleep 4; //Mindestwarten bis Scheibe steht bzw. die vorherige umgelegt wird //Trefferabfrage waituntil {time > _zeit or (_scheibe animationPhase "terc" > 0.2 AND _scheibe2 animationPhase "terc" > 0.2)}; if (_scheibe animationPhase "terc" > 0.2) then { _treffer = _treffer+1 }; if (_scheibe2 animationPhase "terc" > 0.2) then { _treffer = _treffer+1 }; //Trefferanzeige Zwischenergebnis hint format ["\nZiele: %1\n\nGetroffen: %2",_i,_treffer]; //Scheibe in _alt speichern _alt = _scheibe; _alt2 = _scheibe2; //Unterroutine welche die Scheibe jetzt 3 Sekunden lang umlegt _alt spawn { private "_r"; for "_r" from 1 to 30 do { _this animate["terc", 1]; //Scheibe umlegen sleep 0.1 } }; _alt2 spawn { private "_r"; for "_r" from 1 to 30 do { _this animate["terc", 1]; //Scheibe umlegen sleep 0.1 } }; //Weitere Scheibe (darf nicht die vorherige sein) while {_scheibe==_alt or _scheibe==_alt2}do{_scheibe=_zielscheiben select(floor(random _anzahl))}; player sidechat format ["Target: %1",_scheibe]; while {_scheibe2==_alt2 or _scheibe2==_alt or _scheibe2==_scheibe}do{_scheibe2=_zielscheiben select(floor(random _anzahl))}; player sidechat format ["Target: %1",_scheibe2]; //Treffer Endergebnis anzeigen if (_i==_wiederholen) then {titleText [format ["%1 Ziele. Davon %2 getroffen.",_i,_treffer],"plain"]}; }; {_x animate["terc",0]} forEach _zielscheiben; |
![]() |
![]() |
#14 (permalink) |
![]() ![]() ![]() ![]() Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
![]()
Es scheint mir besser dafür Gruppen zu bilden und die Scheiben über globale Variablen mit einem Skript für jede Scheibe zu steuern.
Das Skript und die globalen Variablen jeder Gruppe haben einen anderen Namen (fett hervorgehoben). Wie das Skript zu verwenden ist siehe in der Beschreibung im Skript. Code:
/** * Zielscheibe steuern * * Aufruf in der Initialisieurngszeile jeder Scheibe der Gruppe: * temp = this execVM "Gruppe_1.sqf" * * Verwendet 2 globale Variable die für jede Gruppe eine anders Skript * und andere "laufende" Nummern haben müssen * * Scheiben_1_auf true stellt die Scheiben auf. * Ist beim Spielstart auf false zu initialisieren. * * Scheiben_1_treffer für das Speichern der Treffer der Gruppe. * Ist beim Spielstart auf 0 zu initialisieren. **/ private ["_scheibe","_zeit"]; _scheibe = _this; _scheibe animate["terc", 1]; //Scheibe beim Start umlegen //Dauerschleife sleep 3; while {true}do { waituntil {Scheiben_1_auf}; //Warten auf Aufstellbefehl _zeit = time + 6; //Scheibe 6 Sekunden sichtbar (mindestens 4) _scheibe animate["terc", 0]; //Scheibe aufrichten //Warten auf Zeitablauf oder Treffer waituntil {time > _zeit or _scheibe animationPhase "terc" > 0.2}; //Trefferabfrage if (_scheibe animationPhase "terc" > 0.2) then { Scheiben_1_treffer = Scheiben_1_treffer + 1 }; //Scheibe 3 Sekunden lang umlegen for "_i" from 1 to 30 do { _scheibe animate["terc", 1]; //Scheibe umlegen sleep 0.1 }; Scheiben_1_auf = false } |
![]() |
![]() |
#15 (permalink) |
![]() |
![]()
Ich hab das ganze ein wenig anders gemacht:
Code:
//Zielscheiben zufällig aufklappen [Vienna 26.01.2012 Arma2] // // !!! "Zielscheibe(klein)" verwenden !!! // // Aufruf in Auslöser: temp = [[Scheibe1, Scheibe2,...],20] execVM "ZielScheiben.sqf" // die 20 steht für die Wiederhloungen. private ["_wiederholen","_i","_treffer","_anzahl","_anzahlAusw","_zeit","_alt0","_alt1","_alt2","_alt3"]; private ["_zielschGrp0","_zielschGrp1","_zielschGrp2","_zielschGrp3"]; private ["TmpTar00","TmpTar01","TmpTar02","TmpTar03"]; private ["rNumber","rNumberOld"]; _zielschGrp0 = _this select 0; _zielschGrp1 = _this select 1; _zielschGrp2 = _this select 2; _zielschGrp3 = _this select 3; _wiederholen = _this select 4; _treffer = 0; _anzahl = count _zielscheiben; _anzahlAusw = _anzahl * 4; _rNumber = round random 3; switch (_rNumber) do { case 0: { player sidechat format ["Gruppe 1"]; TmpTar00 = _zielschGrp0 select 0; TmpTar01 = _zielschGrp0 select 1; TmpTar02 = _zielschGrp0 select 2; TmpTar03 = _zielschGrp0 select 3; }; case 1: { player sidechat format ["Gruppe 2"]; TmpTar00 = _zielschGrp1 select 0; TmpTar01 = _zielschGrp1 select 1; TmpTar02 = _zielschGrp1 select 2; TmpTar03 = _zielschGrp1 select 3; }; case 2: { player sidechat format ["Gruppe 3"]; TmpTar00 = _zielschGrp2 select 0; TmpTar01 = _zielschGrp2 select 1; TmpTar02 = _zielschGrp2 select 2; TmpTar03 = _zielschGrp2 select 3; }; case 3: { player sidechat format ["Gruppe 4"]; TmpTar00 = _zielschGrp3 select 0; TmpTar01 = _zielschGrp3 select 1; TmpTar02 = _zielschGrp3 select 2; TmpTar03 = _zielschGrp3 select 3; }; }; //alle Scheiben umlegen titleText ["Warten auf Feuerbefehl!","plain"]; {_x animate["terc",1]} forEach _zielschGrp0; {_x animate["terc",1]} forEach _zielschGrp1; {_x animate["terc",1]} forEach _zielschGrp2; {_x animate["terc",1]} forEach _zielschGrp3; sleep 3; titleText ["\n\n\nFeuer frei!","plain"]; //Runden starten for "_i" from 1 to _wiederholen do { //Scheibe aufrichten TmpTar00 animate["terc", 0]; TmpTar01 animate["terc", 0]; TmpTar02 animate["terc", 0]; TmpTar03 animate["terc", 0]; //Maximale Zeit zum Schießen (minimum 4 Sekunden) _zeit = time + 6; sleep 4; //Mindestwarten bis Scheibe steht bzw. die vorherige umgelegt wird //Trefferabfrage waituntil {time > _zeit or (TmpTar00 animationPhase "terc" > 0.2 AND TmpTar01 animationPhase "terc" > 0.2 AND TmpTar02 animationPhase "terc" > 0.2 AND TmpTar03 animationPhase "terc" > 0.2)}; if (TmpTar00 animationPhase "terc" > 0.2) then { _treffer = _treffer+1 }; if (TmpTar01 animationPhase "terc" > 0.2) then { _treffer = _treffer+1 }; if (TmpTar02 animationPhase "terc" > 0.2) then { _treffer = _treffer+1 }; if (TmpTar03 animationPhase "terc" > 0.2) then { _treffer = _treffer+1 }; //Trefferanzeige Zwischenergebnis hint format ["\nZiele: %1\n\nGetroffen: %2",_i,_treffer]; //Scheibe in _alt speichern _alt0 = TmpTar00; _alt1 = TmpTar01; _alt2 = TmpTar02; _alt3 = TmpTar03; _rNumberOld = _rNumber; //Unterroutine welche die Scheibe jetzt 3 Sekunden lang umlegt _alt0 spawn { private "_r"; for "_r" from 1 to 30 do { _this animate["terc", 1]; //Scheibe umlegen sleep 0.1 } }; _alt1 spawn { private "_r"; for "_r" from 1 to 30 do { _this animate["terc", 1]; //Scheibe umlegen sleep 0.1 } }; _alt2 spawn { private "_r"; for "_r" from 1 to 30 do { _this animate["terc", 1]; //Scheibe umlegen sleep 0.1 } }; _alt3 spawn { private "_r"; for "_r" from 1 to 30 do { _this animate["terc", 1]; //Scheibe umlegen sleep 0.1 } }; //Weitere Scheibe (darf nicht die vorherige sein) while {_rNumberOld == _rNumber}do{_rNumber = round random 3}; switch (_rNumber) do { case 0: { player sidechat format ["Gruppe 1"]; TmpTar00 = _zielschGrp0 select 0; TmpTar01 = _zielschGrp0 select 1; TmpTar02 = _zielschGrp0 select 2; TmpTar03 = _zielschGrp0 select 3; }; case 1: { player sidechat format ["Gruppe 2"]; TmpTar00 = _zielschGrp1 select 0; TmpTar01 = _zielschGrp1 select 1; TmpTar02 = _zielschGrp1 select 2; TmpTar03 = _zielschGrp1 select 3; }; case 2: { player sidechat format ["Gruppe 3"]; TmpTar00 = _zielschGrp2 select 0; TmpTar01 = _zielschGrp2 select 1; TmpTar02 = _zielschGrp2 select 2; TmpTar03 = _zielschGrp2 select 3; }; case 3: { player sidechat format ["Gruppe 4"]; TmpTar00 = _zielschGrp3 select 0; TmpTar01 = _zielschGrp3 select 1; TmpTar02 = _zielschGrp3 select 2; TmpTar03 = _zielschGrp3 select 3; }; }; //Treffer Endergebnis anzeigen if (_i==_wiederholen) then {titleText [format ["%1 Ziele. Davon %2 getroffen.",_anzahlAusw,_treffer],"plain"]}; }; sleep 4; {_x animate["terc",0]} forEach _zielscheiben; Nehmen wir mal an ich ballere 1 Ziel weg. Die letzten 3 stehen aber noch. So stellt sich das blöde erste Ziel wieder auf wenn ich die Zeit für das Warten zu hoch einstelle. Ich müsste irgendeine Abfrage haben die die Ziele einzeln überprüft und das jeweilige Ziel "animate["terc", 1];" setzt :-/
__________________
![]() |
![]() |
![]() |
#16 (permalink) |
![]() ![]() ![]() ![]() Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
![]()
Probier es mit meinem Skript! Da wird alles viel übersichtlicher!
Initialisiere eine Variable Scheiben_1_auf = false; und initialisiere eine Variable Scheiben_1_treffer = 0; Erstelle eine Scheibe mit der Initialisierung temp = this execVM "Gruppe_1.sqf" Diese Scheibe kannst du jetzt beliebig kopieren. Auf den Befehl Scheiben_1_auf = true stehen alle diese Scheiben auf und legen sich nach 6 Sekunden (diese Zeit kann im Skript geändert werden) wieder automatisch um. Du kannst diese Scheiben bei Bedarf nochmal mit dem Befehl aufstellen Für andere Gruppen wie beschrieben das Skript mit anderem Namen kopieren und darin die Namen der genannten Variablen ändern. Die Steuerung des Aufstehens ist dann sehr einfach. z.B.: Scheiben_1_auf = true; for "_i" from 1 to 7 do {sleep 1;hint format["Treffer: %1", Scheiben_1_treffer]}; Scheiben_2_auf = true; for "_i" from 1 to 7 do {sleep 1;hint format["Treffer: %1", Scheiben_2_treffer]}; usw. Hier werden die Scheiben der Gruppe1 aufgeklappt und die Hint-Schleife dauert 7 Sekunden bis dann die Scheiben der Gruppe2 aufklappen. Du kannst diesem Ablauf natürlich noch anderen Text und Pausen hinzufügen. Es ist natürlich auch möglich, die Reihenfolge mit einer Zufallsauswahl zu steuern. z.B. über switch/case. |
![]() |
![]() |
#20 (permalink) |
![]() ![]() ![]() ![]() Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
![]() Ist ein Fehler im Skript (weil ich es nicht getestet habe). Die Zeile sleep 2; einfügen! Man muss der Scheibe Zeit geben aufzuklappen, bevor man abfragt ob sie durch einen Treffer umgefallen ist. Code:
/** * Zielscheibe steuern * * Aufruf in der Initialisieurngszeile jeder Scheibe der Gruppe: * temp = this execVM "Gruppe_1.sqf" * * Verwendet 2 globale Variable die für jede Gruppe eine anders Skript * und andere "laufende" Nummern haben müssen * * Scheiben_1_auf true stellt die Scheiben auf. * Ist beim Spielstart auf false zu initialisieren. * * Scheiben_1_treffer für das Speichern der Treffer der Gruppe. * Ist beim Spielstart auf 0 zu initialisieren. **/ private ["_scheibe","_zeit"]; _scheibe = _this; _scheibe animate["terc", 1]; //Scheibe beim Start umlegen //Dauerschleife sleep 3; while {true}do { waituntil {Scheiben_1_auf}; //Warten auf Aufstellbefehl _zeit = time + 6; //Scheibe 6 Sekunden sichtbar (mindestens 4) _scheibe animate["terc", 0]; //Scheibe aufrichten sleep 2; //Warten auf Zeitablauf oder Treffer waituntil {time > _zeit or _scheibe animationPhase "terc" > 0.2}; //Trefferabfrage if (_scheibe animationPhase "terc" > 0.2) then { Scheiben_1_treffer = Scheiben_1_treffer + 1 }; //Scheibe 3 Sekunden lang umlegen for "_i" from 1 to 30 do { _scheibe animate["terc", 1]; //Scheibe umlegen sleep 0.1 }; Scheiben_1_auf = false } |
![]() |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
Themen-Optionen | |
Ansicht | |
|
|