Update object pickup actions

- pre-compile object_BackpackAction, object_pickupAction and the actionMonitor
- switch from execVM to spawn
- pickup actions are grouped under actions\pickupActions now
This commit is contained in:
A Man
2020-04-23 17:48:55 +02:00
parent becfee04c9
commit 56bfa47615
8 changed files with 186 additions and 180 deletions

View File

@@ -0,0 +1,48 @@
private ["_action","_run","_timeout","_holder", "_type", "_classname","_name","_distance"];
_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;
//diag_log format["Holder: %1, Type: %2 Classname: %3, Name: %4",_holder, _type, _classname, _name];
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\pickupActions\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 and fall back to old code
if (_distance > 100) then {
null = _holder addAction [format[(localize "str_init_take"),_name], "\z\addons\dayz_code\actions\pickupActions\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;
};

View File

@@ -0,0 +1,19 @@
if (player isKindOf "PZombie_VB") exitWith {};
private ["_holder", "_type", "_classname", "_actionSet", "_name"];
_holder = _this select 0;
_type = _this select 1;
_classname = _this select 2;
_name = getText (configFile >> _type >> _classname >> "displayName");
if ((!isNil "_holder") and {(!isNull _holder)}) then {
_actionSet = _holder getVariable["actionSet", false];
if ((isNil "_actionSet") or {(!_actionSet)}) then {
s_player_holderPickup = _holder addAction [format [localize "str_init_take", _name], "\z\addons\dayz_code\actions\pickupActions\object_pickup.sqf",[_type,_classname,_holder], 20, true, true];
player reveal _holder;
_holder setVariable["actionSet", true];
};
};

View File

@@ -0,0 +1,22 @@
if (player isKindOf "PZombie_VB") exitWith {};
/*
Created exclusively for ArmA2:OA - DayZMod.
Please request permission to use/alter from R4Z0R49.
*/
private["_holder","_type","_classname","_name"];
_holder = _this select 0;
_type = _this select 1;
_classname = _this select 2;
_name = getText (configFile >> _type >> _classname >> "displayName");
pickupInit = true;
if (_classname == "1Rnd_Arrow_Wood") then {
[_holder,_type,_classname,_name] spawn actionMonitor;
} else {
s_player_holderPickup = _holder addAction [format[(localize "str_init_take"),_name], "\z\addons\dayz_code\actions\pickupActions\object_pickup.sqf",[_type,_classname,_holder], 20, true, true];
player reveal _holder;
pickupInit = true;
};