HX3 Foren

HX3 Foren (https://hx3.de/)
-   Editing (https://hx3.de/editing-139/)
-   -   Ist eine Einheit spielbar? - Abfrage (https://hx3.de/editing-139/einheit-spielbar-abfrage-15877/)

Hercules-HH 06.03.2009 17:28

Ist eine Einheit spielbar? - Abfrage
 
  • Wie frage ich, ob eine Einheit spielbar ist?
Falls beantwortet:
  • Und woher wisst Ihr solche Sachen
Mir helfen diese Scripting Commands, nur wenn ich die Beispiele wenigsten bisschen verstehe:
Category:Scripting Commands ArmA - Bohemia Interactive Community
Muss man da noch einige Sachen wissen oder lesen könne?

Buliwyf 06.03.2009 17:38

Ich nutze ausschliesslich die Seite... :komisch: ...und bin auf folgenden Befehl gestossen:

switchableUnits

:rolleyes:

Hercules-HH 06.03.2009 18:43

Also, das hab ich ehrlich auch gesehen, aber mich irritiert das Array. Was soll das den heißen?

Ich gehe jetzt da von aus, dass ich so was schreiben müsste:

? _x=switchableUnits : goto"Nein";

[GNC]Lord-MDB 06.03.2009 22:19

nö mehr so (sqf)

wenn ne bestimmte abfragen wills

PHP-Code:

_result =switchableUnits;
if (
alive (_result select 0)) then {_aliveunit0 true;}; 

wennn alle abfragen will und bei der ersten gefunden die lebt soll was passieren dann so

PHP-Code:

{
if (
alive _xthen 
       
{
        
"jetzt geht was"
       
};
} foreach 
switchableUnits


Hercules-HH 07.03.2009 00:20

Ich wollte mit einem Auslöser checken, ob sich in dem Bereich mindestens eine spielbare Einheit befindet. Wenn ja sollen alle Einheiten in diesem Bereich angesprochen werden.

Besser wäre sogar: Nur das ganze Team, indem sich spielbare Einheiten befinden. Eine spielbare Einheit ist auf jeden Fall Teamleader.

Aber damit bin ich auch zufrieden:

Code:

#Start
_result =switchableUnits;
if (
alive (_result select 0)) then {_gehtklar0 = true;} else {_gehtklar0 = false};
#Wasnu
? !
_gehtklar0 : goto"Ende";
#Klar
blablabla Action blablabla
#Ende
exit

Hab ich das jetzt klar und deutlich verstanden oder ist die Sache doch noch unklar für mich?

[GNC]Lord-MDB 07.03.2009 11:59

Ok dann einen Trigger auf der Map machen.
Seite einstellen die auslöst und mehrfach einstellen.
Einen namen geben zb scanner1


PHP-Code:

_scanner=_this select 0;

while {((
count switchableUnits) =! 0)} do
           {
         
_unitscanner=list _scanner;
         {
         if ((
alive _x) and (_x in _unitscanner)) then 
               
{
               
_unitgroup =group _x;
               
_leadergroup =leader _unitgroup;
               
_leadergroup blablablablabla;
               };
           } foreach 
switchableUnits
           
sleep 1;
           }; 


Vienna 07.03.2009 13:49

Liste der Anhänge anzeigen (Anzahl: 1)
Mit dieser Zeile wird für jede lebende spielbare Figur im Auslöserbereich das Skript aufgerufen:

{ if (_x in list TriggerName) then {_x exec "Test.sqs"} } forEach switchableUnits

Im Anhang ein Beispiel, welches ein Test-Skript über je einen Auslöser für West und Ost aufruft.

Hercules-HH 07.03.2009 19:01

Cool, danke.

_leadergroup ist nun also die lokale Variable, also alle die in der Gruppe der spielbaren Einheit sind.

Mein Problem ist nun: Ich habe noch nie richtig eine SQF-Datei erstellt.

Beende ich die Datei auch mit einem "exit"? Kann ich auch mit goto"Punktx" springen?
Worauf muss ich so achten?

Ich hab nur die Beschreibung der Datei gelesen, also wo zu sie gut ist,
Oje ein Beispiel wäre gut.

So, zuerst das was ich schon in sqs gemacht habe (es Funktioniert alles prima). Jeder bekommt ein Fallschirm:

Code:

#Start
? !not alive Falls1 : goto"Fallschirm2";
Falls1 = "Parachute" createVehicle getpos Posi; Falls1 setPos [(getPos Posi select 0),(getPos Posi select 1),300];
#movein1
~0.5
{_x moveindriver Falls1} forEach list Fsprung;
#Fallschirm2
? !not alive Falls2 : goto"Fallschirm3";
Falls2 = "Parachute" createVehicle getpos Posi; Falls2 setPos [(getPos Posi select 0),(getPos Posi select 1),300];
#movein2
~0.5
{_x moveindriver Falls2} forEach list Fsprung;
#Fallschrim3
usw.


aber nun muss an Stelle von _x das
_leadergroup hin und alles muss in sqf geschrieben werden.
Code:


if (!not alive Falls1) then
  {
    Falls1 = "Parachute" createVehicle getpos Posi; Falls1 setPos [(getPos Posi select 0),(getPos Posi select 1),300];
      }
    else
      {
        goto"Fallschirm2"
      }
  }
_scanner
=_this select 0;

while {((
count switchableUnits) =! 0)} do
          {
       
_unitscanner=list _scanner;
        {
        if ((
alive _x) and (_x in _unitscanner)) then
             
{
             
_unitgroup =group _x;
             
_leadergroup =leader _unitgroup;
             
_leadergroup moveindriver Falls1;
              };
          } foreach
switchableUnits;
         
sleep 1;
          };
#Fallschirm
2

Ich bekomm das nicht hin. Und wie achtet Ihr den auf Abstände?

while {((
count switchableUnits) =! 0)} do
{
_unitscanner=list _scanner;

hier zum Beispiel sind es 10 Leertasten vor _unitscanner=...


Vienna 07.03.2009 20:56

Liste der Anhänge anzeigen (Anzahl: 1)
Ich dachte mir, dass du mit SQF-Syntax nicht so vertraut bist. Darum habe ich in meinem Beispiel die Test.sqs für die SQS-Syntax genommen. Im 1. Skript siehst du auch wie du die Liste mit der Gruppe des Leaders bekommst.

Hast du dir das angesehen?


Die Zeilen in der Test.sqs ersetzt du durch diese 3 Zeilen:

_grp = units group _this
_pos = position _this
{_f=createVehicle["Parachute",_pos,[],50,"FLY"];_x moveindriver _f} forEach _grp


Dann hast du auch deinen Fallschirmabsprung der Gruppe. _pos musst du noch auf deine gewünschte Position ändern.

Den Fallschirmabsprung siehst du im 2. Test.sqs im Beispiel in dem Anhang.

Hercules-HH 07.03.2009 21:10

Sorry, sonst lassen wir das erst mal so stehen. Das ist Banane, was ich geschrieben habe.

Ich eröffne neues Thema: Umgang mit SQF-Datein

So macht es wenig Sinn, wenn mir alles vorgekaut wird, auch wenn es gut gemeint ist.

danke erst mal!:)

[GNC]Lord-MDB 07.03.2009 21:19

jo klar

Hercules-HH 07.03.2009 21:25

Achso, ja danke. Dein Beitrag hab ich zu spät besehen.

Ja ich hab die Datei aufgemacht, aber nicht die Mission selber.

Das kommt jetzt in den Trigger. Trigger heißt Fspring
Code:

{ if (_x in list Fsprung) then {_x exec "Test.sqs"} } forEach switchableUnits
Gleich mehr...

Vienna 07.03.2009 21:27

Verstehe nicht, warum du jetzt aufgibtst. Die insgesamt 4 Zeilen die ich dir hier angeführt habe sind zwar SQF-Syntax, aber für normale SQS-Dateien geeignet.

Solange du es nicht schaffst diese Zeilen in deine normalen Skripte einzubinden, brauchst du dich mit SQF-Dateien gar nicht erst bemühen.

Hercules-HH 07.03.2009 21:38

Die Datei:

Code:

_leader = _this
_grp = units group _this
_pos = getMarkerPos "Abwurf"

#Start
? !not alive Falls1 : goto"Fallschirm2";
{Falls1=createVehicle["Parachute",_pos,[],50,"FLY"]; _x moveindriver Falls1} forEach _grp
#Fallschirm2
? !not alive Falls2 : goto"Fallschirm3";
{Falls2=createVehicle["Parachute",_pos,[],50,"FLY"]; _x moveindriver Falls2} forEach _grp
#Fallschirm3


Ja stimmt, hab grade gecheckt, dass ich das auch machen kann.

Vienna 07.03.2009 21:41

Zitat:

Zitat von Hercules-HH (Beitrag 219983)
Das kommt jetzt in den Trigger. Trigger heißt Fspring
Code:

{ if (_x in list Fsprung) then {_x exec "Test.sqs"} } forEach switchableUnits
Gleich mehr...

In den Trigger, welcher den Bereich abdeckt, kommt das nicht! Diese Zeile musst du in eine Dauerschleife in einem eigenen Skript einfügen.

z.B.

#Loop
{ if (_x in list Fsprung) then {_x exec "Test.sqs"} } forEach switchableUnits
~5
goto "Loop"

Hercules-HH 07.03.2009 21:46

oh ja klar. was schreib ich hier eigentlich!!!

Vienna 07.03.2009 22:04

Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe dir noch ein Beispiel gemacht mit einem Auslöser für alle Spieler (West, Ost, usw.). Über einen Auslöser wird jetzt das Skript "Loop.sqs" mit der Dauerschleife gestartet. Es gibt keinen Funkaufruf mehr. Du gehst nach Norden in den Auslöserbereich und sprigst dann mit deiner Gruppe bei einem Marker über dem Dorf ab. Das kannst du auch in Multiplayer testen.

Hercules-HH 07.03.2009 22:51

danke nochmal. Echt nett.

Ich hab gar nicht verstanden, dass die Fallschirme einfach immer wieder ohne Grenze erschaffen werden. Deshalb wollte ich immer Namen geben und prüfen, ob die schon benutzt werden.

Super das geht ja echt gut. Und das mit _f (lokale Variable). Das wusste ich auch nicht. Die haben jetzt keinen Name, stimmts?!

Jedenfalls hilft mir das auch bei einigen anderen Sachen, die ich mache werde.

Noch mal danke, auch an GNC L.-MDB.

Vienna 07.03.2009 23:26

Zitat:

Zitat von Hercules-HH (Beitrag 219998)

Und das mit _f (lokale Variable). Das wusste ich auch nicht. Die haben jetzt keinen Name, stimmts?!

Du kannst deinen Variablen beliebige Namen geben. Die lokalen müssen mit dem Unterstrich beginnen, die anderen mit einem Buchstaben.

_lokaleVariable sind nur im jeweiligen Skript sichtbar. Haben sie in mehreren Skripten den gleichen Namen, dann können sie unterschiedliche Werte enthalten, weil die eben nur lokal im jeweiligen Skript sichtbar sind. Wird das Skript geschlossen, dann ist auch der Wert der Variablen gelöscht.

globaleVariable sind auf deinem PC überall in ArmA sichtbar. Wird in einem Skript der Wert geändert, dann ist die Änderung auch in anderen Skripten vorhanden. Aber nur auf deinem PC. Werte solcher Variablen bleiben bis zum Spielende gespeichert.

publikeVariable sind globaleVariable, welche auf allen am Spiel beteiligten PCs sichtbar sind. Wird deren Wert auf einem PC geändert, dann muss das aber extra zu den anderen PCs übertragen werden. Andernfalls sind sie nur noch globaleVariable.

Die Übertragung geht mit dem Befehl publicVariable.

z.B.

GesamtPunkte = 500
publicVariable "GesamtPunkte"

und schon ist die Änderung auf allen PCs sichtbar.


Fallschirme (und Geschoße) löschen sich nach Gebrauch selbständig. Darum brauchen sie auch keine dauerhafte Namen. Anderen Objekten gibt man einen Namen, damit man sie ansprechen und gegebenenfalls auch löschen kann.

Hercules-HH 08.03.2009 00:32

Oje es gibt ein kleines Problem:

Wenn es 3 Spielbare Einheiten in einer Gruppe von 5 Soldaten gibt werden die Fallschirme ich glaube 3 mal 5 genommen. Also fliegen noch einige andere Fallschirme durch die Gegend ohne Besatzung.

Mir fällt nur auf die Schnelle ein, die leeren Fallschirme schnell zu löschen oder das nur auf eine spielbare Einheit beziehen, die Teamleader ist.

Oder ich mach vielleicht nur eine Einheit spielbar pro Gruppe, wenn es sein muss- mal schau.

(In meiner Mission gibt es nicht mehr als 3 Spielbare Soldaten in einer Gruppe, aber mindestens einer (wenn die anderen sterben). Ich glaube nicht dass das weiter hilft.)


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:59 Uhr.

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