Bedingung muss 10s gegeben sein...?
Hallo,
brauche mal bitte eure Hilfe. Wie kann man in einem Skript (genauer gesagt in einer while do Schleife) neben der erfüllten Bedingung sagen das diese eine gewisse Zeit erfüllt sein muss um zu schalten? so ungefähr: while {true} do { if ((getDamage player >= 0.5) + 10 sek lang true) then {hint "test1"}; }; Gruß spaccy |
while {true} do {
waitUntil {Damage player >= 0.5}; sleep 10; if (damage player >= 0.5) then {...deine bedingung}; }; ...oder den schaden speichern... while {true} do { waitUntil {Damage player >= 0.5}; _actdam = damage player; sleep 10; if (damage player <= _actdam) then {...deine bedingung}; }; getDamage is nich. |
Danke für die schnelle Antwort.
Also das getdamage ist egal, sollte nur als Beispiel herhalten. Ich glaube das wird in meinem Skript nicht funktionieren. Das Skript soll das Fahrzeug des Spielers nach gewisser Zeit automatisch nach und nach reparieren und sieht ungefähr so aus: while {true} do { if ((Dammage vehicle player >= 0.1) and (Dammage vehicle player < 0.2)) then { sleep 5; vehicle player setdamage 0; }; if ((Dammage vehicle player >= 0.2) and (Dammage vehicle player < 0.3)) then { sleep 5; vehicle player setdamage 0.1; }; ... Da mehrere Abfragen in der While do Schleife vorliegen, wird "waituntil" wohl nicht funktionieren. Gibt es da vlt noch eine andere Möglichkeit? |
Ob das jetzt 10 Sek sind wage ich zu bezweifeln, aber da kannste ja mit den Werten spielen... habe mir das mal zu ArmA1-Zeiten gebastelt:
Code:
_vcl = _this select 0; |
Das Skript sollte schon in automatisch in einer Schleife laufen. Es ist eine Multiplayer Mission in der die Fahrzeuge der Teilnehmer nach Schaden sich langsam regenerieren. Ähnlich wie in Call of Duty.
@ Buliwyf Kann man dein Skript irgendwie auch in einer While do Schleife realisieren? |
Liste der Anhänge anzeigen (Anzahl: 1)
Beim Skriptaufrauf werden drei Parameter eingegeben:
1. Name des Objekts 2. Schaden in Prozent ab dem repariert wird. 3. Zeit der Schadensreparatur in Sekunden. Ist ein Objekt zu 100% zerstört, dann ist keine Reparatur möglich. Reparatur.sqf Code:
// Rapariert ein Objket, welches nicht total zerstört ist. [Vienna 16.02.2011] |
Liste der Anhänge anzeigen (Anzahl: 1)
Hey Vienna danke für deine Mühen. Bitte nicht böse sein aber das ist nicht ganz was ich suche. Ich hab mir jetzt mal eine Version gebastelt die der von Psychobastard ähnelt und ungefähr das macht was ich wollte. Leider sieht es nicht sehr elegant aus.
|
Wenn ich dich jetzt richtig verstanden habe möchtest du, dass ein vom Spieler benütztes und beschädigtes Fahrzeug, oder ein Spieler außerhalb eines Fahrzeuges, nach jeweils 4 Sekunden um 10% repariert wird?
Das würde dann so gehen: Code:
while {true} do |
Ich mein das Fahrzeug in das der jeweilige Spieler sitzt, dein Skript ist sehr geil und einfach, danke.
Die Idee war meinen Panzerlevel ein wenig dynamischer zu gestalten. Die ideale Lösung wär wenn das Repair-Skript erst startet wenn der gegnerische Beschuss, sagen wir mal 10 sek her ist. Die Reparatur sollte dann auch bei einem neuen Treffer unterbrochen werden und erst nach 10 sek wieder neu anfangen zu reparieren. |
Mit dieser Abfrage wirkt die Reparatur nur auf das Fahrzeug des Spielers, und nicht mehr auf den Spieler, wenn er ohne Fahrzeuges ist.
Auch startet die Reparaturschleife immer erst nach 10 Sekunden. Weiters wird sie unterbrochen, wenn sich der Schaden während der Reparatur um mehr als 5% erhöht. Es dauert dann wieder die 10 Sekunden, bis die Reparaturschleife neu startet. Code:
Private "_d"; |
Oha, das ist mir mit dem Vehicle Player vorher gar nicht aufgefallen. Danke dir nochmal für deine Arbeit. Genau das was ich suchte. :daumen: *prost*
|
Ich sehe gerade einen Fehler. In der Zeile
_d = damage vehicle Player * 1,05; muss das Komma ein Punkt sein! |
Noch eine Frage, welche Funktion hat "Private" eigentlich?
(in deinem Script -> Private "_d") |
Unter bestimmten Voraussetzungen können lokale Variable, mit mit gleichem Namen in vermeintlich getrennten Routinen, zu falschen Ergebnissen führen. Um das zu vermeiden ist es sinnvoll, die lokalen Variablen von allen eigenständigen Routinen mit "Private" zu deklarieren.
private - Bohemia Interactive Community Die Variablen werden üblicherweise gleich am Beginn der Programmroutinen deklariert, wodurch auch leichter ersichtlich ist, welch Variablen im Programm verwendet werden. |
Cool :naughty:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:05 Uhr. |
Angetrieben durch vBulletin, Entwicklung von Philipp Dörner & Tobias