Jump to content

[Release] - A Plot for life v2.5. Keep your buildables on death. Take plot ownership


Recommended Posts

It would be really nice if you wrote a tutorial for this script. I´m a "middlenoob" in scripting, and i have to see what changes were done in files. Only copy files over others don`t teach me anything, and i can`t fix bugs on my own. Your work here is great, and it`s ok if you say that would be to much work to explain every step. But i think i "speak" for many users here, so you can think about it. Perhaps i had misunderstood something, because i`m using only schoolenglish. Keep up you great work here :)

 

Greetz, ed

 

Hi Ed,

 

I am going to provide a step by step guide to installing after I have the main bugs ironed out.  

 

The logic of what the mod does is this (more or less).

 

The ownersID (the SteamID) is saved in an objects worldspace field as an additional array on the end.  This is because what can be accessed from the DB by the game is very limited (deliberately so) by the hiveext.dll code.  A lot of mods place values they need to be persistent in the object_data.characterID field for the object in the DB.  Whilst this worked and was used by me for the Plot for Life v1 mod, I always wanted to move away from it to avoid clashes with other mods and as it is limited to numbers only.

 

When the DB loads in I put this extra value in to a variable attached to the object being read or default it to "0" if the 'extra variable' does not exist.

 

In each script that needs to check for the objects owner, it checks for the owners characterID against the objects characterID.  I am now getting it to check the new objectPUID variable against the playersUID (SteamID).

 

The nice thing about this is that I have left more of the code using the characterID for the check in place so It could be amended to use either system based on a system variable the server owner sets.  I will look at that after the debugging settles down.

 

Someone has proposed that this mod be included in the Epoch code on GitHub here.  I am all for it if I make it switchable so server Owners can choose to use it or not.  If you are in agreement then let vbawol know on the GitHub.

Link to comment
Share on other sites

Try the player_build that i posted

 

There's not a single piece of code from the snap builder in that, how would that ever work? Im not having any issues with the Plot Pole for Life mod, its just that i cant seem able to combine it with the snap build mod.

Link to comment
Share on other sites

There's not a single piece of code from the snap builder in that, how would that ever work? Im not having any issues with the Plot Pole for Life mod, its just that i cant seem able to combine it with the snap build mod.

 

Will have a look in a sec.  They should not affect each other and I would like to have the snapping working even on my test server.

 

Ok, I have some SQL that will put a given value in to the right position in the worldspace field.  If you know the players value in the characterID relates to a SteamID then you can use it to update blocks of objects with a specific characterID.

 

Any interest then I will pout it up.  It is for more experienced people though.

Link to comment
Share on other sites

Edited the post

 

Thanks, that seems to have done the trick! At first i was like shit, now the plotpole for life isnt working cause im not seeing to ghost feature, but then i looked at the code and saw it was commented out :P

Link to comment
Share on other sites

Ok, have tried the safe functionality and can build, unlock, lock, unlock, pack, build, restart server, log back in, unlock, lock.

 

Seems it is working so most likely something else that is causing the problem.  

 

Possibly the snapbuild especially as there seems to be a fair amount of issues with it based on the last two pages of posts.

 

Would rather have this mod confirmed as working before bringing others in to the mix.

 

Next is tagging.

Link to comment
Share on other sites

Ok, have tried the safe functionality and can build, unlock, lock, unlock, pack, build, restart server, log back in, unlock, lock.

 

Seems it is working so most likely something else that is causing the problem.  

 

Possibly the snapbuild especially as there seems to be a fair amount of issues with it based on the last two pages of posts.

 

Would rather have this mod confirmed as working before bringing others in to the mix.

 

Next is tagging.

 

But sure the player_build.sqf file shouldn't stop the option from appearing i thought that was all done in fn_selfactions?

Link to comment
Share on other sites

Can you test this safe issue i'm having on your server?

 

Haven't got the infistar tool mate so i cant test for you sorry. The only thing not working right now is tagging people as friendly but RB is working on that i think.

Link to comment
Share on other sites

I just mean do you get an option to unlock your safes

 

Okay, i can confirm the problem you are experiencing. The safe deletes itself after you open them. It is NOT an infistar problem since i dont have that tool installed.

Link to comment
Share on other sites

But sure the player_build.sqf file shouldn't stop the option from appearing i thought that was all done in fn_selfactions?

 

Sorry, not sure what you mean.

 

I can choose to build a safe and actually build it.

I can then choose to unlock the safe and unlock it.

I can choose to lock or pack the safe and both the lock and pack actions are working for me.

The safe is still there after reboot and all the actions appear as expected and the actual functions work as expected for me.

 

If possible, it may be worth trying just this mod on its own and checking it is all working before adding anything else.  After that add one thing at a time and test.  A painful and laborious process but it can pick up a number of issues as you go rather than when it is all done and it feels like you are trying to find the end to a ball of wool.

 

The remove lock and then remove door/doorway is not working still.  Did it work like that in vanilla Epoch as very little was changed, same with tagging.

 

What exactly is not working with tagging.  Your old friends will need to be retagged as it is looking for playerUIDs now and not characterIDs.  You also may need to clear down the old tag ids in the character_data.currentstate field as the data will just grow and grow (there is no untagging).

Link to comment
Share on other sites

Okay, i can confirm the problem you are experiencing. The safe deletes itself after you open them. It is NOT an infistar problem since i dont have that tool installed.

 

Do not use the Player_Build i provided i must of broke something. The thing is now old safes can be unlocked but not re locked again but new ones work fine except only the person who placed it can lock it, is this done by design Rimblock?

 

Thanks

Link to comment
Share on other sites

Okay, i can confirm the problem you are experiencing. The safe deletes itself after you open them. It is NOT an infistar problem since i dont have that tool installed.

 

How soon after you open them ?.

 

I opened one, put a sandbag inside and then packed it without an issue.

 

The safe is in the DB as well so not sure why this would be deleted as part of this mod.

 

Has anyone tried doing the same with vanilla Epoch as I have seen a number of threads with safe issues posted since 1.0.5.

 

Edit: one I noticed.

Link to comment
Share on other sites

Do not use the Player_Build i provided i must of broke something. The thing is now old safes can be unlocked but not re locked again but new ones work fine except only the person who placed it can lock it, is this done by design Rimblock?

 

Thanks

 

Looking at the code, yes it is by design by the Epoch team.  I have made no change to this logic, only that is uses the playerUID to check and where it gets it from.  Packing will also not work as for packing it locks the safe first.

 

I can, however, give you some sql you can run to change the ownership of the safe to the owners playerUID (steamID) so it will work with this mod.

Link to comment
Share on other sites

It was actually the file that Pro_Speedy gave me that broke the safes. Managed to fix it though, got everything working (safes, snapping, plot pole for life) the way it should using this. Ghosting and friendly tagging still need to be fixed though.

 

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

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

// disallow building if too many objects are found within 30m
if((count ((getPosATL player) nearObjects ["All",30])) >= DZE_BuildingLimit) exitWith {DZE_ActionInProgress = false; cutText [(localize "str_epoch_player_41"), "PLAIN DOWN"];};

_onLadder =    (getNumber (configFile >> "CfgMovesMaleSdr" >> "States" >> (animationState player) >> "onLadder")) == 1;
_isWater = dayz_isSwimming;
_cancel = false;
_reason = "";
_canBuildOnPlot = false;

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

_playerUID = getPlayerUID player;

DZE_Q = false;
DZE_Z = false;

DZE_Q_alt = false;
DZE_Z_alt = false;

DZE_Q_ctrl = false;
DZE_Z_ctrl = false;

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

DZE_cancelBuilding = false;

call gear_ui_init;
closeDialog 1;

if (_isWater) exitWith {DZE_ActionInProgress = false; cutText [localize "str_player_26", "PLAIN DOWN"];};
if (_inVehicle) exitWith {DZE_ActionInProgress = false; cutText [(localize "str_epoch_player_42"), "PLAIN DOWN"];};
if (_onLadder) exitWith {DZE_ActionInProgress = false; cutText [localize "str_player_21", "PLAIN DOWN"];};
if (player getVariable["combattimeout", 0] >= time) exitWith {DZE_ActionInProgress = false; cutText [(localize "str_epoch_player_43"), "PLAIN DOWN"];};

_item =    _this;

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

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

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


if(_abort) exitWith {
    cutText [format[(localize "str_epoch_player_135"),_reason,_distance], "PLAIN DOWN"];
    DZE_ActionInProgress = false;
};

_classname =     getText (configFile >> "CfgMagazines" >> _item >> "ItemActions" >> "Build" >> "create");
_classnametmp = _classname;
_require =  getArray (configFile >> "cfgMagazines" >> _this >> "ItemActions" >> "Build" >> "require");
_text =         getText (configFile >> "CfgVehicles" >> _classname >> "displayName");
_ghost = getText (configFile >> "CfgVehicles" >> _classname >> "ghostpreview");

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

_requireplot = DZE_requireplot;
if(isNumber (configFile >> "CfgVehicles" >> _classname >> "requireplot")) then {
    _requireplot = getNumber(configFile >> "CfgVehicles" >> _classname >> "requireplot");
};

_isAllowedUnderGround = 1;
if(isNumber (configFile >> "CfgVehicles" >> _classname >> "nounderground")) then {
    _isAllowedUnderGround = getNumber(configFile >> "CfgVehicles" >> _classname >> "nounderground");
};

_offset = getArray (configFile >> "CfgVehicles" >> _classname >> "offset");
if((count _offset) <= 0) then {
    _offset = [0,1.5,0];
};

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

_distance = DZE_PlotPole select 0;
_needText = localize "str_epoch_player_246";

if(_isPole) then {
    _distance = DZE_PlotPole select 1;
};

// check for near plot
_findNearestPoles = nearestObjects [(vehicle player), ["Plastic_Pole_EP1_DZ"], _distance];
_findNearestPole = [];

{
    if (alive _x) then {
        _findNearestPole set [(count _findNearestPole),_x];
    };
} count _findNearestPoles;

_IsNearPlot = count (_findNearestPole);

// If item is plot pole && another one exists within 45m
if(_isPole && _IsNearPlot > 0) exitWith {  DZE_ActionInProgress = false; cutText [(localize "str_epoch_player_44") , "PLAIN DOWN"]; };

if(_IsNearPlot == 0) then {

    // Allow building of plot
    if(_requireplot == 0 || _isLandFireDZ) then {
        _canBuildOnPlot = true;
    };

} else {
    // Since there are plots nearby we check for ownership && then for friend status

    // check nearby plots ownership && then for friend status
    _nearestPole = _findNearestPole select 0;

    // Find owner
    _ownerID = _nearestPole getVariable ["ownerPUID","0"];

     diag_log format["Player_build start: [PlayerUID = %1]  [OwnerID = %2]", _playerUID, _ownerID];

    // check if friendly to owner
    if(_playerUID == _ownerID) then {  //Keep ownership
        // owner can build anything within his plot except other plots
        diag_log text "Player is owner";
        if(!_isPole) then {
            _canBuildOnPlot = true;
        };
    } else {
        // disallow building plot
        if(!_isPole) then {
            _friendlies        = player getVariable ["friendlyTo",[]];
            // check if friendly to owner
            if(_ownerID in _friendlies) then {
                _canBuildOnPlot = true;
            };
        };
    };
};

// _message
if(!_canBuildOnPlot) exitWith {  DZE_ActionInProgress = false; cutText [format[(localize "STR_EPOCH_PLAYER_135"),_needText,_distance] , "PLAIN DOWN"]; };

_missing = "";
_hasrequireditem = true;
{
    _hastoolweapon = _x in weapons player;
    if(!_hastoolweapon) exitWith { _hasrequireditem = false; _missing = getText (configFile >> "cfgWeapons" >> _x >> "displayName"); };
} count _require;

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

if (!_hasrequireditem) exitWith {DZE_ActionInProgress = false; cutText [format[(localize "str_epoch_player_137"),_missing] , "PLAIN DOWN"]; };
if (_hasrequireditem) then {

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

    // get inital players position
    _location1 = getPosATL player;
    _dir = getDir player;
    
    /*
        DOESNT SEEM TO WORK

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

    cutText [(localize "str_epoch_player_45"), "PLAIN DOWN"];
            
    /*
        Build snapping
    */
        
        player allowDamage false;
        SnappingOffset = _offset;
        SnappingDir = 0;
        SnappingSpotMarkers = [];
        SnappingEnabled = false;
        SnappedOffsetZ = 0;
        SnappingResetPos = false;

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

        _snapper = [_object, _classname] spawn snap_object;
        _key_monitor = [_isAllowedUnderGround] spawn player_buildControls ;
    
    /*
        / Build snapping
    */
    
    _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];

        };

        sleep 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 > 5) exitWith {
            _isOk = false;
            _cancel = true;
            _reason = "You've moved to far away from where you started building (within 5 meters)";
            detach _object;
            deleteVehicle _object;
        };
        
        /*
            Build Snapping
        */
        
        if(((SnappingOffset select 2) > 5) or ((SnappingOffset select 2) < -5)) exitWith {
            _isOk = false;
            _cancel = true;
            _reason = "Cannot move up or down more than 5 meters";
            detach _object;
        };
        
        /*
            / Build Snapping
        */
            
        if(abs(_objHDiff) > 5) exitWith {
            _isOk = false;
            _cancel = true;
            _reason = "Cannot move up || down more than 5 meters";
            detach _object;
            deleteVehicle _object;
        };

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

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

    terminate _snapper;
    terminate _key_monitor;
    player removeAction s_building_snapping;
    player allowDamage true;

    //No building on roads unless toggled
    if (!DZE_BuildOnRoads) then {
        if (isOnRoad _position) then { _cancel = true; _reason = "Cannot build on a road."; };
    };

    // No building in trader zones
    if(!canbuild) then { _cancel = true; _reason = "Cannot build in a city."; };

    if(!_cancel) then {

        _classname = _classnametmp;

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


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

        _limit = 3;

        if (DZE_StaticConstructionCount > 0) then {
            _limit = DZE_StaticConstructionCount;
        }
        else {
            if (isNumber (configFile >> "CfgVehicles" >> _classname >> "constructioncount")) then {
                _limit = getNumber(configFile >> "CfgVehicles" >> _classname >> "constructioncount");
            };
        };

        _isOk = true;
        _proceed = false;
        _counter = 0;

        while {_isOk} do {

            [10,10] call dayz_HungerThirst;
            player playActionNow "Medic";

            _dis=20;
            _sfx = "repair";
            [player,_sfx,0,false,_dis] call dayz_zombieSpeak;
            [player,_dis,true,(getPosATL player)] spawn player_alertZombies;

            r_interrupt = false;
            r_doLoop = true;
            _started = false;
            _finished = false;

            while {r_doLoop} do {
                _animState = animationState player;
                _isMedic = ["medic",_animState] call fnc_inString;
                if (_isMedic) then {
                    _started = true;
                };
                if (_started && !_isMedic) then {
                    r_doLoop = false;
                    _finished = true;
                };
                if (r_interrupt || (player getVariable["combattimeout", 0] >= time)) then {
                    r_doLoop = false;
                };
                if (DZE_cancelBuilding) exitWith {
                    r_doLoop = false;
                };
                sleep 0.1;
            };
            r_doLoop = false;


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

            if(_finished) then {
                _counter = _counter + 1;
            };

            cutText [format[(localize "str_epoch_player_139"),_text, _counter,_limit], "PLAIN DOWN"];

            if(_counter == _limit) exitWith {
                _isOk = false;
                _proceed = true;
            };

        };

        if (_proceed) then {

            _num_removed = ([player,_item] call BIS_fnc_invRemove);
            if(_num_removed == 1) then {

                cutText [format[localize "str_build_01",_text], "PLAIN DOWN"];

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

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

                if(_lockable > 1) then {

                    _combinationDisplay = "";

                    switch (_lockable) do {

                        case 2: { // 2 lockbox
                            _combination_1 = (floor(random 3)) + 100; // 100=red,101=green,102=blue
                            _combination_2 = floor(random 10);
                            _combination_3 = floor(random 10);
                            _combination = format["%1%2%3",_combination_1,_combination_2,_combination_3];
                            dayz_combination = _combination;
                            if (_combination_1 == 100) then {
                                _combination_1_Display = "Red";
                            };
                            if (_combination_1 == 101) then {
                                _combination_1_Display = "Green";
                            };
                            if (_combination_1 == 102) then {
                                _combination_1_Display = "Blue";
                            };
                            _combinationDisplay = format["%1%2%3",_combination_1_Display,_combination_2,_combination_3];
                        };

                        case 3: { // 3 combolock
                            _combination_1 = floor(random 10);
                            _combination_2 = floor(random 10);
                            _combination_3 = floor(random 10);
                            _combination = format["%1%2%3",_combination_1,_combination_2,_combination_3];
                            dayz_combination = _combination;
                            _combinationDisplay = _combination;
                        };

                        case 4: { // 4 safe
                            _combination_1 = floor(random 10);
                            _combination_2 = floor(random 10);
                            _combination_3 = floor(random 10);
                            _combination_4 = floor(random 10);
                            _combination = format["%1%2%3%4",_combination_1,_combination_2,_combination_3,_combination_4];
                            dayz_combination = _combination;
                            _combinationDisplay = _combination;
                        };
                    };

                    _tmpbuilt setVariable ["CharacterID",_combination,true];
                    _tmpbuilt setVariable ["ownerPUID",_playerUID,true];


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

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


                } else {
                    _tmpbuilt setVariable ["CharacterID",dayz_characterID,true];
                    _tmpbuilt setVariable ["ownerPUID",_playerUID,true];
                    
                    // fire?
                    if(_tmpbuilt isKindOf "Land_Fire_DZ") then {
                        _tmpbuilt spawn player_fireMonitor;
                    } else {
                        PVDZE_obj_Publish = [dayz_characterID,_tmpbuilt,[_dir,_location,_playerUID],_classname];
                        publicVariableServer "PVDZE_obj_Publish";
                    };
                };
            } else {
                deleteVehicle _tmpbuilt;
                cutText [(localize "str_epoch_player_46") , "PLAIN DOWN"];
            };

        } else {
            r_interrupt = false;
            if (vehicle player == player) then {
                [objNull, player, rSwitchMove,""] call RE;
                player playActionNow "stop";
            };

            deleteVehicle _tmpbuilt;

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

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

DZE_ActionInProgress = false;

Link to comment
Share on other sites

Still need more info on what is not working with tagging.   Not seen any details yet.

 

It is now past midnight here so I am off to get some sleep but as much info as possible please and I will hit it in the morning.

Link to comment
Share on other sites

Looking at the code, yes it is by design by the Epoch team.  I have made no change to this logic, only that is uses the playerUID to check and where it gets it from.  Packing will also not work as for packing it locks the safe first.

 

I can, however, give you some sql you can run to change the ownership of the safe to the owners playerUID (steamID) so it will work with this mod.

 

That would be great as long it's automatic and not manual there are far too many safes on my map

 

Thanks

Link to comment
Share on other sites

The inability to downgrade the Cinder Garage Door is due to this mod (have just build and tested another vanilla test server).  Just trying to track back why....

 

Ok, found the problem and have found a solution for it.  Will post up a new version later today.

 

From now on I will be using the following naming convention.

 

[Major Change] = i.e. Changing how the ownerUID is stored or an overhaul to allow this mod to exist with Epoch and be turned on or off.

[Functional addition] = i.e. add building maintenance to the mod.

[bugfix] = Any bug fix releases.

 

The next version will be 2.1.1 and will be uploaded later today.

Link to comment
Share on other sites

Ok, I am sorting out a solution to keep the server_monitor.sqf on the server only.

 

Does everyone have access to the main server directory (the one with @Dayz_Epoch & @Dayz_epoch_server in) ?.

 

I suspect some people do not but would like clarification.  

 

For those with dedicated machine and full access I have sorted out the mod so the server_monitor.sqf does not need to be updated in the dayz_server.pbo but still only needs to sit on the server.

 

For people with with hosting that does not allow access to the main server directory, the mod will have to have the server_monitor.sqf as part of the mission file.  I do not currently see any big issue with this as the version run will be from the mpmission folder on the server not on the client.

 

Feedback welcome.

Link to comment
Share on other sites

Thanks for updating, will do aswell. I already changed the server_monitor myself cause i've got a few other modificactions that use it.
 

Anything i can do to help you sort out the Friendly tagging issue?

Link to comment
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
×
×
  • Create New...