HX3 Foren

HX3 Foren (https://hx3.de/)
-   Editing & Scripting (https://hx3.de/editing-scripting-167/)
-   -   Abfrage eines Arrays (https://hx3.de/editing-scripting-167/abfrage-arrays-22645/)

Togo 10.06.2013 15:24

Abfrage eines Arrays
 
Hallo zusammen,

brauche hilfe bei einem Script. Ich habe einen Auslöser das ein script startet sobald ein player vorhanden ist, es wird geprüft ob dieser in der Gruppe A oder B ist. Ich habe die Soldaten der Gruppe A von s1-s8 bezeichnet und die der Gruppe B von s9-s16. Nun habe ich zwei Arrays erstellt:

_grpalpha = [s1,s2,s3,s4,s5,s6,s7,s8];
_grpbravo = [s9,s10,s11,s12,s13,s14,s15,s16]

wie muss ich nun die IF Abfrage gestalten ? Mit if (player in list _grpalpha) then.... geht es nicht ;:-(
Ich hoffe auf eure hilfe....

Gruß Togo

Vienna 10.06.2013 16:12

if (player in list _grpalpha) then.... list gehört hier nicht rein, ist nur anzuführen wenn das Array eines Triggers abgefragt wird.

http://community.bistudio.com/wiki/list

Togo 10.06.2013 19:41

Hallo Vienna,

vielen Dank, nun funktioniert es ;-)

Gruß Togo

Togo 11.06.2013 12:07

Hallo Vienna,

hast Du evt. auch eine Idee warum das hier nicht funktioniert ?

Code:

   
if ( isnil ("s1") && alive ("s1") ) then
        {
        "tele_to_alpha" setMarkerPos getPos s1
        }

möchte hier abfragen ob s1 existiert und noch lebt.

Gruß Togo

Lester 11.06.2013 14:04

Wenn s1 kein Marker ist, wird es auch nicht in Anführungszeichen geschrieben ... und wenn doch macht das alive kein Sinn. ;)

Togo 11.06.2013 14:06

Hi Lester,

s1 ist der Name eines Soldaten.

Gruß

Rockhount 11.06.2013 14:12

Zitat:

Zitat von Togo (Beitrag 451848)
Code:

if ( isnil ("s1") && alive ("s1") ) then
        {
        "tele_to_alpha" setMarkerPos getPos s1
        }


Du fragst zuerst ab, ob die globale Variable nicht definiert wurde und in der selben Abfrage überprüfst du, ob ein Text (String) lebt?:komisch: Das gibt doch Fehler ohne Ende. Meiner Erfahrung nach sind && und || auch nicht das, was sie sein sollten, denn die zweite Bedingung wird trozdem immer überprüft und wirft somit auch die RPT voll. Also, solche Abfragen immer verschachteln!

Lösung:
Code:

if (!(isnil "s1")) then
{
    if (alive s1) then
    {
        "tele_to_alpha" setMarkerPos (getPos s1);
    };
};


Xeno 11.06.2013 16:35

*deleted*

Xeno

flickflack 11.06.2013 16:36

^... es gibt halt Sprachen ...und SQF :happy:

Xeno 11.06.2013 16:38

So isses, Flicki, so isses...

Xeno

flickflack 11.06.2013 16:43

Ich huldige all jenen, die sich mit SQF auseinandersetzen und trotz der Einschränkungen so coole Sachen für die Comm gezaubert bekommen. Das muss man ja auch erstmal schaffen :daumen:

..sry für's hijacken.

Togo 11.06.2013 18:43

Hi Leutz,

vielen Dank für eure Hilfe---- funktioniert nun. Wenn ihr mir noch bei diesem Respawn Script helfen könnt das einzubauen das auch Rucksäcke gespeichert und auch wieder ausgegeben werden wäre ich Wunschlos glücklich... .;-)

Code:


maxrespawns = paramsArray select 0;
myrespawns = 0;
while {true} do {
    waitUntil {!alive player};
    _p = player;
    _weapons = weapons _p;
    _magazines = magazines _p;
    if (myrespawns == maxrespawns) then
        {
        titleCut ["Du hast alle Leben verloren.......","BLACK FADED", 5];
        sleep 3;
        titleCut ["Dein Einsatz is hiermit beendet.....","BLACK FADED", 5];
        sleep 3;
        endMission "END3" // Hier musss eine Briefing.html existieren !!
        };
    hidebody _p;      // versteckt toten Körper !
    deletevehicle _p; //löscht den toten Körper !
    waitUntil {alive player};
    _p = player;
    removeAllWeapons _p;
    removeAllItems _p; // dieser Eintrag existiert weil sonst das Funkgerät Acre 343 sich beim respawn verdoppelt.
    {_p addMagazine _x;} forEach _magazines;
    {_p addWeapon _x;} forEach _weapons;
    _primw = primaryWeapon _p;
        if (_primw != "") then {
            _p selectWeapon _primw;
            // Fix für Waffen mit Granatwerfer
            _muzzles = getArray(configFile>>"cfgWeapons" >> _primw >> "muzzles");
            _p selectWeapon (_muzzles select 0);
            myrespawns = myrespawns + 1;
        _rest = maxrespawns - myrespawns;
        titleText [format ["Verfügbare Leben: %1",_rest],"PLAIN DOWN", 1];
            hint "Weiter gehts.....";
        };
    };

Dies habe ich mir soweit zusammen gebastelt funktioniert auch, aber leider verschwinden nach ein paar respawns die Rucksäcke bez. deren Inhalt.
Nochmals Vielen Dank für die Mühe...

Gruss Togo

Vienna 11.06.2013 19:19

Hallo Togo!

Vermutlich willst du wissen ob in MP eine wählbare Spielfigur deaktiviert ist?

Objekt-Variable können nicht mit isNil abgefragt werden ob sie existieren. Ich habe auch sonst keinen entsprechenden Befehl gefunden.

Um festzustellen ob z.B. ein Objekt mit Namen S1 im gestarteten Spiel überhaupt vorhanden ist kann man so vorgehen:
Code:

_aktiv = false;
if (!isNull S1) then {_aktiv = true};
if (!_aktiv) then {S1 = objNull};

Existiert ein Objekt mit Namen S1, dann ist alles OK. Wenn nicht, so wurde eine S1 Objekt-Variable mit Status objNull erstellt.

Nun kannst du Abfragen wie die folgende tätigen:
Code:

if (!isNull S1 and alive S1) then
 {
  hint "S1 lebt!"
 }
else 
 {
  if (isNull S1) then
  {
    hint "Objekt S1 ist nicht im Spiel vorhanden!"
  }
  else
  {
    hint "S1 ist tot!"
  }
 };



Alle Zeitangaben in WEZ +1. Es ist jetzt 12:00 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 120