Armed-Assault.de Twitter
 
 
Themen-Optionen Ansicht
Alt 09.02.2013, 07:48   #1 (permalink)
500 Beiträge1000 Beiträge
 
Benutzerbild von Drunken Officer
 
Registriert seit: 15.05.2011
Beiträge: 1.109
Standard Problem mit Ari-Script

Ich habe mir mal das Ari-Script von Moerderhoschi angesehen und bissel damit rumgespielt.
Er arbeitet mit max 5 Angriffen. Ich wollte eine Zeitschleife, die eine mindestwartezeit hat (ähnlich wie bei der Domi)

Code:
ari_zaehler = 0;
_Mindestabstand = 175;
_Maximalabstand = 525;
_granatenanzahl = 15;            // GRANATEN PRO ARTILLERIESCHLAG
_flaeche = 100;                    //Flaechenradius

if (!isNil"ari_ziel") exitwith {[WEST,"HQ"] sideChat "Angriff wird ausgeführt, warten sie, OVER!";};
if (!isNil"_ari_wartezeit") exitWith {[WEST,"HQ"] sideChat "Ari ist am Nachladen, momentan nicht möglich";};

publicvariable "_zaehler";
[WEST,"HQ"] sideChat "Klicken sie auf der Karte die Angriffsposition an";
ari_ziel = 1;
_ari_wartezeit = 1;

onmapsingleclick
    "
    onmapsingleclick '';
    ari_ziel = _pos;
    ";
waituntil {typename ari_ziel == "ARRAY"};
if (player distance [ari_ziel select 0, ari_ziel select 1, 0] > _Maximalabstand) then
    {
          _ari_wartezeit = _ari_wartezeit  - 1;
        publicvariable "ari_zaehler";
        
        titletext [format ['Entfernung zum Ziel zu gross naehern Sie sich dem Ziel bis auf %1 Meter',_Maximalabstand],'PLAIN'];        
    }

    else
    {    
        if (player distance [ari_ziel select 0, ari_ziel select 1, 0] < _Mindestabstand) then
        {
            
              _ari_wartezeit = _ari_wartezeit  - 1;
            publicvariable "ari_zaehler";
            titletext ['Entfernung zum Ziel zu gering, eigene Einheit in Gefahrenzone','PLAIN'];        
        }
        else
        {
        
            [WEST,"HQ"] sideChat "Artillerieschlag erfolgt - Köpfe einziehen! OVER";
            

sleep 7 + random 5;
for '_x' from 1 to _granatenanzahl do
            {
                _granate = createVehicle ['ARTY_Sh_105_HE', 
                [
                (ari_ziel select 0)+(random _flaeche - random _flaeche),
                (ari_ziel select 1)+(random _flaeche - random _flaeche),
                100
                ],
                [], 0, 'FLY'];
    
                sleep 2 + random 2;
            };
        };
    };
    ari_ziel = nil;
    
//for '_x' from 1 to 120 do {sleep 1;    };
for [{_x=1},{_x<=120},{_x=_x+1}] do 
{
sleep 1;
};
_ari_wartezeit = nil;
Aber irgendwie wird die for-do-Schleife überrannt

Wie ich Parameter erstelle weiß ich. Wie kann ich darauf zugreifen? z.B die Anzahl der Granaten oder die Größe der Fläche aus den Parametern abrufen

Geändert von Drunken Officer (09.02.2013 um 07:50 Uhr).
Drunken Officer ist offline  
Alt 09.02.2013, 08:20   #2 (permalink)
500 Beiträge1000 Beiträge
 
Benutzerbild von Drunken Officer
 
Registriert seit: 15.05.2011
Beiträge: 1.109
Standard

Gelöst.
Ich habe aus
_ari_wartezeit ein ari_wartezeit gemacht.

Der _ ist doch lokal. Das script wird via Funkauslöser ausgelöst und nur bei einem Spieler rennt die Wartezeit, da nur ein Spieler == Spieler_3 sein kann. Wieso muß die Variable global sein?
Drunken Officer ist offline  
Alt 09.02.2013, 11:18   #3 (permalink)
Armed-Assault.de Team10 Jahre hx3
500 Beiträge1000 Beiträge2.500 Beiträge
 
Benutzerbild von Moerderhoschi
 
Registriert seit: 01.07.2006
Ort: Kabul
Alter: 38
Beiträge: 2.666
Standard

Du definierst zu Begin des Scripts ari_zaehler = 0;, aenderst den Wert in gesamten Script nicht mehr, sendest die Variable jedoch an 2 stellen mit publicvariable "ari_zaehler"; ueber das Netzwerk

Auch das konstrukt

for [{_x=1},{_x<=120},{_x=_x+1}] do
{
sleep 1;
};


ist unzweckmaeßig. Ein einfaches sleep 120; bringt hier das selbe Ergebnis.

Zitat von Drunken Officer Beitrag anzeigen

Der _ ist doch lokal. Das script wird via Funkauslöser ausgelöst und nur bei einem Spieler rennt die Wartezeit, da nur ein Spieler == Spieler_3 sein kann. Wieso muß die Variable global sein?

Kannst du die Frage umformulieren und etwas praeziser Stellen, ich weiß nicht wie du das hier meinst

gruß
hoschi
__________________


Moerderhoschi ist offline  
Alt 09.02.2013, 12:41   #4 (permalink)
500 Beiträge1000 Beiträge
 
Benutzerbild von Drunken Officer
 
Registriert seit: 15.05.2011
Beiträge: 1.109
Standard

ari_zaehler habe ich dringelassen, weil eine maximale Anzahl bstimmt zweckmäßig ist. Ich hatte nur die // vergessen.
Drunken Officer ist offline  
Alt 09.02.2013, 12:55   #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

Zitat von Drunken Officer Beitrag anzeigen

Gelöst.
Ich habe aus
_ari_wartezeit ein ari_wartezeit gemacht.

Der _ ist doch lokal. Das script wird via Funkauslöser ausgelöst und nur bei einem Spieler rennt die Wartezeit, da nur ein Spieler == Spieler_3 sein kann. Wieso muß die Variable global sein?

Die Variable ari_wartezeit soll verhindern, dass das Skript innerhalb der Wartezeit nochmals aufgerufen wird. Dafür muss diese Variable eine globale sein! Ein Skript kann beliebig oft gleichzeitig laufen. Jedes Skript verwendet eigene lokale Variable. Diese lokalen Variablen haben intern natürlich unterschiedliche Identifikationen, wodurch sich die Skripte nicht gegenseitig beeinflussen.

Der "Trick" für das Verhindern eines nochmaligen Aufrufes zur Laufzeit des ersten Skripts:

if (!isNil "ari_wartezeit") exitWith {};
ari_wartezeit = 1;
...
...
ari_wartezeit = nil;


isNil stellt fest ob es die Variable in den Anführungszeichen bereits gibt. Wenn ja, dann wird ein Skript-Aufruf in dieser Zeile beendet (dafür muss die Abfrage nicht isNil lauten).

ari_wartezeit = 1; erstellt eine solche globale Variable, die im Skirpt gleich für die Wartezeit verwendet wird (allerdings untauglich in deinem Skript.).

ari_wartezeit = nil; "löscht" die Variable und gibt das Skript für einen neuen Aufruf frei.

Würde man dafür eine lokale Variable verwenden, dann erstellt sich jeder Skript-Aufruf eine eigene solche Variable.
Vienna ist offline  
Alt 09.02.2013, 16:06   #6 (permalink)
500 Beiträge1000 Beiträge
 
Benutzerbild von Drunken Officer
 
Registriert seit: 15.05.2011
Beiträge: 1.109
Standard

Wiedereinmal Danke Vienne. Das mit dem Nil hatte ich begriffen, nur nicht warum sie global sein mußte. Alles klar.

Könntest du mir noch verraten, wie man die Werte aus den Pa0rametern auslesen kann.
Diese Code steht in der description.ext
Code:
titleParam1 = "Anzahl Ari-Granaten pro Angriff:";
valuesParam1[] = {5, 7, 10, 15, 20};
defValueParam1 = 7;
textsParam1[] = {"5", "7", "10", "15", "20"};
Ich weiß, dass das ein array ist und ich mit select 0,... darauf zugreife. Wie kann ich das in das script einbauen?
Drunken Officer ist offline  
Alt 09.02.2013, 16:43   #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

Das betrifft die Einstellungen beim Start einer Mission. Der gewählte Wert ist in den globalen System-Variablen param1 und param2 enthalten. Die kannst du wie normale Variable auslesen.

Genaueres findest du hier: http://community.bistudio.com/wiki/Description.ext
Vienna ist offline  
Alt 10.02.2013, 15:59   #8 (permalink)
500 Beiträge1000 Beiträge
 
Benutzerbild von Drunken Officer
 
Registriert seit: 15.05.2011
Beiträge: 1.109
Standard

Jo habe gefunden was ich brauchte.. "class Params" war die Lösung.
Drunken Officer 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

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Beta-Patch für OpA erschienen det99 Community 1429 18.07.2014 16:51
Problem mit Script in einer Mission... TheRhisd Editing & Scripting 22 18.09.2012 17:15
Ammobox Script problem G36Firestorm Editing & Scripting 11 18.07.2011 15:04
Revive Script Problem wArDoG81 Editing & Scripting 8 13.05.2011 22:35
Arma 2 op oa script Problem Benn1000 Editing & Scripting 19 21.04.2011 19:57


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