Jump to content

[1.4.1] Snap Building PRO


Recommended Posts

No, 1.4 had major update that replaces a lot of code to allow for water bases. I'll look into the issue as soon as I have time to do so. Currently started a full time internship in IT, so might be a while.

Ok thanks, in the meantime if anyone else has a compatible player_build.sqf that works with 1.4 and rimblocks plot for life then sharing would be greatly appreciated :)

Link to comment
Share on other sites

build snap 1.4 and plot pole for life player_build.sqf:

 

/*


DayZ Base Building
Made for DayZ Epoch please ask permission to use/edit/distrubute email [email protected].
*/
private ["_helperColor","_objectHelper","_objectHelperDir","_objectHelperPos","_canDo", "_pos", "_cnt",
"_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;

_onLadder = (getNumber (configFile >> "CfgMovesMaleSdr" >> "States" >> (animationState player) >> "onLadder")) == 1;
_isWater = dayz_isSwimming;
_cancel = false;
_reason = "";
_canBuildOnPlot = false;

_vehicle = vehicle player;
_inVehicle = (_vehicle != player);
//snap vars -- temporary fix for errors so variables.sqf can be skipped
if (isNil "snapProVariables") then {
if (isNil "DZE_snapExtraRange") then {
DZE_snapExtraRange = 0;
};
if (isNil "DZE_checkNearbyRadius") then {
DZE_checkNearbyRadius = 60;
};
s_player_toggleSnap = -1;
s_player_toggleSnapSelect = -1;
s_player_toggleSnapSelectPoint=[];
snapActions = -1;
snapGizmos = [];
snapGizmosNearby = [];
snapProVariables = true; // will skip this statement from now on.
};
// snap vars

// disallow building if too many objects are found within (30m by default) add DZE_checkNearbyRadius = 30; to your init.sqf to change
_pos = [player] call FNC_GetPos;
_cnt = count (_pos nearObjects ["All",DZE_checkNearbyRadius]);
if (_cnt >= DZE_BuildingLimit) exitWith { //end script if too many objects nearby
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);

helperDetach = false;
_canDo = (!r_drag_sqf and !r_player_unconscious);
_playerUID = getPlayerUID player;
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 (_pos nearObjects _distance);
if(_isNear == 0) then {
_abort = true;
_reason = "fire";
};
};
case "workshop":
{
_distance = 3;
_isNear = count (nearestObjects [_pos, ["Wooden_shed_DZ","WoodShack_DZ","WorkBench_DZ"], _distance]);
if(_isNear == 0) then {
_abort = true;
_reason = "workshop";
};
};
case "fueltank":
{
_distance = 30;
_isNear = count (nearestObjects [_pos, 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 and 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 ["ownerPUID","0"];

//diag_log format["Player_build start: [PlayerUID = %1] [OwnerID = %2]", _playerUID, _ownerID];

// check if friendly to owner
if(_playerUID == _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 = [player] call FNC_GetPos;
_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 = [_objectHelper] call FNC_GetPos;

_objHDiff = 0;

if (isClass (missionConfigFile >> "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;
_dir = -45;
};
if (DZE_6) then {
_rotate = true;
DZE_6 = false;
_dir = 45;
};

if (DZE_F and _canDo) then {
if (helperDetach) then {
_objectHelperDir = getDir _objectHelper;
_objectHelper attachTo [player];
_objectHelper setDir _objectHelperDir-(getDir player);
helperDetach = false;
} else {
_objectHelperDir = getDir _objectHelper;
detach _objectHelper;
[_objectHelper] call FNC_GetSetPos;
_objectHelper setVelocity [0,0,0]; //fix sliding glitch
helperDetach = true;
};
DZE_F = false;
};

if(_rotate) then {
if (helperDetach) then {
_objectHelperDir = getDir _objectHelper;
_objectHelper setDir _objectHelperDir+_dir;
[_objectHelper] call FNC_GetSetPos;
} else {
detach _objectHelper;
_objectHelperDir = getDir _objectHelper;
_objectHelper setDir _objectHelperDir+_dir;
[_objectHelper] call FNC_GetSetPos;
_objectHelperDir = getDir _objectHelper;
_objectHelper attachTo [player];
_objectHelper setDir _objectHelperDir-(getDir player);
};

};

if(_zheightchanged) then {
if (!helperDetach) then {
detach _objectHelper;
_objectHelperDir = getDir _objectHelper;
};

_position = [_objectHelper] call FNC_GetPos;

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;
};

if((_isAllowedUnderGround == 0) && ((_position select 2) < 0)) then {
_position set [2,0];
};

if (surfaceIsWater _position) then {
_objectHelper setPosASL _position;
} else {
_objectHelper setPosATL _position;
};

if (!helperDetach) then {
_objectHelper attachTo [player];
_objectHelper setDir _objectHelperDir-(getDir player);
};
};

uisleep 0.5;

_location2 = [player] call FNC_GetPos;
_objectHelperPos = [_objectHelper] call FNC_GetPos;

if(DZE_5) exitWith {
_isOk = false;
_position = [_object] call FNC_GetPos;
detach _object;
_dir = getDir _object;
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(_location1 distance _objectHelperPos > 10) exitWith {
_isOk = false;
_cancel = true;
_reason = "Object is placed 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];
};

if (surfaceIsWater _location) then {
_tmpbuilt setPosASL _location;
_location = ASLtoATL _location;
} else {
_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;
};
uisleep 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];
_tmpbuilt setVariable ["ownerPUID",_playerUID,true];


PVDZE_obj_Publish = [_combination,_tmpbuilt,[_dir,_location,_playerUID],_classname];
publicVariableServer "PVDZE_obj_Publish";

cutText [format[(localize "str_epoch_player_140"),_combinationDisplay,_text], "PLAIN DOWN", 5];


} else {
_tmpbuilt setVariable ["CharacterID",dayz_characterID,true];
_tmpbuilt setVariable ["ownerPUID",_playerUID,true];
// fire?
if(_tmpbuilt isKindOf "Land_Fire_DZ") then {
_tmpbuilt spawn player_fireMonitor;
} else {
PVDZE_obj_Publish = [dayz_characterID,_tmpbuilt,[_dir,_location,_playerUID],_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;

Link to comment
Share on other sites

build snap 1.4 and plot pole for life player_build.sqf:

 

/*

DayZ Base Building

Made for DayZ Epoch please ask permission to use/edit/distrubute email [email protected].

*/

private ["_helperColor","_objectHelper","_objectHelperDir","_objectHelperPos","_canDo", "_pos", "_cnt",

"_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;

_onLadder = (getNumber (configFile >> "CfgMovesMaleSdr" >> "States" >> (animationState player) >> "onLadder")) == 1;

_isWater = dayz_isSwimming;

_cancel = false;

_reason = "";

_canBuildOnPlot = false;

_vehicle = vehicle player;

_inVehicle = (_vehicle != player);

//snap vars -- temporary fix for errors so variables.sqf can be skipped

if (isNil "snapProVariables") then {

if (isNil "DZE_snapExtraRange") then {

DZE_snapExtraRange = 0;

};

if (isNil "DZE_checkNearbyRadius") then {

DZE_checkNearbyRadius = 60;

};

s_player_toggleSnap = -1;

s_player_toggleSnapSelect = -1;

s_player_toggleSnapSelectPoint=[];

snapActions = -1;

snapGizmos = [];

snapGizmosNearby = [];

snapProVariables = true; // will skip this statement from now on.

};

// snap vars

// disallow building if too many objects are found within (30m by default) add DZE_checkNearbyRadius = 30; to your init.sqf to change

_pos = [player] call FNC_GetPos;

_cnt = count (_pos nearObjects ["All",DZE_checkNearbyRadius]);

if (_cnt >= DZE_BuildingLimit) exitWith { //end script if too many objects nearby

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);

helperDetach = false;

_canDo = (!r_drag_sqf and !r_player_unconscious);

_playerUID = getPlayerUID player;

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 (_pos nearObjects _distance);

if(_isNear == 0) then {

_abort = true;

_reason = "fire";

};

};

case "workshop":

{

_distance = 3;

_isNear = count (nearestObjects [_pos, ["Wooden_shed_DZ","WoodShack_DZ","WorkBench_DZ"], _distance]);

if(_isNear == 0) then {

_abort = true;

_reason = "workshop";

};

};

case "fueltank":

{

_distance = 30;

_isNear = count (nearestObjects [_pos, 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 and 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 ["ownerPUID","0"];

//diag_log format["Player_build start: [PlayerUID = %1] [OwnerID = %2]", _playerUID, _ownerID];

// check if friendly to owner

if(_playerUID == _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 = [player] call FNC_GetPos;

_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 = [_objectHelper] call FNC_GetPos;

_objHDiff = 0;

if (isClass (missionConfigFile >> "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;

_dir = -45;

};

if (DZE_6) then {

_rotate = true;

DZE_6 = false;

_dir = 45;

};

if (DZE_F and _canDo) then {

if (helperDetach) then {

_objectHelperDir = getDir _objectHelper;

_objectHelper attachTo [player];

_objectHelper setDir _objectHelperDir-(getDir player);

helperDetach = false;

} else {

_objectHelperDir = getDir _objectHelper;

detach _objectHelper;

[_objectHelper] call FNC_GetSetPos;

_objectHelper setVelocity [0,0,0]; //fix sliding glitch

helperDetach = true;

};

DZE_F = false;

};

if(_rotate) then {

if (helperDetach) then {

_objectHelperDir = getDir _objectHelper;

_objectHelper setDir _objectHelperDir+_dir;

[_objectHelper] call FNC_GetSetPos;

} else {

detach _objectHelper;

_objectHelperDir = getDir _objectHelper;

_objectHelper setDir _objectHelperDir+_dir;

[_objectHelper] call FNC_GetSetPos;

_objectHelperDir = getDir _objectHelper;

_objectHelper attachTo [player];

_objectHelper setDir _objectHelperDir-(getDir player);

};

};

if(_zheightchanged) then {

if (!helperDetach) then {

detach _objectHelper;

_objectHelperDir = getDir _objectHelper;

};

_position = [_objectHelper] call FNC_GetPos;

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;

};

if((_isAllowedUnderGround == 0) && ((_position select 2) < 0)) then {

_position set [2,0];

};

if (surfaceIsWater _position) then {

_objectHelper setPosASL _position;

} else {

_objectHelper setPosATL _position;

};

if (!helperDetach) then {

_objectHelper attachTo [player];

_objectHelper setDir _objectHelperDir-(getDir player);

};

};

uisleep 0.5;

_location2 = [player] call FNC_GetPos;

_objectHelperPos = [_objectHelper] call FNC_GetPos;

if(DZE_5) exitWith {

_isOk = false;

_position = [_object] call FNC_GetPos;

detach _object;

_dir = getDir _object;

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(_location1 distance _objectHelperPos > 10) exitWith {

_isOk = false;

_cancel = true;

_reason = "Object is placed 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];

};

if (surfaceIsWater _location) then {

_tmpbuilt setPosASL _location;

_location = ASLtoATL _location;

} else {

_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;

};

uisleep 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];

_tmpbuilt setVariable ["ownerPUID",_playerUID,true];

PVDZE_obj_Publish = [_combination,_tmpbuilt,[_dir,_location,_playerUID],_classname];

publicVariableServer "PVDZE_obj_Publish";

cutText [format[(localize "str_epoch_player_140"),_combinationDisplay,_text], "PLAIN DOWN", 5];

} else {

_tmpbuilt setVariable ["CharacterID",dayz_characterID,true];

_tmpbuilt setVariable ["ownerPUID",_playerUID,true];

// fire?

if(_tmpbuilt isKindOf "Land_Fire_DZ") then {

_tmpbuilt spawn player_fireMonitor;

} else {

PVDZE_obj_Publish = [dayz_characterID,_tmpbuilt,[_dir,_location,_playerUID],_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;

Cen to my rescue as usual <3

Link to comment
Share on other sites

After upgrading to 1.4

 

We can't snap on newly build object, when the server restart, we can again snap to the things we bulid before the restart :(

 

 

My local Arma2op.rpt is full with this...

ct 3dd20800# 733283: sphere10cm_ep1.p3d
Ref to nonnetwork object 3dd20100# 733284: sphere10cm_ep1.p3d
Ref to nonnetwork object 3dd2b900# 733285: sphere10cm_ep1.p3d
Ref to nonnetwork object 3dd2b200# 733286: sphere10cm_ep1.p3d
Ref to nonnetwork object 3dd2ab00# 733287: sphere10cm_ep1.p3d
Ref to nonnetwork object 3dd2a400# 733288: sphere10cm_ep1.p3d
Ref to nonnetwork object 3dd29d00# 733289: sphere10cm_ep1.p3d
Ref to nonnetwork object 3dd29600# 733290: sphere10cm_ep1.p3d
Ref to nonnetwork object 3dd28f00# 733291: sphere10cm_ep1.p3d
Ref to nonnetwork object 3dd28800# 733292: sphere10cm_ep1.p3d
Ref to nonnetwork object 3dd28100# 733293: sphere10cm_ep1.p3d
Ref to nonnetwork object 3dd33900# 733294: sphere10cm_ep1.p3d
Ref to nonnetwork object 3dd33200# 733295: sphere10cm_ep1.p3d
Ref to nonnetwork object 3dd32b00# 733296: sphere10cm_ep1.p3d
Ref to nonnetwork object 3dd32400# 733297: sphere10cm_ep1.p3d
Ref to nonnetwork object 3dd31d00# 733298: sphere10cm_ep1.p3d
Ref to nonnetwork object 3dd31600# 733299: sphere10cm_ep1.p3d
Ref to nonnetwork object 3dd30f00# 733300: sphere10cm_ep1.p3d
Ref to nonnetwork object 3dd30800# 733301: sphere10cm_ep1.p3d
Ref to nonnetwork object 3dd30100# 733302: sphere10cm_ep1.p3d
Ref to nonnetwork object 3dd37900# 733303: sphere10cm_ep1.p3d
Ref to nonnetwork object 3dd37200# 733304: sphere10cm_ep1.p3d
Ref to nonnetwork object 3dd36b00# 733305: sphere10cm_ep1.p3d
Link to comment
Share on other sites

 

After upgrading to 1.4

 

We can't snap on newly build object, when the server restart, we can again snap to the things we bulid before the restart :(

 

 

My local Arma2op.rpt is full with this...

ct 3dd20800# 733283: sphere10cm_ep1.p3d
Ref to nonnetwork object 3dd20100# 733284: sphere10cm_ep1.p3d

Don't worry about local RPT, it just reports/warns you about objects that were created locally in a multiplayer environment. Basically - "Hey dude, this object can't be seen by others mkay?"

 

What other mods are you running? Vectors? P4L? Precise building? Please be aware that 1.4 will completely break any other script using player_build. It was designed to support building anywhere, vanilla script only lets you build on land, hence them changes.

 

Ofcourse, if no other scripts are running, a small video would be nice, or a better description, so I can replicate your problem step by step. I am running clean 1.4 on my own server and it works flawlessly (its hard for authors to find problems unless reported, haha)

Link to comment
Share on other sites

 

After upgrading to 1.4

 

We can't snap on newly build object, when the server restart, we can again snap to the things we build before the restart :(

Same here, ran through all my files again and didn't see anything out of place.

 

 

Don't worry about local RPT, it just reports/warns you about objects that were created locally in a multiplayer environment. Basically - "Hey dude, this object can't be seen by others mkay?"

 

What other mods are you running? Vectors? P4L? Precise building? Please be aware that 1.4 will completely break any other script using player_build. It was designed to support building anywhere, vanilla script only lets you build on land, hence them changes.

 

Ofcourse, if no other scripts are running, a small video would be nice, or a better description, so I can replicate your problem step by step. I am running clean 1.4 on my own server and it works flawlessly (its hard for authors to find problems unless reported, haha)

 

I have the Indestructible Items (For 1.0.5.1) merged in with Cen's player_build if that's screwing it up

Link to comment
Share on other sites

Hi

I'm only running build pro, just re updatede the files from github, only change i have made is blacklisting some buildings i don't want players to build around..

 

 

 

Well the process is easy.

 

Step one:

Build one cinder_kit

 

Step two:

Try building a new cinder_kit snap to the first, but got no snap points,

 

Step tree:

Server restart now I can snap to the cinder_kit i build in step one.

 

 

have only tested with cinder, since i'm not at my gaming PC right now, you are well come to test on my server, i have this problem on TAVI.

Link to comment
Share on other sites

followed the instructions to the letter... 

 

this is what my init looks like.- http://pastebin.com/7s4LWRa2

 

1.added this to my compiles.- http://pastebin.com/mxDdjdP1

 

2.added this to my description.- http://pastebin.com/NBvmp4iA

 

and put the folder in 'DayZ_Epoch_11.Chernarus\custom\snap_pro' on my missions folder

 

im not really sure if my compiles is set up right... i put what usaid to put on line 39-43

 

but not getting a scroll option to enable snapping...... 

 

yeah i messed up lol  i put down 1 half cinderwall and it came out transparent which was pretty cool...  then spawned in a 2nd half cinderwall transparent again  but no option to snap   any ideas where i messed up?

 

ooh and this is the version of infistar im running

/* ********************************21082014IAHAT334A_BETA******************************** */

 

and my AHConfig.sqf looks like this.- http://pastebin.com/tqjus8A6

Link to comment
Share on other sites

I get the snap menu but no orbs :(

 

found this in the hpp file "Cinder_DZE" <--- 

There's nothing wrong with the script, mate. You are looking in a wrong direction.

2 walls:

https://www.dropbox.com/s/mevbcaqfahvt0wr/shot_140826_231524.png?dl=0

3 walls (1 upgraded to full):

https://www.dropbox.com/s/wfc9vxykq654jsu/shot_140826_231925.png?dl=0

 

snap works as intended. Show me your compiles and init (just the compiles part from init). Use pastebin or spoiler tags, please

Link to comment
Share on other sites

Not 100% sure if I have a problem with the script or I just don't fully know how to use it...

Ok so here what I did...

i originally had snap build installed and built a base. Wanting yo change to snap build pro (and a few other changes) I have redone my files from vanilla and installed with no errors.

when I tried to snap to a cinder wall that was already there it wouldn't snap where I wanted it to. I thought this might be to do with the 2 different snap builds being used for the base so set out removing all the walls to rebuild it.

I placed a block garage door and upgraded it all the way including a combo lock. Next I tried to snap on a half cinder wall but it would not find any position to snap to. I tried everything I could think off even setting manual instead of auto.

Have I got the wrong idea of how the script works or do I have a problem?

Link to comment
Share on other sites

So just comment out line 113 right??? I'm kinda noobish I backtracked to remove build snap1.6 to replace with this yours. I don't got as much experience as my main scriptor DY357LX so go figure it didn't work lol.

Hey bud, check my sig, just uploaded a vid explaining exactly this (head directly to functions part). Should cover you for any future problems regarding functions (player_build is a function contained in a file). It's in 1440p, youtube is still processing it tho.

Also yes, removing line will make it work.

Link to comment
Share on other sites

Have I got the wrong idea of how the script works or do I have a problem?

No, if everything else snaps ok, you've found a little bug. There's a chance I forgot to add locked garage door to snap points file (single line using class inheritance, really). I'll test it out later this evening, thanks.

Snap 1.6 does not affect this mod if you get to see snap actions, points or even tutorial part.

Link to comment
Share on other sites

No, if everything else snaps ok, you've found a little bug. There's a chance I forgot to add locked garage door to snap points file (single line using class inheritance, really). I'll test it out later this evening, thanks.

Snap 1.6 does not affect this mod if you get to see snap actions, points or even tutorial part.

yeah I managed to snap cinder walls, metal floors and wood walls ok (all be it randomly to test it was workong)

Link to comment
Share on other sites

There's nothing wrong with the script, mate. You are looking in a wrong direction.

2 walls:

https://www.dropbox.com/s/mevbcaqfahvt0wr/shot_140826_231524.png?dl=0

3 walls (1 upgraded to full):

https://www.dropbox.com/s/wfc9vxykq654jsu/shot_140826_231925.png?dl=0

 

snap works as intended. Show me your compiles and init (just the compiles part from init). Use pastebin or spoiler tags, please

 

my complies should be fine...

 

 

if (!isDedicated) then {
// Compile
player_updateGui   = compile preprocessFileLineNumbers "dayz_code\compile\player_updateGui.sqf";
player_wearClothes  = compile preprocessFileLineNumbers "dayz_code\compile\player_wearClothes.sqf";
//player_lockVault   = compile preprocessFileLineNumbers "dayz_code\compile\player_lockVault.sqf";
player_switchModel  = compile preprocessFileLineNumbers "dayz_code\compile\player_switchModel.sqf";
player_selectSlot  = compile preprocessFileLineNumbers "dayz_code\compile\ui_selectSlot.sqf";
fn_gearMenuChecks  = compile preprocessFileLineNumbers "dayz_code\compile\fn_gearMenuChecks.sqf";
player_death  = compile preprocessFileLineNumbers "dayz_code\compile\player_death.sqf";
fnc_usec_damageHandler = compile preprocessFileLineNumbers "dayz_code\compile\fn_damageHandler.sqf";
local_zombieDamage  = compile preprocessFileLineNumbers "dayz_code\compile\fn_damageHandlerZ.sqf";
vehicle_handleDamage = compile preprocessFileLineNumbers "dayz_code\compile\vehicle_handleDamage.sqf";
zombie_generate  = compile preprocessFileLineNumbers "dayz_code\compile\zombie_generate.sqf";
local_lockUnlock  = compile preprocessFileLineNumbers "dayz_code\compile\local_lockUnlock.sqf";
 
player_build  = compile preprocessFileLineNumbers "custom\snap_pro\player_build.sqf";
snap_build  = compile preprocessFileLineNumbers "custom\snap_pro\snap_build.sqf";
dayz_spaceInterrupt  = compile preprocessFileLineNumbers "custom\snap_pro\dayz_spaceInterrupt.sqf";
};

Update, seams a relog make the snapping wortk on newlybuild items

 

video: 

 

Link to comment
Share on other sites

thanks for the help bro really appreciate ur time to help me getting this right...  would it also be a good idea to comment out line 29 which is dayz_spaceInterrupt = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\dayz_spaceInterrupt.sqf";  since my line 42 says dayz_spaceInterrupt = compile preprocessFileLineNumbers "custom\snap_pro\dayz_spaceInterrupt.sqf";  lol again sorry if its a retarded question  seeing as im commenting out line 113 because of line 40  figured i might need to do the same for  dayz_space interrupt

Link to comment
Share on other sites

thanks for the help bro really appreciate ur time to help me getting this right...  would it also be a good idea to comment out line 29 which is dayz_spaceInterrupt = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\dayz_spaceInterrupt.sqf";  since my line 42 says dayz_spaceInterrupt = compile preprocessFileLineNumbers "custom\snap_pro\dayz_spaceInterrupt.sqf";  lol again sorry if its a retarded question  seeing as im commenting out line 113 because of line 40  figured i might need to do the same for  dayz_space interrupt

Perfectly normal question, bud, that's why we're all here. Also yes you are correct, that line needs to go, too :)

Link to comment
Share on other sites

On the subject of snapping not appearing. That is super weird. For both of you snap is working fine, but object is not detected and added to an array for some reason.

The way it works is:

When you right click magazine (item), it finds all info about it, spawns a helper object and an actual wall, then attaches that wall to a helper. Then it reads from config to see if this wall snaps to anything, if it does, then Action menu is called and snap building is initiated. When snap building is on, first thing it does is scans area around player and builds a temporary array with all objects found if they are classified in this config. Then it simply spawns blue balls in a debug zone and attaches them to an object. Really simple concept.

So there's 2 things that could be happening now:

1) Object is not detected for some reason.

2) Object is detected, but balls do not get attached properly. There is a bug with attaching and detaching in Arma 2 that only I seem to know about, lol.. basically freshly detached objects are showing debug zone coords for some reason. After a while they work again.

 

You can! however test these things, using debug or systemchat (my prefered method). For example to see how many valid objects were detected, you could output the number yourself using Line 74

systemchat format ["Tested variable = %1",_variable]; //used to test single variable
systemchat format ["Elements in array = %1",(count _findWhitelisted)]; //used to count elements in an array 

You can use this method to quickly test any array or variable that could cause any issues without RPT log. In that code example, the second line I've added line 74 to count objects that were valid tested objects against config file and all other objects found around the testing radius. 

If this test returns 0, it means theory 1) was correct and object is not detected, something is causing it to be either delayed or ... well it's arma after all. However if it actually finds object, but still no points, that means points were added, just not in the right place, as the object probably returned [0,0,0] for some reason (happens) even tho it is positioned properly...

Go figure, lol...

But again, without these tests and with my own version working fine, there is not much I can do, but guess.

Link to comment
Share on other sites

Not sure if i did it correct but i pasted the above code under line 74.

 

when I placed the fist item (test server no items near other then plot pole) i got

 

 

 

Tested variable = Any
Elements in array = 0

 

After placing a item and trying to snap a second item to it this changed to

 

 

 

Tested variable = Any
Elements in array = 1

 

 

 

If its any help im happy to send you my pbo files to look at
 

Link to comment
Share on other sites

Haha, sorry, the _variable part was just an example how any variable can be tested.

Ok, well good news is that object is was found. Seems like points are not getting attached properly. Ehh...

Lets try it a bit different way:

after line #72 add:

sleep 0.01;
systemchat format ["Gizmo = %1, Object = %2",(getPosATL _objectSnapGizmo), _nearbyObject];

We will test position of each point spawned and position of our object. They should match very closely. Alternatively if gizmo returns low values, they are having party around in debug zone and I am out of ideas how to fix it (adding sleep is an attempt to fix it)

Link to comment
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
  • Advertisement
×
×
  • Create New...