Files
DayZ-Epoch/SQF/dayz_code/init/object_pickupAction.sqf
2016-02-27 22:30:15 -05:00

66 lines
2.0 KiB
Plaintext

private["_holder","_type","_classname","_name"];
_holder = _this select 0;
_type = _this select 1;
_classname = _this select 2;
_name = getText (configFile >> _type >> _classname >> "displayName");
// Exit if player zombie
if(player isKindOf "PZombie_VB") exitWith {};
pickupInit = true;
actionMonitor = {
private ["_holder","_type","_classname","_name","_action","_distance","_run","_timeout","_null"];
_holder = _this select 0;
_type = _this select 1;
_classname = _this select 2;
_name = _this select 3;
_action = -1;
_distance = player distance _holder;
_run = true;
_timeout = 2;
while { _run } do {
if (alive _holder) then {
_distance = player distance _holder;
// Add action to player
if ((_distance < 1.75) && (_action == -1)) then {
_action = player addAction [format[(localize "str_init_take"),_name], "\z\addons\dayz_code\actions\object_pickup.sqf",[_type,_classname,_holder], 20, true, true];
player reveal _holder;
_timeout = 0.3;
};
// Remove action from player
if ((_distance >= 1.75) && (_action != -1)) then {
player removeAction _action;
pickupInit = true;
_action = -1;
_timeout = 2;
};
// Stop the loop && fall back to old code
if (_distance > 100) then {
null = _holder addAction [format[(localize "str_init_take"),_name], "\z\addons\dayz_code\actions\object_pickup.sqf",[_type,_classname,_holder], 20, true, true];
player reveal _holder;
_run = false;
_timeout = 0;
};
} else {
if (_action != -1) then {
player removeAction _action;
_action = -1;
pickupInit = true;
};
_timeout = 0;
_run = false;
};
uiSleep _timeout;
};
};
if (_classname == "WoodenArrow") then {
[_holder,_type,_classname,_name] spawn actionMonitor;
} else {
s_player_holderPickup = _holder addAction [format[(localize "str_init_take"),_name], "\z\addons\dayz_code\actions\object_pickup.sqf",[_type,_classname,_holder], 20, true, true];
player reveal _holder;
pickupInit = true;
};