Jump to content

[Outdated] [release] 1.0.6 - Deploy Anything 2.8.2 - Now with Epoch building! | Customizable: DB saving | Plot | Vehicles/Buildings | Packing


mudzereli

Recommended Posts

in overwrites/clickactions : 

["Group Management","Group Management","execVM 'dzgm\loadGroupManagement.sqf';","true"],

Don't forget to take the ItemRadio class out of your extra_rc.hpp.

["ItemRadio","Group Management","execVM 'dzgm\loadGroupManagement.sqf';","true"],
Link to comment
Share on other sites

Here's mine:

DZE_CLICK_ACTIONS = [
    ["ItemRadio","Group Management","execVM 'scripts\dzgm\loadGroupManagement.sqf';","true"],
    ["Binocular_Vector","View Distance: 500m" ,"setViewDistance 500; systemChat('ViewDistance: 500');","true"],
    ["Binocular_Vector","View Distance: 1000m" ,"setViewDistance 1000; systemChat('ViewDistance: 1000');","true"],
    ["Binocular_Vector","View Distance: 1500m" ,"setViewDistance 1500; systemChat('ViewDistance: 1500');","true"],
    ["Binocular_Vector","View Distance: 2000m" ,"setViewDistance 2000; systemChat('ViewDistance: 2000'); systemChat('Warning: Higher the view distance Lower the FPS');","true"],
    ["Binocular_Vector","View Distance: 2500m" ,"setViewDistance 2500; systemChat('ViewDistance: 2500'); systemChat('Warning: Higher the view distance Lower the FPS');","true"],
    ["Binocular_Vector","View Distance: 3000m" ,"setViewDistance 3000; systemChat('ViewDistance: 3000'); systemChat('Warning: Higher the view distance Lower the FPS');","true"],
    ["Binocular_Vector","View Distance: 3500m" ,"setViewDistance 3500; systemChat('ViewDistance: 3500'); systemChat('Warning: Higher the view distance Lower the FPS');","true"],
    ["Binocular_Vector","View Distance: 4000m" ,"setViewDistance 4000; systemChat('ViewDistance: 4000'); systemChat('Warning: Higher the view distance Lower the FPS');","true"],
    ["Binocular","View Distance: 500m" ,"setViewDistance 500; systemChat('ViewDistance: 500');","true"],
    ["Binocular","View Distance: 1000m" ,"setViewDistance 1000; systemChat('ViewDistance: 1000');","true"],
    ["Binocular","View Distance: 1500m" ,"setViewDistance 1500; systemChat('ViewDistance: 1500');","true"],
    ["Binocular","View Distance: 2000m" ,"setViewDistance 2000; systemChat('ViewDistance: 2000'); systemChat('Warning: Higher the view distance Lower the FPS');","true"],
    ["Binocular","View Distance: 2500m" ,"setViewDistance 2500; systemChat('ViewDistance: 2500'); systemChat('Warning: Higher the view distance Lower the FPS');","true"],
    ["Binocular","View Distance: 3000m" ,"setViewDistance 3000; systemChat('ViewDistance: 3000'); systemChat('Warning: Higher the view distance Lower the FPS');","true"],
    ["Binocular","View Distance: 3500m" ,"setViewDistance 3500; systemChat('ViewDistance: 3500'); systemChat('Warning: Higher the view distance Lower the FPS');","true"],
    ["Binocular","View Distance: 4000m" ,"setViewDistance 4000; systemChat('ViewDistance: 4000'); systemChat('Warning: Higher the view distance Lower the FPS');","true"]
];
Link to comment
Share on other sites

I don't get it. I have had a look at others files (with permission), installed the latest version of Deploy Anything, looked into my own files for ages and STILL can't figure out why when I push the "F" key, the buildable doesn't stay in position so I can let it go, and walk around it like I can with Snap Build.

 

What am I missing here?

Link to comment
Share on other sites

  • 4 weeks later...

Anyone know how to stop a deployable that is being saved to the database from being locked after restart?

 

I am using gems to deploy static weapons on my taviana server and after restart they become locked and the player does not have a key to unlock it.

 

The script is giving the static weapon a Character ID which makes it a locked vehicle after restart. I would like to make it save but as character ID 0 so it is unlocked after restart.

 

What i have done so far to counter this is let anyone pack it up so even if they die they can still pack it up and redeploy it. This is not how i want it.

 

The code for this is inside functions.sqf

fnc_set_temp_deployable_id = {
    _this setVariable ["DeployedBy",call fnc_temp_deployable_id, true]; 
};

fnc_set_perm_deployable_id = {
    _this setVariable ["CharacterID",call fnc_perm_deployable_id, true]; 
};

fnc_get_perm_deployable_id = {
    private["_return","_parse"];
    _return = _this getVariable ["CharacterID","0"];
    _parse = parseNumber _return;
    if(_parse < 500000) then {
        _return = "nil";
    };
    _return
};

fnc_get_temp_deployable_id = {
    _this getVariable ["DeployedBy","nil"]
};

fnc_perm_deployable_id = {
    private["_calc","_return"];
    _calc = 999999 - (parseNumber dayz_characterID);
    if(_calc < 500000) then {
        _return = "nil";
    } else {
        _return = (str _calc);
    };
   _return
};

fnc_temp_deployable_id = {
    getPlayerUID player  
};

 

If anyone can help change this code some so the depoyables that get saved to the database are set to character ID 0 would be great. I have tryed a couple different ways with no success.

Link to comment
Share on other sites

["ItemTopaz",    [0,5,1],5,-1,false,false,false,true,true,true,false,["Land_Fort_Watchtower","M2StaticMG","DSHKM_Ins","SearchLight","Hhedgehog_concrete","Hhedgehog_concreteBig","Base_WarfareBBarrier10xTall","Fence_corrugated_plate","Fence_Ind_long","Land_CncBlock","Land_CncBlock_D","Land_CncBlock_Stripes"],[],["ItemTopaz"],"true"],

Probably doesn't help, but that's my code for building mounted weapons. Mine don't lock after a server restart though?

Link to comment
Share on other sites

I am not sure why it does not lock the M2StaticMG for you but does for me. But even with your code of true/false's it is the same after restart. The M2StaticMG is locked and you need a key to unlock it. I did notice if the pack option is true you can pack it even if it is locked.

Link to comment
Share on other sites

Question: I wonder if 10 is the maximum number of items a right click menu can have? I'm trying to add all the flag carriers to the metal pole right-click option but in-game inventpory only show me a maximum number of ten things I can craft with the metal pole.

 

How can I add more?

Link to comment
Share on other sites

That's like saying please put "HOT" on a coffee cup :)

 

but I see your point if you haven't done this before. . .  

I found out what is going on.  I feel like you aren't taking in to account that people may already have a custom ui_selectslot.sqf and your mod overwrites that.  Would it be possible to revise your instructions for people who already have custom ui_selectslot.sqf?

Link to comment
Share on other sites

I haven't tried the reboot yet, all static mounted weapons give a black screen for me. . . I think Calimity mentioned it as well in a previous post.  

 

This is what I get for not reading 3 pages back. . .  :huh:

 

Changed this: (bolded 'true') to false.

 

["ItemCitrine",[0,2,1],5,1,true,true,false,true,true,true,false,["DSHKM_CDF","Suitcase],[],["ItemCitrine"],"true"], 

 

["ItemCitrine",[0,2,1],5,1,true,true,false,true,false,true,false,["DSHKM_CDF","Suitcase],[],["ItemCitrine"],"true"],  <- works

 

 

*edit* It seems that the black screen is intermittent. I just deployed an M2 and I got the black screen again. I'm getting it with a DSHKM mounted gun too....

 

*edit 2* I apparently had the guns set to false for _simulation. Changed that to true and all seems ok now.

 

 

 



I am not sure why it does not lock the M2StaticMG for you but does for me. But even with your code of true/false's it is the same after restart. The M2StaticMG is locked and you need a key to unlock it. I did notice if the pack option is true you can pack it even if it is locked.

Link to comment
Share on other sites

Just a very random guess here:  but does one of you have infistar and the other doesnt? or maybe different variations of it? 

 

Plot pole flag turned on = static weapons are not locked after restart.

 

_plot  = true, no locking static weapons

 

_plot  = false, the static weapons lock after reboot

 

NOTE: so far this only works for the M2StaticMG.     (Still testing)

 

I am not sure why it does not lock the M2StaticMG for you but does for me. But even with your code of true/false's it is the same after restart. The M2StaticMG is locked and you need a key to unlock it. I did notice if the pack option is true you can pack it even if it is locked.

Link to comment
Share on other sites

["ItemTopaz",    [0,5,1],5,-1,false,false,false,true,true,true,false,["Land_Fort_Watchtower","M2StaticMG","DSHKM_Ins","SearchLight","Hhedgehog_concrete","Hhedgehog_concreteBig","Base_WarfareBBarrier10xTall","Fence_corrugated_plate","Fence_Ind_long","Land_CncBlock","Land_CncBlock_D","Land_CncBlock_Stripes"],[],["ItemTopaz"],"true"],

Probably doesn't help, but that's my code for building mounted weapons. Mine don't lock after a server restart though?

 

I added your code but when I right click on Topaz I still cannot see more than 10

Link to comment
Share on other sites

Just a very random guess here:  but does one of you have infistar and the other doesnt? or maybe different variations of it? 

 

Plot pole flag turned on = static weapons are not locked after restart.

 

_plot  = true, no locking static weapons

 

_plot  = false, the static weapons lock after reboot

 

NOTE: so far this only works for the M2StaticMG.     (Still testing)

This does not work for me.

 

This is my code i want to use for static weapons.

	["ItemEmerald",[0,7,1],7,-1,false,false,false,true,true,true,false,["Stinger_Pod_US_EP1","TOW_TriPod_US_EP1"],[],["ItemEmerald"],"true"],
	["ItemObsidian",[0,7,1],7,-1,false,false,false,true,true,true,false,["M2StaticMG_US_EP1","MK19_TriPod_US_EP1"],[],["ItemObsidian"],"true"]

All four of them are locked after a restart.

 

Even changing the class names

	["ItemEmerald",[0,7,1],7,-1,false,false,false,true,true,true,false,["Stinger_Pod","TOW_TriPod"],[],["ItemEmerald"],"true"],
	["ItemObsidian",[0,7,1],7,-1,false,false,false,true,true,true,false,["M2StaticMG","MK19_TriPod"],[],["ItemObsidian"],"true"]

Still they are locked after a server restart.

Link to comment
Share on other sites

...

 

I was going at that same locking problem for ages and i believe it has something to do with me attaching deployables to P4L system but anyways, after few hours of heavy head scratching and script breaking i've found some sort of solution.

 

Check out and you only need step 2 like this for every deployable static gun you might ever need

if (_object isKindof "M2StaticMG") then {
	_ownerID = "0";
};

Edit: If anyone wants to get this working with P4L, snap and vectors here's my file for reference, it's a mess but works without any errors :D

http://pastebin.com/SyZbD7mz

Link to comment
Share on other sites

  • 2 weeks later...

This is what i'm using, has older snap/vector added to it though i'm not sure if snap actually works as i haven't set any snappoints for any deployable items.

Note that vectors don't save on deployable vehicles like tripods, bikes, mozzies etc but does save with any kind of buildings

 

private ["_range", "_cptarget", "_objectClasses", "_cnt", "_objectsnearcount", "_objects", "_count", "_onLadder", "_isWater", "_cancel", "_reason", "_canBuildOnPlot", "_isBuildAdmin", "_vehicle", "_inVehicle", "_playerUID", "_canDo", "_vector", "_object", "_rotations", "_aroundX", "_aroundY", "_aroundZ", "_dirX", "_dirY", "_dirZ", "_upX", "_upY", "_upZ", "_dirXTemp", "_upXTemp", "_dir", "_up", "_item", "_abort", "_needNear", "_index", "_distance", "_isNear", "_classname", "_classnametmp", "_require", "_text", "_ghost", "_lockable", "_requireplot", "_isAllowedUnderGround", "_offset", "_isPole", "_isLandFireDZ", "_needText", "_findNearestPoles", "_findNearestPole", "_IsNearPlot", "_exitWith", "_nearestPole", "_ownerID", "_friendlies", "_fuid", "_friendUID", "_builder", "_message", "_missing", "_hasrequireditem", "_hastoolweapon", "_hasbuilditem", "_location", "_isOk", "_location1", "_objectHelper", "_helperColor", "_position", "_objHDiff", "_zheightchanged", "_zheightdirection", "_rotate", "_objectHelperDir", "_location2", "_objectHelperPos", "_tmpbuilt", "_buildOffset", "_vUp", "_limit", "_proceed", "_counter", "_dis", "_sfx", "_started", "_finished", "_animState", "_isMedic", "_combinationDisplay", "_combination_1", "_combination_2", "_combination_3", "_combination", "_combination_1_Display", "_combination_4", "_temp_removed_array"];

if(DZE_ActionInProgress) exitWith { cutText ["\n\nToo many objects within 120m", "PLAIN DOWN"]; };
DZE_ActionInProgress = true;

if (isNil "snapProVariables") then {
	if (isNil "DZE_snapExtraRange") then {
		DZE_snapExtraRange = 0;
	};
	s_player_toggleSnap = -1;
	s_player_toggleSnapSelect = -1;
	s_player_toggleSnapSelectPoint=[];
	snapActions = -1;
	snapGizmos = [];
	snapGizmosNearby = [];
	snapProVariables = true; // will skip this statement from now on.
};

_pos = [player] call FNC_GetPos;
_objectClasses = DZE_maintainClasses;
_cnt = count (_pos nearObjects ["_objectClasses",DZE_checkNearbyRadius]); 
 if (_cnt >= 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;

_isBuildAdmin = (getPlayerUID player) in WG_adminBuild;

_vehicle = vehicle player;
_inVehicle = (_vehicle != player);
_playerUID = getPlayerUID player;

helperDetach = false;
_canDo = (!r_drag_sqf and !r_player_unconscious);

_vector = [];
fnc_SetPitchBankYaw = { 
    private ["_object","_rotations","_aroundX","_aroundY","_aroundZ","_dirX","_dirY","_dirZ","_upX","_upY","_upZ","_dir","_up","_dirXTemp",
    "_upXTemp"];
    _object = _this select 0; 
    _rotations = _this select 1; 
    _aroundX = _rotations select 0; 
    _aroundY = _rotations select 1; 
    _aroundZ = (360 - (_rotations select 2)) - 360; 
    _dirX = 0; 
    _dirY = 1; 
    _dirZ = 0; 
    _upX = 0; 
    _upY = 0; 
    _upZ = 1; 
    if (_aroundX != 0) then { 
        _dirY = cos _aroundX; 
        _dirZ = sin _aroundX; 
        _upY = -sin _aroundX; 
        _upZ = cos _aroundX; 
    }; 
    if (_aroundY != 0) then { 
        _dirX = _dirZ * sin _aroundY; 
        _dirZ = _dirZ * cos _aroundY; 
        _upX = _upZ * sin _aroundY; 
        _upZ = _upZ * cos _aroundY; 
    }; 
    if (_aroundZ != 0) then { 
        _dirXTemp = _dirX; 
        _dirX = (_dirXTemp* cos _aroundZ) - (_dirY * sin _aroundZ); 
        _dirY = (_dirY * cos _aroundZ) + (_dirXTemp * sin _aroundZ);        
        _upXTemp = _upX; 
        _upX = (_upXTemp * cos _aroundZ) - (_upY * sin _aroundZ); 
        _upY = (_upY * cos _aroundZ) + (_upXTemp * sin _aroundZ); 		
    }; 
    _dir = [_dirX,_dirY,_dirZ]; 
    _up = [_upX,_upY,_upZ]; 
    _object setVectorDirAndUp [_dir,_up];
	DZE_BuildVector = [_dir,_up];
}; 

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


//### BEGIN MODIFIED CODE: player_deploy
//_needNear =     getArray (configFile >> "CfgMagazines" >> _item >> "ItemActions" >> "Build" >> "neednearby");
private["_index"];
_index = _this call getDeployableIndex;
_needNear = _index call getDeployableNeedNearBy;
//### END MODIFIED CODE: player_deploy

	{
		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 = _index call getDeployableClass;
	_classnametmp = _classname;
	_require = [];
	_text = _index call getDeployableDisplay;
	_ghost = "";

_lockable = 0;
if(isNumber (configFile >> "CfgVehicles" >> _classname >> "lockable")) then {
	_lockable = getNumber(configFile >> "CfgVehicles" >> _classname >> "lockable");
};

_requireplot = 1;
if(isNumber (configFile >> "CfgVehicles" >> _classname >> "requireplot")) then {
    _requireplot = getNumber(configFile >> "CfgVehicles" >> _classname >> "requireplot");
};
//### BEGIN MODIFIED CODE: player_deploy
if(_index call getDeployableRequirePlot) then {_requireplot = 1;} else {_requireplot = 0;};
//### END MODIFIED CODE: player_deploy

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

private["_exitWith"];
if(_IsNearPlot == 0) then {

    // Allow building of plot
    if(_requireplot == 0 || _isLandFireDZ) then {
        _canBuildOnPlot = true;
    } else {
        _exitWith = (localize "STR_EPOCH_PLAYER_135");
    };

} 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["DEBUG BUILDING: %1 = %2", dayz_characterID, _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 {
            _exitWith = "You can't build a plot within your plot!";
        };

    } else {
        // disallow building plot
        if(!_isPole) then {
_friendlies = _nearestPole getVariable ["plotfriends",[]];
_fuid  = [];
{
      _friendUID = _x select 0;
      _fuid  =  _fuid  + [_friendUID];
} forEach _friendlies;
_builder  = getPlayerUID player;
// check if friendly to owner
if(_builder in _fuid) then {
    _canBuildOnPlot = true;
            } else {
                _exitWith = "You can't build on someone else's plot!";
            };
        };
    };
};

// _message
if(!_canBuildOnPlot) exitWith {  DZE_ActionInProgress = false; cutText [format[_exitWith,_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;

    _hastoolweapon = (_index call getDeployableKitClass) in ((weapons player) + (magazines player));
    if(!_hastoolweapon) then { _hasrequireditem = false; _missing = (_index call getDeployableKitDisplay); };

//_hasbuilditem = _this in magazines player;
//if (!_hasbuilditem) exitWith {DZE_ActionInProgress = false; cutText [format[(localize "str_player_31"),_text,"build"] , "PLAIN DOWN"]; };
_hasbuilditem = [player,_index] call getHasDeployableParts;
if (!_hasbuilditem) exitWith {DZE_ActionInProgress = false; cutText [format[(localize "str_player_31"),str (_index call getDeployableParts),"build"] , "PLAIN DOWN"]; };

if (!_hasrequireditem) exitWith {DZE_ActionInProgress = false; cutText [format[(localize "str_epoch_player_137"),_missing] , "PLAIN DOWN"]; };
//### END MODIFIED CODE: player_deploy

	_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"];
	_object setVariable["ObjectUID","1",true];
	//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,[0,5,0]];
	_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;
	};
	
	DZE_updateVec = false;
	DZE_memDir = getDir _objectHelper;
	DZE_memForBack = 0;
	DZE_memLeftRight = 0;
	if !(_classname in DZE_noRotate) then{
		s_player_setVectorsReset = player addaction ["Reset","custom\snap_pro\player_vectorChange.sqf","reset"];
		s_player_setVectorsForward = player addaction ["Pitch Forward","custom\snap_pro\player_vectorChange.sqf","forward"];
		s_player_setVectorsBack = player addaction ["Pitch Back","custom\snap_pro\player_vectorChange.sqf","back"];
		s_player_setVectorsLeft = player addaction ["Bank Left","custom\snap_pro\player_vectorChange.sqf","left"];
		s_player_setVectorsRight = player addaction ["Bank Right","custom\snap_pro\player_vectorChange.sqf","right"];
		s_player_setVectors1 = player addaction ["Increment by 1 degree","custom\snap_pro\player_vectorChange.sqf","1"];
		s_player_setVectors5 = player addaction ["Increment by 5 degrees","custom\snap_pro\player_vectorChange.sqf","5"];
		s_player_setVectors45 = player addaction ["Increment by 45 degrees","custom\snap_pro\player_vectorChange.sqf","45"];
		s_player_setVectors90 = player addaction ["Increment by 90 degrees","custom\snap_pro\player_vectorChange.sqf","90"];
	};
	
	
	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;
			DZE_memDir = DZE_memDir - 45;
		};
		if (DZE_6) then {
			_rotate = true;
			DZE_6 = false;
			_dir = 45;
			DZE_memDir = DZE_memDir + 45;
		};
		
		if(DZE_updateVec) then{
			[_objectHelper,[DZE_memForBack,DZE_memLeftRight,DZE_memDir]] call fnc_SetPitchBankYaw;
			DZE_updateVec = false;
		};
		
		if (DZE_F and _canDo) then {	
			if (helperDetach) then {
				_objectHelper attachTo [player];
				DZE_memDir = DZE_memDir-(getDir player);
				helperDetach = false;
				[_objectHelper,[DZE_memForBack,DZE_memLeftRight,DZE_memDir]] call fnc_SetPitchBankYaw;
			} else {
				_objectHelperDir = getDir _objectHelper;
				detach _objectHelper;
				DZE_memDir = getDir _objectHelper;
				[_objectHelper,[DZE_memForBack,DZE_memLeftRight,DZE_memDir]] call fnc_SetPitchBankYaw;
				[_objectHelper]	call FNC_GetSetPos;
				_objectHelper setVelocity [0,0,0]; //fix sliding glitch
				helperDetach = true;
			};
			DZE_F = false;
		};

		if(_rotate) then {
			[_objectHelper,[DZE_memForBack,DZE_memLeftRight,DZE_memDir]] call fnc_SetPitchBankYaw;
		};
		
		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);
			};
			
			[_objectHelper,[DZE_memForBack,DZE_memLeftRight,DZE_memDir]] call fnc_SetPitchBankYaw;
		};

		sleep 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;
			_vector = [(vectorDir _object),(vectorUp _object)];	
			deleteVehicle _object;
			detach _objectHelper;
			deleteVehicle _objectHelper;
		};

		if(_location1 distance _location2 > 20) exitWith {
			_isOk = false;
			_cancel = true;
			_reason = "You've moved to far away from where you started building (within 20 meters)";
			detach _object;
			deleteVehicle _object;
			detach _objectHelper;
			deleteVehicle _objectHelper;
		};
		
		if(_location1 distance _objectHelperPos > 20) exitWith {
			_isOk = false;
			_cancel = true;
			_reason = "Object is placed to far away from where you started building (within 20 meters)";
			detach _object;
			deleteVehicle _object;
			detach _objectHelper;
			deleteVehicle _objectHelper;
		};

		if(abs(_objHDiff) > 20) exitWith {
			_isOk = false;
			_cancel = true;
			_reason = "Cannot move up or down more than 20 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;
		};
	};

	if !(_classname in DZE_noRotate) then{
		player removeAction s_player_setVectorsReset;
		player removeAction s_player_setVectorsForward;
		player removeAction s_player_setVectorsBack;
		player removeAction s_player_setVectorsLeft;
		player removeAction s_player_setVectorsRight;
		player removeAction s_player_setVectors1;
		player removeAction s_player_setVectors5;
		player removeAction s_player_setVectors45;
		player removeAction s_player_setVectors90;
	};
	
	
	//No building on roads unless toggled
	if (!(_index call getDeployableBuildOnRoad)) 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"];

		if (!(_index call getDeployableSimulation)) then {
			_tmpbuilt enableSimulation false;
		};
		_tmpbuilt setVariable ["ObjectUID", "1", true];
		_tmpbuilt setVariable ["ownerPUID",_playerUID,true];

		_tmpbuilt setdir _dir;

		// Get position based on object
		_location = _position;

		if((_isAllowedUnderGround == 0) && ((_location select 2) < 0)) then {
			_location set [2,0];
		};
	
		_buildOffset = [0,0,0];
		_vUp = _vector select 1;
		switch (_classname) do {
			case "MetalFloor_DZ": { _buildOffset = [(_vUp select 0) * .148, (_vUp select 1) * .148,0]; };
		};
		
		_location = [
			(_location select 0) - (_buildOffset select 0),
			(_location select 1) - (_buildOffset select 1),
			(_location select 2) - (_buildOffset select 2)
		];

		if (surfaceIsWater _location) then {
			_tmpbuilt setPosASL _location;
			_location = ASLtoATL _location;
		} else {
			_tmpbuilt setPosATL _location;
		};

		_tmpbuilt setVectorDirAndUp _vector;
		
		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 && !_isBuildAdmin} 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 (_isBuildAdmin) then {
			_isOk = false;
			_proceed = true;
		};
		
		if (_proceed) then {
		//diag_log "Proceed OK";


				if([player,_index] call getHasDeployableParts) then {
                [player,_index] call removeDeployableParts;
				
				cutText [format[localize "str_build_01",_text], "PLAIN DOWN"];

				if (_isPole) then {
					[] spawn player_plotPreview;
				};
				
				_tmpbuilt setVariable ["OEMPos",_location,true];

				if(_lockable > 1) then {
					//diag_log "Is Lockable OK";
					_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,_vector,_playerUID],_classname];
					//diag_log "Publish Lockable";
					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];
					//### BEGIN MODIFIED CODE: player deploy


						if (_index call getPermanent) then {
						_tmpbuilt call fnc_set_temp_deployable_id;
						if(_index call getDeployableSimulation) then {
							PVDZE_veh_Publish = [_tmpbuilt,[_dir,_position],(_index call getDeployableClass),true,call fnc_perm_deployable_id];
							publicVariableServer "PVDZE_veh_Publish";
						} else {
							PVDZE_obj_Publish = [dayz_characterID,_tmpbuilt,[_dir,_position,_vector,_playerUID],(_index call getDeployableClass)];
							publicVariableServer "PVDZE_obj_Publish";
						};
					} else {
						_tmpbuilt call fnc_set_temp_deployable_id;
					};
					if(_index call getClearCargo) then {
						clearWeaponCargoGlobal _tmpbuilt;
						clearMagazineCargoGlobal _tmpbuilt;
					};
					if(_index call getDeployableClearAmmo) then {
						_tmpbuilt setVehicleAmmo 0;
					};
					player reveal _tmpbuilt;
					DZE_DEPLOYING_SUCCESSFUL = true;
					//### END MODIFIED CODE: player deploy
                };
			} else {
				deleteVehicle _tmpbuilt;
				cutText [(localize "str_epoch_player_46") , "PLAIN DOWN"];
				{
					[player,_x] call BIS_fnc_invAdd;
				} forEach _temp_removed_array;				
			};

		} 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

Guest
This topic is now closed to further replies.
×
×
  • Create New...