diff --git a/SQF/dayz_code/actions/remove.sqf b/SQF/dayz_code/actions/remove.sqf index 527be59e9..e4d1517cd 100644 --- a/SQF/dayz_code/actions/remove.sqf +++ b/SQF/dayz_code/actions/remove.sqf @@ -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 { diff --git a/SQF/dayz_code/actions/snap_build.sqf b/SQF/dayz_code/actions/snap_build.sqf index 8d27b2d35..b822a890b 100644 --- a/SQF/dayz_code/actions/snap_build.sqf +++ b/SQF/dayz_code/actions/snap_build.sqf @@ -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; }; }; diff --git a/SQF/dayz_code/compile/BuildVectors/build_vectors.sqf b/SQF/dayz_code/compile/BuildVectors/build_vectors.sqf index 251611534..39a59ee43 100644 --- a/SQF/dayz_code/compile/BuildVectors/build_vectors.sqf +++ b/SQF/dayz_code/compile/BuildVectors/build_vectors.sqf @@ -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; diff --git a/SQF/dayz_code/compile/BuildVectors/vector_functions.sqf b/SQF/dayz_code/compile/BuildVectors/vector_functions.sqf index 9a081b7dd..70850c002 100644 --- a/SQF/dayz_code/compile/BuildVectors/vector_functions.sqf +++ b/SQF/dayz_code/compile/BuildVectors/vector_functions.sqf @@ -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 = ""; // orange + local _WHT = ""; // white + local _TAB = " "; + local _END = ""; + 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["" + localize "STR_EPOCH_ACTION_VECTORS" + " %1" +"",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["" + " %1" +"",_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 = ""; // orange + local _RED = ""; // red + local _WHT = ""; // white + local _GRN = ""; // green + local _DEG = localize "STR_EPOCH_VECTORS_DEGREES"; + local _SEL = localize "STR_EPOCH_ACTION_SNAP_SELECT"; + local _TAB = " "; + local _END = ""; + 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["" + localize "STR_EPOCH_VECTORS_DEGREES" + " %1" +"",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["" + " " + localize "STR_EPOCH_ACTION_SNAP_SELECT" + " %1" +"",_x],"\z\addons\dayz_code\compile\BuildVectors\build_vectors.sqf",[vectorActionState,"SELECT",2,_x],4,false,false]; - } else { - degreeActions = player addaction [format["" + " " + localize "STR_EPOCH_ACTION_SNAP_SELECT" + " %1" +"",_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]; }; diff --git a/SQF/dayz_code/compile/dze_snap_building.sqf b/SQF/dayz_code/compile/dze_snap_building.sqf new file mode 100644 index 000000000..db2c3e9bc --- /dev/null +++ b/SQF/dayz_code/compile/dze_snap_building.sqf @@ -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 = "
"; +local _format = ""; +local _COL = ""; // 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 + ""; // transparent +local _VEC = [_GRY, _WHT] select _vectoringEnabled; // initial text color +local _END = ""; // end of segment +local _NL = _END + "
"; // 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; +}; diff --git a/SQF/dayz_code/compile/fn_displayHelpers.sqf b/SQF/dayz_code/compile/fn_displayHelpers.sqf index dd2e69faf..83d331628 100644 --- a/SQF/dayz_code/compile/fn_displayHelpers.sqf +++ b/SQF/dayz_code/compile/fn_displayHelpers.sqf @@ -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 = []; }; diff --git a/SQF/dayz_code/compile/snap_functions.sqf b/SQF/dayz_code/compile/snap_functions.sqf index b795cfa3c..6a9568467 100644 --- a/SQF/dayz_code/compile/snap_functions.sqf +++ b/SQF/dayz_code/compile/snap_functions.sqf @@ -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 = ""; + local _GRN = ""; + local _RED = ""; + local _TB3 = " "; + local _END = ""; + 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["" + "Snap: %1" +"",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["" + localize "STR_EPOCH_ACTION_SNAP_POINT" + " %1" +"",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["" + " %1. " + localize "STR_EPOCH_ACTION_SNAP_SELECT" + " %2" + "",_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 = ""; + local _GRN = _format + "'#20E020'>"; + local _END = ""; + local _NL = _END + "
"; + 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 ["Epoch Snap Building
",_bldTxtClrW,_bldTxtSz,_bldTxtShdw,_bldTxtAlgnL,_bldTxtClrO,_bldTxtUndrln,_bldTxtBold]; - _bldTxtStringSD = format["[Snap] %7 %8

",_bldTxtClrO,_bldTxtClrR,_bldTxtClrW,_bldTxtSzT,_bldTxtShdw,_bldTxtAlgnL,localize "STR_EPOCH_SNAP_TUTORIAL_DISABLE",localize "STR_EPOCH_SNAP_TUTORIAL_DISABLE_MSG"]; - _bldTxtStringSE = format["[Snap] %7 %8

",_bldTxtClrO,_bldTxtClrG,_bldTxtClrW,_bldTxtSzT,_bldTxtShdw,_bldTxtAlgnL,localize "STR_EPOCH_SNAP_TUTORIAL_ENABLE",localize "STR_EPOCH_SNAP_TUTORIAL_ENABLE_MSG"]; - _bldTxtStringSA = format["[Auto]: %6

",_bldTxtClrO,_bldTxtClrW,_bldTxtSzT,_bldTxtShdw,_bldTxtAlgnL,localize "STR_EPOCH_SNAP_TUTORIAL_AUTO_DETECT"]; - _bldTxtStringSM = format["[%6]: %7

",_bldTxtClrO,_bldTxtClrW,_bldTxtSzT,_bldTxtShdw,_bldTxtAlgnL,localize "STR_EPOCH_ACTION_SNAP_POINT_MANUAL",localize "STR_EPOCH_SNAP_TUTORIAL_MANUAL_DETECT"]; - _bldTxtStringPG = format["%6: %7
",_bldTxtClrO,_bldTxtClrW,_bldTxtSzT,_bldTxtShdw,_bldTxtAlgnL,localize "STR_EPOCH_SNAP_TUTORIAL_PGUPPGDOWN",localize "STR_EPOCH_SNAP_TUTORIAL_PGUPPGDOWN_MSG"]; - _bldTxtStringAPG = format["%6: %7
",_bldTxtClrO,_bldTxtClrW,_bldTxtSzT,_bldTxtShdw,_bldTxtAlgnL,localize "STR_EPOCH_SNAP_TUTORIAL_ALT_PGUPPGDOWN",localize "STR_EPOCH_SNAP_TUTORIAL_ALT_PGUPPGDOWN_MSG"]; - _bldTxtStringCPG = format["%6: %7
",_bldTxtClrO,_bldTxtClrW,_bldTxtSzT,_bldTxtShdw,_bldTxtAlgnL,localize "STR_EPOCH_SNAP_TUTORIAL_CTRL_PGUPPGDOWN",localize "STR_EPOCH_SNAP_TUTORIAL_CTRL_PGUPPGDOWN_MSG"]; - _bldTxtStringQE = format["[Q / E]: %6
",_bldTxtClrO,_bldTxtClrW,_bldTxtSzT,_bldTxtShdw,_bldTxtAlgnL,localize "STR_EPOCH_SNAP_TUTORIAL_ROTATE180_MSG"]; - _bldTxtStringQEF = format["[Q / E]: %6

",_bldTxtClrO,_bldTxtClrW,_bldTxtSzT,_bldTxtShdw,_bldTxtAlgnL,localize "STR_EPOCH_SNAP_TUTORIAL_ROTATE45_MSG"]; - _bldTxtStringFD = format["[F]: %6
",_bldTxtClrO,_bldTxtClrW,_bldTxtSzT,_bldTxtShdw,_bldTxtAlgnL,localize "STR_EPOCH_SNAP_TUTORIAL_F_DROP_MSG"]; - _bldTxtStringFS = format["[F]: %6
",_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; }; }; diff --git a/SQF/dayz_code/configVariables.sqf b/SQF/dayz_code/configVariables.sqf index 80eb99e8e..dc5bf07ea 100644 --- a/SQF/dayz_code/configVariables.sqf +++ b/SQF/dayz_code/configVariables.sqf @@ -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 = []; diff --git a/SQF/dayz_code/gui/EpochSnapBuilding.paa b/SQF/dayz_code/gui/EpochSnapBuilding.paa new file mode 100644 index 000000000..42714ffd5 Binary files /dev/null and b/SQF/dayz_code/gui/EpochSnapBuilding.paa differ diff --git a/SQF/dayz_code/init/compiles.sqf b/SQF/dayz_code/init/compiles.sqf index 2161d4c29..e62897049 100644 --- a/SQF/dayz_code/init/compiles.sqf +++ b/SQF/dayz_code/init/compiles.sqf @@ -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"; diff --git a/SQF/dayz_code/init/variables.sqf b/SQF/dayz_code/init/variables.sqf index 745326693..369739068 100644 --- a/SQF/dayz_code/init/variables.sqf +++ b/SQF/dayz_code/init/variables.sqf @@ -1,7 +1,7 @@ /**************Variables Compiled on Both Client and Server**************/ Dayz_plants = ["Dayz_Plant1","Dayz_Plant2","Dayz_Plant3"]; -DayZ_SafeObjects = ["Base_Fire_DZ","Land_Fire_DZ","TentStorage","TentStorage0","TentStorage1","TentStorage2","TentStorage3","TentStorage4","StashSmall","StashSmall1","StashSmall2","StashSmall3","StashSmall4","StashMedium","StashMedium1","StashMedium2","StashMedium3","StashMedium4","Wire_cat1","Sandbag1_DZ","Fence_DZ","Generator_DZ","Hedgehog_DZ","BearTrap_DZ","DomeTentStorage","DomeTentStorage0","DomeTentStorage1","DomeTentStorage2","DomeTentStorage3","DomeTentStorage4","CamoNet_DZ","Trap_Cans","TrapTripwireFlare","TrapBearTrapSmoke","TrapTripwireGrenade","TrapTripwireSmoke","TrapBearTrapFlare","TentStorageDomed","VaultStorageLocked","VaultStorage2Locked","BagFenceRound_DZ","TrapBear","Fort_RazorWire","Land_HBarrier1_DZ","Land_HBarrier3_DZ","Land_HBarrier5_DZ","Fence_corrugated_DZ","CanvasHut_DZ","ParkBench_DZ","MetalGate_DZ","OutHouse_DZ","Wooden_shed_DZ","Wooden_shed2_DZ","WoodShack_DZ","WoodShack2_DZ","StorageShed_DZ","StorageShed2_DZ","Plastic_Pole_EP1_DZ","StickFence_DZ","LightPole_DZ","FuelPump_DZ","DesertCamoNet_DZ","ForestCamoNet_DZ","WinterCamoNet_DZ","DesertLargeCamoNet_DZ","ForestLargeCamoNet_DZ","WinterLargeCamoNet_DZ","SandNest_DZ","DeerStand_DZ","MetalPanel_DZ","WorkBench_DZ","WoodFloor_DZ","WoodLargeWall_DZ","WoodLargeWallDoor_DZ","WoodLargeWallWin_DZ","WoodSmallWall_DZ","WoodSmallWallWin_DZ","WoodSmallWallDoor_DZ","LockboxStorageLocked","LockboxStorage2Locked","LockboxStorageWinterLocked","LockboxStorageWinter2Locked","WoodFloorHalf_DZ","WoodFloorQuarter_DZ","WoodStairs_DZ","WoodStairsSans_DZ","WoodStairsRails_DZ","WoodSmallWallThird_DZ","WoodLadder_DZ","Land_DZE_GarageWoodDoor","Land_DZE_LargeWoodDoor","Land_DZE_WoodDoor","Land_DZE_GarageWoodDoorLocked","Land_DZE_LargeWoodDoorLocked","Land_DZE_WoodDoorLocked","CinderWallHalf_DZ","CinderWall_DZ","CinderWallDoorway_DZ","CinderWallDoor_DZ","CinderWallDoorLocked_DZ","CinderWallSmallDoorway_DZ","CinderWallDoorSmall_DZ","CinderWallDoorSmallLocked_DZ","MetalFloor_DZ","WoodRamp_DZ","GunRack_DZ","GunRack2_DZ","FireBarrel_DZ","WoodCrate_DZ","WoodCrate2_DZ","Scaffolding_DZ","DesertTentStorage","DesertTentStorage0","DesertTentStorage1","DesertTentStorage2","DesertTentStorage3","DesertTentStorage4","WoodenFence_1_foundation_DZ","WoodenFence_1_frame_DZ","WoodenFence_quaterpanel_DZ","WoodenFence_halfpanel_DZ","WoodenFence_thirdpanel_DZ","WoodenFence_1_DZ","WoodenFence_2_DZ","WoodenFence_3_DZ","WoodenFence_4_DZ","WoodenFence_5_DZ","WoodenFence_6_DZ","WoodenFence_7_DZ","MetalFence_1_foundation_DZ","MetalFence_1_frame_DZ","MetalFence_halfpanel_DZ","MetalFence_thirdpanel_DZ","MetalFence_1_DZ","MetalFence_2_DZ","MetalFence_3_DZ","MetalFence_4_DZ","MetalFence_5_DZ","MetalFence_6_DZ","MetalFence_7_DZ","WoodenGate_foundation_DZ","WoodenGate_1_DZ","WoodenGate_2_DZ","WoodenGate_3_DZ","WoodenGate_4_DZ","WoodGateFrame_DZ","Land_DZE_WoodGate","Land_DZE_WoodGateLocked","CinderGateFrame_DZ","CinderGate_DZ","CinderGateLocked_DZ","Metal_Drawbridge_DZ","Metal_DrawbridgeLocked_DZ","WoodTriangleWall_DZ","WoodHandrail_DZ","WoodFloorStairs_DZ","WoodPillar_DZ","Land_DZE_WoodOpenTopGarageDoor","Land_DZE_WoodOpenTopGarageLocked","CinderGarageOpenTopFrame_DZ","CinderGarageOpenTop_DZ","CinderGarageOpenTopLocked_DZ","DoorFrame_DZ","Door_DZ","DoorLocked_DZ","CinderWallWindow_DZ","CinderWallWindowLocked_DZ","CinderDoorHatch_DZ","CinderDoorHatchLocked_DZ","MetalPillar_DZ","MetalFloor_Half_DZ","MetalFloor_Quarter_DZ","GlassFloor_DZ","Concrete_Bunker_DZ","Concrete_Bunker_Locked_DZ","TallSafeLocked","Advanced_WorkBench_DZ","CookTripod_DZ","Stoneoven_DZ","Commode_DZ","Wardrobe_DZ","Fridge_DZ","Washing_Machine_DZ","Server_Rack_DZ","ATM_DZ","Armchair_DZ","Sofa_DZ","Arcade_DZ","Vendmachine1_DZ","Vendmachine2_DZ","Notebook_DZ","Water_Pump_DZ","Greenhouse_DZ","Bed_DZ","Table_DZ","Office_Chair_DZ","MetalFloor4x_DZ","GlassFloor_Half_DZ","GlassFloor_Quarter_DZ","WoodFloor4x_DZ","WoodTriangleFloor_DZ","CinderWallHalf_Gap_DZ","TentStorageWinter","TentStorageWinter0","TentStorageWinter1","TentStorageWinter2","TentStorageWinter3","TentStorageWinter4","WinterDomeTentStorage","WinterDomeTentStorage0","WinterDomeTentStorage1","WinterDomeTentStorage2","WinterDomeTentStorage3","WinterDomeTentStorage4","VaultStorageBroken","VaultStorageBroken2","TallSafeBroken","LockboxStorageBroken","LockboxStorage2Broken","LockboxStorageWinterBroken","LockboxStorageWinter2Broken","StorageCrate_DZ","CamoStorageCrate_DZ","Garage_Green_DZ","Garage_White_DZ","Garage_Brown_DZ","Garage_Grey_DZ","Helipad_Civil_DZ","Helipad_Rescue_DZ","Helipad_Army_DZ","Helipad_Cross_DZ","Helipad_ParkBorder_DZ","CCTV_DZ"]; +DayZ_SafeObjects = ["Base_Fire_DZ","Land_Fire_DZ","TentStorage","TentStorage0","TentStorage1","TentStorage2","TentStorage3","TentStorage4","StashSmall","StashSmall1","StashSmall2","StashSmall3","StashSmall4","StashMedium","StashMedium1","StashMedium2","StashMedium3","StashMedium4","Wire_cat1","Sandbag1_DZ","Fence_DZ","Generator_DZ","Hedgehog_DZ","BearTrap_DZ","DomeTentStorage","DomeTentStorage0","DomeTentStorage1","DomeTentStorage2","DomeTentStorage3","DomeTentStorage4","CamoNet_DZ","Trap_Cans","TrapTripwireFlare","TrapBearTrapSmoke","TrapTripwireGrenade","TrapTripwireSmoke","TrapBearTrapFlare","TentStorageDomed","VaultStorageLocked","VaultStorage2Locked","BagFenceRound_DZ","TrapBear","Fort_RazorWire","Land_HBarrier1_DZ","Land_HBarrier3_DZ","Land_HBarrier5_DZ","Fence_corrugated_DZ","CanvasHut_DZ","ParkBench_DZ","MetalGate_DZ","OutHouse_DZ","Wooden_shed_DZ","Wooden_shed2_DZ","WoodShack_DZ","WoodShack2_DZ","StorageShed_DZ","StorageShed2_DZ","Plastic_Pole_EP1_DZ","StickFence_DZ","LightPole_DZ","FuelPump_DZ","DesertCamoNet_DZ","ForestCamoNet_DZ","WinterCamoNet_DZ","DesertLargeCamoNet_DZ","ForestLargeCamoNet_DZ","WinterLargeCamoNet_DZ","SandNest_DZ","DeerStand_DZ","MetalPanel_DZ","WorkBench_DZ","WoodFloor_DZ","WoodLargeWall_DZ","WoodLargeWallDoor_DZ","WoodLargeWallWin_DZ","WoodSmallWall_DZ","WoodSmallWallWin_DZ","WoodSmallWallDoor_DZ","LockboxStorageLocked","LockboxStorage2Locked","LockboxStorageWinterLocked","LockboxStorageWinter2Locked","WoodFloorHalf_DZ","WoodFloorQuarter_DZ","WoodStairs_DZ","WoodStairsSans_DZ","WoodStairsRails_DZ","WoodSmallWallThird_DZ","WoodLadder_DZ","Land_DZE_GarageWoodDoor","Land_DZE_LargeWoodDoor","Land_DZE_WoodDoor","Land_DZE_GarageWoodDoorLocked","Land_DZE_LargeWoodDoorLocked","Land_DZE_WoodDoorLocked","CinderWallHalf_DZ","CinderWall_DZ","CinderWallDoorway_DZ","CinderWallDoor_DZ","CinderWallDoorLocked_DZ","CinderWallSmallDoorway_DZ","CinderWallDoorSmall_DZ","CinderWallDoorSmallLocked_DZ","MetalFloor_DZ","WoodRamp_DZ","GunRack_DZ","GunRack2_DZ","FireBarrel_DZ","WoodCrate_DZ","WoodCrate2_DZ","Scaffolding_DZ","DesertTentStorage","DesertTentStorage0","DesertTentStorage1","DesertTentStorage2","DesertTentStorage3","DesertTentStorage4","WoodenFence_1_foundation_DZ","WoodenFence_1_frame_DZ","WoodenFence_quaterpanel_DZ","WoodenFence_halfpanel_DZ","WoodenFence_thirdpanel_DZ","WoodenFence_1_DZ","WoodenFence_2_DZ","WoodenFence_3_DZ","WoodenFence_4_DZ","WoodenFence_5_DZ","WoodenFence_6_DZ","WoodenFence_7_DZ","MetalFence_1_foundation_DZ","MetalFence_1_frame_DZ","MetalFence_halfpanel_DZ","MetalFence_thirdpanel_DZ","MetalFence_1_DZ","MetalFence_2_DZ","MetalFence_3_DZ","MetalFence_4_DZ","MetalFence_5_DZ","MetalFence_6_DZ","MetalFence_7_DZ","WoodenGate_foundation_DZ","WoodenGate_1_DZ","WoodenGate_2_DZ","WoodenGate_3_DZ","WoodenGate_4_DZ","WoodGateFrame_DZ","Land_DZE_WoodGate","Land_DZE_WoodGateLocked","CinderGateFrame_DZ","CinderGate_DZ","CinderGateLocked_DZ","Metal_Drawbridge_DZ","Metal_DrawbridgeLocked_DZ","WoodTriangleWall_DZ","WoodHandrail_DZ","WoodFloorStairs_DZ","WoodPillar_DZ","Land_DZE_WoodOpenTopGarageDoor","Land_DZE_WoodOpenTopGarageLocked","CinderGarageOpenTopFrame_DZ","CinderGarageOpenTop_DZ","CinderGarageOpenTopLocked_DZ","DoorFrame_DZ","Door_DZ","DoorLocked_DZ","CinderWallWindow_DZ","CinderWallWindowLocked_DZ","CinderDoorHatch_DZ","CinderDoorHatchLocked_DZ","MetalPillar_DZ","MetalFloor_Half_DZ","MetalFloor_Quarter_DZ","GlassFloor_DZ","Concrete_Bunker_DZ","Concrete_Bunker_Locked_DZ","TallSafeLocked","Advanced_WorkBench_DZ","CookTripod_DZ","Stoneoven_DZ","Commode_DZ","Wardrobe_DZ","Fridge_DZ","Washing_Machine_DZ","Server_Rack_DZ","ATM_DZ","Armchair_DZ","Sofa_DZ","Arcade_DZ","Vendmachine1_DZ","Vendmachine2_DZ","Notebook_DZ","Water_Pump_DZ","Greenhouse_DZ","Bed_DZ","Table_DZ","Office_Chair_DZ","MetalFloor4x_DZ","GlassFloor_Half_DZ","GlassFloor_Quarter_DZ","WoodFloor4x_DZ","WoodTriangleFloor_DZ","CinderWallHalf_Gap_DZ","TentStorageWinter","TentStorageWinter0","TentStorageWinter1","TentStorageWinter2","TentStorageWinter3","TentStorageWinter4","WinterDomeTentStorage","WinterDomeTentStorage0","WinterDomeTentStorage1","WinterDomeTentStorage2","WinterDomeTentStorage3","WinterDomeTentStorage4","VaultStorageBroken","VaultStorageBroken2","TallSafeBroken","LockboxStorageBroken","LockboxStorage2Broken","LockboxStorageWinterBroken","LockboxStorageWinter2Broken","StorageCrate_DZ","CamoStorageCrate_DZ","Garage_Green_DZ","Garage_White_DZ","Garage_Brown_DZ","Garage_Grey_DZ","Helipad_Civil_DZ","Helipad_Rescue_DZ","Helipad_Army_DZ","Helipad_Cross_DZ","Helipad_ParkBorder_DZ","CCTV_DZ","BarbedGate_DZ","MetalContainer2D_DZ","MetalContainer1G_DZ","MetalContainer1B_DZ","MetalContainer1A_DZ","Windbreak_DZ","DragonTeethBig_DZ","DragonTeeth_DZ","ConcretePipe_DZ","ConcreteWall_DZ","ConcreteBarrierStriped_DZ","ConcreteBarrier_DZ","WoodenFootbridge_DZ","SimpleFootbridge_DZ","FortifiedWire_DZ","SandNestLarge_DZ","Land_WarfareBarrier10xTall_DZ","Land_WarfareBarrier10x_DZ","Land_WarfareBarrier5x_DZ","Land_HBarrier5Curved_DZ","HeavyBagFence_DZ","HeavyBagFenceCorner_DZ","HeavyBagFenceRound_DZ"]; DayZ_GearedObjects = ["Car","Helicopter","Motorcycle","Ship","TentStorage_base","StashSmall_base","StashMedium_base","Plane","Tank","VaultStorage","VaultStorage2","TallSafe","LockboxStorage","LockboxStorage2","LockboxStorageWinter","LockboxStorageWinter2","TentStorage","OutHouse_DZ","Wooden_shed_DZ","Wooden_shed2_DZ","WoodShack_DZ","WoodShack2_DZ","StorageShed_DZ","StorageShed2_DZ","GunRack_DZ","GunRack2_DZ","WoodCrate_DZ","WoodCrate2_DZ","Scaffolding_DZ","Generator_DZ","Advanced_WorkBench_DZ","CookTripod_DZ","Stoneoven_DZ","Commode_DZ","Wardrobe_DZ","Fridge_DZ","Washing_Machine_DZ","Server_Rack_DZ","ATM_DZ","Armchair_DZ","Sofa_DZ","Arcade_DZ","Vendmachine1_DZ","Vendmachine2_DZ","VaultStorageBroken","VaultStorageBroken2","TallSafeBroken","LockboxStorageBroken","LockboxStorage2Broken","LockboxStorageWinterBroken","LockboxStorageWinter2Broken","StorageCrate_DZ","CamoStorageCrate_DZ"]; dayz_typedBags = ["bloodTester","bloodBagANEG","bloodBagAPOS","bloodBagBNEG","bloodBagBPOS","bloodBagABNEG","bloodBagABPOS","bloodBagONEG","bloodBagOPOS","wholeBloodBagANEG","wholeBloodBagAPOS","wholeBloodBagBNEG","wholeBloodBagBPOS","wholeBloodBagABNEG","wholeBloodBagABPOS","wholeBloodBagONEG","wholeBloodBagOPOS"]; dayz_plant = ["pumpkin.p3d","p_helianthus.p3d","p_fiberplant_ep1.p3d"]; @@ -301,16 +301,36 @@ if (!isDedicated) then { dayz_treeTypes = ["","MAP_t_picea1s","MAP_t_picea2s","MAP_t_picea3f","MAP_t_pinusN2s","MAP_t_pinusS2f","MAP_t_populus3s","MAP_t_betula2s","MAP_t_fagus2s","MAP_t_fagus2W","MAP_t_malus1s"]; DayZ_DropDrageeObjects = ["TentStorage","TentStorage0","TentStorage1","TentStorage2","TentStorage3","TentStorage4","Wire_cat1","Sandbag1_DZ","Fence_DZ","Generator_DZ","Hedgehog_DZ","DomeTentStorage","DomeTentStorage0","DomeTentStorage1","DomeTentStorage2","DomeTentStorage3","DomeTentStorage4","VaultStorageLocked","BagFenceRound_DZ","Fort_RazorWire","WoodGate_DZ","Land_HBarrier1_DZ","Land_HBarrier3_DZ","Land_HBarrier5_DZ","Fence_corrugated_DZ","M240Nest_DZ","ParkBench_DZ","MetalGate_DZ","OutHouse_DZ","Wooden_shed_DZ","Wooden_shed2_DZ","WoodShack_DZ","WoodShack2_DZ","StorageShed_DZ","StorageShed2_DZ","StickFence_DZ","SandNest_DZ","MetalPanel_DZ","WorkBench_DZ","WoodLargeWall_DZ","WoodLargeWallDoor_DZ","WoodLargeWallWin_DZ","WoodSmallWall_DZ","WoodSmallWallWin_DZ","WoodSmallWallDoor_DZ","LockboxStorageLocked","WoodSmallWallThird_DZ","WoodLadder_DZ","Land_DZE_GarageWoodDoor","Land_DZE_LargeWoodDoor","Land_DZE_WoodDoor","Land_DZE_GarageWoodDoorLocked","Land_DZE_LargeWoodDoorLocked","Land_DZE_WoodDoorLocked","CinderWallHalf_DZ","CinderWall_DZ","CinderWallDoorway_DZ","CinderWallDoor_DZ","CinderWallDoorLocked_DZ","CinderWallSmallDoorway_DZ","CinderWallDoorSmall_DZ","CinderWallDoorSmallLocked_DZ","DesertTentStorage","DesertTentStorage0","DesertTentStorage1","DesertTentStorage2","DesertTentStorage3","DesertTentStorage4","WoodFloorHalf_DZ","WoodFloor_DZ","WoodFloorQuarter_DZ","WoodStairs_DZ","WoodStairsSans_DZ","WoodStairsRails_DZ","MetalFloor_DZ","WoodRamp_DZ","WoodenFence_1_foundation_DZ","WoodenFence_1_frame_DZ","WoodenFence_quaterpanel_DZ","WoodenFence_halfpanel_DZ","WoodenFence_thirdpanel_DZ","WoodenFence_1_DZ","WoodenFence_2_DZ","WoodenFence_3_DZ","WoodenFence_4_DZ","WoodenFence_5_DZ","WoodenFence_6_DZ","MetalFence_1_foundation_DZ","MetalFence_1_frame_DZ","MetalFence_halfpanel_DZ","MetalFence_thirdpanel_DZ","MetalFence_1_DZ","MetalFence_2_DZ","MetalFence_3_DZ","MetalFence_4_DZ","MetalFence_5_DZ","MetalFence_6_DZ","MetalFence_7_DZ","WoodenGate_foundation_DZ","WoodenGate_1_DZ","WoodenGate_2_DZ","WoodenGate_3_DZ","WoodenGate_4_DZ","WoodGateFrame_DZ","Land_DZE_WoodGate","Land_DZE_WoodGateLocked","CinderGateFrame_DZ","CinderGate_DZ","CinderGateLocked_DZ","Metal_Drawbridge_DZ","Metal_DrawbridgeLocked_DZ","WoodTriangleWall_DZ","WoodHandrail_DZ","WoodFloorStairs_DZ","WoodPillar_DZ","Land_DZE_WoodOpenTopGarageDoor","Land_DZE_WoodOpenTopGarageLocked","CinderGarageOpenTopFrame_DZ","CinderGarageOpenTop_DZ","CinderGarageOpenTopLocked_DZ","DoorFrame_DZ","Door_DZ","DoorLocked_DZ","CinderWallWindow_DZ","CinderWallWindowLocked_DZ","CinderDoorHatch_DZ","CinderDoorHatchLocked_DZ","MetalPillar_DZ","MetalFloor_Half_DZ","MetalFloor_Quarter_DZ","GlassFloor_DZ","Concrete_Bunker_DZ","Concrete_Bunker_Locked_DZ","TallSafe","TallSafeLocked","Advanced_WorkBench_DZ","CookTripod_DZ","Stoneoven_DZ","Commode_DZ","Wardrobe_DZ","Fridge_DZ","Washing_Machine_DZ","Server_Rack_DZ","ATM_DZ","Armchair_DZ","Sofa_DZ","Arcade_DZ","Vendmachine1_DZ","Vendmachine2_DZ","Notebook_DZ","Water_Pump_DZ","Greenhouse_DZ","Bed_DZ","Table_DZ","Office_Chair_DZ","MetalFloor4x_DZ","GlassFloor_Half_DZ","GlassFloor_Quarter_DZ","WoodFloor4x_DZ","WoodTriangleFloor_DZ","CinderWallHalf_Gap_DZ","TentStorageWinter","TentStorageWinter0","TentStorageWinter1","TentStorageWinter2","TentStorageWinter3","TentStorageWinter4","WinterDomeTentStorage","WinterDomeTentStorage0","WinterDomeTentStorage1","WinterDomeTentStorage2","WinterDomeTentStorage3","WinterDomeTentStorage4","VaultStorageBroken","VaultStorageBroken2","TallSafeBroken","LockboxStorageBroken","LockboxStorage2Broken","LockboxStorageWinterBroken","LockboxStorageWinter2Broken","StorageCrate_DZ","CamoStorageCrate_DZ","Garage_Green_DZ","Garage_White_DZ","Garage_Brown_DZ","Garage_Grey_DZ","Helipad_Civil_DZ","Helipad_Rescue_DZ","Helipad_Army_DZ","Helipad_Cross_DZ","Helipad_ParkBorder_DZ","CCTV_DZ"]; Dayz_fishingItems = ["MeleeFishingPole"]; - DZE_maintainRange = (DZE_PlotPole select 0) + 0.1; // Default: maintain building objects within plot radius + 0.1 meters. - DZE_modularDoors = ["Land_DZE_WoodDoor","Land_DZE_LargeWoodDoor","Land_DZE_GarageWoodDoor","CinderWallDoor_DZ","CinderWallDoorSmall_DZ","WoodenGate_foundation_DZ","WoodenGate_1_DZ","WoodenGate_2_DZ","WoodenGate_3_DZ","WoodenGate_4_DZ","Land_DZE_WoodGate","Land_DZE_WoodOpenTopGarageDoor","CinderGate_DZ","CinderGarageOpenTop_DZ","CinderDoorHatch_DZ","Door_DZ","Concrete_Bunker_DZ","Metal_Drawbridge_DZ"]; + DZE_maintainRange = (DZE_PlotPole select 0) + 0.1; // Default: maintain building objects within plot radius + 0.1 meters. + DZE_modularDoors = ["Land_DZE_WoodDoor","Land_DZE_LargeWoodDoor","Land_DZE_GarageWoodDoor","CinderWallDoor_DZ","CinderWallDoorSmall_DZ","WoodenGate_foundation_DZ","WoodenGate_1_DZ","WoodenGate_2_DZ","WoodenGate_3_DZ","WoodenGate_4_DZ","Land_DZE_WoodGate","Land_DZE_WoodOpenTopGarageDoor","CinderGate_DZ","CinderGarageOpenTop_DZ","CinderDoorHatch_DZ","Door_DZ","Concrete_Bunker_DZ","Metal_Drawbridge_DZ"]; DZE_refundStorageItemContents = ["GunRack_DZ","GunRack2_DZ","WoodCrate_DZ","WoodCrate2_DZ","StorageCrate_DZ","CamoStorageCrate_DZ","OutHouse_DZ","StorageShed_DZ","StorageShed2_DZ","Wooden_shed_DZ","Wooden_shed2_DZ","WoodShack_DZ","WoodShack2_DZ","Advanced_WorkBench_DZ","StashSmall","StashSmall1","StashSmall2","StashSmall3","StashSmall4","StashMedium","StashMedium1","StashMedium2","StashMedium3","StashMedium4","Generator_DZ","M240Nest_DZ","CookTripod_DZ","Stoneoven_DZ","Commode_DZ","Wardrobe_DZ","Fridge_DZ","Washing_Machine_DZ","Server_Rack_DZ","ATM_DZ","Armchair_DZ","Sofa_DZ","Arcade_DZ","Vendmachine1_DZ","Vendmachine2_DZ"]; // array of non-lockable storage objects that will refund their contents when the object is removed // Helper Colors Require Reformatting - DZE_NoRefundTexture = [0, format["#(argb,8,8,3)color(1,0,0,%1,ca)", (DZE_NoRefundTransparency max 0.1)] ]; // red - DZE_removeTexture = [0, format["#(argb,8,8,3)color(0,1,0,%1,ca)", (DZE_removeTransparency max 0.1)] ]; // green - DZE_deconstructTexture = [0, format["#(argb,8,8,3)color(0,0,1,%1,ca)", (DZE_deconstructTransparency max 0.1)] ]; // blue - DZE_plotRed = [0, format["#(argb,8,8,3)color(1,0,0,%1,ca)", (DZE_plotRedTransparency max 0.1)] ]; // red - DZE_plotGreen = [0, format["#(argb,8,8,3)color(0,1,0,%1,ca)", (DZE_plotGreenTransparency max 0.1)] ]; // green + DZE_NoRefundTexture = [0, format["#(argb,8,8,3)color(1.00,0.00,0.00,%1,ca)", (DZE_NoRefundTransparency max 0.1)] ]; // red + DZE_removeTexture = [0, format["#(argb,8,8,3)color(0.15,1.00,0.40,%1,ca)", (DZE_removeTransparency max 0.1)] ]; // green + DZE_deconstructTexture = [0, format["#(argb,8,8,3)color(0.15,0.00,1.00,%1,ca)", (DZE_deconstructTransparency max 0.1)] ]; // blue + DZE_plotRed = [0, format["#(argb,8,8,3)color(1.00,0.00,0.00,%1,ca)", (DZE_plotRedTransparency max 0.1)] ]; // red + DZE_plotGreen = [0, format["#(argb,8,8,3)color(0.00,1.00,0.50,%1,ca)", (DZE_plotGreenTransparency max 0.1)] ]; // green + + DZE_SNAP_POINT_RESET = [0,"#(argb,8,8,3)color(0.00,1.00,0.40,0.70,ca)"]; // green + DZE_SNAP_POINT_FOUND = [0,"#(argb,8,8,3)color(1.00,0.00,0.00,0.70,ca)"]; // red / detected + DZE_SNAP_HELPER_CLASS = "Sign_sphere10cm_EP1"; + + DZE_T = false; // terrain align + DZE_P = false; // show/hide plot pole boundary + DZE_L = false; // local mode + DZE_LOCAL_MODE = false; // toggle between local axis and world axis while base building + DZE_H = false; // hide/unhide panel + DZE_HIDE_PANEL = false; + DZE_TAB = false; // tab forwards through snapping points + DZE_TAB_SHIFT = false; // tab backwards through snapping points + DZE_BACK = false; // reset vectors + DZE_LEFT = false; // bank left + DZE_RIGHT = false; // bank right + DZE_UP = false; // pitch forward + DZE_DOWN = false; // pitch back + DZE_MINUS = false; // decrease angle + DZE_PLUS = false; // increase angle (=+) snapGizmos = []; // may not need this snapGizmosNearby = []; // may not need this @@ -365,7 +385,6 @@ if (!isDedicated) then { dayz_CurrentNearByZombies = 0; dayz_currentGlobalZombies = 0; // Current total - DZE_maintainRange = ((DZE_PlotPole select 0)+20); // Default: maintain building objects within plot radius + 20 meters. dayz_maxGlobalAnimals = 50; // Maximum number of animals allowed on the map simultaneously. dayz_maxGlobalPlants = 500; // Maximum number of plants to be spawned on the map. dayz_maxLocalZombies = 15; // max quantity of Z controlled by local gameclient, used by player_spawnCheck. Below this limit we can spawn Z @@ -374,6 +393,8 @@ if (!isDedicated) then { dayz_animalDistance = 600; // Used to calculate the distance from players that animals should spawn and be deleted. // Epoch Additions + DZE_prevTarget = objNull; + DZE_prevDistance = 0; snow = 0; dayz_inside = false; DZE_UI = profileNamespace getVariable ["statusUI",1];