Armed-Assault.de Twitter


Editing The world is a Script - write it!

Antwort
 
Themen-Optionen Ansicht
Alt 11.07.2008, 17:18   #1 (permalink)
500 Beiträge
 
Benutzerbild von Mr.g-c
 
Registriert seit: 18.12.2006
Ort: Frankfurt->Darmstadt->Dieburg
Beiträge: 687
Mr.g-c eine Nachricht über ICQ schicken Mr.g-c eine Nachricht über MSN schicken
Standard Einfache Check-Schleife (sqf)

Hallo ich möchte einen einfachen "Check" ahben der alle paar sekunden checkt ob ein bestimmtes Fahrzeug (welches respawnt) noch am Leben ist, und wenn nicht dann einfach eine Hint message rausgibt.

Folgendes ist meine Version:
Code:
if (!isServer) exitWith {};
while {true} do {
            if (!alive specialvehicle || !alive special_einheit) then {
            hint localize ""STRS_einheit_destroyed"";
            specialvehicle setdamage 1;
            special_einheit setdamage 1;
            };
    sleep 2;
    };
Problem hierbei ist, dass die Hint nachricht im dauer angezeigt wird bis das Fahrzug und die Einheit respawnt. Das kann manchmal 20 minuten dauern und ist recht nervig.

Wie mache ich es, dass die Nachright nur einmal erscheint aber TROTZDEM beim nächsten möglichen "tod" der Einheit wieder enazeigt?
Mr.g-c ist offline   Mit Zitat antworten
Alt 11.07.2008, 17:47   #2 (permalink)
500 Beiträge
 
Benutzerbild von Mr.g-c
 
Registriert seit: 18.12.2006
Ort: Frankfurt->Darmstadt->Dieburg
Beiträge: 687
Mr.g-c eine Nachricht über ICQ schicken Mr.g-c eine Nachricht über MSN schicken
Standard

So habe ne einfache Lösung.... einfach das "then" mit "exitwith" ersetzt und den check von einem anderen Script aus starten gelassen (nämlich dem welches mein Fahrezug respawnt).
Mr.g-c ist offline   Mit Zitat antworten
Alt 11.07.2008, 17:53   #3 (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 mußt natürlich aus der Schleife raus, wenn sie ihren Zweck erfüllt hat.

Würde so gehen:

while (alive specialvehicle AND alive special_einheit) do {sleep 2};

Üblich ist aber so (ausser du willst nur alle 2 Sekunden abfragen):

waitUntil {!alive specialvehicle OR !alive special_einheit};

hint localize ""STRS_einheit_destroyed"";
specialvehicle setdamage 1;
special_einheit setdamage 1;

Hier könntest du noch anfügen, dass die Objekte z.B. nach 5 Minuten vollständig aus dem Spiel entfernt werden.

sleep 300;
deleteVehicle specialvehicle;
deleteVehicle special_einheit;

Bei der while Schleife ist zu beachten, dass sie nach 10.000 Durchläufen in ArmA automatisch beendet wird.
Vienna ist offline   Mit Zitat antworten
Alt 12.07.2008, 03:26   #4 (permalink)
500 Beiträge
 
Benutzerbild von Mr.g-c
 
Registriert seit: 18.12.2006
Ort: Frankfurt->Darmstadt->Dieburg
Beiträge: 687
Mr.g-c eine Nachricht über ICQ schicken Mr.g-c eine Nachricht über MSN schicken
Standard

Code:
waitUntil {!alive specialvehicle OR !alive special_einheit};

hint localize ""STRS_einheit_destroyed"";
specialvehicle setdamage 1;
special_einheit setdamage 1;
Läuft das script dann für immer, oder muss ich es ebenfalls jedesmal neu laden lassen?

Bist du dir mit den 10.000 durchläufen sicher?
Sahrani-Life zb läuft manchmal 3000 minuten und dort sind massiv 1 sekündige while-schleifen im einsatz...
Mr.g-c ist offline   Mit Zitat antworten
Alt 12.07.2008, 11: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

Das Skript läuft nur so lange, bis eines der Objekte zerstört ist.

Wenn du die Variablenamen wieder für neue Objekte verwendest, dann mußt du das Skript neu starten. Das ist so auch am sichersten, weil die "Schleife" die neuen Objekte in den Variablen möglicherweise nicht erkennt!

Die beiden Objekte übergibst du als Parameter, so ersparst du dir zwei globale Variable (falls du sie sonst nicht benötigest) und du kannst das Skript auch noch für andere Objekte verwenden.

Zu While ... do

Note (Applies to 1.85-1.97): Maximum repeat count for loop is 10000.
If condition is still true after loop was repeated 10000 times, loop is terminated and error message is shown.

Das war bei ArmA zu Beginn noch so. Möglich das sich da inzwischen was geändert hat. Ist ja leicht auszutesten.

Bis jetzt hat man eine unbegrenzte Endlosschleife so ausgeführt:
Code:
for [{_i=0},{_i<1},{_i=_i}] do
 {
   ...;
   ...;
   sleep 0.01;
   //Schleife verlassen?
   if(???)then(_i=1);
 };
Ich habe die Laufzeit der Schleifen getestet hier der Link:
Die Grenzen der While und For Schleife

Geändert von Vienna (12.07.2008 um 13:49 Uhr).
Vienna ist offline   Mit Zitat antworten
Antwort


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
Einfache Reskins aus BIS Pickups Mr.g-c Mods & Addons 4 06.07.2008 17:26
Check ob Fahrzeug zerstört Angelo85 Editing 6 08.12.2006 10:09


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