Jump to content
  • 0

[Request] P4L/Snap Pro/Vector Build/Plot Management Help me Please?


Redbeard Actual

Question

Hello and greetings to all.

I recently started learning to script. After almost 1900 hours in Epoch as a player and a current stint on 3 high population Epoch servers as an Admin, I figured I should learn a bit about servers. I have been lurking here and several other forums throughout my time on Epoch.

I have gleaned a large amount of information here. Thank you to everyone who has contributed to my education.

I have a server in development currently. I considered it pointless to even start learning if I wasn't jumping in the deep end. I started about four weeks ago and have been generally successful. Reading and searching and reading some more. Coding and testing and retesting. To the point of nausea.

My failures so far mainly center on scripts I am modifying or just making up out of my imagination. Mainly figuring out how to get P4L/Snap Pro/Vectors/Plot Management to play nice with each other.

I sorted out:
 Lift Tow
 Safe Zones
 WAI
 Blood Regen
 Loot Tables
 DZAI
 Custom Loadouts
 Bury Body
 Set local View Distance.
 Deploy and Pack Bike/Moto/Mozzie.
 Wrote my own Harvest Hemp Based on stuff I read here.
 Modified Safe Zones to actually randomize the time it takes to switch off god mode.
 Modified Safe Zones so Zeds stop trying to kick your arse.
 Modified the Bury Body script to Bury and Process Zeds into Bio Meat using Knife, Tin Can and Antibiotics giving humanity.
 Modified the Walks Among the Dead Script so any water bottle, Boiled or Unboiled Washes off the Zed Camo.
 Modified the Walks Among the Dead Script to also use Bio Meat As well as Zed Parts.
 And did multiple little tweaks.
 
 But I still haven't found the answer to get Plot management to play nice with Snap Pro and Vectors at the same time. I have searched and read for a long time. But no luck!
 
 If I missed something in the mass of stuff or there is wisdom I could glean anywhere, could I get a pointer in the right direction. I only ask because I have put in at least 100 hours of my free time pursuing the answer beforehand. Any insight will be gratefully accepted.

Link to comment
Share on other sites

15 answers to this question

Recommended Posts

  • 0

I started with a vanilla Epoch install. Then I added P4L, Snap Pro w/Vectors and Plot Management.

 

I have more than one server. Basically versions of the same server that I have saved as backups along the way. So far I can get the three to run. But I can only upgrade and remove objects on other people's plots. Everything works well until I drop Plot management on top of P4l and Snap Pro w/Vectors.

 

Yes, I have been testing it with only the addons I'm trying to get playing nicely installed.

Link to comment
Share on other sites

  • 0

So, do you currently have all that stuff on your server and you are trying to install P4L, Snap, Vectors and Plot Management on top?

 

I have been reading through the thread dealing with P4L/Snap Pro w/Vectors again. Still no luck after getting 22 pages into the thread. I see several posts by you there. Have you gotten these scripts to play nicely?

 

I basically want to get them working on my test server without any other scripts added. Then I will build on top of that with my other scripts and tweaks.

Link to comment
Share on other sites

  • 0

this is actually the best way to get started.

Anyway just start with P4L, then install Snap and finally vector build.

 

If you have a file which both script want to modify try to merge them!

 

I recommend: http://sourceforge.net/projects/npp-compare/to do this

Should not be a hard task  though, if you know what you are doing :)

I will review your link and see what I can get accomplished. I have not attempted using merge yet. Mostly because I've been smart enough to see the connections. These scripts seem to test that ability.

Thanks for the lead.

 

I still need to do the same thing with Plot management? I assume it has to be added last.

Link to comment
Share on other sites

  • 0

I have these all runnning together on my server they work fine but i still have to fix the different maintain prices scroll on plotpole maintain price is different to the maintain plotmanagement prices lol guess i could remove the scroll wheel menu for maintain and just have the plotmanagement maintain handle the maintain of buildables or compare the code for maintain and tweak to match prices

 

you need to merge a few files as you go these all work together i even have advanced trading working with them and many more mods its a matter of say if 4 mods use player_build.sqf you need to merge the differences so 1 file has it all dont replace player_build.sqf  with the new file from the next mod or you are copying over the other scripts coding open both files with a merging txt editor like "beyond compare" and compare then merge, test then happy gaming :) 

Link to comment
Share on other sites

  • 0

I think I got it playing nicely. I have to wait for my buddy/tester to be online, so I can test building on other people's plots. But all the snapping and vectoring is working. Plus I was able to add myself to my own plotpole with Plot Management. If this works, I will be able to toss all the rest of the mods I've worked out on top of it easy.

 

Keeping the fingers crossed.

Link to comment
Share on other sites

  • 0

player_build

/*


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","_playerID", "_playerUID","_ownerID","_buildcheck","_isowner","_isfriendly","_maxBuildDistance","_vector","_buildOffset","_vUp"];

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 (([player] call FNC_GetPos) 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 = [player] call FNC_GetPlayerUID;

if (DZE_APlotforLife) then {
_playerID = [player] call FNC_GetPlayerUID;
}else{
_playerID = dayz_characterID;
};

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;

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

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 (([player] call FNC_GetPos) 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");
};

if (_requireplot == 0) then{_requireplot = false}else{_requireplot = true};

_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 [(format [localize "str_epoch_player_44", DZE_PlotPole select 1]) , "PLAIN DOWN"]; };

if(_IsNearPlot == 0) then {

// Allow building of plotpole or items not requiring a plot pole
if(!(_requireplot) || _isLandFireDZ) then {
_canBuildOnPlot = true;
};

} else {
// Since there are plot poles nearby we need to check ownership && friend status

// check nearest pole only
_nearestPole = _findNearestPole select 0;

_buildcheck = [player, _nearestPole] call FNC_check_owner;
_isowner = _buildcheck select 0;
_isfriendly = _buildcheck select 1;
if ((_isowner) || (_isfriendly)) 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 initial players position & set max build range origin.
if ((DZE_BuildInPlotRadius) && (_requireplot)) then{
_location1 = [_nearestPole] call FNC_GetPos;
_maxBuildDistance = _Distance / 2;
diag_log text "Pole initial location.";
}else{
_location1 = [player] call FNC_GetPos;
_maxBuildDistance = 5;
diag_log text "Player initial location.";
};

diag_log format["[Player_Build] _location1 = %1, _maxBuildDistance = %2, DZE_BuildInPlotRadius = %3, _requireplot = %4",_location1, _maxBuildDistance, DZE_BuildInPlotRadius, _requireplot];

_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 = [_object] call FNC_GetPos;

cutText [(localize "str_epoch_player_45"), "PLAIN DOWN"];

_objHDiff = 0;

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

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{
[_object,[DZE_memForBack,DZE_memLeftRight,DZE_memDir]] call fnc_SetPitchBankYaw;
DZE_updateVec = false;
};

if(_rotate) then {
[_object,[DZE_memForBack,DZE_memLeftRight,DZE_memDir]] call fnc_SetPitchBankYaw;
};

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

[_object,[DZE_memForBack,DZE_memLeftRight,DZE_memDir]] call fnc_SetPitchBankYaw;

};

sleep 0.5;

_location2 = getPosATL player;

if(DZE_5) exitWith {
_isOk = false;
detach _object;
_dir = getDir _object;
_vector = [(vectorDir _object),(vectorUp _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;
};

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

//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 ((DZE_BuildOnGround) && !(_requireplot)) then{
_toohigh = false;
if (_ispole) then{
if ((_position select 2) > DZE_MaxPlotHeight) then{_toohigh = true};
}else{
if ((_position select 2) > DZE_MaxNoPlotNeededHeight) then{_toohigh = true};
};
if (_toohigh) exitWith {
_isOk = false;
_cancel = true;
_reason = "This item must be built at ground level.";
detach _object;
deleteVehicle _object;
};
};

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

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,([player] call FNC_GetPos)] 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",_playerID,true];

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

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

} else {
_tmpbuilt setVariable ["CharacterID",dayz_characterID,true];
_tmpbuilt setVariable ["ownerPUID",_playerID,true];

// fire?
if(_tmpbuilt isKindOf "Land_Fire_DZ") then {
_tmpbuilt spawn player_fireMonitor;
} else {
PVDZE_obj_Publish = [dayz_characterID,_tmpbuilt,[_dir,_location,_playerUID,_vector],_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;

 

My Log file is of no help. I see no errors.

 

I can build at my own pole.

 

I can upgrade and deconstruct at a friend's pole. But not build.

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

×
×
  • Create New...