Jump to content

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


Recommended Posts

No, I don't have PP4L but the Github download has SnapPro integrated into it, which I DO have installed.  Plus my Snap Pro has already been modified for Vector Build and Precise Base Build - which is NOT part of the Github download for PP4L.  That means if I follow his instructions, I'll be installing PP4L that does NOT have the other two so I'd have go back through Precise Base Build and Vector Build to replace/update the vanilla Snap Pro that is part of the PP4L Github download.  

 

I'm just trying to avoid the extra work of having to redo all the build scripts/mods. 

 

Is PP4L v2.5 close to completion?

 

Bob

Link to comment
Share on other sites

hey RimBlock,

 

thank you so much for your effort. I am really happy for all your hard work as for someone like me that has no knowledge you are really healping me allot in regards to gettng everything working.

I hope you and your family have a great festive season, takiing singapore has been in the MOOD since (felt) october :)

 

I am looking forward to the new version and hope then for me the duplication is sorted. Also Thank you to RedBaron for taking  the time helping RimBlock out. 

 

Best Regards.

Huppabubba

Link to comment
Share on other sites

No, I don't have PP4L but the Github download has SnapPro integrated into it, which I DO have installed.  Plus my Snap Pro has already been modified for Vector Build and Precise Base Build - which is NOT part of the Github download for PP4L.  That means if I follow his instructions, I'll be installing PP4L that does NOT have the other two so I'd have go back through Precise Base Build and Vector Build to replace/update the vanilla Snap Pro that is part of the PP4L Github download.  

 

I'm just trying to avoid the extra work of having to redo all the build scripts/mods. 

 

Is PP4L v2.5 close to completion?

 

Bob

 

My advice would be to wait a bit.

 

V2.4 is in testing.  Striker is aware and will be looking at integrating with his vector build and modifying Snap Build Pro.

 

v2.5 is not yet in development.  It is a list of items I want to add.  Once v2.4 is out then I will start on v2.5.

Link to comment
Share on other sites

hey RimBlock,

 

thank you so much for your effort. I am really happy for all your hard work as for someone like me that has no knowledge you are really healping me allot in regards to gettng everything working.

I hope you and your family have a great festive season, takiing singapore has been in the MOOD since (felt) october :)

 

I am looking forward to the new version and hope then for me the duplication is sorted. Also Thank you to RedBaron for taking  the time helping RimBlock out. 

 

Best Regards.

Huppabubba

 

Thanks and you are most welcome.

 

Both myself and RedBaron are hoping the sleeps in the take ownership will stop the extension call getting flodded with delete / create requests when taking ownership of large bases.

 

To all who may be reading this, have a great time over the holiday season and a happly, lucky, exciting (in a good way) New Year.  May your scopes be true and your loot bags full of tuna, spare mags and briefcases (without duping :P  ).

Link to comment
Share on other sites

New version up.

 

A Plot for Life v2.4

New features.
  1. Removed the option to turn the mod off (simpler, smaller code base)

  2. Removed option for modular build (it is now defaulted as on)

  3. New functions to reduce instances of common code in the building system.  Both are small and precompiled.

    1. fn_check_owner.sqf to check ownership and friendly status

    2. fn_find_plots to get all nearby plot poles and return a count and the nearest alive one (if one exists).

  4. Optimised a bit by changing nearestobjects to nearEntities.

  5. Added delay in the Take Ownership function so the Hiveext / DB does not get spammed when taking ownership of large bases.

  6. Moved totally to modular build.  Player_build.sqf is no longer used at all and had been removed from the distribution.

  7. Changes have saved between 20k & 30k in the mission package size.

First post and links updated.  Links to v2.35 kept just in case someone needs a version with player_buiild.sqf in.

Link to comment
Share on other sites

  1. Moved totally to modular build.  Player_build.sqf is no longer used at all and had been removed from the distribution.

 

Hey RimBlock got a question i want to run plotmanagement 2.1 and i wanne use your new version only 1 problem is

Player_build.sqf is not in there and plotmanagement needs it can you fix this or is there a way to work arround it

here is the link to show you on step 7

https://github.com/DevZupa/PlotManagement/blob/master/P4L_Epoch.md

Link to comment
Share on other sites

All three files now just use fn_check_owner.sqf for those checks so changing in that single file will sort it out for all three.

Have a look and play around. It should be pretty simple. If you post on Zupas thread he should be able to give you the code change pretty easily.

Gone 11 pm here and work day tomorrow. Will have a quick look if Zupa has not supplied an update.

Link to comment
Share on other sites

Hey RimBlock got a question i want to run plotmanagement 2.1 and i wanne use your new version only 1 problem is

Player_build.sqf is not in there and plotmanagement needs it can you fix this or is there a way to work arround it

here is the link to show you on step 7

https://github.com/DevZupa/PlotManagement/blob/master/P4L_Epoch.md

 

Ok, I have not looking in to Zupas Plot Management mod or the information he stores in his PlotFriends so this may or may not work.

 

Open "custom\A_Plot_for_Life\compiles\fn_check_owner.sqf"

 

Find

_friendlies	= _player getVariable ["friendlyTo",[]]; 

if (_playerUID in _friendlies) then { 
	_friendly = true; 
};

Change to

_friendlies	= _nearestPole getVariable ["plotfriends",[]];
_fuid  = [];
{
      _friendUID = _x select 0;
      _fuid  =  _fuid  + [_friendUID];
} forEach _friendlies;
if (_playerUID in _fuid) then { 
	_friendly = true; 
}; 

Logically it will be doing the same thing based on step 7 of the install instruction for Zupas mod you linked to.

 

It appears the player_buildDowngrading has not been updated to use the new functions.  I will correct and upload tonight. 

 

GIve it a go and if it is still not working then you will need to contact Zupa.

 

Note, the Modular Build System is just a set of small scripts made from cutting up the player_build script.  You should be able to find the code parts in the seperate files.  That check, before I created the new function, would have been in player_build_plotCheck.sqf.

Link to comment
Share on other sites

@RedBaron.

 

Note that ObjectUIDs are not 100% unique.  If the object class, position etc are the same then you will probably have had duplication but if the class names are not the same or the worldspace coords are not the same then you may have been hit by the weekness in the objectUID generation system.

 

The objectUID is genetated by a simple mathematical equation.

 

positive value of X *10 + positive value of Y *10 + positive value of Z *10 + direction (in degrees).

 

If an objects x/y/z/dir = 1,1,10,1 then it will have the same objectUID as an object with 10,1,1,1

 

Some of your duplicates may have been due to that.

 

Ideally there should be a rolling objectUID in game assigned rather than a calculated one.  I may look at putting one in place as an update to v2.4.  It should be pretty easy to do (on the face of it).

 

There are 3 objectUID generation bits of code.

  • dayz_objectUID
  • dayz_objectUID2
  • dayz_objectUID3

Nothing seems to be using dayz_objectUID, dayz_objectUID2 is used for object objectUIDs, dayz_objectUID3 is used for vehicles and just adds "time" (time from mission start to present) to the vehicles direction.

 

I would imagine this is old legacy code that was just never revisited or just left for DayZ compatibility (if DayZ is using this method).

Link to comment
Share on other sites

Hi Rimblock, hope you are having a good Christmas so far :)

 

Bit of bad news I'm afraid, we switched take ownership back on on the 23rd December. I have just done a check using the SQL and there were 55 duped rows against 2 players.

 

I did a second pass and had 11 rows, a third and had another 10.

 

Taking into account what you said about object ID's, I had a quick look and they are duped items not, just another random object.

 

So in short, we're still failing but, there is a definite improvement from the 440 odd rows that were duped the first time round without the sleeps at all.

 

So, do you think this could be solved with more sleeps or increasing the time on the existing ones? Sorry, out of my depth when it comes to code....

 

I dumped copies of the rows before deleting in case you may want to see them. Let me know if you do and I'll PM them to you.

 

Also, can I ask does maintaining now only maintain your own items or, does it still maintain any items in the maintain range? 

 

Thanks

Link to comment
Share on other sites

Hey Rimblock,

 

my Server is fresh, Overpoch on Sauerland is installed.

 

Your script is now the first which will be installed. After that i'll install the Vector Script / Plot Mangement and i will gradually edit with what your script is compatible or if there are problems at some steps.

 

Sorry for my english :D

 

Edit 1: it works with your newest dropbox v2.4 version, but!

 

if i replace the following lines inside the init.sqf like that :

Search for
call compile preprocessFileLineNumbers "\z\addons\dayz_code\init\variables.sqf";
Replace with
call compile preprocessFileLineNumbers "Custom\A_Plot_for_Life\init\variables.sqf";
Search for
call compile preprocessFileLineNumbers "\z\addons\dayz_code\init\publicEH.sqf";
Replace with
call compile preprocessFileLineNumbers "Custom\A_Plot_for_Life\init\publicEH.sqf";
Search for
call compile preprocessFileLineNumbers "\z\addons\dayz_code\init\compiles.sqf";
Replace with
call compile preprocessFileLineNumbers "Custom\A_Plot_for_Life\init\compiles.sqf";

for example the infistar tool does not work anymore.

 

at the moment i have this :

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

progressLoadingScreen 0.1;

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

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 "\z\addons\dayz_code\init\compiles.sqf";				//Compile regular functions
call compile preprocessFileLineNumbers "Custom\A_Plot_for_Life\init\compiles.sqf";
call compile preprocessFileLineNumbers "Custom\compiles.sqf";	

that works now.

 

Another question, does it make a difference if this line appears two times like that? otherwise I would add the old line again, at the moment only your line is present in my init ;)

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

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

i am a bit new with scripting, the question is because i assume that by replacing the old path certain things are "disabled" or i got this wrong?

 

Edit 2: it works and works but a vault/lockbox doesnt work anymore, i got no option to open after a few tests with the exactly introduction via your readme or via my lines with no replacing - i've tested it with both methods and backup files. I'll wait with the other scripts a bit, maybe there's a solution ?

 

 

greetings

Link to comment
Share on other sites

Mikeeeyy has kindly allowed me to include precision base building in to A Plot for LIfe.  This means that the system to stop walls moving and gaps forming in your bases will be included as standard in a future release.

 

I will look to include it in the next release.

 

Many thanks to Mikeeeyy (who wrote it for Epoch) and to KillZoneKid for the original code that manages the conversions.

Link to comment
Share on other sites

@fettneX

 

This mod is built for Epoch and has not been tested on Overpoch and is not supported of Overpoch installs.

 

Having said that....

 

If you link to one file and then link to another file and both contain code with the same function name then the last one to be called will overwrite the first one.

 

ie.

 

File 1

testfunction = {diag_log text :Cat.";}

 

File 2

testfunction = {diag_log text :Dog.";}

 

Main code

[] call testfunction;

 

Result = Dog.

 

Now what may be happening is that the original functions defined in the compiles etc in the Overpoch files are defining Overpoch functions with different names to the Epoch functions.  Calling the compiles etc from my mod then only overwrites the Epoch functions and not the Overpoch ones as they have different names.  THis is all just a theory though.

 

The downside with this is that you are defining functions more than once which is wasteful and makes startup slower.  The better way would be to use something like diffmerge to merge the changes in to a single file that is then called.  There are two links to guide on how to do this on the first post.

 

I also do not use / support infinistar.  You would have to go back to him.

 

For the servermonitor line, you are kicking off two processes that are trying to do the same thing.  You should only be running one server_monitor.

Link to comment
Share on other sites

@RedBaron,

 

Are you able to dump out the objects for a base where this is happening or provide a copy of your DB for me to load in to my test server.  I can then see if I can simulate the issue.  Upload to dropbox or something and PM me the link then take off after I have downloaded.

 

Which map are you using ?.

 

Also, just to be sure, this issue did not occur when you tested on your test server taking ownership of the same bases ?.

 

An idea of the hardware you are using may help and, if you have any idea, what were the player numbers like when the duplication happened ?.

 

You could change the sleep to uisleep which is a bit more accurate.  You could try playing with the numbers a bit.

 

0.01 = 100 items a second.

0.05 = 20 items a second.

 

 

 

Thanks.

Link to comment
Share on other sites

I just attempted to install the latest version.  I have a lot of scripts running with a heavily modified compiles.sqf, variables.sqf, and others.  I already had Snap Pro 1.4.1 with Vector Build and Precise Base Build installed.   In an attempt to not have to back anything out, I compared scripts and merged what was appropriate so as to not (hopefully) break any scripts that were already running successfully.  Other scripts had already modified about half of the files from PP4L and they are already in my "custom" directory. I merged with the PP4L files of the same name and changed the references in all locations I could find.

 

So I cannot even get it to start now. I get this error in my server-side .rpt:

 

15:02:22 "DayZ Epoch: PRELOAD Functions\init [[:0 (FunctionsManager)],any]"


15:02:22 "DayZ Epoch: MPframework inited"
15:02:24 Error in expression if(_unit == _PUID player) then {
player setVariable["publi>
15:02:24 Error position: player setVariable["publi>
15:02:24 Error Missing )
15:02:24 File mpmissions\DayZ_Epoch_13.Tavi\custom\compiles.sqf, line 47
15:02:24 Error in expression if(_unit == _PUID player) then {
player setVariable["publi>
15:02:24 Error position: player setVariable["publi>
15:02:24 Error Missing )
15:02:24 File mpmissions\DayZ_Epoch_13.Tavi\custom\compiles.sqf, line 47
15:02:27 Warning: z\addons\dayz_communityassets\models\compass.p3d:0 Error while trying to generate ST for points: 863, 853, 852
15:02:31 "Res3tting B!S effects..."

 

and here's my compiles.sqf.

 

/*


FUNCTION COMPILES
*/
//Player only
if (!isDedicated) then {

"filmic" setToneMappingParams [0.07, 0.31, 0.23, 0.37, 0.011, 3.750, 6, 4]; setToneMapping "Filmic";

BIS_Effects_Burn = compile preprocessFile "\ca\Data\ParticleEffects\SCRIPTS\destruction\burn.sqf";
player_zombieCheck = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_zombieCheck.sqf"; //Run on a players computer, checks if the player is near a zombie
player_zombieAttack = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_zombieAttack.sqf"; //Run on a players computer, causes a nearby zombie to attack them
fnc_usec_damageActions = compile preprocessFileLineNumbers "custom\fn_damageActions.sqf"; //Checks which actions for nearby casualty
fnc_inAngleSector = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_inAngleSector.sqf"; //Checks which actions for nearby casualty
fnc_usec_selfActions = compile preprocessFileLineNumbers "custom\fn_selfActions.sqf";
//Checks which actions for self
fnc_usec_unconscious = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_unconscious.sqf";
player_temp_calculation = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_temperatur.sqf"; //Temperatur System //TeeChange
player_weaponFiredNear = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_weaponFiredNear.sqf";
player_animalCheck = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_animalCheck.sqf";
player_spawnCheck = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_spawnCheck.sqf";
player_dumpBackpack = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_dumpBackpack.sqf";
building_spawnLoot = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\building_spawnLoot.sqf";
building_spawnZombies = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\building_spawnZombies.sqf";
dayz_spaceInterrupt = compile preprocessFileLineNumbers "custom\dayz_spaceInterrupt.sqf";
player_fired = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_fired.sqf"; //Runs when player fires. Alerts nearby Zeds depending on calibre && audial rating
player_harvest = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_harvest.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_removeNearby = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\object_removeNearby.sqf";

player_removeTankTrap = {
//Object Array, Range, Error Message (@Skaronator)
[["Hedgehog_DZ"], 1,"STR_EPOCH_ACTIONS_14"] call player_removeNearby;
};
player_removeNet = {
[["DesertLargeCamoNet","ForestCamoNet_DZ","DesertLargeCamoNet_DZ","ForestLargeCamoNet_DZ"], 5,"str_epoch_player_8"] call player_removeNearby;
};

player_login = {
private ["_unit","_detail","_PUID"];
_unit = _this select 0;
_detail = _this select 1;
_PUID = [player] call FNC_GetPlayerUID;
if(_unit == _PUID player) then {
player setVariable["publish",_detail];
};
};

player_unlockDoor = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_unlockDoor.sqf";
player_changeCombo = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_changeCombo.sqf";

player_lockVault = compile preprocessFileLineNumbers "custom\player_lockVault.sqf";
player_updateGui = compile preprocessFileLineNumbers "custom\player_updateGui.sqf";
player_crossbowBolt = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_crossbowBolt.sqf";
player_music = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_music.sqf"; //Used to generate ambient music
player_death = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_death.sqf";
player_switchModel = compile preprocessFileLineNumbers "custom\player_switchModel.sqf";
player_checkStealth = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_checkStealth.sqf";
world_sunRise = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_sunRise.sqf";
world_surfaceNoise = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_surfaceNoise.sqf";
player_humanityMorph = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_humanityMorph.sqf";
player_throwObject = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_throwObject.sqf";
player_alertZombies = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_alertZombies.sqf";
player_fireMonitor = compile preprocessFileLineNumbers "\z\addons\dayz_code\system\fire_monitor.sqf";
fn_gearMenuChecks = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_gearMenuChecks.sqf";

//SUV and MV22 Actions
mv22_pack = compile preprocessFileLineNumbers "\ca\air2\mv22\scripts\pack.sqf";

//Objects
object_roadFlare = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\object_roadFlare.sqf";
object_setpitchbank = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_setpitchbank.sqf";
object_monitorGear = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\object_monitorGear.sqf";

local_roadDebris = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\local_roadDebris.sqf";

//Zombies
zombie_findTargetAgent = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\zombie_findTargetAgent.sqf";
zombie_loiter = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\zombie_loiter.sqf"; //Server compile, used for loiter behaviour
zombie_generate = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\zombie_generate.sqf"; //Server compile, used for loiter behaviour
wild_spawnZombies = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\wild_spawnZombies.sqf"; //Server compile, used for loiter behaviour

pz_attack = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\pzombie\pz_attack.sqf";

dog_findTargetAgent = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\dog_findTargetAgent.sqf";

//Code Changer
ckc_button = compile preprocessFileLineNumbers "ckc\ckc_button.sqf";
ckc_upddoor = compile preprocessFileLineNumbers "ckc\ckc_upddoor.sqf";
ckc_updSafe = compile preprocessFileLineNumbers "ckc\ckc_updSafe.sqf";

//actions
player_countmagazines = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\player_countmagazines.sqf";
player_addToolbelt = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\player_addToolbelt.sqf";
player_copyKey = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\player_copyKey.sqf";
player_reloadMag = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\player_reloadMags.sqf";
player_loadCrate = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\player_loadCrate.sqf";
player_craftItem = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\player_craftItem.sqf";
player_tentPitch = compile preprocessFileLineNumbers "custom\tent_pitch.sqf";
player_vaultPitch = compile preprocessFileLineNumbers "custom\vault_pitch.sqf";
player_drink = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\player_drink.sqf";
player_eat = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\player_eat.sqf";
player_useMeds = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\player_useMeds.sqf";
player_fillWater = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\water_fill.sqf";
player_makeFire = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\player_makefire.sqf";
player_harvestPlant = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\player_harvestPlant.sqf";
player_goFishing = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\player_goFishing.sqf";
//Snap Build

player_build = compile preprocessFileLineNumbers "scripts\PP4L\Action\modular_build.sqf";
player_build_countNearby = compile preprocessFileLineNumbers "scripts\PP4L\Action\player_build_countNearby.sqf";
player_build_states = compile preprocessFileLineNumbers "scripts\PP4L\Action\player_build_states.sqf";
player_build_needNearby = compile preprocessFileLineNumbers "scripts\PP4L\Action\player_build_needNearby.sqf";
player_build_getConfig = compile preprocessFileLineNumbers "scripts\PP4L\Action\player_build_getConfig.sqf";
player_build_plotCheck = compile preprocessFileLineNumbers "scripts\PP4L\Action\player_build_plotCheck.sqf";
player_build_buildReq = compile preprocessFileLineNumbers "scripts\PP4L\Action\player_build_buildReq.sqf";
player_build_create = compile preprocessFileLineNumbers "scripts\PP4L\Action\player_build_create.sqf";
player_build_controls = compile preprocessFileLineNumbers "scripts\PP4L\Action\player_build_controls.sqf";
player_build_publish = compile preprocessFileLineNumbers "scripts\PP4L\Action\player_build_publish.sqf";

DZE_snap_build_file = "scripts\Snap_Pro\snap_build.sqf"; // Set as a global variable as it is also referenced in snapbuild.sqf

// player_build = compile preprocessFileLineNumbers "scripts\snap_pro\player_build.sqf";

snap_build = compile preprocessFileLineNumbers DZE_snap_build_file;

player_wearClothes = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\player_wearClothes.sqf";
object_pickup = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\object_pickup.sqf";
player_flipvehicle = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\player_flipvehicle.sqf";
player_sleep = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\player_sleep.sqf";
player_antiWall = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_antiWall.sqf";
player_deathBoard = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\list_playerDeathsAlt.sqf";


player_plotPreview = compile preprocessFileLineNumbers "custom\object_showPlotRadius.sqf";
player_upgradeVehicle = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_upgradeVehicle.sqf";

//ui
player_selectSlot = compile preprocessFileLineNumbers "custom\ui_selectSlot.sqf";;
player_gearSync = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_gearSync.sqf";
player_gearSet = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_gearSet.sqf";
ui_changeDisplay = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\ui_changeDisplay.sqf";
ui_gear_sound = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\ui_gear_sound.sqf";

//System
player_monitor = compile preprocessFileLineNumbers "\z\addons\dayz_code\system\player_monitor.sqf";
player_spawn_1 = compile preprocessFileLineNumbers "\z\addons\dayz_code\system\player_spawn_1.sqf";
player_spawn_2 = compile preprocessFileLineNumbers "\z\addons\dayz_code\system\player_spawn_2.sqf";
onPreloadStarted "dayz_preloadFinished = false;";
onPreloadFinished "dayz_preloadFinished = true;";

// helper functions
player_hasTools = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_hasTools.sqf";
player_checkItems = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_checkItems.sqf";
player_removeItems = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_removeItems.sqf";
//Trader ["Trader City Name",false,"enter"] - Trader City Name | Show Message | "enter" || "leave"
player_traderCity = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_traderCity.sqf";

// combination of check && remove items
player_checkAndRemoveItems = {
private ["_items","_b"];
_items = _this;
_b = _items call player_checkItems;
if (_ B) then {
_b = _items call player_removeItems;
};
_b
};

dayz_HungerThirst = {
dayz_hunger = dayz_hunger + (_this select 0);
dayz_thirst = dayz_thirst + (_this select 1);
};

epoch_totalCurrency = {
// total currency
private ["_total_currency","_part","_worth"];

_total_currency = 0;
{
_part = (configFile >> "CfgMagazines" >> _x);
_worth = (_part >> "worth");
if isNumber (_worth) then {
_total_currency = _total_currency + getNumber(_worth);
};
} count (magazines player);
_total_currency
};

epoch_itemCost = {
private ["_trade_total","_part_inWorth","_part_in_configClass"];

_trade_total = 0;
{
_part_in_configClass = configFile >> "CfgMagazines" >> (_x select 0);
if (isClass (_part_in_configClass)) then {
_part_inWorth = (_part_in_configClass >> "worth");
if isNumber (_part_inWorth) then {
_trade_total = _trade_total + (getNumber(_part_inWorth) * (_x select 1));
};
};
} count _this;

//diag_log format["DEBUG TRADER ITEMCOST: %1", _this];
_trade_total
};

epoch_returnChange = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\epoch_returnChange.sqf";
// usage [["partinclassname",4]] call epoch_returnChange;

dayz_losChance = {
private["_agent","_maxDis","_dis","_val","_maxExp","_myExp"];
_agent = _this select 0;
_dis = _this select 1;
_maxDis = _this select 2;
// diag_log ("VAL: " + str(_this));
_val = (_maxDis - _dis) max 0;
_maxExp = ((exp 2) * _maxDis);
_myExp = ((exp 2) * (_val)) / _maxExp;
_myExp = _myExp * 0.7;
_myExp
};

ui_initDisplay = {
private["_control","_ctrlBleed","_display","_ctrlFracture","_ctrlDogFood","_ctrlDogWater","_ctrlDogWaterBorder", "_ctrlDogFoodBorder"];
disableSerialization;
_display = uiNamespace getVariable 'DAYZ_GUI_display';
_control = _display displayCtrl 1204;
_control ctrlShow false;
if (!r_player_injured) then {
_ctrlBleed = _display displayCtrl 1303;
_ctrlBleed ctrlShow false;
};
if (!r_fracture_legs && !r_fracture_arms) then {
_ctrlFracture = _display displayCtrl 1203;
_ctrlFracture ctrlShow false;
};
_ctrlDogFoodBorder = _display displayCtrl 1501;
_ctrlDogFoodBorder ctrlShow false;
_ctrlDogFood = _display displayCtrl 1701;
_ctrlDogFood ctrlShow false;

_ctrlDogWaterBorder = _display displayCtrl 1502;
_ctrlDogWaterBorder ctrlShow false;
_ctrlDogWater = _display displayCtrl 1702;
_ctrlDogWater ctrlShow false
};

dayz_losCheck = {
private ["_target","_agent","_cantSee","_tPos","_zPos"];
_target = _this select 0; // PUT THE PLAYER IN FIRST ARGUMENT!!!!
_agent = _this select 1;
_cantSee = true;
if (!isNull _target) then {

_tPos = visiblePositionASL _target;
_zPos = visiblePositionASL _agent;

_tPos set [2,(_tPos select 2)+1];
_zPos set [2,(_zPos select 2)+1];

if ((count _tPos > 0) && (count _zPos > 0)) then {
_cantSee = terrainIntersectASL [_tPos, _zPos];
if (!_cantSee) then {
_cantSee = lineIntersects [_tPos, _zPos, _agent, vehicle _target];
};
};
};
_cantSee
};

dayz_equipCheck = {
private ["_empty","_needed","_diff","_success","_config"];
_config = _this;
_empty = [player] call BIS_fnc_invSlotsEmpty;
_needed = [_config] call BIS_fnc_invSlotType;
_diff = [_empty,_needed] call BIS_fnc_vectorDiff;

_success = true;
{
if (_x > 0) then {_success = false};
} count _diff;
hint format["Config: %5\nEmpty: %1\nNeeded: %2\nDiff: %3\nSuccess: %4",_empty,_needed,_diff,_success,_config];
_success
};

vehicle_gear_count = {
private["_counter"];
_counter = 0;
{
_counter = _counter + _x;
} count _this;
_counter
};

player_tagFriendlyMsg = {
if(player == (_this select 0)) then {
cutText[(localize "str_epoch_player_2"),"PLAIN DOWN"];
};
};

player_serverModelChange = {
private["_object","_model"];
_object = _this select 0;
_model = _this select 1;
if (_object == player) then {
_model call player_switchModel;
};
};

player_guiControlFlash = {
private["_control"];
_control = _this;
if (ctrlShown _control) then {
_control ctrlShow false;
} else {
_control ctrlShow true;
};
};

gearDialog_create = {
private ["_i","_dialog"];
if (!isNull (findDisplay 106)) then {
(findDisplay 106) closeDisplay 0;
};
openMap false;
closeDialog 0;
if (gear_done) then {sleep 0.001;};
player action ["Gear", player];
if (gear_done) then {sleep 0.001;};
_dialog = findDisplay 106;
_i = 0;
while {isNull _dialog} do {//DO NOT CHANGE TO A FOR LOOP!
_i = _i + 1;
_dialog = findDisplay 106;
if (gear_done) then {sleep 0.001;};
if (_i in [100,200,299]) then {
closeDialog 0;
player action ["Gear", player];
};
if (_i > 300) exitWith {};
};
if (gear_done) then {sleep 0.001;};
_dialog = findDisplay 106;
if ((parseNumber(_this select 0)) != 0) then {
ctrlActivate (_dialog displayCtrl 157);
if (gear_done) then {
waitUntil {ctrlShown (_dialog displayCtrl 159)};
sleep 0.001;
};
};
_dialog
};

gear_ui_offMenu = {
private ["_control","_parent","_menu","_grpPos"];
disableSerialization;
_control = _this select 0;
_parent = findDisplay 106;
if (!(_this select 3)) then {
for "_i" from 0 to 9 do {
_menu = _parent displayCtrl (1600 + _i);
_menu ctrlShow false;
};
_grpPos = ctrlPosition _control;
_grpPos set [3,0];
_control ctrlSetPosition _grpPos;
_control ctrlShow false;
_control ctrlCommit 0;
};
};

dze_surrender_off = {
player setVariable ["DZE_Surrendered", false, true];
DZE_Surrender = false;
};

gear_ui_init = {
private ["_control","_parent","_menu","_grpPos"];
disableSerialization;
_parent = findDisplay 106;
_control = _parent displayCtrl 6902;
for "_i" from 0 to 9 do {
_menu = _parent displayCtrl (1600 + _i);
_menu ctrlShow false;
};
_grpPos = ctrlPosition _control;
_grpPos set [3,0];
_control ctrlSetPosition _grpPos;
_control ctrlShow false;
_control ctrlCommit 0;
};

dayz_eyeDir = {
private["_vval","_vdir"];
_vval = (eyeDirection _this);
_vdir = (_vval select 0) atan2 (_vval select 1);
if (_vdir < 0) then {_vdir = 360 + _vdir};
_vdir
};

DZE_getModelName = {
private ["_i","_objInfo","_lenInfo","_objName"];
_objInfo = toArray(str(_this));
_lenInfo = count _objInfo - 1;
_objName = [];
_i = 0;
// determine where the object name starts
{
if (58 == _objInfo select _i) exitWith {};
_i = _i + 1;
} count _objInfo;
_i = _i + 2; // skip the ": " part
for "_k" from _i to _lenInfo do {
_objName set [(count _objName), (_objInfo select _k)];
};
_objName = toLower(toString(_objName));
_objName
};

dze_isnearest_player = {
private ["_notClosest","_playerDistance","_nearPlayers","_playerNear"];
if(!isNull _this) then {
_nearPlayers = _this nearEntities ["CAManBase", 12];
_playerNear = ({isPlayer _x} count _nearPlayers) > 1;
_notClosest = false;
if (_playerNear) then {
// check if another player is closer
_playerDistance = player distance _this;
{
if (_playerDistance > (_x distance _this)) exitWith { _notClosest = true; };
} count _nearPlayers;
};
} else {
_notClosest = false;
};
_notClosest
};

// trader menu code
if (DZE_ConfigTrader) then {
call compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_traderMenuConfig.sqf";
}else{
call compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_traderMenuHive.sqf";
};
// recent murders menu code
call compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_murderMenu.sqf";

call compile preprocessFileLineNumbers "custom\player_traderMenuHive.sqf";


/*
//This is still needed but the fsm should terminate if any errors pop up.
[] spawn {
private["_timeOut","_display","_control1","_control2"];
disableSerialization;
_timeOut = 0;
dayz_loadScreenMsg = "";
diag_log "DEBUG: loadscreen guard started.";
_display = uiNameSpace getVariable "BIS_loadingScreen";
if (!isNil "_display") then {
_control1 = _display displayctrl 8400;
_control2 = _display displayctrl 102;
};
if (!isNil "dayz_DisplayGenderSelect") then {
waitUntil {!dayz_DisplayGenderSelect};
};

// 120 sec timeout (12000 * 0.01)
while { _timeOut < 12000 } do {
if (dayz_clientPreload && dayz_authed) exitWith { diag_log "PLOGIN: Login loop completed!"; };
if (!isNil "_display") then {
if ( isNull _display ) then {
waitUntil { !dialog; };
startLoadingScreen ["","RscDisplayLoadCustom"];
_display = uiNameSpace getVariable "BIS_loadingScreen";
_control1 = _display displayctrl 8400;
_control2 = _display displayctrl 102;
};

if ( dayz_loadScreenMsg != "" ) then {
_control1 ctrlSetText dayz_loadScreenMsg;
dayz_loadScreenMsg = "";
};

_control2 ctrlSetText format["%1",round(_timeOut*0.01)];
};

_timeOut = _timeOut + 1;

if (_timeOut >= 12000) then {
1 cutText [localize "str_player_login_timeout", "PLAIN DOWN"];
sleep 10;
endLoadingScreen;
endMission "END1";
};

sleep 0.01;
};
};
*/

Zupa_LoadingMessage = ["Loading up server."]; // initial message before the server ever sends a message to the client.
"PVDZE_Z_LoadMessage" addPublicVariableEventHandler {Zupa_LoadingMessage = _this select 1;};

//This is still needed but the fsm should terminate if any errors pop up.
[] spawn {
private["_timeOut","_display","_control1","_control2"];
disableSerialization;
_timeOut = 0;
dayz_loadScreenMsg = "";
diag_log "DEBUG: loadscreen guard started.";
_display = uiNameSpace getVariable "BIS_loadingScreen";
if (!isNil "_display") then {
_control1 = _display displayctrl 8400;
_control2 = _display displayctrl 102;
};
if (!isNil "dayz_DisplayGenderSelect") then {
waitUntil {!dayz_DisplayGenderSelect};
};

// 120 sec timeout (12000 * 0.01)
while { _timeOut < 12000 } do {
if (dayz_clientPreload && dayz_authed) exitWith {
diag_log "PLOGIN: Login loop completed!";
endLoadingScreen;
};
if (!isNil "_display") then {
if ( isNull _display ) then {
waitUntil { !dialog; };
startLoadingScreen ["","RscDisplayLoadCustom"];
_display = uiNameSpace getVariable "BIS_loadingScreen";
_control1 = _display displayctrl 8400;
_control2 = _display displayctrl 102;
};
_control1 ctrlSetText format["theAbandoned: %1 & %2.",Zupa_LoadingMessage select 0 ,dayz_loadScreenMsg];
_control2 ctrlSetText format["%1",round(_timeOut*0.01)];
};

if( Zupa_LoadingMessage select 0 != "Server running")then{
_timeOut = 0;
}else{
_timeOut = _timeOut + 1;
};

if (_timeOut >= 12000) then {
1 cutText [localize "str_player_login_timeout", "PLAIN DOWN"];
sleep 10;
endLoadingScreen;
endMission "END1";
};

sleep 0.01;
};
};

dayz_meleeMagazineCheck = {
private ["_meleeNum","_magType","_wpnType"];
_magType = ([] + getArray (configFile >> "CfgWeapons" >> _wpnType >> "magazines")) select 0;
_meleeNum = ({_x == _magType} count magazines player);
if (_meleeNum < 1) then {
player addMagazine _magType;
};
};

dayz_originalPlayer = player;

progressLoadingScreen 0.8;
};

//Both
BIS_fnc_selectRandom = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\BIS_fnc\fn_selectRandom.sqf";
BIS_fnc_vectorAdd = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\BIS_fnc\fn_vectorAdd.sqf";
BIS_fnc_halo = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\BIS_fnc\fn_halo.sqf";
BIS_fnc_findNestedElement = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\BIS_fnc\fn_findNestedElement.sqf";
BIS_fnc_param = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\BIS_fnc\fn_param.sqf";

fnc_buildWeightedArray = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_buildWeightedArray.sqf"; //Checks which actions for nearby casualty
fnc_usec_damageVehicle = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_damageHandlerVehicle.sqf"; //Event handler run on damage

// object_vehicleKilled = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\object_vehicleKilled.sqf"; //Event handler run on damage
object_setHitServer = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\object_setHitServer.sqf"; //process the hit as a NORMAL damage (useful for persistent vehicles)
object_setFixServer = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\object_setFixServer.sqf"; //process the hit as a NORMAL damage (useful for persistent vehicles)
object_getHit = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\object_getHit.sqf"; //gets the hit value for a HitPoint (i.e. HitLegs) against the selection (i.e. "legs"), returns the value
object_setHit = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\object_setHit.sqf"; //process the hit as a NORMAL damage (useful for persistent vehicles)
object_processHit = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\object_processHit.sqf"; //process the hit in the REVO damage system (records && sets hit)
object_delLocal = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\object_delLocal.sqf";
// object_cargoCheck = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\object_cargoCheck.sqf"; //Run by the player || server to monitor changes in cargo contents
fnc_usec_damageHandler = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_damageHandler.sqf"; //Event handler run on damage
fnc_veh_ResetEH = compile preprocessFileLineNumbers "\z\addons\dayz_code\init\veh_ResetEH.sqf"; //Initialize vehicle
// Vehicle damage fix
vehicle_handleDamage = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\vehicle_handleDamage.sqf";
vehicle_handleKilled = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\vehicle_handleKilled.sqf";
//fnc_vehicleEventHandler = compile preprocessFileLineNumbers "\z\addons\dayz_code\init\vehicle_init.sqf"; //Initialize vehicle
fnc_inString = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_inString.sqf";
fnc_isInsideBuilding = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_isInsideBuilding.sqf"; //_isInside = [_unit,_building] call fnc_isInsideBuilding;
fnc_isInsideBuilding2 = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_isInsideBuilding2.sqf"; //_isInside = [_unit,_building] call fnc_isInsideBuilding2;
fnc_isInsideBuilding3 = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_isInsideBuilding3.sqf"; //_isInside = [_unit,_building] call fnc_isInsideBuilding3;
dayz_zombieSpeak = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\object_speak.sqf"; //Used to generate random speech for a unit
vehicle_getHitpoints = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\vehicle_getHitpoints.sqf";
local_gutObject = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\local_gutObject.sqf"; //Generated on the server (|| local to unit) when gutting an object
local_lockUnlock = compile preprocessFileLineNumbers "scripts\mf-tow\local_lockUnlock.sqf"; //When vehicle is local to unit perform locking vehicle
local_gutObjectZ = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\local_gutObjectZ.sqf"; //Generated on the server (|| local to unit) when gutting an object
local_zombieDamage = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_damageHandlerZ.sqf"; //Generated by the client who created a zombie to track damage
local_eventKill = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\local_eventKill.sqf"; //Generated when something is killed
//player_weaponCheck = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_weaponCheck.sqf"; //Run by the player || server to monitor whether they have picked up a new weapon
curTimeStr = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_curTimeStr.sqf";
player_medBandage = compile preprocessFileLineNumbers "\z\addons\dayz_code\medical\publicEH\medBandaged.sqf";
player_medInject = compile preprocessFileLineNumbers "\z\addons\dayz_code\medical\publicEH\medInject.sqf";
player_medEpi = compile preprocessFileLineNumbers "\z\addons\dayz_code\medical\publicEH\medEpi.sqf";
player_medTransfuse = compile preprocessFileLineNumbers "\z\addons\dayz_code\medical\publicEH\medTransfuse.sqf";
player_medMorphine = compile preprocessFileLineNumbers "\z\addons\dayz_code\medical\publicEH\medMorphine.sqf";
player_breaklegs = compile preprocessFileLineNumbers "\z\addons\dayz_code\medical\publicEH\medBreakLegs.sqf";
player_medPainkiller = compile preprocessFileLineNumbers "\z\addons\dayz_code\medical\publicEH\medPainkiller.sqf";
//Stronghold
player_buildStronghold = compile preprocessFileLineNumbers "scripts\build\stronghold\s.sqf";
world_isDay = {if ((daytime < (24 - dayz_sunRise)) && (daytime > dayz_sunRise)) then {true} else {false}};
player_humanityChange = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_humanityChange.sqf";
spawn_loot = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\spawn_loot.sqf";
spawn_loot_small = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\spawn_loot_small.sqf";
// player_projectileNear = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_projectileNear.sqf";

FNC_GetPlayerUID = {
private ["_object","_version","_PID"];
_object = _this select 0;
_version = productVersion select 3;
if (DayZ_UseSteamID) then {
_PID = GetPlayerUID _object;
} else {
if (_version >= 125548) then {
_PID = call (compile "GetPlayerUIDOld _object");
} else {
_PID = GetPlayerUID _object;
diag_log format["Your game version, %1, is less than the required for the old UID system; using Steam ID system instead. Update to 1.63.125548 (or latest steam beta)", _version];
};
};
_PID
};

FNC_GetSetPos = { //DO NOT USE IF YOU NEED ANGLE COMPENSATION!!!!
private ["_pos","_thingy"];
_thingy = _this select 0;
_pos = getPosASL _thingy;
if (surfaceIsWater _pos) then {
_thingy setPosASL _pos;
} else {
_thingy setPosATL (ASLToATL _pos);
};
};

FNC_GetPos = {
private ["_pos","_thingy"];
if (isNil {_this select 0}) exitWith {[0,0,0]};
_thingy = _this select 0;
_pos = getPosASL _thingy;
if !(surfaceIsWater _pos) then {
_pos = ASLToATL _pos;
};
_pos
};

local_setFuel = {
private["_qty","_vehicle"];
_vehicle = _this select 0;
_qty = _this select 1;
_vehicle setFuel _qty;
};

zombie_initialize = {
private ["_unit","_id","_position"];
_unit = _this select 0;
if (isServer) then {
_unit addEventHandler ["local", {_this call zombie_findOwner}];
};
_id = _unit addeventhandler["HandleDamage", { _this call local_zombieDamage }];
_id = _unit addeventhandler["Killed", { [_this, "zombieKills"] call local_eventKill }];
};

dayz_EjectPlayer = {
// check if player in vehicle
private ["_noDriver","_vehicle","_inVehicle"];
_vehicle = vehicle player;
_inVehicle = (_vehicle != player);
if(_inVehicle) then {
_noDriver = ((_vehicle emptyPositions "driver") > 0);
if (_noDriver && (speed _vehicle) != 0) then {
player action [ "eject", _vehicle];
};
};
};

player_sumMedical = {
private["_character","_wounds","_legs","_arms","_medical"];
_character = _this;
_wounds = [];
if (_character getVariable["USEC_injured",false]) then {
{
if (_character getVariable[_x,false]) then {
_wounds set [count _wounds,_x];
};
} count USEC_typeOfWounds;
};
_legs = _character getVariable ["hit_legs",0];
_arms = _character getVariable ["hit_arms",0];
_medical = [
_character getVariable["USEC_isDead",false],
_character getVariable["NORRN_unconscious", false],
_character getVariable["USEC_infected",false],
_character getVariable["USEC_injured",false],
_character getVariable["USEC_inPain",false],
_character getVariable["USEC_isCardiac",false],
_character getVariable["USEC_lowBlood",false],
_character getVariable["USEC_BloodQty",12000],
_wounds,
[_legs,_arms],
_character getVariable["unconsciousTime",0],
_character getVariable["messing",[0,0]]
];
_medical
};

//Server Only
if (isServer) then {
call compile preprocessFileLineNumbers "server\init\server_functions.sqf";
} else {
eh_localCleanup = {};
};

initialized = true;

 

 Although it says "Error Missing )", I couldn't find a missing ) and neither did Squint,  I didn't seen anything amiss in line 47 or the code for FNC_GetPlayerUID.  DId I miss something?

 

Thanks,

Bob

Link to comment
Share on other sites

I just attempted to install the latest version.  I have a lot of scripts running with a heavily modified compiles.sqf, variables.sqf, and others.  I already had Snap Pro 1.4.1 with Vector Build and Precise Base Build installed.   In an attempt to not have to back anything out, I compared scripts and merged what was appropriate so as to not (hopefully) break any scripts that were already running successfully.  Other scripts had already modified about half of the files from PP4L and they are already in my "custom" directory. I merged with the PP4L files of the same name and changed the references in all locations I could find.

 

So I cannot even get it to start now. I get this error in my server-side .rpt:

 

15:02:22 "DayZ Epoch: PRELOAD Functions\init [[:0 (FunctionsManager)],any]"

15:02:22 "DayZ Epoch: MPframework inited"

15:02:24 Error in expression if(_unit == _PUID player) then {

player setVariable["publi>

15:02:24 Error position: player setVariable["publi>

15:02:24 Error Missing )

15:02:24 File mpmissions\DayZ_Epoch_13.Tavi\custom\compiles.sqf, line 47

15:02:24 Error in expression if(_unit == _PUID player) then {

player setVariable["publi>

15:02:24 Error position: player setVariable["publi>

15:02:24 Error Missing )

15:02:24 File mpmissions\DayZ_Epoch_13.Tavi\custom\compiles.sqf, line 47

15:02:27 Warning: z\addons\dayz_communityassets\models\compass.p3d:0 Error while trying to generate ST for points: 863, 853, 852

15:02:31 "Res3tting B!S effects..."

 

and here's my compiles.sqf.

 

/*

FUNCTION COMPILES

*/

//Player only

if (!isDedicated) then {

"filmic" setToneMappingParams [0.07, 0.31, 0.23, 0.37, 0.011, 3.750, 6, 4]; setToneMapping "Filmic";

BIS_Effects_Burn = compile preprocessFile "\ca\Data\ParticleEffects\SCRIPTS\destruction\burn.sqf";

player_zombieCheck = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_zombieCheck.sqf"; //Run on a players computer, checks if the player is near a zombie

player_zombieAttack = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_zombieAttack.sqf"; //Run on a players computer, causes a nearby zombie to attack them

fnc_usec_damageActions = compile preprocessFileLineNumbers "custom\fn_damageActions.sqf"; //Checks which actions for nearby casualty

fnc_inAngleSector = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_inAngleSector.sqf"; //Checks which actions for nearby casualty

fnc_usec_selfActions = compile preprocessFileLineNumbers "custom\fn_selfActions.sqf";

//Checks which actions for self

fnc_usec_unconscious = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_unconscious.sqf";

player_temp_calculation = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_temperatur.sqf"; //Temperatur System //TeeChange

player_weaponFiredNear = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_weaponFiredNear.sqf";

player_animalCheck = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_animalCheck.sqf";

player_spawnCheck = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_spawnCheck.sqf";

player_dumpBackpack = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_dumpBackpack.sqf";

building_spawnLoot = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\building_spawnLoot.sqf";

building_spawnZombies = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\building_spawnZombies.sqf";

dayz_spaceInterrupt = compile preprocessFileLineNumbers "custom\dayz_spaceInterrupt.sqf";

player_fired = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_fired.sqf"; //Runs when player fires. Alerts nearby Zeds depending on calibre && audial rating

player_harvest = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_harvest.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_removeNearby = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\object_removeNearby.sqf";

player_removeTankTrap = {

//Object Array, Range, Error Message (@Skaronator)

[["Hedgehog_DZ"], 1,"STR_EPOCH_ACTIONS_14"] call player_removeNearby;

};

player_removeNet = {

[["DesertLargeCamoNet","ForestCamoNet_DZ","DesertLargeCamoNet_DZ","ForestLargeCamoNet_DZ"], 5,"str_epoch_player_8"] call player_removeNearby;

};

player_login = {

private ["_unit","_detail","_PUID"];

_unit = _this select 0;

_detail = _this select 1;

_PUID = [player] call FNC_GetPlayerUID;

if(_unit == _PUID player) then {

player setVariable["publish",_detail];

};

};

player_unlockDoor = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_unlockDoor.sqf";

player_changeCombo = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_changeCombo.sqf";

player_lockVault = compile preprocessFileLineNumbers "custom\player_lockVault.sqf";

player_updateGui = compile preprocessFileLineNumbers "custom\player_updateGui.sqf";

player_crossbowBolt = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_crossbowBolt.sqf";

player_music = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_music.sqf"; //Used to generate ambient music

player_death = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_death.sqf";

player_switchModel = compile preprocessFileLineNumbers "custom\player_switchModel.sqf";

player_checkStealth = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_checkStealth.sqf";

world_sunRise = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_sunRise.sqf";

world_surfaceNoise = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_surfaceNoise.sqf";

player_humanityMorph = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_humanityMorph.sqf";

player_throwObject = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_throwObject.sqf";

player_alertZombies = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_alertZombies.sqf";

player_fireMonitor = compile preprocessFileLineNumbers "\z\addons\dayz_code\system\fire_monitor.sqf";

fn_gearMenuChecks = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_gearMenuChecks.sqf";

//SUV and MV22 Actions

mv22_pack = compile preprocessFileLineNumbers "\ca\air2\mv22\scripts\pack.sqf";

//Objects

object_roadFlare = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\object_roadFlare.sqf";

object_setpitchbank = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_setpitchbank.sqf";

object_monitorGear = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\object_monitorGear.sqf";

local_roadDebris = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\local_roadDebris.sqf";

//Zombies

zombie_findTargetAgent = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\zombie_findTargetAgent.sqf";

zombie_loiter = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\zombie_loiter.sqf"; //Server compile, used for loiter behaviour

zombie_generate = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\zombie_generate.sqf"; //Server compile, used for loiter behaviour

wild_spawnZombies = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\wild_spawnZombies.sqf"; //Server compile, used for loiter behaviour

pz_attack = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\pzombie\pz_attack.sqf";

dog_findTargetAgent = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\dog_findTargetAgent.sqf";

//Code Changer

ckc_button = compile preprocessFileLineNumbers "ckc\ckc_button.sqf";

ckc_upddoor = compile preprocessFileLineNumbers "ckc\ckc_upddoor.sqf";

ckc_updSafe = compile preprocessFileLineNumbers "ckc\ckc_updSafe.sqf";

//actions

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

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

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

player_reloadMag = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\player_reloadMags.sqf";

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

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

player_tentPitch = compile preprocessFileLineNumbers "custom\tent_pitch.sqf";

player_vaultPitch = compile preprocessFileLineNumbers "custom\vault_pitch.sqf";

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

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

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

player_fillWater = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\water_fill.sqf";

player_makeFire = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\player_makefire.sqf";

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

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

//Snap Build

player_build = compile preprocessFileLineNumbers "scripts\PP4L\Action\modular_build.sqf";

player_build_countNearby = compile preprocessFileLineNumbers "scripts\PP4L\Action\player_build_countNearby.sqf";

player_build_states = compile preprocessFileLineNumbers "scripts\PP4L\Action\player_build_states.sqf";

player_build_needNearby = compile preprocessFileLineNumbers "scripts\PP4L\Action\player_build_needNearby.sqf";

player_build_getConfig = compile preprocessFileLineNumbers "scripts\PP4L\Action\player_build_getConfig.sqf";

player_build_plotCheck = compile preprocessFileLineNumbers "scripts\PP4L\Action\player_build_plotCheck.sqf";

player_build_buildReq = compile preprocessFileLineNumbers "scripts\PP4L\Action\player_build_buildReq.sqf";

player_build_create = compile preprocessFileLineNumbers "scripts\PP4L\Action\player_build_create.sqf";

player_build_controls = compile preprocessFileLineNumbers "scripts\PP4L\Action\player_build_controls.sqf";

player_build_publish = compile preprocessFileLineNumbers "scripts\PP4L\Action\player_build_publish.sqf";

DZE_snap_build_file = "scripts\Snap_Pro\snap_build.sqf"; // Set as a global variable as it is also referenced in snapbuild.sqf

// player_build = compile preprocessFileLineNumbers "scripts\snap_pro\player_build.sqf";

snap_build = compile preprocessFileLineNumbers DZE_snap_build_file;

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

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

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

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

player_antiWall = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_antiWall.sqf";

player_deathBoard = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\list_playerDeathsAlt.sqf";

player_plotPreview = compile preprocessFileLineNumbers "custom\object_showPlotRadius.sqf";

player_upgradeVehicle = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_upgradeVehicle.sqf";

//ui

player_selectSlot = compile preprocessFileLineNumbers "custom\ui_selectSlot.sqf";;

player_gearSync = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_gearSync.sqf";

player_gearSet = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_gearSet.sqf";

ui_changeDisplay = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\ui_changeDisplay.sqf";

ui_gear_sound = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\ui_gear_sound.sqf";

//System

player_monitor = compile preprocessFileLineNumbers "\z\addons\dayz_code\system\player_monitor.sqf";

player_spawn_1 = compile preprocessFileLineNumbers "\z\addons\dayz_code\system\player_spawn_1.sqf";

player_spawn_2 = compile preprocessFileLineNumbers "\z\addons\dayz_code\system\player_spawn_2.sqf";

onPreloadStarted "dayz_preloadFinished = false;";

onPreloadFinished "dayz_preloadFinished = true;";

// helper functions

player_hasTools = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_hasTools.sqf";

player_checkItems = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_checkItems.sqf";

player_removeItems = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_removeItems.sqf";

//Trader ["Trader City Name",false,"enter"] - Trader City Name | Show Message | "enter" || "leave"

player_traderCity = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_traderCity.sqf";

// combination of check && remove items

player_checkAndRemoveItems = {

private ["_items","_b"];

_items = _this;

_b = _items call player_checkItems;

if (_ B) then {

_b = _items call player_removeItems;

};

_b

};

dayz_HungerThirst = {

dayz_hunger = dayz_hunger + (_this select 0);

dayz_thirst = dayz_thirst + (_this select 1);

};

epoch_totalCurrency = {

// total currency

private ["_total_currency","_part","_worth"];

_total_currency = 0;

{

_part = (configFile >> "CfgMagazines" >> _x);

_worth = (_part >> "worth");

if isNumber (_worth) then {

_total_currency = _total_currency + getNumber(_worth);

};

} count (magazines player);

_total_currency

};

epoch_itemCost = {

private ["_trade_total","_part_inWorth","_part_in_configClass"];

_trade_total = 0;

{

_part_in_configClass = configFile >> "CfgMagazines" >> (_x select 0);

if (isClass (_part_in_configClass)) then {

_part_inWorth = (_part_in_configClass >> "worth");

if isNumber (_part_inWorth) then {

_trade_total = _trade_total + (getNumber(_part_inWorth) * (_x select 1));

};

};

} count _this;

//diag_log format["DEBUG TRADER ITEMCOST: %1", _this];

_trade_total

};

epoch_returnChange = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\epoch_returnChange.sqf";

// usage [["partinclassname",4]] call epoch_returnChange;

dayz_losChance = {

private["_agent","_maxDis","_dis","_val","_maxExp","_myExp"];

_agent = _this select 0;

_dis = _this select 1;

_maxDis = _this select 2;

// diag_log ("VAL: " + str(_this));

_val = (_maxDis - _dis) max 0;

_maxExp = ((exp 2) * _maxDis);

_myExp = ((exp 2) * (_val)) / _maxExp;

_myExp = _myExp * 0.7;

_myExp

};

ui_initDisplay = {

private["_control","_ctrlBleed","_display","_ctrlFracture","_ctrlDogFood","_ctrlDogWater","_ctrlDogWaterBorder", "_ctrlDogFoodBorder"];

disableSerialization;

_display = uiNamespace getVariable 'DAYZ_GUI_display';

_control = _display displayCtrl 1204;

_control ctrlShow false;

if (!r_player_injured) then {

_ctrlBleed = _display displayCtrl 1303;

_ctrlBleed ctrlShow false;

};

if (!r_fracture_legs && !r_fracture_arms) then {

_ctrlFracture = _display displayCtrl 1203;

_ctrlFracture ctrlShow false;

};

_ctrlDogFoodBorder = _display displayCtrl 1501;

_ctrlDogFoodBorder ctrlShow false;

_ctrlDogFood = _display displayCtrl 1701;

_ctrlDogFood ctrlShow false;

_ctrlDogWaterBorder = _display displayCtrl 1502;

_ctrlDogWaterBorder ctrlShow false;

_ctrlDogWater = _display displayCtrl 1702;

_ctrlDogWater ctrlShow false

};

dayz_losCheck = {

private ["_target","_agent","_cantSee","_tPos","_zPos"];

_target = _this select 0; // PUT THE PLAYER IN FIRST ARGUMENT!!!!

_agent = _this select 1;

_cantSee = true;

if (!isNull _target) then {

_tPos = visiblePositionASL _target;

_zPos = visiblePositionASL _agent;

_tPos set [2,(_tPos select 2)+1];

_zPos set [2,(_zPos select 2)+1];

if ((count _tPos > 0) && (count _zPos > 0)) then {

_cantSee = terrainIntersectASL [_tPos, _zPos];

if (!_cantSee) then {

_cantSee = lineIntersects [_tPos, _zPos, _agent, vehicle _target];

};

};

};

_cantSee

};

dayz_equipCheck = {

private ["_empty","_needed","_diff","_success","_config"];

_config = _this;

_empty = [player] call BIS_fnc_invSlotsEmpty;

_needed = [_config] call BIS_fnc_invSlotType;

_diff = [_empty,_needed] call BIS_fnc_vectorDiff;

_success = true;

{

if (_x > 0) then {_success = false};

} count _diff;

hint format["Config: %5\nEmpty: %1\nNeeded: %2\nDiff: %3\nSuccess: %4",_empty,_needed,_diff,_success,_config];

_success

};

vehicle_gear_count = {

private["_counter"];

_counter = 0;

{

_counter = _counter + _x;

} count _this;

_counter

};

player_tagFriendlyMsg = {

if(player == (_this select 0)) then {

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

};

};

player_serverModelChange = {

private["_object","_model"];

_object = _this select 0;

_model = _this select 1;

if (_object == player) then {

_model call player_switchModel;

};

};

player_guiControlFlash = {

private["_control"];

_control = _this;

if (ctrlShown _control) then {

_control ctrlShow false;

} else {

_control ctrlShow true;

};

};

gearDialog_create = {

private ["_i","_dialog"];

if (!isNull (findDisplay 106)) then {

(findDisplay 106) closeDisplay 0;

};

openMap false;

closeDialog 0;

if (gear_done) then {sleep 0.001;};

player action ["Gear", player];

if (gear_done) then {sleep 0.001;};

_dialog = findDisplay 106;

_i = 0;

while {isNull _dialog} do {//DO NOT CHANGE TO A FOR LOOP!

_i = _i + 1;

_dialog = findDisplay 106;

if (gear_done) then {sleep 0.001;};

if (_i in [100,200,299]) then {

closeDialog 0;

player action ["Gear", player];

};

if (_i > 300) exitWith {};

};

if (gear_done) then {sleep 0.001;};

_dialog = findDisplay 106;

if ((parseNumber(_this select 0)) != 0) then {

ctrlActivate (_dialog displayCtrl 157);

if (gear_done) then {

waitUntil {ctrlShown (_dialog displayCtrl 159)};

sleep 0.001;

};

};

_dialog

};

gear_ui_offMenu = {

private ["_control","_parent","_menu","_grpPos"];

disableSerialization;

_control = _this select 0;

_parent = findDisplay 106;

if (!(_this select 3)) then {

for "_i" from 0 to 9 do {

_menu = _parent displayCtrl (1600 + _i);

_menu ctrlShow false;

};

_grpPos = ctrlPosition _control;

_grpPos set [3,0];

_control ctrlSetPosition _grpPos;

_control ctrlShow false;

_control ctrlCommit 0;

};

};

dze_surrender_off = {

player setVariable ["DZE_Surrendered", false, true];

DZE_Surrender = false;

};

gear_ui_init = {

private ["_control","_parent","_menu","_grpPos"];

disableSerialization;

_parent = findDisplay 106;

_control = _parent displayCtrl 6902;

for "_i" from 0 to 9 do {

_menu = _parent displayCtrl (1600 + _i);

_menu ctrlShow false;

};

_grpPos = ctrlPosition _control;

_grpPos set [3,0];

_control ctrlSetPosition _grpPos;

_control ctrlShow false;

_control ctrlCommit 0;

};

dayz_eyeDir = {

private["_vval","_vdir"];

_vval = (eyeDirection _this);

_vdir = (_vval select 0) atan2 (_vval select 1);

if (_vdir < 0) then {_vdir = 360 + _vdir};

_vdir

};

DZE_getModelName = {

private ["_i","_objInfo","_lenInfo","_objName"];

_objInfo = toArray(str(_this));

_lenInfo = count _objInfo - 1;

_objName = [];

_i = 0;

// determine where the object name starts

{

if (58 == _objInfo select _i) exitWith {};

_i = _i + 1;

} count _objInfo;

_i = _i + 2; // skip the ": " part

for "_k" from _i to _lenInfo do {

_objName set [(count _objName), (_objInfo select _k)];

};

_objName = toLower(toString(_objName));

_objName

};

dze_isnearest_player = {

private ["_notClosest","_playerDistance","_nearPlayers","_playerNear"];

if(!isNull _this) then {

_nearPlayers = _this nearEntities ["CAManBase", 12];

_playerNear = ({isPlayer _x} count _nearPlayers) > 1;

_notClosest = false;

if (_playerNear) then {

// check if another player is closer

_playerDistance = player distance _this;

{

if (_playerDistance > (_x distance _this)) exitWith { _notClosest = true; };

} count _nearPlayers;

};

} else {

_notClosest = false;

};

_notClosest

};

// trader menu code

if (DZE_ConfigTrader) then {

call compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_traderMenuConfig.sqf";

}else{

call compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_traderMenuHive.sqf";

};

// recent murders menu code

call compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_murderMenu.sqf";

call compile preprocessFileLineNumbers "custom\player_traderMenuHive.sqf";

/*

//This is still needed but the fsm should terminate if any errors pop up.

[] spawn {

private["_timeOut","_display","_control1","_control2"];

disableSerialization;

_timeOut = 0;

dayz_loadScreenMsg = "";

diag_log "DEBUG: loadscreen guard started.";

_display = uiNameSpace getVariable "BIS_loadingScreen";

if (!isNil "_display") then {

_control1 = _display displayctrl 8400;

_control2 = _display displayctrl 102;

};

if (!isNil "dayz_DisplayGenderSelect") then {

waitUntil {!dayz_DisplayGenderSelect};

};

// 120 sec timeout (12000 * 0.01)

while { _timeOut < 12000 } do {

if (dayz_clientPreload && dayz_authed) exitWith { diag_log "PLOGIN: Login loop completed!"; };

if (!isNil "_display") then {

if ( isNull _display ) then {

waitUntil { !dialog; };

startLoadingScreen ["","RscDisplayLoadCustom"];

_display = uiNameSpace getVariable "BIS_loadingScreen";

_control1 = _display displayctrl 8400;

_control2 = _display displayctrl 102;

};

if ( dayz_loadScreenMsg != "" ) then {

_control1 ctrlSetText dayz_loadScreenMsg;

dayz_loadScreenMsg = "";

};

_control2 ctrlSetText format["%1",round(_timeOut*0.01)];

};

_timeOut = _timeOut + 1;

if (_timeOut >= 12000) then {

1 cutText [localize "str_player_login_timeout", "PLAIN DOWN"];

sleep 10;

endLoadingScreen;

endMission "END1";

};

sleep 0.01;

};

};

*/

Zupa_LoadingMessage = ["Loading up server."]; // initial message before the server ever sends a message to the client.

"PVDZE_Z_LoadMessage" addPublicVariableEventHandler {Zupa_LoadingMessage = _this select 1;};

//This is still needed but the fsm should terminate if any errors pop up.

[] spawn {

private["_timeOut","_display","_control1","_control2"];

disableSerialization;

_timeOut = 0;

dayz_loadScreenMsg = "";

diag_log "DEBUG: loadscreen guard started.";

_display = uiNameSpace getVariable "BIS_loadingScreen";

if (!isNil "_display") then {

_control1 = _display displayctrl 8400;

_control2 = _display displayctrl 102;

};

if (!isNil "dayz_DisplayGenderSelect") then {

waitUntil {!dayz_DisplayGenderSelect};

};

// 120 sec timeout (12000 * 0.01)

while { _timeOut < 12000 } do {

if (dayz_clientPreload && dayz_authed) exitWith {

diag_log "PLOGIN: Login loop completed!";

endLoadingScreen;

};

if (!isNil "_display") then {

if ( isNull _display ) then {

waitUntil { !dialog; };

startLoadingScreen ["","RscDisplayLoadCustom"];

_display = uiNameSpace getVariable "BIS_loadingScreen";

_control1 = _display displayctrl 8400;

_control2 = _display displayctrl 102;

};

_control1 ctrlSetText format["theAbandoned: %1 & %2.",Zupa_LoadingMessage select 0 ,dayz_loadScreenMsg];

_control2 ctrlSetText format["%1",round(_timeOut*0.01)];

};

if( Zupa_LoadingMessage select 0 != "Server running")then{

_timeOut = 0;

}else{

_timeOut = _timeOut + 1;

};

if (_timeOut >= 12000) then {

1 cutText [localize "str_player_login_timeout", "PLAIN DOWN"];

sleep 10;

endLoadingScreen;

endMission "END1";

};

sleep 0.01;

};

};

dayz_meleeMagazineCheck = {

private ["_meleeNum","_magType","_wpnType"];

_magType = ([] + getArray (configFile >> "CfgWeapons" >> _wpnType >> "magazines")) select 0;

_meleeNum = ({_x == _magType} count magazines player);

if (_meleeNum < 1) then {

player addMagazine _magType;

};

};

dayz_originalPlayer = player;

progressLoadingScreen 0.8;

};

//Both

BIS_fnc_selectRandom = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\BIS_fnc\fn_selectRandom.sqf";

BIS_fnc_vectorAdd = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\BIS_fnc\fn_vectorAdd.sqf";

BIS_fnc_halo = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\BIS_fnc\fn_halo.sqf";

BIS_fnc_findNestedElement = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\BIS_fnc\fn_findNestedElement.sqf";

BIS_fnc_param = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\BIS_fnc\fn_param.sqf";

fnc_buildWeightedArray = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_buildWeightedArray.sqf"; //Checks which actions for nearby casualty

fnc_usec_damageVehicle = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_damageHandlerVehicle.sqf"; //Event handler run on damage

// object_vehicleKilled = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\object_vehicleKilled.sqf"; //Event handler run on damage

object_setHitServer = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\object_setHitServer.sqf"; //process the hit as a NORMAL damage (useful for persistent vehicles)

object_setFixServer = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\object_setFixServer.sqf"; //process the hit as a NORMAL damage (useful for persistent vehicles)

object_getHit = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\object_getHit.sqf"; //gets the hit value for a HitPoint (i.e. HitLegs) against the selection (i.e. "legs"), returns the value

object_setHit = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\object_setHit.sqf"; //process the hit as a NORMAL damage (useful for persistent vehicles)

object_processHit = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\object_processHit.sqf"; //process the hit in the REVO damage system (records && sets hit)

object_delLocal = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\object_delLocal.sqf";

// object_cargoCheck = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\object_cargoCheck.sqf"; //Run by the player || server to monitor changes in cargo contents

fnc_usec_damageHandler = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_damageHandler.sqf"; //Event handler run on damage

fnc_veh_ResetEH = compile preprocessFileLineNumbers "\z\addons\dayz_code\init\veh_ResetEH.sqf"; //Initialize vehicle

// Vehicle damage fix

vehicle_handleDamage = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\vehicle_handleDamage.sqf";

vehicle_handleKilled = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\vehicle_handleKilled.sqf";

//fnc_vehicleEventHandler = compile preprocessFileLineNumbers "\z\addons\dayz_code\init\vehicle_init.sqf"; //Initialize vehicle

fnc_inString = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_inString.sqf";

fnc_isInsideBuilding = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_isInsideBuilding.sqf"; //_isInside = [_unit,_building] call fnc_isInsideBuilding;

fnc_isInsideBuilding2 = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_isInsideBuilding2.sqf"; //_isInside = [_unit,_building] call fnc_isInsideBuilding2;

fnc_isInsideBuilding3 = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_isInsideBuilding3.sqf"; //_isInside = [_unit,_building] call fnc_isInsideBuilding3;

dayz_zombieSpeak = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\object_speak.sqf"; //Used to generate random speech for a unit

vehicle_getHitpoints = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\vehicle_getHitpoints.sqf";

local_gutObject = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\local_gutObject.sqf"; //Generated on the server (|| local to unit) when gutting an object

local_lockUnlock = compile preprocessFileLineNumbers "scripts\mf-tow\local_lockUnlock.sqf"; //When vehicle is local to unit perform locking vehicle

local_gutObjectZ = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\local_gutObjectZ.sqf"; //Generated on the server (|| local to unit) when gutting an object

local_zombieDamage = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_damageHandlerZ.sqf"; //Generated by the client who created a zombie to track damage

local_eventKill = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\local_eventKill.sqf"; //Generated when something is killed

//player_weaponCheck = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_weaponCheck.sqf"; //Run by the player || server to monitor whether they have picked up a new weapon

curTimeStr = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_curTimeStr.sqf";

player_medBandage = compile preprocessFileLineNumbers "\z\addons\dayz_code\medical\publicEH\medBandaged.sqf";

player_medInject = compile preprocessFileLineNumbers "\z\addons\dayz_code\medical\publicEH\medInject.sqf";

player_medEpi = compile preprocessFileLineNumbers "\z\addons\dayz_code\medical\publicEH\medEpi.sqf";

player_medTransfuse = compile preprocessFileLineNumbers "\z\addons\dayz_code\medical\publicEH\medTransfuse.sqf";

player_medMorphine = compile preprocessFileLineNumbers "\z\addons\dayz_code\medical\publicEH\medMorphine.sqf";

player_breaklegs = compile preprocessFileLineNumbers "\z\addons\dayz_code\medical\publicEH\medBreakLegs.sqf";

player_medPainkiller = compile preprocessFileLineNumbers "\z\addons\dayz_code\medical\publicEH\medPainkiller.sqf";

//Stronghold

player_buildStronghold = compile preprocessFileLineNumbers "scripts\build\stronghold\s.sqf";

world_isDay = {if ((daytime < (24 - dayz_sunRise)) && (daytime > dayz_sunRise)) then {true} else {false}};

player_humanityChange = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_humanityChange.sqf";

spawn_loot = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\spawn_loot.sqf";

spawn_loot_small = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\spawn_loot_small.sqf";

// player_projectileNear = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_projectileNear.sqf";

FNC_GetPlayerUID = {

private ["_object","_version","_PID"];

_object = _this select 0;

_version = productVersion select 3;

if (DayZ_UseSteamID) then {

_PID = GetPlayerUID _object;

} else {

if (_version >= 125548) then {

_PID = call (compile "GetPlayerUIDOld _object");

} else {

_PID = GetPlayerUID _object;

diag_log format["Your game version, %1, is less than the required for the old UID system; using Steam ID system instead. Update to 1.63.125548 (or latest steam beta)", _version];

};

};

_PID

};

FNC_GetSetPos = { //DO NOT USE IF YOU NEED ANGLE COMPENSATION!!!!

private ["_pos","_thingy"];

_thingy = _this select 0;

_pos = getPosASL _thingy;

if (surfaceIsWater _pos) then {

_thingy setPosASL _pos;

} else {

_thingy setPosATL (ASLToATL _pos);

};

};

FNC_GetPos = {

private ["_pos","_thingy"];

if (isNil {_this select 0}) exitWith {[0,0,0]};

_thingy = _this select 0;

_pos = getPosASL _thingy;

if !(surfaceIsWater _pos) then {

_pos = ASLToATL _pos;

};

_pos

};

local_setFuel = {

private["_qty","_vehicle"];

_vehicle = _this select 0;

_qty = _this select 1;

_vehicle setFuel _qty;

};

zombie_initialize = {

private ["_unit","_id","_position"];

_unit = _this select 0;

if (isServer) then {

_unit addEventHandler ["local", {_this call zombie_findOwner}];

};

_id = _unit addeventhandler["HandleDamage", { _this call local_zombieDamage }];

_id = _unit addeventhandler["Killed", { [_this, "zombieKills"] call local_eventKill }];

};

dayz_EjectPlayer = {

// check if player in vehicle

private ["_noDriver","_vehicle","_inVehicle"];

_vehicle = vehicle player;

_inVehicle = (_vehicle != player);

if(_inVehicle) then {

_noDriver = ((_vehicle emptyPositions "driver") > 0);

if (_noDriver && (speed _vehicle) != 0) then {

player action [ "eject", _vehicle];

};

};

};

player_sumMedical = {

private["_character","_wounds","_legs","_arms","_medical"];

_character = _this;

_wounds = [];

if (_character getVariable["USEC_injured",false]) then {

{

if (_character getVariable[_x,false]) then {

_wounds set [count _wounds,_x];

};

} count USEC_typeOfWounds;

};

_legs = _character getVariable ["hit_legs",0];

_arms = _character getVariable ["hit_arms",0];

_medical = [

_character getVariable["USEC_isDead",false],

_character getVariable["NORRN_unconscious", false],

_character getVariable["USEC_infected",false],

_character getVariable["USEC_injured",false],

_character getVariable["USEC_inPain",false],

_character getVariable["USEC_isCardiac",false],

_character getVariable["USEC_lowBlood",false],

_character getVariable["USEC_BloodQty",12000],

_wounds,

[_legs,_arms],

_character getVariable["unconsciousTime",0],

_character getVariable["messing",[0,0]]

];

_medical

};

//Server Only

if (isServer) then {

call compile preprocessFileLineNumbers "server\init\server_functions.sqf";

} else {

eh_localCleanup = {};

};

initialized = true;

 

 Although it says "Error Missing )", I couldn't find a missing ) and neither did Squint,  I didn't seen anything amiss in line 47 or the code for FNC_GetPlayerUID.  DId I miss something?

 

Thanks,

Bob

 

Had a quick look but didn't see anything obvious.

 

Diffmerge the file (just to see the differences without actually merging) against the stock Epoch file and it may give you some pointers on where the error may actually be.  These errors come up for a number of reasons like having a = rather than a == in an if comparison somewhere.  The line reported does not always indicate which line is actually causing the issue  :( .  Sometimes some corruption has occurred or an invisible control code has snuck in and even though I could not see any issue, typing the line out again and deleting the original has fixed it for me.

Link to comment
Share on other sites

Hello, the script is working (at least I think), but I have 3 errors in my ArmA2OA.RPT (client side):

 

Error in expression <t 0;
_return = [_distance, _IsNearPlot, _nearestPole];


_return
>
  Error position: <_nearestPole];


_return
>
  Error Variable indéfinie dans une expression: _nearestpole
File mpmissions\__CUR_MP.Chernarus\Custom\A_Plot_for_Life\Compile\fn_find_plots.sqf, line 22
Error in expression <true;
}; 
};


_passArray = [_IsNearPlot,_nearestPole,_ownerID,_friendlies,_dista>
  Error position: <_nearestPole,_ownerID,_friendlies,_dista>
  Error Variable indéfinie dans une expression: _nearestpole
File mpmissions\__CUR_MP.Chernarus\Custom\A_Plot_for_Life\Action\player_build_plotCheck.sqf, line 42
Error in expression <e, _ghost, _offset, true, _requireplot, _nearest_pole,_distance] call player_bui>
  Error position: <_nearest_pole,_distance] call player_bui>
  Error Variable indéfinie dans une expression: _nearest_pole
File mpmissions\__CUR_MP.Chernarus\Custom\A_Plot_for_Life\Action\modular_build.sqf, line 72

I use the last version of the script (2.4) and from what I saw in the code, all those variables are defined few lines before in each of the 3 files.

By the way, this:

Error Variable indéfinie dans une expression

means in french

Error Undefined variable in expression

 

Any idea why I have those errors?

 

EDIT:

it happens when I build a new plot

 

EDIT2:

here is the file fn_find_plots.sqf, so you can see that the variable is well defined the line before:

 

// Find Plots by RimBlock (http://epochmod.com/forum/index.php?/user/12612-rimblock/)


private ["_player","_ispole","_IsNearPlot","_nearestPole","_distance","_findNearestPoles","_findNearestPole","_friendly","_return"];


_player = _this select 0;
_ispole = _this select 1;
_IsNearPlot = 0;
_nearestPole = "";
_findNearestPole = [];


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


// check for near plot
_findNearestPole = (position (vehicle _player)) nearEntities ["Plastic_Pole_EP1_DZ", _distance];


_IsNearPlot = count (_findNearestPole);
_nearestPole = _findNearestPole select 0;
_return = [_distance, _IsNearPlot, _nearestPole];


_return

 

EDIT3:

So I tried something like this:

        diag_log format["NEARESTPOLE: %1",_findNearestPole select 0];
        diag_log format["NEARESTPOLE: %1",_nearestPole];

and actually, if there is a pole around, there is no error and both logs work. But if there is no pole around, the error happens for the second log, and the logs return:

"NEARESTPOLE: <null>"
"NEARESTPOLE: <null>"

so it means, if the value is null (I tested with isNil and it is), it considere it as "not defined", is it normal? (I'm a PHP dev sorry ^^ it's all I can do for now)

 

EDIT4:

I managed to "fix" it, at least to prevent the error to appear. I don't know if it is clean code, but you will be able to judge ^^

so I added:

if(isNil "_nearestPole") then {
_nearestPole = objNull;
};

after:

_nearestPole = _findNearestPole select 0;
Link to comment
Share on other sites

What's the function with "take ownership". When does that work?

 

Taken from the first post Core features

 

 

Take Ownership is available from the plot pole to the plot poles owner and allows them to take ownership of all buildables in range excluding locked storage (safes / lockboxes), tents, locked doors. This can be changed as it is all controlled via variables. The core idea is that this will align peoples bases to the new system for steamID storage on legacy bases. It also means that raiders can raid a base, replace the plot pole, take ownership and not get full access to locked areas but not have 6 cycles to remove stuff etc after taking over. Depending on the size of the base, number of objects etc this could put a bit of load on the server / DB. It is also turn off or on-able via a variable so you can set it only to allow players to realign their bases and then disable the option.

 

Taken from the install guide.

 

Turn on Take Plot Ownership (take ownership of all items on a plot except locked items). This can be used to realign old bases to the A Plot of Life ownership system or for raiding and taking over bases.

 

DZE_PlotOwnership = true;

Link to comment
Share on other sites

@igoooor

 

Thanks.  Yep that looks like a good fix.

 

I will probably change it lightly to

 

Find

_nearestPole = _findNearestPole select 0;

Change to

if (_IsNearPlot > 0) then {_nearestPole = _findNearestPole select 0;}else{_nearestPole = objNull;};

I will give this a test when home tonight (probably) and push it out in the next day or so (give or take New Year).

Link to comment
Share on other sites

RimBlock you give support to 2.35? if so could help me with this;;;

i installed p4l 2.35 on a server that didnt have p4l, server had bases and all.

Whenever i turn DZE_APlotForLife = true, i get errors on client RPT

 

Error in expression <acterID == dayz_combination || _ownerID == _playerUID) then {
_combi = player ad>
  Error position: <== _playerUID) then {
_combi = player ad>
  Error ==: Type Array, expected Number,String,Object,Side,Group,Text,Config entry,Display (dialog),Control,Team member,Task,Location
File mpmissions\__CUR_MP.Chernarus\dayz_code\compile\fn_selfActions.sqf, line 654
 
and ...
 
Error in expression <acterID == dayz_combination || _ownerID == _playerUID) then {
_combi = player ad>
  Error position: <== _playerUID) then {
_combi = player ad>
  Error ==: Type Array, expected Number,String,Object,Side,Group,Text,Config entry,Display (dialog),Control,Team member,Task,Location
File mpmissions\__CUR_MP.Chernarus\dayz_code\compile\fn_selfActions.sqf, line 654

 

action menu pretty much bugs out, stops working, you cant unlock safes or enter cars... people have to log out to work again but eventually it bugs out again. any ideias ? i have compared files multiple times and its all good. is this db related ? or no....

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...