Moin liebe Leute!
Ich habe für euch mal eben den Progressbar Aufruf von Schmittys life umgeschrieben. Hiermit könnt ihr ganz einfach eine Progressbar aufrufen.
-> ["Titel","Animation",Zeit] spawn life_fnc_starteProgressbar;
Beispiel
-> ["Verarbeite Kupfer","AinvPercMstpSnonWnonDnon_Putdown_AmovPercMstpSnonWnonDnon",5] spawn life_fnc_starteProgressbar;
Bitte beachtet, das ihr in den Checks der files wo ihr es einfügt folgendes eintragt das es bei Abbruch dennoch Erfolgreich ist.
Beispiel: fn_repairTruck.sqf
Spoiler anzeigen
Code
#include "..\..\script_macros.hpp"
/*
File: fn_repairTruck.sqf
Author: Bryan "Tonic" Boardwine
Description:
Main functionality for toolkits, to be revised in later version.
*/
private ["_veh","_upp","_ui","_progress","_pgText","_cP","_displayName","_test","_sideRepairArray"];
_veh = cursorObject;
if (isNull _veh) exitWith {};
if ((_veh isKindOf "Car") || (_veh isKindOf "Ship") || (_veh isKindOf "Air")) then {
if (life_inv_toolkit > 0) then {
["Repariere Fahrzeug","AinvPknlMstpSnonWnonDnon_medic_1",5] spawn life_fnc_starteProgressbar;
_sideRepairArray = LIFE_SETTINGS(getArray,"vehicle_infiniteRepair");
//Check if playerSide has infinite repair enabled
if (playerSide isEqualTo civilian && (_sideRepairArray select 0) isEqualTo 0) then {
[false,"toolkit",1] call life_fnc_handleInv;
};
if (playerSide isEqualTo west && (_sideRepairArray select 1) isEqualTo 0) then {
[false,"toolkit",1] call life_fnc_handleInv;
};
if (playerSide isEqualTo independent && (_sideRepairArray select 2) isEqualTo 0) then {
[false,"toolkit",1] call life_fnc_handleInv;
};
if (playerSide isEqualTo east && (_sideRepairArray select 3) isEqualTo 0) then {
[false,"toolkit",1] call life_fnc_handleInv;
};
if (schmitt_fortschrittStatus != 1) exitWith
{
hint "Error!";
};
_veh setDamage 0;
titleText[localize "STR_NOTF_RepairedVehicle","PLAIN"];
};
};
Alles anzeigen
Neuen Eintrag in der Functions.hpp unter der class Functions
Neue Datei erstellen -> fn_startProgressbar.sqf
Spoiler anzeigen
Code
/*
File: fn_starteProgressbar.sqf
Autor: Thomas 'smallfly' Ludwig aka 'Schmitt'
Edit; Risk
*/
disableSerialization;
params[
["_titel","",[""]],
["_animation","",[""]],
["_dauerInSek",0 ,[0] ]
];
schmitt_fortschrittStatus = 0;
private _idcFortschrittBalken = 38201;
private _idcFortschrittTitel = 38202;
bildschirmEbeneFortschrittAnzeige cutRsc ["life_progress","PLAIN"];
private _display = uiNamespace getVariable "life_progress";
private _fortschrittBalken = _display displayCtrl _idcFortschrittBalken;
private _fortschrittTitel = _display displayCtrl _idcFortschrittTitel;
private _spielerPositionStart = getPos player;
private _initialFortschritt = 0.01;
private _maxAbstand = 2;
private _pauseProIntervallInSek = 0.1;
private _anzahlPausen = _dauerInSek / _pauseProIntervallInSek;
private _fortschrittProIntervall = 1.10 / _anzahlPausen;
private _fortschritt = _initialFortschritt;
_fortschrittTitel ctrlSetText format["%2 (1%1)...", "%", _titel];
_fortschrittBalken progressSetPosition _fortschritt;
for "_i" from 0 to 1 step 0 do
{
if (_animation != "" && {animationState player != _animation}) then {
player playMoveNow _animation; //_unit switchMove _anim;
};
sleep _pauseProIntervallInSek;
_fortschritt = _fortschritt + _fortschrittProIntervall;
_fortschrittBalken progressSetPosition _fortschritt;
_fortschrittTitel ctrlSetText format["%3 (%1%2) ...", round(_fortschritt * 100), "%", _titel];
private _spielerPositionAktuell = getPos player;
private _abstand = _spielerPositionStart distance _spielerPositionAktuell;
if (_abstand > _maxAbstand) exitWith {
hint format["Entfernung zu groß! Aktuell: %1 Meter Erlaubt: %2 Meter",_abstand,_maxAbstand];
schmitt_fortschrittStatus = -1;
};
if !(isNull objectParent player) exitWith
{
hint "Das Aus- bzw. Einsteigen führt zum Abbruch der Aktion!";
schmitt_fortschrittStatus = -1;
};
if (!alive player) exitWith
{
schmitt_fortschrittStatus = -1;
};
if (_fortschritt >= 1) exitWith {};
if (life_istazed) exitWith
{
schmitt_fortschrittStatus = -1;
};
if (life_isknocked) exitWith
{
schmitt_fortschrittStatus = -1;
}; //Knocked
};
bildschirmEbeneFortschrittAnzeige cutText ["","PLAIN"];
if (_animation != "" ) then {
player playActionNow "stop";
};
schmitt_fortschrittStatus = 1;
Alles anzeigen
Als letztes noch 2 Einträge in der configuration.sqf
Code
bildschirmEbeneFortschrittAnzeige = 5;schmitt_fortschrittStatus = 0; // -1 := Fehler; 0 := Läuft noch; 1 := erfolgreich abgeschlossen
Viel Spaß!