Jump to content
  • 0

How to remove some craft item and add more craft items.


J.Dominic

Question

Recommended Posts

  • 0

@juandayz Thank you. You always help me all my post.

 

And can you help me again?

I want to edit player_build.sqf and modular_build.sqf

I start to Edit compiles.sqf path in init.sqf to

call compile preprocessFileLineNumbers "custom\compiles.sqf";

And in my compiles.sqf i change this line

	if (DZE_modularBuild) then {
		player_build = compile preprocessFileLineNumbers "custom\modular_build.sqf";
		snap_build = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\snap_build.sqf";
	} else {
		player_build = compile preprocessFileLineNumbers "custom\player_build.sqf";
	};

All my edit right or no?

Because after i try to edit when i press right click on modular and click build nothing happen but when i press right click on that modular again server say building in process.

Link to comment
Share on other sites

  • 0

@J.Dominic

i think yes, your calling from custom right.

you can have an issue in your custom modular_build.sqf   when you cannot exit from "action already in process" or something like this.. this means you are missing a "dayz_actionInProgress = false;" in some where of your edit.

 

for example if u write this:

_nearRestr = count nearestObjects [_playerPos, ["MAP_kulna"], 45] > 0;
 

if (_nearRestr) exitWith {
cutText [format["You cannot build another MAP_kulna in this plot area"], "PLAIN DOWN"];  
    }; 

when _nearRestr variable is true you cannot "exitWhit" from this code as well.

but if u write:

_nearRestr = count nearestObjects [_playerPos, ["MAP_kulna"], 45] > 0;
 

if (_nearRestr) exitWith {
cutText [format["You cannot build another MAP_kulna in this plot area"], "PLAIN DOWN"];  
    dayz_actionInProgress = false;
    }; 

you leave the script like a champion :biggrin: cuz your are saying dayz_actionInProgress = false; then you cut the build process.

Link to comment
Share on other sites

  • 0

@juandayz

I add this in player_build and modular_build

	if (_type = "WoodLadder_DZ" || "ItemWoodLadder")  then { _cancel = true; _reason = localize "Cannot build Wood Ladder"; };

above

	//No building on roads unless toggled
	if (!DZE_BuildOnRoads) then {
		if (isOnRoad _position) then { _cancel = true; _reason = localize "STR_EPOCH_BUILD_FAIL_ROAD"; };
	};

	// No building in trader zones
	if(!canbuild) then { _cancel = true; _reason = format[localize "STR_EPOCH_PLAYER_136",localize "STR_EPOCH_TRADER"]; };

I think in player_build and modular_build not have _type define that right?

Link to comment
Share on other sites

  • 0

@J.Dominic

ANy way if ure trying to not allow ladders on traders cities, take a look on configvariables.sqf . i think thers an option to entry the objects ids that you cannot build in this areas.

1-first you will need a custom configVariables.sqf

if u dont know how do it see this guide:

2- In the new configvariables.sqf find and add:

DZE_SafeZoneNoBuildItems = ["WoodLadder_DZ"];

3-do not forogot add your safezones coords in DZE_SafeZonePosArray = [];

 

Link to comment
Share on other sites

  • 0
6 hours ago, juandayz said:

@J.Dominic

ANy way if ure trying to not allow ladders on traders cities, take a look on configvariables.sqf . i think thers an option to entry the objects ids that you cannot build in this areas.

1-first you will need a custom configVariables.sqf

if u dont know how do it see this guide:

2- In the new configvariables.sqf find and add:

DZE_SafeZoneNoBuildItems = ["WoodLadder_DZ"];

3-do not forogot add your safezones coords in DZE_SafeZonePosArray = [];

 

I want to not allow ladder every where not only trader :'(

Link to comment
Share on other sites

  • 0

@J.Dominic  maybe something like this in modular_build.sqf

notallowedobjects = [
"WoodenGate_1",
"WoodenGate_2",
"WoodenGate_3",
"WoodenGate_4",
"WoodStairs_DZ",
"WoodStairsSans_DZ",
"WoodStairsRails_DZ",
"WoodLadder_DZ",
"Scaffolding_DZ"
];	

if (_classname == notallowedobjects) exitWith {
	cutText [format["This object its not allowed in this server"], "PLAIN DOWN"];
	 dayz_actionInProgress = false;
	};

 

Link to comment
Share on other sites

  • 0

@J.Dominic  here you got dear my friend.. tested and working.

based on @BigEgg´s Restrict building near defined areas

you will need a custom modular_build.sqf  and custom variables.sqf.

 

1- in your custom variables:

find:

DayZ_SafeObjects

above paste:

DZE_NotAllow = [
"Plastic_Pole_EP1_DZ",
"WoodenGate_1",
"WoodenGate_2",
"WoodenGate_3",
"WoodenGate_4",
"WoodStairs_DZ",
"WoodStairsSans_DZ",
"WoodStairsRails_DZ",
"WoodLadder_DZ",
"Scaffolding_DZ"
];	

Add more objects if you want.

 

2-your custom modular_build.sqf  (see all lines in red to learn about the changes).

Spoiler

// If an array was passed redirect to vanilla player_build (Epoch items pass a string)
if (!isNil "_this" && {typeName _this == "ARRAY"} && {count _this > 0}) exitWith {_this spawn player_buildVanilla;};
private ["_abort","_reason","_distance","_isNear","_lockable","_isAllowedUnderGround","_offset","_classname","_zheightdirection","_zheightchanged","_rotate","_objectHelperPos","_objectHelperDir","_objHDiff","_position","_isOk","_dir","_vector","_cancel","_location2","_buildOffset","_location","_limit","_started","_finished","_animState","_isMedic","_proceed","_counter","_dis","_sfx","_combination_1_Display","_combination_1","_combination_2","_combination_3","_combination","_combinationDisplay","_combination_4","_num_removed","_tmpbuilt","_vUp","_classnametmp","_text","_ghost","_objectHelper","_location1","_object","_helperColor","_canDo","_pos","_onLadder","_vehicle","_inVehicle","_needNear","_canBuild","_posplayer","_restrict"];

//Check if building already in progress, exit if so.
if (dayz_actionInProgress) exitWith {localize "str_epoch_player_40" call dayz_rollingMessages;};
dayz_actionInProgress = true;

_pos = [player] call FNC_GetPos;

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

_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_F = false;

DZE_cancelBuilding = false;

DZE_updateVec = false;
DZE_memDir = 0;
DZE_memForBack = 0;
DZE_memLeftRight = 0;

call gear_ui_init;
closeDialog 1;

if (dayz_isSwimming) exitWith {dayz_actionInProgress = false; localize "str_player_26" call dayz_rollingMessages;};
if (_inVehicle) exitWith {dayz_actionInProgress = false; localize "str_epoch_player_42" call dayz_rollingMessages;};
if (_onLadder) exitWith {dayz_actionInProgress = false; localize "str_player_21" call dayz_rollingMessages;};
if (player getVariable["combattimeout",0] >= diag_tickTime) exitWith {dayz_actionInProgress = false; localize "str_epoch_player_43" call dayz_rollingMessages;};

DZE_buildItem = _this; //This is a magazine! It's global to allow access to it from outside functions

// Need Near Requirements
_abort = false;
_reason = "";

_needNear = getArray (configFile >> "CfgMagazines" >> DZE_buildItem >> "ItemActions" >> "Build" >> "neednearby");

{
    switch(_x) do{
        case "fire":
        {
            _distance = 3;
            _isNear = {inflamed _x} count (_pos nearObjects _distance);
            if(_isNear == 0) then {
                _abort = true;
                _reason = localize "STR_EPOCH_FIRE";
            };
        };
        case "workshop":
        {
            _distance = 3;
            _isNear = count (nearestObjects [_pos, ["Wooden_shed_DZ","WoodShack_DZ","WorkBench_DZ"], _distance]);
            if(_isNear == 0) then {
                _abort = true;
                _reason = localize "STR_BLD_name_ItemWorkshop";
            };
        };
        case "fueltank":
        {
            _distance = 30;
            _isNear = count (nearestObjects [_pos, dayz_fuelsources, _distance]);
            if(_isNear == 0) then {
                _abort = true;
                _reason = localize "STR_EPOCH_VEHUP_TNK";
            };
        };
    };
} forEach _needNear;

if (_abort) exitWith {
    format[localize "str_epoch_player_135",_reason,_distance] call dayz_rollingMessages;
    dayz_actionInProgress = false;
};

_canBuild = [_pos, _this, true] call dze_buildChecks;
if (_canBuild select 0) then {
    _classname = getText (configFile >> "CfgMagazines" >> DZE_buildItem >> "ItemActions" >> "Build" >> "create");
    _classnametmp = _classname;

 

 

    
    if (isText (configFile >> "CfgMagazines" >> DZE_buildItem >> "ItemActions" >> "Build" >> "buildText")) then {
        _text = getText (configFile >> "CfgMagazines" >> DZE_buildItem >> "ItemActions" >> "Build" >> "buildText");
    } else {
        _text = getText (configFile >> "CfgVehicles" >> _classname >> "displayName");
    };
    _ghost = getText (configFile >> "CfgVehicles" >> _classname >> "ghostpreview");

    _lockable = 0; //default define if lockable not found in config file below
    if(isNumber (configFile >> "CfgVehicles" >> _classname >> "lockable")) then { //find out if item is lockable object
        _lockable = getNumber(configFile >> "CfgVehicles" >> _classname >> "lockable"); // 2=lockbox, 3=combolock, 4=safe
    };

    _isAllowedUnderGround = 1; //check if allowed to build under terrain
    if(isNumber (configFile >> "CfgVehicles" >> _classname >> "nounderground")) then {
        _isAllowedUnderGround = getNumber(configFile >> "CfgVehicles" >> _classname >> "nounderground");
    };

    _offset =     getArray (configFile >> "CfgVehicles" >> _classname >> "offset"); //check default distance offset, define if does not exist

    _objectHelper = objNull;
    _isOk = true;
    _location1 = [player] call FNC_GetPos; // get inital players position
    _dir = getDir player; //required to pass direction when building

    // if ghost preview available use that instead
    if (_ghost != "") then {
        _classname = _ghost;
    };

    _object = createVehicle [_classname, [0,0,0], [], 0, "CAN_COLLIDE"]; //object preview, not an actual object that will be built

    if((count _offset) <= 0) then {
        _offset = [0,(abs(((boundingBox _object)select 0) select 1)),0];
    };

    _objectHelper = "Sign_sphere10cm_EP1" createVehicle [0,0,0];
    _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]];

    if (isClass (configFile >> "SnapBuilding" >> _classname)) then {    
        ["","","",["Init",_object,_classname,_objectHelper]] spawn snap_build;
    };

    if !(DZE_buildItem in DZE_noRotate) then{
        ["","","",["Init","Init",0]] spawn build_vectors;
    };

    _objHDiff = 0;    
    _cancel = false;
    _reason = "";
    
    helperDetach = false;
    _canDo = (!r_drag_sqf and !r_player_unconscious);
    _position = [_objectHelper] call FNC_GetPos;

    while {_isOk} do {

        _zheightchanged = false;
        _zheightdirection = "";
        _rotate = false;

        if (DZE_Q) then {
            DZE_Q = false;
            _zheightdirection = "up";
            _zheightchanged = true;
        };
        if (DZE_Z) then {
            DZE_Z = false;
            _zheightdirection = "down";
            _zheightchanged = true;
        };
        if (DZE_Q_alt) then {
            DZE_Q_alt = false;
            _zheightdirection = "up_alt";
            _zheightchanged = true;
        };
        if (DZE_Z_alt) then {
            DZE_Z_alt = false;
            _zheightdirection = "down_alt";
            _zheightchanged = true;
        };
        if (DZE_Q_ctrl) then {
            DZE_Q_ctrl = false;
            _zheightdirection = "up_ctrl";
            _zheightchanged = true;
        };
        if (DZE_Z_ctrl) then {
            DZE_Z_ctrl = false;
            _zheightdirection = "down_ctrl";
            _zheightchanged = true;
        };
        if (DZE_4) then {
            _rotate = true;
            DZE_4 = false;
            if(DZE_dirWithDegrees) then{
                DZE_memDir = DZE_memDir - DZE_curDegree;
            }else{
                DZE_memDir = DZE_memDir - 45;
            };
        };
        if (DZE_6) then {
            _rotate = true;
            DZE_6 = false;
            if(DZE_dirWithDegrees) then{
                DZE_memDir = DZE_memDir + DZE_curDegree;
            }else{
                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 {        
                _objectHelperPos = getPosATL _objectHelper;
                detach _objectHelper;            
                DZE_memDir = getDir _objectHelper;
                [_objectHelper,[DZE_memForBack,DZE_memLeftRight,DZE_memDir]] call fnc_SetPitchBankYaw;
                _objectHelper setPosATL _objectHelperPos;
                _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,[DZE_memForBack,DZE_memLeftRight,DZE_memDir]] call fnc_SetPitchBankYaw;
        };

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

        if(_location1 distance _location2 > DZE_buildMaxMoveDistance) exitWith {
            _isOk = false;
            _cancel = true;
            _reason = format[localize "STR_EPOCH_BUILD_FAIL_MOVED",DZE_buildMaxMoveDistance];
            detach _object;
            deleteVehicle _object;
            detach _objectHelper;
            deleteVehicle _objectHelper;
        };
        
        if(_location1 distance _objectHelperPos > DZE_buildMaxMoveDistance) exitWith {
            _isOk = false;
            _cancel = true;
            _reason = format[localize "STR_EPOCH_BUILD_FAIL_TOO_FAR",DZE_buildMaxMoveDistance];
            detach _object;
            deleteVehicle _object;
            detach _objectHelper;
            deleteVehicle _objectHelper;
        };

        if(abs(_objHDiff) > DZE_buildMaxHeightDistance) exitWith {
            _isOk = false;
            _cancel = true;
            _reason = format[localize "STR_EPOCH_BUILD_FAIL_HEIGHT",DZE_buildMaxHeightDistance];
            detach _object;
            deleteVehicle _object;
            detach _objectHelper;
            deleteVehicle _objectHelper;
        };

        if (player getVariable["combattimeout",0] >= diag_tickTime) 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 = localize "STR_EPOCH_PLAYER_46";
            detach _object;
            deleteVehicle _object;
            detach _objectHelper;
            deleteVehicle _objectHelper;
        };
    };
    
    _isOk = true;
    _proceed = false;
    _counter = 0;
    _location = [0,0,0];

    
    
    
    //No building on roads unless toggled
    if (!DZE_BuildOnRoads) then {
        if (isOnRoad _position) then { _cancel = true; _reason = localize "STR_EPOCH_BUILD_FAIL_ROAD"; };
    };

    // No building in trader zones
    if(!canbuild) then { _cancel = true; _reason = format[localize "STR_EPOCH_PLAYER_136",localize "STR_EPOCH_TRADER"]; };

    
_posplayer = [player] call FNC_GetPos;
_restrict = count (nearestObjects [_posplayer, DZE_NotAllow, 200]);

 
if (_restrict > 0) then {
_cancel = true;
_reason = format["This object its not allowed in this server"];
    dayz_actionInProgress = false;
};

    

    
    if(!_cancel) then {

        _classname = _classnametmp;
        
    

        // Start Build
        _tmpbuilt = createVehicle [_classname, _location, [], 0, "CAN_COLLIDE"]; //create actual object that will be published to database

        _tmpbuilt setdir _dir; //set direction inherited from passed args from control
        _tmpbuilt setVariable["memDir",_dir,true];

        // Get position based on object
        _location = _position;

        if((_isAllowedUnderGround == 0) && ((_location select 2) < 0)) then { //check Z axis if not allowed to build underground
            _location set [2,0]; //reset Z axis to zero (above terrain)
        };
        
        _tmpbuilt setVectorDirAndUp _vector;
        
        _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; //Database uses ATL
        } else {
            _tmpbuilt setPosATL _location;
        };

        format[localize "str_epoch_player_138",_text] call dayz_rollingMessages;

        _limit = 3; //times it takes to build by default

        if (DZE_StaticConstructionCount > 0) then { //if count is manually overridden inside init.sqf, use that instead, else use limits configured in config files
            _limit = DZE_StaticConstructionCount;
        }
        else {
            if (isNumber (configFile >> "CfgVehicles" >> _classname >> "constructioncount")) then {
                _limit = getNumber(configFile >> "CfgVehicles" >> _classname >> "constructioncount");
            };
        };

        while {_isOk} do { //publish phase

            format[localize "str_epoch_player_139",_text, (_counter + 1),_limit] call dayz_rollingMessages; //report how many steps are done out of total limit

            ["Working",0,[100,15,10,0]] call dayz_NutritionSystem;
            player playActionNow "Medic"; //animation
            
            //alert zombies
            _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 { //while player is not interrupted, go trough animations
                _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] >= diag_tickTime)) then {
                    r_doLoop = false;
                };
                if (DZE_cancelBuilding) exitWith {
                    r_doLoop = false;
                };
                uiSleep 0.1;
            };
            r_doLoop = false;


            if(!_finished) exitWith { //exit if interrupted
                _isOk = false;
                _proceed = false;
            };

            if(_finished) then { //if animation finished, add to build count
                _counter = _counter + 1;
            };

            if(_counter == _limit) exitWith { //if all steps done proceed with next step, otherwise cancel publish
                _isOk = false;
                _proceed = true;
            };

        };

        if (_proceed) then {

            _num_removed = ([player,DZE_buildItem] call BIS_fnc_invRemove); //remove item's magazine from inventory
            if(_num_removed == 1) then {
                call player_forceSave;
                
                format[localize "str_build_01",_text] call dayz_rollingMessages;

                _tmpbuilt setVariable ["OEMPos",_location,true]; //store original location as a variable

                if(_lockable > 1) then { //if item has code lock on it

                    _combinationDisplay = ""; //define new display

                    switch (_lockable) do { //generate random combinations depending on item type

                        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 = localize "STR_TEAM_RED";
                            };
                            if (_combination_1 == 101) then {
                                _combination_1_Display = localize "STR_TEAM_GREEN";
                            };
                            if (_combination_1 == 102) then {
                                _combination_1_Display = localize "STR_TEAM_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]; //set combination as a character ID

                    //call publish precompiled function with given args and send public variable to server to save item to database
                    if (DZE_permanentPlot) then {
                        _tmpbuilt setVariable ["ownerPUID",dayz_playerUID,true];
                        PVDZ_obj_Publish = [_combination,_tmpbuilt,[_dir,_location,dayz_playerUID,_vector],[]];
                        if (_lockable == 3) then {
                            _friendsArr = [[dayz_playerUID,toArray (name player)]];
                            _tmpbuilt setVariable ["doorfriends", _friendsArr, true];
                            PVDZ_obj_Publish = [_combination,_tmpbuilt,[_dir,_location,dayz_playerUID,_vector],_friendsArr];
                        };
                    } else {
                        PVDZ_obj_Publish = [_combination,_tmpbuilt,[_dir,_location, _vector],[]];
                    };
                    publicVariableServer "PVDZ_obj_Publish";

                    format[localize "str_epoch_player_140",_combinationDisplay,_text] call dayz_rollingMessages; //display new combination
                    systemChat format[localize "str_epoch_player_140",_combinationDisplay,_text];

                } else { //if not lockable item
                    _tmpbuilt setVariable ["CharacterID",dayz_characterID,true];
                    // fire?
                    if(_tmpbuilt isKindOf "Land_Fire_DZ") then { //if campfire, then spawn, but do not publish to database
                        _tmpbuilt spawn player_fireMonitor;
                    } else {
                        if (DZE_permanentPlot) then {
                            _tmpbuilt setVariable ["ownerPUID",dayz_playerUID,true];
                            if (_canBuild select 1) then {
                                _friendsArr = [[dayz_playerUID,toArray (name player)]];
                                _tmpbuilt setVariable ["plotfriends", _friendsArr, true];
                                PVDZ_obj_Publish = [dayz_characterID,_tmpbuilt,[_dir,_location,dayz_playerUID,_vector],_friendsArr];
                            } else {
                                PVDZ_obj_Publish = [dayz_characterID,_tmpbuilt,[_dir,_location,dayz_playerUID,_vector],[]];
                            };
                        } else {
                            PVDZ_obj_Publish = [dayz_characterID,_tmpbuilt,[_dir,_location, _vector],[]];
                        };
                        publicVariableServer "PVDZ_obj_Publish";
                    };
                };
            } else { //if magazine was not removed, cancel publish
                deleteVehicle _tmpbuilt;
                localize "str_epoch_player_46" call dayz_rollingMessages;
            };

        } else { //if player was interrupted, cancel publish and stop build animations
            r_interrupt = false;
            if (vehicle player == player) then {
                [objNull, player, rSwitchMove,""] call RE;
                player playActionNow "stop";
            };

            deleteVehicle _tmpbuilt;

            localize "str_epoch_player_46" call dayz_rollingMessages;
        };

    } else { //cancel build if passed _cancel arg was true or building on roads/trader city
        format[localize "str_epoch_player_47",_text,_reason] call dayz_rollingMessages;
    };
};

dayz_actionInProgress = false;

3-in init.sqf

DZE_requireplot = 0; 

 

Link to comment
Share on other sites

  • 0

@juandayz

Step to make custom modular_build.sqf

1. Edit compiles.sqf path in init.sqf

from

call compile preprocessFileLineNumbers "\z\addons\dayz_code\init\compiles.sqf";

to

compile preprocessFileLineNumbers "custom\compiles.sqf";

2. Copy compiles.sqf

from

@DayZ\addons\dayz_code\init\compiles.sqf

to

MPMissions\DayZ_Epoch_11.Chernarus\custom\compiles.sqf

3. Edit mudular_build.sqf

from

player_build = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\modular_build.sqf";

to

player_build = compile preprocessFileLineNumbers "custom\actions\modular_build.sqf";

That right? I want to know for sure. Sorry about that.

Link to comment
Share on other sites

  • 0

@juandayz

I try to make custom compiles.sqf and variable.sqf server give me some errors and server can't join.

Spoiler

15:47:34 Error in expression <t _myArray,_result];
};
};
} else {
if (_val > 0) then {
_fileName = _key call s>
15:47:34   Error position: <_val > 0) then {
_fileName = _key call s>
15:47:34   Error Undefined variable in expression: _val
15:47:34 File z\addons\dayz_server\system\server_monitor.sqf, line 63
15:47:34 "HIVE: BENCHMARK - Server_monitor.sqf finished streaming any objects in 0 seconds (unscheduled)"
15:47:34 "Total Number of spawn locations 11"
15:47:34 Error in expression <key = "CHILD:307:";
_result = _key call server_hiveReadWrite;
_outcome = _result>
15:47:34   Error position: <server_hiveReadWrite;
_outcome = _result>
15:47:34   Error Undefined variable in expression: server_hivereadwrite
15:47:34 File z\addons\dayz_server\system\server_monitor.sqf, line 22
15:47:34 "SERVER FPS: 19  PLAYERS: 1"
15:47:34 Error in expression <for "_i" from 1 to (3) do
{

_type = (([_typeGroup,  1] call dz_fn_loot_select) >
15:47:34   Error position: <_typeGroup,  1] call dz_fn_loot_select) >
15:47:34   Error Undefined variable in expression: _typegroup
15:47:34 File z\addons\dayz_server\compile\server_spawnInfectedCamps.sqf, line 52
15:47:34 Error in expression <bjects",
"_objectPos"
];

_typeGroup = (dz_loot_groups find ("InfectedCampType")>
15:47:34   Error position: <dz_loot_groups find ("InfectedCampType")>
15:47:34   Error Undefined variable in expression: dz_loot_groups
15:47:34 File z\addons\dayz_server\compile\server_spawnInfectedCamps.sqf, line 45
15:47:34 "Spawning an infected camp (any) at [6918.05,6186.23,0]"
15:47:34 Error in expression <"Spawning an infected camp (%1) at %2", _composition, _position];


_composition>
15:47:34   Error position: <_composition, _position];


_composition>
15:47:34   Error Undefined variable in expression: _composition
15:47:34 File z\addons\dayz_server\compile\server_spawnInfectedCamps.sqf, line 66
15:47:35 Error in expression <for "_i" from 1 to (3) do
{

_type = (([_typeGroup,  1] call dz_fn_loot_select) >
15:47:35   Error position: <_typeGroup,  1] call dz_fn_loot_select) >
15:47:35   Error Undefined variable in expression: _typegroup
15:47:35 File z\addons\dayz_server\compile\server_spawnInfectedCamps.sqf, line 52
15:47:35 "Spawning an infected camp (any) at [11497.3,9812.67,0]"
15:47:35 Error in expression <"Spawning an infected camp (%1) at %2", _composition, _position];


_composition>
15:47:35   Error position: <_composition, _position];


_composition>
15:47:35   Error Undefined variable in expression: _composition
15:47:35 File z\addons\dayz_server\compile\server_spawnInfectedCamps.sqf, line 66
15:47:35 Error in expression <for "_i" from 1 to (3) do
{

_type = (([_typeGroup,  1] call dz_fn_loot_select) >
15:47:35   Error position: <_typeGroup,  1] call dz_fn_loot_select) >
15:47:35   Error Undefined variable in expression: _typegroup
15:47:35 File z\addons\dayz_server\compile\server_spawnInfectedCamps.sqf, line 52
15:47:35 "Spawning an infected camp (any) at [4241.57,13078.8,0]"
15:47:35 Error in expression <"Spawning an infected camp (%1) at %2", _composition, _position];


_composition>
15:47:35   Error position: <_composition, _position];


_composition>
15:47:35   Error Undefined variable in expression: _composition
15:47:35 File z\addons\dayz_server\compile\server_spawnInfectedCamps.sqf, line 66
15:47:36 "CRASHSPAWNER: Starting crash site spawner. Frequency: 25±20 min. Spawn chance: 0.75"
15:47:36 "CRASHSPAWNER: Spawning crash site (any) at [11909.1,6467.88,0] with scalar NaN items."
15:47:36 Error in expression <0.75];

_spawnCrashSite =
{
_type = (([(dz_loot_groups find ("CrashSiteType")), >
15:47:36   Error position: <dz_loot_groups find ("CrashSiteType")), >
15:47:36   Error Undefined variable in expression: dz_loot_groups
15:47:36 File z\addons\dayz_server\compile\server_spawnCrashSites.sqf, line 57
15:47:37 Error in expression <P1" createVehicle _position;
_vehicle = _class createVehicle [0,0,0];
dayz_serve>
15:47:37   Error position: <_class createVehicle [0,0,0];
dayz_serve>
15:47:37   Error Undefined variable in expression: _class
15:47:37 File z\addons\dayz_server\compile\server_spawnCrashSites.sqf, line 71
15:47:37 "INFO: Chosen waterholes to be infectious - []"
15:47:37 Error in expression <fectedWaterHoles = _WaterHoleArray call fn_shuffleArray;

infectedWaterHoles = [>
15:47:37   Error position: <fn_shuffleArray;

infectedWaterHoles = [>
15:47:37   Error Undefined variable in expression: fn_shufflearray
15:47:37 File z\addons\dayz_code\system\mission\chernarus\infectiousWaterholes\init.sqf, line 27
15:47:41 No owner
15:47:44 Warning Message: Script z\addons\dayz_server\WAI\customsettings.sqf not found
15:47:44 "WAI: AI Config File Loaded"
15:47:44 "WAI: AI Monitor Started"
15:47:44 "WAI: Initialising missions"
15:47:47 "CLEANUP: INITIALIZING Vehicle SCRIPT"
15:47:47 Error in expression <inute"];



_result = "CHILD:307:" call server_hiveReadWrite;
_outcome = _result>
15:47:47   Error position: <server_hiveReadWrite;
_outcome = _result>
15:47:47   Error Undefined variable in expression: server_hivereadwrite
15:47:47 File z\addons\dayz_server\system\scheduler\sched_sync.sqf, line 6
15:50:29 Client: Remote object 2:4 not found
15:50:29 Client: Remote object 2:5 not found
15:50:29 Client: Remote object 2:6 not found
15:52:48 Client: Remote object 2:1781 not found
15:52:48 Client: Remote object 2:1782 not found
15:52:48 Client: Remote object 2:1783 not found
15:53:34 "SERVER FPS: 50  PLAYERS: 1"

 

Link to comment
Share on other sites

  • 0

@J.Dominic

MAKE YOUR CUSTOM VARIABLES//COMPILES.sqf

1- go to YOURSERVERROOT\@DayZ_Epoch\addons\ and unpack your dayz_code.pbo

2-open \@DayZ_Epoch\addons\dayz_code\init\  and copy this two files:  compiles.sqf and variables.sqf

 

3-Now we have to create a new folder for this files so go to: YOURSERVERROOT\MPMissions\DayZ_Epoch_11.Chernarus\
and create a new folder called "custom". Then paste inside the compiles.sqf // variables.sqf //

4-Making the calls for this 2 new files: (compiles.sqf/variables.sqf).

A-First open your init.sqf and

find this line:

call compile preprocessFileLineNumbers "\z\addons\dayz_code\init\variables.sqf";

change by:

call compile preprocessFileLineNumbers "custom\variables.sqf";

B-find this line:

call compile preprocessFileLineNumbers "\z\addons\dayz_code\init\compiles.sqf";    

change by:

call compile preprocessFileLineNumbers "custom\compiles.sqf";    

4-CHANGE THE PATH FOR MODULAR_BUILD:.sqf

-open your custom compiles.sqf located into the custom folder and find this line:

player_build = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\modular_build.sqf";

change by:

player_build = compile preprocessFileLineNumbers "custom\modular_build.sqf";

5-in your custom variables:

find:

DayZ_SafeObjects

above paste:

DZE_NotAllow = [
"Plastic_Pole_EP1_DZ",
"WoodenGate_1",
"WoodenGate_2",
"WoodenGate_3",
"WoodenGate_4",
"WoodStairs_DZ",
"WoodStairsSans_DZ",
"WoodStairsRails_DZ",
"WoodLadder_DZ",
"Scaffolding_DZ"
];	

Add more objects if you want.

6-in init.sqf

DZE_requireplot = 0; 

7-Drop modular_build.sqf  into mpmissions\your instance\custom)

open it. and edit.

A-into private section find:

,"_needNear","_canBuild"];

add :

,"_posplayer","_restrict"

so its looks:

,"_needNear","_canBuild","_posplayer","_restrict"];

B-find:

// No building in trader zones
    if(!canbuild) then { _cancel = true; _reason = format[localize "STR_EPOCH_PLAYER_136",localize "STR_EPOCH_TRADER"]; };

below paste:

_posplayer = [player] call FNC_GetPos;
_restrict = count (nearestObjects [_posplayer, DZE_NotAllow, 200]);

 
if (_restrict > 0) then {
_cancel = true;
_reason = format["This object its not allowed in this server"];
    dayz_actionInProgress = false;
};
   

 

 

Link to comment
Share on other sites

  • 0

@juandayz

I do it right. I sure.

This in my init.sqf

initialized = false;
//call compile preprocessFileLineNumbers "\z\addons\dayz_code\init\variables.sqf";
call compile preprocessFileLineNumbers "custom\variables.sqf";
progressLoadingScreen 0.05;
call compile preprocessFileLineNumbers "\z\addons\dayz_code\init\publicEH.sqf";
progressLoadingScreen 0.1;
call compile preprocessFileLineNumbers "\z\addons\dayz_code\medical\setup_functions_med.sqf";
progressLoadingScreen 0.15;
//call compile preprocessFileLineNumbers "\z\addons\dayz_code\init\compiles.sqf";
compile preprocessFileLineNumbers "custom\compiles.sqf";
progressLoadingScreen 0.2;
call compile preprocessFileLineNumbers "\z\addons\dayz_code\system\BIS_Effects\init.sqf";
progressLoadingScreen 0.25;
call compile preprocessFileLineNumbers "server_traders.sqf";
call compile preprocessFileLineNumbers "\z\addons\dayz_code\system\mission\chernarus11.sqf"; //Add trader city objects locally on each machine early
initialized = true;

This in my compiles.sqf

	if (DZE_modularBuild) then {
		//player_build = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\modular_build.sqf";
		player_build = compile preprocessFileLineNumbers "custom\modular_build.sqf";
		snap_build = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\snap_build.sqf";
	} else {
		player_build = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\player_build.sqf";
	};

This in my variables.sqf

DZE_NotAllow = ["WoodLadder_DZ"];

This in my modular_build.sqf

Spoiler

// If an array was passed redirect to vanilla player_build (Epoch items pass a string)
if (!isNil "_this" && {typeName _this == "ARRAY"} && {count _this > 0}) exitWith {_this spawn player_buildVanilla;};
private ["_abort","_reason","_distance","_isNear","_lockable","_isAllowedUnderGround","_offset","_classname","_zheightdirection","_zheightchanged","_rotate","_objectHelperPos","_objectHelperDir","_objHDiff","_position","_isOk","_dir","_vector","_cancel","_location2","_buildOffset","_location","_limit","_started","_finished","_animState","_isMedic","_proceed","_counter","_dis","_sfx","_combination_1_Display","_combination_1","_combination_2","_combination_3","_combination","_combinationDisplay","_combination_4","_num_removed","_tmpbuilt","_vUp","_classnametmp","_text","_ghost","_objectHelper","_location1","_object","_helperColor","_canDo","_pos","_onLadder","_vehicle","_inVehicle","_needNear","_canBuild","_posplayer","_restrict"];

//Check if building already in progress, exit if so.
if (dayz_actionInProgress) exitWith {localize "str_epoch_player_40" call dayz_rollingMessages;};
dayz_actionInProgress = true;

_pos = [player] call FNC_GetPos;

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

_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_F = false;

DZE_cancelBuilding = false;

DZE_updateVec = false;
DZE_memDir = 0;
DZE_memForBack = 0;
DZE_memLeftRight = 0;

call gear_ui_init;
closeDialog 1;

if (dayz_isSwimming) exitWith {dayz_actionInProgress = false; localize "str_player_26" call dayz_rollingMessages;};
if (_inVehicle) exitWith {dayz_actionInProgress = false; localize "str_epoch_player_42" call dayz_rollingMessages;};
if (_onLadder) exitWith {dayz_actionInProgress = false; localize "str_player_21" call dayz_rollingMessages;};
if (player getVariable["combattimeout",0] >= diag_tickTime) exitWith {dayz_actionInProgress = false; localize "str_epoch_player_43" call dayz_rollingMessages;};

DZE_buildItem = _this; //This is a magazine! It's global to allow access to it from outside functions

// Need Near Requirements
_abort = false;
_reason = "";

_needNear = getArray (configFile >> "CfgMagazines" >> DZE_buildItem >> "ItemActions" >> "Build" >> "neednearby");

{
	switch(_x) do{
		case "fire":
		{
			_distance = 3;
			_isNear = {inflamed _x} count (_pos nearObjects _distance);
			if(_isNear == 0) then {
				_abort = true;
				_reason = localize "STR_EPOCH_FIRE";
			};
		};
		case "workshop":
		{
			_distance = 3;
			_isNear = count (nearestObjects [_pos, ["Wooden_shed_DZ","WoodShack_DZ","WorkBench_DZ"], _distance]);
			if(_isNear == 0) then {
				_abort = true;
				_reason = localize "STR_BLD_name_ItemWorkshop";
			};
		};
		case "fueltank":
		{
			_distance = 30;
			_isNear = count (nearestObjects [_pos, dayz_fuelsources, _distance]);
			if(_isNear == 0) then {
				_abort = true;
				_reason = localize "STR_EPOCH_VEHUP_TNK";
			};
		};
	};
} forEach _needNear;

if (_abort) exitWith {
	format[localize "str_epoch_player_135",_reason,_distance] call dayz_rollingMessages;
	dayz_actionInProgress = false;
};

_canBuild = [_pos, _this, true] call dze_buildChecks;
if (_canBuild select 0) then {
	_classname = getText (configFile >> "CfgMagazines" >> DZE_buildItem >> "ItemActions" >> "Build" >> "create");
	_classnametmp = _classname;
	if (isText (configFile >> "CfgMagazines" >> DZE_buildItem >> "ItemActions" >> "Build" >> "buildText")) then {
		_text = getText (configFile >> "CfgMagazines" >> DZE_buildItem >> "ItemActions" >> "Build" >> "buildText");
	} else {
		_text = getText (configFile >> "CfgVehicles" >> _classname >> "displayName");
	};
	_ghost = getText (configFile >> "CfgVehicles" >> _classname >> "ghostpreview");

	_lockable = 0; //default define if lockable not found in config file below
	if(isNumber (configFile >> "CfgVehicles" >> _classname >> "lockable")) then { //find out if item is lockable object
		_lockable = getNumber(configFile >> "CfgVehicles" >> _classname >> "lockable"); // 2=lockbox, 3=combolock, 4=safe
	};

	_isAllowedUnderGround = 1; //check if allowed to build under terrain
	if(isNumber (configFile >> "CfgVehicles" >> _classname >> "nounderground")) then {
		_isAllowedUnderGround = getNumber(configFile >> "CfgVehicles" >> _classname >> "nounderground");
	};

	_offset = 	getArray (configFile >> "CfgVehicles" >> _classname >> "offset"); //check default distance offset, define if does not exist

	_objectHelper = objNull;
	_isOk = true;
	_location1 = [player] call FNC_GetPos; // get inital players position
	_dir = getDir player; //required to pass direction when building

	// if ghost preview available use that instead
	if (_ghost != "") then {
		_classname = _ghost;
	};

	_object = createVehicle [_classname, [0,0,0], [], 0, "CAN_COLLIDE"]; //object preview, not an actual object that will be built

	if((count _offset) <= 0) then {
		_offset = [0,(abs(((boundingBox _object)select 0) select 1)),0];
	};

	_objectHelper = "Sign_sphere10cm_EP1" createVehicle [0,0,0];
	_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]];

	if (isClass (configFile >> "SnapBuilding" >> _classname)) then {	
		["","","",["Init",_object,_classname,_objectHelper]] spawn snap_build;
	};

	if !(DZE_buildItem in DZE_noRotate) then{
		["","","",["Init","Init",0]] spawn build_vectors;
	};

	_objHDiff = 0;	
	_cancel = false;
	_reason = "";
	
	helperDetach = false;
	_canDo = (!r_drag_sqf and !r_player_unconscious);
	_position = [_objectHelper] call FNC_GetPos;

	while {_isOk} do {

		_zheightchanged = false;
		_zheightdirection = "";
		_rotate = false;

		if (DZE_Q) then {
			DZE_Q = false;
			_zheightdirection = "up";
			_zheightchanged = true;
		};
		if (DZE_Z) then {
			DZE_Z = false;
			_zheightdirection = "down";
			_zheightchanged = true;
		};
		if (DZE_Q_alt) then {
			DZE_Q_alt = false;
			_zheightdirection = "up_alt";
			_zheightchanged = true;
		};
		if (DZE_Z_alt) then {
			DZE_Z_alt = false;
			_zheightdirection = "down_alt";
			_zheightchanged = true;
		};
		if (DZE_Q_ctrl) then {
			DZE_Q_ctrl = false;
			_zheightdirection = "up_ctrl";
			_zheightchanged = true;
		};
		if (DZE_Z_ctrl) then {
			DZE_Z_ctrl = false;
			_zheightdirection = "down_ctrl";
			_zheightchanged = true;
		};
		if (DZE_4) then {
			_rotate = true;
			DZE_4 = false;
			if(DZE_dirWithDegrees) then{
				DZE_memDir = DZE_memDir - DZE_curDegree;
			}else{
				DZE_memDir = DZE_memDir - 45;
			};
		};
		if (DZE_6) then {
			_rotate = true;
			DZE_6 = false;
			if(DZE_dirWithDegrees) then{
				DZE_memDir = DZE_memDir + DZE_curDegree;
			}else{
				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 {		
				_objectHelperPos = getPosATL _objectHelper;
				detach _objectHelper;			
				DZE_memDir = getDir _objectHelper;
				[_objectHelper,[DZE_memForBack,DZE_memLeftRight,DZE_memDir]] call fnc_SetPitchBankYaw;
				_objectHelper setPosATL _objectHelperPos;
				_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,[DZE_memForBack,DZE_memLeftRight,DZE_memDir]] call fnc_SetPitchBankYaw;
		};

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

		if(_location1 distance _location2 > DZE_buildMaxMoveDistance) exitWith {
			_isOk = false;
			_cancel = true;
			_reason = format[localize "STR_EPOCH_BUILD_FAIL_MOVED",DZE_buildMaxMoveDistance];
			detach _object;
			deleteVehicle _object;
			detach _objectHelper;
			deleteVehicle _objectHelper;
		};
		
		if(_location1 distance _objectHelperPos > DZE_buildMaxMoveDistance) exitWith {
			_isOk = false;
			_cancel = true;
			_reason = format[localize "STR_EPOCH_BUILD_FAIL_TOO_FAR",DZE_buildMaxMoveDistance];
			detach _object;
			deleteVehicle _object;
			detach _objectHelper;
			deleteVehicle _objectHelper;
		};

		if(abs(_objHDiff) > DZE_buildMaxHeightDistance) exitWith {
			_isOk = false;
			_cancel = true;
			_reason = format[localize "STR_EPOCH_BUILD_FAIL_HEIGHT",DZE_buildMaxHeightDistance];
			detach _object;
			deleteVehicle _object;
			detach _objectHelper;
			deleteVehicle _objectHelper;
		};

		if (player getVariable["combattimeout",0] >= diag_tickTime) 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 = localize "STR_EPOCH_PLAYER_46";
			detach _object;
			deleteVehicle _object;
			detach _objectHelper;
			deleteVehicle _objectHelper;
		};
	};
	
	_isOk = true;
	_proceed = false;
	_counter = 0;
	_location = [0,0,0];

	//No building on roads unless toggled
	if (!DZE_BuildOnRoads) then {
		if (isOnRoad _position) then { _cancel = true; _reason = localize "STR_EPOCH_BUILD_FAIL_ROAD"; };
	};

	// No building in trader zones
	if(!canbuild) then { _cancel = true; _reason = format[localize "STR_EPOCH_PLAYER_136",localize "STR_EPOCH_TRADER"]; };
	
	_posplayer = [player] call FNC_GetPos;
	_restrict = count (nearestObjects [_posplayer, DZE_NotAllow, 200]);

 
	if (_restrict > 0) then {
	_cancel = true;
	_reason = format["This object its not allowed in this server"];
    dayz_actionInProgress = false;
	};

	if(!_cancel) then {

		_classname = _classnametmp;

		// Start Build
		_tmpbuilt = createVehicle [_classname, _location, [], 0, "CAN_COLLIDE"]; //create actual object that will be published to database

		_tmpbuilt setdir _dir; //set direction inherited from passed args from control
		_tmpbuilt setVariable["memDir",_dir,true];

		// Get position based on object
		_location = _position;

		if((_isAllowedUnderGround == 0) && ((_location select 2) < 0)) then { //check Z axis if not allowed to build underground
			_location set [2,0]; //reset Z axis to zero (above terrain)
		};
		
		_tmpbuilt setVectorDirAndUp _vector;
		
		_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; //Database uses ATL
		} else {
			_tmpbuilt setPosATL _location;
		};

		format[localize "str_epoch_player_138",_text] call dayz_rollingMessages;

		_limit = 3; //times it takes to build by default

		if (DZE_StaticConstructionCount > 0) then { //if count is manually overridden inside init.sqf, use that instead, else use limits configured in config files
			_limit = DZE_StaticConstructionCount;
		}
		else {
			if (isNumber (configFile >> "CfgVehicles" >> _classname >> "constructioncount")) then {
				_limit = getNumber(configFile >> "CfgVehicles" >> _classname >> "constructioncount");
			};
		};

		while {_isOk} do { //publish phase

			format[localize "str_epoch_player_139",_text, (_counter + 1),_limit] call dayz_rollingMessages; //report how many steps are done out of total limit

			["Working",0,[100,15,10,0]] call dayz_NutritionSystem;
			player playActionNow "Medic"; //animation
			
			//alert zombies
			_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 { //while player is not interrupted, go trough animations
				_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] >= diag_tickTime)) then {
					r_doLoop = false;
				};
				if (DZE_cancelBuilding) exitWith {
					r_doLoop = false;
				};
				uiSleep 0.1;
			};
			r_doLoop = false;


			if(!_finished) exitWith { //exit if interrupted
				_isOk = false;
				_proceed = false;
			};

			if(_finished) then { //if animation finished, add to build count
				_counter = _counter + 1;
			};

			if(_counter == _limit) exitWith { //if all steps done proceed with next step, otherwise cancel publish
				_isOk = false;
				_proceed = true;
			};

		};

		if (_proceed) then {

			_num_removed = ([player,DZE_buildItem] call BIS_fnc_invRemove); //remove item's magazine from inventory
			if(_num_removed == 1) then {
				call player_forceSave;
				
				format[localize "str_build_01",_text] call dayz_rollingMessages;

				_tmpbuilt setVariable ["OEMPos",_location,true]; //store original location as a variable

				if(_lockable > 1) then { //if item has code lock on it

					_combinationDisplay = ""; //define new display

					switch (_lockable) do { //generate random combinations depending on item type

						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 = localize "STR_TEAM_RED";
							};
							if (_combination_1 == 101) then {
								_combination_1_Display = localize "STR_TEAM_GREEN";
							};
							if (_combination_1 == 102) then {
								_combination_1_Display = localize "STR_TEAM_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]; //set combination as a character ID

					//call publish precompiled function with given args and send public variable to server to save item to database
					if (DZE_permanentPlot) then {
						_tmpbuilt setVariable ["ownerPUID",dayz_playerUID,true];
						PVDZ_obj_Publish = [_combination,_tmpbuilt,[_dir,_location,dayz_playerUID,_vector],[]];
						if (_lockable == 3) then {
							_friendsArr = [[dayz_playerUID,toArray (name player)]];
							_tmpbuilt setVariable ["doorfriends", _friendsArr, true];
							PVDZ_obj_Publish = [_combination,_tmpbuilt,[_dir,_location,dayz_playerUID,_vector],_friendsArr];
						};
					} else {
						PVDZ_obj_Publish = [_combination,_tmpbuilt,[_dir,_location, _vector],[]];
					};
					publicVariableServer "PVDZ_obj_Publish";

					format[localize "str_epoch_player_140",_combinationDisplay,_text] call dayz_rollingMessages; //display new combination
					systemChat format[localize "str_epoch_player_140",_combinationDisplay,_text];

				} else { //if not lockable item
					_tmpbuilt setVariable ["CharacterID",dayz_characterID,true];
					// fire?
					if(_tmpbuilt isKindOf "Land_Fire_DZ") then { //if campfire, then spawn, but do not publish to database
						_tmpbuilt spawn player_fireMonitor;
					} else {
						if (DZE_permanentPlot) then {
							_tmpbuilt setVariable ["ownerPUID",dayz_playerUID,true];
							if (_canBuild select 1) then {
								_friendsArr = [[dayz_playerUID,toArray (name player)]];
								_tmpbuilt setVariable ["plotfriends", _friendsArr, true];
								PVDZ_obj_Publish = [dayz_characterID,_tmpbuilt,[_dir,_location,dayz_playerUID,_vector],_friendsArr];
							} else {
								PVDZ_obj_Publish = [dayz_characterID,_tmpbuilt,[_dir,_location,dayz_playerUID,_vector],[]];
							};
						} else {
							PVDZ_obj_Publish = [dayz_characterID,_tmpbuilt,[_dir,_location, _vector],[]];
						};
						publicVariableServer "PVDZ_obj_Publish";
					};
				};
			} else { //if magazine was not removed, cancel publish
				deleteVehicle _tmpbuilt;
				localize "str_epoch_player_46" call dayz_rollingMessages;
			};

		} else { //if player was interrupted, cancel publish and stop build animations
			r_interrupt = false;
			if (vehicle player == player) then {
				[objNull, player, rSwitchMove,""] call RE;
				player playActionNow "stop";
			};

			deleteVehicle _tmpbuilt;

			localize "str_epoch_player_46" call dayz_rollingMessages;
		};

	} else { //cancel build if passed _cancel arg was true or building on roads/trader city
		format[localize "str_epoch_player_47",_text,_reason] call dayz_rollingMessages;
	};
};

dayz_actionInProgress = false;

 

dddd_zpsccrt4tvp.jpg

 

Same issue i told you before. I try to make custom compiles.sqf and custom modular_build.sqf with original code but after i try to place some buildings nothing happen.

Link to comment
Share on other sites

  • 0

Thank you all of things for help me @juandayz

Ok after i test your script. Your script meaning if have some buildings place front of you or nearly object in DZE_NotAllow will can't place that right?

But i found little problem in variables.sqf i set only WoodLadder_DZ but i can't place any things nearly other buildings. 

DZE_NotAllow = ["WoodLadder_DZ"];

 

Link to comment
Share on other sites

  • 0
9 hours ago, J.Dominic said:

Thank you all of things for help me @juandayz

Ok after i test your script. Your script meaning if have some buildings place front of you or nearly object in DZE_NotAllow will can't place that right?

But i found little problem in variables.sqf i set only WoodLadder_DZ but i can't place any things nearly other buildings. 


DZE_NotAllow = ["WoodLadder_DZ"];

 

so you say.. if for example you have a base with... woodfloors or other objects you cannot build anything?

Quote

Your script meaning if have some buildings place front of you or nearly object in DZE_NotAllow will can't place that right?

yes, the script recognize the object in the hand to be crafted and if in DZE_Notallow in a radius of 200mts around the player cancel the craft.

the 200 mts can be reduced by 3mts.. cuz is in the hand of player (very close)

Link to comment
Share on other sites

  • 0

@J.Dominic test it with a vaultstoragelocked and works.. proob it with your laders.. remember put a smallwoodwall_DZ  near of you (less than 37mts to test it)

modular_build.sqf  (see lines in red)

Spoiler

// If an array was passed redirect to vanilla player_build (Epoch items pass a string)
if (!isNil "_this" && {typeName _this == "ARRAY"} && {count _this > 0}) exitWith {_this spawn player_buildVanilla;};
private ["_NOTALLOW","_playerPos","_nearRestr","_abort","_reason","_distance","_isNear","_lockable","_isAllowedUnderGround","_offset","_classname","_zheightdirection","_zheightchanged","_rotate","_objectHelperPos","_objectHelperDir","_objHDiff","_position","_isOk","_dir","_vector","_cancel","_location2","_buildOffset","_location","_limit","_started","_finished","_animState","_isMedic","_proceed","_counter","_dis","_sfx","_combination_1_Display","_combination_1","_combination_2","_combination_3","_combination","_combinationDisplay","_combination_4","_num_removed","_tmpbuilt","_vUp","_classnametmp","_text","_ghost","_objectHelper","_location1","_object","_helperColor","_canDo","_pos","_onLadder","_vehicle","_inVehicle","_needNear","_canBuild"];

//Check if building already in progress, exit if so.
if (dayz_actionInProgress) exitWith {localize "str_epoch_player_40" call dayz_rollingMessages;};
dayz_actionInProgress = true;

_pos = [player] call FNC_GetPos;

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

_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_F = false;

DZE_cancelBuilding = false;

DZE_updateVec = false;
DZE_memDir = 0;
DZE_memForBack = 0;
DZE_memLeftRight = 0;

call gear_ui_init;
closeDialog 1;

if (dayz_isSwimming) exitWith {dayz_actionInProgress = false; localize "str_player_26" call dayz_rollingMessages;};
if (_inVehicle) exitWith {dayz_actionInProgress = false; localize "str_epoch_player_42" call dayz_rollingMessages;};
if (_onLadder) exitWith {dayz_actionInProgress = false; localize "str_player_21" call dayz_rollingMessages;};
if (player getVariable["combattimeout",0] >= diag_tickTime) exitWith {dayz_actionInProgress = false; localize "str_epoch_player_43" call dayz_rollingMessages;};

DZE_buildItem = _this; //This is a magazine! It's global to allow access to it from outside functions

// Need Near Requirements
_abort = false;
_reason = "";

_needNear = getArray (configFile >> "CfgMagazines" >> DZE_buildItem >> "ItemActions" >> "Build" >> "neednearby");

{
    switch(_x) do{
        case "fire":
        {
            _distance = 3;
            _isNear = {inflamed _x} count (_pos nearObjects _distance);
            if(_isNear == 0) then {
                _abort = true;
                _reason = localize "STR_EPOCH_FIRE";
            };
        };
        case "workshop":
        {
            _distance = 3;
            _isNear = count (nearestObjects [_pos, ["Wooden_shed_DZ","WoodShack_DZ","WorkBench_DZ"], _distance]);
            if(_isNear == 0) then {
                _abort = true;
                _reason = localize "STR_BLD_name_ItemWorkshop";
            };
        };
        case "fueltank":
        {
            _distance = 30;
            _isNear = count (nearestObjects [_pos, dayz_fuelsources, _distance]);
            if(_isNear == 0) then {
                _abort = true;
                _reason = localize "STR_EPOCH_VEHUP_TNK";
            };
        };
    };
} forEach _needNear;

if (_abort) exitWith {
    format[localize "str_epoch_player_135",_reason,_distance] call dayz_rollingMessages;
    dayz_actionInProgress = false;
};

_canBuild = [_pos, _this, true] call dze_buildChecks;
if (_canBuild select 0) then {
    _classname = getText (configFile >> "CfgMagazines" >> DZE_buildItem >> "ItemActions" >> "Build" >> "create");
    _classnametmp = _classname;
    if (isText (configFile >> "CfgMagazines" >> DZE_buildItem >> "ItemActions" >> "Build" >> "buildText")) then {
        _text = getText (configFile >> "CfgMagazines" >> DZE_buildItem >> "ItemActions" >> "Build" >> "buildText");
    } else {
        _text = getText (configFile >> "CfgVehicles" >> _classname >> "displayName");
    };
    _ghost = getText (configFile >> "CfgVehicles" >> _classname >> "ghostpreview");

    _lockable = 0; //default define if lockable not found in config file below
    if(isNumber (configFile >> "CfgVehicles" >> _classname >> "lockable")) then { //find out if item is lockable object
        _lockable = getNumber(configFile >> "CfgVehicles" >> _classname >> "lockable"); // 2=lockbox, 3=combolock, 4=safe
    };

    _isAllowedUnderGround = 1; //check if allowed to build under terrain
    if(isNumber (configFile >> "CfgVehicles" >> _classname >> "nounderground")) then {
        _isAllowedUnderGround = getNumber(configFile >> "CfgVehicles" >> _classname >> "nounderground");
    };

    _offset =     getArray (configFile >> "CfgVehicles" >> _classname >> "offset"); //check default distance offset, define if does not exist

    _objectHelper = objNull;
    _isOk = true;
    _location1 = [player] call FNC_GetPos; // get inital players position
    _dir = getDir player; //required to pass direction when building

    // if ghost preview available use that instead
    if (_ghost != "") then {
        _classname = _ghost;
    };

    _object = createVehicle [_classname, [0,0,0], [], 0, "CAN_COLLIDE"]; //object preview, not an actual object that will be built

    if((count _offset) <= 0) then {
        _offset = [0,(abs(((boundingBox _object)select 0) select 1)),0];
    };

    _objectHelper = "Sign_sphere10cm_EP1" createVehicle [0,0,0];
    _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]];

    if (isClass (configFile >> "SnapBuilding" >> _classname)) then {    
        ["","","",["Init",_object,_classname,_objectHelper]] spawn snap_build;
    };

    if !(DZE_buildItem in DZE_noRotate) then{
        ["","","",["Init","Init",0]] spawn build_vectors;
    };

    _objHDiff = 0;    
    _cancel = false;
    _reason = "";
    
    helperDetach = false;
    _canDo = (!r_drag_sqf and !r_player_unconscious);
    _position = [_objectHelper] call FNC_GetPos;

    while {_isOk} do {

        _zheightchanged = false;
        _zheightdirection = "";
        _rotate = false;

        if (DZE_Q) then {
            DZE_Q = false;
            _zheightdirection = "up";
            _zheightchanged = true;
        };
        if (DZE_Z) then {
            DZE_Z = false;
            _zheightdirection = "down";
            _zheightchanged = true;
        };
        if (DZE_Q_alt) then {
            DZE_Q_alt = false;
            _zheightdirection = "up_alt";
            _zheightchanged = true;
        };
        if (DZE_Z_alt) then {
            DZE_Z_alt = false;
            _zheightdirection = "down_alt";
            _zheightchanged = true;
        };
        if (DZE_Q_ctrl) then {
            DZE_Q_ctrl = false;
            _zheightdirection = "up_ctrl";
            _zheightchanged = true;
        };
        if (DZE_Z_ctrl) then {
            DZE_Z_ctrl = false;
            _zheightdirection = "down_ctrl";
            _zheightchanged = true;
        };
        if (DZE_4) then {
            _rotate = true;
            DZE_4 = false;
            if(DZE_dirWithDegrees) then{
                DZE_memDir = DZE_memDir - DZE_curDegree;
            }else{
                DZE_memDir = DZE_memDir - 45;
            };
        };
        if (DZE_6) then {
            _rotate = true;
            DZE_6 = false;
            if(DZE_dirWithDegrees) then{
                DZE_memDir = DZE_memDir + DZE_curDegree;
            }else{
                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 {        
                _objectHelperPos = getPosATL _objectHelper;
                detach _objectHelper;            
                DZE_memDir = getDir _objectHelper;
                [_objectHelper,[DZE_memForBack,DZE_memLeftRight,DZE_memDir]] call fnc_SetPitchBankYaw;
                _objectHelper setPosATL _objectHelperPos;
                _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,[DZE_memForBack,DZE_memLeftRight,DZE_memDir]] call fnc_SetPitchBankYaw;
        };

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

        if(_location1 distance _location2 > DZE_buildMaxMoveDistance) exitWith {
            _isOk = false;
            _cancel = true;
            _reason = format[localize "STR_EPOCH_BUILD_FAIL_MOVED",DZE_buildMaxMoveDistance];
            detach _object;
            deleteVehicle _object;
            detach _objectHelper;
            deleteVehicle _objectHelper;
        };
        
        if(_location1 distance _objectHelperPos > DZE_buildMaxMoveDistance) exitWith {
            _isOk = false;
            _cancel = true;
            _reason = format[localize "STR_EPOCH_BUILD_FAIL_TOO_FAR",DZE_buildMaxMoveDistance];
            detach _object;
            deleteVehicle _object;
            detach _objectHelper;
            deleteVehicle _objectHelper;
        };

        if(abs(_objHDiff) > DZE_buildMaxHeightDistance) exitWith {
            _isOk = false;
            _cancel = true;
            _reason = format[localize "STR_EPOCH_BUILD_FAIL_HEIGHT",DZE_buildMaxHeightDistance];
            detach _object;
            deleteVehicle _object;
            detach _objectHelper;
            deleteVehicle _objectHelper;
        };

        if (player getVariable["combattimeout",0] >= diag_tickTime) 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 = localize "STR_EPOCH_PLAYER_46";
            detach _object;
            deleteVehicle _object;
            detach _objectHelper;
            deleteVehicle _objectHelper;
        };
    };
    
    _isOk = true;
    _proceed = false;
    _counter = 0;
    _location = [0,0,0];

    //No building on roads unless toggled
    if (!DZE_BuildOnRoads) then {
        if (isOnRoad _position) then { _cancel = true; _reason = localize "STR_EPOCH_BUILD_FAIL_ROAD"; };
    };

    // No building in trader zones
    if(!canbuild) then { _cancel = true; _reason = format[localize "STR_EPOCH_PLAYER_136",localize "STR_EPOCH_TRADER"]; };

    if(!_cancel) then {
_NOTALLOW = "VaultStorageLocked";//use ure ladders ids//more than one lader//coment this line and  use the structure below

//_NOTALLOW = ["",""];
_playerPos = getPosATL player;
_nearRestr = count nearestObjects [_playerPos, ["WoodSmallWall_DZ"], 37] > 0;

if (_nearRestr && (_NOTALLOW == _classname)) exitWith {
dayz_actionInProgress = false;
cutText [format["Cannot build near of small wood wall"], "PLAIN DOWN"];
};

_classname = _classnametmp;
    

        // Start Build
        _tmpbuilt = createVehicle [_classname, _location, [], 0, "CAN_COLLIDE"]; //create actual object that will be published to database

        _tmpbuilt setdir _dir; //set direction inherited from passed args from control
        _tmpbuilt setVariable["memDir",_dir,true];

        // Get position based on object
        _location = _position;

        if((_isAllowedUnderGround == 0) && ((_location select 2) < 0)) then { //check Z axis if not allowed to build underground
            _location set [2,0]; //reset Z axis to zero (above terrain)
        };
        
        _tmpbuilt setVectorDirAndUp _vector;
        
        _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; //Database uses ATL
        } else {
            _tmpbuilt setPosATL _location;
        };

        format[localize "str_epoch_player_138",_text] call dayz_rollingMessages;

        _limit = 3; //times it takes to build by default

        if (DZE_StaticConstructionCount > 0) then { //if count is manually overridden inside init.sqf, use that instead, else use limits configured in config files
            _limit = DZE_StaticConstructionCount;
        }
        else {
            if (isNumber (configFile >> "CfgVehicles" >> _classname >> "constructioncount")) then {
                _limit = getNumber(configFile >> "CfgVehicles" >> _classname >> "constructioncount");
            };
        };

        while {_isOk} do { //publish phase

            format[localize "str_epoch_player_139",_text, (_counter + 1),_limit] call dayz_rollingMessages; //report how many steps are done out of total limit

            ["Working",0,[100,15,10,0]] call dayz_NutritionSystem;
            player playActionNow "Medic"; //animation
            
            //alert zombies
            _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 { //while player is not interrupted, go trough animations
                _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] >= diag_tickTime)) then {
                    r_doLoop = false;
                };
                if (DZE_cancelBuilding) exitWith {
                    r_doLoop = false;
                };
                uiSleep 0.1;
            };
            r_doLoop = false;


            if(!_finished) exitWith { //exit if interrupted
                _isOk = false;
                _proceed = false;
            };

            if(_finished) then { //if animation finished, add to build count
                _counter = _counter + 1;
            };

            if(_counter == _limit) exitWith { //if all steps done proceed with next step, otherwise cancel publish
                _isOk = false;
                _proceed = true;
            };

        };

        if (_proceed) then {

            _num_removed = ([player,DZE_buildItem] call BIS_fnc_invRemove); //remove item's magazine from inventory
            if(_num_removed == 1) then {
                call player_forceSave;
                
                format[localize "str_build_01",_text] call dayz_rollingMessages;

                _tmpbuilt setVariable ["OEMPos",_location,true]; //store original location as a variable

                if(_lockable > 1) then { //if item has code lock on it

                    _combinationDisplay = ""; //define new display

                    switch (_lockable) do { //generate random combinations depending on item type

                        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 = localize "STR_TEAM_RED";
                            };
                            if (_combination_1 == 101) then {
                                _combination_1_Display = localize "STR_TEAM_GREEN";
                            };
                            if (_combination_1 == 102) then {
                                _combination_1_Display = localize "STR_TEAM_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]; //set combination as a character ID

                    //call publish precompiled function with given args and send public variable to server to save item to database
                    if (DZE_permanentPlot) then {
                        _tmpbuilt setVariable ["ownerPUID",dayz_playerUID,true];
                        PVDZ_obj_Publish = [_combination,_tmpbuilt,[_dir,_location,dayz_playerUID,_vector],[]];
                        if (_lockable == 3) then {
                            _friendsArr = [[dayz_playerUID,toArray (name player)]];
                            _tmpbuilt setVariable ["doorfriends", _friendsArr, true];
                            PVDZ_obj_Publish = [_combination,_tmpbuilt,[_dir,_location,dayz_playerUID,_vector],_friendsArr];
                        };
                    } else {
                        PVDZ_obj_Publish = [_combination,_tmpbuilt,[_dir,_location, _vector],[]];
                    };
                    publicVariableServer "PVDZ_obj_Publish";

                    format[localize "str_epoch_player_140",_combinationDisplay,_text] call dayz_rollingMessages; //display new combination
                    systemChat format[localize "str_epoch_player_140",_combinationDisplay,_text];

                } else { //if not lockable item
                    _tmpbuilt setVariable ["CharacterID",dayz_characterID,true];
                    // fire?
                    if(_tmpbuilt isKindOf "Land_Fire_DZ") then { //if campfire, then spawn, but do not publish to database
                        _tmpbuilt spawn player_fireMonitor;
                    } else {
                        if (DZE_permanentPlot) then {
                            _tmpbuilt setVariable ["ownerPUID",dayz_playerUID,true];
                            if (_canBuild select 1) then {
                                _friendsArr = [[dayz_playerUID,toArray (name player)]];
                                _tmpbuilt setVariable ["plotfriends", _friendsArr, true];
                                PVDZ_obj_Publish = [dayz_characterID,_tmpbuilt,[_dir,_location,dayz_playerUID,_vector],_friendsArr];
                            } else {
                                PVDZ_obj_Publish = [dayz_characterID,_tmpbuilt,[_dir,_location,dayz_playerUID,_vector],[]];
                            };
                        } else {
                            PVDZ_obj_Publish = [dayz_characterID,_tmpbuilt,[_dir,_location, _vector],[]];
                        };
                        publicVariableServer "PVDZ_obj_Publish";
                    };
                };
            } else { //if magazine was not removed, cancel publish
                deleteVehicle _tmpbuilt;
                localize "str_epoch_player_46" call dayz_rollingMessages;
            };

        } else { //if player was interrupted, cancel publish and stop build animations
            r_interrupt = false;
            if (vehicle player == player) then {
                [objNull, player, rSwitchMove,""] call RE;
                player playActionNow "stop";
            };

            deleteVehicle _tmpbuilt;

            localize "str_epoch_player_46" call dayz_rollingMessages;
        };

    } else { //cancel build if passed _cancel arg was true or building on roads/trader city
        format[localize "str_epoch_player_47",_text,_reason] call dayz_rollingMessages;
    };
};

dayz_actionInProgress = false;

 

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
  • Discord

×
×
  • Create New...