Jump to content

[Release] Indestructible Items (For 1.0.5.1)


Recommended Posts

I am running this script with plotpoleforlive2.2.4 and snapping pro, Snapping pro and plotpole script use a merged player_build.sqf, for some reason when I place the item outside a plotpole they are indestructible but when inside a plot pole they are not and then the plot pole comes up with 0 objects in area even though there plenty of different items in the area(range is 100m) and it doesn't actually maintain the area as it does no animation just pops up the message 0 objects in area

 

I have look through coding but can't find anything, I though maybe it was a _objectclass issue in the maintain_area.sqf but that covers all Modulars

 

I could really use some help here

Link to comment
Share on other sites

if it helps at all this is my player_build.sqf. i use snap building (not pro), plot for life and this script

/*
	DayZ Base Building
	Made for DayZ Epoch please ask permission to use/edit/distrubute email [email protected].
*/
private ["_location","_dir","_classname","_item","_hasrequireditem","_missing","_hastoolweapon","_cancel","_reason","_started","_finished","_animState","_isMedic","_dis","_sfx","_hasbuilditem","_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","_ownerPUID", "_playerUID"];

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

_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_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 ["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
		diag_log text "Player is owner";
		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;

//#########################REMOVED FOR SNAP BUILDING#########################
//	// if ghost preview available use that instead
//	if (_ghost != "") then {
//		_classname = _ghost;
//	};
//###########################################################################

	_object = createVehicle [_classname, _location, [], 0, "CAN_COLLIDE"];

//#########################INDESTRUCTIBLE ITEMS#########################
		if ((typeOf _object) in indestructible) then {
			_object addEventHandler ["HandleDamage", {false}];
			_object enableSimulation false;
		};
//######################################################################
	
	_object attachTo [player,_offset];

	_position = getPosATL _object;

	cutText [(localize "str_epoch_player_45"), "PLAIN DOWN"];
	
//#########################REMOVED FOR SNAP BUILDING#########################
//	_objHDiff = 0;
//###########################################################################

//#########################SNAP BUILDING#########################
	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>", "scripts\snap_building\player_toggleSnapping.sqf",_classname, 3, true, false, "",""];
	};
	
	_snapper = [_object, _classname] spawn snap_object;
	_key_monitor = [_isAllowedUnderGround] spawn player_buildControls ;
//###########################################################################

	while {_isOk} do {
	
//#########################REMOVED FOR SNAP BUILDING#########################
//		_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 = 180;
//		};
//		if (DZE_6) then {
//			_rotate = true;
//			DZE_6 = false;
//			_dir = 0;
//		};
//
//		if(_rotate) then {
//			_object setDir _dir;
//			_object setPosATL _position;
//			//diag_log format["DEBUG Rotate BUILDING POS: %1", _position];
//		};
//
//		if(_zheightchanged) then {
//			detach _object;
//
//			_position = getPosATL _object;
//
//			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;
//			};
//
//			_object setDir (getDir _object);
//
//			if((_isAllowedUnderGround == 0) && ((_position select 2) < 0)) then {
//				_position set [2,0];
//			};
//
//			_object setPosATL _position;
//
//			//diag_log format["DEBUG Change BUILDING POS: %1", _position];
//
//			_object attachTo [player];
//
//		};
//
//		sleep 0.5;
//###########################################################################

//#########################SNAP BUILDING#########################
		sleep 1;
//###############################################################		

		_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];
//#########################REMOVED FOR SNAP BUILDING#########################
//			deleteVehicle _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;
//#########################REMOVED FOR SNAP BUILDING#########################
//			deleteVehicle _object;
//###########################################################################
		};

		if(abs(_objHDiff) > 5) exitWith {
			_isOk = false;
			_cancel = true;
			_reason = "Cannot move up || down more than 5 meters";
			detach _object;
//#########################REMOVED FOR SNAP BUILDING#########################
//			deleteVehicle _object;
//###########################################################################
		};

		if (player getVariable["combattimeout", 0] >= time) exitWith {
			_isOk = false;
			_cancel = true;
			_reason = (localize "str_epoch_player_43");
			detach _object;
//#########################REMOVED FOR SNAP BUILDING#########################
//			deleteVehicle _object;
//###########################################################################
		};

		if (DZE_cancelBuilding) exitWith {
			_isOk = false;
			_cancel = true;
			_reason = "Cancelled building.";
			detach _object;
//#########################REMOVED FOR SNAP BUILDING#########################
//			deleteVehicle _object;
//###########################################################################
		};
	};

//#########################SNAP BUILDING#########################
	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;

//#########################REMOVED FOR SNAP BUILDING#########################
//		// Start Build
//		_object = createVehicle [_classname, _location, [], 0, "CAN_COLLIDE"];
//
//#########################INDESTRUCTIBLE ITEMS#########################
//		if ((typeOf _object) in indestructible) then {
//			_object addEventHandler ["HandleDamage", {false}];
//			_object enableSimulation false;
//		};
//######################################################################
//
//		_object setdir _dir;
//###########################################################################

		// Get position based on object
		_location = _position;

		if((_isAllowedUnderGround == 0) && ((_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];
					_object setVariable ["ownerPUID",_playerUID,true];


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

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


				} else {
					_object setVariable ["CharacterID",dayz_characterID,true];

					_object setVariable ["ownerPUID",_playerUID,true];
					
					// fire?
					if(_object isKindOf "Land_Fire_DZ") then {
						_object spawn player_fireMonitor;
					} else {
						PVDZE_obj_Publish = [dayz_characterID,_object,[_dir,_location,_playerUID],_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 {
//#########################SNAP BUILDING#########################
		deleteVehicle _object;
//###############################################################
		cutText [format[(localize "str_epoch_player_47"),_text,_reason], "PLAIN DOWN"];
	};
};

DZE_ActionInProgress = false;

Link to comment
Share on other sites

thanks for this awesome mod, but i cannot get it to work 100%

 

if i place a wood wall with a door and upgrade it with a lock it become indestructable.

if i place a wood wall it is destructable

the roblem is somewhere in the player_build im guessing

 

i put the code in the exact spot it says and doesnt work i put it in the spot that is listed in the above posted and it doesnt work.  is there anyway you can help me??

Link to comment
Share on other sites

even after all that i just built 2 cinderblock walls , 1 i upgraded to a full wall.  the half wall goes down in one shot froma  t72 and the full wall wont go down after 10 shots.

 

Edit

 

i just tested with wood walls also.

 

built 2 wood walls used a windscreen to update one of them, the regular wall came down in 1 hit the upgraded wall with a window could not be brought down. 

 

again only 2 things on my server are the files from the zip i downloaded and the admin tools. 

Link to comment
Share on other sites

alright so i started reinstalling scripts 1 by 1 until it stopped working and it stopped working the script that makes it stopp working is AGN safe zone commander

 

http://opendayz.net/threads/epoch-safe-zone-commander-god-anti-backpack-stealing-no-shooting-no-vehicle-weapons.14877/

 

is there any way someone could look at this safe zone mode and see why it does it?  the people of my server would like safe traders.

 

im also open to a different safezone script if someone knows of one that will work with 1.0.5.1

Link to comment
Share on other sites

I have a problem. The buildables will blow up before the first restart after they have been built, but will respawn again after restart. Both destructable and indestructible buildings. So if someone blows up a wood wall before the first restart after it has been built it will be blowned up but respawn again after the restart (and is now destructable and will not respawn after the next restart if it is blowned up again.). Same with cinder, except after the restart cinder is indestructible. Any actions i take against a buildable object will be reset after the next restart if they have not already been through a server restart. Then its working fine.

Link to comment
Share on other sites

Alright I got everything i need on the server except snap building and Tow/lift. 

 

-Indestructible building is working in a wierd way.  when i place a wood wall it is indestructible but now if i log off the wall can be destroyed.  if i stay online till a restart it stays indestructible forever.  anyone have a idea where i should look for that problem?

 

when i add either of the build snapping scripts snap 1.6 or build snapping pro, it completely stops the indestructible bases on items i just built.  i tried using the player_build that was posted here that works with snap building and indestructible bases but it still acts the same way.  is there anyone i can talk to to help me get this done?

 

Thanks for your time

-Vape

Link to comment
Share on other sites

Seems to be working...but i notice this in my RPT now...it spams it like crazy, any idea?

 

>
 6:07:26   Error Missing {
 6:07:26 File z\addons\dayz_server\system\server_monitor.sqf, line 399
 6:07:26 Error in expression <_done = true;
publicVariable "sm_done";
};
>
Link to comment
Share on other sites

  • 3 weeks later...

it all depends how you use custom compiles and variables.

 

Personally i move them to the mission pbo and update the path to show there new location. If you do this then no you would need to compare the files and add the changes

 

If you have left the original files alone and have created new ones with just the additional lines you need in then it should work ok

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
×
×
  • Create New...