Jump to content

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


Recommended Posts

I've searched and I can't find an answer...

 

I get stuck at Authentication.  I've tried the instructions a couple times and each time it would hang on starting to authenticate, I then tried swapping out the server files as well as adding the extra server_publishFullObject.sqf then changing the call path in server_functions.sqf but now it passes the starting to authenticate and hangs on authenticating and retrying authentication until it times out.

 

I'm running on a fresh Vilayer server, only added Infistar.

 

Any ideas?

 

Thanks!

 

 

Link to comment
Share on other sites

I get the same as above, iv spent many hours trying to install this, even took all my mods out and started from scratch, the thing is the (server_monitor.sqf). if i use the default (server_monitor.sqf)  the server will start and i don't lose my plot pole until the server restarts,

 

I did read back in the posts and someone did say its where you put the "call compile preprocessFileLineNumbers" but iv put them every dam where. it does not work, Please Help ..........

Link to comment
Share on other sites

I have just put up a new readme on GitHub which had the install instructions for a new server.  Please take a look and make sure you have completed the install following all of those instructions.

 

Thanks to F3cuk who put them in to 

 

 

 

Thank You and F3cuk for taking the time to help us newbies ;) 

your instructions are not the problem they are very clear iv put a few pics together for you to take a look at when you get the chance,

 

New install of server

 

https://www.dropbox.com/sh/loth59uggfwvb25/AAANBslPvUJ99skFNdcYVCOfa?dl=0

Link to comment
Share on other sites

I have just put up a new readme on GitHub which had the install instructions for a new server.  Please take a look and make sure you have completed the install following all of those instructions.

 

Thanks to F3cuk who put them in to GitHub md.

 

 

Thank You and F3cuk for taking the time to help us newbies ;)

your instructions are not the problem they are very clear iv put a few pics together for you to take a look at when you get the chance,

 

New install of server

 

https://www.dropbox.com/sh/loth59uggfwvb25/AAANBslPvUJ99skFNdcYVCOfa?dl=0

 

Same on my end, clear instructions followed step by step but I still run into the authentication hang/timeout.  I will continue to try out different things and report back if successful.

 

Thanks for the help!

Link to comment
Share on other sites

Guys,

Please upload your server and client RPT files (please use something like pastbin or spoiler tags) and I will have a scan through.

 

Mission init.sqf

/*

For DayZ Epoch

Addons Credits: Jetski Yanahui by Kol9yN, Zakat, Gerasimow9, YuraPetrov, zGuba, A.Karagod, IceBreakr, Sahbazz

*/

startLoadingScreen ["","RscDisplayLoadCustom"];

cutText ["","BLACK OUT"];

enableSaving [false, false];

//REALLY IMPORTANT VALUES

dayZ_instance = 11; //The instance

dayzHiveRequest = [];

initialized = false;

dayz_previousID = 0;

DZE_APlotforLife = true;

DZE_modularBuild = true;

//disable greeting menu

player setVariable ["BIS_noCoreConversations", true];

//disable radio messages to be heard and shown in the left lower corner of the screen

enableRadio false;

// May prevent "how are you civillian?" messages from NPC

enableSentences false;

// DayZ Epoch config

spawnShoremode = 1; // Default = 1 (on shore)

spawnArea= 1500; // Default = 1500

MaxVehicleLimit = 400; // Default = 50

MaxDynamicDebris = 300; // Default = 100

dayz_MapArea = 16000; // Default = 10000

dayz_maxLocalZombies = 30; // Default = 30

dayz_paraSpawn = false;

dayz_minpos = -1;

dayz_maxpos = 16000;

dayz_sellDistance_vehicle = 20;

dayz_sellDistance_boat = 30;

dayz_sellDistance_air = 50;

dayz_maxAnimals = 2; // Default: 8

dayz_tameDogs = true;

DynamicVehicleDamageLow = 0; // Default: 0

DynamicVehicleDamageHigh = 100; // Default: 100

DZE_BuildOnRoads = false; // Default: False

EpochEvents = [["any","any","any","any",30,"crash_spawner"],["any","any","any","any",0,"crash_spawner"],["any","any","any","any",15,"supply_drop"]];

dayz_fullMoonNights = true;

//Load in compiled functions

call compile preprocessFileLineNumbers "Custom\A_Plot_for_Life\init\variables.sqf"; //Initilize the Variables (IMPORTANT: Must happen very early)

progressLoadingScreen 0.1;

call compile preprocessFileLineNumbers "Custom\A_Plot_for_Life\init\publicEH.sqf"; //Initilize the publicVariable event handlers

progressLoadingScreen 0.2;

call compile preprocessFileLineNumbers "\z\addons\dayz_code\medical\setup_functions_med.sqf"; //Functions used by CLIENT for medical

progressLoadingScreen 0.4;

call compile preprocessFileLineNumbers "Custom\A_Plot_for_Life\init\compiles.sqf"; //Compile regular functions

progressLoadingScreen 0.5;

call compile preprocessFileLineNumbers "server_traders.sqf"; //Compile trader configs

progressLoadingScreen 1.0;

"filmic" setToneMappingParams [0.153, 0.357, 0.231, 0.1573, 0.011, 3.750, 6, 4]; setToneMapping "Filmic";

if (isServer) then {

call compile preprocessFileLineNumbers "\z\addons\dayz_server\missions\DayZ_Epoch_11.Chernarus\dynamic_vehicle.sqf";

//Compile vehicle configs

// Add trader citys

_nil = [] execVM "\z\addons\dayz_server\missions\DayZ_Epoch_11.Chernarus\mission.sqf";

_serverMonitor = [] execVM "custom\system\server_monitor.sqf";

};

if (!isDedicated) then {

//Conduct map operations

0 fadeSound 0;

waitUntil {!isNil "dayz_loadScreenMsg"};

dayz_loadScreenMsg = (localize "STR_AUTHENTICATING");

//Run the player monitor

_id = player addEventHandler ["Respawn", {_id = [] spawn player_death;}];

_playerMonitor = [] execVM "\z\addons\dayz_code\system\player_monitor.sqf";

//anti Hack

//Lights

//[false,12] execVM "\z\addons\dayz_code\compile\local_lights_init.sqf";

};

//Start Dynamic Weather

execVM "\z\addons\dayz_code\external\DynamicWeatherEffects.sqf";

#include "\z\addons\dayz_code\system\BIS_Effects\init.sqf"

 

description.ext

respawn = "BASE";

respawndelay = 5;

onLoadMission= "DayZ Epoch Chernarus";

OnLoadIntro = "Welcome to DayZ Epoch Chernarus";

OnLoadIntroTime = False;

OnLoadMissionTime = False;

disabledAI = true;

disableChannels[]={0,2,6};

enableItemsDropping = 0;

briefing = 0;

debriefing = 0;

onPauseScript = "";

loadScreen = "\z\addons\dayz_code\gui\dayz_logo_ca.paa";

class Header

{

gameType = COOP; //DM, Team, Coop, ...

minPlayers = 1; //min # of players the mission supports

maxPlayers = 100; //Max # of players the mission supports

};

aiKills = 1;

diagRadio = 1;

diagHit = 1;

class RscText

{

type = 0;

idc = -1;

x = 0;

y = 0;

h = 0.037;

w = 0.3;

style = 0x100;

font = Zeppelin32;

SizeEx = 0.03921;

colorText[] = {1,1,1,1};

colorBackground[] = {0, 0, 0, 0};

linespacing = 1;

};

class RscPicture

{

access=0;

type=0;

idc=-1;

style=48;

colorBackground[]={0,0,0,0};

colorText[]={1,1,1,1};

font="TahomaB";

sizeEx=0;

lineSpacing=0;

text="";

};

class RscLoadingText : RscText

{

style = 2;

x = 0.323532;

y = 0.666672;

w = 0.352944;

h = 0.039216;

sizeEx = 0.03921;

colorText[] = {0.543,0.5742,0.4102,1.0};

};

class RscProgress

{

x = 0.344;

y = 0.619;

w = 0.313726;

h = 0.0261438;

texture = "\ca\ui\data\loadscreen_progressbar_ca.paa";

colorFrame[] = {0,0,0,0};

colorBar[] = {1,1,1,1};

};

class RscProgressNotFreeze

{

idc = -1;

type = 45;

style = 0;

x = 0.022059;

y = 0.911772;

w = 0.029412;

h = 0.039216;

texture = "#(argb,8,8,3)color(0,0,0,0)";

};

//

// the loading screen itself

//

class DayZ_loadingScreen

{

idd = -1;

duration = 10e10;

fadein = 0;

fadeout = 0;

name = "loading screen";

class controlsBackground

{

class blackBG : RscText

{

x = safezoneX;

y = safezoneY;

w = safezoneW;

h = safezoneH;

text = "";

colorText[] = {0,0,0,0};

colorBackground[] = {0,0,0,1};

};

/*

class nicePic : RscPicture

{

style = 48 + 0x800; // ST_PICTURE + ST_KEEP_ASPECT_RATIO

x = safezoneX + safezoneW/2 - 0.25;

y = safezoneY + safezoneH/2 - 0.2;

w = 0.5;

h = 0.4;

text = "img\nicePic.paa";

};

*/

};

class controls

{

class Title1 : RscLoadingText

{

text = "$STR_LOADING"; // "Loading" text in the middle of the screen

};

class CA_Progress : RscProgress // progress bar, has to have idc 104

{

idc = 104;

type = 8; // CT_PROGRESS

style = 0; // ST_SINGLE

texture = "\ca\ui\data\loadscreen_progressbar_ca.paa";

};

class CA_Progress2 : RscProgressNotFreeze // progress bar that will go reverse

{

idc = 103;

};

class Name2: RscText // the text on the top-left

{

idc = 101;

x = 0.05;

y = 0.029412;

w = 0.9;

h = 0.04902;

text = "";

sizeEx = 0.05;

colorText[] = {0.543,0.5742,0.4102,1.0};

};

};

};

class RscTitles {

}

#include "custom\snap_pro\snappoints.hpp"

 

is that what you meen ?  :unsure:

 

is there away i can give you your pass and username for you to look in server iv made an subadmin account for you.

like on steam or xfire

Link to comment
Share on other sites

Another followup for me. Completely reverted to my server and mission pbo to before installing P4L and I do not have the issue of icons locking up when I fire my gun. I'm seriously at a loss. My players want P4L but I'm gonna have to go without it for now until this issue is resolved. There must be something in the changes when I merge my existing files with the P4L files that bugs out the 'player_updateGui'. I've gone over the files with beyondcompare about 20 times now. I just cannot find what could be causing this. 

 

I was able to fix the ui bug by adding Dayz_Dark_UI = false; to my init.sqf. Not sure why it fixed it. the author put code in place to set it to false if not in the init but it worked for me.

 

I am also having a problem with the game not connecting players to objects. After installing the addon, anything I had built no longer had a remove option and my plot pole no longer knew me. I can replace a pole, and any new objects also knows who i am. but once the server is restarted the association is lost.

 

Also safes do not get a scroll option to unlock, unless placed before a restart. epoch lockable objects open fine.  any fixes for this? I know its got to be something small. seems like something to do with the function to get the puid.

Link to comment
Share on other sites

Please Help Me For The Instructions. Step by step to setup P4L

 

I Already have a custom file if i use your file copy & Replace it's mean i have to install everything again!

That's to hard for me it's took me a day to install single curreny from zupa i don't want to do that again!!!!

PLEASE !!!!

 

download winmerge. Cuts most jobs down to a few seconds of work.

Link to comment
Share on other sites

Mission init.sqf

/*

For DayZ Epoch

Addons Credits: Jetski Yanahui by Kol9yN, Zakat, Gerasimow9, YuraPetrov, zGuba, A.Karagod, IceBreakr, Sahbazz

*/

startLoadingScreen ["","RscDisplayLoadCustom"];

cutText ["","BLACK OUT"];

enableSaving [false, false];

//REALLY IMPORTANT VALUES

dayZ_instance = 11; //The instance

dayzHiveRequest = [];

initialized = false;

dayz_previousID = 0;

DZE_APlotforLife = true;

DZE_modularBuild = true;

//disable greeting menu

player setVariable ["BIS_noCoreConversations", true];

//disable radio messages to be heard and shown in the left lower corner of the screen

enableRadio false;

// May prevent "how are you civillian?" messages from NPC

enableSentences false;

// DayZ Epoch config

spawnShoremode = 1; // Default = 1 (on shore)

spawnArea= 1500; // Default = 1500

MaxVehicleLimit = 400; // Default = 50

MaxDynamicDebris = 300; // Default = 100

dayz_MapArea = 16000; // Default = 10000

dayz_maxLocalZombies = 30; // Default = 30

dayz_paraSpawn = false;

dayz_minpos = -1;

dayz_maxpos = 16000;

dayz_sellDistance_vehicle = 20;

dayz_sellDistance_boat = 30;

dayz_sellDistance_air = 50;

dayz_maxAnimals = 2; // Default: 8

dayz_tameDogs = true;

DynamicVehicleDamageLow = 0; // Default: 0

DynamicVehicleDamageHigh = 100; // Default: 100

DZE_BuildOnRoads = false; // Default: False

EpochEvents = [["any","any","any","any",30,"crash_spawner"],["any","any","any","any",0,"crash_spawner"],["any","any","any","any",15,"supply_drop"]];

dayz_fullMoonNights = true;

//Load in compiled functions

call compile preprocessFileLineNumbers "Custom\A_Plot_for_Life\init\variables.sqf"; //Initilize the Variables (IMPORTANT: Must happen very early)

progressLoadingScreen 0.1;

call compile preprocessFileLineNumbers "Custom\A_Plot_for_Life\init\publicEH.sqf"; //Initilize the publicVariable event handlers

progressLoadingScreen 0.2;

call compile preprocessFileLineNumbers "\z\addons\dayz_code\medical\setup_functions_med.sqf"; //Functions used by CLIENT for medical

progressLoadingScreen 0.4;

call compile preprocessFileLineNumbers "Custom\A_Plot_for_Life\init\compiles.sqf"; //Compile regular functions

progressLoadingScreen 0.5;

call compile preprocessFileLineNumbers "server_traders.sqf"; //Compile trader configs

progressLoadingScreen 1.0;

"filmic" setToneMappingParams [0.153, 0.357, 0.231, 0.1573, 0.011, 3.750, 6, 4]; setToneMapping "Filmic";

if (isServer) then {

call compile preprocessFileLineNumbers "\z\addons\dayz_server\missions\DayZ_Epoch_11.Chernarus\dynamic_vehicle.sqf";

//Compile vehicle configs

// Add trader citys

_nil = [] execVM "\z\addons\dayz_server\missions\DayZ_Epoch_11.Chernarus\mission.sqf";

_serverMonitor = [] execVM "custom\system\server_monitor.sqf";

};

if (!isDedicated) then {

//Conduct map operations

0 fadeSound 0;

waitUntil {!isNil "dayz_loadScreenMsg"};

dayz_loadScreenMsg = (localize "STR_AUTHENTICATING");

//Run the player monitor

_id = player addEventHandler ["Respawn", {_id = [] spawn player_death;}];

_playerMonitor = [] execVM "\z\addons\dayz_code\system\player_monitor.sqf";

//anti Hack

//Lights

//[false,12] execVM "\z\addons\dayz_code\compile\local_lights_init.sqf";

};

//Start Dynamic Weather

execVM "\z\addons\dayz_code\external\DynamicWeatherEffects.sqf";

#include "\z\addons\dayz_code\system\BIS_Effects\init.sqf"

 

description.ext

respawn = "BASE";

respawndelay = 5;

onLoadMission= "DayZ Epoch Chernarus";

OnLoadIntro = "Welcome to DayZ Epoch Chernarus";

OnLoadIntroTime = False;

OnLoadMissionTime = False;

disabledAI = true;

disableChannels[]={0,2,6};

enableItemsDropping = 0;

briefing = 0;

debriefing = 0;

onPauseScript = "";

loadScreen = "\z\addons\dayz_code\gui\dayz_logo_ca.paa";

class Header

{

gameType = COOP; //DM, Team, Coop, ...

minPlayers = 1; //min # of players the mission supports

maxPlayers = 100; //Max # of players the mission supports

};

aiKills = 1;

diagRadio = 1;

diagHit = 1;

class RscText

{

type = 0;

idc = -1;

x = 0;

y = 0;

h = 0.037;

w = 0.3;

style = 0x100;

font = Zeppelin32;

SizeEx = 0.03921;

colorText[] = {1,1,1,1};

colorBackground[] = {0, 0, 0, 0};

linespacing = 1;

};

class RscPicture

{

access=0;

type=0;

idc=-1;

style=48;

colorBackground[]={0,0,0,0};

colorText[]={1,1,1,1};

font="TahomaB";

sizeEx=0;

lineSpacing=0;

text="";

};

class RscLoadingText : RscText

{

style = 2;

x = 0.323532;

y = 0.666672;

w = 0.352944;

h = 0.039216;

sizeEx = 0.03921;

colorText[] = {0.543,0.5742,0.4102,1.0};

};

class RscProgress

{

x = 0.344;

y = 0.619;

w = 0.313726;

h = 0.0261438;

texture = "\ca\ui\data\loadscreen_progressbar_ca.paa";

colorFrame[] = {0,0,0,0};

colorBar[] = {1,1,1,1};

};

class RscProgressNotFreeze

{

idc = -1;

type = 45;

style = 0;

x = 0.022059;

y = 0.911772;

w = 0.029412;

h = 0.039216;

texture = "#(argb,8,8,3)color(0,0,0,0)";

};

//

// the loading screen itself

//

class DayZ_loadingScreen

{

idd = -1;

duration = 10e10;

fadein = 0;

fadeout = 0;

name = "loading screen";

class controlsBackground

{

class blackBG : RscText

{

x = safezoneX;

y = safezoneY;

w = safezoneW;

h = safezoneH;

text = "";

colorText[] = {0,0,0,0};

colorBackground[] = {0,0,0,1};

};

/*

class nicePic : RscPicture

{

style = 48 + 0x800; // ST_PICTURE + ST_KEEP_ASPECT_RATIO

x = safezoneX + safezoneW/2 - 0.25;

y = safezoneY + safezoneH/2 - 0.2;

w = 0.5;

h = 0.4;

text = "img\nicePic.paa";

};

*/

};

class controls

{

class Title1 : RscLoadingText

{

text = "$STR_LOADING"; // "Loading" text in the middle of the screen

};

class CA_Progress : RscProgress // progress bar, has to have idc 104

{

idc = 104;

type = 8; // CT_PROGRESS

style = 0; // ST_SINGLE

texture = "\ca\ui\data\loadscreen_progressbar_ca.paa";

};

class CA_Progress2 : RscProgressNotFreeze // progress bar that will go reverse

{

idc = 103;

};

class Name2: RscText // the text on the top-left

{

idc = 101;

x = 0.05;

y = 0.029412;

w = 0.9;

h = 0.04902;

text = "";

sizeEx = 0.05;

colorText[] = {0.543,0.5742,0.4102,1.0};

};

};

};

class RscTitles {

}

#include "custom\snap_pro\snappoints.hpp"

 

is that what you meen ?  :unsure:

 

is there away i can give you your pass and username for you to look in server iv made an subadmin account for you.

like on steam or xfire

 

Nope, I mean your server and client .RPT files.

 

The Server file will be in the directory where your Hive.ini file is kept

The client on is on your PC unser c:\user\[login name]\appdata\local\Arma2OA (from memory, someone please correct me if wrong please).

Link to comment
Share on other sites

 

Hi RimBlock,
 
As I can do to put the pole plot only the owner can remove it? not anyone?

 

 

Hi Troppite,

 

As standard, anyone can remove a plot pole.  A Plot for Life does not change that.

 

There are other mods and options for indestructable bases etc that may change it so only the owner can remove the plot pole but that is not part of this mod.

 

Do a search on the forums for indestructable bases and you should find something that can help.  It should not be hard to setup with A Plot for Life.

Link to comment
Share on other sites

I was able to fix the ui bug by adding Dayz_Dark_UI = false; to my init.sqf. Not sure why it fixed it. the author put code in place to set it to false if not in the init but it worked for me.

 

I am also having a problem with the game not connecting players to objects. After installing the addon, anything I had built no longer had a remove option and my plot pole no longer knew me. I can replace a pole, and any new objects also knows who i am. but once the server is restarted the association is lost.

 

Also safes do not get a scroll option to unlock, unless placed before a restart. epoch lockable objects open fine.  any fixes for this? I know its got to be something small. seems like something to do with the function to get the puid.

 

 

I think I may need to put a FAQ up on the first page as this thread is so big now it is not so easy to find answered questions.

 

For the unlocking of safes.  As standard, Epoch is designed so the owner does not need to put in the safe code.  This, however, did'nt work as the safe could not be attached to an owner because the safes lock code was stored in the safes owner filed (characterid).  Now this mod stores the ownership info somewhere else the original mechanisum is working correctly.  Owners should be able to unlock safes without having to put the safes code in.  This can be reverted so everyone has to supply a code to unlock safes and how to do it was posted in this thread... somewhere.  This should be the same pre or post server reboot though. 

 

For the UI issues, grab the newest version of player_updateGUI.sqf from my GitHub or extract it from the dropbox zip file.  I updated it recently to use the correct Epoch 1.0.5.1 base file (it was using the Epoch 1.0.6 version). 

 

Initially when you use the mod with legacy (originally built) bases, you will have to take ownership (an option on the plot pole if enabled).  This option aligns the all the plots buildables (apart from locked doors, safes, tents etc) to the plot pole owners SteamID.  After you do that, old bases should be correctly linked to the owner.  If you are using the Infinistar Antihack then you will probably need to tweek it as it thinks the take ownership is someone nuking a base (it sorta is as it deletes the object and recreates them as it is not possible just to update those fields with the Epoch hive calls available).

 

If you are loosing ownership after reboot then check your DB to make sure the objects are being created with the owners SteamID in the worldspace field of the objects record in the object_data table.  Double check the server side scripts to make sure you have linked them in correctly. 

Link to comment
Share on other sites

 

==================================Step by Step guide================================

I have alot of custom scripts and files in my server, so i decided to look into the custom scripts from RimBlock and search what he has changed so i can make a step by step guide for guys who have the same problem like me. But ok lets start now.

 

Required:

-Time about an hour

-Custom compiles.sqf

-A general knowledge about scripting and formating

-Brain.exe

 

At first here is a file list compare it with your custom folder if some files are missing get them from the DayZ_Code.pbo.

  1. compiles.sqf
  2. fn_damageActions.sqf
  3. fn_selfActions.sqf
  4. player_build.sqf (If you have any kind of snap building, just added the player_build.sqf in the snap building folder)
  5. player_buildingDowngrade.sqf
  6. player_lockvault.sqf (not needed, it was in the folder but RimBlock did no changes to the file, so its equal to the original one)
  7. player_packtent.sqf
  8. player_packvault.sqf
  9. player_tagfriendly.sqf
  10. player_unlockvault.sqf
  11. player_updategui.sqf
  12. player_upgrade.sqf
  13. remove.sqf
  14. server_monitor.sqf (Note dont take the file from the dayz_code.pbo go into your dayz_server.pbo and search for server_monitor.sqf and copy it out)
  15. tent_pitch.sqf
  16. vault_pitch.sqf 

If you checked theese list and maked sure that you have every file, you can start with the compiles.sqf

Remeber, i use my own file path´s, if you have another folder who is not named "Custom" you need to change the path´s to fit your folders.

I also call the custom compiles.sqf twice, so first the original one then the custom one, so my compiles.sqf looks like this:

if (!isDedicated) then {
fnc_usec_damageActions =        compile preprocessFileLineNumbers "Custom\fn_damageActions.sqf";
fnc_usec_selfActions =            compile preprocessFileLineNumbers "Custom\fn_selfActions.sqf";
player_packTent =            compile preprocessFileLineNumbers "Custom\player_packTent.sqf";
player_packVault =            compile preprocessFileLineNumbers "Custom\player_packVault.sqf";
player_unlockVault =            compile preprocessFileLineNumbers "Custom\player_unlockVault.sqf";
player_removeObject =            compile preprocessFileLineNumbers "Custom\remove.sqf";
player_lockVault =            compile preprocessFileLineNumbers "Custom\player_lockVault.sqf";
player_updateGui =            compile preprocessFileLineNumbers "Custom\player_updateGui.sqf";
player_tentPitch =            compile preprocessFileLineNumbers "Custom\tent_pitch.sqf";
player_vaultPitch =            compile preprocessFileLineNumbers "Custom\vault_pitch.sqf";
player_build =                compile preprocessFileLineNumbers "Custom\player_build.sqf";
};

So, now we came to the changes in every file:

  • fn_damageActions.sqf

Find at the private variables at the top:

"_charid"

and replace it with:

"_playerUID"

Find:

_charID =		_unit getVariable ["CharacterID", 0];

Replace with:

_playerUID = 	getPlayerUID player;

Find:

if ((isPlayer _unit) && !(_charID in _friendlies)) then {

Replace with:

if ((isPlayer _unit) && !(_playerUID in _friendlies)) then {

Find:

"\z\addons\dayz_code\actions\player_tagFriendly.sqf"

and replace it with your own path which point to your custom player_tagFriendly.sqf for me it looks like this:

"Custom\player_tagFriendly.sqf"

Done!

  •  Fn_sefactions.sqf

Find (again the private section at the top):

"_attached"

and add this behind it

,"_playerUID","_characterID"

Find:

_isMan = _cursorTarget isKindOf "Man";

and add directly above it:

_playerUID = getPlayerUID player;

Find:

_ownerID = _cursorTarget getVariable ["CharacterID","0"];

Replace with:

_ownerID = _cursorTarget getVariable ["ownerPUID","0"];

Directly under this add:

_characterID = _cursorTarget getVariable ["CharacterID","0"];

Find:

//Allow player to delete objects

and add above it:

diag_log format["fn_actons: [PlayerUID: %1] [_ownerID: %2] [_isModularDoor: %3] [typeOfCursorTarget: %4]",_playerUID, _ownerID, _isModularDoor, _typeOfCursorTarget];
diag_log format["[_isDestructable:%1 ] [_isWreck: %2 ] [_isRemovable: %3 ] [_isWreckBuilding: %4 ]",_isDestructable, _isWreck, _isRemovable, _isWreckBuilding];

Find 2 times:

(dayz_characterID == _ownerID))

and replace it with:

(_playerUID == _ownerID))

Find:

if(!_isMan && _ownerID != "0" && !(_cursorTarget isKindOf "Bicycle")) then {

and replace it with:

if(!_isMan && _characterID != "0" && !(_cursorTarget isKindOf "Bicycle")) then {

Find 2x times:

"\z\addons\dayz_code\actions\remove.sqf"

and replace it with your own path pointing to your custom remove.sqf for me it looks like this:

"Custom\remove.sqf"

Find:

_hasKey = _ownerID in _temp_keys;
_oldOwner = (_ownerID == dayz_playerUID);

Replace with:

 

_hasKey = _characterID in _temp_keys;
_oldOwner = (_characterID == dayz_playerUID);

Find:

_Unlock = player addAction [format[localize "STR_EPOCH_ACTIONS_UNLOCK",_text], "\z\addons\dayz_code\actions\unlock_veh.sqf",[_cursorTarget,(_temp_keys_names select (parseNumber _ownerID))], 2, true, true, "", ""];

Replace with:

_Unlock = player addAction [format[localize "STR_EPOCH_ACTIONS_UNLOCK",_text], "\z\addons\dayz_code\actions\unlock_veh.sqf",[_cursorTarget,(_temp_keys_names select (parseNumber _characterID))], 2, true, true, "", ""];

Find:

if (_ownerID == dayz_characterID) then {

Replace with:

if (_ownerID == _playerUID) then {

Find:

if(_ownerID == dayz_combination || _ownerID == dayz_playerUID) then {

Replace with:

if(_characterID == dayz_combination || _ownerID == _playerUID) then {

Find:

if(_ownerID != dayz_combination && _ownerID != dayz_playerUID) then {

Replace with:

if(_characterID != dayz_combination && _ownerID != _playerUID) then {

Find:

if(_typeOfCursorTarget in DZE_UnLockedStorage && _ownerID != "0" &&

Replace with:

if(_typeOfCursorTarget in DZE_UnLockedStorage && _characterID != "0" &&

Find:

if(_ownerID == dayz_combination || _ownerID == dayz_playerUID) then {

Replace with:

 

if(_characterID == dayz_combination || _ownerID == dayz_playerUID) then {

Find:

if (s_player_packvault < 0 && (_ownerID == dayz_combination || _ownerID == dayz_playerUID))

Replace with:

if (s_player_packvault < 0 && (_characterID == dayz_combination || _ownerID == dayz_playerUID))

Find:

"\z\addons\dayz_code\actions\player_upgrade.sqf"

And replace it with your path pointing to player_upgrade:sqf for me it looks like this:

"Custom\player_upgrade.sqf"

Find:

} else {
		player removeAction s_player_upgrade_build;
		s_player_upgrade_build = -1;
	};

and add directly under this:

	diag_log text "============================================";
	
	diag_log format["fn_actons: [PlayerUID: %1] [_ownerID: %2] [DZE_Lock_Door: %3] [_characterID: %4] [typeOfCursorTarget: %5]",_playerUID, _ownerID, DZE_Lock_Door, _characterID, _typeOfCursorTarget];
	diag_log format["[s_player_downgrade_build:%1 ] [s_player_lastTarget: %2 ] [_isRemovable: %3 ] [_isWreckBuilding: %4 ]",s_player_downgrade_build, s_player_lastTarget, _isRemovable, _isWreckBuilding];
	

FInd:

&& (DZE_Lock_Door == _ownerID)) then {

Replace with:

&& (DZE_Lock_Door == _characterID)) then {

Find:

"\z\addons\dayz_code\actions\player_buildingDowngrade.sqf"

Replace it with your own path pointing to your custom player_buildingDowngrade.sqf for me it looks like this:

"Custom\player_buildingDowngrade.sqf"

Find:

if(_isTent && _ownerID == dayz_characterID) then {

Replace with:

if(_isTent && _ownerID == _playerUID) then {

Find:

if (_isDog && _isAlive && (_hasRawMeat) && _ownerID == "0" &&

Replace with:

if (_isDog && _isAlive && (_hasRawMeat) && _characterID == "0" &&

Find:

if (_isDog && _ownerID == dayz_characterID && _isAlive) then {

Replace with:

if (_isDog && _characterID == dayz_characterID && _isAlive) then {

Find:

_ownerID = "0";

Replace with:

_characterID = "0";

Find:

if (!isNull cursorTarget) then { _ownerID = cursorTarget getVariable ["CharacterID","0"]; };

Replace with:

if (!isNull cursorTarget) then { _characterID = cursorTarget getVariable ["CharacterID","0"]; };

Find:

if (_canDo && !_inVehicle && alive _dog && _ownerID != dayz_characterID) then {

Replace with:

if (_canDo && !_inVehicle && alive _dog && _characterID != dayz_characterID) then {

Wow we are done with the Fn_selfactions, this file alone take 1 hour for me :)

  •  player_packtent.sqf

Lets start with player_packTent.sqf

 

Add at the top the private variables:

"_playerUID"

Find:

_ownerID = _obj getVariable["CharacterID","0"];

Replace with:

_ownerID = _obj getVariable["ownerPUID","0"];

Find:

_objectUID	= _obj getVariable["ObjectUID","0"];

and add directly under it:

 

_playerUID = getPlayerUID player;

Find:

if(_ownerID != dayz_characterID)

Replace with:

if(_ownerID != _playerUID)

That was fast we are done with playerpacktent.

  • player_unlockvault.sqf

add to the private variables at the top:

,"_characterID"

Find:

_ownerID = _obj getVariable["CharacterID","0"];

replace with:

_characterID = _obj getVariable["CharacterID","0"];
_ownerID = _obj getVariable["ownerPUID","0"];;

Find:

if ((_ownerID == dayz_combination) || (_ownerID == dayz_playerUID)) then {

replace with:

 

if ((_characterID == dayz_combination) || (_ownerID == dayz_playerUID)) then {

Find:

_holder setVariable ["OEMPos", _pos, true];

add directly under it:

_holder setVariable ["ownerPUID", _ownerID , true];

Find:

 

_holder setVariable["CharacterID",_ownerID,true];

Replace with:

_holder setVariable["CharacterID",_characterID,true];

Done.

  • remove.sqf

Add to the private variables at the top:

 

,"_playerUID"

Find:

_objOwnerID = _obj getVariable["CharacterID","0"];

replace with:

_objOwnerID = _obj getVariable["ownerPUID","0"];

and add directly above it:

 

_playerUID = getPlayerUID _activatingPlayer;

Find:

_isOwnerOfObj = (_objOwnerID == dayz_characterID);

Replace with:

_isOwnerOfObj = (_objOwnerID == _playerUID);

Find:

_ownerID = _nearestPole getVariable["CharacterID","0"];

Replace with:

_ownerID = _nearestPole getVariable["ownerPUID","0"];

Find:

if(dayz_characterID != _ownerID) then {

replace with:

if(_playerUID != _ownerID) then {

Done.

  • player_updateGui.sqf

Find:

"_charID","_rcharID"

Replace with:

"_playerUID","_rplayerUID"

Find:

_charID = player getVariable ["CharacterID", "0"];

replace with:

_playerUID = getPlayerUID player;

Find:

_rcharID = _humanityTarget getVariable ["CharacterID", "0"];

replace with:

_rplayerUID = getPlayerUID _humanityTarget;

Find:

if ((_rcharID in _friendlies) && (_charID in _rfriendlies)) then {

Replace with:

if ((_rplayerUID in _friendlies) && (_playerUID in _rfriendlies)) then {

Find:

if !(_charID in _rfriendlyTo) then {

replace with:

if !(_playerUID in _rfriendlyTo) then {

Find:

_rfriendlyTo set [count _rfriendlyTo, _charID];

replace with:

_rfriendlyTo set [count _rfriendlyTo, _playerUID];

Done.

  • tent_pitch.sqf

Add to the private variables at the top:

,"_playerUID"

Find:

_isOk = [(vehicle player),_building] call fnc_isInsideBuilding;

and add directly under it:

_playerUID = getPlayerUID player;

Find:

_object setVariable ["CharacterID",dayz_characterID,true];

and add directly under it:

_object setVariable ["ownerPUID",_playerUID,true];

FInd:

PVDZE_obj_Publish = [dayz_characterID,_object,[_dir,_location],_classname];

replace with:

PVDZE_obj_Publish = [dayz_characterID,_object,[_dir,_location, _playerUID],_classname];

Done.

  • vault_pitch.sqf

add at to the private variables at the top

,"_playerUID"

Find:

_location = player modeltoworld [_offset_x,_offset_y,_offset_z];

and add directly under it:

_playerUID = getPlayerUID player;

Find:

 

_tent setVariable ["CharacterID",_combination,true];

and add directly under it:

_object setVariable ["ownerPUID",_playerUID,true];

Find:

PVDZE_obj_Publish = [_combination,_tent,[_dir,_location],"VaultStorageLocked"];

replace with:

PVDZE_obj_Publish = [_combination,_tent,[_dir,_location, _playerUID],"VaultStorageLocked"];

Done.

  • player_build.sqf

add to the private variables at the top:

,"_ownerPUID", "_playerUID"

Find:

 

_inVehicle = (_vehicle != player);

and add under it:

_playerUID = getPlayerUID player;

Find:

_ownerID = _nearestPole getVariable ["CharacterID","0"];

replace with:

_ownerID = _nearestPole getVariable ["ownerPUID","0"];

Find:

// diag_log format["DEBUG BUILDING: %1 = %2", dayz_characterID, _ownerID];

and replace it if you want to enable the debug,

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

Find:

if(dayz_characterID == _ownerID) then {  //Keep ownership

replace with:

 

if(_playerUID == _ownerID) then {  //Keep ownership

Find:

// owner can build anything within his plot except other plots

and if you want to enable the debug add directly under it:

diag_log text "Player is owner";

Find:

_tmpbuilt setVariable ["CharacterID",dayz_characterID,true]; 

and add directly under it:

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

Find:

 

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

and add directly under it:

 

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

Find:

 

PVDZE_obj_Publish = [_combination,_tmpbuilt,[_dir,_location],_classname];

Replace with:

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

Find:

 

PVDZE_obj_Publish = [dayz_characterID,_tmpbuilt,[_dir,_location],_classname];

Replace with:

PVDZE_obj_Publish = [dayz_characterID,_tmpbuilt,[_dir,_location,_playerUID],_classname];

Done.

 

  • player_buildingDowngrade.sqf

add to the private variables at the top:

,"_playerUID"

Find:

 

_needText = localize "str_epoch_player_246";

and add directly under it:

_playerUID = getPlayerUID player;

Find:

 

_ownerID = _nearestPole getVariable["CharacterID","0"];

replace with:

_ownerID = _nearestPole getVariable["ownerPUID","0"];

Find:

 

if(dayz_characterID == _ownerID) then {

replace with:

 

if(_playerUID == _ownerID) then {

Find:

_objectCharacterID 	= _obj getVariable ["CharacterID","0"];

and add directly under it:

_ownerID = _obj getVariable["ownerPUID","0"];

Find:

// Set location
_object setPosATL _location;

And add under it:

		// Set Owner.
		_object setVariable ["ownerPUID",_ownerID,true];
		
		diag_log format["Player_buildingdowngrade: [newclassname: %1] [_ownerID: %2] [_objectCharacterID: %2]",_newclassname, _ownerID, _objectCharacterID];

Find:

PVDZE_obj_Swap = [_objectCharacterID,_object,[_dir,_location],_classname,_obj,player];

replace with:

PVDZE_obj_Swap = [_objectCharacterID,_object,[_dir,_location,_ownerID],_classname,_obj,player];

Done.

  • player_tagfriendly.sqf

Find:

_callerID = _caller getVariable ["CharacterID", "0"];

replace with:

_callerID = getPlayerUID _caller;

Find:

_targetID = _target getVariable ["CharacterID", "0"];

Replace with:

_targetID = getPlayerUID _target;

add above this 2 entries:

diag_log format["[_target: $1] [_caller: %2]", _target,_caller];

add below this 2 entries:

diag_log format["[_targetID: $1] [_callerID: %2]", _targetID,_callerID];

Done.

  • player_upgrade.sqf

Find:

_ownerID = _nearestPole getVariable["CharacterID","0"];

Replace with:

_ownerID = _nearestPole getVariable["ownerPUID","0"];

add directly under it:

_playerUID = getPlayerUID player;

Find:

if(dayz_characterID == _ownerID) then {

replace with:

if(_playerUID == _ownerID) then {

Find:

_objectCharacterID 	= _obj getVariable ["CharacterID","0"];

add under it:

_ownerID = _obj getVariable["ownerPUID","0"];

Find:

			// Set location
			_object setPosATL _location;

Add under it:

			// Set Owner.
			_object setVariable ["ownerPUID",_ownerID,true];
			

Find:

PVDZE_obj_Swap = [_objectCharacterID,_object,[_dir,_location],_classname,_obj,player];

Replace with:

PVDZE_obj_Swap = [_objectCharacterID,_object,[_dir,_location, _ownerID],_classname,_obj,player];

Done.

  • Server_monitor.sqf

open it and find:

		if (!_wsDone) then {
			if (count _worldspace >= 1) then { _dir = _worldspace select 0; };
			_pos = [getMarkerPos "center",0,4000,10,0,2000,0] call BIS_fnc_findSafePos;
			if (count _pos < 3) then { _pos = [_pos select 0,_pos select 1,0]; };
			diag_log ("MOVED OBJ: " + str(_idKey) + " of class " + _type + " to pos: " + str(_pos));
		};

directly under it add:

 

		// Realign characterID to OwnerPUID - need to force save though.
		
		if (count _worldspace < 3) then
		{
			_worldspace set [count _worldspace, "0"];
		};		

		_ownerPUID = _worldspace select 2;
		
		// diag_log format["Server_monitor: [ObjectID = %1]  [ClassID = %2] [_ownerPUID = %3]", _idKey, _type, _ownerPUID];
		

Find:

_object setVariable ["ObjectID", _idKey, true];

Directly under it add:

 

_object setVariable ["OwnerPUID", _ownerPUID, true];

Done.

 

Now go to your init.sqf

and find:

_serverMonitor = 	[] execVM "\z\addons\dayz_code\system\server_monitor.sqf";

and replace it with your custom path pointing to your custom folder in my case it looks like this:

 

_serverMonitor = 	[] execVM "custom\server_monitor.sqf";

For me everything is working, i dont test the script before, i doed exact the same like above and its working for me with vanilla epoch and with my normal MPmission where i have about 22 custom files from the dayz_code.pbo.

#Edit: fixxed some synatx errors in my instruction

 

work manual to version v2.34 ?

Link to comment
Share on other sites

In most cases, the actual changes are pretty small, it is just that they happen all over the place.  A Plot for Life v2.34 is also already merged with SBP and modular building (both in the Epoch 1.0.6 possible release).

 

@Everyone.

 

There are two possible ways for the plot boundary to be displayed.

 

1. Local

Each person who wants to see the boundary must turn on the option from the plot pole.

Advantage - It is less resource hungry as the effect is only local to the players who turned the plot boundary on.

Disadvantage - Anyone who wants to see the boundary needs to turn it on - Less like real life.

 

2. Global

One person turns on the plot boundary and all can see it.

Advantage - One person turns the boundary on and all can see it (more like real life).

Disadvantage - Everyone elses world is made aware of it, even if they cannot see it - Bit more resource hungry.

 

Number 2 is already implemented.  F3cuk has raised a pull request for option 1 which I am also fine with but want to get other peoples views on whether to default to option 1 or 2.

 

Post your preference here and you all can decided which way is best for the mod  :) .

Link to comment
Share on other sites

In most cases, the actual changes are pretty small, it is just that they happen all over the place.  A Plot for Life v2.34 is also already merged with SBP and modular building (both in the Epoch 1.0.6 possible release).

 

@Everyone.

 

There are two possible ways for the plot boundary to be displayed.

 

1. Local

Each person who wants to see the boundary must turn on the option from the plot pole.

Advantage - It is less resource hungry as the effect is only local to the players who turned the plot boundary on.

Disadvantage - Anyone who wants to see the boundary needs to turn it on - Less like real life.

 

2. Global

One person turns on the plot boundary and all can see it.

Advantage - One person turns the boundary on and all can see it (more like real life).

Disadvantage - Everyone elses world is made aware of it, even if they cannot see it - Bit more resource hungry.

 

Number 2 is already implemented.  F3cuk has raised a pull request for option 1 which I am also fine with but want to get other peoples views on whether to default to option 1 or 2.

 

Post your preference here and you all can decided which way is best for the mod  :) .

Yeah, I was going to convert my merge of SBP with admin build/fast upgrade to the moduklar setup but i figured to keep things simple and keep mission sizes and file count down server owners would find it better staying with a single merged player_build, also Option 1 would be the best, plenty of players on my 6 servers still have low end rigs so less stress on client machines and the server in general plus i don't entirely see the need for it to be enabled for anyone other than the person who is using it to judge building distance limit, maybe another variable could be used in the init to toggle global or local only, keeping the option open to server owners, if isnil then default to local only

Link to comment
Share on other sites

Also whilst updating on my server, this code block in server_monitor, using notepad++, i go to merge the changes but i'm a little unsure what to do as i've got precise bases installed due to having build vectors, i'm not sure where or how to merge in this 

 

		// Realign characterID to OwnerPUID - need to force save though.
		if (DZE_APlotforLife) then {
			if (count _worldspace < 3) then
			{
				_worldspace set [count _worldspace, "0"];
			};		
			_ownerPUID = _worldspace select 2;
		} else {
			_ownerPUID = _ownerID;
		};

with this

 

		_vector = [[0,0,0],[0,0,0]];
		_vecExists = false;
		_ownerPUID = "0";
		if (count _worldspace >= 3) then{
			if(count _worldspace == 3) then{
					if(typename (_worldspace select 2) == "STRING")then{
						_ownerPUID = _worldspace select 2;
					}else{
						 if(typename (_worldspace select 2) == "ARRAY")then{
							_vector = _worldspace select 2;
							if(count _vector == 2)then{
								if(((count (_vector select 0)) == 3) && ((count (_vector select 1)) == 3))then{
									_vecExists = true;
								};
							};
						};					
					};
					
			}else{
				//Was not 3 elements, so check if 4 or more
				if(count _worldspace == 4) then{
					if(typename (_worldspace select 3) == "STRING")then{
						_ownerPUID = _worldspace select 3;
					}else{
						if(typename (_worldspace select 2) == "STRING")then{
							_ownerPUID = _worldspace select 2;
						};
					};
			
			
					if(typename (_worldspace select 2) == "ARRAY")then{
						_vector = _worldspace select 2;
						if(count _vector == 2)then{
							if(((count (_vector select 0)) == 3) && ((count (_vector select 1)) == 3))then{
								_vecExists = true;
							};
						};
					}else{

						if(typename (_worldspace select 3) == "ARRAY")then{
							_vector = _worldspace select 3;
							if(count _vector == 2)then{
								if(((count (_vector select 0)) == 3) && ((count (_vector select 1)) == 3))then{
									_vecExists = true;
								};
							};
						};
					};
					
				}else{
					//More than 3 or 4 elements found
					//Might add a search for the vector, ownerPUID will equal 0
				};
			};
		};

are you able to offer assistance on what i need to do?

Link to comment
Share on other sites

This is the problem with multiple mods using the same wouldspace field for different things.  You now need to account for all combinations.

 

If you want to be a pioneer then have a read through

 

If A Plot for Life is mandatory then you can leave the code as it is.

 

If you want to leave a Plot for Life as being a selectable option (you can turn it on or off) then wherever you see

_ownerPUID = _worldspace select [a number, i.e. 2];

change to

if (DZE_APlotforLife) then {
	_ownerPUID = _worldspace select [same number as the line it replaces, i.e. 2];
else {
	_ownerPUID = _ownerID;
};

 Do the same for all instances.  All you are doing is setting ownership based on if the A Plot for life variable to either SteamID or CharacterID rather than just setting it as the SteamID.

 

It can probably be done a bit more efficently but that is the best that comes to mind sitting at work ;) .

Link to comment
Share on other sites

This is the problem with multiple mods using the same wouldspace field for different things.  You now need to account for all combinations.

 

If you want to be a pioneer then have a read through

 

If A Plot for Life is mandatory then you can leave the code as it is.

 

If you want to leave a Plot for Life as being a selectable option (you can turn it on or off) then wherever you see

_ownerPUID = _worldspace select [a number, i.e. 2];

change to

if (DZE_APlotforLife) then {
	_ownerPUID = _worldspace select [same number as the line it replaces, i.e. 2];
else {
	_ownerPUID = _ownerID;
};

 Do the same for all instances.  All you are doing is setting ownership based on if the A Plot for life variable to either SteamID or CharacterID rather than just setting it as the SteamID.

 

It can probably be done a bit more efficently but that is the best that comes to mind sitting at work ;) .

Well that was an interesting read, I'd love to help out with some ideas but my brain isn't completely there for that sort of thing,  currently us P4L v2.2.6 as it is and it all works fine as my worldspace block is i just wasn't sure what to do exactly for v2.34 as i don't think i remember doing anything back in v2.2.6 xD i've updated the P4L version in my SBP w/ admin fast build/upgrade builds that use it in player_build + player_upgrade on my github one variant includes build vectors so i can imagine others will have this same issue with P4L as i don't include full steps to add each mod in to the rest of the files, i just include what mods are included and provide them the player_build and upgrade, so basically leave my worldspace block as it is and P4L will work fine just not be toggleable? I've actually got zupa's plot management, P4L and build vectors running so i take it my worldspace will be nearing its limits xD

Link to comment
Share on other sites

litl confused: why moved server_monitor.sqf to mission directory???

 

and if that's true?

 

server_funtions.sqf

 

under

server_updateObject = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_updateObject.sqf";

 

add line

 

server_publishFullObject = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_publishFullObject.sqf"

 

and more line in  Server_monitor.sqf

 

repack pbo not done? work method?

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
×
×
  • Create New...