09.02.2013, 07:48 | #1 (permalink) |
Registriert seit: 15.05.2011
Beiträge: 1.109
|
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; 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). |
09.02.2013, 08:20 | #2 (permalink) |
Registriert seit: 15.05.2011
Beiträge: 1.109
|
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? |
09.02.2013, 11:18 | #3 (permalink) |
Registriert seit: 01.07.2006
Ort: Kabul
Alter: 38
Beiträge: 2.666
|
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. Kannst du die Frage umformulieren und etwas praeziser Stellen, ich weiß nicht wie du das hier meinst gruß hoschi |
09.02.2013, 12:55 | #5 (permalink) |
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
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. |
09.02.2013, 16:06 | #6 (permalink) |
Registriert seit: 15.05.2011
Beiträge: 1.109
|
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"}; |
09.02.2013, 16:43 | #7 (permalink) |
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
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 |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
|
|
Ä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 |