Merge pull request #1410 from raymix/master

optional snap building added
This commit is contained in:
vbawol
2014-07-11 14:27:40 -05:00
7 changed files with 1298 additions and 1 deletions

View File

@@ -1,6 +1,7 @@
[NEW] Use DayZ_UseSteamID = false; in your init.sqf to use the old PlayerUID, instead of SteamID @icomrade
[NEW] UI Update - Graphical and code changes, enable using Dayz_Dark_UI = true; in init.sqf. @hogscraper http://epochmod.com/forum/index.php?/topic/13654-proposed-ui-change/
[NOTE] It's recommend to convert to the new SteamID system if possible, new servers should not use DayZ_UseSteamID = false;
[NEW] Snap building (disabled by default), use DZE_snapBuilding = true; in your init.sqf to enable. @raymix
[CHANGED] An infection chance of -1 disables self-transfusion infection. 0 is always infected. (DZE_selfTransfuse_Values) @icomrade
[CHANGED] Removed weapons from Traders hands and made them stand with arms by their side. @SilvDev

View File

@@ -0,0 +1,374 @@
/*
Created by Raymix
*/
class SnapBuilding {
//Barriers whitelist
class Barrier {
snapTo[] = {
"Land_HBarrier5_DZ",
"Land_HBarrier3_DZ",
"Land_HBarrier1_DZ",
"Sandbag1_DZ",
"BagFenceRound_DZ",
"Fort_RazorWire"
};
};
//snap points
class Land_HBarrier5Preview: Barrier{ //fix for broken offsets in ghost
points[] = {
{0,0,0,"Pivot"},
{0,-0.75,0.1,"Back"},
{0,0.75,0.1,"Front"},
{-2.85,0,0.1,"Left"},
{2.85,0,0.1,"Right"},
{0,0,0.9,"Top"}
};
};
class Land_HBarrier5_DZ: Land_HBarrier5Preview {
points[] = {
{0,0,0,"Pivot"},
{0,-0.75,0,"Back"},
{0,0.75,0,"Front"},
{-2.85,0,0,"Left"},
{2.85,0,0,"Right"},
{0,0,0.9,"Top"}
};
};
class Land_HBarrier3ePreview: Barrier { //whitelist inheritance
points[] = {
{0,0,0,"Pivot"},
{0,-0.75,0,"Back"},
{0,0.75,0,"Front"},
{-1.7,0,0,"Left"},
{1.7,0,0,"Right"},
{0,0,0.9,"Top"}
};
};
class Land_HBarrier3_DZ: Land_HBarrier3ePreview{}; //point inheritance
class Land_HBarrier1Preview: Barrier {
points[] = {
{0,0,0,"Pivot"},
{0,-0.75,0,"Back"},
{0,0.75,0,"Front"},
{-0.6,0,0,"Left"},
{0.6,0,0,"Right"},
{0,0,0.9,"Top"}
};
};
class Land_HBarrier1_DZ: Land_HBarrier1Preview{};
class Fort_RazorWirePreview: Barrier {
points[] = {
{0,0,0,"Pivot"},
{0,-0.95,-0.3,"Back"},
{0,0.95,-0.3,"Front"},
{-4.1,0,-0.3,"Left"},
{4.1,0,-0.3,"Right"},
{0,0,1,"Top"}
};
};
class Fort_RazorWire: Fort_RazorWirePreview {};
class Sandbag1_DZ: Barrier {
points[] = {
{0,0,0,"Pivot"},
{-1.5,0,0,"Left"},
{1.5,0,0,"Right"},
{0,0,0.4,"Top"}
};
};
class BagFenceRound_DZ: Barrier {
points[] = {
{0,0,0,"Pivot"},
{-1.295,0.38,0,"Left"},
{1.295,0.38,0,"Right"},
{0,0,0.4,"Top"}
};
};
//Snapping whitelists for Floors, walls and stairs
class FloorsWallsStairs {
snapTo[] = {
"WoodFloorQuarter_DZ",
"WoodFloorHalf_DZ",
"WoodFloor_DZ",
"WoodStairs_DZ",
"WoodStairsSans_DZ",
"WoodSmallWallDoor_DZ",
"WoodSmallWall_DZ",
"WoodSmallWallWin_DZ",
"Land_DZE_WoodDoor",
"Land_DZE_WoodDoorLocked",
"WoodLargeWall_DZ",
"Land_DZE_LargeWoodDoor",
"WoodLargeWallWin_DZ",
"WoodLargeWallDoor_DZ",
"Land_DZE_GarageWoodDoor",
"Land_DZE_GarageWoodDoorLocked",
"Land_DZE_LargeWoodDoorLocked",
"WoodSmallWallThird_DZ",
"CinderWall_DZ",
"CinderWallDoorway_DZ",
"CinderWallDoorLocked_DZ",
"CinderWallDoor_DZ",
"CinderWallSmallDoorway_DZ",
"CinderWallDoorSmallLocked_DZ",
"CinderWallHalf_DZ",
"CinderWallDoorSmall_DZ",
"MetalFloor_DZ"
};
};
class WoodFloorQuarter_Preview_DZ: FloorsWallsStairs { //fix for broken offsets in ghost
points[] = {
{0,0,0,"Pivot"},
{0,-1.23,0,"Back"},
{0,1.23,0,"Front"},
{-1.24,0,0,"Left"},
{1.24,0,0,"Right"}
};
};
class WoodFloorQuarter_DZ: FloorsWallsStairs {
points[] = {
{0,0,0,"Pivot"},
{0,-1.23,0.137726,"Back"},
{0,1.23,0.137726,"Front"},
{-1.24,0,0.137726,"Left"},
{1.24,0,0.137726,"Right"}
};
};
class WoodFloorHalf_Preview_DZ: FloorsWallsStairs { //fix for broken offsets in ghost
points[] = {
{0,0,0,"Pivot"},
{0,-2.34,0,"Back"},
{0,2.34,0,"Front"},
{-1.25,0,0,"Left"},
{1.25,0,0,"Right"}
};
};
class WoodFloorHalf_DZ: FloorsWallsStairs{
points[] = {
{0,0,0,"Pivot"},
{0,-2.34,0.1407,"Back"},
{0,2.34,0.1407,"Front"},
{-1.25,0,0.1407,"Left"},
{1.25,0,0.1407,"Right"}
};
};
class WoodFloor_Preview_DZ: FloorsWallsStairs {
points[] = {
{0,0,0,"Pivot"},
{0,-2.33,0.130,"Back"},
{0,2.33,0.130,"Front"},
{-2.45,0,0.130,"Left"},
{2.45,0,0.130,"Right"}
};
};
class WoodFloor_DZ: WoodFloor_Preview_DZ{};
class Stairs_DZE: FloorsWallsStairs {
points[] = {
{0,0,0,"Pivot"},
{1.56055,-0.78,1.5,"Back"},
{1.56055,0.78,1.5,"Front"},
{1.73926,0.05,2.9,"Top"},
{-1.73926,0.05,0,"Bottom"}
};
};
class WoodStairs_Preview_DZ: Stairs_DZE {};
class WoodStairsSans_Preview_DZ: Stairs_DZE {};
class WoodStairsSans_DZ: Stairs_DZE {};
class WoodSmall_DZE: FloorsWallsStairs { // Small wood walls
points[] = {
{0,0,0,"Pivot"},
{-2.285, 0, 1.5,"Left"},
{2.285, 0, 1.5,"Right"},
{0, 0, 3,"Top"}
};
};
class WoodSmallWallDoor_Preview_DZ: WoodSmall_DZE {};
class WoodSmallWall_Preview_DZ: WoodSmall_DZE {};
class WoodSmallWallWin_Preview_DZ: WoodSmall_DZE {};
class WoodSmallWallDoor_DZ: WoodSmall_DZE {};
class WoodSmallWall_DZ: WoodSmall_DZE {};
class WoodSmallWallWin_DZ: WoodSmall_DZE {};
class Land_DZE_WoodDoor: WoodSmall_DZE {};
class Land_DZE_WoodDoorLocked: WoodSmall_DZE {};
class WoodLarge_DZE: FloorsWallsStairs { //Large wood walls
points[] = {
{0,0,0,"Pivot"},
{-2.45, 0, 1.5,"Left"},
{2.45, 0, 1.5,"Right"},
{0, 0, 3,"Top"}
};
};
class WoodLargeWall_Preview_DZ: WoodLarge_DZE {};
class WoodLargeWallWin_Preview_DZ: WoodLarge_DZE {};
class WoodLargeWallDoor_Preview_DZ: WoodLarge_DZE {};
class WoodSmallWallThird_Preview_DZ: WoodLarge_DZE {
points[] = {
{0,0,0,"Pivot"},
{-2.445, 0, 1.5,"Left"},
{2.445, 0, 1.5,"Right"},
{0, 0, 1.17,"Top"}
};
};
class WoodSmallWallThird_DZ: WoodSmallWallThird_Preview_DZ{};
class WoodLargeWall_DZ: WoodLarge_DZE {};
class Land_DZE_LargeWoodDoor: WoodLarge_DZE {};
class WoodLargeWallWin_DZ: WoodLarge_DZE {};
class WoodLargeWallDoor_DZ: WoodLarge_DZE {};
class Land_DZE_GarageWoodDoor: WoodLarge_DZE {};
class GarageWoodDoor_Preview_DZ: WoodLarge_DZE {};
class Land_DZE_GarageWoodDoorLocked: WoodLarge_DZE {};
class Land_DZE_LargeWoodDoorLocked: WoodLarge_DZE {};
class LargeWoodDoor_Preview_DZ: WoodLarge_DZE {};
class Cinder_DZE: FloorsWallsStairs { //All cinder walls and doors
points[] = {
{0,0,0,"Pivot"},
{-2.752, 0, 1.5,"Left"},
{2.752, 0, 1.5,"Right"},
{0, 0, 3.37042,"Top"}
};
};
class CinderWall_Preview_DZ: Cinder_DZE {};
class CinderWallDoorway_Preview_DZ: Cinder_DZE {};
class CinderWallSmallDoorway_Preview_DZ: Cinder_DZE {};
class CinderWallHalf_Preview_DZ: Cinder_DZE {
points[] = {
{0,0,0,"Pivot"},
{-2.752, 0, 1.5,"Left"},
{2.752, 0, 1.5,"Right"},
{0, 0, 1.5,"Top"}
};
};
class CinderWall_DZ: Cinder_DZE {};
class CinderWallDoorway_DZ: Cinder_DZE {};
class CinderWallDoorLocked_DZ: Cinder_DZE {};
class CinderWallDoor_DZ: Cinder_DZE {};
class CinderWallSmallDoorway_DZ: Cinder_DZE {};
class CinderWallDoorSmallLocked_DZ: Cinder_DZE {};
class CinderWallHalf_DZ: Cinder_DZE {
points[] = {
{0,0,0,"Pivot"},
{-2.752, 0, 1.5,"Left"},
{2.752, 0, 1.5,"Right"},
{0, 0, 1.5,"Top"}
};
};
class CinderWallDoorSmall_DZ: Cinder_DZE {};
class MetalFloor_Preview_DZ: FloorsWallsStairs { //fix for broken offsets in ghost
points[] = {
{0,0,0.011,"Pivot"},
{0, -2.64, 0.009,"Back"},
{0, 2.64, 0.009,"Front"},
{-2.64, 0, 0.009,"Left"},
{2.64, 0, 0.009,"Right"}
};
};
class MetalFloor_DZ: FloorsWallsStairs{
points[] = {
{0,0,0,"Pivot"},
{0, -2.64, 0.15,"Back"},
{0, 2.64, 0.15,"Front"},
{-2.64, 0, 0.15,"Left"},
{2.64, 0, 0.15,"Right"}
};
};
//Non essential Items that only snap to themselves, do whitelist inheritance if you want these to snap
class WoodCrate_DZ {
snapTo[] = {
"WoodCrate_DZ"
};
points[] = {
{0,0,0,"Pivot"},
{0,-0.47,0,"Back"},
{0,0.47,0,"Front"},
{-0.47,0,0,"Left"},
{0.47,0,0,"Right"},
{0,0,0.47,"Top"}
};
};
class MetalPanel_DZ {
snapTo[] = {
"MetalPanel_DZ"
};
points[] = {
{0,0,0,"Pivot"},
{-1.5,0,0,"Left"},
{1.5,0,0,"Right"}
};
};
class MetalGate_DZ {
snapTo[] = {
"MetalGate_DZ"
};
points[] = {
{0,0,0,"Pivot"},
{-4.1,0,0,"Left"}
};
};
class StickFence_DZ {
snapTo[] = {
"StickFence_DZ"
};
points[] = {
{0,0,0,"Pivot"},
{-2.95,0,0.3,"Left"},
{2.95,0,0.3,"Right"}
};
};
class Fence_corrugated_DZ {
snapTo[] = {
"Fence_corrugated_DZ"
};
points[] = {
{0,0,0,"Pivot"},
{-1.95,0,0.88,"Left"},
{1.95,0,0.88,"Right"}
};
};
class WoodRamp_Preview_DZ {
snapTo[] = {
"WoodRamp_DZ"
};
points[] = {
{0,0,0,"Pivot"},
{0.65,-1.7,1.2,"Back"},
{0.65,1.5,1.2,"Front"},
{3.34,-0.115,2.82,"Top"}
};
};
class WoodRamp_DZ: WoodRamp_Preview_DZ{};
class WoodLadder_Preview_DZ {
snapTo[] = {
"WoodLadder_DZ"
};
points[] = {
{0,0,0,"Pivot"},
{-0.4,0,1.725,"Left"},
{0.4,0,1.725,"Right"}
};
};
class WoodLadder_DZ: WoodLadder_Preview_DZ{};
};

View File

@@ -189,4 +189,9 @@ if (_dikCode == 0x39 || (_dikCode in actionKeys "User19")) then {
DZE_5 = true;
};
// F key
if ((_dikCode == 0x21 && (!_alt && !_ctrl)) || (_dikCode in actionKeys "User6")) then {
DZE_F = true;
};
_handled

View File

@@ -0,0 +1,617 @@
/*
DayZ Base Building
Made for DayZ Epoch please ask permission to use/edit/distrubute email vbawol@veteranbastards.com.
*/
private ["_helperColor","_objectHelper","_objectHelperDir","_objectHelperPos","_canDo",
"_location","_dir","_classname","_item","_hasrequireditem","_missing","_hastoolweapon","_cancel","_reason","_started","_finished","_animState","_isMedic","_dis","_sfx","_hasbuilditem","_tmpbuilt","_onLadder","_isWater","_require","_text","_offset","_IsNearPlot","_isOk","_location1","_location2","_counter","_limit","_proceed","_num_removed","_position","_object","_canBuildOnPlot","_friendlies","_nearestPole","_ownerID","_findNearestPoles","_findNearestPole","_distance","_classnametmp","_ghost","_isPole","_needText","_lockable","_zheightchanged","_rotate","_combination_1","_combination_2","_combination_3","_combination_4","_combination","_combination_1_Display","_combinationDisplay","_zheightdirection","_abort","_isNear","_need","_needNear","_vehicle","_inVehicle","_requireplot","_objHDiff","_isLandFireDZ","_isTankTrap"];
if(DZE_ActionInProgress) exitWith { cutText [(localize "str_epoch_player_40") , "PLAIN DOWN"]; };
DZE_ActionInProgress = true;
// disallow building if too many objects are found within 30m
if((count ((getPosATL player) nearObjects ["All",30])) >= DZE_BuildingLimit) exitWith {DZE_ActionInProgress = false; cutText [(localize "str_epoch_player_41"), "PLAIN DOWN"];};
_onLadder = (getNumber (configFile >> "CfgMovesMaleSdr" >> "States" >> (animationState player) >> "onLadder")) == 1;
_isWater = dayz_isSwimming;
_cancel = false;
_reason = "";
_canBuildOnPlot = false;
_vehicle = vehicle player;
_inVehicle = (_vehicle != player);
//snap
helperDetach = false;
_canDo = (!r_drag_sqf and !r_player_unconscious);
DZE_Q = false;
DZE_Z = false;
DZE_Q_alt = false;
DZE_Z_alt = false;
DZE_Q_ctrl = false;
DZE_Z_ctrl = false;
DZE_5 = false;
DZE_4 = false;
DZE_6 = false;
DZE_F = false;
DZE_cancelBuilding = false;
call gear_ui_init;
closeDialog 1;
if (_isWater) exitWith {DZE_ActionInProgress = false; cutText [localize "str_player_26", "PLAIN DOWN"];};
if (_inVehicle) exitWith {DZE_ActionInProgress = false; cutText [(localize "str_epoch_player_42"), "PLAIN DOWN"];};
if (_onLadder) exitWith {DZE_ActionInProgress = false; cutText [localize "str_player_21", "PLAIN DOWN"];};
if (player getVariable["combattimeout", 0] >= time) exitWith {DZE_ActionInProgress = false; cutText [(localize "str_epoch_player_43"), "PLAIN DOWN"];};
_item = _this;
// Need Near Requirements
_abort = false;
_reason = "";
_needNear = getArray (configFile >> "CfgMagazines" >> _item >> "ItemActions" >> "Build" >> "neednearby");
{
switch(_x) do{
case "fire":
{
_distance = 3;
_isNear = {inflamed _x} count (getPosATL player nearObjects _distance);
if(_isNear == 0) then {
_abort = true;
_reason = "fire";
};
};
case "workshop":
{
_distance = 3;
_isNear = count (nearestObjects [player, ["Wooden_shed_DZ","WoodShack_DZ","WorkBench_DZ"], _distance]);
if(_isNear == 0) then {
_abort = true;
_reason = "workshop";
};
};
case "fueltank":
{
_distance = 30;
_isNear = count (nearestObjects [player, dayz_fuelsources, _distance]);
if(_isNear == 0) then {
_abort = true;
_reason = "fuel tank";
};
};
};
} forEach _needNear;
if(_abort) exitWith {
cutText [format[(localize "str_epoch_player_135"),_reason,_distance], "PLAIN DOWN"];
DZE_ActionInProgress = false;
};
_classname = getText (configFile >> "CfgMagazines" >> _item >> "ItemActions" >> "Build" >> "create");
_classnametmp = _classname;
_require = getArray (configFile >> "cfgMagazines" >> _this >> "ItemActions" >> "Build" >> "require");
_text = getText (configFile >> "CfgVehicles" >> _classname >> "displayName");
_ghost = getText (configFile >> "CfgVehicles" >> _classname >> "ghostpreview");
_lockable = 0;
if(isNumber (configFile >> "CfgVehicles" >> _classname >> "lockable")) then {
_lockable = getNumber(configFile >> "CfgVehicles" >> _classname >> "lockable");
};
_requireplot = DZE_requireplot;
if(isNumber (configFile >> "CfgVehicles" >> _classname >> "requireplot")) then {
_requireplot = getNumber(configFile >> "CfgVehicles" >> _classname >> "requireplot");
};
_isAllowedUnderGround = 1;
if(isNumber (configFile >> "CfgVehicles" >> _classname >> "nounderground")) then {
_isAllowedUnderGround = getNumber(configFile >> "CfgVehicles" >> _classname >> "nounderground");
};
_offset = getArray (configFile >> "CfgVehicles" >> _classname >> "offset");
if((count _offset) <= 0) then {
_offset = [0,1.5,0];
};
_isPole = (_classname == "Plastic_Pole_EP1_DZ");
_isLandFireDZ = (_classname == "Land_Fire_DZ");
_distance = DZE_PlotPole select 0;
_needText = localize "str_epoch_player_246";
if(_isPole) then {
_distance = DZE_PlotPole select 1;
};
// check for near plot
_findNearestPoles = nearestObjects [(vehicle player), ["Plastic_Pole_EP1_DZ"], _distance];
_findNearestPole = [];
{
if (alive _x) then {
_findNearestPole set [(count _findNearestPole),_x];
};
} count _findNearestPoles;
_IsNearPlot = count (_findNearestPole);
// If item is plot pole && another one exists within 45m
if(_isPole && _IsNearPlot > 0) exitWith { DZE_ActionInProgress = false; cutText [(localize "str_epoch_player_44") , "PLAIN DOWN"]; };
if(_IsNearPlot == 0) then {
// Allow building of plot
if(_requireplot == 0 || _isLandFireDZ) then {
_canBuildOnPlot = true;
};
} else {
// Since there are plots nearby we check for ownership && then for friend status
// check nearby plots ownership && then for friend status
_nearestPole = _findNearestPole select 0;
// Find owner
_ownerID = _nearestPole getVariable ["CharacterID","0"];
// diag_log format["DEBUG BUILDING: %1 = %2", dayz_characterID, _ownerID];
// check if friendly to owner
if(dayz_characterID == _ownerID) then { //Keep ownership
// owner can build anything within his plot except other plots
if(!_isPole) then {
_canBuildOnPlot = true;
};
} else {
// disallow building plot
if(!_isPole) then {
_friendlies = player getVariable ["friendlyTo",[]];
// check if friendly to owner
if(_ownerID in _friendlies) then {
_canBuildOnPlot = true;
};
};
};
};
// _message
if(!_canBuildOnPlot) exitWith { DZE_ActionInProgress = false; cutText [format[(localize "STR_EPOCH_PLAYER_135"),_needText,_distance] , "PLAIN DOWN"]; };
_missing = "";
_hasrequireditem = true;
{
_hastoolweapon = _x in weapons player;
if(!_hastoolweapon) exitWith { _hasrequireditem = false; _missing = getText (configFile >> "cfgWeapons" >> _x >> "displayName"); };
} count _require;
_hasbuilditem = _this in magazines player;
if (!_hasbuilditem) exitWith {DZE_ActionInProgress = false; cutText [format[(localize "str_player_31"),_text,"build"] , "PLAIN DOWN"]; };
if (!_hasrequireditem) exitWith {DZE_ActionInProgress = false; cutText [format[(localize "str_epoch_player_137"),_missing] , "PLAIN DOWN"]; };
if (_hasrequireditem) then {
_location = [0,0,0];
_isOk = true;
// get inital players position
_location1 = getPosATL player;
_dir = getDir player;
// if ghost preview available use that instead
if (_ghost != "") then {
_classname = _ghost;
};
_object = createVehicle [_classname, _location, [], 0, "CAN_COLLIDE"];
//Build gizmo
_objectHelper = "Sign_sphere10cm_EP1" createVehicle _location;
_helperColor = "#(argb,8,8,3)color(0,0,0,0,ca)";
_objectHelper setobjecttexture [0,_helperColor];
_objectHelper attachTo [player,_offset];
_object attachTo [_objectHelper,[0,0,0]];
_position = getPosATL _objectHelper;
//cutText [(localize "str_epoch_player_45"), "PLAIN DOWN"];
_objHDiff = 0;
if (isClass (configFile >> "SnapBuilding" >> _classname)) then {
["","","",["Init",_object,_classname,_objectHelper]] spawn snap_build;
};
while {_isOk} do {
_zheightchanged = false;
_zheightdirection = "";
_rotate = false;
if (DZE_Q) then {
DZE_Q = false;
_zheightdirection = "up";
_zheightchanged = true;
};
if (DZE_Z) then {
DZE_Z = false;
_zheightdirection = "down";
_zheightchanged = true;
};
if (DZE_Q_alt) then {
DZE_Q_alt = false;
_zheightdirection = "up_alt";
_zheightchanged = true;
};
if (DZE_Z_alt) then {
DZE_Z_alt = false;
_zheightdirection = "down_alt";
_zheightchanged = true;
};
if (DZE_Q_ctrl) then {
DZE_Q_ctrl = false;
_zheightdirection = "up_ctrl";
_zheightchanged = true;
};
if (DZE_Z_ctrl) then {
DZE_Z_ctrl = false;
_zheightdirection = "down_ctrl";
_zheightchanged = true;
};
if (DZE_4) then {
_rotate = true;
DZE_4 = false;
if (helperDetach) then {
_dir = -45;
} else {
_dir = 180;
};
};
if (DZE_6) then {
_rotate = true;
DZE_6 = false;
if (helperDetach) then {
_dir = 45;
} else {
_dir = 0;
};
};
if (DZE_F and _canDo) then {
if (helperDetach) then {
_objectHelperDir = getDir _objectHelper;
_objectHelper attachTo [player];
_objectHelper setDir _objectHelperDir-(getDir player);
helperDetach = false;
} else {
_objectHelperPos = getPosATL _objectHelper;
detach _objectHelper;
_objectHelper setPosATL _objectHelperPos;
_objectHelperDir = getDir _objectHelper;
_objectHelper setVelocity [0,0,0]; //fix sliding glitch
helperDetach = true;
};
DZE_F = false;
};
if(_rotate) then {
if (helperDetach) then {
_objectHelperDir = getDir _objectHelper;
_objectHelperPos = getPosATL _objectHelper;
_objectHelper setDir _objectHelperDir+_dir;
_objectHelper setPosATL _objectHelperPos;
} else {
_objectHelper setDir _dir;
_objectHelper setPosATL _position;
//diag_log format["DEBUG Rotate BUILDING POS: %1", _position];
};
};
if(_zheightchanged) then {
if (!helperDetach) then {
detach _objectHelper;
};
_position = getPosATL _objectHelper;
if(_zheightdirection == "up") then {
_position set [2,((_position select 2)+0.1)];
_objHDiff = _objHDiff + 0.1;
};
if(_zheightdirection == "down") then {
_position set [2,((_position select 2)-0.1)];
_objHDiff = _objHDiff - 0.1;
};
if(_zheightdirection == "up_alt") then {
_position set [2,((_position select 2)+1)];
_objHDiff = _objHDiff + 1;
};
if(_zheightdirection == "down_alt") then {
_position set [2,((_position select 2)-1)];
_objHDiff = _objHDiff - 1;
};
if(_zheightdirection == "up_ctrl") then {
_position set [2,((_position select 2)+0.01)];
_objHDiff = _objHDiff + 0.01;
};
if(_zheightdirection == "down_ctrl") then {
_position set [2,((_position select 2)-0.01)];
_objHDiff = _objHDiff - 0.01;
};
_objectHelper setDir (getDir _objectHelper);
if((_isAllowedUnderGround == 0) && ((_position select 2) < 0)) then {
_position set [2,0];
};
_objectHelper setPosATL _position;
//diag_log format["DEBUG Change BUILDING POS: %1", _position];
if (!helperDetach) then {
_objectHelper attachTo [player];
};
};
sleep 0.5;
_location2 = getPosATL player;
if(DZE_5) exitWith {
_isOk = false;
detach _object;
_dir = getDir _object;
_position = getPosATL _object;
//diag_log format["DEBUG BUILDING POS: %1", _position];
deleteVehicle _object;
detach _objectHelper;
deleteVehicle _objectHelper;
};
if(_location1 distance _location2 > 10) exitWith {
_isOk = false;
_cancel = true;
_reason = "You've moved to far away from where you started building (within 10 meters)";
detach _object;
deleteVehicle _object;
detach _objectHelper;
deleteVehicle _objectHelper;
};
if(abs(_objHDiff) > 10) exitWith {
_isOk = false;
_cancel = true;
_reason = "Cannot move up or down more than 10 meters";
detach _object;
deleteVehicle _object;
detach _objectHelper;
deleteVehicle _objectHelper;
};
if (player getVariable["combattimeout", 0] >= time) exitWith {
_isOk = false;
_cancel = true;
_reason = (localize "str_epoch_player_43");
detach _object;
deleteVehicle _object;
detach _objectHelper;
deleteVehicle _objectHelper;
};
if (DZE_cancelBuilding) exitWith {
_isOk = false;
_cancel = true;
_reason = "Cancelled building.";
detach _object;
deleteVehicle _object;
detach _objectHelper;
deleteVehicle _objectHelper;
};
};
//No building on roads unless toggled
if (!DZE_BuildOnRoads) then {
if (isOnRoad _position) then { _cancel = true; _reason = "Cannot build on a road."; };
};
// No building in trader zones
if(!canbuild) then { _cancel = true; _reason = "Cannot build in a city."; };
if(!_cancel) then {
_classname = _classnametmp;
// Start Build
_tmpbuilt = createVehicle [_classname, _location, [], 0, "CAN_COLLIDE"];
_tmpbuilt setdir _dir;
// Get position based on object
_location = _position;
if((_isAllowedUnderGround == 0) && ((_location select 2) < 0)) then {
_location set [2,0];
};
_tmpbuilt setPosATL _location;
cutText [format[(localize "str_epoch_player_138"),_text], "PLAIN DOWN"];
_limit = 3;
if (DZE_StaticConstructionCount > 0) then {
_limit = DZE_StaticConstructionCount;
}
else {
if (isNumber (configFile >> "CfgVehicles" >> _classname >> "constructioncount")) then {
_limit = getNumber(configFile >> "CfgVehicles" >> _classname >> "constructioncount");
};
};
_isOk = true;
_proceed = false;
_counter = 0;
while {_isOk} do {
[10,10] call dayz_HungerThirst;
player playActionNow "Medic";
_dis=20;
_sfx = "repair";
[player,_sfx,0,false,_dis] call dayz_zombieSpeak;
[player,_dis,true,(getPosATL player)] spawn player_alertZombies;
r_interrupt = false;
r_doLoop = true;
_started = false;
_finished = false;
while {r_doLoop} do {
_animState = animationState player;
_isMedic = ["medic",_animState] call fnc_inString;
if (_isMedic) then {
_started = true;
};
if (_started && !_isMedic) then {
r_doLoop = false;
_finished = true;
};
if (r_interrupt || (player getVariable["combattimeout", 0] >= time)) then {
r_doLoop = false;
};
if (DZE_cancelBuilding) exitWith {
r_doLoop = false;
};
sleep 0.1;
};
r_doLoop = false;
if(!_finished) exitWith {
_isOk = false;
_proceed = false;
};
if(_finished) then {
_counter = _counter + 1;
};
cutText [format[(localize "str_epoch_player_139"),_text, _counter,_limit], "PLAIN DOWN"];
if(_counter == _limit) exitWith {
_isOk = false;
_proceed = true;
};
};
if (_proceed) then {
_num_removed = ([player,_item] call BIS_fnc_invRemove);
if(_num_removed == 1) then {
cutText [format[localize "str_build_01",_text], "PLAIN DOWN"];
if (_isPole) then {
[] spawn player_plotPreview;
};
_tmpbuilt setVariable ["OEMPos",_location,true];
if(_lockable > 1) then {
_combinationDisplay = "";
switch (_lockable) do {
case 2: { // 2 lockbox
_combination_1 = (floor(random 3)) + 100; // 100=red,101=green,102=blue
_combination_2 = floor(random 10);
_combination_3 = floor(random 10);
_combination = format["%1%2%3",_combination_1,_combination_2,_combination_3];
dayz_combination = _combination;
if (_combination_1 == 100) then {
_combination_1_Display = "Red";
};
if (_combination_1 == 101) then {
_combination_1_Display = "Green";
};
if (_combination_1 == 102) then {
_combination_1_Display = "Blue";
};
_combinationDisplay = format["%1%2%3",_combination_1_Display,_combination_2,_combination_3];
};
case 3: { // 3 combolock
_combination_1 = floor(random 10);
_combination_2 = floor(random 10);
_combination_3 = floor(random 10);
_combination = format["%1%2%3",_combination_1,_combination_2,_combination_3];
dayz_combination = _combination;
_combinationDisplay = _combination;
};
case 4: { // 4 safe
_combination_1 = floor(random 10);
_combination_2 = floor(random 10);
_combination_3 = floor(random 10);
_combination_4 = floor(random 10);
_combination = format["%1%2%3%4",_combination_1,_combination_2,_combination_3,_combination_4];
dayz_combination = _combination;
_combinationDisplay = _combination;
};
};
_tmpbuilt setVariable ["CharacterID",_combination,true];
PVDZE_obj_Publish = [_combination,_tmpbuilt,[_dir,_location],_classname];
publicVariableServer "PVDZE_obj_Publish";
cutText [format[(localize "str_epoch_player_140"),_combinationDisplay,_text], "PLAIN DOWN", 5];
} else {
_tmpbuilt setVariable ["CharacterID",dayz_characterID,true];
// fire?
if(_tmpbuilt isKindOf "Land_Fire_DZ") then {
_tmpbuilt spawn player_fireMonitor;
} else {
PVDZE_obj_Publish = [dayz_characterID,_tmpbuilt,[_dir,_location],_classname];
publicVariableServer "PVDZE_obj_Publish";
};
};
} else {
deleteVehicle _tmpbuilt;
cutText [(localize "str_epoch_player_46") , "PLAIN DOWN"];
};
} else {
r_interrupt = false;
if (vehicle player == player) then {
[objNull, player, rSwitchMove,""] call RE;
player playActionNow "stop";
};
deleteVehicle _tmpbuilt;
cutText [(localize "str_epoch_player_46") , "PLAIN DOWN"];
};
} else {
cutText [format[(localize "str_epoch_player_47"),_text,_reason], "PLAIN DOWN"];
};
};
DZE_ActionInProgress = false;

View File

@@ -0,0 +1,293 @@
/*-----------------------------------*/
// by Raymix //
// July 10 2014 //
/*--------------------------------*/
private ["_object","_objectSnapGizmo","_objColorActive","_objColorInactive","_classname","_whitelist","_points","_cfg","_cnt","_pos","_findWhitelisted","_nearbyObject","_posNearby","_selectedAction","_newPos","_pointsNearby","_onWater"];
//Args
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;
//Snap config file
_cfg = (configFile >> "SnapBuilding" >> _classname);
_whitelist = getArray (_cfg >> "snapTo");
_points = getArray (_cfg >> "points");
//colors
_objColorActive = "#(argb,8,8,3)color(0,0.92,0.06,1,ca)";
_objColorInactive = "#(argb,8,8,3)color(0.04,0.84,0.92,0.3,ca)";
fnc_snapActionCleanup = {
private ["_s1","_s2","_s3","_cnt"];
_s1 = _this select 0;
_s2 = _this select 1;
_s3 = _this select 2;
player removeAction s_player_toggleSnap;
player removeAction s_player_toggleSnapSelect;
{player removeAction _x;} count s_player_toggleSnapSelectPoint;
if (_s1 > 0) then {
s_player_toggleSnap = player addaction [format[("<t color=""#ffffff"">" + ("Snap: %1") +"</t>"),snapActionState],"\z\addons\dayz_code\actions\snap_build.sqf",[snapActionState,_object,_classname,_objectHelper],6,false,true];
};
if (_s2 > 0) then {
s_player_toggleSnapSelect = player addaction [format[("<t color=""#ffffff"">" + ("Snap Point: %1") +"</t>"),snapActionStateSelect],"\z\addons\dayz_code\actions\snap_build.sqf",[snapActionStateSelect,_object,_classname,_objectHelper],5,false,true];
};
if (_s3 > 0) then {
s_player_toggleSnapSelectPoint=[];
_cnt = 0;
{snapActions = player addaction [format[("<t color=""#ffffff"">" + ("%1)Select: %2") +"</t>"),_cnt,_x select 3],"\z\addons\dayz_code\actions\snap_build.sqf",["Selected",_object,_classname,_objectHelper,_cnt],4,false,false];
s_player_toggleSnapSelectPoint set [count s_player_toggleSnapSelectPoint,snapActions];
_cnt = _cnt+1;
}count _points;
};
};
fnc_initSnapPoints = {
snapGizmos = [];
{
_objectSnapGizmo = "Sign_sphere10cm_EP1" createVehicleLocal [0,0,0];
_objectSnapGizmo setobjecttexture [0,_objColorInactive];
_objectSnapGizmo attachTo [_object,[_x select 0,_x select 1,_x select 2]];
snapGizmos set [count snapGizmos,_objectSnapGizmo];
} count _points;
};
fnc_initSnapPointsNearby = {
_pos = getPosATL _object;
_findWhitelisted = []; _pointsNearby = [];
_findWhitelisted = nearestObjects [_pos,_whitelist,15]-[_object];
snapGizmosNearby = [];
{
_nearbyObject = _x;
_pointsNearby = getArray (configFile >> "SnapBuilding" >> (typeOf _x) >> "points");
{
_onWater = surfaceIsWater position _nearbyObject;
_objectSnapGizmo = "Sign_sphere10cm_EP1" createVehicleLocal [0,0,0];
_objectSnapGizmo setobjecttexture [0,_objColorInactive];
_posNearby = _nearbyObject modelToWorld [_x select 0,_x select 1,_x select 2];
if (_onWater) then {
_objectSnapGizmo setPosASL [(_posNearby) select 0,(_posNearby) select 1,(getPosASL _nearbyObject select 2) + (_x select 2)];
} else {
_objectSnapGizmo setPosATL _posNearby;
};
_objectSnapGizmo setDir (getDir _nearbyObject);
snapGizmosNearby set [count snapGizmosNearby,_objectSnapGizmo];
} count _pointsNearby;
} forEach _findWhitelisted;
};
fnc_initSnapPointsCleanup = {
{detach _x;deleteVehicle _x;}count snapGizmos;snapGizmos=[];
{deleteVehicle _x;}count snapGizmosNearby;snapGizmosNearby=[];
snapActionState = "OFF";
};
fnc_snapDistanceCheck = {
while {snapActionState != "OFF"} do {
private ["_distClosestPointFound","_distCheck","_distClosest","_distClosestPoint","_testXPos","_testXDir","_distClosestPointFoundPos","_distClosestPointFoundDir","_distClosestAttached","_distCheckAttached","_distClosestAttachedFoundPos"];
_distClosestPointFound = objNull; _distCheck = 0; _distClosest = 10; _distClosestPoint = objNull; _testXPos = []; _distClosestPointFoundPos =[]; _distClosestPointFoundDir = 0;
{
if (_x !=_distClosestPointFound) then {_x setobjecttexture [0,_objColorInactive];};
_onWater = surfaceIsWater position _x;
if (_onWater) then {
_testXPos = [(getPosASL _x select 0),(getPosASL _x select 1),(getPosASL _x select 2)];
} else {
_testXPos = [(getPosATL _x select 0),(getPosATL _x select 1),(getPosATL _x select 2)];
};
_distCheck = _objectHelper distance _testXPos;
_distClosestPoint = _x;
if (_distCheck < _distClosest) then {
_distClosest = _distCheck;
_distClosestPointFound setobjecttexture [0,_objColorInactive];
_distClosestPointFound = _x;
_distClosestPointFound setobjecttexture [0,_objColorActive];
};
} count snapGizmosNearby;
if (!isNull _distClosestPointFound) then {
if (snapActionStateSelect == "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;
waitUntil {sleep 0.1; !helperDetach};
};
} else {
_distClosestAttached = objNull; _distCheckAttached = 0; _distClosest = 10; _distClosestAttachedFoundPos = [];
{
if (_x !=_distClosestAttached) then {_x setobjecttexture [0,_objColorInactive];};
_onWater = surfaceIsWater position _x;
if (_onWater) then {
_testXPos = [(getPosASL _x select 0),(getPosASL _x select 1),(getPosASL _x select 2)];
} else {
_testXPos = [(getPosATL _x select 0),(getPosATL _x select 1),(getPosATL _x select 2)];
};
_distCheckAttached = _distClosestPointFound distance _testXPos;
_distClosestPoint = _x;
if (_distCheckAttached < _distClosest) then {
_distClosest = _distCheckAttached;
_distClosestAttached setobjecttexture [0,_objColorInactive];
_distClosestAttached = _x;
_distClosestAttached setobjecttexture [0,_objColorActive];
};
} count snapGizmos;
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;
waitUntil {sleep 0.1; !helperDetach};
};
};
};
sleep 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
800 cutRsc ["Default", "PLAIN"];
sleep 0.1;
//Init Tutorial text
if (_bldTxtEnable) then {
_bldTxtStringTitle = format ["<t %1%2%3%4%6>Epoch<t %5%7> Snap Building</t></t><br />",_bldTxtClrW,_bldTxtSz,_bldTxtShdw,_bldTxtAlgnL,_bldTxtClrO,_bldTxtUndrln,_bldTxtBold];
_bldTxtStringSD = format["<t %1%4%5%6>[Snap]<t %2> Disabled:</t> <t %3>use action menu to enable.</t></t><br /><br />",_bldTxtClrO,_bldTxtClrR,_bldTxtClrW,_bldTxtSzT,_bldTxtShdw,_bldTxtAlgnL];
_bldTxtStringSE = format["<t %1%4%5%6>[Snap]<t %2> Enabled:</t> <t %3>use action menu to disable.</t></t><br /><br />",_bldTxtClrO,_bldTxtClrG,_bldTxtClrW,_bldTxtSzT,_bldTxtShdw,_bldTxtAlgnL];
_bldTxtStringSA = format["<t %1%3%4%5>[Auto]<t %2>: Automatic snap point detection.</t></t><br /><br />",_bldTxtClrO,_bldTxtClrW,_bldTxtSzT,_bldTxtShdw,_bldTxtAlgnL];
_bldTxtStringSM = format["<t %1%3%4%5>[Manual]<t %2>: Select your preferred snap point.</t></t><br /><br />",_bldTxtClrO,_bldTxtClrW,_bldTxtSzT,_bldTxtShdw,_bldTxtAlgnL];
_bldTxtStringPG = format["<t %1%3%4%5>[PgUP / PgDOWN]<t %2>: Adjust height of object by 10cm</t></t><br />",_bldTxtClrO,_bldTxtClrW,_bldTxtSzT,_bldTxtShdw,_bldTxtAlgnL];
_bldTxtStringAPG = format["<t %1%3%4%5>[Alt]+[PgUP / PgDOWN]<t %2>: Adjust height of object by 1m</t></t><br />",_bldTxtClrO,_bldTxtClrW,_bldTxtSzT,_bldTxtShdw,_bldTxtAlgnL];
_bldTxtStringCPG = format["<t %1%3%4%5>[Ctrl]+[PgUP / PgDOWN]<t %2>: Adjust height of object by 1cm</t></t><br />",_bldTxtClrO,_bldTxtClrW,_bldTxtSzT,_bldTxtShdw,_bldTxtAlgnL];
_bldTxtStringQE = format["<t %1%3%4%5>[Q / E]<t %2>: Rotate object 180 degrees while holding.</t></t><br />",_bldTxtClrO,_bldTxtClrW,_bldTxtSzT,_bldTxtShdw,_bldTxtAlgnL];
_bldTxtStringQEF = format["<t %1%3%4%5>[Q / E]<t %2>: Rotate object 45 degrees while dropped or snapped.</t></t><br /><br />",_bldTxtClrO,_bldTxtClrW,_bldTxtSzT,_bldTxtShdw,_bldTxtAlgnL];
_bldTxtStringFD = format["<t %1%3%4%5>[F]<t %2>: Drop / Pick up object.</t></t><br />",_bldTxtClrO,_bldTxtClrW,_bldTxtSzT,_bldTxtShdw,_bldTxtAlgnL];
_bldTxtStringFS = format["<t %1%3%4%5>[F]<t %2>: Snap /Pick up object.</t></t><br />",_bldTxtClrO,_bldTxtClrW,_bldTxtSzT,_bldTxtShdw,_bldTxtAlgnL];
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
800 //number - layer ID
] spawn bis_fnc_dynamicText;
};
};
};
switch (snapActionState) do {
case "Init": {
["init",true] call fnc_initSnapTutorial;
snapActionState = "OFF";
[1,0,0] call fnc_snapActionCleanup;
[] spawn {
while {true} do {
if(!DZE_ActionInProgress) exitWith {call fnc_initSnapPointsCleanup;[0,0,0] call fnc_snapActionCleanup; ["",false] call fnc_initSnapTutorial; snapActionState = "OFF";};
sleep 2;
};
};
};
case "OFF": {
["OnAuto",true] call fnc_initSnapTutorial;
snapActionState = "ON"; snapActionStateSelect = "Auto";
[1,1,0] call fnc_snapActionCleanup;
call fnc_initSnapPoints;
call fnc_initSnapPointsNearby;
sleep 0.25;
call fnc_snapDistanceCheck;
};
case "ON": {
["init",true] call fnc_initSnapTutorial;
snapActionState = "OFF";
[1,0,0] call fnc_snapActionCleanup;
call fnc_initSnapPointsCleanup;
};
case "Auto": {
["manual",true] call fnc_initSnapTutorial;
snapActionState = "ON";snapActionStateSelect = "Manual";
[1,1,1] call fnc_snapActionCleanup;
};
case "Manual": {
["OnAuto",true] call fnc_initSnapTutorial;
snapActionState = "ON";snapActionStateSelect = "Auto";
[1,1,0] call fnc_snapActionCleanup;
};
case "Selected": { _cnt = 0; _newPos = [];
{
_x setobjecttexture [0,_objColorInactive];
if (_cnt == _selectedAction) then {
_newPos = [(getPosATL _x select 0),(getPosATL _x select 1),(getPosATL _x select 2)];
detach _object;
detach _objectHelper;
_objectHelper setPosATL _newPos;
_object attachTo [_objectHelper];
_x setobjecttexture [0,_objColorActive];
if (!helperDetach) then {_objectHelper attachTo [player];};
};
_cnt = _cnt+1;
}count snapGizmos;
};
};

View File

@@ -97,5 +97,6 @@ class CfgAddons
#include "Configs\CfgAmmo.hpp"
#include "Configs\CfgLoot\CfgBuildingLoot.hpp"
#include "Configs\CfgArma.hpp"
#include "Configs\CfgExtra\snappoints.hpp"
#include "external\R3F_Realism\R3F_Weight\R3F_CfgWeight.h"

View File

@@ -107,6 +107,12 @@ if (!isDedicated) then {
player_antiWall = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_antiWall.sqf";
player_deathBoard = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\list_playerDeathsAlt.sqf";
//Snap building - disabled by default, not sure about your stance towards this mod yet, feel free to edit
if (DZE_snapBuilding) then {
player_build = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\player_build2.sqf";
snap_build = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\snap_build.sqf";
};
player_plotPreview = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\object_showPlotRadius.sqf";
player_upgradeVehicle = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_upgradeVehicle.sqf";