Armed-Assault.de Twitter
 
 
Themen-Optionen Ansicht
Alt 24.01.2012, 19:42   #1 (permalink)
500 Beiträge
 
Benutzerbild von Clawhammer
 
Registriert seit: 07.01.2008
Alter: 37
Beiträge: 635
Clawhammer eine Nachricht über ICQ schicken
Standard Übungsziele die machen was sie wollen.

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!
__________________
Clawhammer ist offline  
Alt 25.01.2012, 09:08   #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

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.
Vienna ist offline  
Alt 25.01.2012, 09:16   #3 (permalink)
500 Beiträge
 
Benutzerbild von Clawhammer
 
Registriert seit: 07.01.2008
Alter: 37
Beiträge: 635
Clawhammer eine Nachricht über ICQ schicken
Standard

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
__________________
Clawhammer ist offline  
Alt 25.01.2012, 09:35   #4 (permalink)
10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von Buliwyf
 
Registriert seit: 11.03.2005
Ort: HH
Alter: 52
Beiträge: 1.930
Standard

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...

__________________
Buliwyf ist offline  
Alt 25.01.2012, 10:56   #5 (permalink)
500 Beiträge
 
Benutzerbild von Clawhammer
 
Registriert seit: 07.01.2008
Alter: 37
Beiträge: 635
Clawhammer eine Nachricht über ICQ schicken
Standard

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
Würde ich das so hinbekommen das damit jeglich die Targets: pt1,pt1_1, pt1_2, pt1_3, pt1_4, pt1_5, pt1_6 und pt1_7 betroffen sind?


P.S Hab mich gerade mal dieses Scriptes bedient:
Armaholic - FORUMS - Popup Targets Hint

Besten dank euch!
__________________
Clawhammer ist offline  
Alt 25.01.2012, 16:08   #6 (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

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.
Vienna ist offline  
Alt 25.01.2012, 16:16   #7 (permalink)
500 Beiträge
 
Benutzerbild von Clawhammer
 
Registriert seit: 07.01.2008
Alter: 37
Beiträge: 635
Clawhammer eine Nachricht über ICQ schicken
Standard

Zitat von Vienna Beitrag anzeigen

Edit:
Wenn du das Skript für mehrere Schießstände verwenden willst, dann übergib die List der Scheibennamen als Parameter.

Und das geht wie folgt? Oo In dem Bereich bin ich noch nicht so ganz fit

Danke!
__________________
Clawhammer ist offline  
Alt 25.01.2012, 17:27   #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

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;
Kurz angetestet. Das mit dem Um- und Aufklappen scheint nicht zu funktionieren. Poste einmal wie du das machst.
Vienna ist offline  
Alt 26.01.2012, 11:23   #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

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"]};
 };
Angehängte Dateien
Dateityp: zip Zielscheiben_Skript-utes.zip (2,3 KB, 157x aufgerufen)
Vienna ist offline  
Alt 27.01.2012, 19:37   #10 (permalink)
500 Beiträge
 
Benutzerbild von Clawhammer
 
Registriert seit: 07.01.2008
Alter: 37
Beiträge: 635
Clawhammer eine Nachricht über ICQ schicken
Standard

Das Script funktioniert wunderbar :-) Danke dafür!

Jetzt muss ich nurnoch überlegen wie ich das für 2 Targets mache und wie ich das hinbekomme das 4 Targets die nebeneinander stehen gleichzeitig hochgehen.

Danke!
__________________
Clawhammer ist offline  
Alt 29.01.2012, 14:47   #11 (permalink)
500 Beiträge
 
Benutzerbild von Clawhammer
 
Registriert seit: 07.01.2008
Alter: 37
Beiträge: 635
Clawhammer eine Nachricht über ICQ schicken
Standard

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;
__________________
Clawhammer ist offline  
Alt 30.01.2012, 01:14   #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

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;
Vienna ist offline  
Alt 03.02.2012, 15:19   #13 (permalink)
500 Beiträge
 
Benutzerbild von Clawhammer
 
Registriert seit: 07.01.2008
Alter: 37
Beiträge: 635
Clawhammer eine Nachricht über ICQ schicken
Standard

Hab das Script gerade getestet, klapt wunderbar. Jetzt muss ich das nurnoch hintkriegen das die Ziele 1-4, 5-8, 9-12 und 13-16 per random zusammen aufstehen. *grübel*
__________________
Clawhammer ist offline  
Alt 03.02.2012, 22:44   #14 (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

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
 }
Ist noch zu testen! Für andere Gruppen nicht vergessen die Nummer in den fetten Wörtern zu ändern und auch zu initialisieren!
Vienna ist offline  
Alt 04.02.2012, 14:56   #15 (permalink)
500 Beiträge
 
Benutzerbild von Clawhammer
 
Registriert seit: 07.01.2008
Alter: 37
Beiträge: 635
Clawhammer eine Nachricht über ICQ schicken
Standard

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;
Sind zwar einige Zeilen mehr aber funktioniert auch, zumindest bis auf 1 kleine Stelle.

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 :-/
__________________
Clawhammer ist offline  
Alt 04.02.2012, 17:09   #16 (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

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.
Vienna ist offline  
Alt 05.02.2012, 10:30   #17 (permalink)
50 Beiträge100 Beiträge250 Beiträge
 
Registriert seit: 20.12.2006
Beiträge: 319
Standard

@vienna

Leider verstehe ich die scriptsprache zu wenig.
Ich bräuchte Übungsziele, die bei Treffer gezählt werden und dann unten bleiben.
Wenn du mal viel Zeit und Lust hast, könntest du mir ein Skript erstellen.

Danke.
Reno ist offline  
Alt 05.02.2012, 12:18   #18 (permalink)
500 Beiträge
 
Benutzerbild von Clawhammer
 
Registriert seit: 07.01.2008
Alter: 37
Beiträge: 635
Clawhammer eine Nachricht über ICQ schicken
Standard

@Reno siehe Post 9 das ist genau das was du brauchst.

@Vienna, irgendwie reagieren die Schilder nicht auf "Scheiben_1_auf = true;"

Hab einen Auslöser gemacht aber es rührt sich nix :-(

thx4help
__________________
Clawhammer ist offline  
Alt 05.02.2012, 16:08   #19 (permalink)
50 Beiträge100 Beiträge250 Beiträge
 
Registriert seit: 20.12.2006
Beiträge: 319
Standard

@Clawhammer

danke für den Tipp, ich werde es mal so probieren.
Reno ist offline  
Alt 06.02.2012, 01:19   #20 (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

Zitat von Clawhammer Beitrag anzeigen

@Vienna, irgendwie reagieren die Schilder nicht auf "Scheiben_1_auf = true;"
Hab einen Auslöser gemacht aber es rührt sich nix :-(
thx4help

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
 }
Vienna ist offline  
 


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


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 117 118 119