Armed-Assault.de Twitter


 
 
Themen-Optionen Ansicht
Alt 20.04.2012, 20:07   #1 (permalink)
50 Beiträge
 
Benutzerbild von spreewälder
 
Registriert seit: 21.10.2008
Beiträge: 54
Standard Frage zu "addaction"



Wie kann ich alle "addaction"-Einträge entfernen sobald eins meiner erstellten gewählt wurde?
Und gibt es eine Abfrage ob ein ganz bestimmtes Magazin vorhanden ist? Ich hab nur
Code:
someAmmo player
gefunden. Ich brauch aber ein bestimmtes Magazin als Bedingung.

hier mein script:

Code:
// Auslöser: _act_id_PzFst_Schiessen = player addAction ["Wählen Sie eine Übung", "scripts\Ziele_PzFst.sqf"];

player removeAction _act_id_PzFst_Schiessen;

//private ["_act_id_000", "_act_id_100", "_act_id_200", "_act_id_300", "_act_id_400"];

if (true) then {

if (player hasWeapon "BwMod_PzF" && someAmmo player) then
    {
    _act_id_000 = player addaction ["Panzer in Querfahrt" , "scripts\Quer.sqf"];
    _act_id_100 = player addaction ["Ziel auf 100m", "scripts\100.sqf"];
    _act_id_200 = player addaction ["Ziel auf 200m", "Scripts\200.sqf"];
    _act_id_300 = player addaction ["Ziel auf 300m", "scripts\300.sqf"];
    _act_id_400 = player addaction ["Ziel auf 400m", "scripts\400.sqf"];        
    } else 
    {
};
sleep1;
        };
Danke im Vorraus!
spreewälder ist offline  
Alt 20.04.2012, 22:41   #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

Du kommst hier mit einem Skript aus. Man kann bei addAction auch Daten dem Skript übergeben.

In der Beispielmission ist auch ein Menüsystem enthalten. Sieh dir das einmal an:Unterstützungen durch Helikopter und Flugzeuge
Vienna ist offline  
Alt 20.04.2012, 22:48   #3 (permalink)
50 Beiträge
 
Benutzerbild von spreewälder
 
Registriert seit: 21.10.2008
Beiträge: 54
Standard

Danke ich werds morgen testen und Feedback geben
spreewälder ist offline  
Alt 21.04.2012, 09:29   #4 (permalink)
50 Beiträge
 
Benutzerbild von spreewälder
 
Registriert seit: 21.10.2008
Beiträge: 54
Standard

Code:
//Menüsystem für Aktionen-Aufruf   [Vienna   10.09.2011]
//
// Hauptmenü-Aktion setzen  : call {[0,0,0,[1]] execVM "HQ-Aktionen.sqf"};
// Entfernen der Menü-Aktion: call {[0,0,0,[0]] execVM "HQ-Aktionen.sqf"};
//
// Aufruf für den Mehrspielermodus über einen Mehrfach(!!!)-Auslöser:
//  Aktivierung: Keine     Mehrfach
//    Bedingung: alive player  (für einen bestimmten Spieler: alive player AND player == SoldatXY)
//     Bei Akt.: call {[0,0,0,[1]] execVM "HQ-Aktionen.sqf"}
//    Bei Deak.: call {[0,0,0,[0]] execVM "HQ-Aktionen.sqf"}
//
// Am Beginn der anderen aufgerufenen Skripts einfügen: [0,0,0,[1]] execVM "HQ-Aktionen.sqf";
//    Das bewirkt, dass wieder nur allein die HQ-Hauptmenü-Aktion angezeigt wird. 
//
// Bei einer Erweiterung des Menüsystems ist in den //Untermenü-Aktionen 2222222
//    im Übergabe-Array  --> [4],  der Index für die Listen-Arrays zu setzen.
// In den jeweiligen Listen bestimmt
//    der negative Wert  -->  -2,  die Reihung bei der Menü-Auflistung im Spiel.
 

//globale Variable beim ersten Aufruf für die Speicherung der Aktionen-IDs.
  if (isNil "Vienna_HQ_IDs") then {Vienna_HQ_IDs = []};

//Lokale Variable
  Private ["_index","_aID","_i"];
  
//Parameter aus der aufrufenden Aktion
  _index = (_this select 3)select 0; 

//Pistole zuweisen. Wegen besserer Menüauflistung.
  if (count Vienna_HQ_IDs == 0) then 
    {
      for "_i" from 1 to 4 do {player addMagazine "7Rnd_45ACP_1911"};
      player addWeapon "Colt1911"
    };
  
//Aktuelle HQ-Aktionen entfernen
  {player removeAction _x} forEach Vienna_HQ_IDs;
  Vienna_HQ_IDs = [];

//Skript verlassen wenn Spieler tot
  if (!alive player) exitWith {}; 

//Hauptmenü-Aktion 1111111111111111111111111111111111111111111111111111111111111
if (_index == 1) then
  {
    _aID = player addAction
      [
        "---> HQ-Anrufen",
        "HQ-Aktionen.sqf",
        [2],
        -1,
        false,false,""
      ]; Vienna_HQ_IDs = Vienna_HQ_IDs + [_aID]
  }
else //Aktion für "Retour" in die Hauptmenü-Aktion 
  {
    _aID = player addAction
      [
        "---> HQ-Anruf beenden",
        "HQ-Aktionen.sqf",
        [1],
        -1,
        false,true,""
      ]; Vienna_HQ_IDs = Vienna_HQ_IDs + [_aID]
  };

//Untermenü-Aktionen 22222222222222222222222222222222222222222222222222222222222
if (_index == 2) then
  {
    //Untermenü Heli Abholen                      2-1  2-1  2-1
    _aID = player addAction
      [
        "---> Auswahl Heli Transporte",
        "HQ-Aktionen.sqf",
        [3],
        -2,
        true,false,""
      ]; Vienna_HQ_IDs = Vienna_HQ_IDs + [_aID];

    //Untermenü Airstrike                         2-2  2-2  2-2
    _aID = player addAction
      [
        "---> Auswahl Flugzeugangriffe",
        "HQ-Aktionen.sqf",
        [4],
        -3,
        true,false,""
      ]; Vienna_HQ_IDs = Vienna_HQ_IDs + [_aID];

    //Untermenü Airstrike                         2-3  2-3  2-3
    _aID = player addAction
      [
        "---> Auswahl Heli-Laser-Angriffe",
        "HQ-Aktionen.sqf",
        [5],
        -4,
        true,false,""
      ]; Vienna_HQ_IDs = Vienna_HQ_IDs + [_aID];
  };

//Liste--> für Heli Abholung 333333333333333333333333333333333333333333333333333
if (_index == 3) then
  {
    //Heli Abholung langsam                      3-1  3-1  3-1
    _aID = player addAction
      [
        "*** Helitransport Fluggeschwindigkeit LANGSAM",
        "myHeli\myHeli.sqf",
        [2,80,1000,1],
        -2,
        false,true,""
      ]; Vienna_HQ_IDs = Vienna_HQ_IDs + [_aID];

    //Heli Abholung normal                       3-2  3-2  3-2
    _aID = player addAction
      [
        "*** Helitransport Fluggeschwindigkeit NORMAL",
        "myHeli\myHeli.sqf",
        [2,80,1000,2],
        -3,
        false,true,""
      ]; Vienna_HQ_IDs = Vienna_HQ_IDs + [_aID];

    //Heli Abholung schnell                      3-3  3-3  3-3
    _aID = player addAction
      [
        "*** Helitransport Fluggeschwindigkeit SCHNELL",
        "myHeli\myHeli.sqf",
        [2,80,1000,3],
        -4,
        false,true,""
      ]; Vienna_HQ_IDs = Vienna_HQ_IDs + [_aID];
  };

//Liste--> für Flugzeugangriffe 444444444444444444444444444444444444444444444444
if (_index == 4) then
  {
    //Airstrike mit Bomben                       4-1  4-1  4-1
    _aID = player addAction
      [
        "*** Luftangriff mit Bomben",
        "AirHQ\Airstrike.sqf",
        [2,1,20,500,90],
        -2,
        false,true,""
      ]; Vienna_HQ_IDs = Vienna_HQ_IDs + [_aID];

    //Airstrike mit MG                           4-2  4-2  4-2
    _aID = player addAction
      [
        "*** Luftangriff mit Maschinengewehr",
        "AirHQ\Airstrike.sqf",
        [0,2,2,500,90],
        -3,
        false,true,""
      ]; Vienna_HQ_IDs = Vienna_HQ_IDs + [_aID];
};

//Liste--> für Heli-Laser-Angriffe 555555555555555555555555555555555555555555555
if (_index == 5) then
  {
    //Heli Laserangriff langsam                  5-1  5-1  5-1                            
    _aID = player addAction
       ["*** Heliangriff anfordern LANGSAM",
       "myHeli_A\myHeli_A.sqf",
       [90,70,1000,1,100],
       -1,
       false,true,""
     ]; Vienna_HQ_IDs = Vienna_HQ_IDs + [_aID];

    //Heli Laserangriff normal                  5-2  5-2  5-2
    _aID = player addAction
       ["*** Heliangriff anfordern NORMAL",
       "myHeli_A\myHeli_A.sqf",
       [90,70,2000,2,100],
       -2,
       false,true,""
     ]; Vienna_HQ_IDs = Vienna_HQ_IDs + [_aID];

    //Heli Laserangriff schnell                  5-3  5-3  5-3
    _aID = player addAction
       ["*** Heliangriff anfordern SCHNELL",
       "myHeli_A\myHeli_A.sqf",
       [90,70,3000,3,100],
       -3,
       false,true,""
     ]; Vienna_HQ_IDs = Vienna_HQ_IDs + [_aID];
  };
////////////////////////////////////////////////////////////////////////////////
boah.. das ist Hardcore für mich... da werd ich eine ganze Weile brauchen, aber da steht auch das drin was ich brauche.. hoffentlich verliere ich nicht die Lust. Trotzdem DANKE!
spreewälder ist offline  
Alt 21.04.2012, 18:39   #5 (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

Um das besser zu verstehen eine Aktion in einer Zeile.

_aID = player addAction ["Aktions-Name","Skript.sqf",[1,3,2,4,5],-1,false,true,""];

[1,3,2,4,5] wären deine eigenen Parameter.

Die kannst du im Skript so auslesen: _meineP = _this select 3;

Die 1 z.B. holst du dir dann so raus: _meineP select 0


Die übrigen Parameter, welche die Aktion an das Skript übergibt, findest du hier:
http://community.bistudio.com/wiki/addAction

Damit kannst du z.B. die aufrufende Aktion vom Skript aus entfernen.


Ich habe in meinen Beispiel alle Aktions-IDs im globalen Array Vienna_HQ_IDs gespeichert. Damit kann ich alle Aktionen im Skript auf diese Art löschen:
{player removeAction _x} forEach Vienna_HQ_IDs;
Vienna ist offline  
Alt 21.04.2012, 22:59   #6 (permalink)
50 Beiträge
 
Benutzerbild von spreewälder
 
Registriert seit: 21.10.2008
Beiträge: 54
Standard

Vielen Dank!
Deine Scripte sind echt eine super Vorlage zum Testen und Erlernen des Scripting.. zumal es auf Deutsch eine Erleichterung ist (auch wenn dieses Komlexe Sripting manchmal sehr schwer fällt)

Trotzdem muss ich nochmal nerven, weil ich grad nicht weiter weiß...

ich rufe im Hauptmenue mit dieser addaction ein Sript auf:
Code:
//Liste--> Entfernung Ziel wählen 333333333333333333333333333333333333333333333333333
if (_index == 3) then
  {
    //Entfernung Ziel 100m            3-1  3-1  3-1
    _aID = player addAction
      [
        "Entfernung Ziel 100m",
//        "scripts\SPREE\Schiessen_PzFst\100.sqf",
    "scripts\SPREE\Schiessen_PzFst\Ziele.sqf",
        [1],
        -2,
        false,true,""
      ]; SPREE_HQ_IDs = SPREE_HQ_IDs + [_aID];

    //Entfernung Ziel 200m            3-2  3-2  3-2
    _aID = player addAction
      [
        "Entfernung Ziel 200m",
//        "scripts\SPREE\Schiessen_PzFst\200.sqf",
    "scripts\SPREE\Schiessen_PzFst\Ziele.sqf",
        [2],
        -3,
        false,true,""
      ]; SPREE_HQ_IDs = SPREE_HQ_IDs + [_aID];

    //Entfernung Ziel 300m            3-3  3-3  3-3
    _aID = player addAction
      [
        "Entfernung Ziel 300m",
//        "scripts\SPREE\Schiessen_PzFst\300.sqf",
    "scripts\SPREE\Schiessen_PzFst\Ziele.sqf",
        [3],
        -4,
        false,true,""
      ]; SPREE_HQ_IDs = SPREE_HQ_IDs + [_aID];
    //Entfernung Ziel 400m            4-4  4-4  4-4
    _aID = player addAction
      [
        "Entfernung Ziel 400m",
//       "scripts\SPREE\Schiessen_PzFst\400.sqf",
    "scripts\SPREE\Schiessen_PzFst\Ziele.sqf",
        [4],
        -4,
        false,true,""
      ]; SPREE_HQ_IDs = SPREE_HQ_IDs + [_aID];
  };
in dem angesprochenen Script möchte ich auf die einzelnen addactions zugreifen... durch die dort genannten Parameter ( ---> [1] ... [2]......)

das angesprochene Script:

Code:
//Lokale Variable
  private ["_index","_vcl_pool", "_vcl"];
  
//Parameter aus der aufrufenden Aktion
  _index = (_this select 0); 


//HQ-Aktionsmenü schließen
  [1] execVM "scripts\SPREE\HQ-Aktionen.sqf";


_vcl_pool = ["2S6M_Tunguska" , "BMP3" , "BTR90" , "BTR90_HQ" , "T72_RU" , "T90" , "GAZ_vodnik" , "GAZ_Vodnik_HMG"];
_vcl = _vcl_pool select floor(random count _vcl_pool);
             


if ( _index == 1) then {
                  ["<t size='3' font='Zeppelin33'>" + "Entfernung Ziel 100 Meter!" + "</t>",0,0,4,2,0,3010] spawn bis_fnc_dynamicText; 
          target = _vcl createVehicle (position Ziel_100m);
          target addEventHandler ["Killed", {hint "Treffer!"}];
          waituntil {(!alive target)};
          sleep 5;
          hint "Stopfen!";
          deleteVehicle target;
            };
if ( _index == 2) then {
                  ["<t size='3' font='Zeppelin33'>" + "Entfernung Ziel 200 Meter!" + "</t>",0,0,4,2,0,3010] spawn bis_fnc_dynamicText; 
          target = _vcl createVehicle (position Ziel_200m);
          target addEventHandler ["Killed", {hint "Treffer!"}];
          waituntil {(!alive target)};
          sleep 5;
          hint "Stopfen!";
          deleteVehicle target;
            };
if ( _index == 3) then {
                  ["<t size='3' font='Zeppelin33'>" + "Entfernung Ziel 300 Meter!" + "</t>",0,0,4,2,0,3010] spawn bis_fnc_dynamicText; 
          target = _vcl createVehicle (position Ziel_300m);
          target addEventHandler ["Killed", {hint "Treffer!"}];
          waituntil {(!alive target)};
          sleep 5;
          hint "Stopfen!";
          deleteVehicle target;
            };
if ( _index == 4) then {
                  ["<t size='3' font='Zeppelin33'>" + "Entfernung Ziel 400 Meter!" + "</t>",0,0,4,2,0,3010] spawn bis_fnc_dynamicText; 
          target = _vcl createVehicle (position Ziel_400m);
          target addEventHandler ["Killed", {hint "Treffer!"}];
          waituntil {(!alive target)};
          sleep 5;
          hint "Stopfen!";
          deleteVehicle target;
            };
...
ich kann zwar im Hauptmenü die einzelnen Aktionen wählen, jedoch werden sie nicht ausgeführt..
was mache ich falsch???!
spreewälder ist offline  
Alt 22.04.2012, 09:02   #7 (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

Der Index wird falsch ausgelesen!

Zuerst musst du aus den vom addAction übergebenen Parametern dein Übergabe-Array auslesen: _this select 3 und dann aus deinem Array den 1. Wert mit: select 0.

// 4. Parameter aus der aufrufenden Aktion = Array, daraus 1. Wert
_index = (_this select 3)select 0;

Ob das Skript sonst lauffähig ist habe ich nicht nachvollzogen.
Vienna ist offline  
Alt 22.04.2012, 10:51   #8 (permalink)
50 Beiträge
 
Benutzerbild von spreewälder
 
Registriert seit: 21.10.2008
Beiträge: 54
Standard Thanxxx!

Code:
_index = (_this select 3)select 0;
Funktioniert! Und nun verstehe ich es auch. Vielen Dank!
spreewälder ist offline  
Alt 11.05.2012, 09:15   #9 (permalink)
50 Beiträge
 
Benutzerbild von spreewälder
 
Registriert seit: 21.10.2008
Beiträge: 54
Standard Ich bräuchte mal wieder Hilfe.

Eigentlich will ich nicht damit nerven, aber nach langem testen/probieren vergeht mir langsam die Lust und ich bekomm es einfach nicht gebacken.

Kurz und knapp:
Ich möchte wenn "index 9" gewählt wird ( vom addaction hauptmenü) dann per Zufall---> index 1 bis index 8 aktiviert wird (also random).

hier ein scriptauszug in verkürzter form

Code:
// statische Ziele 333333333333333333333333333333333333333333333333333333333333333333333

// Entfernung 100m            3-1  3-1  3-1

if ( _index == 1) then {
               };

             

// Entfernung 200m            3-2  3-2  3-2

if ( _index == 2) then {
              
                 };

// Entfernung 300m            3-3  3-3  3-3

if ( _index == 3) then {
             
                 };

// Entfernung 400m            3-4  3-4  3-4

if ( _index == 4) then {
              
                 };

// Panzer in Querfahrt 444444444444444444444444444444444444444444444444444444444444444444444

// Entfernung 100m            4-1  4-1  4-1

if ( _index == 5) then  {
            
            },

// Entfernung 200m            4-2  4-2  4-2

if ( _index == 6) then  {
            
            },

// Entfernung 300m            4-3  4-3  4-3

if ( _index == 7) then  {
            
            },
// Entfernung 400m            4-4  4-4  4-4

if ( _index == 8) then  {
            
            },

// Zufall 555555555555555555555555555555555555555555555555555555555555555555555

//Zufall mit Hilfestellung                  5-1  5-1  5-1 

if ( _index == 9) then { 
        
               },
spreewälder ist offline  
Alt 11.05.2012, 11:52   #10 (permalink)
500 Beiträge1000 Beiträge
 
Benutzerbild von Pfandgiraffe
 
Registriert seit: 16.09.2008
Ort: Berlin
Alter: 38
Beiträge: 1.737
Pfandgiraffe eine Nachricht über ICQ schicken Pfandgiraffe eine Nachricht über Skype™ schicken
Standard

Hallo,

Frage zuerst nach _index == 9 und lasse damit, wenn true, einen neuen random index zwischen 1 und 8 generieren. Anschließend wird dein jetzt zufällig bestimmter _index ausgewählt. Benutze für die Auswahl aber den Befehl switch statt immer wieder if-then.

Code:
_index = (_this select 3) select 0;

_go_index = if (_index == 9) then {round (random 8)} else {_index};

switch (_go_index) do {
    case 0 : {// dein Code //};
    case 1 : {};
    ...
    case 8 : {}; 
};
Achtung!
Der Range geht hier von 0 bis 8! Nummeriere also am besten neu durch und fange bei Null an oder löse das Problem mathematisch.



Grüße
__________________
Niemand hat die Absicht eine Tüte zu bauen!
​​​​​​​
___<<<A3 Wounding System>>>___
Pfandgiraffe ist offline  
Alt 11.05.2012, 12:09   #11 (permalink)
50 Beiträge
 
Benutzerbild von spreewälder
 
Registriert seit: 21.10.2008
Beiträge: 54
Standard

Ahhh... vielen Dank!
spreewälder ist offline  
Alt 11.05.2012, 12:34   #12 (permalink)
50 Beiträge
 
Benutzerbild von spreewälder
 
Registriert seit: 21.10.2008
Beiträge: 54
Standard

Neu durchnummerieren geht klar.
Aber geht das nicht einfacher?

Weil im Prinzip müsste ich ja bei case 0 den code von index 0 bei case 1 von index 1 usw. eintragen... das ist ja dann irgendwie doppelt gemoppelt... kann man bei case nicht gleich auf die vorher definierten index (0-7 .. sind ja dann 8) verweisen?

Code:
_index = (_this select 3) select 0;

_index_8 = if (_index == 8) then {round (random 7)} else {_index};

switch (_index_8) do {
    case 0 : {Verweis auf index 0};
    case 1 : {Verweis auf index 1};;
    ...
    case 7 : {Verweis auf index 7}; 
};

Geändert von spreewälder (11.05.2012 um 12:37 Uhr).
spreewälder ist offline  
Alt 11.05.2012, 14:47   #13 (permalink)
50 Beiträge
 
Benutzerbild von spreewälder
 
Registriert seit: 21.10.2008
Beiträge: 54
Standard

Lösung gefunden:
Code:
_index_8 = if (_index == 8) then {round (random 7)} else {_index};

switch (_index_8) do {
    
case 0 : {[0,0,0,[0]] execVM "scripts\SPREE\Schiessen_PzFst\Ziele.sqf";};
case 1 : {[0,0,0,[1]] execVM "scripts\SPREE\Schiessen_PzFst\Ziele.sqf";};
case 2 : {[0,0,0,[2]] execVM "scripts\SPREE\Schiessen_PzFst\Ziele.sqf";};
case 3 : {[0,0,0,[3]] execVM "scripts\SPREE\Schiessen_PzFst\Ziele.sqf";};
case 4 : {[0,0,0,[4]] execVM "scripts\SPREE\Schiessen_PzFst\Ziele.sqf";};
case 5 : {[0,0,0,[5]] execVM "scripts\SPREE\Schiessen_PzFst\Ziele.sqf";};
case 6 : {[0,0,0,[6]] execVM "scripts\SPREE\Schiessen_PzFst\Ziele.sqf";};
case 7 : {[0,0,0,[7]] execVM "scripts\SPREE\Schiessen_PzFst\Ziele.sqf";};

Geändert von spreewälder (11.05.2012 um 15:14 Uhr).
spreewälder ist offline  
 


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

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
Kleine Frage und Hoffnung auf Rat Cpt. Crack Horse Editing & Scripting 6 20.03.2012 19:15
Anfänger hat Frage zu Map (Domination) TylerDurden Multiplayer 3 30.06.2011 16:05
Frage zum BWMOD Leo 2A6 GeneralX© Mods & Addons 1 26.03.2011 20:39
Frage: Squadleader und Join Request ColdJackle Technische Fragen & Probleme 13 25.10.2010 15:33
Frage zur BWMod Rabb_de Mods & Addons 1 10.08.2010 00:26


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