Jump to content

[RELEASE] Build Snapping - Extended v1.6 (Updated 02/20/2014)


OtterNas3

Recommended Posts

well here is the updated 

 

player_build.sqf

 

I used MergDiff to compare the snap to both 104x and 105x

and merged in the changes made by 105x

 

I have yet to test the changes yet but let me know if it works for the 105x build

 

I am running VERION 1051 using that SRC

/*
	DayZ Base Building
	Made for DayZ Epoch please ask permission to use/edit/distrubute email [email protected].
*/
/*
Build Snapping - Extended v1.6

Idea and first code:
Maca

Reworked by: OtterNas3

01/11/2014
Last update 02/20/2014
*/

private ["_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);

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

	/* Commented out cause GHOST preview does not work with snapping!
	// if ghost preview available use that instead
	if (_ghost != "") then {
		_classname = _ghost;
	};
	*/

	_object = createVehicle [_classname, _location, [], 0, "CAN_COLLIDE"];
	_object setDir _dir;
	_object attachTo [player,_offset];
	
	_position = getPosATL _object;

	cutText [(localize "str_epoch_player_45"), "PLAIN DOWN"];


	player allowDamage false;
	SnappingOffset = _offset;
	SnappingDir = 0;
	SnappingSpotMarkers = [];
	SnappingEnabled = false;
	SnappedOffsetZ = 0;
	SnappingResetPos = false;

	if (isClass (missionConfigFile >> "SnapPoints" >> _classname)) then {
		s_building_snapping = player addAction ["<t color=""#0000ff"">Toggle Snapping</t>", "custom\snap_build\player_toggleSnapping.sqf",_classname, 3, true, false, "",""];
	};
	
	_snapper = [_object, _classname] spawn snap_object;
	_key_monitor = [_isAllowedUnderGround] spawn player_buildControls ;

	while {_isOk} do {
		sleep 1;
		_location2 = getPosATL player;

		if(DZE_5) exitWith {
			_isOk = false;
			detach _object;
			_dir = getDir _object;
			_position = getPosATL _object;
		};

		if(_location1 distance _location2 > 5) exitWith {
			_isOk = false;
			_cancel = true;
			_reason = "You've moved to far away from where you started building (within 5 meters)"; 
			detach _object;
		};
		
		if(((SnappingOffset select 2) > 5) or ((SnappingOffset select 2) < -5)) exitWith {
			_isOk = false;
			_cancel = true;
			_reason = "Cannot move up or down more than 5 meters"; 
			detach _object;
		};

		if (player getVariable["combattimeout", 0] >= time) exitWith {
			_isOk = false;
			_cancel = true;
			_reason = (localize "str_epoch_player_43");
			detach _object;
		};

		if (DZE_cancelBuilding) exitWith {
			_isOk = false;
			_cancel = true;
			_reason = "Cancelled building.";
			detach _object;
		};
	};

	terminate _snapper;
	terminate _key_monitor;
	player removeAction s_building_snapping;
	player allowDamage true;
	
	//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;

		_location = _position;

		if((_isAllowedUnderGround == 0) and ((_location select 2) < 0)) then {
			_location set [2,0];
		};
	
		_object 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;
				};

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

					_object setVariable ["CharacterID",_combination,true];
					

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

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


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

			cutText [(localize "str_epoch_player_46") , "PLAIN DOWN"];
		};

	} else {
		deleteVehicle _object;
		cutText [format[(localize "str_epoch_player_47"),_text,_reason], "PLAIN DOWN"];
	};
};

DZE_ActionInProgress = false;

Link to comment
Share on other sites

well looking at the points.hpp i do not see them defined so in order to support them will have to add this to the code

/*
Build Snapping - Extended v1.6

Idea and first code:
Maca

Reworked by: OtterNas3
01/11/2014
Last update 02/20/2014
*/

class SnapPoints
{
	////////////////
	//EPOCH STUFF///
	////////////////
	class MetalFloor_DZ {
		snap[] = {"MetalFloor_DZ"};
		points[] = {
			{
				{0, -5.25, 0}, 0
			},
			{
				{0, 5.25, 0}, 0
			},
			{
				{5.25, 0, 0}, 0
			},
			{
				{-5.25, 0, 0}, 0
			}
		};
	};

	class Sandbag1_DZ {
		snap[] = {"Sandbag1_DZ"};
		points[] = {
			{
				{-2.75, 0, -0.441071}, 180
			},
			{
				{2.75, 0, -0.441071}, 180
			},
			{
				{0, 0, 0.351071}, 180
			},
			{
				{0, 0, -1.243213}, 180
			},
			{
				{-2.75, 0, -0.441071}, 0
			},
			{
				{2.75, 0, -0.441071}, 0
			},
			{
				{0, 0, 0.351071}, 0
			},
			{
				{0, 0, -1.243213}, 0
			},
			{
				{1.375, 1.375, -0.441071}, 270
			},
			{
				{1.375, -1.375, -0.441071}, 270
			},
			{
				{-1.375, 1.375, -0.441071}, 90
			},
			{
				{-1.375, -1.375, -0.441071}, 90
			}			
		};
	};

	class MetalPanel_DZ {
		snap[] = {"MetalPanel_DZ"};
		points[] = {
			{
				{-2.9, 0, -0.999695}, 180
			},
			{
				{2.9, 0, -0.999695}, 180
			},
			{
				{0, 0, 1.699695}, 180
			},
			{
				{0, 0, -3.69939}, 180
			},
			{
				{-2.9, 0, -0.999695}, 0
			},
			{
				{2.9, 0, -0.999695}, 0
			},
			{
				{0, 0, 1.699695}, 0
			},
			{
				{0, 0, -3.69939}, 0
			},
			{
				{1.45, 1.45, -0.999695}, 270
			},
			{
				{1.45, -1.45, -0.999695}, 270
			},
			{
				{-1.45, 1.45, -0.999695}, 90
			},
			{
				{-1.45, -1.45, -0.999695}, 90
			}			
		};
	};

	class Fence_corrugated_DZ {
		snap[] = {"Fence_corrugated_DZ"};
		points[] = {
			{
				{-3.9375, 0, -0.548553}, 180
			},
			{
				{3.9375, 0, -0.548553}, 180
			},
			{
				{0, 0, 1.198553}, 180
			},
			{
				{0, 0, -2.297106}, 180
			},
			{
				{-3.9375, 0, -0.548553}, 0
			},
			{
				{3.9375, 0, -0.548553}, 0
			},
			{
				{0, 0, 1.198553}, 0
			},
			{
				{0, 0, -2.297106}, 0
			},
			{
				{1.96875, 1.96875, -0.548553}, 270
			},
			{
				{1.96875, -1.96875, -0.548553}, 270
			},
			{
				{-1.96875, 1.96875, -0.548553}, 90
			},
			{
				{-1.96875, -1.96875, -0.548553}, 90
			}			
		};
	};

	class StickFence_DZ {
		snap[] = {"StickFence_DZ"};
		points[] = {
			{
				{-5.6, 0, -0.363831}, 180
			},
			{
				{5.6, 0, -0.363831}, 180
			},
			{
				{0, 0, 0.863831}, 180
			},
			{
				{0, 0, -1.627662}, 180
			},
			{
				{-5.6, 0, -0.363831}, 0
			},
			{
				{5.6, 0, -0.363831}, 0
			},
			{
				{0, 0, 0.863831}, 0
			},
			{
				{0, 0, -1.627662}, 0
			},
			{
				{2.8, 2.8, -0.363831}, 270
			},
			{
				{2.8, -2.8, -0.363831}, 270
			},
			{
				{-2.8, 2.8, -0.363831}, 90
			},
			{
				{-2.8, -2.8, -0.363831}, 90
			}			
		};
	};

	class Land_HBarrier1_DZ {
		snap[] = {"Land_HBarrier1_DZ"};
		points[] = {
			{
				{-1.1, 0, -0.606171}, 180
			},
			{
				{1.1, 0, -0.606171}, 180
			},
			{
				{0, 0, 0.706171}, 180
			},
			{
				{0, 0, -1.912342}, 180
			},
			{
				{-1.1, 0, -0.606171}, 0
			},
			{
				{1.1, 0, -0.606171}, 0
			},
			{
				{0, 0, 0.706171}, 0
			},
			{
				{0, 0, -1.912342}, 0
			},
			{
				{0.55, 0.55, -0.606171}, 270
			},
			{
				{0.55, -0.55, -0.606171}, 270
			},
			{
				{-0.55, 0.55, -0.606171}, 90
			},
			{
				{-0.55, -0.55, -0.606171}, 90
			}			
		};
	};

	class Land_HBarrier3_DZ {
		snap[] = {"Land_HBarrier3_DZ"};
		points[] = {
			{
				{-3.3, 0, -0.606171}, 180
			},
			{
				{3.3, 0, -0.606171}, 180
			},
			{
				{0, 0, 0.706171}, 180
			},
			{
				{0, 0, -1.912342}, 180
			},
			{
				{-3.3, 0, -0.606171}, 0
			},
			{
				{3.3, 0, -0.606171}, 0
			},
			{
				{0, 0, 0.706171}, 0
			},
			{
				{0, 0, -1.912342}, 0
			},
			{
				{1.65, 1.65, -0.606171}, 270
			},
			{
				{1.65, -1.65, -0.606171}, 270
			},
			{
				{-1.65, 1.65, -0.606171}, 90
			},
			{
				{-1.65, -1.65, -0.606171}, 90
			}			
		};
	};

	class Land_HBarrier5_DZ {
		snap[] = {"Land_HBarrier5_DZ"};
		points[] = {
			{
				{-5.5, 0, -0.606171}, 180
			},
			{
				{5.5, 0, -0.606171}, 180
			},
			{
				{0, 0, 0.706171}, 180
			},
			{
				{0, 0, -1.912342}, 180
			},
			{
				{-5.5, 0, -0.606171}, 0
			},
			{
				{5.5, 0, -0.606171}, 0
			},
			{
				{0, 0, 0.706171}, 0
			},
			{
				{0, 0, -1.912342}, 0
			},
			{
				{2.75, 2.75, -0.606171}, 270
			},
			{
				{2.75, -2.75, -0.606171}, 270
			},
			{
				{-2.75, 2.75, -0.606171}, 90
			},
			{
				{-2.75, -2.75, -0.606171}, 90
			}			
		};
	};

	class Fort_RazorWire {
		snap[] = {"Fort_RazorWire"};
		points[] = {
			{
				{-8.075, 0, -0.753632}, 180
			},
			{
				{8.075, 0, -0.753632}, 180
			},
			{
				{0, 0, 0.853632}, 180
			},
			{
				{0, 0, -2.307264}, 180
			},
			{
				{-8.075, 0, -0.753632}, 0
			},
			{
				{8.075, 0, -0.753632}, 0
			},
			{
				{0, 0, 0.853632}, 0
			},
			{
				{0, 0, -2.307264}, 0
			},
			{
				{4.0375, 4.0375, -0.753632}, 270
			},
			{
				{4.0375, -4.0375, -0.753632}, 270
			},
			{
				{-4.0375, 4.0375, -0.753632}, 90
			},
			{
				{-4.0375, -4.0375, -0.753632}, 90
			}			
		};
	};

	class WoodFloor_DZ {
		snap[] = {"WoodFloor_DZ"};
		points[] = {
			{
				{0, -4.63, 0}, 0
			},
			{
				{0, 4.63, 0}, 0
			},
			{
				{4.97, 0, 0}, 0
			},
			{
				{-4.97, 0, 0}, 0
			}
		};
	};

	class CinderBase {
		snap[] = {
			"CinderWall_DZ",
			"CinderWallDoorway_DZ",
			"CinderWallDoorLocked_DZ",
			"CinderWallDoor_DZ",
			"CinderWallSmallDoorway_DZ",
			"CinderWallDoorSmallLocked_DZ",
			"CinderWallHalf_DZ",
			"CinderWallDoorSmall_DZ"
		};
		points[] = {
			{
				{-5.5134, 0, 0}, 180
			},
			{
				{5.5134, 0, 0}, 180
			},
			{
				{0, 0, 3.38}, 180
			},
			{
				{0, 0, -4.1}, 180
			},
			{
				{-5.5134, 0, 0}, 0
			},
			{
				{5.5134, 0, 0}, 0
			},
			{
				{0, 0, 3.38}, 0
			},
			{
				{0, 0, -4.1}, 0
			},
			{
				{2.7567, 2.7567, 0}, 270
			},
			{
				{2.7567, -2.7567, 0}, 270
			},
			{
				{-2.7567, 2.7567, 0}, 90
			},
			{
				{-2.7567, -2.7567, 0}, 90
			}
		};
	};

	class CinderWall_DZ: 				CinderBase {};
	class CinderWallDoorway_DZ: 		CinderBase {};
	class CinderWallDoorLocked_DZ: 		CinderBase {};
	class CinderWallDoor_DZ: 			CinderBase {};
	class CinderWallSmallDoorway_DZ: 	CinderBase {};
	class CinderWallDoorSmallLocked_DZ: CinderBase {};
	class CinderWallHalf_DZ: 			CinderBase {};

	class WoodLargeBase {
		snap[] = {
			"WoodLargeWall_DZ",
			"Land_DZE_LargeWoodDoor",
			"WoodLargeWallWin_DZ",
			"WoodLargeWallDoor_DZ",
			"Land_DZE_GarageWoodDoor",
			"Land_DZE_GarageWoodDoorLocked",
			"Land_DZE_LargeWoodDoorLocked",
			"WoodSmallWallThird_DZ"
		};
		points[] = {
			{
				{-4.9, 0, 0}, 180
			},
			{
				{4.9, 0, 0}, 180
			},
			{
				{0, 0, 2.9}, 180
			},
			{
				{0, 0, -2.8}, 180
			},
			{
				{-4.9, 0, 0}, 0
			},
			{
				{4.9, 0, 0}, 0
			},
			{
				{0, 0, 2.9}, 0
			},
			{
				{0, 0, -2.8}, 0
			},
			{
				{2.45, 2.45, 0}, 270
			},
			{
				{2.45, -2.45, 0}, 270
			},
			{
				{-2.45, 2.45, 0}, 90
			},
			{
				{-2.45, -2.45, 0}, 90
			}			
		};
	};
	class WoodLargeWall_DZ: 				WoodLargeBase {};
	class Land_DZE_LargeWoodDoor: 			WoodLargeBase {};
	class WoodLargeWallWin_DZ: 				WoodLargeBase {};
	class WoodLargeWallDoor_DZ: 			WoodLargeBase {};
	class Land_DZE_GarageWoodDoor: 			WoodLargeBase {};
	class Land_DZE_GarageWoodDoorLocked: 	WoodLargeBase {};
	class Land_DZE_LargeWoodDoorLocked: 	WoodLargeBase {};
	class WoodSmallWallThird_DZ: 			WoodLargeBase {};

	class WoodSmallBase {
		snap[] = {
			"WoodSmallWallDoor_DZ",
			"WoodSmallWall_DZ",
			"WoodSmallWallWin_DZ",
			"Land_DZE_WoodDoor",
			"Land_DZE_WoodDoorLocked"
		};
		points[] = {
			{
				{-4.58326, 0, 0}, 180
			},
			{
				{4.58326, 0, 0}, 180
			},
			{
				{0, 0, 2.9}, 180
			},
			{
				{0, 0, -2.8}, 180
			},
			{
				{-4.58326, 0, 0}, 0
			},
			{
				{4.58326, 0, 0}, 0
			},
			{
				{0, 0, 2.9}, 0
			},
			{
				{0, 0, -2.8}, 0
			},
			{
				{2.34163, 2.34163, 0}, 270
			},
			{
				{2.34163, -2.34163, 0}, 270
			},
			{
				{-2.34163, 2.34163, 0}, 90
			},
			{
				{-2.34163, -2.34163, 0}, 90
			}			
		};
	};
	
	class WoodSmallWallDoor_DZ: 	WoodSmallBase {};
	class WoodSmallWall_DZ: 		WoodSmallBase {};
	class WoodSmallWallWin_DZ: 		WoodSmallBase {};
	class Land_DZE_WoodDoor: 		WoodSmallBase {};
	class Land_DZE_WoodDoorLocked: 	WoodSmallBase {};
};

Link to comment
Share on other sites

Hi,

 

We have been using Otters snapping feature since we started our Epoch servers. It is a fantastic contribution to the Epoch community. 

 

After upgrading to Epoch 1.0.5.1 and ARMA 2 112555 players are no longer able to use page up / page down to move base building objects vertically. 

 

Has anyone else experienced this issue? If so, how was it resolved. 

 

Otter, I sent you a private message. 

 

Thank you!

Link to comment
Share on other sites

Thanks for the updated code guys.  Building in Epoch is just not the same without SNAP Build.  I was kind of miffed after updating to 1.0.5.1 and finding that SNAP was no longer working.  Grabbed the new code, pasted it in, easy peasy, lemon squeazy.  Working again.  Thanks again.  Now off to find the next fix for the next script.

 

Cheers

Link to comment
Share on other sites

Not working for me. Epoch 1.0.5.1 patch 112555 personal server on my pc.

Downloaded from Github last night (July 8th) previous version worked perfectly fine in 1.0.4.2.

Getting "snapping not available for this object."

What do I need to do EXACTLY step by step to get this workling?

And use small words as I am not a coder, scripter or engineer, just a simple user.  ;) 

Thanks!

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

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