PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Erschöpfungsskript


romans
18.07.2016, 22:45
Hab ein Skript geschrieben, welches dem Erschöpfungszustand noch eins draufsetzen soll, um Packesel ein wenig einzubremsen. Nach festgelegter Zeit fängt die Spielerfigur an zu stöhnen und wenn man dann nicht langsamer macht, wird man ohnmächtig und muss warten, bis man wieder Puste hat. :D

Das Skript funktioniert so weit, aber man kann das Ding sicherlich noch optimieren. Wäre für Tipps sehr dankbar.

[]execVM "fatigue.sqf";

_time = 5;
_unit = player;
_snd = ["A3\sounds_f\characters\human-sfx\Person0\P0_moan_10.wss","A3\sounds_f\characters\human-sfx\other\vzkriseni_02.wss"];
_txt = "Nimm Streichhölzer, wenn dir das Sturmfeuerzeug zu schwer ist!";

while {alive _unit} do


{
waitUntil {sleep 1; getFatigue _unit == 1};
sleep _time;
playsound3d [_snd select 0,_unit];
sleep _time;

if (getFatigue _unit == 1) then

{
sleep _time /2;
_unit setUnconscious true;
_unit allowDamage false;
titleCut ["","BLACK OUT",1];
sleep 2*_time;
[_txt] call bis_fnc_dynamictext;
titleCut ["", "BLACK IN",10];
sleep _time /2;
_unit setFatigue 0.5;
_unit setUnconscious false;
playsound3d [_snd select 1,_unit];
_unit allowDamage true;
};

};

Drunken Officer
19.07.2016, 09:48
Bremse den Waituntil aus.
Waituntil checkt pro Frame. Brauchst du die Abfrage 50x pro Sekunde?

waitUntil {sleep 1; getFatigue _unit == 1};

Jetzt fragt er einmal pro Sekunde den Erschöpfungszustand ab.
Dein Script wird beendet, wenn die Person tot ist. Respawn beachtet?

romans
19.07.2016, 14:15
@ Drunken Officer

Vielen Dank! Deinen Tipp mit dem sleep nach waitUntil hab ich schon mal in einem deiner Beiträge gelesen, aber wieder vergessen. Jetzt sitzt das Ding aber. :)

Respawn hab ich über OnPlayerRespawn.sqf bedacht.

Sarogahtyp
22.07.2016, 08:31
du kannst dir das ganze durch 2 geteile sparen wenn du dir ne _halftime variable machst. dann wird aus

sleep _time /2;

das:

sleep _halftime;

spart nen paar rechenoperat8onen, ist 9n deinem script aber nur ne kleine optimierung und kein echter performance-gewinn.

romans
22.07.2016, 14:46
@ Sarogahtyp

Vielen Dank für den Tipp.

Sarogahtyp
22.07.2016, 14:52
für
sleep _time * 2;
kannst du dasselbe machen, habe ich vorhin nur übersehen. spart auch wieder ne rechenoperation in der schleife.