Update snap and vector build

Mady by @Victor-the-Cleaner
This commit is contained in:
A Man
2021-12-23 16:49:02 +01:00
parent c4a2e1b88f
commit 16361e5466
11 changed files with 839 additions and 567 deletions

View File

@@ -514,7 +514,7 @@ if (_proceed && _success) then {
call {
if (_type == 2) exitWith {_item addWeaponCargoGlobal [_itemOut, _countOut]};
if (_type == 3) exitWith {_item addMagazineCargoGlobal [_itemOut, _countOut]};
if (_type == 5) exitWith { //_item addBackpackCargoGlobal [_itemOut, _countOut]; // Needs to make sure object can handle Backpacks or will dump on the ground.
if (_type == 5) exitWith {
for "_i" from 1 to _countOut do {

View File

@@ -1,102 +1,103 @@
/*-----------------------------------*/
// by Raymix //
// July 10 2014 //
/*--------------------------------*/
///////////////////////////////////////////////////////////////////////////////////////////////////
//
// Author: Raymix
// Date: July 10 2014
//
// Updated by Victor the Cleaner
//
///////////////////////////////////////////////////////////////////////////////////////////////////
private ["_object", "_classname", "_objectHelper", "_selectedAction", "_cfg", "_whitelist", "_points", "_radius"];
local _p = _this select 3;
snapActionState = _this select 3 select 0;
_object = _this select 3 select 1;
_classname = _this select 3 select 2;
_objectHelper = _this select 3 select 3;
_selectedAction = _this select 3 select 4;
snapActionState = _p select 0;
local _object = _p select 1;
local _classname = _p select 2;
local _objectHelper = _p select 3;
local _selectedAction = _p select 4;
//Snap config file
_cfg = (configFile >> "SnapBuilding" >> _classname);
_whitelist = getArray (_cfg >> "snapTo");
_points = getArray (_cfg >> "points");
_radius = getNumber (_cfg >> "radius");
local _points = getArray (configFile >> "SnapBuilding" >> _classname >> "points");
_moveHelper = {
detach _objectHelper;
detach _object;
if (DZE_SnapSelIdx >= 0) then {
_objectHelper setPosATL (getPosATL (snapGizmos select DZE_SnapSelIdx));
} else {
// reset helper to modelBase or modelCenter position (not necessarily the same as pivot/bottom)
_objectHelper setPosATL (getPosATL modelSelect);
};
_object attachTo [_objectHelper];
if (!helperDetach) then {
_objectHelper attachTo [player];
};
[_objectHelper, [DZE_memForBack, DZE_memLeftRight, DZE_memDir]] call fnc_SetPitchBankYaw;
};
call {
if (snapActionState == "Init") exitwith {
["init",true] call fnc_initSnapTutorial;
if (snapActionState == "Init") exitWith {
snapActionState = localize "STR_EPOCH_ACTION_SNAP_OFF";
[1,0,0,_object,_classname,_objectHelper,_points] call fnc_snapActionCleanup;
[1,0,0, _object, _classname, _objectHelper, _points] call fnc_snapActionCleanup;
[_object,_classname,_objectHelper,_points] spawn {
private ["_object", "_classname", "_objectHelper", "_points"];
[_object, _classname, _objectHelper, _points] spawn {
_object = _this select 0;
_classname = _this select 1;
_objectHelper = _this select 2;
_points = _this select 3;
local _object = _this select 0;
local _classname = _this select 1;
local _objectHelper = _this select 2;
local _points = _this select 3;
while {1==1} do {
if (DZE_cancelBuilding || {!dayz_actionInProgress}) exitWith {
if (DZE_cancelBuilding || !dayz_actionInProgress || DZE_nowBuilding) exitWith {
call fnc_initSnapPointsCleanup;
[0,0,0,_object,_classname,_objectHelper,_points] call fnc_snapActionCleanup;
["",false] call fnc_initSnapTutorial;
[0,0,0, _object, _classname, _objectHelper, _points] call fnc_snapActionCleanup;
snapActionState = localize "STR_EPOCH_ACTION_SNAP_OFF";
};
uiSleep 2;
uiSleep 0.2;
};
};
};
if (snapActionState == localize "STR_EPOCH_ACTION_SNAP_OFF") exitwith {
["OnAuto",true] call fnc_initSnapTutorial;
if (snapActionState == localize "STR_EPOCH_ACTION_SNAP_OFF") exitWith { // OFF to Auto
snapActionState = localize "STR_EPOCH_ACTION_SNAP_ON";
snapActionStateSelect = "Auto";
[1,1,0,_object,_classname,_objectHelper,_points] call fnc_snapActionCleanup;
[_object,_points] call fnc_initSnapPoints;
[_object,_whitelist,_radius] call fnc_initSnapPointsNearby;
[1,1,0, _object, _classname, _objectHelper, _points] call fnc_snapActionCleanup;
[_object, _points] call fnc_initSnapPoints;
[_object] call fnc_initSnapPointsNearby;
uiSleep 0.25;
[_object,_objectHelper] call fnc_snapDistanceCheck;
[_object, _objectHelper] call fnc_snapDistanceCheck;
};
if (snapActionState == localize "STR_EPOCH_ACTION_SNAP_ON") exitwith {
["init",true] call fnc_initSnapTutorial;
if (snapActionState == localize "STR_EPOCH_ACTION_SNAP_ON") exitWith { // ON to OFF
snapActionState = localize "STR_EPOCH_ACTION_SNAP_OFF";
[1,0,0,_object,_classname,_objectHelper,_points] call fnc_snapActionCleanup;
DZE_SnapSelIdx = -2;
[1,0,0, _object, _classname, _objectHelper, _points] call fnc_snapActionCleanup;
call _moveHelper;
call fnc_initSnapPointsCleanup;
};
if (snapActionState == "Auto") exitwith {
["manual",true] call fnc_initSnapTutorial;
if (snapActionState == "Auto") exitWith { // Auto to Manual, but nothing selected
snapActionState = localize "STR_EPOCH_ACTION_SNAP_ON";
snapActionStateSelect = localize "STR_EPOCH_ACTION_SNAP_POINT_MANUAL";
[1,1,1,_object,_classname,_objectHelper,_points] call fnc_snapActionCleanup;
[1,1,1, _object, _classname, _objectHelper, _points] call fnc_snapActionCleanup;
};
if (snapActionState == localize "STR_EPOCH_ACTION_SNAP_POINT_MANUAL") exitwith {
["OnAuto",true] call fnc_initSnapTutorial;
if (snapActionState == localize "STR_EPOCH_ACTION_SNAP_POINT_MANUAL") exitWith { // Manual to Auto
snapActionState = localize "STR_EPOCH_ACTION_SNAP_ON";
snapActionStateSelect = "Auto";
[1,1,0,_object,_classname,_objectHelper,_points] call fnc_snapActionCleanup;
[1,1,0, _object, _classname, _objectHelper, _points] call fnc_snapActionCleanup;
};
if (snapActionState == "Selected") exitwith {
private ["_cnt", "_newPos"];
_cnt = 0;
_newPos = [];
if (snapActionState == "Selected") exitWith { // select snapping point
{
_x setobjecttexture [0,"#(argb,8,8,3)color(0.04,0.84,0.92,0.3,ca)"];
if (_cnt == _selectedAction) then {
_newPos = [(getPosATL _x select 0),(getPosATL _x select 1),(getPosATL _x select 2)];
detach _object;
detach _objectHelper;
_objectHelper setDir (getDir _object);
_objectHelper setPosATL _newPos;
_object attachTo [_objectHelper];
_x setobjecttexture [0,"#(argb,8,8,3)color(0,0.92,0.06,1,ca)"];
if (!helperDetach) then {
_objectHelper attachTo [player];
_objectHelper setDir ((getDir _objectHelper)-(getDir player));
};
[_objectHelper,[DZE_memForBack,DZE_memLeftRight,DZE_memDir]] call fnc_SetPitchBankYaw;
if (_forEachIndex == _selectedAction) then {
DZE_SnapSelIdx = _forEachIndex; // snap selection index
call _moveHelper;
_x setObjectTexture DZE_SNAP_POINT_FOUND; // red
} else {
_x setObjectTexture DZE_SNAP_POINT_RESET; // green
};
_cnt = _cnt + 1;
} count snapGizmos;
} forEach snapGizmos;
[1,1,1, _object, _classname, _objectHelper, _points] call fnc_snapActionCleanup;
};
};

View File

@@ -1,10 +1,10 @@
/*-----------------------------------*/
// by strikerforce //
/*--------------------------------*/
///////////////////////////////////////////////////////////////////////////////////////////////////
//
// Author: strikerforce
//
///////////////////////////////////////////////////////////////////////////////////////////////////
private ["_todo", "_selected"];
_todo = _this select 3 select 2;
local _todo = _this select 3 select 2;
if (_todo == 0) then {
vectorActionState = _this select 3 select 0;
@@ -17,59 +17,59 @@ if (_todo == 0) then {
};
};
_selected = _this select 3 select 3;
local _selected = _this select 3 select 3;
if (_todo == 1 || {_todo == 0}) then {
if ((_todo == 1) || (_todo == 0)) then {
call {
if (vectorActionState == "Init") exitwith {
if (vectorActionState == "Init") exitWith {
vectorActionState = localize "STR_EPOCH_VECTORS_OPEN";
[1,0] call fnc_vectorActionCleanup;
[] spawn {
while {1==1} do {
if (DZE_cancelBuilding || {!dayz_actionInProgress}) exitWith {
if (DZE_cancelBuilding || !dayz_actionInProgress || DZE_nowBuilding) exitWith {
[0,0] call fnc_vectorActionCleanup;
vectorActionState = localize "STR_EPOCH_VECTORS_CLOSE";
};
uisleep 2;
uiSleep 0.5;
};
};
};
if (vectorActionState == localize "STR_EPOCH_VECTORS_OPEN") exitwith {
if (vectorActionState == localize "STR_EPOCH_VECTORS_OPEN") exitWith {
vectorActionState = localize "STR_EPOCH_VECTORS_CLOSE";
[1,1] call fnc_vectorActionCleanup;
};
if (vectorActionState == localize "STR_EPOCH_VECTORS_CLOSE") exitwith {
if (vectorActionState == localize "STR_EPOCH_VECTORS_CLOSE") exitWith {
vectorActionState = localize "STR_EPOCH_VECTORS_OPEN";
[1,0] call fnc_vectorActionCleanup;
};
if (vectorActionState == localize "STR_EPOCH_VECTORS_PITCH_FORWARD") exitwith {
if (vectorActionState == localize "STR_EPOCH_VECTORS_PITCH_FORWARD") exitWith {
vectorActionState = localize "STR_EPOCH_VECTORS_CLOSE";
[1,1] call fnc_vectorActionCleanup;
DZE_updateVec = true;
DZE_memForBack = DZE_memForBack + (DZE_curDegree * -1);
DZE_memForBack = DZE_memForBack - DZE_curDegree;
};
if (vectorActionState == localize "STR_EPOCH_VECTORS_PITCH_BACK") exitwith {
if (vectorActionState == localize "STR_EPOCH_VECTORS_PITCH_BACK") exitWith {
vectorActionState = localize "STR_EPOCH_VECTORS_CLOSE";
[1,1] call fnc_vectorActionCleanup;
DZE_updateVec = true;
DZE_memForBack = DZE_memForBack + DZE_curDegree;
};
if (vectorActionState == localize "STR_EPOCH_VECTORS_BANK_LEFT") exitwith {
if (vectorActionState == localize "STR_EPOCH_VECTORS_BANK_LEFT") exitWith {
vectorActionState = localize "STR_EPOCH_VECTORS_CLOSE";
[1,1] call fnc_vectorActionCleanup;
DZE_updateVec = true;
DZE_memLeftRight = DZE_memLeftRight + (DZE_curDegree * -1);
DZE_memLeftRight = DZE_memLeftRight - DZE_curDegree;
};
if (vectorActionState == localize "STR_EPOCH_VECTORS_BANK_RIGHT") exitwith {
if (vectorActionState == localize "STR_EPOCH_VECTORS_BANK_RIGHT") exitWith {
vectorActionState = localize "STR_EPOCH_VECTORS_CLOSE";
[1,1] call fnc_vectorActionCleanup;
DZE_updateVec = true;
DZE_memLeftRight = DZE_memLeftRight + DZE_curDegree;
};
if (vectorActionState == localize "STR_EPOCH_VECTORS_RESET") exitwith {
if (vectorActionState == localize "STR_EPOCH_VECTORS_RESET") exitWith {
vectorActionState = localize "STR_EPOCH_VECTORS_CLOSE";
[1,1] call fnc_vectorActionCleanup;
DZE_memForBack = 0;
@@ -80,32 +80,32 @@ if (_todo == 1 || {_todo == 0}) then {
};
};
if (_todo == 2 || {_todo == 0}) then{
if ((_todo == 2) || (_todo == 0)) then{
call {
if (degreeActionState == "Init") exitwith {
if (degreeActionState == "Init") exitWith {
degreeActionState = localize "STR_EPOCH_VECTORS_OPEN";
[1,0] call fnc_degreeActionCleanup;
[] spawn {
while {1==1} do {
if (DZE_cancelBuilding || {!dayz_actionInProgress}) exitWith {
if (DZE_cancelBuilding || !dayz_actionInProgress || DZE_nowBuilding) exitWith {
[0,0] call fnc_degreeActionCleanup;
degreeActionState = localize "STR_EPOCH_VECTORS_CLOSE";
};
uisleep 2;
uiSleep 0.5;
};
};
};
if (degreeActionState == localize "STR_EPOCH_VECTORS_OPEN") exitwith {
if (degreeActionState == localize "STR_EPOCH_VECTORS_OPEN") exitWith {
degreeActionState = localize "STR_EPOCH_VECTORS_CLOSE";
[1,1] call fnc_degreeActionCleanup;
};
if (degreeActionState == localize "STR_EPOCH_VECTORS_CLOSE") exitwith {
if (degreeActionState == localize "STR_EPOCH_VECTORS_CLOSE") exitWith {
degreeActionState = localize "STR_EPOCH_VECTORS_OPEN";
[1,0] call fnc_degreeActionCleanup;
};
if (degreeActionState == "SELECT") exitwith {
if (degreeActionState == "SELECT") exitWith {
degreeActionState = localize "STR_EPOCH_VECTORS_CLOSE";
DZE_curDegree = _selected;
[1,1] call fnc_degreeActionCleanup;

View File

@@ -1,95 +1,115 @@
/*-----------------------------------*/
// by strikerforce //
/*--------------------------------*/
///////////////////////////////////////////////////////////////////////////////////////////////////
//
// Author: strikerforce
//
// Updated by Victor the Cleaner
//
///////////////////////////////////////////////////////////////////////////////////////////////////
fnc_vectorActionCleanup = {
private ["_s1","_s2","_staticRotate","_vector"];
_s1 = _this select 0;
_s2 = _this select 1;
_staticRotate = ["STR_EPOCH_VECTORS_PITCH_FORWARD","STR_EPOCH_VECTORS_PITCH_BACK","STR_EPOCH_VECTORS_BANK_LEFT","STR_EPOCH_VECTORS_BANK_RIGHT","STR_EPOCH_VECTORS_RESET"];
local _ORA = "<t color='#ff8800'>"; // orange
local _WHT = "<t color='#ffffff'>"; // white
local _TAB = " ";
local _END = "</t>";
local _VEC = localize "STR_EPOCH_ACTION_VECTORS";
local _txt = "";
local _s1 = _this select 0;
local _s2 = _this select 1;
local _staticRotate = ["STR_EPOCH_VECTORS_PITCH_FORWARD","STR_EPOCH_VECTORS_PITCH_BACK","STR_EPOCH_VECTORS_BANK_LEFT","STR_EPOCH_VECTORS_BANK_RIGHT","STR_EPOCH_VECTORS_RESET"];
player removeAction s_player_toggleVector;
s_player_toggleVector = -1;
if (count s_player_toggleVectors != 0) then {
{player removeAction _x;} count s_player_toggleVectors;
s_player_toggleVectors = [];
vectorActions = -1;
};
{player removeAction _x;} count s_player_toggleVectors;
vectorActions = -1;
if (_s1 > 0) then {
s_player_toggleVector = player addaction [format["<t color=""#ff8800"">" + localize "STR_EPOCH_ACTION_VECTORS" + " %1" +"</t>",vectorActionState],"\z\addons\dayz_code\compile\BuildVectors\build_vectors.sqf",[vectorActionState,degreeActionState,1],7,false,false];
_txt = format[_ORA + _VEC + " %1" + _END, vectorActionState];
s_player_toggleVector = player addAction [_txt, "\z\addons\dayz_code\compile\BuildVectors\build_vectors.sqf",[vectorActionState,degreeActionState,1],7,false,false];
};
if (_s2 > 0) then {
s_player_toggleVectors = [];
{
_vector = localize _x;
vectorActions = player addaction [format["<t color=""#ffffff"">" + " %1" +"</t>",_vector],"\z\addons\dayz_code\compile\BuildVectors\build_vectors.sqf",[_vector,degreeActionState,1],6,false,false];
s_player_toggleVectors set [count s_player_toggleVectors,vectorActions];
local _vector = localize _x;
_txt = format[_WHT + _TAB + "%1" + _END, _vector];
vectorActions = player addAction [_txt, "\z\addons\dayz_code\compile\BuildVectors\build_vectors.sqf",[_vector,degreeActionState,1],6,false,false];
s_player_toggleVectors set [count s_player_toggleVectors, vectorActions];
} count _staticRotate;
};
};
fnc_degreeActionCleanup = {
private ["_s1","_s2"];
_s1 = _this select 0;
_s2 = _this select 1;
local _ORA = "<t color='#ff8800'>"; // orange
local _RED = "<t color='#ff0000'>"; // red
local _WHT = "<t color='#ffffff'>"; // white
local _GRN = "<t color='#20E020'>"; // green
local _DEG = localize "STR_EPOCH_VECTORS_DEGREES";
local _SEL = localize "STR_EPOCH_ACTION_SNAP_SELECT";
local _TAB = " ";
local _END = "</t>";
local _txt = "";
local _s1 = _this select 0;
local _s2 = _this select 1;
player removeAction s_player_toggleDegree;
s_player_toggleDegree = -1;
if (count s_player_toggleDegrees != 0) then {
{player removeAction _x;} count s_player_toggleDegrees;
s_player_toggleDegrees = [];
degreeActions = -1;
};
{player removeAction _x;} count s_player_toggleDegrees;
degreeActions = -1;
if (_s1 > 0) then {
s_player_toggleDegree = player addaction [format["<t color=""#ff8800"">" + localize "STR_EPOCH_VECTORS_DEGREES" + " %1" +"</t>",degreeActionState],"\z\addons\dayz_code\compile\BuildVectors\build_vectors.sqf",[vectorActionState,degreeActionState,2],5,false,false];
_txt = format[_ORA + _DEG + " %1" + _END, degreeActionState];
s_player_toggleDegree = player addAction [_txt, "\z\addons\dayz_code\compile\BuildVectors\build_vectors.sqf",[vectorActionState,degreeActionState,2],5,false,false];
};
if (_s2 > 0) then {
s_player_toggleDegrees = [];
{
if (DZE_curDegree == _x) then {
degreeActions = player addaction [format["<t color=""#ff0000"">" + " " + localize "STR_EPOCH_ACTION_SNAP_SELECT" + " %1" +"</t>",_x],"\z\addons\dayz_code\compile\BuildVectors\build_vectors.sqf",[vectorActionState,"SELECT",2,_x],4,false,false];
} else {
degreeActions = player addaction [format["<t color=""#ffffff"">" + " " + localize "STR_EPOCH_ACTION_SNAP_SELECT" + " %1" +"</t>",_x],"\z\addons\dayz_code\compile\BuildVectors\build_vectors.sqf",[vectorActionState,"SELECT",2,_x],4,false,false];
};
local _COL = _WHT;
if (DZE_curDegree == _x) then {_COL = _RED;};
s_player_toggleDegrees set [count s_player_toggleDegrees,degreeActions];
_txt = format[_TAB + _COL + _SEL + " %1" + _END, _x];
degreeActions = player addAction [_txt, "\z\addons\dayz_code\compile\BuildVectors\build_vectors.sqf",[vectorActionState,"SELECT",2,_x],4,false,false];
s_player_toggleDegrees set [count s_player_toggleDegrees, degreeActions];
} count DZE_vectorDegrees;
};
};
fnc_SetPitchBankYaw = {
private ["_sinaroundX","_cosaroundX","_dirY","_dirZ","_upY","_upZ","_sinaroundY","_cosaroundY","_dirX","_upX","_sinaroundZ","_cosaroundZ","_dirXTemp","_upXTemp","_object","_rotations","_aroundX","_aroundY","_aroundZ","_dir","_up"];
_object = _this select 0;
_rotations = _this select 1;
_aroundX = _rotations select 0;
_aroundY = _rotations select 1;
_aroundZ = (360 - (_rotations select 2)) - 360;
local _object = _this select 0;
local _rotations= _this select 1;
_dirX = 0;
_dirY = 1;
_dirZ = 0;
_upX = 0;
_upY = 0;
_upZ = 1;
local _aroundX = _rotations select 0;
local _aroundY = _rotations select 1;
local _aroundZ = -(_rotations select 2);
local _dirX = 0;
local _dirY = 1;
local _dirZ = 0;
local _upX = 0;
local _upY = 0;
local _upZ = 1;
if (_aroundX != 0) then {
_sinaroundX = sin _aroundX;
_cosaroundX = cos _aroundX;
local _sinaroundX = sin _aroundX;
local _cosaroundX = cos _aroundX;
_dirY = _cosaroundX;
_dirZ = _sinaroundX;
_upY = -(_sinaroundX);
_upY = -_sinaroundX;
_upZ = _cosaroundX;
};
if (_aroundY != 0) then {
_sinaroundY = sin _aroundY;
_cosaroundY = cos _aroundY;
local _sinaroundY = sin _aroundY;
local _cosaroundY = cos _aroundY;
_dirX = _dirZ * _sinaroundY;
_dirZ = _dirZ * _cosaroundY;
_upX = _upZ * _sinaroundY;
@@ -97,17 +117,17 @@ fnc_SetPitchBankYaw = {
};
if (_aroundZ != 0) then {
_sinaroundZ = sin _aroundZ;
_cosaroundZ = cos _aroundZ;
_dirXTemp = _dirX;
local _sinaroundZ = sin _aroundZ;
local _cosaroundZ = cos _aroundZ;
local _dirXTemp = _dirX;
_dirX = (_dirXTemp * _cosaroundZ) - (_dirY * _sinaroundZ);
_dirY = (_dirY * _cosaroundZ) + (_dirXTemp * _sinaroundZ);
_upXTemp = _upX;
local _upXTemp = _upX;
_upX = (_upXTemp * _cosaroundZ) - (_upY * _sinaroundZ);
_upY = (_upY * _cosaroundZ) + (_upXTemp * _sinaroundZ);
};
_dir = [_dirX, _dirY, _dirZ];
_up = [_upX, _upY, _upZ];
local _dir = [_dirX, _dirY, _dirZ];
local _up = [_upX, _upY, _upZ];
_object setVectorDirAndUp [_dir, _up];
};

View File

@@ -0,0 +1,201 @@
///////////////////////////////////////////////////////////////////////////////////////////////////
//
// Epoch Snap Building
//
// Author: Victor the Cleaner
// Date: December 2021
//
///////////////////////////////////////////////////////////////////////////////////////////////////
local _distFromPlot = _this select 0;
local _radius = _this select 1;
local _snappingEnabled = _this select 2;
local _vectoringEnabled = _this select 3;
local _snapList = _this select 4;
local _object = _this select 5;
local _header = "<img align='left' size='1' image='\z\addons\dayz_code\gui\EpochSnapBuilding.paa'></img><br/>";
local _format = "<t align='left' size='0.4' font='Zeppelin33'>";
local _COL = "<t shadow='2' color=";
local _WHT = _COL + "'#E0E0E0'>"; // white '#FFFFFF'
local _GRN = _COL + "'#20E020'>"; // green
local _RED = _COL + "'#FF0000'>"; // red
local _ORA = _COL + "'#FF8800'>"; // orange
local _GRY = _COL + "'#808080'>"; // greyed out
local _TRN = _format + "<t shadow='0' color='#00000000'>"; // transparent
local _VEC = [_GRY, _WHT] select _vectoringEnabled; // initial text color
local _END = "</t>"; // end of segment
local _NL = _END + "<br/>"; // new line
local _spacing = _TRN + "." + _NL; // blank line
local _strPitch = localize "STR_EPOCH_TUT_PITCH";
local _strBank = localize "STR_EPOCH_TUT_BANK";
local _strRotate = localize "STR_EPOCH_TUT_ROTATE";
local _tab = localize "STR_EPOCH_TUT_KEY_TAB";
local _PgUp = localize "STR_EPOCH_TUT_KEY_PGUP";
local _PgDn = localize "STR_EPOCH_TUT_KEY_PGDN";
local _hyphen = _WHT + "-" + _ORA;
local _slash = _WHT + "/" + _ORA;
local _colon = _WHT + ": ";
local _pipe = _WHT + " | " + _ORA;
local _na = _GRY + "-";
local _OBR = _ORA + "[";
local _WBR = _WHT + "]";
local _DBR = "] [";
local _BRW = "] " + _WHT;
local _hpsp = _hyphen + _PgUp + _slash + _PgDn + _BRW;
local _HK = _OBR + _tab + _DBR + localize "STR_EPOCH_TUT_KEY_SHIFT" + _hyphen + _tab + _BRW + localize "STR_EPOCH_TUT_SNAP_NEXT_PREV" + _NL;
_HK = _HK + _OBR + _PgUp + _DBR + _PgDn + _BRW + localize "STR_EPOCH_TUT_HEIGHT10" + _NL;
_HK = _HK + _OBR + localize "STR_EPOCH_TUT_KEY_CTRL" + _hpsp + localize "STR_EPOCH_TUT_HEIGHT1" + _NL;
_HK = _HK + _OBR + localize "STR_EPOCH_TUT_KEY_ALT" + _hpsp + localize "STR_EPOCH_TUT_HEIGHT100" + _NL;
_HK = _HK + _OBR + localize "STR_EPOCH_TUT_KEY_ARROWS" + _BRW + _strPitch + " / " + _strBank + _NL;
_HK = _HK + _ORA + "[Q] [E] " + _WHT + _strRotate + _NL;
_HK = _HK + _ORA + "[-] [=] " + _WHT + localize "STR_EPOCH_TUT_ADJ_DEGREES" + _NL;
_HK = _HK + _spacing;
_HK = _HK + _ORA + "[L] " + _WHT + localize "STR_EPOCH_TUT_LOCAL" + " [%1"+ _NL;
_HK = _HK + _ORA + "[T] " + _VEC + localize "STR_EPOCH_TUT_TERRAIN" + _NL;
_HK = _HK + _ORA + "[P] " + _WHT + localize "STR_EPOCH_TUT_BOUNDARY" + _NL;
_HK = _HK + _ORA + "[F] " + _WHT + localize "STR_EPOCH_TUT_RELEASE_HOLD" + _NL;
_HK = _HK + _ORA + "[H] " + _WHT + localize "STR_EPOCH_TUT_HIDE_PANEL" + _NL;
_HK = _HK + _spacing;
_HK = _HK + _OBR + localize "STR_EPOCH_TUT_KEY_ESC" + _BRW + localize "STR_EPOCH_TUT_CANCEL" + _NL;
_HK = _HK + _OBR + localize "STR_EPOCH_TUT_KEY_BACKSPACE" + _BRW + localize "STR_EPOCH_TUT_RESET" + _NL;
_HK = _HK + _OBR + localize "STR_EPOCH_TUT_KEY_SPACEBAR" + _BRW + localize "STR_EPOCH_TUT_BUILD" + _END;
local _distance = 0;
if (_distFromPlot != "0") then {
_distance = _na;
_radius = _na;
} else {
_radius = (str _radius) + "m";
};
local _snapState = localize "STR_EPOCH_TUT_DISABLED";
local _SNP = _GRY; // initial text color
local _snapText = "";
local _snapRange = "";
local _snapMinIdx = 0;
local _snapMaxIdx = (count _snapList) - 3; // 0-based index max
local _pitch = 0;
local _bank = 0;
local _rotate = 0;
local _localModeOn = _GRN + localize "STR_EPOCH_TUT_LOCAL_ON" + _WBR;
local _localModeOff = _ORA + localize "STR_EPOCH_TUT_LOCAL_OFF" + _WBR;
local _localText = "";
local _tutDistance = _ORA + localize "STR_EPOCH_TUT_DISTANCE" + _colon + "%1" + _pipe + localize "STR_EPOCH_TUT_RADIUS" + _colon + "%2" + _NL;
local _tutSnapping = _ORA + localize "STR_EPOCH_TUT_SNAPPING" + _colon + "[%1" + _WHT + "]%2" + _NL;
local _tutVectoring = _ORA + _strPitch + _colon + "%1" + _pipe + _strBank + _colon + "%2" + _pipe + _strRotate + _colon + "%3" + _NL;
local _tutDegrees = _ORA + localize "STR_EPOCH_TUT_DEGREES" + _colon + "%1" + _NL;
while {1==1} do {
if (!dayz_actionInProgress || DZE_nowBuilding) exitWith {};
if (!DZE_HIDE_PANEL) then {
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Distance From Plot
//
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
if (_distFromPlot == "0") then {
_distance = [distanceFromPlot, 1] call BIS_fnc_cutDecimals;
if (_distance - (floor _distance) == 0) then {
_distance = (str _distance) + ".0";
};
};
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Snapping
//
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
if (_snappingEnabled && !skipUpdates) then {
local _OFF = snapActionState == localize "STR_EPOCH_ACTION_SNAP_OFF";
local _ON = snapActionState == localize "STR_EPOCH_ACTION_SNAP_ON";
local _SELECT = snapActionStateSelect == localize "STR_EPOCH_ACTION_SNAP_POINT_MANUAL";
local _MANUAL = _ON && _SELECT;
call {
if (_OFF) exitWith {DZE_SnapTabIdx = 0; DZE_SnapSelIdx = -2;}; // OFF
if (_ON) exitWith {DZE_SnapTabIdx = 1; DZE_SnapSelIdx = -1;}; // ON/Auto
if (_SELECT) exitWith {DZE_SnapTabIdx = DZE_SnapSelIdx + 2;}; // Selected
};
_snapState = _snapList select DZE_SnapTabIdx;
call {
if (_MANUAL) exitWith {_SNP = _GRN; _snapState = snapActionStateSelect;}; // Manual (Action Menu only)
if (DZE_SnapTabIdx == 0) exitWith {_SNP = _ORA;}; // OFF
if (DZE_SnapTabIdx == 1) exitWith {_SNP = _GRN;}; // Auto
if (DZE_SnapTabIdx > 1) exitWith {_SNP = _GRN;}; // Selected
};
_snapRange = "";
if ((DZE_SnapSelIdx >= _snapMinIdx) && (DZE_SnapSelIdx <= _snapMaxIdx)) then {
_snapRange = " [ " + _GRN + "%1" + _WHT + " / %2 ]";
_snapRange = format[_snapRange, DZE_SnapSelIdx + 1, _snapMaxIdx + 1];
};
};
_snapText = _SNP + _snapState;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Vectoring
//
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
_pitch = _VEC + str ([DZE_memForBack, 2] call BIS_fnc_cutDecimals);
_bank = _VEC + str ([DZE_memLeftRight, 2] call BIS_fnc_cutDecimals);
if (!skipUpdates) then {
_rotate = [DZE_memDir, 2] call BIS_fnc_cutDecimals;
};
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Local Mode
//
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
if (DZE_LOCAL_MODE) then {
_localText = _localModeOn;
} else {
_localText = _localModeOff;
};
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Dynamic Text
//
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
local _txt = _header + _format;
_txt = _txt + format[_tutDistance, _distance, _radius];
_txt = _txt + format[_tutSnapping, _snapText, _snapRange];
_txt = _txt + _spacing;
_txt = _txt + format[_tutVectoring, _pitch, _bank, _rotate];
_txt = _txt + format[_tutDegrees, DZE_curDegree];
_txt = _txt + _spacing;
_txt = _txt + format[_HK, _localText]; // hotkeys
local _screenX = 0.73 * safezoneW + safezoneX;
local _screenY = 0.50 * safezoneH + safezoneY;
local _duration = 0.1;
local _fadeIn = 0;
local _delta = 0;
local _rscLayer = 17;
[_txt, _screenX, _screenY, _duration, _fadeIn, _delta, _rscLayer] spawn BIS_fnc_dynamicText;
};
uiSleep 0.08;
};

View File

@@ -18,140 +18,133 @@
//
// [] call fn_displayHelpers; // delete helpers
//
// - Helper texture values are defined in configVariables.sqf
// - Helper texture values are defined in variables.sqf
// - DZE_removeTexture = green | DZE_deconstructTexture = blue | DZE_NoRefundTexture = red
// - If no texture is passed, it will default to green.
// - If no identical object types are nearby, then do not display green helpers.
// - If no identical class names are nearby, then do not display green helpers.
// - Use DZE_displayOnlyIfNearby to enable/disable. Does not affect blue & green helpers.
// - If the object's door is open during selection, no helper will display at that position.
//
///////////////////////////////////////////////////////////////////////////////////////////////////
if (DZE_displayHelpers) then {
if (!DZE_displayHelpers) exitWith {};
if (isNil "HelperArray") then {HelperArray = []};
if (isNil "HelperArray") then {HelperArray = []};
local _p = count _this;
local _p = count _this;
if (_p > 0) then {
if (_p > 0) then {
local _obj = _this select 0; // selected object
local _objType = typeOf _obj; // object's class name
local _green = [0, format["#(argb,8,8,3)color(0,1,0,%1,ca)", (DZE_removeTransparency max 0.1)]]; // reformat with transparency
local _helperTexture = DZE_removeTexture; // default: green
local _object = _this select 0; // selected object
local _typeOf = typeOf _object; // object's class name
local _helperTexture = DZE_removeTexture; // default: green
if (_p == 2) then {
_helperTexture = _this select 1; // specified texture
};
///////////////////////////////////////////////////////////////////////////////////
//
// If no identical objects are nearby, then do not display green helpers
//
///////////////////////////////////////////////////////////////////////////////////
local _cancel = false;
if (DZE_displayOnlyIfNearby && [_helperTexture, DZE_removeTexture] call BIS_fnc_areEqual) then { // if only green required
local _radius = getNumber (configFile >> "HelperVectors" >> _objType >> "radius"); // get object's scan radius
if (_radius == 0) then {
_radius = getNumber (configFile >> "SnapBuilding" >> _objType >> "radius"); // check here too
};
local _objects = _obj nearObjects [_objType, _radius]; // get nearby objects
if (count _objects == 1) then { // if no identical objects are near
_cancel = true; // do not display helpers
};
};
if (_cancel) exitWith {};
local _helperSize = DZE_helperSizeDefault; // see configVariables.sqf
local _helperClass = "";
local _points = []; // vector array
_points = getArray (configFile >> "HelperVectors" >> _objType >> "points"); // get helper vector array
local _size = getNumber (configFile >> "HelperVectors" >> _objType >> "size"); // get size
if (_size != 0) then {
_helperSize = _size; // overwrite default size if it exists
};
if (count _points > 0) then { // found helper vector
if (_objType in ["Concrete_Bunker_DZ","Concrete_Bunker_Locked_DZ","Door_DZ"]) exitWith{}; // exclude from helper removal
///////////////////////////////////////////////////////////////////////////
//
// Prevent floating helper
//
///////////////////////////////////////////////////////////////////////////
//
// "DoorL" for MetalGate_DZ,
// Land_DZE_WoodOpenTopGarageDoor,
// Land_DZE_WoodOpenTopGarageLocked,
// CinderGarageOpenTop_DZ,
// CinderGarageOpenTopLocked_DZ
// "dvere1" for Wooden_shed_DZ, Wooden_shed2_DZ
// "open" for StorageShed_DZ, StorageShed2_DZ (Land_Shed_M01)
// "Open_inner" for Metal_Drawbridge_DZ, Metal_DrawbridgeLocked_DZ
// "Open_door" for default
//
///////////////////////////////////////////////////////////////////////////
local _resize = false;
local _door = "Open_door";
local _doorL = ["MetalGate_DZ","Land_DZE_WoodOpenTopGarageDoor","Land_DZE_WoodOpenTopGarageLocked","CinderGarageOpenTop_DZ","CinderGarageOpenTopLocked_DZ"];
local _open = ["StorageShed_DZ","StorageShed2_DZ"];
local _dvere1 = ["OutHouse_DZ"];
local _custom1 = ["Wooden_shed_DZ","Wooden_shed2_DZ"];
local _custom2 = ["Metal_Drawbridge_DZ","Metal_DrawbridgeLocked_DZ"];
call {
if (_objType in _doorL) exitWith {_door = "doorl"};
if (_objType in _open) exitWith {_door = "open"};
if (_objType in _dvere1) exitWith {_door = "dvere1"};
};
call {
if (_objType in _custom1 && _obj animationPhase "dvere1" < 1) exitWith {_resize = true}; // door is open
if (_objType in _custom2 && _obj animationPhase "Open_inner" < 1) exitWith {_resize = true}; // door is open
if (_obj animationPhase _door > 0) exitWith {_resize = true}; // door is open
};
if (_resize) then {
_points resize (count _points) - 1; // do not display center helper
};
} else { // if no vector array exists
_points = getArray (ConfigFile >> "SnapBuilding" >> _objType >> "points"); // try snapping points array
};
{
if (_helperSize == _x select 0) exitWith {
_helperClass = _x select 1;
}; // get helper class
} count DZE_helperSize;
{
local _helperObj = _helperClass createVehicleLocal [0,0,0]; // create helper object
_helperObj setObjectTexture _helperTexture; // set colour
local _offset = +_x; // copy position array
_offset resize 3; // truncate if necessary
local _pos = _obj modelToWorld _offset; // translate
if (surfaceIsWater _pos) then { // adjust for land and sea
_pos set [2, (getPosASL _obj select 2) + (_offset select 2)];
_helperObj setPosASL _pos;
} else {
_helperObj setPosATL _pos;
};
HelperArray set [count HelperArray, _helperObj]; // record list of helpers
} count _points; // if no vectors were found, do nothing
} else {
{deleteVehicle _x;} count HelperArray; // delete helpers
HelperArray = [];
if (_p == 2) then {
_helperTexture = _this select 1; // specified texture
};
///////////////////////////////////////////////////////////////////////////////////////////
//
// If no identical objects are nearby, then do not display green helpers
//
///////////////////////////////////////////////////////////////////////////////////////////
local _objects = [];
if (DZE_displayOnlyIfNearby && [_helperTexture, DZE_removeTexture] call BIS_fnc_areEqual) then { // if only green required
//
// sizeOf and BIS_fnc_boundingBoxDimensions are not useful here, but boundingBox will work
//
local _box = boundingBox _object;
local _b0 = _box select 0; // lower diagonal
local _b1 = _box select 1; // upper diagonal
local _bx = abs (_b0 select 0) + abs (_b1 select 0);
local _by = abs (_b0 select 1) + abs (_b1 select 1);
local _bz = abs (_b0 select 2) + abs (_b1 select 2);
local _diag = sqrt (_bx^2 + _by^2 + _bz^2); // get diagonal of boundingBox
local _radius = _diag + 0.5; // radius should extend just beyond diagonals
_objects = _object nearObjects [_typeOf, _radius]; // get nearby objects
};
if (count _objects == 1) exitWith {}; // if no identical objects are near, do not display helpers
local _helperSize = DZE_helperSizeDefault; // see configVariables.sqf
local _helperClass = "";
local _points = []; // vector array
_points = getArray (configFile >> "HelperVectors" >> _typeOf >> "points"); // get helper vector array
local _size = getNumber (configFile >> "HelperVectors" >> _typeOf >> "size"); // get size
if (_size != 0) then {
_helperSize = _size; // overwrite default size if it exists
};
local _count = count _points;
if (_count > 0) then { // found helper vector
if (_typeOf in ["Concrete_Bunker_DZ","Concrete_Bunker_Locked_DZ","Door_DZ"]) exitWith{}; // exclude from helper removal
///////////////////////////////////////////////////////////////////////////////////
//
// Prevent floating helper
//
///////////////////////////////////////////////////////////////////////////////////
//
// "DoorL" for MetalGate_DZ,
// Land_DZE_WoodOpenTopGarageDoor,
// Land_DZE_WoodOpenTopGarageLocked,
// CinderGarageOpenTop_DZ,
// CinderGarageOpenTopLocked_DZ
// "dvere1" for Wooden_shed_DZ, Wooden_shed2_DZ
// "open" for StorageShed_DZ, StorageShed2_DZ (Land_Shed_M01)
// "Open_inner" for Metal_Drawbridge_DZ, Metal_DrawbridgeLocked_DZ
// "Open_door" for default
//
///////////////////////////////////////////////////////////////////////////////////
local _resize = false;
local _door = "Open_door";
local _doorL = ["MetalGate_DZ","Land_DZE_WoodOpenTopGarageDoor","Land_DZE_WoodOpenTopGarageLocked","CinderGarageOpenTop_DZ","CinderGarageOpenTopLocked_DZ"];
local _open = ["StorageShed_DZ","StorageShed2_DZ"];
local _dvere1 = ["OutHouse_DZ"];
local _custom1 = ["Wooden_shed_DZ","Wooden_shed2_DZ"];
local _custom2 = ["Metal_Drawbridge_DZ","Metal_DrawbridgeLocked_DZ"];
call {
if (_typeOf in _doorL) exitWith {_door = "doorl"};
if (_typeOf in _open) exitWith {_door = "open"};
if (_typeOf in _dvere1) exitWith {_door = "dvere1"};
};
call {
if (_typeOf in _custom1 && _object animationPhase "dvere1" < 1) exitWith {_resize = true}; // door is open
if (_typeOf in _custom2 && _object animationPhase "Open_inner" < 1) exitWith {_resize = true}; // door is open
if (_object animationPhase _door > 0) exitWith {_resize = true}; // door is open
};
if (_resize) then {
_points resize (_count - 1); // do not display center helper
};
} else { // if no vector array exists
_points = getArray (configFile >> "SnapBuilding" >> _typeOf >> "points"); // use snapping points array
};
{
if (_helperSize == _x select 0) exitWith {
_helperClass = _x select 1;
}; // get helper class
} count DZE_helperSize;
{
local _helperObj = _helperClass createVehicleLocal [0,0,0]; // create helper object
_helperObj setObjectTexture _helperTexture; // set colour
_x resize 3; // remove snapping text if necessary
_helperObj attachTo [_object, _x]; // translate
HelperArray set [count HelperArray, _helperObj]; // record list of helpers
} count _points; // if no vectors were found, do nothing
} else {
{deleteVehicle _x;} count HelperArray; // delete helpers
HelperArray = [];
};

View File

@@ -1,255 +1,260 @@
/*-----------------------------------*/
// by Raymix //
// July 10 2014 //
/*--------------------------------*/
///////////////////////////////////////////////////////////////////////////////////////////////////
//
// Author: Raymix
// Date: July 10 2014
//
// Updated by Victor the Cleaner
//
///////////////////////////////////////////////////////////////////////////////////////////////////
fnc_snapActionCleanup = {
private ["_s1","_s2","_s3","_cnt","_object","_classname","_objectHelper","_points"];
local _s1 = _this select 0;
local _s2 = _this select 1;
local _s3 = _this select 2;
local _object = _this select 3;
local _classname = _this select 4;
local _objectHelper = _this select 5;
local _points = _this select 6;
_s1 = _this select 0;
_s2 = _this select 1;
_s3 = _this select 2;
_object = _this select 3;
_classname = _this select 4;
_objectHelper = _this select 5;
_points = _this select 6;
local _WHT = "<t color='#ffffff'>";
local _GRN = "<t color='#20E020'>";
local _RED = "<t color='#ff0000'>";
local _TB3 = " ";
local _END = "</t>";
local _txt = "";
player removeAction s_player_toggleSnap;
s_player_toggleSnap = -1;
player removeAction s_player_toggleSnapSelect;
s_player_toggleSnapSelect = -1;
if (count s_player_toggleSnapSelectPoint != 0) then {
{
player removeAction _x;
} count s_player_toggleSnapSelectPoint;
{player removeAction _x;} count s_player_toggleSnapSelectPoint;
s_player_toggleSnapSelectPoint = [];
snapActions = -1;
s_player_toggleSnapSelectPoint = [];
snapActions = -1;
};
if (_s1 > 0) then {
s_player_toggleSnap = player addaction [format["<t color=""#ffffff"">" + "Snap: %1" +"</t>",snapActionState],"\z\addons\dayz_code\actions\snap_build.sqf",[snapActionState,_object,_classname,_objectHelper,0],10,false,true];
local _menuState = snapActionState;
if (snapActionState == "Selected") then {_menuState = localize "STR_EPOCH_ACTION_SNAP_ON";};
_txt = format[_WHT + "Snap: %1" + _END, _menuState];
s_player_toggleSnap = player addAction [_txt, "\z\addons\dayz_code\actions\snap_build.sqf", [_menuState, _object, _classname, _objectHelper, 0], 10, false, true];
};
if (_s2 > 0) then {
s_player_toggleSnapSelect = player addaction [format["<t color=""#ffffff"">" + localize "STR_EPOCH_ACTION_SNAP_POINT" + " %1" +"</t>",snapActionStateSelect],"\z\addons\dayz_code\actions\snap_build.sqf",[snapActionStateSelect,_object,_classname,_objectHelper,0],9,false,true];
local _COL = _GRN; // Auto
if (snapActionState == "Selected") then {_COL = _WHT;}; // manual
_txt = format[_WHT + localize "STR_EPOCH_ACTION_SNAP_POINT" + _COL + " %1" + _END, snapActionStateSelect];
s_player_toggleSnapSelect = player addAction [_txt, "\z\addons\dayz_code\actions\snap_build.sqf", [snapActionStateSelect, _object, _classname, _objectHelper, 0], 9, false, true];
};
if (_s3 > 0) then {
s_player_toggleSnapSelectPoint = [];
_cnt = 0;
{
snapActions = player addaction [format["<t color=""#ffffff"">" + " %1. " + localize "STR_EPOCH_ACTION_SNAP_SELECT" + " %2" + "</t>",_cnt+1,_x select 3],"\z\addons\dayz_code\actions\snap_build.sqf",["Selected",_object,_classname,_objectHelper,_cnt],8,false,false];
s_player_toggleSnapSelectPoint set [count s_player_toggleSnapSelectPoint,snapActions];
_cnt = _cnt + 1;
} count _points;
local _COL = _WHT;
if (_forEachIndex == DZE_SnapSelIdx) then {_COL = _GRN;};
_txt = format[_TB3 + _COL + "%1. " + localize "STR_EPOCH_ACTION_SNAP_SELECT" + " %2" + _END, _forEachIndex + 1, _x select 3];
snapActions = player addAction [_txt, "\z\addons\dayz_code\actions\snap_build.sqf", ["Selected", _object, _classname, _objectHelper, _forEachIndex], 8, false, false];
s_player_toggleSnapSelectPoint set [count s_player_toggleSnapSelectPoint, snapActions];
} forEach _points;
};
};
fnc_initSnapPoints = {
private ["_objectSnapGizmo","_object","_points"];
_object = _this select 0;
_points = _this select 1;
local _object = _this select 0;
local _points = _this select 1;
snapGizmos = [];
{
_objectSnapGizmo = "Sign_sphere10cm_EP1" createVehicle [0,0,0];
_objectSnapGizmo setobjecttexture [0,"#(argb,8,8,3)color(0.04,0.84,0.92,0.3,ca)"];
_objectSnapGizmo attachTo [_object,[_x select 0,_x select 1,_x select 2]];
snapGizmos set [count snapGizmos,_objectSnapGizmo];
local _objectSnapGizmo = DZE_SNAP_HELPER_CLASS createVehicleLocal [0,0,0];
_objectSnapGizmo setObjectTexture DZE_SNAP_POINT_RESET; // green
_x resize 3; // remove text element
_objectSnapGizmo attachTo [_object, _x];
snapGizmos set [count snapGizmos, _objectSnapGizmo];
} count _points;
};
fnc_initSnapPointsNearby = {
private ["_pos","_findWhitelisted","_pointsNearby","_nearbyObject","_objectSnapGizmo","_posNearby","_object","_whitelist","_radius"];
local _object = _this select 0;
local _findObjects = nearestObjects [_object, [], DZE_snapRadius] - [_object];
_object = _this select 0;
_whitelist = _this select 1;
_radius = _this select 2;
_pos = [_object] call FNC_GetPos;
_findWhitelisted = [];
_pointsNearby = [];
_findWhitelisted = nearestObjects [_pos,_whitelist,(_radius + DZE_snapExtraRange)]-[_object];
{deleteVehicle _x;} count snapGizmosNearby; // clean up previous radius
snapGizmosNearby = [];
{
_nearbyObject = _x;
_pointsNearby = getArray (configFile >> "SnapBuilding" >> (typeOf _x) >> "points");
local _nearbyObject = _x;
local _typeOf = typeOf _x;
local _pointsNearby = getArray (configFile >> "SnapBuilding" >> _typeOf >> "points");
local _displayName = getText (configFile >> "CfgVehicles" >> _typeOf >> "displayName");
{
_objectSnapGizmo = "Sign_sphere10cm_EP1" createVehicle [0,0,0];
_objectSnapGizmo setobjecttexture [0,"#(argb,8,8,3)color(0.04,0.84,0.92,0.3,ca)"];
local _objectSnapGizmo = DZE_SNAP_HELPER_CLASS createVehicleLocal [0,0,0];
_objectSnapGizmo setObjectTexture DZE_SNAP_POINT_RESET; // green
_objectSnapGizmo setDir (_nearbyObject getVariable["memDir",0]);
_posNearby = _nearbyObject modelToWorld [_x select 0,_x select 1,_x select 2];
if (surfaceIsWater _posNearby) then {
_objectSnapGizmo setPosASL [(_posNearby) select 0,(_posNearby) select 1,(getPosASL _nearbyObject select 2) + (_x select 2)];
} else {
_objectSnapGizmo setPosATL _posNearby;
};
snapGizmosNearby set [count snapGizmosNearby,_objectSnapGizmo];
_objectSnapGizmo setVariable ["snappoint", [_displayName, _x select 3], false]; // store object and snapping point display names
_x resize 3; // remove text element
_objectSnapGizmo attachTo [_nearbyObject, _x];
snapGizmosNearby set [count snapGizmosNearby, _objectSnapGizmo]; // rebuild helper list
} count _pointsNearby;
} forEach _findWhitelisted;
} forEach _findObjects;
};
fnc_initSnapPointsCleanup = {
{detach _x; deleteVehicle _x;} count snapGizmos;
{deleteVehicle _x;} count snapGizmos;
snapGizmos = [];
{detach _x; deleteVehicle _x;} count snapGizmosNearby;
{deleteVehicle _x;} count snapGizmosNearby;
snapGizmosNearby = [];
snapActionState = localize "STR_EPOCH_ACTION_SNAP_OFF";
};
fnc_snapDistanceCheck = {
private ["_distClosestPointFound","_distCheck","_distClosest","_testXPos","_distClosestPointFoundPos","_distClosestPointFoundDir","_distClosestAttached","_distCheckAttached","_distClosestAttachedFoundPos","_onWater","_objectHelper","_object"];
local _object = _this select 0;
local _objectHelper = _this select 1;
_object = _this select 0;
_objectHelper = _this select 1;
///////////////////////////////////////////////////////////////////////////////////////////
//
// _snapObject function
//
///////////////////////////////////////////////////////////////////////////////////////////
while {snapActionState != localize "STR_EPOCH_ACTION_SNAP_OFF"} do {
_distClosestPointFound = objNull;
_distCheck = 0;
_distClosest = 10;
_testXPos = [];
_distClosestPointFoundPos =[];
_distClosestPointFoundDir = 0;
_snapObject = {
_objectHelper setPosASL (getPosASL _closestNearCurr); // snap object
{
if (_x !=_distClosestPointFound) then {_x setobjecttexture [0,"#(argb,8,8,3)color(0.04,0.84,0.92,0.3,ca)"];};
_testXPos = [_x] call FNC_GetPos;
_distCheck = _objectHelper distance _testXPos;
if (_distCheck < _distClosest) then {
_distClosest = _distCheck;
_distClosestPointFound setobjecttexture [0,"#(argb,8,8,3)color(0.04,0.84,0.92,0.3,ca)"];
_distClosestPointFound = _x;
_distClosestPointFound setobjecttexture [0,"#(argb,8,8,3)color(0,0.92,0.06,1,ca)"];
DZE_memDir = getDir _closestNearCurr;
[_objectHelper, [DZE_memForBack, DZE_memLeftRight, DZE_memDir]] call fnc_SetPitchBankYaw;
waitUntil {uiSleep 0.1; !helperDetach};
};
///////////////////////////////////////////////////////////////////////////////////////////
//
// _uiSnapText function
//
///////////////////////////////////////////////////////////////////////////////////////////
_uiSnapText = {
if (!DZE_uiSnapText) exitWith {};
local _pos = worldToScreen (_closestNearCurr modelToWorld [0,0,0]);
if (count _pos == 0) exitWith {}; // object may be off screen
local _screenX = (_pos select 0) - 0.5; // center to snap point
local _screenY = (_pos select 1) - 0.06 * safeZoneH; // 6% of screen height
local _format = "<t align='Center' size='0.4' font='Zeppelin33' shadow='2' color=";
local _WHT = _format + "'#E0E0E0'>";
local _GRN = _format + "'#20E020'>";
local _END = "</t>";
local _NL = _END + "<br/>";
local _txt = _WHT + "%1" + _NL + _WHT + (localize "STR_EPOCH_BUILD_UI_SNAP") + ": " + _GRN + "%2" + _END;
local _var = _closestNearCurr getVariable ["snappoint", ["",""]];
local _nearName = _var select 0;
local _snapName = _var select 1;
if (_nearName == "") exitWith {};
local _txt = format[_txt, _nearName, _snapName];
[_txt, _screenX, _screenY, 0.1, 0, 0, 18] spawn BIS_fnc_dynamicText;
};
///////////////////////////////////////////////////////////////////////////////////////////
local _OFF = localize "STR_EPOCH_ACTION_SNAP_OFF";
local _MANUAL = localize "STR_EPOCH_ACTION_SNAP_POINT_MANUAL";
local _closestHeldPrev = objNull;
local _closestNearPrev = objNull;
while {snapActionState != _OFF} do {
local _closestHeldCurr = objNull;
local _closestNearCurr = objNull;
local _closestDistance = DZE_snapDistance;
if (snapActionStateSelect == _MANUAL) then {
if (DZR_snapRefresh) exitWith {}; // currently refreshing
///////////////////////////////////////////////////////////////////////////
//
// Manual Snap
//
///////////////////////////////////////////////////////////////////////////
{ // scan all nearby points
local _distance = _objectHelper distance _x; // compare to current selected
if (_distance < _closestDistance) then { // found a closer match
_closestDistance = _distance;
_closestNearCurr = _x; // update current
};
} count snapGizmosNearby;
} forEach snapGizmosNearby;
if ((isNull _closestNearCurr) || {_closestNearCurr != _closestNearPrev}) then {
_closestNearPrev setObjectTexture DZE_SNAP_POINT_RESET; // near OFF
};
if (!isNull _closestNearCurr) then {
_closestNearCurr setObjectTexture DZE_SNAP_POINT_FOUND; // near ON
_closestNearPrev = _closestNearCurr;
call _uiSnapText; // display text
if (!isNull _distClosestPointFound) then {
if (snapActionStateSelect == localize "STR_EPOCH_ACTION_SNAP_POINT_MANUAL") then {
if (helperDetach) then {
_onWater = surfaceIsWater position _distClosestPointFound;
_distClosestPointFoundDir = getDir _distClosestPointFound;
if (_onWater) then {
_distClosestPointFoundPos = getPosASL _distClosestPointFound;
_objectHelper setPosASL _distClosestPointFoundPos;
} else {
_distClosestPointFoundPos = getPosATL _distClosestPointFound;
_objectHelper setPosATL _distClosestPointFoundPos;
};
//_objectHelper setDir _distClosestPointFoundDir;
DZE_memDir = _distClosestPointFoundDir;
[_objectHelper,[DZE_memForBack,DZE_memLeftRight,DZE_memDir]] call fnc_SetPitchBankYaw;
waitUntil {uiSleep 0.1; !helperDetach};
call _snapObject; // snap object
};
} else {
_distClosestAttached = objNull;
_distCheckAttached = 0;
_distClosest = 10;
_distClosestAttachedFoundPos = [];
};
} else {
if (DZR_snapRefresh) exitWith {}; // currently refreshing
///////////////////////////////////////////////////////////////////////////
//
// Auto Snap
//
///////////////////////////////////////////////////////////////////////////
{
local _nearCurr = _x; // scan all nearby points
{
if (_x !=_distClosestAttached) then {_x setobjecttexture [0,"#(argb,8,8,3)color(0.04,0.84,0.92,0.3,ca)"];};
_testXPos = [_x] call FNC_GetPos;
_distCheckAttached = _distClosestPointFound distance _testXPos;
if (_distCheckAttached < _distClosest) then {
_distClosest = _distCheckAttached;
_distClosestAttached setobjecttexture [0,"#(argb,8,8,3)color(0.04,0.84,0.92,0.3,ca)"];
_distClosestAttached = _x;
_distClosestAttached setobjecttexture [0,"#(argb,8,8,3)color(0,0.92,0.06,1,ca)"];
};
local _distance = _nearCurr distance _x; // compare to all points of held object
if (_distance < _closestDistance) then { // found a closer match
_closestDistance = _distance;
_closestHeldCurr = _x; // update current
_closestNearCurr = _nearCurr; // paired points
};
} count snapGizmos;
} forEach snapGizmosNearby;
if ((isNull _closestHeldCurr) || {_closestHeldCurr != _closestHeldPrev}) then {
_closestHeldPrev setObjectTexture DZE_SNAP_POINT_RESET; // held OFF
};
if ((isNull _closestNearCurr) || {_closestNearCurr != _closestNearPrev}) then {
_closestNearPrev setObjectTexture DZE_SNAP_POINT_RESET; // near OFF
};
if (!isNull _closestNearCurr) then {
_closestHeldCurr setObjectTexture DZE_SNAP_POINT_FOUND; // held ON
_closestHeldPrev = _closestHeldCurr;
_closestNearCurr setObjectTexture DZE_SNAP_POINT_FOUND; // near ON
_closestNearPrev = _closestNearCurr;
call _uiSnapText; // display text
if (helperDetach) then {
_distClosestPointFoundDir = getDir _distClosestPointFound;
_onWater = surfaceIsWater position _distClosestPointFound;
if (_onWater) then {
_distClosestPointFoundPos = getPosASL _distClosestPointFound;
_distClosestAttachedFoundPos = getPosASL _distClosestAttached;
detach _object;
_objectHelper setPosASL _distClosestAttachedFoundPos;
_object attachTo [_objectHelper];
_objectHelper setPosASL _distClosestPointFoundPos;
} else {
_distClosestPointFoundPos = getPosATL _distClosestPointFound;
_distClosestAttachedFoundPos = getPosATL _distClosestAttached;
detach _object;
_objectHelper setPosATL _distClosestAttachedFoundPos;
_object attachTo [_objectHelper];
_objectHelper setPosATL _distClosestPointFoundPos;
};
//_objectHelper setDir _distClosestPointFoundDir;
DZE_memDir = _distClosestPointFoundDir;
[_objectHelper,[DZE_memForBack,DZE_memLeftRight,DZE_memDir]] call fnc_SetPitchBankYaw;
waitUntil {uiSleep 0.1; !helperDetach};
detach _object;
_objectHelper setPosASL (getPosASL _closestHeldCurr); // select snapping point on held object
_object attachTo [_objectHelper];
call _snapObject; // snap object
};
};
};
uiSleep 0.1;
};
};
fnc_initSnapTutorial = {
/*
Shows help dialog for player ONCE per log in, explaining controls.
Add snapTutorial = false; to your init.sqf to disable this tutorial completely.
You can also add this bool to the end of this function to only show tutorial once per player login (not recommended)
*/
private ["_bldTxtSwitch","_bldTxtEnable","_bldTxtClrO","_bldTxtClrW","_bldTxtClrR","_bldTxtClrG","_bldTxtSz","_bldTxtSzT","_bldTxtShdw","_bldTxtAlgnL","_bldTxtUndrln","_bldTxtBold","_bldTxtFinal","_bldTxtStringTitle","_bldTxtStringSD","_bldTxtStringSE","_bldTxtStringSA","_bldTxtStringSM","_bldTxtStringPG","_bldTxtStringAPG","_bldTxtStringCPG","_bldTxtStringQE","_bldTxtStringQEF","_bldTxtStringFD","_bldTxtStringFS"];
if (isNil "snapTutorial") then {
_bldTxtSwitch = _this select 0;
_bldTxtEnable = _this select 1;
_bldTxtClrO = "color='#ff8800'"; //orange
_bldTxtClrW = "color='#ffffff'"; //white
_bldTxtClrR = "color='#fd0a05'"; //red
_bldTxtClrG = "color='#11ef00'"; //green
_bldTxtSz = "size='0.76'"; //Title font size
_bldTxtSzT = "size='0.4'"; //Text font size
_bldTxtShdw = "shadow='1'"; //Font shadow
_bldTxtAlgnL = "align='left'"; //Text align left
_bldTxtUndrln = "underline='true'";
_bldTxtBold = "font='Zeppelin33'"; //Bold text
_bldTxtFinal = "";
//Delete on init
17 cutRsc ["Default", "PLAIN"];
uiSleep 0.1;
//Init Tutorial text
if (_bldTxtEnable) then {
_bldTxtStringTitle = format ["<t %1%2%3%4%6>Epoch<t %5%7> Snap Building</t></t><br />",_bldTxtClrW,_bldTxtSz,_bldTxtShdw,_bldTxtAlgnL,_bldTxtClrO,_bldTxtUndrln,_bldTxtBold];
_bldTxtStringSD = format["<t %1%4%5%6>[Snap]<t %2> %7</t> <t %3>%8</t></t><br /><br />",_bldTxtClrO,_bldTxtClrR,_bldTxtClrW,_bldTxtSzT,_bldTxtShdw,_bldTxtAlgnL,localize "STR_EPOCH_SNAP_TUTORIAL_DISABLE",localize "STR_EPOCH_SNAP_TUTORIAL_DISABLE_MSG"];
_bldTxtStringSE = format["<t %1%4%5%6>[Snap]<t %2> %7</t> <t %3>%8</t></t><br /><br />",_bldTxtClrO,_bldTxtClrG,_bldTxtClrW,_bldTxtSzT,_bldTxtShdw,_bldTxtAlgnL,localize "STR_EPOCH_SNAP_TUTORIAL_ENABLE",localize "STR_EPOCH_SNAP_TUTORIAL_ENABLE_MSG"];
_bldTxtStringSA = format["<t %1%3%4%5>[Auto]<t %2>: %6</t></t><br /><br />",_bldTxtClrO,_bldTxtClrW,_bldTxtSzT,_bldTxtShdw,_bldTxtAlgnL,localize "STR_EPOCH_SNAP_TUTORIAL_AUTO_DETECT"];
_bldTxtStringSM = format["<t %1%3%4%5>[%6]<t %2>: %7</t></t><br /><br />",_bldTxtClrO,_bldTxtClrW,_bldTxtSzT,_bldTxtShdw,_bldTxtAlgnL,localize "STR_EPOCH_ACTION_SNAP_POINT_MANUAL",localize "STR_EPOCH_SNAP_TUTORIAL_MANUAL_DETECT"];
_bldTxtStringPG = format["<t %1%3%4%5>%6<t %2>: %7</t></t><br />",_bldTxtClrO,_bldTxtClrW,_bldTxtSzT,_bldTxtShdw,_bldTxtAlgnL,localize "STR_EPOCH_SNAP_TUTORIAL_PGUPPGDOWN",localize "STR_EPOCH_SNAP_TUTORIAL_PGUPPGDOWN_MSG"];
_bldTxtStringAPG = format["<t %1%3%4%5>%6<t %2>: %7</t></t><br />",_bldTxtClrO,_bldTxtClrW,_bldTxtSzT,_bldTxtShdw,_bldTxtAlgnL,localize "STR_EPOCH_SNAP_TUTORIAL_ALT_PGUPPGDOWN",localize "STR_EPOCH_SNAP_TUTORIAL_ALT_PGUPPGDOWN_MSG"];
_bldTxtStringCPG = format["<t %1%3%4%5>%6<t %2>: %7</t></t><br />",_bldTxtClrO,_bldTxtClrW,_bldTxtSzT,_bldTxtShdw,_bldTxtAlgnL,localize "STR_EPOCH_SNAP_TUTORIAL_CTRL_PGUPPGDOWN",localize "STR_EPOCH_SNAP_TUTORIAL_CTRL_PGUPPGDOWN_MSG"];
_bldTxtStringQE = format["<t %1%3%4%5>[Q / E]<t %2>: %6</t></t><br />",_bldTxtClrO,_bldTxtClrW,_bldTxtSzT,_bldTxtShdw,_bldTxtAlgnL,localize "STR_EPOCH_SNAP_TUTORIAL_ROTATE180_MSG"];
_bldTxtStringQEF = format["<t %1%3%4%5>[Q / E]<t %2>: %6</t></t><br /><br />",_bldTxtClrO,_bldTxtClrW,_bldTxtSzT,_bldTxtShdw,_bldTxtAlgnL,localize "STR_EPOCH_SNAP_TUTORIAL_ROTATE45_MSG"];
_bldTxtStringFD = format["<t %1%3%4%5>[F]<t %2>: %6</t></t><br />",_bldTxtClrO,_bldTxtClrW,_bldTxtSzT,_bldTxtShdw,_bldTxtAlgnL,localize "STR_EPOCH_SNAP_TUTORIAL_F_DROP_MSG"];
_bldTxtStringFS = format["<t %1%3%4%5>[F]<t %2>: %6</t></t><br />",_bldTxtClrO,_bldTxtClrW,_bldTxtSzT,_bldTxtShdw,_bldTxtAlgnL,localize "STR_EPOCH_SNAP_TUTORIAL_F_SNAP_MSG"];
switch (_bldTxtSwitch) do {
case "init": {
_bldTxtFinal = _bldTxtStringTitle + _bldTxtStringSD + _bldTxtStringPG + _bldTxtStringAPG + _bldTxtStringCPG + _bldTxtStringQE + _bldTxtStringQEF + _bldTxtStringFD;
};
case "OnAuto": {
_bldTxtFinal = _bldTxtStringTitle + _bldTxtStringSE + _bldTxtStringSA + _bldTxtStringPG + _bldTxtStringAPG + _bldTxtStringCPG + _bldTxtStringQE + _bldTxtStringQEF + _bldTxtStringFS;
};
case "manual": {
_bldTxtFinal = _bldTxtStringTitle + _bldTxtStringSE + _bldTxtStringSM + _bldTxtStringPG + _bldTxtStringAPG + _bldTxtStringCPG + _bldTxtStringQE + _bldTxtStringQEF + _bldTxtStringFS;
};
};
[
_bldTxtFinal, //structured text
0.73 * safezoneW + safezoneX, //number - x
0.65 * safezoneH + safezoneY, //number - y
30, //number - duration
1, // number - fade in time
0, // number - delta y
17 //number - layer ID
] spawn bis_fnc_dynamicText;
};
uiSleep 0.02;
};
};

View File

@@ -161,6 +161,10 @@ if (!isDedicated) then {
DZE_PlotPole = [30,45]; // Plot radius, minimum distance between plots
DZE_BuildOnRoads = false; // Allow building on roads
DZE_BuildingLimit = 150; // Maximum allowed objects per plot
DZE_RestrictedBuildingZones = []; // [["Balota Airfield", [5158.72, 2518.75, 0], 600]]; // [["description", [position], distance], ["description", [position], distance], ... ];
DZE_BlacklistedBuildings = []; // [["Fire Station", "Land_a_stationhouse", 250]]; // [["description", "className", distance], ["description", "className", distance], ... ];
DZE_buildOnWater = true; // Allow building in or over sea water. Note: Sea level will change between low tide and high tide and may cause base flooding. This does not affect inland ponds, dams or lakes.
DZE_maxSeaLevel = 1.85; // ASL height (in meters) of high tide. Objects placed below this level over sea water will trigger a warning message about potential flooding during high tide. Low tide is 06:00 hrs, high tide is 12:00 hrs, but maps may vary.
DZE_salvageLocked = true; //Enable or disable salvaging of locked vehicles, useful for stopping griefing on locked vehicles.
DZE_DisabledChannels = [(localize "str_channel_side"),(localize "str_channel_global"),(localize "str_channel_command")]; //List of disabled voice channels. Other channels are: "str_channel_group","str_channel_direct","str_channel_vehicle"
@@ -205,12 +209,12 @@ if (!isDedicated) then {
DZE_DisableUpgrade = []; //Array of buildables that are not allowed to be upgraded. For example: DZE_DisableUpgrade = ["WoodShack_DZ","StorageShed_DZ"];
// Snap Build and Build Vectors
DZE_modularBuild = true; // Enable Snap Building by @raymix and Build Vectors by @strikerforce.
DZE_snapExtraRange = 0; // Increase the default range from which objects can snap by this many meters.
DZE_noRotate = ["ItemWoodLadder","woodfence_foundation_kit","metalfence_foundation_kit","cook_tripod_kit","metal_drawbridge_kit","metal_drawbridge_kit_locked","storage_crate_kit"]; // List of objects (magazine classnames) that cannot be rotated. Example: ["ItemVault","ItemTent","ItemDomeTent","ItemDesertTent"];
DZE_vectorDegrees = [0.01, 0.1, 1, 5, 15, 45, 90]; // Degree positions players are able to rotate buildables with using the build vectors action menu.
DZE_curDegree = 45; // Starting rotation angle. Prefer any value in the array above.
DZE_dirWithDegrees = true; // When rotating objects with Q&E, use the custom degrees.
DZE_snapDistance = 2; // maximum distance between two snapping points before snapping will occur. Default: 2 meters.
DZE_snapAutoRefresh = true; // enable auto-refresh of snapping point helpers if player moves the current build object out of initial snapping range. Default: true.
DZE_uiSnapText = true; // enable on-screen helper text near the closest snapping point when building. Default: true
// Remove/Deconstruct modular object variables
DZE_refundModular = true; // enable/disable refunding of modular objects
@@ -220,10 +224,10 @@ if (!isDedicated) then {
DZE_RefundDamageLimit = 0.25; // amount of damage an object can withstand before no refunded parts will be given. 0 = disable (will always refund)
DZE_helperSize = [[3,"Sign_sphere100cm_EP1"],[2,"Sign_sphere25cm_EP1"],[1,"Sign_sphere10cm_EP1"]]; // array of helper sizes and corresponding class. Keep in reverse order for optimized lookup
DZE_helperSizeDefault = 3; // default to large sphere
DZE_NoRefundTransparency = 0.15; // Red Basebuilding Helper Transparency. min = 0.1, max = 1
DZE_removeTransparency = 0.15; // Green Basebuilding Helper Transparency. min = 0.1, max = 1
DZE_deconstructTransparency = 0.15; // Blue Basebuilding Helper Transparency. min = 0.1, max = 1
DZE_largeObjects = ["MetalFloor4x_DZ", "Land_metal_floor_2x2_wreck", "WoodFloor4x_DZ", "Land_wood_floor_2x2_wreck", "Scaffolding_DZ", "CinderGateFrame_DZ", "CinderGate_DZ", "WoodGateFrame_DZ", "Land_DZE_WoodGate", "WoodRamp_DZ"]; // adjust _allowedDistance in fn_selfActions.sqf for large modular/crafted objects
DZE_NoRefundTransparency = 0.5; // Red Basebuilding Helper Transparency. min = 0.1, max = 1
DZE_removeTransparency = 0.5; // Green Basebuilding Helper Transparency. min = 0.1, max = 1
DZE_deconstructTransparency = 0.5; // Blue Basebuilding Helper Transparency. min = 0.1, max = 1
DZE_largeObjects = ["MetalContainer2D_DZ","MetalContainer1G_DZ","MetalContainer1B_DZ","MetalContainer1A_DZ","DragonTeeth_DZ","DragonTeethBig_DZ","MetalFloor4x_DZ","Land_metal_floor_2x2_wreck","WoodFloor4x_DZ","Land_wood_floor_2x2_wreck","Scaffolding_DZ","CinderGateFrame_DZ","CinderGate_DZ","CinderGateLocked_DZ","WoodGateFrame_DZ","Land_DZE_WoodGate","Land_DZE_WoodGateLocked","WoodRamp_DZ","Metal_Drawbridge_DZ","Metal_DrawbridgeLocked_DZ","Land_WarfareBarrier10x_DZ","Land_WarfareBarrier10xTall_DZ","SandNestLarge_DZ"]; // adjust _allowedDistance in fn_selfActions.sqf for large modular/crafted objects
// Refund single kits, or modular object recipes as per the build configs
// [[Enable, Modular Object, Refund Kit, [[Refund Class 1, Qty], [Refund Class 2, Qty], [Refund Class 3, Qty], [Refund Class 4, Qty]]]]
@@ -239,92 +243,122 @@ if (!isDedicated) then {
// Enable Modular Object Refund Kit Refund Class 1 Qty Refund Class 2 Qty Refund Class 3 Qty Refund Class 4 Qty
// ====== ============== =============================== =========================================== =========================== =========================== ===========================
// // Glass //
[true, "GlassFloor_DZ", "glass_floor_kit", [["glass_floor_half_kit", 2]]],
[true, "GlassFloor_Half_DZ", "glass_floor_half_kit", [["glass_floor_quarter_kit", 2]]],
[true, "GlassFloor_Quarter_DZ", "glass_floor_quarter_kit", [["ItemPole", 8], ["PartGlass", 4]]],
[true, "GlassFloor_DZ", "glass_floor_kit", [["glass_floor_half_kit", 2]]],
[true, "GlassFloor_Half_DZ", "glass_floor_half_kit", [["glass_floor_quarter_kit", 2]]],
[true, "GlassFloor_Quarter_DZ", "glass_floor_quarter_kit", [["ItemPole", 8], ["PartGlass", 4]]],
// // Metal //
[true, "MetalFloor_DZ", "metal_floor_kit", [["metal_floor_half_kit", 2]]],
[true, "MetalFloor_Half_DZ", "metal_floor_half_kit", [["metal_floor_quarter_kit", 2]]],
[true, "MetalFloor_Quarter_DZ", "metal_floor_quarter_kit", [["ItemPole", 4], ["equip_metal_sheet", 4]]],
[true, "MetalFloor4x_DZ", "metal_floor4x_kit", [["metal_floor_kit", 4]]],
[true, "Metal_Drawbridge_DZ", "metal_drawbridge_kit", [["metal_floor_kit", 2], ["ItemRSJ", 6]]],
[true, "MetalPillar_DZ", "metal_pillar_kit", [["ItemPole", 1], ["equip_metal_sheet", 2]]],
[true, "DoorFrame_DZ", "door_frame_kit", [["ItemPole", 4], ["ItemTankTrap", 4], ["PartGeneric", 2]]],
[true, "Door_DZ", "door_kit", [["door_frame_kit", 1], ["ItemTankTrap", 1], ["ItemPole", 1]]],
[true, "MetalFence_1_foundation_DZ", "metalfence_foundation_kit",[["ItemStone", 8], ["MortarBucket", 1], ["ItemRSJ", 1]]],
[true, "MetalFence_1_frame_DZ", "metalfence_frame_kit", [["ItemPlank", 4], ["ItemRSJ", 1]]],
[true, "MetalFence_halfpanel_DZ", "metalfence_halfpanel_kit", [["ItemMetalSheet", 3], ["ItemScrews", 1]]],
[true, "MetalFence_thirdpanel_DZ", "metalfence_thirdpanel_kit", [["ItemMetalSheet", 3], ["ItemScrews", 1]]],
[true, "MetalFence_1_DZ", "metalfence_1_kit", [["ItemMetalSheet", 3], ["ItemScrews", 1]]],
[true, "MetalFence_2_DZ", "metalfence_2_kit", [["ItemMetalSheet", 4], ["ItemScrews", 1], ["ItemRSJ", 2]]],
[true, "MetalFence_3_DZ", "metalfence_3_kit", [["ItemMetalSheet", 4], ["ItemScrews", 1], ["ItemRSJ", 2]]],
[true, "MetalFence_4_DZ", "metalfence_4_kit", [["ItemScrews", 1], ["ItemRSJ", 4]]],
[true, "MetalFence_5_DZ", "metalfence_5_kit", [["ItemScrews", 1], ["ItemRSJ", 2]]],
[true, "MetalFence_6_DZ", "metalfence_6_kit", [["ItemScrews", 1], ["ItemPole", 4], ["equip_metal_sheet", 4]]],
[true, "MetalFence_7_DZ", "metalfence_7_kit", [["ItemScrews", 1], ["ItemPole", 6], ["PartGeneric", 2]]],
[true, "MetalFloor_DZ", "metal_floor_kit", [["metal_floor_half_kit", 2]]],
[true, "MetalFloor_Half_DZ", "metal_floor_half_kit", [["metal_floor_quarter_kit", 2]]],
[true, "MetalFloor_Quarter_DZ", "metal_floor_quarter_kit", [["ItemPole", 4], ["equip_metal_sheet", 4]]],
[true, "MetalFloor4x_DZ", "metal_floor4x_kit", [["metal_floor_kit", 4]]],
[true, "Metal_Drawbridge_DZ", "metal_drawbridge_kit", [["metal_floor_kit", 2], ["ItemRSJ", 6]]],
[true, "MetalPillar_DZ", "metal_pillar_kit", [["ItemPole", 1], ["equip_metal_sheet", 2]]],
[true, "DoorFrame_DZ", "door_frame_kit", [["ItemPole", 4], ["ItemTankTrap", 4], ["PartGeneric", 2]]],
[true, "Door_DZ", "door_kit", [["door_frame_kit", 1], ["ItemTankTrap", 1], ["ItemPole", 1]]],
[true, "MetalFence_1_foundation_DZ", "metalfence_foundation_kit", [["ItemStone", 8], ["MortarBucket", 1], ["ItemRSJ", 1]]],
[true, "MetalFence_1_frame_DZ", "metalfence_frame_kit", [["ItemPlank", 4], ["ItemRSJ", 1]]],
[true, "MetalFence_halfpanel_DZ", "metalfence_halfpanel_kit", [["ItemMetalSheet", 3], ["ItemScrews", 1]]],
[true, "MetalFence_thirdpanel_DZ", "metalfence_thirdpanel_kit", [["ItemMetalSheet", 3], ["ItemScrews", 1]]],
[true, "MetalFence_1_DZ", "metalfence_1_kit", [["ItemMetalSheet", 3], ["ItemScrews", 1]]],
[true, "MetalFence_2_DZ", "metalfence_2_kit", [["ItemMetalSheet", 4], ["ItemScrews", 1], ["ItemRSJ", 2]]],
[true, "MetalFence_3_DZ", "metalfence_3_kit", [["ItemMetalSheet", 4], ["ItemScrews", 1], ["ItemRSJ", 2]]],
[true, "MetalFence_4_DZ", "metalfence_4_kit", [["ItemScrews", 1], ["ItemRSJ", 4]]],
[true, "MetalFence_5_DZ", "metalfence_5_kit", [["ItemScrews", 1], ["ItemRSJ", 2]]],
[true, "MetalFence_6_DZ", "metalfence_6_kit", [["ItemScrews", 1], ["ItemPole", 4], ["equip_metal_sheet", 4]]],
[true, "MetalFence_7_DZ", "metalfence_7_kit", [["ItemScrews", 1], ["ItemPole", 6], ["PartGeneric", 2]]],
[true, "MetalContainer1A_DZ", "metal_container_1a_kit", [["metal_floor_quarter_kit", 2], ["metal_floor_half_kit",4], ["ItemTankTrap", 2]]],
[true, "MetalContainer1B_DZ", "metal_container_1b_kit", [["metal_floor_quarter_kit", 2], ["metal_floor_half_kit",4], ["ItemTankTrap", 2]]],
[true, "MetalContainer1G_DZ", "metal_container_1g_kit", [["metal_floor_quarter_kit", 2], ["metal_floor_half_kit",4], ["ItemTankTrap", 2]]],
[true, "MetalContainer2D_DZ", "metal_container_2d_kit", [["metal_container_1a_kit", 2]]],
// // Cinder //
[true, "CinderWallHalf_DZ", "half_cinder_wall_kit", [["CinderBlocks", 3], ["MortarBucket", 1]]],
[true, "CinderWallHalf_Gap_DZ", "half_cinder_wall_gap_kit", [["CinderBlocks", 3], ["MortarBucket", 1]]],
[true, "CinderWall_DZ", "full_cinder_wall_kit", [["CinderBlocks", 7], ["MortarBucket", 2]]],
[true, "CinderWallWindow_DZ", "cinderwall_window_kit", [["CinderBlocks", 5], ["MortarBucket", 1], ["ItemTankTrap", 1], ["ItemPole", 1]]],
[true, "CinderWallSmallDoorway_DZ", "cinder_door_frame_kit", [["CinderBlocks", 4], ["MortarBucket", 1], ["ItemTankTrap", 1]]],
[true, "CinderWallDoorSmall_DZ", "cinder_door_kit", [["cinder_door_frame_kit", 1], ["ItemTankTrap", 1], ["ItemPole", 1]]],
[true, "CinderDoorHatch_DZ", "cinder_door_hatch_kit", [["CinderBlocks", 4], ["MortarBucket", 1], ["ItemTankTrap", 2], ["ItemPole", 1]]],
[true, "CinderWallDoorway_DZ", "cinder_garage_frame_kit", [["CinderBlocks", 3], ["MortarBucket", 1], ["ItemTankTrap", 1]]],
[true, "CinderWallDoor_DZ", "cinder_garage_kit", [["cinder_garage_frame_kit", 1], ["ItemTankTrap", 3], ["ItemPole", 3]]],
[true, "CinderGarageOpenTopFrame_DZ", "cinder_garage_top_open_frame_kit",[["CinderBlocks", 4], ["MortarBucket", 1]]],
[true, "CinderGarageOpenTop_DZ", "cinder_garage_top_open_kit", [["cinder_garage_top_open_frame_kit",1],["ItemTankTrap", 3], ["ItemPole", 3]]],
[true, "CinderGateFrame_DZ", "cinder_gate_frame_kit", [["CinderBlocks", 8], ["MortarBucket", 4]]],
[true, "CinderGate_DZ", "cinder_gate_kit", [["cinder_gate_frame_kit", 1], ["equip_metal_sheet", 6], ["ItemRSJ", 2], ["ItemScrews", 2]]],
[true, "CinderWallHalf_DZ", "half_cinder_wall_kit", [["CinderBlocks", 3], ["MortarBucket", 1]]],
[true, "CinderWallHalf_Gap_DZ", "half_cinder_wall_gap_kit", [["CinderBlocks", 3], ["MortarBucket", 1]]],
[true, "CinderWall_DZ", "full_cinder_wall_kit", [["CinderBlocks", 7], ["MortarBucket", 2]]],
[true, "CinderWallWindow_DZ", "cinderwall_window_kit", [["CinderBlocks", 5], ["MortarBucket", 1], ["ItemTankTrap", 1], ["ItemPole", 1]]],
[true, "CinderWallSmallDoorway_DZ", "cinder_door_frame_kit", [["CinderBlocks", 4], ["MortarBucket", 1], ["ItemTankTrap", 1]]],
[true, "CinderWallDoorSmall_DZ", "cinder_door_kit", [["cinder_door_frame_kit", 1], ["ItemTankTrap", 1], ["ItemPole", 1]]],
[true, "CinderDoorHatch_DZ", "cinder_door_hatch_kit", [["CinderBlocks", 4], ["MortarBucket", 1], ["ItemTankTrap", 2], ["ItemPole", 1]]],
[true, "CinderWallDoorway_DZ", "cinder_garage_frame_kit", [["CinderBlocks", 3], ["MortarBucket", 1], ["ItemTankTrap", 1]]],
[true, "CinderWallDoor_DZ", "cinder_garage_kit", [["cinder_garage_frame_kit", 1], ["ItemTankTrap", 3], ["ItemPole", 3]]],
[true, "CinderGarageOpenTopFrame_DZ", "cinder_garage_top_open_frame_kit", [["CinderBlocks", 4], ["MortarBucket", 1]]],
[true, "CinderGarageOpenTop_DZ", "cinder_garage_top_open_kit", [["cinder_garage_top_open_frame_kit", 1], ["ItemTankTrap", 3], ["ItemPole", 3]]],
[true, "CinderGateFrame_DZ", "cinder_gate_frame_kit", [["CinderBlocks", 8], ["MortarBucket", 4]]],
[true, "CinderGate_DZ", "cinder_gate_kit", [["cinder_gate_frame_kit", 1], ["equip_metal_sheet", 6], ["ItemRSJ", 2], ["ItemScrews", 2]]],
[true, "Concrete_Bunker_DZ", "cinder_bunker_kit", [["full_cinder_wall_kit", 3], ["ItemConcreteBlock", 5], ["equip_metal_sheet", 3], ["ItemScrews", 1]]],
// // Wood //
[true, "WoodFloor_DZ", "ItemWoodFloor", [["ItemWoodFloorHalf", 2]]],
[true, "WoodFloor4x_DZ", "ItemWoodFloor4x", [["ItemWoodFloor", 4]]],
[true, "WoodFloorHalf_DZ", "ItemWoodFloorHalf", [["ItemWoodFloorQuarter", 2]]],
[true, "WoodFloorQuarter_DZ", "ItemWoodFloorQuarter", [["PartWoodPlywood", 3], ["PartWoodLumber", 3]]],
[true, "WoodSmallWall_DZ", "ItemWoodWall", [["ItemWoodWallThird", 3]]],
[true, "WoodFloor_DZ", "ItemWoodFloor", [["ItemWoodFloorHalf", 2]]],
[true, "WoodFloor4x_DZ", "ItemWoodFloor4x", [["ItemWoodFloor", 4]]],
[true, "WoodFloorHalf_DZ", "ItemWoodFloorHalf", [["ItemWoodFloorQuarter", 2]]],
[true, "WoodFloorQuarter_DZ", "ItemWoodFloorQuarter", [["PartWoodPlywood", 3], ["PartWoodLumber", 3]]],
[true, "WoodSmallWall_DZ", "ItemWoodWall", [["ItemWoodWallThird", 3]]],
[true, "WoodTriangleWall_DZ", "ItemTriangleWoodWall", [["ItemWoodFloorHalf", 1], ["ItemWoodFloorQuarter",1]]],
[true, "WoodSmallWallThird_DZ", "ItemWoodWallThird", [["PartWoodPlywood", 3], ["PartWoodLumber", 3]]],
[true, "WoodSmallWallWin_DZ", "ItemWoodWallWindow", [["ItemWoodWall", 1], ["PartGlass", 1]]],
[true, "WoodSmallWallDoor_DZ", "ItemWoodWallDoor", [["ItemWoodWallThird", 3]]],
[true, "Land_DZE_WoodDoor", "ItemWoodWallWithDoor", [["ItemWoodWallDoor", 1], ["PartWoodPlywood", 1], ["PartWoodLumber", 1]]],
[true, "Land_DZE_GarageWoodDoor", "ItemWoodWallGarageDoor", [["ItemWoodWallLg", 1], ["PartWoodLumber", 2]]],
[true, "Land_DZE_WoodOpenTopGarageDoor","ItemWoodOpenTopGarageDoor", [["ItemWoodWallLg", 1], ["PartWoodLumber", 2]]],
[true, "WoodLargeWall_DZ", "ItemWoodWallLg", [["ItemWoodWall", 1], ["PartWoodPlywood", 1], ["PartWoodLumber", 1]]],
[true, "WoodLargeWallWin_DZ", "ItemWoodWallWindowLg", [["ItemWoodWallLg", 1], ["PartGlass", 1]]],
[true, "WoodLargeWallDoor_DZ", "ItemWoodWallDoorLg", [["ItemWoodWall", 1], ["PartWoodPlywood", 1], ["PartWoodLumber", 1]]],
[true, "Land_DZE_LargeWoodDoor", "ItemWoodWallWithDoorLg", [["ItemWoodWallDoorLg", 1], ["PartWoodPlywood", 1], ["PartWoodLumber", 1]]],
[true, "WoodGateFrame_DZ", "ItemWoodGateFrame", [["ItemWoodWallThird", 6]]],
[true, "Land_DZE_WoodGate", "ItemWoodGate", [["ItemWoodGateFrame", 1], ["PartWoodPlywood", 8], ["PartWoodLumber", 2], ["equip_nails", 1]]],
[true, "WoodFloorStairs_DZ", "ItemWoodFloorStairs", [["ItemWoodFloor", 1], ["ItemWoodStairs", 1]]],
[true, "WoodSmallWallThird_DZ", "ItemWoodWallThird", [["PartWoodPlywood", 3], ["PartWoodLumber", 3]]],
[true, "WoodSmallWallWin_DZ", "ItemWoodWallWindow", [["ItemWoodWall", 1], ["PartGlass", 1]]],
[true, "WoodSmallWallDoor_DZ", "ItemWoodWallDoor", [["ItemWoodWallThird", 3]]],
[true, "Land_DZE_WoodDoor", "ItemWoodWallWithDoor", [["ItemWoodWallDoor", 1], ["PartWoodPlywood", 1], ["PartWoodLumber", 1]]],
[true, "Land_DZE_GarageWoodDoor", "ItemWoodWallGarageDoor", [["ItemWoodWallLg", 1], ["PartWoodLumber", 2]]],
[true, "Land_DZE_WoodOpenTopGarageDoor", "ItemWoodOpenTopGarageDoor", [["ItemWoodWallLg", 1], ["PartWoodLumber", 2]]],
[true, "WoodLargeWall_DZ", "ItemWoodWallLg", [["ItemWoodWall", 1], ["PartWoodPlywood", 1], ["PartWoodLumber", 1]]],
[true, "WoodLargeWallWin_DZ", "ItemWoodWallWindowLg", [["ItemWoodWallLg", 1], ["PartGlass", 1]]],
[true, "WoodLargeWallDoor_DZ", "ItemWoodWallDoorLg", [["ItemWoodWall", 1], ["PartWoodPlywood", 1], ["PartWoodLumber", 1]]],
[true, "Land_DZE_LargeWoodDoor", "ItemWoodWallWithDoorLg", [["ItemWoodWallDoorLg", 1], ["PartWoodPlywood", 1], ["PartWoodLumber", 1]]],
[true, "WoodGateFrame_DZ", "ItemWoodGateFrame", [["ItemWoodWallThird", 6]]],
[true, "Land_DZE_WoodGate", "ItemWoodGate", [["ItemWoodGateFrame", 1], ["PartWoodPlywood", 8], ["PartWoodLumber", 2], ["equip_nails", 1]]],
[true, "WoodFloorStairs_DZ", "ItemWoodFloorStairs", [["ItemWoodFloor", 1], ["ItemWoodStairs", 1]]],
[true, "WoodTriangleFloor_DZ", "ItemTriangleWoodFloor", [["ItemWoodFloorHalf", 1], ["ItemWoodFloorQuarter",1]]],
[true, "WoodStairsSans_DZ", "ItemWoodStairs", [["PartWoodLumber", 8], ["equip_nails", 2]]],
[true, "WoodStairs_DZ", "ItemWoodStairsSupport", [["ItemWoodStairs", 1], ["PartWoodLumber", 2]]],
[true, "WoodStairsRails_DZ", "ItemWoodStairsRails", [["ItemWoodStairsSupport", 1], ["PartWoodLumber", 2]]],
[true, "WoodLadder_DZ", "ItemWoodLadder", [["PartWoodLumber", 8], ["equip_nails", 2]]],
[true, "WoodHandrail_DZ", "ItemWoodHandRail", [["PartWoodLumber", 3], ["equip_nails", 1]]],
[true, "WoodPillar_DZ", "ItemWoodPillar", [["PartWoodLumber", 4], ["equip_nails", 1]]],
[true, "WoodRamp_DZ", "wood_ramp_kit", [["ItemDocumentRamp", 1], ["PartWoodLumber", 8]]],
[true, "WoodenFence_1_foundation_DZ", "woodfence_foundation_kit", [["ItemStone", 8], ["MortarBucket", 1], ["ItemPlank", 1]]],
[true, "WoodenFence_1_frame_DZ", "woodfence_frame_kit", [["woodfence_foundation_kit", 1], ["ItemPlank", 4], ["equip_nails", 1]]],
[true, "WoodenFence_quaterpanel_DZ", "woodfence_quaterpanel_kit", [["woodfence_frame_kit", 1], ["ItemPlank", 4], ["equip_nails", 1]]],
[true, "WoodenFence_halfpanel_DZ", "woodfence_halfpanel_kit", [["woodfence_quaterpanel_kit", 1], ["ItemPlank", 4], ["equip_nails", 1]]],
[true, "WoodenFence_thirdpanel_DZ", "woodfence_thirdpanel_kit", [["woodfence_halfpanel_kit", 1], ["ItemPlank", 4], ["equip_nails", 1]]],
[true, "WoodenFence_1_DZ", "woodfence_1_kit", [["woodfence_thirdpanel_kit", 1], ["ItemPlank", 4], ["equip_nails", 1]]],
[true, "WoodenFence_2_DZ", "woodfence_2_kit", [["woodfence_1_kit", 1], ["ItemPlank", 8], ["equip_nails", 2]]],
[true, "WoodenFence_3_DZ", "woodfence_3_kit", [["woodfence_2_kit", 1], ["ItemPlank", 8], ["equip_nails", 2]]],
[true, "WoodenFence_4_DZ", "woodfence_4_kit", [["woodfence_3_kit", 1], ["ItemPlank", 8], ["equip_nails", 2]]],
[true, "WoodenFence_5_DZ", "woodfence_5_kit", [["woodfence_4_kit", 1], ["ItemLog", 5], ["equip_nails", 2]]],
[true, "WoodenFence_6_DZ", "woodfence_6_kit", [["woodfence_5_kit", 1], ["PartWoodPlywood", 4], ["ItemPlank", 2], ["equip_nails", 2]]],
[true, "WoodenFence_7_DZ", "woodfence_7_kit", [["woodfence_6_kit", 1], ["ItemWoodLadder", 1], ["equip_nails", 1]]],
[true, "WoodenGate_foundation_DZ", "woodfence_gate_foundation_kit",[["ItemLog", 6]]],
[true, "WoodenGate_1_DZ", "woodfence_gate_1_kit", [["woodfence_gate_foundation_kit", 1], ["ItemPlank", 8], ["equip_nails", 1], ["ItemComboLock", 1]]],
[true, "WoodenGate_2_DZ", "woodfence_gate_2_kit", [["woodfence_gate_1_kit", 1], ["ItemPlank", 10],["equip_nails", 1]]],
[true, "WoodenGate_3_DZ", "woodfence_gate_3_kit", [["woodfence_gate_2_kit", 1], ["ItemPlank", 10],["equip_nails", 1]]],
[true, "WoodenGate_4_DZ", "woodfence_gate_4_kit", [["woodfence_gate_3_kit", 1], ["ItemPlank", 10],["equip_nails", 1]]]
[true, "WoodStairsSans_DZ", "ItemWoodStairs", [["PartWoodLumber", 8], ["equip_nails", 2]]],
[true, "WoodStairs_DZ", "ItemWoodStairsSupport", [["ItemWoodStairs", 1], ["PartWoodLumber", 2]]],
[true, "WoodStairsRails_DZ", "ItemWoodStairsRails", [["ItemWoodStairsSupport", 1], ["PartWoodLumber", 2]]],
[true, "WoodLadder_DZ", "ItemWoodLadder", [["PartWoodLumber", 8], ["equip_nails", 2]]],
[true, "WoodHandrail_DZ", "ItemWoodHandRail", [["PartWoodLumber", 3], ["equip_nails", 1]]],
[true, "WoodPillar_DZ", "ItemWoodPillar", [["PartWoodLumber", 4], ["equip_nails", 1]]],
[true, "WoodRamp_DZ", "wood_ramp_kit", [["ItemDocumentRamp", 1], ["PartWoodLumber", 8]]],
[true, "WoodenFence_1_foundation_DZ", "woodfence_foundation_kit", [["ItemStone", 8], ["MortarBucket", 1], ["ItemPlank", 1]]],
[true, "WoodenFence_1_frame_DZ", "woodfence_frame_kit", [["woodfence_foundation_kit", 1], ["ItemPlank", 4], ["equip_nails", 1]]],
[true, "WoodenFence_quaterpanel_DZ", "woodfence_quaterpanel_kit", [["woodfence_frame_kit", 1], ["ItemPlank", 4], ["equip_nails", 1]]],
[true, "WoodenFence_halfpanel_DZ", "woodfence_halfpanel_kit", [["woodfence_quaterpanel_kit", 1], ["ItemPlank", 4], ["equip_nails", 1]]],
[true, "WoodenFence_thirdpanel_DZ", "woodfence_thirdpanel_kit", [["woodfence_halfpanel_kit", 1], ["ItemPlank", 4], ["equip_nails", 1]]],
[true, "WoodenFence_1_DZ", "woodfence_1_kit", [["woodfence_thirdpanel_kit", 1], ["ItemPlank", 4], ["equip_nails", 1]]],
[true, "WoodenFence_2_DZ", "woodfence_2_kit", [["woodfence_1_kit", 1], ["ItemPlank", 8], ["equip_nails", 2]]],
[true, "WoodenFence_3_DZ", "woodfence_3_kit", [["woodfence_2_kit", 1], ["ItemPlank", 8], ["equip_nails", 2]]],
[true, "WoodenFence_4_DZ", "woodfence_4_kit", [["woodfence_3_kit", 1], ["ItemPlank", 8], ["equip_nails", 2]]],
[true, "WoodenFence_5_DZ", "woodfence_5_kit", [["woodfence_4_kit", 1], ["ItemLog", 5], ["equip_nails", 2]]],
[true, "WoodenFence_6_DZ", "woodfence_6_kit", [["woodfence_5_kit", 1], ["PartWoodPlywood", 4], ["ItemPlank", 2], ["equip_nails", 2]]],
[true, "WoodenFence_7_DZ", "woodfence_7_kit", [["woodfence_6_kit", 1], ["ItemWoodLadder", 1], ["equip_nails", 1]]],
[true, "WoodenGate_foundation_DZ", "woodfence_gate_foundation_kit", [["ItemLog", 6]]],
[true, "WoodenGate_1_DZ", "woodfence_gate_1_kit", [["woodfence_gate_foundation_kit", 1], ["ItemPlank", 8], ["equip_nails", 1], ["ItemComboLock", 1]]],
[true, "WoodenGate_2_DZ", "woodfence_gate_2_kit", [["woodfence_gate_1_kit", 1], ["ItemPlank", 10], ["equip_nails", 1]]],
[true, "WoodenGate_3_DZ", "woodfence_gate_3_kit", [["woodfence_gate_2_kit", 1], ["ItemPlank", 10], ["equip_nails", 1]]],
[true, "WoodenGate_4_DZ", "woodfence_gate_4_kit", [["woodfence_gate_3_kit", 1], ["ItemPlank", 10], ["equip_nails", 1]]],
[true, "WorkBench_DZ", "workbench_kit", [["PartWoodPlywood", 1], ["PartWoodLumber", 2]]],
[true, "SimpleFootbridge_DZ", "simple_footbridge_kit", [["ItemPlank", 3]]],
[true, "WoodenFootbridge_DZ", "wooden_footbridge_kit", [["ItemPlank", 3], ["PartWoodLumber", 2], ["equip_nails", 1]]],
[true, "Windbreak_DZ", "windbreak_kit", [["equip_wood_pallet", 2], ["PartWoodLumber", 2], ["equip_nails", 1]]],
// // Fortifications //
[true, "Land_HBarrier1_DZ", "ItemSandbagLarge", [["ItemSandbag", 3], ["ItemWire", 1], ["ItemTankTrap", 1]]],
[true, "Land_HBarrier3_DZ", "ItemSandbagExLarge", [["ItemSandbagLarge", 3]]],
[true, "Land_HBarrier5_DZ", "ItemSandbagExLarge5x", [["ItemSandbagExLarge", 1], ["ItemSandbagLarge", 2]]],
[true, "Land_HBarrier5Curved_DZ", "ItemSandbagExLarge5xCurved", [["ItemSandbagExLarge", 1], ["ItemSandbagLarge", 2]]],
[true, "HeavyBagFence_DZ", "ItemSandbagHeavy_kit", [["ItemSandbag", 2], ["PartWoodPile", 1]]],
[true, "HeavyBagFenceCorner_DZ", "ItemSandBagHeavyCorner_kit", [["ItemSandbagHeavy_kit", 2]]],
[true, "HeavyBagFenceRound_DZ", "ItemSandbagHeavyRound_kit", [["ItemSandbagHeavy_kit", 3]]],
[true, "SandNest_DZ", "sandbag_nest_kit", [["ItemSandbag", 4], ["PartWoodPlywood", 2], ["PartWoodLumber", 4]]],
[true, "SandNestLarge_DZ", "sandbag_nest_large_kit", [["ItemSandBagHeavyCorner_kit", 4], ["sandbag_nest_kit", 4]]],
[true, "Land_WarfareBarrier5x_DZ", "ItemWarfareBarrier5x_kit", [["ItemSandbagLarge", 5]]],
[true, "Land_WarfareBarrier10x_DZ", "ItemWarfareBarrier10x_kit", [["ItemWarfareBarrier5x_kit", 2]]],
[true, "Land_WarfareBarrier10xTall_DZ", "ItemWarfareBarrier10xTall_kit", [["ItemWarfareBarrier10x_kit", 3]]],
[true, "FortifiedWire_DZ", "fortified_wire_kit", [["ItemWire", 1], ["ItemTankTrap", 2]]],
[true, "BarbedGate_DZ", "barbed_gate_kit", [["ItemWire", 1], ["ItemTankTrap", 2], ["ItemPole", 2]]],
[true, "ConcreteBarrier_DZ", "concrete_barrier_kit", [["CementBag", 3], ["ItemStone", 2], ["ItemWire", 1]]],
[true, "ConcreteBarrierStriped_DZ", "concrete_barrier_striped_kit", [["CementBag", 3], ["ItemStone", 2], ["ItemWire", 1]]],
[true, "ConcreteWall_DZ", "concrete_wall_kit", [["concrete_barrier_kit", 5], ["CementBag", 2]]],
[true, "ConcretePipe_DZ", "concrete_pipe_kit", [["concrete_barrier_kit", 6], ["CementBag", 2]]],
[true, "DragonTeeth_DZ", "dragonteeth_kit", [["concrete_wall_kit", 1], ["ItemStone", 6], ["CementBag", 4]]],
[true, "DragonTeethBig_DZ", "dragonteeth_big_kit", [["dragonteeth_kit", 1], ["ItemStone", 6], ["CementBag", 4]]]
];
DZE_modularExclude = [];

Binary file not shown.

View File

@@ -83,15 +83,12 @@ if (!isDedicated) then {
player_removeAttachment = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\player_removeAttachment.sqf";
player_fillWater = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\water_fill.sqf";
player_mineStone = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\player_mineStone.sqf";
if (DZE_modularBuild) then {
player_build = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\modular_build.sqf";
call compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\snap_functions.sqf";
snap_build = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\snap_build.sqf";
call compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\BuildVectors\vector_functions.sqf";
build_vectors = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\BuildVectors\build_vectors.sqf";
} else {
player_build = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\player_build.sqf";
};
player_build = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\modular_build.sqf";
call compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\snap_functions.sqf";
snap_build = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\snap_build.sqf";
call compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\BuildVectors\vector_functions.sqf";
build_vectors = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\BuildVectors\build_vectors.sqf";
dze_snap_building = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\dze_snap_building.sqf";
FNC_find_plots = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_find_plots.sqf";
player_wearClothes = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\player_wearClothes.sqf";

File diff suppressed because one or more lines are too long