Jump to content
  • 0

1.6 Help with new player_modular.sqf


juandayz

Question

Hey after two days of try and try  i ask for help :P

I was remaking my workshop for 1.6 everything is fine.. but the code that i used with base on the old player_build dont save anymore the objets crafted to the database.

i was merging it with new modular_build and new player_build.... the objets spawns and can be crafted but after the restart do not get saving.

hers the code:

Spoiler

 

private ["_playerPos","_nearRestr","_hastool","_hasitem","_removed",
"_helperColor","_objectHelper","_objectHelperDir","_objectHelperPos","_canDo", "_pos", "_cnt",
"_location","_dir","_classname","_item","_hasrequireditem","_missing","_hastoolweapon","_cancel","_reason","_started","_finished","_animState","_isMedic","_dis","_sfx","_hasbuilditem","_tmpbuilt","_onLadder","_isWater","_require","_text","_offset","_IsNearPlot","_isOk","_location1","_location2","_counter","_limit","_proceed","_num_removed","_position","_object","_canBuildOnPlot","_friendlies","_nearestPole","_ownerID","_findNearestPoles","_findNearestPole","_distance","_classnametmp","_ghost","_isPole","_needText","_lockable","_zheightchanged","_rotate","_combination_1","_combination_2","_combination_3","_combination_4","_combination","_combination_1_Display","_combinationDisplay","_zheightdirection","_abort","_isNear","_need","_needNear","_vehicle","_inVehicle","_requireplot","_objHDiff","_isLandFireDZ","_isTankTrap","_posrad","_cntrad"];

if(DZE_ActionInProgress) exitWith { cutText [(localize "str_epoch_player_40") , "PLAIN DOWN"]; };
DZE_ActionInProgress = true;

_inventory = items player;
_hastool =     "ItemToolbox" in _inventory;
_hasitem = [["PartWoodLumber",4],["PartWoodPlywood",4]] call player_checkItems;
_playerPos = getPosATL player;
_nearRestr = count nearestObjects [_playerPos, ["MAP_kulna"], 45] > 0;
 
if (_nearRestr) exitWith {
cutText [format["You cannot build another Workshop in this plot area"], "PLAIN DOWN"];  
    DZE_ActionInProgress = false;
    };

if (!_hasitem) exitWith {cutText
[format["Needs 4x woodlumbers + 4xPlywood"], "PLAIN DOWN"];
DZE_ActionInProgress = false;
};
if (!_hastool) exitWith {cutText
[format["Needs a Toolbox"], "PLAIN DOWN"];
DZE_ActionInProgress = false;
};

if (_hasitem && _hastool) then {

 

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


_cancel = false;
_isPerm = false;
_reason = "";
_vehicle = vehicle player;
_inVehicle = (_vehicle != player);
_canDo = call fnc_actionAllowed;

helperDetach = false;

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;


_classname =  "MAP_kulna";    
_classnametmp = _classname;
_text =         getText (configFile >> "CfgVehicles" >> _classname >> "displayName");
_ghost = getText (configFile >> "CfgVehicles" >> _classname >> "ghostpreview");

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

_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,5,1];
};

_isPole = (_classname == "Plastic_Pole_EP1_DZ");
_isLandFireDZ = (_classname == "Land_Fire_DZ");

_distance = DZE_PlotPole select 1;

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

_location = [0,0,0];
    _isOk = true;

    // get inital players position
    _location1 = [player] call FNC_GetPos;
    _dir = getDir player;

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

    _object = createVehicle [_classname, _location, [], 0, "CAN_COLLIDE"];
    //Build gizmo
    _objectHelper = "Sign_sphere10cm_EP1" createVehicle _location;
    _helperColor = "#(argb,8,8,3)color(0,0,0,0,ca)";
    _objectHelper setobjecttexture [0,_helperColor];
    _objectHelper attachTo [player,_offset];
    _object attachTo [_objectHelper,[0,0,0]];
    _position = [_objectHelper] call FNC_GetPos;
    
    _objHDiff = 0;

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

    while {_isOk} do {

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

        if (DZE_Q) then {
            DZE_Q = false;
            _zheightdirection = "up";
            _zheightchanged = true;
        };
        if (DZE_Z) then {
            DZE_Z = false;
            _zheightdirection = "down";
            _zheightchanged = true;
        };
        if (DZE_Q_alt) then {
            DZE_Q_alt = false;
            _zheightdirection = "up_alt";
            _zheightchanged = true;
        };
        if (DZE_Z_alt) then {
            DZE_Z_alt = false;
            _zheightdirection = "down_alt";
            _zheightchanged = true;
        };
        if (DZE_Q_ctrl) then {
            DZE_Q_ctrl = false;
            _zheightdirection = "up_ctrl";
            _zheightchanged = true;
        };
        if (DZE_Z_ctrl) then {
            DZE_Z_ctrl = false;
            _zheightdirection = "down_ctrl";
            _zheightchanged = true;
        };
        if (DZE_4) then {
            _rotate = true;
            DZE_4 = false;
            _dir = -45;
        };
        if (DZE_6) then {
            _rotate = true;
            DZE_6 = false;
            _dir = 45;
        };
        
        if (DZE_F and _canDo) then {    
            if (helperDetach) then {
                _objectHelperDir = getDir _objectHelper;
                _objectHelper attachTo [player];
                _objectHelper setDir _objectHelperDir-(getDir player);
                helperDetach = false;
            } else {
                _objectHelperDir = getDir _objectHelper;
                detach _objectHelper;
                [_objectHelper]    call FNC_GetSetPos;
                _objectHelper setVelocity [0,0,0]; //fix sliding glitch
                helperDetach = true;
            };
            DZE_F = false;
        };

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

        };

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

            _position = [_objectHelper] call FNC_GetPos;

            if(_zheightdirection == "up") then {
                _position set [2,((_position select 2)+0.1)];
                _objHDiff = _objHDiff + 0.1;
            };
            if(_zheightdirection == "down") then {
                _position set [2,((_position select 2)-0.1)];
                _objHDiff = _objHDiff - 0.1;
            };

            if(_zheightdirection == "up_alt") then {
                _position set [2,((_position select 2)+1)];
                _objHDiff = _objHDiff + 1;
            };
            if(_zheightdirection == "down_alt") then {
                _position set [2,((_position select 2)-1)];
                _objHDiff = _objHDiff - 1;
            };

            if(_zheightdirection == "up_ctrl") then {
                _position set [2,((_position select 2)+0.01)];
                _objHDiff = _objHDiff + 0.01;
            };
            if(_zheightdirection == "down_ctrl") then {
                _position set [2,((_position select 2)-0.01)];
                _objHDiff = _objHDiff - 0.01;
            };

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

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

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

    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;
        deleteVehicle _object;
        detach _objectHelper;
        deleteVehicle _objectHelper;
    };

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

    if(abs(_objHDiff) > 15) exitWith {
        _isOk = false;
        _cancel = true;
        _reason = "Cannot move up or down more than 15 meters";
        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(!_cancel) then {
    _classname = _classnametmp;

    // Start Build
    _tmpbuilt = createVehicle [_classname, _location, [], 0, "CAN_COLLIDE"];
    _tmpbuilt setdir _dir;
    _location = _position;

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

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

    cutText [format[(localize "str_epoch_player_138"),_text], "PLAIN DOWN"];

//////////////////////////////////////////////////##########START TO BUILD AND REMOVE OBJETS
player playActionNow "Medic";
[player,"repair",0,false,10] call dayz_zombieSpeak;
[player,10,true,(getPosATL player)] spawn player_alertZombies;
sleep 3;
_removed = [["PartWoodLumber",4],["PartWoodPlywood",4]] call player_removeItems;    
    cutText [format[localize "str_build_01",_text], "PLAIN DOWN"];

if (_isPole) then {
                    [] spawn player_plotPreview;
                };

                _tmpbuilt setVariable ["OEMPos",_location,true];
                _tmpbuilt setVariable ["CharacterID",_combination,true];

//_charID = dayz_characterID;
//_activatingPlayer = player;
//PVDZ_obj_Publish = [dayz_characterID,_tmpbuilt,[_dir,_location],[]];
//PVDZ_ovj_Publish = [_tmpbuilt,[_dir,_location],_classname,true,_charid,_activatingPlayer];

 


PVDZ_obj_Publish = [dayz_characterID,_tmpbuilt,[_dir,_location,dayz_playerUID],_classname];
publicVariableServer  "PVDZ_obj_Publish";


 
cutText [format["nice!its a workshop"], "PLAIN DOWN",3];
 

player reveal _tmpbuilt;
 
DZE_ActionInProgress = false;

            } else {
                deleteVehicle _tmpbuilt;
                cutText [(localize "str_epoch_player_46") , "PLAIN DOWN"];
                
DZE_ActionInProgress = false;
            };
 };
DZE_ActionInProgress = false;
snapTutorial = false;
[0,0,0] call fnc_snapActionCleanup;
call fnc_initSnapPointsCleanup;            

 

if anyone knows where i fail.. please ... :) ...  ***i was trying it with and without DZE_permanentPlot

also this is not to craft with right click on items... the craft its througt scroll menu

 

the new 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"];

//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 {

        _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

9 answers to this question

Recommended Posts

  • 0
Spoiler

// If an array was passed redirect to vanilla player_build (Epoch items pass a string)

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

//workshop by juanday with base on player_buid/modular_build

private ["_playerPos","_nearRestr","_hastool","_hasitem","_removed","_location","_pos","_dir","_classname","_item","_cancel","_reason","_started","_finished","_animState","_isMedic","_dis","_sfx","_tmpbuilt","_onLadder","_require","_text","_offset","_isOk","_location1","_location2","_counter","_limit","_proceed","_num_removed","_position","_object","_canBuildOnPlot","_distance","_classnametmp","_ghost","_lockable","_zheightchanged","_rotate","_combination_1","_combination_2","_combination_3","_combination_4","_combination","_combination_1_Display","_combinationDisplay","_zheightdirection","_abort","_isNear","_needNear","_vehicle","_inVehicle","_objHDiff","_isAllowedUnderGround","_canBuild"];

if (dayz_actionInProgress) exitWith {localize "str_epoch_player_40" call dayz_rollingMessages;};
dayz_actionInProgress = true;
_pos = [player] call FNC_GetPos;
_inventory = items player;
_hastool =     "ItemToolbox" in _inventory;
_hasitem = [["PartWoodLumber",4],["PartWoodPlywood",4]] call player_checkItems;
_playerPos = getPosATL player;
_nearRestr = count nearestObjects [_playerPos, ["MAP_kulna"], 45] > 0;
 

 


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

_cancel = false;
_canBuildOnPlot = false;

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


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

if (!_hasitem) exitWith {cutText
[format["Needs 4x woodlumbers + 4xPlywood"], "PLAIN DOWN"];
DZE_ActionInProgress = false;
};
if (!_hastool) exitWith {cutText
[format["Needs a Toolbox"], "PLAIN DOWN"];
DZE_ActionInProgress = false;
};

if (_hasitem && _hastool) then {


DZE_Q = false;
DZE_Z = false;

DZE_Q_alt = false;
DZE_Z_alt = false;

DZE_Q_ctrl = false;
DZE_Z_ctrl = false;

DZE_5 = false;
DZE_4 = false;
DZE_6 = false;

DZE_cancelBuilding = false;

call gear_ui_init;
closeDialog 1;

_classname =  "MAP_kulna";    
_classnametmp = _classname;
_text =         getText (configFile >> "CfgVehicles" >> _classname >> "displayName");
_ghost = getText (configFile >> "CfgVehicles" >> _classname >> "ghostpreview");


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

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

    _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,5,1];
};

    _location = [0,0,0];
    _isOk = true;
    _location1 = [player] call FNC_GetPos; // get inital players position
    _dir = getDir player;

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

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

    

    _object attachTo [player,_offset];

    _position = getPosATL _object;

    localize "str_epoch_player_45" call dayz_rollingMessages;

    _objHDiff = 0;

    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 = 180;
        };
        if (DZE_6) then {
            _rotate = true;
            DZE_6 = false;
            _dir = 0;
        };

        if(_rotate) then {
            _object setDir _dir;
            _object setPosATL _position;
            //diag_log format["DEBUG Rotate BUILDING POS: %1", _position];
        };

        if(_zheightchanged) then {
            detach _object;

            _position = getPosATL _object;

            if(_zheightdirection == "up") then {
                _position set [2,((_position select 2)+0.1)];
                _objHDiff = _objHDiff + 0.1;
            };
            if(_zheightdirection == "down") then {
                _position set [2,((_position select 2)-0.1)];
                _objHDiff = _objHDiff - 0.1;
            };

            if(_zheightdirection == "up_alt") then {
                _position set [2,((_position select 2)+1)];
                _objHDiff = _objHDiff + 1;
            };
            if(_zheightdirection == "down_alt") then {
                _position set [2,((_position select 2)-1)];
                _objHDiff = _objHDiff - 1;
            };

            if(_zheightdirection == "up_ctrl") then {
                _position set [2,((_position select 2)+0.01)];
                _objHDiff = _objHDiff + 0.01;
            };
            if(_zheightdirection == "down_ctrl") then {
                _position set [2,((_position select 2)-0.01)];
                _objHDiff = _objHDiff - 0.01;
            };

            _object setDir (getDir _object);

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

            _object setPosATL _position;

            //diag_log format["DEBUG Change BUILDING POS: %1", _position];

            _object attachTo [player];

        };

        uiSleep 0.5;

        _location2 = getPosATL player;

        if(DZE_5) exitWith {
            _isOk = false;
            detach _object;
            _dir = getDir _object;
            _position = getPosATL _object;
            //diag_log format["DEBUG BUILDING POS: %1", _position];
            deleteVehicle _object;
        };

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

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

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

        if (DZE_cancelBuilding) exitWith {
            _isOk = false;
            _cancel = true;
            _reason = localize "STR_EPOCH_PLAYER_46";
            detach _object;
            deleteVehicle _object;
        };
    };

    //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 {

        _classname = _classnametmp;

        // Start Build
        _tmpbuilt = createVehicle [_classname, _location, [], 0, "CAN_COLLIDE"];

        _tmpbuilt setdir _dir;

        // Get position based on object
        _location = _position;

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

        _tmpbuilt setPosATL _location;

        format[localize "str_epoch_player_138",_text] call dayz_rollingMessages;
//////////////////////////////////////////////////##########START TO BUILD AND REMOVE OBJETS
player playActionNow "Medic";
[player,"repair",0,false,10] call dayz_zombieSpeak;
[player,10,true,(getPosATL player)] spawn player_alertZombies;
sleep 3;
_removed = [["PartWoodLumber",4],["PartWoodPlywood",4]] call player_removeItems;    
    cutText [format[localize "str_build_01",_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");
            };
        };

        


            
                if (DZE_permanentPlot) then {
                            _tmpbuilt setVariable ["ownerPUID",dayz_playerUID,true];
                            
                                _friendsArr = [[dayz_playerUID,toArray (name player)]];
                                _tmpbuilt setVariable ["plotfriends", _friendsArr, true];
                                PVDZ_obj_Publish = [dayz_characterID,_tmpbuilt,[_dir,_location,dayz_playerUID],_friendsArr];
                            
                        
                            
                            publicVariableServer "PVDZ_obj_Publish";

cutText [format["nice!its a workshop"], "PLAIN DOWN",3];
                        };
                    
                
                
            } else {
                deleteVehicle _tmpbuilt;
                localize "str_epoch_player_46" call dayz_rollingMessages;
            };

};

dayz_actionInProgress = false;

 

Link to comment
Share on other sites

  • 0

this going make me crazy ! craft, place the objet and save as well on db  but at the next restart i get stuck on loading screen..

this is what hive says:

2016-12-07 20:26:28 HiveExt: [Information] Method: 308 Params: 11:MAP_kulna:0:10:[1.724,[14008.836,15283.684,-0.472],76561198257572970]:[[76561198257572970,[106,117,97,110,109,106,117,97,110,109]]]:[]:0:14149215284140:

this is a pic of the objet "MAP_Kulna" saved on my db

Sin_t_tulo.jpg

into my custom variables.sqf i have:

DayZ_SafeObjects = ["MAP_kulna","Base_Fire_DZ","WoodenGate_1","WoodenGate_2",........"the others"];

hers the main code: (the objets is spawned by scroll menu, not whit right click)

Spoiler

 

// If an array was passed redirect to vanilla player_build (Epoch items pass a string)

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


private ["_playerPos","_nearRestr","_hastool","_hasitem","_removed","_location","_pos","_dir","_classname","_item","_cancel","_reason","_started","_finished","_animState","_isMedic","_dis","_sfx","_tmpbuilt","_onLadder","_require","_text","_offset","_isOk","_location1","_location2","_counter","_limit","_proceed","_num_removed","_position","_object","_canBuildOnPlot","_distance","_classnametmp","_ghost","_lockable","_zheightchanged","_rotate","_combination_1","_combination_2","_combination_3","_combination_4","_combination","_combination_1_Display","_combinationDisplay","_zheightdirection","_abort","_isNear","_needNear","_vehicle","_inVehicle","_objHDiff","_isAllowedUnderGround","_canBuild"];

if (dayz_actionInProgress) exitWith {localize "str_epoch_player_40" call dayz_rollingMessages;};
dayz_actionInProgress = true;
_pos = [player] call FNC_GetPos;
_inventory = items player;
_hastool =     "ItemToolbox" in _inventory;
_hasitem = [["PartWoodLumber",4],["PartWoodPlywood",4]] call player_checkItems;
_playerPos = getPosATL player;
_nearRestr = count nearestObjects [_playerPos, ["MAP_kulna"], 45] > 0;
 

 


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

_cancel = false;
_canBuildOnPlot = false;

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


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

if (!_hasitem) exitWith {cutText
[format["Needs 4x woodlumbers + 4xPlywood"], "PLAIN DOWN"];
DZE_ActionInProgress = false;
};
if (!_hastool) exitWith {cutText
[format["Needs a Toolbox"], "PLAIN DOWN"];
DZE_ActionInProgress = false;
};

if (_hasitem && _hastool) then {


DZE_Q = false;
DZE_Z = false;

DZE_Q_alt = false;
DZE_Z_alt = false;

DZE_Q_ctrl = false;
DZE_Z_ctrl = false;

DZE_5 = false;
DZE_4 = false;
DZE_6 = false;

DZE_cancelBuilding = false;

call gear_ui_init;
closeDialog 1;

_classname =  "MAP_kulna";    
_classnametmp = _classname;
_text =         getText (configFile >> "CfgVehicles" >> _classname >> "displayName");
_ghost = getText (configFile >> "CfgVehicles" >> _classname >> "ghostpreview");


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

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

    _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,5,1];
};

    _location = [0,0,0];
    _isOk = true;
    _location1 = [player] call FNC_GetPos; // get inital players position
    _dir = getDir player;

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

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

    

    _object attachTo [player,_offset];

    _position = getPosATL _object;

    localize "str_epoch_player_45" call dayz_rollingMessages;

    _objHDiff = 0;

    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 = 180;
        };
        if (DZE_6) then {
            _rotate = true;
            DZE_6 = false;
            _dir = 0;
        };

        if(_rotate) then {
            _object setDir _dir;
            _object setPosATL _position;
            //diag_log format["DEBUG Rotate BUILDING POS: %1", _position];
        };

        if(_zheightchanged) then {
            detach _object;

            _position = getPosATL _object;

            if(_zheightdirection == "up") then {
                _position set [2,((_position select 2)+0.1)];
                _objHDiff = _objHDiff + 0.1;
            };
            if(_zheightdirection == "down") then {
                _position set [2,((_position select 2)-0.1)];
                _objHDiff = _objHDiff - 0.1;
            };

            if(_zheightdirection == "up_alt") then {
                _position set [2,((_position select 2)+1)];
                _objHDiff = _objHDiff + 1;
            };
            if(_zheightdirection == "down_alt") then {
                _position set [2,((_position select 2)-1)];
                _objHDiff = _objHDiff - 1;
            };

            if(_zheightdirection == "up_ctrl") then {
                _position set [2,((_position select 2)+0.01)];
                _objHDiff = _objHDiff + 0.01;
            };
            if(_zheightdirection == "down_ctrl") then {
                _position set [2,((_position select 2)-0.01)];
                _objHDiff = _objHDiff - 0.01;
            };

            _object setDir (getDir _object);

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

            _object setPosATL _position;

            //diag_log format["DEBUG Change BUILDING POS: %1", _position];

            _object attachTo [player];

        };

        uiSleep 0.5;

        _location2 = getPosATL player;

        if(DZE_5) exitWith {
            _isOk = false;
            detach _object;
            _dir = getDir _object;
            _position = getPosATL _object;
            //diag_log format["DEBUG BUILDING POS: %1", _position];
            deleteVehicle _object;
        };

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

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

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

        if (DZE_cancelBuilding) exitWith {
            _isOk = false;
            _cancel = true;
            _reason = localize "STR_EPOCH_PLAYER_46";
            detach _object;
            deleteVehicle _object;
        };
    };

    //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 {

        _classname = _classnametmp;

        // Start Build
        _tmpbuilt = createVehicle [_classname, _location, [], 0, "CAN_COLLIDE"];

        _tmpbuilt setdir _dir;

        // Get position based on object
        _location = _position;

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

        _tmpbuilt setPosATL _location;

        format[localize "str_epoch_player_138",_text] call dayz_rollingMessages;
//////////////////////////////////////////////////##########START TO BUILD AND REMOVE OBJETS
player playActionNow "Medic";
[player,"repair",0,false,10] call dayz_zombieSpeak;
[player,10,true,(getPosATL player)] spawn player_alertZombies;
sleep 3;
_removed = [["PartWoodLumber",4],["PartWoodPlywood",4]] call player_removeItems;    
    cutText [format[localize "str_build_01",_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");
            };
        };

        


            
                if (DZE_permanentPlot) then {
                            _tmpbuilt setVariable ["ownerPUID",dayz_playerUID,true];
                            
                                _friendsArr = [[dayz_playerUID,toArray (name player)]];
                                _tmpbuilt setVariable ["plotfriends", _friendsArr, true];
                                PVDZ_obj_Publish = [dayz_characterID,_tmpbuilt,[_dir,_location,dayz_playerUID],_friendsArr];
                            
                        
                            
                            publicVariableServer "PVDZ_obj_Publish";

cutText [format["nice!its a workshop"], "PLAIN DOWN",3];
                        };
                    
                
                
            } else {
                deleteVehicle _tmpbuilt;
                localize "str_epoch_player_46" call dayz_rollingMessages;
            };

};

dayz_actionInProgress = false;

 

this work IF DZE_permanentplot = false;  but not in true.

hers how its look my console when i get stuck on loading screen

Sin_t_tulo.jpg

 

maybe my issue is in here?

if (DZE_permanentPlot) then {
                            _tmpbuilt setVariable ["ownerPUID",dayz_playerUID,true];
                            
                                _friendsArr = [[dayz_playerUID,toArray (name player)]];
                                _tmpbuilt setVariable ["plotfriends", _friendsArr, true];
                                PVDZ_obj_Publish = [dayz_characterID,_tmpbuilt,[_dir,_location,dayz_playerUID],_friendsArr];
                            
                        
                            
                            publicVariableServer "PVDZ_obj_Publish";

cutText [format["nice!its a workshop"], "PLAIN DOWN",3];
                        };

 

Link to comment
Share on other sites

  • 0

@icomrade tnks for answer me.  well see hers my db with the objet saved:

Sin_t_tulo.jpg

every colums seems to be right. also i was seeing on @ebaydayz rebuild of player_deploy.sqf for deployanything. (uses a similar base) https://github.com/mudzereli/DayZEpochDeployableBike/pull/2/files#diff-0f1be61ce17ed82245242b210c311ac1

but cannot find my fix.

dont know if is into this part my issue or where

PVDZ_obj_Publish = [dayz_characterID,_tmpbuilt,[_dir,_location,dayz_playerUID],_friendsArr];

my rpt says:

Spoiler

 1:02:00 "HIVE: Streamed 6 objects"
 1:02:01 Error in expression <1 select 0;
_backpackcargo = _inventory select 2 select 0;
_weaponqty = _invento>
 1:02:01   Error position: <select 2 select 0;
_weaponqty = _invento>
 1:02:01   Error foreach: Divisor cero
 1:02:01 File z\addons\dayz_server\system\server_monitor.sqf, line 231
 1:03:51 Client: Remote object 2:10 not found
 1:03:51 Client: Remote object 2:11 not found
 1:03:51 Client: Remote object 2:12 not found
 1:03:51 Warning: Cleanup player - person 2:0 not found

but if i delete the objet from db using navicat.. the server proceed , loaddd everythings fine and do not drop errors on rpt.

Spoiler

1:05:21 "HIVE: Streamed 5 objects"
 1:05:22 "HIVE: BENCHMARK - Server_monitor.sqf finished streaming 5 objects in 0.394997 seconds (unscheduled)"
 1:05:22 "Total Number of spawn locations 6"

heres my server_monitor. (around the issue droped by rpt)

Spoiler

//Dont add inventory for traps.
        if (!_isDZ_Buildable && !_isTrapItem) then {
        
        //weaponworkshop remove ammo
//call fnc_wra;
//weaponworkshop remove ammo

            clearWeaponCargoGlobal _object;
            clearMagazineCargoGlobal _object;
            clearBackpackCargoGlobal _object;
            if( (count _inventory > 0) && !_isPlot && !_doorLocked) then {
                if (_type in DZE_LockedStorage) then {
                    // Do not send big arrays over network! Only server needs these
                    _object setVariable ["WeaponCargo",(_inventory select 0),false];
                    _object setVariable ["MagazineCargo",(_inventory select 1),false];
                    _object setVariable ["BackpackCargo",(_inventory select 2),false];
                } else {
                    _weaponcargo = _inventory select 0 select 0;
                    _magcargo = _inventory select 1 select 0;
                    _backpackcargo = _inventory select 2 select 0;
                   _weaponqty = _inventory select 0 select 1;
                    {_object addWeaponCargoGlobal [_x, _weaponqty select _foreachindex];} foreach _weaponcargo;

                    _magqty = _inventory select 1 select 1;
                    {_object addMagazineCargoGlobal [_x, _magqty select _foreachindex];} foreach _magcargo;

                    _backpackqty = _inventory select 2 select 1;
                    {_object addBackpackCargoGlobal [_x, _backpackqty select _foreachindex];} foreach _backpackcargo;
                };
            } else {
                if (DZE_permanentPlot && _isPlot) then {
                    _object setVariable ["plotfriends", _inventory, true];
                };
                if (DZE_doorManagement && _doorLocked) then {
                    _object setVariable ["doorfriends", _inventory, true];
                };
            };
        };

 

Link to comment
Share on other sites

  • 0
8 hours ago, icomrade said:

Does this object need the uids stored in the inventory field like a plotpole? if not, just save the inventory as an empty array

no, its not an storage objet.  sound logic your answer..  do you say something like this?

 _tmpbuilt setVariable ["OEMPos",_location,true];
 _tmpbuilt setVariable ["CharacterID",dayz_characterID,true];
                           
PVDZ_obj_Publish = [dayz_characterID,_tmpbuilt,[_dir,_location],_classname,[]];
publicVariableServer "PVDZ_obj_Publish";

mmm nop do not save in db using it

Link to comment
Share on other sites

  • 0

@icomrade  you dont know.. how im glad i feel just right now.. never think my fix can be into the server_monitor.sqf  tnks but a lot!!!

the workshop uses a lot or other objets so i can do it to use a better syntax on server_monitor.sqf ? see:

into my custom variables:

DZE_workshop = ["MAP_kulna","Land_Misc_Well_L_EP1","MAP_Misc_Boogieman","MAP_Shed_W01","MAP_P_Stavebni_kozy","MAP_parabola_big","MAP_office_table_a","Loudspeakers_EP1","MAP_Dkamna_bila","MAP_plot_green_draty","GUE_WarfareBFieldhHospital","MAP_bouda2_vnitrek","MAP_deutshe_mini","MAP_Mil_Mil_Guardhouse","MAP_Pristresek_mensi","Land_fort_bagfence_corner","MAP_plot_provizorni","M2StaticMG_US_EP1","DSHKM_Gue","SearchLight_RUS"];

 

now into my server_monitor.sqf

_doorLocked = _type in DZE_DoorsLocked;
		_isPlot = _type == "Plastic_Pole_EP1_DZ";
	    _isworkshop = _type in DZE_workshop;
if( (count _inventory > 0) && !_isPlot && !_doorLocked && !_isworkshop) then {

THANKS!!!!!!!!!!!!! FOR EVER :biggrin:

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

×
×
  • Create New...