Jump to content

[Release] Wicked AI 2.2.0


f3cuk

Recommended Posts

This Noob needs help.. I can't get static AI to spawn. In my Default.sqf file inside my static folder I copied and pasted the example and plugged in my world space that I wanted I'm sure I didn't mess that up. Then in my config.sqf file inside my WIA folder this is my config options below. What else do I need to do, because I am stumped and it's driving me crazy. Pls if any help, thank you in advance

 

 

/* STATIC MISSIONS CONFIG */

        static_missions                = true;        // use static mission file
        custom_per_world            = false;        // use a custom mission file per world

    /* END STATIC MISSIONS CONFIG */

Link to comment
Share on other sites

yes sir ,in default static mission samples they say put your custom spawn group below out of the comment area. And that's where I put mine but still no ai spawning, I just don't know what option to turn on or put to true to get them to spawn.

Link to comment
Share on other sites

i have my static ai in the static folder/ chernarus.sqf file not the default.sqf

if(isServer) then {


    //Custom Spawns file//
    /*
    Custom group spawns Eg.

    [
        [953.237,4486.48,0.001],            // Position
        4,                                    // Number Of units
        "Random",                            // Skill level of unit (easy, medium, hard, extreme, Random)
        "Random",    or ["Random","at"],        // Primary gun set number and rocket launcher. "Random" for random weapon set, "at" for anti-tank, "aa" for anti-air launcher
        4,                                    // Number of magazines
        "Random",                            // Backpack classname, use "Random" or classname here
        "Random",                            // Skin classname, use "Random" or classname here
        "Random",                            // Gearset number. "Random" for random gear set
        "Bandit"                            // AI Type, "Hero" or "Bandit".
    ] call spawn_group;

    Place your custom group spawns below
    */
[[13671.355, 2892.8167, -1.5258789e-005],3,"Random","Random",4,"Random","Bandit2_DZ","Random","Bandit"] call spawn_group;   //ground troops//
[[13687.221, 2931.012, 2.6702881e-005],3,"Random","Random",4,"Random","Bandit2_DZ","Random","Bandit"] call spawn_group;  //ground troops
[[13741.079, 2945.6494, -9.5367432e-005],3,"Random","Random",4,"Random","Bandit2_DZ","Random","Bandit"] call spawn_group;  //ground troops
[[13691.315, 2857.7407, -3.8146973e-005],3,"Random","Random",4,"Random","Bandit2_DZ","Random","Bandit"] call spawn_group;    //ground troops
[[13729.353, 2856.2568, 3.4332275e-005],3,"Random","Random",4,"Random","Bandit2_DZ","Random","Bandit"] call spawn_group;    //ground troops
[[13730.628, 2812.7852, -0.00022125244],3,"Random","Random",4,"Random","Bandit2_DZ","Random","Bandit"] call spawn_group;   //ground troops
[[13642.995, 2837.9001, 0.0001411438],3,"Random","Random",4,"Random","Bandit2_DZ","Random","Bandit"] call spawn_group;   //ground troops
[[13829.32, 2923.4414, 6.4849854e-005],3,"Random","Random",4,"Random","Bandit2_DZ","Random","Bandit"] call spawn_group;  //ground troops
[[13895.181, 2988.3088, 0.00019454956],3,"Random","Random",4,"Random","Bandit2_DZ","Random","Bandit"] call spawn_group;  //ground troops
[[13955.636, 3029.5244, 0.00057220459],3,"Random","Random",4,"Random","Bandit2_DZ","Random","Bandit"] call spawn_group;  //ground troops
[[14070.653, 2891.0085, -0.00090026855],3,"Random","Random",4,"Random","Bandit2_DZ","Random","Bandit"] call spawn_group;  //ground troops
[[14142.604, 2789.1985, 0.00060462952],3,"Random","Random",4,"Random","Bandit2_DZ","Random","Bandit"] call spawn_group;  //ground troops
[[14155.192, 2691.3687, 0.0002155304],3,"Random","Random",4,"Random","Bandit2_DZ","Random","Bandit"] call spawn_group;  //ground troops
[[13990.835, 2788.1887, 0.00024223328],3,"Random","Random",4,"Random","Bandit2_DZ","Random","Bandit"] call spawn_group;   //ground troops
[[13870.401, 2810.1841, -1.9073486e-005],3,"Random","Random",4,"Random","Bandit2_DZ","Random","Bandit"] call spawn_group;    //ground troops
[[13563.453, 2869.0381, 3.0517578e-005],3,"Random","Random",4,"Random","Bandit2_DZ","Random","Bandit"] call spawn_group;  //ground troops
[[13510.406, 2995.7441, 0.0013637543],3,"Random","Random",4,"Random","Bandit2_DZ","Random","Bandit"] call spawn_group;  //ground troops
[[13428.791, 2792.6438, 4.7683716e-006],3,"Random","Random",4,"Random","Bandit2_DZ","Random","Bandit"] call spawn_group;  //ground troops
[[13343.02, 2788.208, 0.0003452301],3,"Random","Random",4,"Random","Bandit2_DZ","Random","Bandit"] call spawn_group;  //ground troops
[[13279.515, 2737.9275, -4.4822693e-005],3,"Random","Random",4,"Random","Bandit2_DZ","Random","Bandit"] call spawn_group;  //ground troops
[[13353.722, 2719.4685, 0.00062465668],3,"Random","Random",4,"Random","Bandit2_DZ","Random","Bandit"] call spawn_group;  //ground troops
[[13419.333, 2747.3875, 0.00021457672],3,"Random","Random",4,"Random","Bandit2_DZ","Random","Bandit"] call spawn_group;  //ground troops
[[13382.635, 2774.623, 0.00018024445],3,"Random","Random",4,"Random","Bandit2_DZ","Random","Bandit"] call spawn_group;  //ground troops
[[13571.933, 3323.9666, 0.00010681152],3,"Random","Random",4,"Random","Bandit2_DZ","Random","Bandit"] call spawn_group;    //ground troops
[[13485.479, 3338.3132, 9.1552734e-005],3,"Random","Random",4,"Random","Bandit2_DZ","Random","Bandit"] call spawn_group;  //ground troops
[[13487.625, 3380.8669, 0.00036621094],3,"Random","Random",4,"Random","Bandit2_DZ","Random","Bandit"] call spawn_group;  //ground troops
[[13408.095, 3336.6536, -0.00019073486],3,"Random","Random",4,"Random","Bandit2_DZ","Random","Bandit"] call spawn_group;   //ground troops//
[[13377.609, 3288.2527, -0.0002784729],3,"Random","Random",4,"Random","Bandit2_DZ","Random","Bandit"] call spawn_group;  //ground troops
[[13245.426, 3362.8286, -0.00010251999],3,"Random","Random",4,"Random","Bandit2_DZ","Random","Bandit"] call spawn_group;  //ground troops
[[13214.415, 3246.9207, -0.0001335144],3,"Random","Random",4,"Random","Bandit2_DZ","Random","Bandit"] call spawn_group;    //ground troops
[[13140.325, 3271.8738, 0.00052642822],3,"Random","Random",4,"Random","Bandit2_DZ","Random","Bandit"] call spawn_group;    //ground troops
[[13064.684, 3258.4734, -5.7220459e-005],3,"Random","Random",4,"Random","Bandit2_DZ","Random","Bandit"] call spawn_group;   //ground troops
[[13112.573, 3197.2249, -0.00059127808],3,"Random","Random",4,"Random","Bandit2_DZ","Random","Bandit"] call spawn_group;   //ground troops
[[13033.765, 3154.4763, 0.00037384033],3,"Random","Random",4,"Random","Bandit2_DZ","Random","Bandit"] call spawn_group;  //ground troops
[[13109.765, 3132.3279, 0.00085258484],3,"Random","Random",4,"Random","Bandit2_DZ","Random","Bandit"] call spawn_group;  //ground troops
[[13372.726, 3103.7449, 0.00038146973],3,"Random","Random",4,"Random","Bandit2_DZ","Random","Bandit"] call spawn_group;  //ground troops
[[13467.485, 3107.6912, 9.6321106e-005],3,"Random","Random",4,"Random","Bandit2_DZ","Random","Bandit"] call spawn_group;  //ground troops
[[13472.39, 3004.0212, -0.00060558319],3,"Random","Random",4,"Random","Bandit2_DZ","Random","Bandit"] call spawn_group;  //ground troops
[[13476.838, 2875.9968, -7.8201294e-005],3,"Random","Random",4,"Random","Bandit2_DZ","Random","Bandit"] call spawn_group;  //ground troops
[[13409.714, 2819.4358, 0.00013065338],3,"Random","Random",4,"Random","Bandit2_DZ","Random","Bandit"] call spawn_group;   //ground troops
[[13991.87, 2889.8601, 8.9645386e-005],3,"Random","Random",4,"Random","Bandit2_DZ","Random","Bandit"] call spawn_group;    //ground troops
[[13576.669, 3073.3196, -0.00047302246],3,"Random","Random",4,"Random","Bandit2_DZ","Random","Bandit"] call spawn_group;  //ground troops
[[13490.565, 3235.3242, 0.00017547607],3,"Random","Random",4,"Random","Bandit2_DZ","Random","Bandit"] call spawn_group;  //ground troops
[[13126.788, 3895.324, -1.5258789e-005],3,"Random","Random",4,"Random","Bandit2_DZ","Random","Bandit"] call spawn_group;  //ground troops

 


    /*
    Custom static weapon spawns Eg. (with mutiple positions)

    [
        [                                    // Position(s) (can be multiple)
            [911.21,4532.76,2.62],
            [921.21,4542.76,2.62]
        ],
        "M2StaticMG",                        // Classname of turret
        "easy",                                // Skill level of unit (easy, medium, hard, extreme, Random)
        "Bandit2_DZ",                        // Skin classname, use "Random" or classname here
        "Bandit",                            // AI Type, "Hero" or "Bandit".
        "Random",                            // Primary gun set number. "Random" for random weapon set
        2,                                    // Number of magazines
        "Random",                            // Backpack classname, use "Random" or classname here
        "Random"                            // Gearset classname, use "Random" or classname here
    ] call spawn_static;

    Place your custom static weapon spawns below
    */
[[[13757, 2855.6951, 0.0001411438],[13581.159, 3095.7595, -0.00020980835],[13672.707, 2923.532, -1.5258789e-005],[13757.219, 2913.2258, 0.00010681152],[13803.734, 2948.77, 9.9182129e-005]],"M2StaticMG",2,"Bandit2_DZ",1,3,"","Random"] call spawn_static; //Skalisty Island ground weapons//
[[[13307.787, 2742.4548, 5.7220459e-005],[13473.531, 3343.7896, -2.2888184e-005],[13308.451, 3241.7668, 2.6702881e-005],[13631.521, 3237.97, 0.00017929077],[14165.316, 2696.0239, 8.2969666e-005]],"M2StaticMG",2,"Bandit2_DZ",1,3,"","Random"] call spawn_static;   //Skalisty Island ground weapons
[[[13720.18, 2841.2844, -4.196167e-005],[14085.578, 2942.03, 0.00035858154],[13598.758, 2932.2224, -0.0002784729],[12980.869, 3208.0649, 4.5776367e-005],[13526.065, 3475.8076, 1.0967255e-005]],"M2StaticMG",2,"Bandit2_DZ",1,3,"","Random"] call spawn_static;   //Skalisty Island ground weapons
[[[13771.2, 2969.66, 0.0014648], [13689.4, 2980.61, 0.00135422], [13731.9, 2897.92, 8.39783]],"M2StaticMG",2,"Bandit2_DZ",1,3,"","Random"] call spawn_static;   //Skalisty Island ground weapons

 

 

    /*
    Custom Chopper Patrol spawn Eg.

    [
        [725.391,4526.06,0],                // Position to patrol
        [0,0,0],                            // Position to spawn chopper at
        2000,                                // Radius of patrol
        10,                                    // Number of waypoints to give
        "UH1H_DZ",                            // Classname of vehicle (make sure it has driver and two gunners)
        "Random",                            // Skill level of units (easy, medium, hard, extreme, Random)
        "Random",                            // Skin classname, use "Random" or classname here
        "Bandit"                            // AI Type, "Hero" or "Bandit".
    ] spawn heli_patrol;


    Place your heli patrols below
    */

 

 

    /*
    Custom Vehicle patrol spawns Eg. (Watch out they are stupid)

    [
        [725.391,4526.06,0],                // Position to patrol
        [725.391,4526.06,0],                // Position to spawn at
        200,                                // Radius of patrol
        10,                                    // Number of waypoints to give
        "HMMWV_Armored",                    // Classname of vehicle (make sure it has driver and gunner)
        "Random",                            // Skill level of units (easy, medium, hard, extreme, Random)
        "Random",                            // Skin classname, use "Random" or classname here
        "Bandit"                            // AI Type, "Hero" or "Bandit".
    ] spawn vehicle_patrol;

    Place your vehicle patrols below this line
    */

 

 

    /*
    Paradropped unit custom spawn Eg.

    [
        [911.21545,4532.7612,2.6292224],    // Position that units will be dropped by
        [0,0,0],                            // Starting position of the heli
        400,                                // Radius from drop position a player has to be to spawn chopper
        "UH1H_DZ",                            // Classname of chopper (Make sure it has 2 gunner seats!)
        5,                                    // Number of units to be para dropped
        "Random",                            // Skill level of units (easy, medium, hard, extreme, Random)
        "Random",                            // Primary gun set number and rocket launcher. "Random" for random weapon set, "at" for anti-tank, "aa" for anti-air launcher
        4,                                    // Number of magazines
        "Random",                            // Backpack classname, use "Random" or classname here
        "Bandit2_DZ",                        // Skin classname, use "Random" or classname here
        "Random",                            // Gearset number. "Random" for random gear set.
        "Bandit",                            // AI Type, "Hero" or "Bandit".
        true                                // true: Aircraft will stay at position and fight. false: Heli will leave if not under fire.
    ] spawn heli_para;

    Place your paradrop spawns under this line
    */


_box17 = createVehicle ["BAF_VehicleBox",[13599.131, 3144.4458, -9.3460083e-005], [], 0, "CAN_COLLIDE"];
[_box17] call spawn_ammo_box;

_box18= createVehicle ["BAF_VehicleBox",[13405.722, 2780.4429, 5.6266785e-005], [], 0, "CAN_COLLIDE"];
[_box18] call spawn_ammo_box;

_box19 = createVehicle ["BAF_VehicleBox",[14111.692, 2811.4993, 2.0980835e-005], [], 0, "CAN_COLLIDE"];
[_box19] call spawn_ammo_box;
 
    diag_log format["WAI: Static mission for %1 loaded", missionName];

};

 

inside the wai config.sqf

/* STATIC MISSIONS CONFIG */
 
static_missions = true;    // use static mission file
custom_per_world = true;    // use a custom mission file per world
 
/* END STATIC MISSIONS CONFIG */

that is for the ai island and they spawn

 

Link to comment
Share on other sites

  • 2 weeks later...

Hey all,

 

I could use some help wih WAI, i installed the mod on my Epoch server (1.0.5/103718), as per github instructions and NoxSicarius1 on youtube, and WAI refuses to spawn/load.

then I asked a server owner if he could send me his  Pbo file to compare it against, its the same, even using his PBO won't work on for me.

i checked the RPT file on the server and there is nothing in there relating to WAI in there at all.

there are 1 or 2 error's in there but there mostly about a mod i'm designing.

i even disabled my own mod to test if that might be conflicting with WAI, but it still does nothing, i went away as some of my players wanted to play, but it's been now 3h and no sign of WAI so i'm lost
the server loads up with the settings as per pictures, but nothing comes up.


I'm at my wits end why WAI refuses to work for me.

I'll attach some pictures of the lines required, in the files.

1st picture is the init.sqf  of the server_monitor.sqf being called . 

2nd picture is of the server_monitor.sqf

3rd picture is of the PBO  file structure and file presents

Link to comment
Share on other sites

First of all pictures aren't very good when you are asking for help. It is way to hard to get them into a usable form to check them out for syntax errors. Copy them into a spoiler button then we can copy paste into notepadd++,diffmerge or other program to have a look at them.

That isn't really a big deal tho just for reference in the future.

For your problem tho I think we are going to need a bit more info. The config.sqf that you are using in the wai folder and your server report. You can delete the stuff about your mod if you want but there  may be something the server report that you aren't seeing if it really isn't working and not a startup problem.

Link to comment
Share on other sites

ok, it won't allow me 2 attach anything but pictures. so i uploaded it to file dropper

Server_monitor.sqf

arna2oaserver.rpt - WAI was installed from line 16724

 

@DaveA , found the spoiler code ;) i don't have a button for it.

 

 

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;

//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 = 300; // Default = 50
MaxDynamicDebris = 500; // Default = 100
dayz_MapArea = 14000; // Default = 10000
dayz_maxLocalZombies = 30; // Default = 30 

//Default Loadout
DefaultMagazines = ["ItemBandage","ItemBandage","17Rnd_9x19_glock17","17Rnd_9x19_glock17","ItemPainkiller","ItemWaterbottleBoiled","FoodSteakCooked"];
DefaultWeapons = ["glock17_EP1","ItemFlashlight","ItemHatchet"];
DefaultBackpack = "DZ_Patrol_Pack_EP1";
DefaultBackpackWeapon = "";

dayz_paraSpawn = false;

dayz_minpos = -1; 
dayz_maxpos = 16000;

dayz_sellDistance_vehicle = 10;
dayz_sellDistance_boat = 30;
dayz_sellDistance_air = 40;

dayz_maxAnimals = 5; // Default: 8
dayz_tameDogs = true;
DynamicVehicleDamageLow = 0; // Default: 0
DynamicVehicleDamageHigh = 100; // Default: 100

DZE_BuildOnRoads = false; // Default: False
DZE_GodModeBase = true;  //unbreakable bases
DZE_requireplot = 1;   //removes need for plot pole
DZE_ForceNameTagsInTrader = true; //Forces player names in traders

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 "\z\addons\dayz_code\init\variables.sqf";                //Initilize the Variables (IMPORTANT: Must happen very early)
progressLoadingScreen 0.1;
call compile preprocessFileLineNumbers "\z\addons\dayz_code\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 "\z\addons\dayz_code\init\compiles.sqf";                //Compile regular functions
progressLoadingScreen 0.5;
call compile preprocessFileLineNumbers "server_traders.sqf";                //Compile trader configs
// tow and lift
call compile preprocessFileLineNumbers "scripts\logistic\init.sqf"; // -- Added / Modified by Excempt
call compile preprocessFileLineNumbers "scripts\customkill\player_murderMenu.sqf";  // -- Added / Modified by Excempt
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 "\z\addons\dayz_code\system\server_monitor.sqf"; // Testing purpose (with no debug)

    _serverMonitor =     [] execVM "\z\addons\dayz_server\system\server_monitor.sqf"; // testing  purpose (with debug)

// no rpt errors

// no debug on server! did the code version run?

//debug added dialogue in servermonitor (code version)

// no dialogue.
//WAI did not start
};


if (!isDedicated) then {
    //Conduct map operations
    0 fadeSound 0;
    waitUntil {!isNil "dayz_loadScreenMsg"};
    dayz_loadScreenMsg = (localize "STR_AUTHENTICATING");
    
    //service points  -- Added / Modified by Excempt
     execVM "scripts\service_point\service_point.sqf";
    
    //Run the player monitor
    _id = player addEventHandler ["Respawn", {_id = [] spawn player_death;}];
    _playerMonitor =     [] execVM "\z\addons\dayz_code\system\player_monitor.sqf";    
    
    //anti Hack
    [] execVM "\z\addons\dayz_code\system\antihack.sqf";

    //Lights
    //[false,12] execVM "\z\addons\dayz_code\compile\local_lights_init.sqf";
    if (isNil 'debugMonitor') then 
    {
        debugMonitor = true;
        _nill = execvm "debugmonitor\debugmonitor.sqf";
    };
    
};

#include "\z\addons\dayz_code\system\REsec.sqf"

//Start Dynamic Weather
execVM "\z\addons\dayz_code\external\DynamicWeatherEffects.sqf";


#include "\z\addons\dayz_code\system\BIS_Effects\init.sqf"
// actionmenu  -- Added / Modified by Excempt
[] execVM "scripts\ActionMenu\actionmenu_activate.sqf";

//blood regen  -- Added / Modified by Excempt
[] execVM "scripts\bloodregen\Ranked_regen_blood.sqf";

// customkill -- Added / Modified by Excempt
execVM "Scripts\CustomKill\kill_msg.sqf";

// Debugmonitor - Added / Modified by Excempt
[] execVM "Scripts\debugmonitor\debugmonitor.sqf";

// Safezones - Added /Modified by Excempt
execVM "Scripts\Safezones\Safezones.sqf";

// Safezones - Added /Modified by Excempt
execVM "Scripts\ServerWelcomeCredits.sqf";

 


server_monitor.sqf

private ["_nul","_result","_pos","_wsDone","_dir","_isOK","_countr","_objWpnTypes","_objWpnQty","_dam","_selection","_totalvehicles","_object","_idKey","_type","_ownerID","_worldspace","_intentory","_hitPoints","_fuel","_damage","_key","_vehLimit","_hiveResponse","_objectCount","_codeCount","_data","_status","_val","_traderid","_retrader","_traderData","_id","_lockable","_debugMarkerPosition","_vehicle_0","_bQty","_vQty","_BuildingQueue","_objectQueue","_superkey","_shutdown","_res","_hiveLoaded"];

dayz_versionNo =         getText(configFile >> "CfgMods" >> "DayZ" >> "version");
dayz_hiveVersionNo =     getNumber(configFile >> "CfgMods" >> "DayZ" >> "hiveVersion");

_hiveLoaded = false;

waitUntil{initialized}; //means all the functions are now defined

diag_log "HIVE: Starting";

waituntil{isNil "sm_done"}; // prevent server_monitor be called twice (bug during login of the first player)
    
// Custom Configs
if(isnil "MaxVehicleLimit") then {
    MaxVehicleLimit = 50;
};

if(isnil "MaxDynamicDebris") then {
    MaxDynamicDebris = 100;
};
if(isnil "MaxAmmoBoxes") then {
    MaxAmmoBoxes = 3;
};
if(isnil "MaxMineVeins") then {
    MaxMineVeins = 50;
};
// Custon Configs End

if (isServer && isNil "sm_done") then {

    serverVehicleCounter = [];
    _hiveResponse = [];

    for "_i" from 1 to 5 do {
        diag_log "HIVE: trying to get objects";
        _key = format["CHILD:302:%1:", dayZ_instance];
        _hiveResponse = _key call server_hiveReadWrite;  
        if ((((isnil "_hiveResponse") || {(typeName _hiveResponse != "ARRAY")}) || {((typeName (_hiveResponse select 1)) != "SCALAR")})) then {
            if ((_hiveResponse select 1) == "Instance already initialized") then {
                _superkey = profileNamespace getVariable "SUPERKEY";
                _shutdown = format["CHILD:400:%1:", _superkey];
                _res = _shutdown call server_hiveReadWrite;
                diag_log ("HIVE: attempt to kill.. HiveExt response:"+str(_res));
            } else {
                diag_log ("HIVE: connection problem... HiveExt response:"+str(_hiveResponse));
            
            };
            _hiveResponse = ["",0];
        } 
        else {
            diag_log ("HIVE: found "+str(_hiveResponse select 1)+" objects" );
            _i = 99; // break
        };
    };
    
    _BuildingQueue = [];
    _objectQueue = [];
    
    if ((_hiveResponse select 0) == "ObjectStreamStart") then {
    
        // save superkey
        profileNamespace setVariable ["SUPERKEY",(_hiveResponse select 2)];
        
        _hiveLoaded = true;
    
        diag_log ("HIVE: Commence Object Streaming...");
        _key = format["CHILD:302:%1:", dayZ_instance];
        _objectCount = _hiveResponse select 1;
        _bQty = 0;
        _vQty = 0;
        for "_i" from 1 to _objectCount do {
            _hiveResponse = _key call server_hiveReadWriteLarge;
            //diag_log (format["HIVE dbg %1 %2", typeName _hiveResponse, _hiveResponse]);
            if ((_hiveResponse select 2) isKindOf "ModularItems") then {
                _BuildingQueue set [_bQty,_hiveResponse];
                _bQty = _bQty + 1;
            } else {
                _objectQueue set [_vQty,_hiveResponse];
                _vQty = _vQty + 1;
            };
        };
        diag_log ("HIVE: got " + str(_bQty) + " Epoch Objects and " + str(_vQty) + " Vehicles");
    };
    
    // # NOW SPAWN OBJECTS #
    _totalvehicles = 0;
    {
        _idKey =         _x select 1;
        _type =            _x select 2;
        _ownerID =         _x select 3;

        _worldspace =     _x select 4;
        _intentory =    _x select 5;
        _hitPoints =    _x select 6;
        _fuel =            _x select 7;
        _damage =         _x select 8;
        
        _dir = 0;
        _pos = [0,0,0];
        _wsDone = false;
        if (count _worldspace >= 2) then
        {
            _dir = _worldspace select 0;
            if (count (_worldspace select 1) == 3) then {
                _pos = _worldspace select 1;
                _wsDone = true;
            }
        };            
        
        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));
        };
        

        if (_damage < 1) then {
            //diag_log format["OBJ: %1 - %2", _idKey,_type];
            
            //Create it
            _object = createVehicle [_type, _pos, [], 0, "CAN_COLLIDE"];
            _object setVariable ["lastUpdate",time];
            _object setVariable ["ObjectID", _idKey, true];

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

            // fix for leading zero issues on safe codes after restart
            if (_lockable == 4) then {
                _codeCount = (count (toArray _ownerID));
                if(_codeCount == 3) then {
                    _ownerID = format["0%1", _ownerID];
                };
                if(_codeCount == 2) then {
                    _ownerID = format["00%1", _ownerID];
                };
                if(_codeCount == 1) then {
                    _ownerID = format["000%1", _ownerID];
                };
            };

            if (_lockable == 3) then {
                _codeCount = (count (toArray _ownerID));
                if(_codeCount == 2) then {
                    _ownerID = format["0%1", _ownerID];
                };
                if(_codeCount == 1) then {
                    _ownerID = format["00%1", _ownerID];
                };
            };

            _object setVariable ["CharacterID", _ownerID, true];
            
            clearWeaponCargoGlobal  _object;
            clearMagazineCargoGlobal  _object;
            // _object setVehicleAmmo DZE_vehicleAmmo;
            
            _object setdir _dir;
            _object setposATL _pos;
            _object setDamage _damage;
            
            if ((typeOf _object) in dayz_allowedObjects) then {
                if (DZE_GodModeBase) then {
                    _object addEventHandler ["HandleDamage", {false}];
                } else {
                    _object addMPEventHandler ["MPKilled",{_this call object_handleServerKilled;}];
                };
                // Test disabling simulation server side on buildables only.
                _object enableSimulation false;
                // used for inplace upgrades && lock/unlock of safe
                _object setVariable ["OEMPos", _pos, true];
                
            };

            if (count _intentory > 0) then {
                if (_type in DZE_LockedStorage) then {
                    // Fill variables with loot
                    _object setVariable ["WeaponCargo", (_intentory select 0),true];
                    _object setVariable ["MagazineCargo", (_intentory select 1),true];
                    _object setVariable ["BackpackCargo", (_intentory select 2),true];
                } else {

                    //Add weapons
                    _objWpnTypes = (_intentory select 0) select 0;
                    _objWpnQty = (_intentory select 0) select 1;
                    _countr = 0;                    
                    {
                        if(_x in (DZE_REPLACE_WEAPONS select 0)) then {
                            _x = (DZE_REPLACE_WEAPONS select 1) select ((DZE_REPLACE_WEAPONS select 0) find _x);
                        };
                        _isOK =     isClass(configFile >> "CfgWeapons" >> _x);
                        if (_isOK) then {
                            _object addWeaponCargoGlobal [_x,(_objWpnQty select _countr)];
                        };
                        _countr = _countr + 1;
                    } count _objWpnTypes; 
                
                    //Add Magazines
                    _objWpnTypes = (_intentory select 1) select 0;
                    _objWpnQty = (_intentory select 1) select 1;
                    _countr = 0;
                    {
                        if (_x == "BoltSteel") then { _x = "WoodenArrow" }; // Convert BoltSteel to WoodenArrow
                        if (_x == "ItemTent") then { _x = "ItemTentOld" };
                        _isOK =     isClass(configFile >> "CfgMagazines" >> _x);
                        if (_isOK) then {
                            _object addMagazineCargoGlobal [_x,(_objWpnQty select _countr)];
                        };
                        _countr = _countr + 1;
                    } count _objWpnTypes;

                    //Add Backpacks
                    _objWpnTypes = (_intentory select 2) select 0;
                    _objWpnQty = (_intentory select 2) select 1;
                    _countr = 0;
                    {
                        _isOK =     isClass(configFile >> "CfgVehicles" >> _x);
                        if (_isOK) then {
                            _object addBackpackCargoGlobal [_x,(_objWpnQty select _countr)];
                        };
                        _countr = _countr + 1;
                    } count _objWpnTypes;
                };
            };    
            
            if (_object isKindOf "AllVehicles") then {
                {
                    _selection = _x select 0;
                    _dam = _x select 1;
                    if (_selection in dayZ_explosiveParts && _dam > 0.8) then {_dam = 0.8};
                    [_object,_selection,_dam] call object_setFixServer;
                } count _hitpoints;

                _object setFuel _fuel;

                if (!((typeOf _object) in dayz_allowedObjects)) then {
                    
                    //_object setvelocity [0,0,1];
                    _object call fnc_veh_ResetEH;        
                    
                    if(_ownerID != "0" && !(_object isKindOf "Bicycle")) then {
                        _object setvehiclelock "locked";
                    };
                    
                    _totalvehicles = _totalvehicles + 1;

                    // total each vehicle
                    serverVehicleCounter set [count serverVehicleCounter,_type];
                };
            };

            //Monitor the object
            PVDZE_serverObjectMonitor set [count PVDZE_serverObjectMonitor,_object];
        };
    } count (_BuildingQueue + _objectQueue);
    // # END SPAWN OBJECTS #

    // preload server traders menu data into cache
    if !(DZE_ConfigTrader) then {
        {
            // get tids
            _traderData = call compile format["menu_%1;",_x];
            if(!isNil "_traderData") then {
                {
                    _traderid = _x select 1;

                    _retrader = [];

                    _key = format["CHILD:399:%1:",_traderid];
                    _data = "HiveEXT" callExtension _key;

                    //diag_log "HIVE: Request sent";
            
                    //Process result
                    _result = call compile format ["%1",_data];
                    _status = _result select 0;
            
                    if (_status == "ObjectStreamStart") then {
                        _val = _result select 1;
                        //Stream Objects
                        //diag_log ("HIVE: Commence Menu Streaming...");
                        call compile format["ServerTcache_%1 = [];",_traderid];
                        for "_i" from 1 to _val do {
                            _data = "HiveEXT" callExtension _key;
                            _result = call compile format ["%1",_data];
                            call compile format["ServerTcache_%1 set [count ServerTcache_%1,%2]",_traderid,_result];
                            _retrader set [count _retrader,_result];
                        };
                        //diag_log ("HIVE: Streamed " + str(_val) + " objects");
                    };

                } forEach (_traderData select 0);
            };
        } forEach serverTraders;
    };

    if (_hiveLoaded) then {
        //  spawn_vehicles
        _vehLimit = MaxVehicleLimit - _totalvehicles;
        if(_vehLimit > 0) then {
            diag_log ("HIVE: Spawning # of Vehicles: " + str(_vehLimit));
            for "_x" from 1 to _vehLimit do {
                [] spawn spawn_vehicles;
            };
        } else {
            diag_log "HIVE: Vehicle Spawn limit reached!";
        };
    };
    
    //  spawn_roadblocks
    diag_log ("HIVE: Spawning # of Debris: " + str(MaxDynamicDebris));
    for "_x" from 1 to MaxDynamicDebris do {
        [] spawn spawn_roadblocks;
    };
    //  spawn_ammosupply at server start 1% of roadblocks
    diag_log ("HIVE: Spawning # of Ammo Boxes: " + str(MaxAmmoBoxes));
    for "_x" from 1 to MaxAmmoBoxes do {
        [] spawn spawn_ammosupply;
    };
    // call spawning mining veins
    diag_log ("HIVE: Spawning # of Veins: " + str(MaxMineVeins));
    for "_x" from 1 to MaxMineVeins do {
        [] spawn spawn_mineveins;
    };

    if(isnil "dayz_MapArea") then {
        dayz_MapArea = 10000;
    };
    if(isnil "HeliCrashArea") then {
        HeliCrashArea = dayz_MapArea / 2;
    };
    if(isnil "OldHeliCrash") then {
        OldHeliCrash = false;
    };

    // [_guaranteedLoot, _randomizedLoot, _frequency, _variance, _spawnChance, _spawnMarker, _spawnRadius, _spawnFire, _fadeFire]
    if(OldHeliCrash) then {
        _nul = [3, 4, (50 * 60), (15 * 60), 0.75, 'center', HeliCrashArea, true, false] spawn server_spawnCrashSite;
    };
    if (isDedicated) then {
        // Epoch Events
        _id = [] spawn server_spawnEvents;
        // server cleanup
        [] spawn {
            private ["_id"];
            sleep 200; //Sleep Lootcleanup, don't need directly cleanup on startup + fix some performance issues on serverstart
            waitUntil {!isNil "server_spawnCleanAnimals"};
            _id = [] execFSM "\z\addons\dayz_server\system\server_cleanup.fsm";
        };

        // spawn debug box
        _debugMarkerPosition = getMarkerPos "respawn_west";
        _debugMarkerPosition = [(_debugMarkerPosition select 0),(_debugMarkerPosition select 1),1];
        _vehicle_0 = createVehicle ["DebugBox_DZ", _debugMarkerPosition, [], 0, "CAN_COLLIDE"];
        _vehicle_0 setPos _debugMarkerPosition;
        _vehicle_0 setVariable ["ObjectID","1",true];

        // max number of spawn markers
        if(isnil "spawnMarkerCount") then {
            spawnMarkerCount = 10;
        };
        actualSpawnMarkerCount = 0;
        // count valid spawn marker positions
        for "_i" from 0 to spawnMarkerCount do {
            if (!([(getMarkerPos format["spawn%1", _i]), [0,0,0]] call BIS_fnc_areEqual)) then {
                actualSpawnMarkerCount = actualSpawnMarkerCount + 1;
            } else {
                // exit since we did not find any further markers
                _i = spawnMarkerCount + 99;
            };
            
        };
        diag_log format["Total Number of spawn locations %1", actualSpawnMarkerCount];
        
        endLoadingScreen;
    };
    
    [] ExecVM "\z\addons\dayz_server\WAI\init.sqf";
    //[] ExecVM "\z\addons\dayz_server\DZMS\DZMSInit.sqf";
    
    allowConnection = true;    
    sm_done = true;
    publicVariable "sm_done";
    
};

[/spolier]

if u'd like the Pbo, i can add it, but its the downloaded version with the WAI added, as per github and nothing else.

 

a server admin gave me his private server files (mission & bpo), where he has WAI on it, and it works.

but does not work for me.

 

  • Accepted file types gif, jpeg, jpe, jpg, png · Max total size 0.49MB
     
Edited by Excempt
Link to comment
Share on other sites

Change this 

    _serverMonitor =     [] execVM "\z\addons\dayz_code\system\server_monitor.sqf"; // Testing purpose (with no debug)

    _serverMonitor =     [] execVM "\z\addons\dayz_server\system\server_monitor.sqf"; // testing  purpose (with debug)

to comment out the second line there and retry with only one server monitor call. I don't know that it is bad but I am guessing that the 2nd one which will overwrite the first doesnt have the wai call

Link to comment
Share on other sites

I should have said to comment out the first line anyway. This is what my call to the file looks like

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

You are correct in that it doesn't look like it is loading, but I think you need to reduce the amount of changes in order to track it down. 

Link to comment
Share on other sites

  • 2 weeks later...

i got the problem that only 4 AI´s spawn at a mission, the mission don´t despawn when finish and no loot crate...

 

im running WAI and DZMS

13:42:24 "WAI: [Mission:[Hero] Bandit Base]: Starting... [5691.8,8419.48,0]"
13:42:27 Error in expression <er call find_suitable_ammunition;
_unit addMagazine _rocket;
_unit addMagazine _>
13:42:27   Error position: <addMagazine _rocket;
_unit addMagazine _>
13:42:27   Error addmagazine: Typ Bool, erwartet Array,Zeichenfolge
13:42:27 File z\addons\dayz_server\WAI\compile\spawn_group.sqf, line 194
[.....]
16:15:39 "WAI: [Mission:[Hero] Ural Attack]: Starting... [3834.36,7976.34,0]"
16:15:42 Error in expression <er call find_suitable_ammunition;
_unit addMagazine _rocket;
_unit addMagazine _>
16:15:42   Error position: <addMagazine _rocket;
_unit addMagazine _>
16:15:42   Error addmagazine: Typ Bool, erwartet Array,Zeichenfolge
16:15:42 File z\addons\dayz_server\WAI\compile\spawn_group.sqf, line 194

this is the spawn_group.sqf

if (!isNil "_launcher" && wai_use_launchers) then {
		call {
			//if (_launcher == "Random") exitWith { _launcher = (ai_launchers_AT + ai_launchers_AA) call BIS_fnc_selectRandom; };
			if (_launcher == "at") exitWith { _launcher = ai_wep_launchers_AT call BIS_fnc_selectRandom; };
			if (_launcher == "aa") exitWith { _launcher = ai_wep_launchers_AA call BIS_fnc_selectRandom; };
		};
		_rocket = _launcher call find_suitable_ammunition;
		_unit addMagazine _rocket;				<----- line 194
		_unit addMagazine _rocket;
		_unit addWeapon _launcher;
	};

hope you can help me :/

Link to comment
Share on other sites

1 hour ago, R0lling said:

i got the problem that only 4 AI´s spawn at a mission, the mission don´t despawn when finish and no loot crate...

 

im running WAI and DZMS


13:42:24 "WAI: [Mission:[Hero] Bandit Base]: Starting... [5691.8,8419.48,0]"
13:42:27 Error in expression <er call find_suitable_ammunition;
_unit addMagazine _rocket;
_unit addMagazine _>
13:42:27   Error position: <addMagazine _rocket;
_unit addMagazine _>
13:42:27   Error addmagazine: Typ Bool, erwartet Array,Zeichenfolge
13:42:27 File z\addons\dayz_server\WAI\compile\spawn_group.sqf, line 194
[.....]
16:15:39 "WAI: [Mission:[Hero] Ural Attack]: Starting... [3834.36,7976.34,0]"
16:15:42 Error in expression <er call find_suitable_ammunition;
_unit addMagazine _rocket;
_unit addMagazine _>
16:15:42   Error position: <addMagazine _rocket;
_unit addMagazine _>
16:15:42   Error addmagazine: Typ Bool, erwartet Array,Zeichenfolge
16:15:42 File z\addons\dayz_server\WAI\compile\spawn_group.sqf, line 194

this is the spawn_group.sqf


if (!isNil "_launcher" && wai_use_launchers) then {
		call {
			//if (_launcher == "Random") exitWith { _launcher = (ai_launchers_AT + ai_launchers_AA) call BIS_fnc_selectRandom; };
			if (_launcher == "at") exitWith { _launcher = ai_wep_launchers_AT call BIS_fnc_selectRandom; };
			if (_launcher == "aa") exitWith { _launcher = ai_wep_launchers_AA call BIS_fnc_selectRandom; };
		};
		_rocket = _launcher call find_suitable_ammunition;
		_unit addMagazine _rocket;				<----- line 194
		_unit addMagazine _rocket;
		_unit addWeapon _launcher;
	};

hope you can help me :/

Can you post your functions.sqf file... 

 

Link to comment
Share on other sites

Quote

[] execVM "\z\addons\dayz_server\init\AH.sqf";
waituntil {!isnil "bis_fnc_init"};

BIS_MPF_remoteExecutionServer = {
	if ((_this select 1) select 2 == "JIPrequest") then {
		[nil,(_this select 1) select 0,"loc",rJIPEXEC,[any,any,"per","execVM","ca\Modules\Functions\init.sqf"]] call RE;
	};
};

BIS_Effects_Burn =				{};
server_playerLogin =			compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_playerLogin.sqf";
server_playerSetup =			compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_playerSetup.sqf";
server_onPlayerDisconnect = 	compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_onPlayerDisconnect.sqf";
server_updateObject =			compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_updateObject.sqf";
server_playerDied =				compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_playerDied.sqf";
server_publishObj = 			compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_publishObject.sqf";
server_deleteObj =				compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_deleteObj.sqf";
server_swapObject =				compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_swapObject.sqf"; 
server_publishVeh = 			compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_publishVehicle.sqf";
server_publishVeh2 = 			compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_publishVehicle2.sqf";
server_publishVeh3 = 			compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_publishVehicle3.sqf";
server_tradeObj = 				compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_tradeObject.sqf";
server_traders = 				compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_traders.sqf";
server_playerSync =				compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_playerSync.sqf";
server_spawnCrashSite  =    	compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_spawnCrashSite.sqf";
server_spawnC130CrashSite = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_spawnC130CrashSite.sqf";
server_spawnAN2CrashSite = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_spawnAN2CrashSite.sqf";
server_spawnAN2 = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_spawnAN2.sqf"; 
server_carepackagedrop = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_carepackagedrop.sqf";
server_spawnEvents =			compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_spawnEvent.sqf";
//server_weather =				compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_weather.sqf";
fnc_plyrHit   =					compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\fnc_plyrHit.sqf";
server_deaths = 				compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_playerDeaths.sqf";
server_maintainArea = 			compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_maintainArea.sqf";

/* PVS/PVC - Skaronator */
server_sendToClient =			compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_sendToClient.sqf";

//onPlayerConnected 			{[_uid,_name] call server_onPlayerConnect;};
onPlayerDisconnected 		{[_uid,_name] call server_onPlayerDisconnect;};


server_updateNearbyObjects = {
	private["_pos"];
	_pos = _this select 0;
	{
		[_x, "gear"] call server_updateObject;
	} count nearestObjects [_pos, dayz_updateObjects, 10];
};

server_handleZedSpawn = {
	private["_zed"];
	_zed = _this select 0;
	_zed enableSimulation false;
};

zombie_findOwner = {
	private["_unit"];
	_unit = _this select 0;
	#ifdef DZE_SERVER_DEBUG
	diag_log ("CLEANUP: DELETE UNCONTROLLED ZOMBIE: " + (typeOf _unit) + " OF: " + str(_unit) );
	#endif
	deleteVehicle _unit;
};

vehicle_handleInteract = {
	private["_object"];
	_object = _this select 0;
	needUpdate_objects = needUpdate_objects - [_object];
	[_object, "all"] call server_updateObject;
};

array_reduceSizeReverse = {
	private["_array","_count","_num","_newarray","_startnum","_index"];
	_array = _this select 0;
	_newarray = [];
	_count = _this select 1;
	_num = count _array;
	if (_num > _count) then {
		_startnum = _num - 1;
		_index = _count - 1;
		for "_i" from 0 to _index do {
			_newarray set [(_index-_i),_array select (_startnum - _i)];
		};
		_array = _newarray;
	}; 
	_array
};

array_reduceSize = {
	private ["_array1","_array","_count","_num"];
	_array1 = _this select 0;
	_array = _array1 - ["Hatchet_Swing","Machete_Swing","Fishing_Swing","sledge_swing","crowbar_swing","CSGAS"];
	_count = _this select 1;
	_num = count _array;
	if (_num > _count) then {
		_array resize _count;
	};
	_array
};

object_handleServerKilled = {
	private["_unit","_objectID","_objectUID","_killer"];
	_unit = _this select 0;
	_killer = _this select 1;
	
	_objectID =	 _unit getVariable ["ObjectID","0"];
	_objectUID = _unit getVariable ["ObjectUID","0"];
		
	[_objectID,_objectUID,_killer] call server_deleteObj;
	
	_unit removeAllMPEventHandlers "MPKilled";
	_unit removeAllEventHandlers "Killed";
	_unit removeAllEventHandlers "HandleDamage";
	_unit removeAllEventHandlers "GetIn";
	_unit removeAllEventHandlers "GetOut";
};

check_publishobject = {
	private["_allowed","_object","_playername"];

	_object = _this select 0;
	_playername = _this select 1;
	_allowed = false;

	if ((typeOf _object) in dayz_allowedObjects) then {
			//diag_log format ["DEBUG: Object: %1 published by %2 is Safe",_object, _playername];
			_allowed = true;
	};
    _allowed
};

//event Handlers
eh_localCleanup = {
	private ["_object"];
	_object = _this select 0;
	_object addEventHandler ["local", {
		if(_this select 1) then {
			private["_type","_unit"];
			_unit = _this select 0;
			_type = typeOf _unit;
			 _myGroupUnit = group _unit;
 			_unit removeAllMPEventHandlers "mpkilled";
 			_unit removeAllMPEventHandlers "mphit";
 			_unit removeAllMPEventHandlers "mprespawn";
 			_unit removeAllEventHandlers "FiredNear";
			_unit removeAllEventHandlers "HandleDamage";
			_unit removeAllEventHandlers "Killed";
			_unit removeAllEventHandlers "Fired";
			_unit removeAllEventHandlers "GetOut";
			_unit removeAllEventHandlers "GetIn";
			_unit removeAllEventHandlers "Local";
			clearVehicleInit _unit;
			deleteVehicle _unit;
			if ((count (units _myGroupUnit) == 0) && (_myGroupUnit != grpNull)) then {
				deleteGroup _myGroupUnit;
			};
			//_unit = nil;
			// diag_log ("CLEANUP: DELETED A " + str(_type) );
		};
	}];
};

server_hiveWrite = {
	private["_data"];
	_data = "HiveExt" callExtension _this;
};

server_hiveReadWrite = {
	private["_key","_resultArray","_data"];
	_key = _this;
	_data = "HiveExt" callExtension _key;
	_resultArray = call compile format ["%1",_data];
	_resultArray
};

server_hiveReadWriteLarge = {
	private["_key","_resultArray","_data"];
	_key = _this;
	_data = "HiveExt" callExtension _key;
	_resultArray = call compile _data;
	_resultArray
};

server_checkIfTowed = {
	private ["_vehicle","_player","_attached"];
	if (DZE_HeliLift) then {
		_vehicle = 	_this select 0;
		_player = 	_this select 2;
		_attached = _vehicle getVariable["attached",false];
		if (typeName _attached == "OBJECT") then {
			_player action ["eject", _vehicle];
			detach _vehicle;
			_vehicle setVariable["attached",false,true];
			_attached setVariable["hasAttached",false,true];
		};
	};
};

server_characterSync = {
	private ["_characterID","_playerPos","_playerGear","_playerBackp","_medical","_currentState","_currentModel","_key"];
	_characterID = 	_this select 0;	
	_playerPos =	_this select 1;
	_playerGear =	_this select 2;
	_playerBackp =	_this select 3;
	_medical = 		_this select 4;
	_currentState =	_this select 5;
	_currentModel = _this select 6;
	
	_key = format["CHILD:201:%1:%2:%3:%4:%5:%6:%7:%8:%9:%10:%11:%12:%13:%14:%15:%16:",_characterID,_playerPos,_playerGear,_playerBackp,_medical,false,false,0,0,0,0,_currentState,0,0,_currentModel,0];
	_key call server_hiveWrite;
};

if(isnil "dayz_MapArea") then {
	dayz_MapArea = 10000;
};
if(isnil "DynamicVehicleArea") then {
	DynamicVehicleArea = dayz_MapArea / 2;
};

// Get all buildings && roads only once TODO: set variables to nil after done if nessicary 
MarkerPosition = getMarkerPos "center";
RoadList = MarkerPosition nearRoads DynamicVehicleArea;

// Very taxing !!! but only on first startup
BuildingList = [];
{
	if (DZE_MissionLootTable) then {
		if (isClass (missionConfigFile >> "CfgBuildingLoot" >> (typeOf _x))) then
		{
				BuildingList set [count BuildingList,_x];
		};
	} else {
		if (isClass (configFile >> "CfgBuildingLoot" >> (typeOf _x))) then
		{
			BuildingList set [count BuildingList,_x];
		};
	};
	
	
} count (MarkerPosition nearObjects ["building",DynamicVehicleArea]);

spawn_vehicles = {
	private ["_random","_lastIndex","_weights","_index","_vehicle","_velimit","_qty","_isAir","_isShip","_position","_dir","_istoomany","_veh","_objPosition","_marker","_iClass","_itemTypes","_cntWeights","_itemType","_num","_allCfgLoots"];
	
	if (!isDedicated) exitWith { }; //Be sure the run this

	while {count AllowedVehiclesList > 0} do {
		// BIS_fnc_selectRandom replaced because the index may be needed to remove the element
		_index = floor random count AllowedVehiclesList;
		_random = AllowedVehiclesList select _index;

		_vehicle = _random select 0;
		_velimit = _random select 1;

		_qty = {_x == _vehicle} count serverVehicleCounter;

		// If under limit allow to proceed
		if (_qty <= _velimit) exitWith {};

		// vehicle limit reached, remove vehicle from list
		// since elements cannot be removed from an array, overwrite it with the last element && cut the last element of (as long as order is not important)
		_lastIndex = (count AllowedVehiclesList) - 1;
		if (_lastIndex != _index) then {
			AllowedVehiclesList set [_index, AllowedVehiclesList select _lastIndex];
		};
		AllowedVehiclesList resize _lastIndex;
	};

	if (count AllowedVehiclesList == 0) then {
		diag_log("DEBUG: unable to find suitable vehicle to spawn");
	} else {

		// add vehicle to counter for next pass
		serverVehicleCounter set [count serverVehicleCounter,_vehicle];
	
		// Find Vehicle Type to better control spawns
		_isAir = _vehicle isKindOf "Air";
		_isShip = _vehicle isKindOf "Ship";
	
		if(_isShip || _isAir) then {
			if(_isShip) then {
				// Spawn anywhere on coast on water
				waitUntil{!isNil "BIS_fnc_findSafePos"};
				_position = [MarkerPosition,0,DynamicVehicleArea,10,1,2000,1] call BIS_fnc_findSafePos;
				//diag_log("DEBUG: spawning boat near coast " + str(_position));
			} else {
				// Spawn air anywhere that is flat
				waitUntil{!isNil "BIS_fnc_findSafePos"};
				_position = [MarkerPosition,0,DynamicVehicleArea,10,0,2000,0] call BIS_fnc_findSafePos;
				//diag_log("DEBUG: spawning air anywhere flat " + str(_position));
			};
		
		
		} else {
			// Spawn around buildings && 50% near roads
			if((random 1) > 0.5) then {
			
				waitUntil{!isNil "BIS_fnc_selectRandom"};
				_position = RoadList call BIS_fnc_selectRandom;
			
				_position = _position modelToWorld [0,0,0];
			
				waitUntil{!isNil "BIS_fnc_findSafePos"};
				_position = [_position,0,10,10,0,2000,0] call BIS_fnc_findSafePos;
			
				//diag_log("DEBUG: spawning near road " + str(_position));
			
			} else {
			
				waitUntil{!isNil "BIS_fnc_selectRandom"};
				_position = BuildingList call BIS_fnc_selectRandom;
			
				_position = _position modelToWorld [0,0,0];
			
				waitUntil{!isNil "BIS_fnc_findSafePos"};
				_position = [_position,0,40,5,0,2000,0] call BIS_fnc_findSafePos;
			
				//diag_log("DEBUG: spawning around buildings " + str(_position));
		
			};
		};
		// only proceed if two params otherwise BIS_fnc_findSafePos failed && may spawn in air
		if ((count _position) == 2) then { 
	
			_dir = round(random 180);
		
			_istoomany = _position nearObjects ["AllVehicles",50];
			if((count _istoomany) > 0) exitWith { diag_log("DEBUG: Too many vehicles at " + str(_position)); };
		
			//place vehicle 
			_veh = createVehicle [_vehicle, _position, [], 0, "CAN_COLLIDE"];
			_veh setdir _dir;
			_veh setpos _position;		
			
			if(DZEdebug) then {
				_marker = createMarker [str(_position) , _position];
				_marker setMarkerShape "ICON";
				_marker setMarkerType "DOT";
				_marker setMarkerText _vehicle;
			};	
		
			// Get position with ground
			_objPosition = getPosATL _veh;
		
			clearWeaponCargoGlobal  _veh;
			clearMagazineCargoGlobal  _veh;
			// _veh setVehicleAmmo DZE_vehicleAmmo;

			// Add 0-3 loots to vehicle using random cfgloots 
			_num = floor(random 4);
			_allCfgLoots = ["trash","civilian","food","generic","medical","military","policeman","hunter","worker","clothes","militaryclothes","specialclothes","trash"];
			
			for "_x" from 1 to _num do {
				_iClass = _allCfgLoots call BIS_fnc_selectRandom;

				_itemTypes = [];
				if (DZE_MissionLootTable) then{
					{
						_itemTypes set[count _itemTypes, _x select 0]
					} count getArray(missionConfigFile >> "cfgLoot" >> _iClass);
				}
				else {
					{
						_itemTypes set[count _itemTypes, _x select 0]
					} count getArray(configFile >> "cfgLoot" >> _iClass);
				};

				_index = dayz_CLBase find _iClass;
				_weights = dayz_CLChances select _index;
				_cntWeights = count _weights;
				
				_index = floor(random _cntWeights);
				_index = _weights select _index;
				_itemType = _itemTypes select _index;
				_veh addMagazineCargoGlobal [_itemType,1];
				//diag_log("DEBUG: spawed loot inside vehicle " + str(_itemType));
			};

			[_veh,[_dir,_objPosition],_vehicle,true,"0"] call server_publishVeh;
		};
	};
};

spawn_ammosupply = {
	private ["_position","_veh","_istoomany","_marker","_spawnveh","_WreckList"];
	if (isDedicated) then {
		_WreckList = ["Supply_Crate_DZE"];
		waitUntil{!isNil "BIS_fnc_selectRandom"};
		_position = RoadList call BIS_fnc_selectRandom;
		_position = _position modelToWorld [0,0,0];
		waitUntil{!isNil "BIS_fnc_findSafePos"};
		_position = [_position,5,20,5,0,2000,0] call BIS_fnc_findSafePos;
		if ((count _position) == 2) then {

			_istoomany = _position nearObjects ["All",5];
			
			if((count _istoomany) > 0) exitWith { diag_log("DEBUG VEIN: Too many at " + str(_position)); };
			
			_spawnveh = _WreckList call BIS_fnc_selectRandom;

			if(DZEdebug) then {
				_marker = createMarker [str(_position) , _position];
				_marker setMarkerShape "ICON";
				_marker setMarkerType "DOT";
				_marker setMarkerText str(_spawnveh);
			};
			
			_veh = createVehicle [_spawnveh,_position, [], 0, "CAN_COLLIDE"];
			_veh enableSimulation false;
			_veh setDir round(random 360);
			_veh setpos _position;
			_veh setVariable ["ObjectID","1",true];
		};
	};
};

DZE_LocalRoadBlocks = [];

spawn_roadblocks = {
	private ["_position","_veh","_istoomany","_marker","_spawnveh","_WreckList"];
	_WreckList = ["SKODAWreck","HMMWVWreck","UralWreck","datsun01Wreck","hiluxWreck","datsun02Wreck","UAZWreck","Land_Misc_Garb_Heap_EP1","Fort_Barricade_EP1","Rubbish2"];
	
	waitUntil{!isNil "BIS_fnc_selectRandom"};
	if (isDedicated) then {
	
		_position = RoadList call BIS_fnc_selectRandom;
		
		_position = _position modelToWorld [0,0,0];
		
		waitUntil{!isNil "BIS_fnc_findSafePos"};
		_position = [_position,0,10,5,0,2000,0] call BIS_fnc_findSafePos;
		
		if ((count _position) == 2) then {
			// Get position with ground
			
			_istoomany = _position nearObjects ["All",5];
		
			if((count _istoomany) > 0) exitWith { diag_log("DEBUG: Too many at " + str(_position)); };
			
			waitUntil{!isNil "BIS_fnc_selectRandom"};
			_spawnveh = _WreckList call BIS_fnc_selectRandom;

			if(DZEdebug) then {
				_marker = createMarker [str(_position) , _position];
				_marker setMarkerShape "ICON";
				_marker setMarkerType "DOT";
				_marker setMarkerText str(_spawnveh);
			};

			_veh = createVehicle [_spawnveh,_position, [], 0, "CAN_COLLIDE"];
			_veh enableSimulation false;

			_veh setDir round(random 360); // Randomize placement a bit
			_veh setpos _position;

			_veh setVariable ["ObjectID","1",true];
		};
	
	};
	
};

spawn_mineveins = {
	private ["_position","_veh","_istoomany","_marker","_spawnveh","_positions"];

	if (isDedicated) then {
		
		_position = [getMarkerPos "center",0,(HeliCrashArea*0.75),10,0,2000,0] call BIS_fnc_findSafePos;

		if ((count _position) == 2) then {
			
			_positions = selectBestPlaces [_position, 500, "(1 + forest) * (1 + hills) * (1 - houses) * (1 - sea)", 10, 5];

			_position = (_positions call BIS_fnc_selectRandom) select 0;

			// Get position with ground
			_istoomany = _position nearObjects ["All",10];
		
			if((count _istoomany) > 0) exitWith { diag_log("DEBUG VEIN: Too many objects at " + str(_position)); };

			if(isOnRoad _position) exitWith { diag_log("DEBUG VEIN: on road " + str(_position)); };
			
			_spawnveh = ["Iron_Vein_DZE","Iron_Vein_DZE","Iron_Vein_DZE","Iron_Vein_DZE","Iron_Vein_DZE","Silver_Vein_DZE","Silver_Vein_DZE","Silver_Vein_DZE","Gold_Vein_DZE","Gold_Vein_DZE"] call BIS_fnc_selectRandom;

			if(DZEdebug) then {
				_marker = createMarker [str(_position) , _position];
				_marker setMarkerShape "ICON";
				_marker setMarkerType "DOT";
				_marker setMarkerText str(_spawnveh);
			};
			
			//diag_log("DEBUG: Spawning a crashed " + _spawnveh + " with " + _spawnloot + " at " + str(_position));
			_veh = createVehicle [_spawnveh,_position, [], 0, "CAN_COLLIDE"];
			_veh enableSimulation false;

			// Randomize placement a bit
			_veh setDir round(random 360);
			_veh setpos _position;

			_veh setVariable ["ObjectID","1",true];

		
		};
	};
};

if(isnil "DynamicVehicleDamageLow") then {
	DynamicVehicleDamageLow = 0;
};
if(isnil "DynamicVehicleDamageHigh") then {
	DynamicVehicleDamageHigh = 100;
};

if(isnil "DynamicVehicleFuelLow") then {
	DynamicVehicleFuelLow = 0;
};
if(isnil "DynamicVehicleFuelHigh") then {
	DynamicVehicleFuelHigh = 100;
};

if(isnil "DZE_DiagFpsSlow") then {
	DZE_DiagFpsSlow = false;
};
if(isnil "DZE_DiagFpsFast") then {
	DZE_DiagFpsFast = false;
};
if(isnil "DZE_DiagVerbose") then {
	DZE_DiagVerbose = false;
};

dze_diag_fps = {
	if(DZE_DiagVerbose) then {
		diag_log format["DEBUG FPS : %1 OBJECTS: %2 : PLAYERS: %3", diag_fps,(count (allMissionObjects "")),(playersNumber west)];
	} else {
		diag_log format["DEBUG FPS : %1", diag_fps];
	};
};

// Damage generator function
generate_new_damage = {
	private ["_damage"];
    _damage = ((random(DynamicVehicleDamageHigh-DynamicVehicleDamageLow))+DynamicVehicleDamageLow) / 100;
	_damage;
};

// Damage generator fuction
generate_exp_damage = {
	private ["_damage"];
    _damage = ((random(DynamicVehicleDamageHigh-DynamicVehicleDamageLow))+DynamicVehicleDamageLow) / 100;
	
	// limit this to 85% since vehicle would blow up otherwise.
	//if(_damage >= 0.85) then {
	//	_damage = 0.85;
	//};
	_damage;
};

server_getDiff =	{
	private["_variable","_object","_vNew","_vOld","_result"];
	_variable = _this select 0;
	_object = 	_this select 1;
	_vNew = 	_object getVariable[_variable,0];
	_vOld = 	_object getVariable[(_variable + "_CHK"),_vNew];
	_result = 	0;
	if (_vNew < _vOld) then {
		//JIP issues
		_vNew = _vNew + _vOld;
		_object getVariable[(_variable + "_CHK"),_vNew];
	} else {
		_result = _vNew - _vOld;
		_object setVariable[(_variable + "_CHK"),_vNew];
	};
	_result
};

server_getDiff2 =	{
	private["_variable","_object","_vNew","_vOld","_result"];
	_variable = _this select 0;
	_object = 	_this select 1;
	_vNew = 	_object getVariable[_variable,0];
	_vOld = 	_object getVariable[(_variable + "_CHK"),_vNew];
	_result = _vNew - _vOld;
	_object setVariable[(_variable + "_CHK"),_vNew];
	_result
};

dayz_objectUID = {
	private["_position","_dir","_key","_object"];
	_object = _this;
	_position = getPosATL _object;
	_dir = direction _object;
	_key = [_dir,_position] call dayz_objectUID2;
    _key
};

dayz_objectUID2 = {
	private["_position","_dir","_key"];
	if((count _this) == 2) then{
		_dir = _this select 0;
		_key = "";
		_position = _this select 1;
		{
			_x = _x * 10;
			if ( _x < 0 ) then { _x = _x * -10 };
			_key = _key + str(round(_x));
		} count _position;
		_key = _key + str(round(_dir));
	}else{
		if((count _this) == 3) then{
					if(typename (_this select 2) == "ARRAY")then{
							_vector = _this select 2;
							if(count _vector == 2)then{
								if(((count (_vector select 0)) == 3) && ((count (_vector select 1)) == 3))then{
										_key = "";
										_position = _this select 1;
										{
											_x = _x * 10;
											if ( _x < 0 ) then { _x = _x * -10 };
											_key = _key + str(round(_x));
										} count _position;
										
										_vecCnt = 0;
										{
											_set = _x;
											{
												_vecCnt = _vecCnt + (round (_x * 100))
												
											} foreach _set;
											
										} foreach _vector;
										if(_vecCnt < 0)then{
											_vecCnt = ((_vecCnt * -1) * 3);
										};
										_key = _key + str(_vecCnt);	
								}else{
									_dir = _this select 0;
									_key = "";
									_position = _this select 1;
									{
										_x = _x * 10;
										if ( _x < 0 ) then { _x = _x * -10 };
										_key = _key + str(round(_x));
									} count _position;
									_key = _key + str(round(_dir));
								};
							}else{
								_dir = _this select 0;
								_key = "";
								_position = _this select 1;
								{
									_x = _x * 10;
									if ( _x < 0 ) then { _x = _x * -10 };
									_key = _key + str(round(_x));
								} count _position;
								_key = _key + str(round(_dir));
							};
						
					}else{
						_dir = _this select 0;
						_key = "";
						_position = _this select 1;
						{
							_x = _x * 10;
							if ( _x < 0 ) then { _x = _x * -10 };
							_key = _key + str(round(_x));
						} count _position;
						_key = _key + str(round(_dir));
					};
		}else{
			if((count _this) == 4) then{
					if(typename (_this select 3) == "ARRAY")then{
						_vector = _this select 3;
						if(count _vector == 2)then{
							if(((count (_vector select 0)) == 3) && ((count (_vector select 1)) == 3))then{
										_key = "";
										_position = _this select 1;
										{
											_x = _x * 10;
											if ( _x < 0 ) then { _x = _x * -10 };
											_key = _key + str(round(_x));
										} count _position;
										
										_vecCnt = 0;
										{
											_set = _x;
											{
												_vecCnt = _vecCnt + (round (_x * 100))
												
											} foreach _set;
											
										} foreach _vector;
										if(_vecCnt < 0)then{
											_vecCnt = ((_vecCnt * -1) * 3);
										};
										_key = _key + str(_vecCnt);	
							}else{
								_dir = _this select 0;
								_key = "";
								_position = _this select 1;
								{
									_x = _x * 10;
									if ( _x < 0 ) then { _x = _x * -10 };
									_key = _key + str(round(_x));
								} count _position;
								_key = _key + str(round(_dir));
							};
						}else{
							_dir = _this select 0;
							_key = "";
							_position = _this select 1;
							{
								_x = _x * 10;
								if ( _x < 0 ) then { _x = _x * -10 };
								_key = _key + str(round(_x));
							} count _position;
							_key = _key + str(round(_dir));
						};
					}else{
						if(typename (_this select 2) == "ARRAY")then{
							_vector = _this select 2;
							if(count _vector == 2)then{
								if(((count (_vector select 0)) == 3) && ((count (_vector select 1)) == 3))then{
											_key = "";
											_position = _this select 1;
											{
												_x = _x * 10;
												if ( _x < 0 ) then { _x = _x * -10 };
												_key = _key + str(round(_x));
											} count _position;
											
											_vecCnt = 0;
											{
												_set = _x;
												{
													_vecCnt = _vecCnt + (round (_x * 100))
													
												} foreach _set;
												
											} foreach _vector;
											if(_vecCnt < 0)then{
												_vecCnt = ((_vecCnt * -1) * 3);
											};
											_key = _key + str(_vecCnt);	
								}else{
									_dir = _this select 0;
									_key = "";
									_position = _this select 1;
									{
										_x = _x * 10;
										if ( _x < 0 ) then { _x = _x * -10 };
										_key = _key + str(round(_x));
									} count _position;
									_key = _key + str(round(_dir));
								};
							}else{
								_dir = _this select 0;
								_key = "";
								_position = _this select 1;
								{
									_x = _x * 10;
									if ( _x < 0 ) then { _x = _x * -10 };
									_key = _key + str(round(_x));
								} count _position;
								_key = _key + str(round(_dir));
							};
						}else{
							_dir = _this select 0;
							_key = "";
							_position = _this select 1;
							{
								_x = _x * 10;
								if ( _x < 0 ) then { _x = _x * -10 };
								_key = _key + str(round(_x));
							} count _position;
							_key = _key + str(round(_dir));
						};
					};
			}else{
				_dir = _this select 0;
				_key = "";
				_position = _this select 1;
				{
					_x = _x * 10;
					if ( _x < 0 ) then { _x = _x * -10 };
					_key = _key + str(round(_x));
				} count _position;
				_key = _key + str(round(_dir));
			};
		};
		
	};
	_key
}; 

dayz_objectUID3 = {
	private["_position","_dir","_key"];
	_dir = _this select 0;
	_key = "";
	_position = _this select 1;
	{
		_x = _x * 10;
		if ( _x < 0 ) then { _x = _x * -10 };
		_key = _key + str(round(_x));
	} count _position;
	_key = _key + str(round(_dir + time));
	_key
};

dayz_recordLogin = {
	private["_key"];
	_key = format["CHILD:103:%1:%2:%3:",_this select 0,_this select 1,_this select 2];
	_key call server_hiveWrite;
};
currentInvites = [];
publicVariable "currentInvites";


dayz_perform_purge = {
	if(!isNull(_this)) then {
		_group = group _this;
		_this removeAllMPEventHandlers "mpkilled";
		_this removeAllMPEventHandlers "mphit";
		_this removeAllMPEventHandlers "mprespawn";
		_this removeAllEventHandlers "FiredNear";
		_this removeAllEventHandlers "HandleDamage";
		_this removeAllEventHandlers "Killed";
		_this removeAllEventHandlers "Fired";
		_this removeAllEventHandlers "GetOut";
		_this removeAllEventHandlers "GetIn";
		_this removeAllEventHandlers "Local";
		clearVehicleInit _this;
		deleteVehicle _this;
		if ((count (units _group) == 0) && (_group != grpNull)) then {
			deleteGroup _group;
		};
	};
};

dayz_perform_purge_player = {

	private ["_countr","_backpack","_backpackType","_backpackWpn","_backpackMag","_objWpnTypes","_objWpnQty","_location","_dir","_holder","_weapons","_magazines"];
    diag_log ("Purging player: " + str(_this));	

	if(!isNull(_this)) then {

		_location = getPosATL _this;
		_dir = getDir _this;

		_holder = createVehicle ["GraveDZE", _location, [], 0, "CAN_COLLIDE"];
		_holder setDir _dir;
		_holder setPosATL _location;

		_holder enableSimulation false;

		_weapons = weapons _this;
		_magazines = magazines _this;

		// find backpack
		if(!(isNull unitBackpack _this)) then {
			_backpack = unitBackpack _this;
			_backpackType = typeOf _backpack;
			_backpackWpn = getWeaponCargo _backpack;
			_backpackMag = getMagazineCargo _backpack;

			_holder addBackpackCargoGlobal [_backpackType,1];

			// add items from backpack 
			_objWpnTypes = _backpackWpn select 0;
			_objWpnQty = _backpackWpn select 1;
			_countr = 0;
			{
				_holder addWeaponCargoGlobal [_x,(_objWpnQty select _countr)];
				_countr = _countr + 1;
			} count _objWpnTypes;

			// add backpack magazine items
			_objWpnTypes = _backpackMag select 0;
			_objWpnQty = _backpackMag select 1;
			_countr = 0;
			{
				_holder addMagazineCargoGlobal [_x,(_objWpnQty select _countr)];
				_countr = _countr + 1;
			} count _objWpnTypes;
		};
	};

	// add weapons
	{ 
		_holder addWeaponCargoGlobal [_x, 1];
	} count _weapons;

	// add mags
	{ 
		_holder addMagazineCargoGlobal [_x, 1];
	} count _magazines;
	_group = group _this;
	_this removeAllMPEventHandlers "mpkilled";
	_this removeAllMPEventHandlers "mphit";
	_this removeAllMPEventHandlers "mprespawn";
	_this removeAllEventHandlers "FiredNear";
	_this removeAllEventHandlers "HandleDamage";
	_this removeAllEventHandlers "Killed";
	_this removeAllEventHandlers "Fired";
	_this removeAllEventHandlers "GetOut";
	_this removeAllEventHandlers "GetIn";
	_this removeAllEventHandlers "Local";
	clearVehicleInit _this;
	deleteVehicle _this;
	if ((count (units _group) == 0) && (_group != grpNull)) then {
		deleteGroup _group;
	};
	//  _this = nil;
};


dayz_removePlayerOnDisconnect = {
	if(!isNull(_this)) then {
		_group = group _this;
		_this removeAllMPEventHandlers "mphit";
		deleteVehicle _this;
		deleteGroup (group _this);
	};
};

server_timeSync = {
	//Send request
	private ["_hour","_minute","_date","_key","_result","_outcome"];
    _key = "CHILD:307:";
	_result = _key call server_hiveReadWrite;
	_outcome = _result select 0;
	if(_outcome == "PASS") then {
		_date = _result select 1; 
		
		if(dayz_fullMoonNights) then {
			_hour = _date select 3;
			_minute = _date select 4;
			//Force full moon nights
			_date = [2013,8,3,_hour,_minute];
		};

		setDate _date;
		PVDZE_plr_SetDate = _date;
		publicVariable "PVDZE_plr_SetDate";
		diag_log ("TIME SYNC: Local Time set to " + str(_date));	
	};
};

// must spawn these 
server_spawncleanDead = {
	private ["_deathTime","_delQtyZ","_delQtyP","_qty","_allDead"];
	_allDead = allDead;
	_delQtyZ = 0;
	_delQtyP = 0;
	{
		if (local _x) then {
			if (_x isKindOf "zZombie_Base") then
			{
				_x call dayz_perform_purge;
				sleep 0.05;
				_delQtyZ = _delQtyZ + 1;
			} else {
				if (_x isKindOf "CAManBase") then {
					_deathTime = _x getVariable ["processedDeath", diag_tickTime];
					if (diag_tickTime - _deathTime > 1800) then {
						_x call dayz_perform_purge_player;
						sleep 0.025;
						_delQtyP = _delQtyP + 1;
					};
				};
			};
		};
		sleep 0.025;
	} count _allDead;
	if (_delQtyZ > 0 || _delQtyP > 0) then {
		_qty = count _allDead;
		diag_log (format["CLEANUP: Deleted %1 players && %2 zombies out of %3 dead",_delQtyP,_delQtyZ,_qty]);
	};
};
server_cleanupGroups = {
	if (DZE_DYN_AntiStuck3rd > 3) then { DZE_DYN_GroupCleanup = nil; DZE_DYN_AntiStuck3rd = 0; };
	if(!isNil "DZE_DYN_GroupCleanup") exitWith {  DZE_DYN_AntiStuck3rd = DZE_DYN_AntiStuck3rd + 1;};
	DZE_DYN_GroupCleanup = true;
	{
		if ((count (units _x) == 0) && (_x != grpNull)) then {
			deleteGroup _x;
		};
		sleep 0.001;
	} count allGroups;
	DZE_DYN_GroupCleanup = nil;
};

server_checkHackers = {
	if (DZE_DYN_AntiStuck2nd > 3) then { DZE_DYN_HackerCheck = nil; DZE_DYN_AntiStuck2nd = 0; };
	if(!isNil "DZE_DYN_HackerCheck") exitWith {  DZE_DYN_AntiStuck2nd = DZE_DYN_AntiStuck2nd + 1;};
	DZE_DYN_HackerCheck = true;
	{
	if (!((isNil "_x") || {(isNull _x)})) then {
	// Epoch Admin Tools
	if(vehicle _x != _x && !(vehicle _x in PVDZE_serverObjectMonitor) && (isPlayer _x) && !((typeOf vehicle _x) in DZE_safeVehicle) && (vehicle _x getVariable ["Mission",0] != 1) &&(vehicle _x getVariable ["MalSar",0] != 1) && (vehicle _x getVariable ["Sarge",0] != 1)) then {
			diag_log ("CLEANUP: KILLING A HACKER " + (name _x) + " " + str(_x) + " IN " + (typeOf vehicle _x));
			(vehicle _x) setDamage 1;
			_x setDamage 1;
			sleep 0.25;
		};
	};
		sleep 0.001;
	} count allUnits;
	DZE_DYN_HackerCheck = nil;
};

server_spawnCleanFire = {
	private ["_delQtyFP","_qty","_delQtyNull","_missionFires"];
	_missionFires = allMissionObjects "Land_Fire_DZ";
	_delQtyFP = 0;
	{
		if (local _x) then {
			deleteVehicle _x;
			sleep 0.025;
			_delQtyFP = _delQtyFP + 1;
		};
		sleep 0.001;
	} count _missionFires;
	if (_delQtyFP > 0) then {
		_qty = count _missionFires;
		diag_log (format["CLEANUP: Deleted %1 fireplaces out of %2",_delQtyNull,_qty]);
	};
};
server_spawnCleanLoot = {
	private ["_created","_delQty","_nearby","_age","_keep","_qty","_missionObjs","_dateNow"];
	if (DZE_DYN_AntiStuck > 3) then { DZE_DYN_cleanLoot = nil; DZE_DYN_AntiStuck = 0; };
	if(!isNil "DZE_DYN_cleanLoot") exitWith {  DZE_DYN_AntiStuck = DZE_DYN_AntiStuck + 1;};
	DZE_DYN_cleanLoot = true;

	_missionObjs =  allMissionObjects "ReammoBox";
	_delQty = 0;
	_dateNow = (DateToNumber date);
	{
		if (!isNull _x) then {
			_keep = _x getVariable["permaLoot", false];
			if (!_keep) then {
				_created = _x getVariable["created", -0.1];
				if (_created == -0.1) then{
					_x setVariable["created", _dateNow, false];
					_created = _dateNow;
				}
				else {
					_age = (_dateNow - _created) * 525948;
					if (_age > 20) then{
						_nearby = { (isPlayer _x) && (alive _x) } count(_x nearEntities[["CAManBase", "AllVehicles"], 130]);
						if (_nearby == 0) then{
							deleteVehicle _x;
							sleep 0.025;
							_delQty = _delQty + 1;
						};
					};
				};
			};
		};
		sleep 0.001;
	} count _missionObjs;
	if (_delQty > 0) then {
		_qty = count _missionObjs;
		diag_log (format["CLEANUP: Deleted %1 Loot Piles out of %2",_delQty,_qty]);
	};
	DZE_DYN_cleanLoot = nil;
};

server_spawnCleanAnimals = {
	private ["_pos","_delQtyAnimal","_qty","_missonAnimals","_nearby"];
	_missonAnimals = entities "CAAnimalBase";
	_delQtyAnimal = 0;
	{
		if (local _x) then {
			_x call dayz_perform_purge;
			sleep 0.05;
			_delQtyAnimal = _delQtyAnimal + 1;
		} else {
			if (!alive _x) then {
				_pos = getPosATL _x;
				if (count _pos > 0) then {
					_nearby = {(isPlayer _x) && (alive _x)} count (_pos nearEntities [["CAManBase","AllVehicles"], 130]);
					if (_nearby==0) then {
						_x call dayz_perform_purge;
						sleep 0.05;
						_delQtyAnimal = _delQtyAnimal + 1;
					};
				};
			};
		};
		sleep 0.001;
	} count _missonAnimals;
	if (_delQtyAnimal > 0) then {
		_qty = count _missonAnimals;
		diag_log (format["CLEANUP: Deleted %1 Animals out of %2",_delQtyAnimal,_qty]);
	};
};

server_logUnlockLockEvent = {
	private["_player", "_obj", "_objectID", "_objectUID", "_statusText", "_status"];
	_player = _this select 0;
	_obj = _this select 1;
	_status = _this select 2;
	if (!isNull(_obj)) then {
		_objectID = _obj getVariable["ObjectID", "0"];
		_objectUID = _obj getVariable["ObjectUID", "0"];
		_statusText = "UNLOCKED";
		if (_status) then {
			[_obj, "gear"] call server_updateObject;
			_statusText = "LOCKED";
		};
		diag_log format["SAFE %5: ID:%1 UID:%2 BY %3(%4)", _objectID, _objectUID, (name _player), (getPlayerUID _player), _statusText];
	};
};

KK_fnc_floatToString = {
	private "_arr";
	if (abs (_this - _this % 1) == 0) exitWith { str _this };
	_arr = toArray str abs (_this % 1);
	_arr set [0, 32];
	toString (toArray str (
		abs (_this - _this % 1) * _this / abs _this
	) + _arr - [32])
};

KK_fnc_positionToString = {
	format [
		"[%1,%2,%3]",
		_this select 0 call KK_fnc_floatToString,
		_this select 1 call KK_fnc_floatToString,
		_this select 2 call KK_fnc_floatToString
	]
};
execVM "\z\addons\dayz_server\init\broadcaster.sqf";

initialSend = false;
donn_server_timeSync = server_timeSync;
server_timeSync = {if (!initialSend) then {[] call donn_server_timeSync;}; initialSend = true;};
[] spawn {
	waitUntil {initialSend};
	while {true} do {
		_dayTime = dayTime;
		//========================TIME FUNCTION============================
		if (_dayTime >= 8 && _dayTime <= 16) then {donn_speed =  4.000;};
		if (_dayTime >  4 && _dayTime <   8) then {donn_speed =  6.666;};
		if (_dayTime > 16 && _dayTime <  20) then {donn_speed =  6.666;};
		if (_dayTime <= 4 || _dayTime >= 20) then {donn_speed = 10.000;};
		//=================================================================
		cad_pvar_server_date = [date, donn_speed];
		publicVariable "cad_pvar_server_date";
		sleep 30;
	};
};
"cad_pvar_send_owner" addPublicVariableEventHandler {
	cad_pvar_server_date = [date, donn_speed];
	owner (_this select 1) publicVariableClient "cad_pvar_server_date";
};

 

ofc

Link to comment
Share on other sites

Quote

[] execVM "\z\addons\dayz_server\init\AH.sqf";
waituntil {!isnil "bis_fnc_init"};

BIS_MPF_remoteExecutionServer = {
    if ((_this select 1) select 2 == "JIPrequest") then {
        [nil,(_this select 1) select 0,"loc",rJIPEXEC,[any,any,"per","execVM","ca\Modules\Functions\init.sqf"]] call RE;
    };
};

BIS_Effects_Burn =                {};
server_playerLogin =            compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_playerLogin.sqf";
server_playerSetup =            compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_playerSetup.sqf";
server_onPlayerDisconnect =     compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_onPlayerDisconnect.sqf";
server_updateObject =            compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_updateObject.sqf";
server_playerDied =                compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_playerDied.sqf";
server_publishObj =             compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_publishObject.sqf";
server_deleteObj =                compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_deleteObj.sqf";
server_swapObject =                compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_swapObject.sqf";
server_publishVeh =             compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_publishVehicle.sqf";
server_publishVeh2 =             compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_publishVehicle2.sqf";
server_publishVeh3 =             compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_publishVehicle3.sqf";
server_tradeObj =                 compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_tradeObject.sqf";
server_traders =                 compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_traders.sqf";
server_playerSync =                compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_playerSync.sqf";
server_spawnCrashSite  =        compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_spawnCrashSite.sqf";
server_spawnC130CrashSite = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_spawnC130CrashSite.sqf";
server_spawnAN2CrashSite = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_spawnAN2CrashSite.sqf";
server_spawnAN2 = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_spawnAN2.sqf";
server_carepackagedrop = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_carepackagedrop.sqf";
server_spawnEvents =            compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_spawnEvent.sqf";
//server_weather =                compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_weather.sqf";
fnc_plyrHit   =                    compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\fnc_plyrHit.sqf";
server_deaths =                 compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_playerDeaths.sqf";
server_maintainArea =             compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_maintainArea.sqf";

/* PVS/PVC - Skaronator */
server_sendToClient =            compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_sendToClient.sqf";

//onPlayerConnected             {[_uid,_name] call server_onPlayerConnect;};
onPlayerDisconnected         {[_uid,_name] call server_onPlayerDisconnect;};


server_updateNearbyObjects = {
    private["_pos"];
    _pos = _this select 0;
    {
        [_x, "gear"] call server_updateObject;
    } count nearestObjects [_pos, dayz_updateObjects, 10];
};

server_handleZedSpawn = {
    private["_zed"];
    _zed = _this select 0;
    _zed enableSimulation false;
};

zombie_findOwner = {
    private["_unit"];
    _unit = _this select 0;
    #ifdef DZE_SERVER_DEBUG
    diag_log ("CLEANUP: DELETE UNCONTROLLED ZOMBIE: " + (typeOf _unit) + " OF: " + str(_unit) );
    #endif
    deleteVehicle _unit;
};

vehicle_handleInteract = {
    private["_object"];
    _object = _this select 0;
    needUpdate_objects = needUpdate_objects - [_object];
    [_object, "all"] call server_updateObject;
};

array_reduceSizeReverse = {
    private["_array","_count","_num","_newarray","_startnum","_index"];
    _array = _this select 0;
    _newarray = [];
    _count = _this select 1;
    _num = count _array;
    if (_num > _count) then {
        _startnum = _num - 1;
        _index = _count - 1;
        for "_i" from 0 to _index do {
            _newarray set [(_index-_i),_array select (_startnum - _i)];
        };
        _array = _newarray;
    };
    _array
};

array_reduceSize = {
    private ["_array1","_array","_count","_num"];
    _array1 = _this select 0;
    _array = _array1 - ["Hatchet_Swing","Machete_Swing","Fishing_Swing","sledge_swing","crowbar_swing","CSGAS"];
    _count = _this select 1;
    _num = count _array;
    if (_num > _count) then {
        _array resize _count;
    };
    _array
};

object_handleServerKilled = {
    private["_unit","_objectID","_objectUID","_killer"];
    _unit = _this select 0;
    _killer = _this select 1;
    
    _objectID =     _unit getVariable ["ObjectID","0"];
    _objectUID = _unit getVariable ["ObjectUID","0"];
        
    [_objectID,_objectUID,_killer] call server_deleteObj;
    
    _unit removeAllMPEventHandlers "MPKilled";
    _unit removeAllEventHandlers "Killed";
    _unit removeAllEventHandlers "HandleDamage";
    _unit removeAllEventHandlers "GetIn";
    _unit removeAllEventHandlers "GetOut";
};

check_publishobject = {
    private["_allowed","_object","_playername"];

    _object = _this select 0;
    _playername = _this select 1;
    _allowed = false;

    if ((typeOf _object) in dayz_allowedObjects) then {
            //diag_log format ["DEBUG: Object: %1 published by %2 is Safe",_object, _playername];
            _allowed = true;
    };
    _allowed
};

//event Handlers
eh_localCleanup = {
    private ["_object"];
    _object = _this select 0;
    _object addEventHandler ["local", {
        if(_this select 1) then {
            private["_type","_unit"];
            _unit = _this select 0;
            _type = typeOf _unit;
             _myGroupUnit = group _unit;
             _unit removeAllMPEventHandlers "mpkilled";
             _unit removeAllMPEventHandlers "mphit";
             _unit removeAllMPEventHandlers "mprespawn";
             _unit removeAllEventHandlers "FiredNear";
            _unit removeAllEventHandlers "HandleDamage";
            _unit removeAllEventHandlers "Killed";
            _unit removeAllEventHandlers "Fired";
            _unit removeAllEventHandlers "GetOut";
            _unit removeAllEventHandlers "GetIn";
            _unit removeAllEventHandlers "Local";
            clearVehicleInit _unit;
            deleteVehicle _unit;
            if ((count (units _myGroupUnit) == 0) && (_myGroupUnit != grpNull)) then {
                deleteGroup _myGroupUnit;
            };
            //_unit = nil;
            // diag_log ("CLEANUP: DELETED A " + str(_type) );
        };
    }];
};

server_hiveWrite = {
    private["_data"];
    _data = "HiveExt" callExtension _this;
};

server_hiveReadWrite = {
    private["_key","_resultArray","_data"];
    _key = _this;
    _data = "HiveExt" callExtension _key;
    _resultArray = call compile format ["%1",_data];
    _resultArray
};

server_hiveReadWriteLarge = {
    private["_key","_resultArray","_data"];
    _key = _this;
    _data = "HiveExt" callExtension _key;
    _resultArray = call compile _data;
    _resultArray
};

server_checkIfTowed = {
    private ["_vehicle","_player","_attached"];
    if (DZE_HeliLift) then {
        _vehicle =     _this select 0;
        _player =     _this select 2;
        _attached = _vehicle getVariable["attached",false];
        if (typeName _attached == "OBJECT") then {
            _player action ["eject", _vehicle];
            detach _vehicle;
            _vehicle setVariable["attached",false,true];
            _attached setVariable["hasAttached",false,true];
        };
    };
};

server_characterSync = {
    private ["_characterID","_playerPos","_playerGear","_playerBackp","_medical","_currentState","_currentModel","_key"];
    _characterID =     _this select 0;    
    _playerPos =    _this select 1;
    _playerGear =    _this select 2;
    _playerBackp =    _this select 3;
    _medical =         _this select 4;
    _currentState =    _this select 5;
    _currentModel = _this select 6;
    
    _key = format["CHILD:201:%1:%2:%3:%4:%5:%6:%7:%8:%9:%10:%11:%12:%13:%14:%15:%16:",_characterID,_playerPos,_playerGear,_playerBackp,_medical,false,false,0,0,0,0,_currentState,0,0,_currentModel,0];
    _key call server_hiveWrite;
};

if(isnil "dayz_MapArea") then {
    dayz_MapArea = 10000;
};
if(isnil "DynamicVehicleArea") then {
    DynamicVehicleArea = dayz_MapArea / 2;
};

// Get all buildings && roads only once TODO: set variables to nil after done if nessicary
MarkerPosition = getMarkerPos "center";
RoadList = MarkerPosition nearRoads DynamicVehicleArea;

// Very taxing !!! but only on first startup
BuildingList = [];
{
    if (DZE_MissionLootTable) then {
        if (isClass (missionConfigFile >> "CfgBuildingLoot" >> (typeOf _x))) then
        {
                BuildingList set [count BuildingList,_x];
        };
    } else {
        if (isClass (configFile >> "CfgBuildingLoot" >> (typeOf _x))) then
        {
            BuildingList set [count BuildingList,_x];
        };
    };
    
    
} count (MarkerPosition nearObjects ["building",DynamicVehicleArea]);

spawn_vehicles = {
    private ["_random","_lastIndex","_weights","_index","_vehicle","_velimit","_qty","_isAir","_isShip","_position","_dir","_istoomany","_veh","_objPosition","_marker","_iClass","_itemTypes","_cntWeights","_itemType","_num","_allCfgLoots"];
    
    if (!isDedicated) exitWith { }; //Be sure the run this

    while {count AllowedVehiclesList > 0} do {
        // BIS_fnc_selectRandom replaced because the index may be needed to remove the element
        _index = floor random count AllowedVehiclesList;
        _random = AllowedVehiclesList select _index;

        _vehicle = _random select 0;
        _velimit = _random select 1;

        _qty = {_x == _vehicle} count serverVehicleCounter;

        // If under limit allow to proceed
        if (_qty <= _velimit) exitWith {};

        // vehicle limit reached, remove vehicle from list
        // since elements cannot be removed from an array, overwrite it with the last element && cut the last element of (as long as order is not important)
        _lastIndex = (count AllowedVehiclesList) - 1;
        if (_lastIndex != _index) then {
            AllowedVehiclesList set [_index, AllowedVehiclesList select _lastIndex];
        };
        AllowedVehiclesList resize _lastIndex;
    };

    if (count AllowedVehiclesList == 0) then {
        diag_log("DEBUG: unable to find suitable vehicle to spawn");
    } else {

        // add vehicle to counter for next pass
        serverVehicleCounter set [count serverVehicleCounter,_vehicle];
    
        // Find Vehicle Type to better control spawns
        _isAir = _vehicle isKindOf "Air";
        _isShip = _vehicle isKindOf "Ship";
    
        if(_isShip || _isAir) then {
            if(_isShip) then {
                // Spawn anywhere on coast on water
                waitUntil{!isNil "BIS_fnc_findSafePos"};
                _position = [MarkerPosition,0,DynamicVehicleArea,10,1,2000,1] call BIS_fnc_findSafePos;
                //diag_log("DEBUG: spawning boat near coast " + str(_position));
            } else {
                // Spawn air anywhere that is flat
                waitUntil{!isNil "BIS_fnc_findSafePos"};
                _position = [MarkerPosition,0,DynamicVehicleArea,10,0,2000,0] call BIS_fnc_findSafePos;
                //diag_log("DEBUG: spawning air anywhere flat " + str(_position));
            };
        
        
        } else {
            // Spawn around buildings && 50% near roads
            if((random 1) > 0.5) then {
            
                waitUntil{!isNil "BIS_fnc_selectRandom"};
                _position = RoadList call BIS_fnc_selectRandom;
            
                _position = _position modelToWorld [0,0,0];
            
                waitUntil{!isNil "BIS_fnc_findSafePos"};
                _position = [_position,0,10,10,0,2000,0] call BIS_fnc_findSafePos;
            
                //diag_log("DEBUG: spawning near road " + str(_position));
            
            } else {
            
                waitUntil{!isNil "BIS_fnc_selectRandom"};
                _position = BuildingList call BIS_fnc_selectRandom;
            
                _position = _position modelToWorld [0,0,0];
            
                waitUntil{!isNil "BIS_fnc_findSafePos"};
                _position = [_position,0,40,5,0,2000,0] call BIS_fnc_findSafePos;
            
                //diag_log("DEBUG: spawning around buildings " + str(_position));
        
            };
        };
        // only proceed if two params otherwise BIS_fnc_findSafePos failed && may spawn in air
        if ((count _position) == 2) then {
    
            _dir = round(random 180);
        
            _istoomany = _position nearObjects ["AllVehicles",50];
            if((count _istoomany) > 0) exitWith { diag_log("DEBUG: Too many vehicles at " + str(_position)); };
        
            //place vehicle
            _veh = createVehicle [_vehicle, _position, [], 0, "CAN_COLLIDE"];
            _veh setdir _dir;
            _veh setpos _position;        
            
            if(DZEdebug) then {
                _marker = createMarker [str(_position) , _position];
                _marker setMarkerShape "ICON";
                _marker setMarkerType "DOT";
                _marker setMarkerText _vehicle;
            };    
        
            // Get position with ground
            _objPosition = getPosATL _veh;
        
            clearWeaponCargoGlobal  _veh;
            clearMagazineCargoGlobal  _veh;
            // _veh setVehicleAmmo DZE_vehicleAmmo;

            // Add 0-3 loots to vehicle using random cfgloots
            _num = floor(random 4);
            _allCfgLoots = ["trash","civilian","food","generic","medical","military","policeman","hunter","worker","clothes","militaryclothes","specialclothes","trash"];
            
            for "_x" from 1 to _num do {
                _iClass = _allCfgLoots call BIS_fnc_selectRandom;

                _itemTypes = [];
                if (DZE_MissionLootTable) then{
                    {
                        _itemTypes set[count _itemTypes, _x select 0]
                    } count getArray(missionConfigFile >> "cfgLoot" >> _iClass);
                }
                else {
                    {
                        _itemTypes set[count _itemTypes, _x select 0]
                    } count getArray(configFile >> "cfgLoot" >> _iClass);
                };

                _index = dayz_CLBase find _iClass;
                _weights = dayz_CLChances select _index;
                _cntWeights = count _weights;
                
                _index = floor(random _cntWeights);
                _index = _weights select _index;
                _itemType = _itemTypes select _index;
                _veh addMagazineCargoGlobal [_itemType,1];
                //diag_log("DEBUG: spawed loot inside vehicle " + str(_itemType));
            };

            [_veh,[_dir,_objPosition],_vehicle,true,"0"] call server_publishVeh;
        };
    };
};

spawn_ammosupply = {
    private ["_position","_veh","_istoomany","_marker","_spawnveh","_WreckList"];
    if (isDedicated) then {
        _WreckList = ["Supply_Crate_DZE"];
        waitUntil{!isNil "BIS_fnc_selectRandom"};
        _position = RoadList call BIS_fnc_selectRandom;
        _position = _position modelToWorld [0,0,0];
        waitUntil{!isNil "BIS_fnc_findSafePos"};
        _position = [_position,5,20,5,0,2000,0] call BIS_fnc_findSafePos;
        if ((count _position) == 2) then {

            _istoomany = _position nearObjects ["All",5];
            
            if((count _istoomany) > 0) exitWith { diag_log("DEBUG VEIN: Too many at " + str(_position)); };
            
            _spawnveh = _WreckList call BIS_fnc_selectRandom;

            if(DZEdebug) then {
                _marker = createMarker [str(_position) , _position];
                _marker setMarkerShape "ICON";
                _marker setMarkerType "DOT";
                _marker setMarkerText str(_spawnveh);
            };
            
            _veh = createVehicle [_spawnveh,_position, [], 0, "CAN_COLLIDE"];
            _veh enableSimulation false;
            _veh setDir round(random 360);
            _veh setpos _position;
            _veh setVariable ["ObjectID","1",true];
        };
    };
};

DZE_LocalRoadBlocks = [];

spawn_roadblocks = {
    private ["_position","_veh","_istoomany","_marker","_spawnveh","_WreckList"];
    _WreckList = ["SKODAWreck","HMMWVWreck","UralWreck","datsun01Wreck","hiluxWreck","datsun02Wreck","UAZWreck","Land_Misc_Garb_Heap_EP1","Fort_Barricade_EP1","Rubbish2"];
    
    waitUntil{!isNil "BIS_fnc_selectRandom"};
    if (isDedicated) then {
    
        _position = RoadList call BIS_fnc_selectRandom;
        
        _position = _position modelToWorld [0,0,0];
        
        waitUntil{!isNil "BIS_fnc_findSafePos"};
        _position = [_position,0,10,5,0,2000,0] call BIS_fnc_findSafePos;
        
        if ((count _position) == 2) then {
            // Get position with ground
            
            _istoomany = _position nearObjects ["All",5];
        
            if((count _istoomany) > 0) exitWith { diag_log("DEBUG: Too many at " + str(_position)); };
            
            waitUntil{!isNil "BIS_fnc_selectRandom"};
            _spawnveh = _WreckList call BIS_fnc_selectRandom;

            if(DZEdebug) then {
                _marker = createMarker [str(_position) , _position];
                _marker setMarkerShape "ICON";
                _marker setMarkerType "DOT";
                _marker setMarkerText str(_spawnveh);
            };

            _veh = createVehicle [_spawnveh,_position, [], 0, "CAN_COLLIDE"];
            _veh enableSimulation false;

            _veh setDir round(random 360); // Randomize placement a bit
            _veh setpos _position;

            _veh setVariable ["ObjectID","1",true];
        };
    
    };
    
};

spawn_mineveins = {
    private ["_position","_veh","_istoomany","_marker","_spawnveh","_positions"];

    if (isDedicated) then {
        
        _position = [getMarkerPos "center",0,(HeliCrashArea*0.75),10,0,2000,0] call BIS_fnc_findSafePos;

        if ((count _position) == 2) then {
            
            _positions = selectBestPlaces [_position, 500, "(1 + forest) * (1 + hills) * (1 - houses) * (1 - sea)", 10, 5];

            _position = (_positions call BIS_fnc_selectRandom) select 0;

            // Get position with ground
            _istoomany = _position nearObjects ["All",10];
        
            if((count _istoomany) > 0) exitWith { diag_log("DEBUG VEIN: Too many objects at " + str(_position)); };

            if(isOnRoad _position) exitWith { diag_log("DEBUG VEIN: on road " + str(_position)); };
            
            _spawnveh = ["Iron_Vein_DZE","Iron_Vein_DZE","Iron_Vein_DZE","Iron_Vein_DZE","Iron_Vein_DZE","Silver_Vein_DZE","Silver_Vein_DZE","Silver_Vein_DZE","Gold_Vein_DZE","Gold_Vein_DZE"] call BIS_fnc_selectRandom;

            if(DZEdebug) then {
                _marker = createMarker [str(_position) , _position];
                _marker setMarkerShape "ICON";
                _marker setMarkerType "DOT";
                _marker setMarkerText str(_spawnveh);
            };
            
            //diag_log("DEBUG: Spawning a crashed " + _spawnveh + " with " + _spawnloot + " at " + str(_position));
            _veh = createVehicle [_spawnveh,_position, [], 0, "CAN_COLLIDE"];
            _veh enableSimulation false;

            // Randomize placement a bit
            _veh setDir round(random 360);
            _veh setpos _position;

            _veh setVariable ["ObjectID","1",true];

        
        };
    };
};

if(isnil "DynamicVehicleDamageLow") then {
    DynamicVehicleDamageLow = 0;
};
if(isnil "DynamicVehicleDamageHigh") then {
    DynamicVehicleDamageHigh = 100;
};

if(isnil "DynamicVehicleFuelLow") then {
    DynamicVehicleFuelLow = 0;
};
if(isnil "DynamicVehicleFuelHigh") then {
    DynamicVehicleFuelHigh = 100;
};

if(isnil "DZE_DiagFpsSlow") then {
    DZE_DiagFpsSlow = false;
};
if(isnil "DZE_DiagFpsFast") then {
    DZE_DiagFpsFast = false;
};
if(isnil "DZE_DiagVerbose") then {
    DZE_DiagVerbose = false;
};

dze_diag_fps = {
    if(DZE_DiagVerbose) then {
        diag_log format["DEBUG FPS : %1 OBJECTS: %2 : PLAYERS: %3", diag_fps,(count (allMissionObjects "")),(playersNumber west)];
    } else {
        diag_log format["DEBUG FPS : %1", diag_fps];
    };
};

// Damage generator function
generate_new_damage = {
    private ["_damage"];
    _damage = ((random(DynamicVehicleDamageHigh-DynamicVehicleDamageLow))+DynamicVehicleDamageLow) / 100;
    _damage;
};

// Damage generator fuction
generate_exp_damage = {
    private ["_damage"];
    _damage = ((random(DynamicVehicleDamageHigh-DynamicVehicleDamageLow))+DynamicVehicleDamageLow) / 100;
    
    // limit this to 85% since vehicle would blow up otherwise.
    //if(_damage >= 0.85) then {
    //    _damage = 0.85;
    //};
    _damage;
};

server_getDiff =    {
    private["_variable","_object","_vNew","_vOld","_result"];
    _variable = _this select 0;
    _object =     _this select 1;
    _vNew =     _object getVariable[_variable,0];
    _vOld =     _object getVariable[(_variable + "_CHK"),_vNew];
    _result =     0;
    if (_vNew < _vOld) then {
        //JIP issues
        _vNew = _vNew + _vOld;
        _object getVariable[(_variable + "_CHK"),_vNew];
    } else {
        _result = _vNew - _vOld;
        _object setVariable[(_variable + "_CHK"),_vNew];
    };
    _result
};

server_getDiff2 =    {
    private["_variable","_object","_vNew","_vOld","_result"];
    _variable = _this select 0;
    _object =     _this select 1;
    _vNew =     _object getVariable[_variable,0];
    _vOld =     _object getVariable[(_variable + "_CHK"),_vNew];
    _result = _vNew - _vOld;
    _object setVariable[(_variable + "_CHK"),_vNew];
    _result
};

dayz_objectUID = {
    private["_position","_dir","_key","_object"];
    _object = _this;
    _position = getPosATL _object;
    _dir = direction _object;
    _key = [_dir,_position] call dayz_objectUID2;
    _key
};

dayz_objectUID2 = {
    private["_position","_dir","_key"];
    if((count _this) == 2) then{
        _dir = _this select 0;
        _key = "";
        _position = _this select 1;
        {
            _x = _x * 10;
            if ( _x < 0 ) then { _x = _x * -10 };
            _key = _key + str(round(_x));
        } count _position;
        _key = _key + str(round(_dir));
    }else{
        if((count _this) == 3) then{
                    if(typename (_this select 2) == "ARRAY")then{
                            _vector = _this select 2;
                            if(count _vector == 2)then{
                                if(((count (_vector select 0)) == 3) && ((count (_vector select 1)) == 3))then{
                                        _key = "";
                                        _position = _this select 1;
                                        {
                                            _x = _x * 10;
                                            if ( _x < 0 ) then { _x = _x * -10 };
                                            _key = _key + str(round(_x));
                                        } count _position;
                                        
                                        _vecCnt = 0;
                                        {
                                            _set = _x;
                                            {
                                                _vecCnt = _vecCnt + (round (_x * 100))
                                                
                                            } foreach _set;
                                            
                                        } foreach _vector;
                                        if(_vecCnt < 0)then{
                                            _vecCnt = ((_vecCnt * -1) * 3);
                                        };
                                        _key = _key + str(_vecCnt);    
                                }else{
                                    _dir = _this select 0;
                                    _key = "";
                                    _position = _this select 1;
                                    {
                                        _x = _x * 10;
                                        if ( _x < 0 ) then { _x = _x * -10 };
                                        _key = _key + str(round(_x));
                                    } count _position;
                                    _key = _key + str(round(_dir));
                                };
                            }else{
                                _dir = _this select 0;
                                _key = "";
                                _position = _this select 1;
                                {
                                    _x = _x * 10;
                                    if ( _x < 0 ) then { _x = _x * -10 };
                                    _key = _key + str(round(_x));
                                } count _position;
                                _key = _key + str(round(_dir));
                            };
                        
                    }else{
                        _dir = _this select 0;
                        _key = "";
                        _position = _this select 1;
                        {
                            _x = _x * 10;
                            if ( _x < 0 ) then { _x = _x * -10 };
                            _key = _key + str(round(_x));
                        } count _position;
                        _key = _key + str(round(_dir));
                    };
        }else{
            if((count _this) == 4) then{
                    if(typename (_this select 3) == "ARRAY")then{
                        _vector = _this select 3;
                        if(count _vector == 2)then{
                            if(((count (_vector select 0)) == 3) && ((count (_vector select 1)) == 3))then{
                                        _key = "";
                                        _position = _this select 1;
                                        {
                                            _x = _x * 10;
                                            if ( _x < 0 ) then { _x = _x * -10 };
                                            _key = _key + str(round(_x));
                                        } count _position;
                                        
                                        _vecCnt = 0;
                                        {
                                            _set = _x;
                                            {
                                                _vecCnt = _vecCnt + (round (_x * 100))
                                                
                                            } foreach _set;
                                            
                                        } foreach _vector;
                                        if(_vecCnt < 0)then{
                                            _vecCnt = ((_vecCnt * -1) * 3);
                                        };
                                        _key = _key + str(_vecCnt);    
                            }else{
                                _dir = _this select 0;
                                _key = "";
                                _position = _this select 1;
                                {
                                    _x = _x * 10;
                                    if ( _x < 0 ) then { _x = _x * -10 };
                                    _key = _key + str(round(_x));
                                } count _position;
                                _key = _key + str(round(_dir));
                            };
                        }else{
                            _dir = _this select 0;
                            _key = "";
                            _position = _this select 1;
                            {
                                _x = _x * 10;
                                if ( _x < 0 ) then { _x = _x * -10 };
                                _key = _key + str(round(_x));
                            } count _position;
                            _key = _key + str(round(_dir));
                        };
                    }else{
                        if(typename (_this select 2) == "ARRAY")then{
                            _vector = _this select 2;
                            if(count _vector == 2)then{
                                if(((count (_vector select 0)) == 3) && ((count (_vector select 1)) == 3))then{
                                            _key = "";
                                            _position = _this select 1;
                                            {
                                                _x = _x * 10;
                                                if ( _x < 0 ) then { _x = _x * -10 };
                                                _key = _key + str(round(_x));
                                            } count _position;
                                            
                                            _vecCnt = 0;
                                            {
                                                _set = _x;
                                                {
                                                    _vecCnt = _vecCnt + (round (_x * 100))
                                                    
                                                } foreach _set;
                                                
                                            } foreach _vector;
                                            if(_vecCnt < 0)then{
                                                _vecCnt = ((_vecCnt * -1) * 3);
                                            };
                                            _key = _key + str(_vecCnt);    
                                }else{
                                    _dir = _this select 0;
                                    _key = "";
                                    _position = _this select 1;
                                    {
                                        _x = _x * 10;
                                        if ( _x < 0 ) then { _x = _x * -10 };
                                        _key = _key + str(round(_x));
                                    } count _position;
                                    _key = _key + str(round(_dir));
                                };
                            }else{
                                _dir = _this select 0;
                                _key = "";
                                _position = _this select 1;
                                {
                                    _x = _x * 10;
                                    if ( _x < 0 ) then { _x = _x * -10 };
                                    _key = _key + str(round(_x));
                                } count _position;
                                _key = _key + str(round(_dir));
                            };
                        }else{
                            _dir = _this select 0;
                            _key = "";
                            _position = _this select 1;
                            {
                                _x = _x * 10;
                                if ( _x < 0 ) then { _x = _x * -10 };
                                _key = _key + str(round(_x));
                            } count _position;
                            _key = _key + str(round(_dir));
                        };
                    };
            }else{
                _dir = _this select 0;
                _key = "";
                _position = _this select 1;
                {
                    _x = _x * 10;
                    if ( _x < 0 ) then { _x = _x * -10 };
                    _key = _key + str(round(_x));
                } count _position;
                _key = _key + str(round(_dir));
            };
        };
        
    };
    _key
};

dayz_objectUID3 = {
    private["_position","_dir","_key"];
    _dir = _this select 0;
    _key = "";
    _position = _this select 1;
    {
        _x = _x * 10;
        if ( _x < 0 ) then { _x = _x * -10 };
        _key = _key + str(round(_x));
    } count _position;
    _key = _key + str(round(_dir + time));
    _key
};

dayz_recordLogin = {
    private["_key"];
    _key = format["CHILD:103:%1:%2:%3:",_this select 0,_this select 1,_this select 2];
    _key call server_hiveWrite;
};
currentInvites = [];
publicVariable "currentInvites";


dayz_perform_purge = {
    if(!isNull(_this)) then {
        _group = group _this;
        _this removeAllMPEventHandlers "mpkilled";
        _this removeAllMPEventHandlers "mphit";
        _this removeAllMPEventHandlers "mprespawn";
        _this removeAllEventHandlers "FiredNear";
        _this removeAllEventHandlers "HandleDamage";
        _this removeAllEventHandlers "Killed";
        _this removeAllEventHandlers "Fired";
        _this removeAllEventHandlers "GetOut";
        _this removeAllEventHandlers "GetIn";
        _this removeAllEventHandlers "Local";
        clearVehicleInit _this;
        deleteVehicle _this;
        if ((count (units _group) == 0) && (_group != grpNull)) then {
            deleteGroup _group;
        };
    };
};

dayz_perform_purge_player = {

    private ["_countr","_backpack","_backpackType","_backpackWpn","_backpackMag","_objWpnTypes","_objWpnQty","_location","_dir","_holder","_weapons","_magazines"];
    diag_log ("Purging player: " + str(_this));    

    if(!isNull(_this)) then {

        _location = getPosATL _this;
        _dir = getDir _this;

        _holder = createVehicle ["GraveDZE", _location, [], 0, "CAN_COLLIDE"];
        _holder setDir _dir;
        _holder setPosATL _location;

        _holder enableSimulation false;

        _weapons = weapons _this;
        _magazines = magazines _this;

        // find backpack
        if(!(isNull unitBackpack _this)) then {
            _backpack = unitBackpack _this;
            _backpackType = typeOf _backpack;
            _backpackWpn = getWeaponCargo _backpack;
            _backpackMag = getMagazineCargo _backpack;

            _holder addBackpackCargoGlobal [_backpackType,1];

            // add items from backpack
            _objWpnTypes = _backpackWpn select 0;
            _objWpnQty = _backpackWpn select 1;
            _countr = 0;
            {
                _holder addWeaponCargoGlobal [_x,(_objWpnQty select _countr)];
                _countr = _countr + 1;
            } count _objWpnTypes;

            // add backpack magazine items
            _objWpnTypes = _backpackMag select 0;
            _objWpnQty = _backpackMag select 1;
            _countr = 0;
            {
                _holder addMagazineCargoGlobal [_x,(_objWpnQty select _countr)];
                _countr = _countr + 1;
            } count _objWpnTypes;
        };
    };

    // add weapons
    {
        _holder addWeaponCargoGlobal [_x, 1];
    } count _weapons;

    // add mags
    {
        _holder addMagazineCargoGlobal [_x, 1];
    } count _magazines;
    _group = group _this;
    _this removeAllMPEventHandlers "mpkilled";
    _this removeAllMPEventHandlers "mphit";
    _this removeAllMPEventHandlers "mprespawn";
    _this removeAllEventHandlers "FiredNear";
    _this removeAllEventHandlers "HandleDamage";
    _this removeAllEventHandlers "Killed";
    _this removeAllEventHandlers "Fired";
    _this removeAllEventHandlers "GetOut";
    _this removeAllEventHandlers "GetIn";
    _this removeAllEventHandlers "Local";
    clearVehicleInit _this;
    deleteVehicle _this;
    if ((count (units _group) == 0) && (_group != grpNull)) then {
        deleteGroup _group;
    };
    //  _this = nil;
};


dayz_removePlayerOnDisconnect = {
    if(!isNull(_this)) then {
        _group = group _this;
        _this removeAllMPEventHandlers "mphit";
        deleteVehicle _this;
        deleteGroup (group _this);
    };
};

server_timeSync = {
    //Send request
    private ["_hour","_minute","_date","_key","_result","_outcome"];
    _key = "CHILD:307:";
    _result = _key call server_hiveReadWrite;
    _outcome = _result select 0;
    if(_outcome == "PASS") then {
        _date = _result select 1;
        
        if(dayz_fullMoonNights) then {
            _hour = _date select 3;
            _minute = _date select 4;
            //Force full moon nights
            _date = [2013,8,3,_hour,_minute];
        };

        setDate _date;
        PVDZE_plr_SetDate = _date;
        publicVariable "PVDZE_plr_SetDate";
        diag_log ("TIME SYNC: Local Time set to " + str(_date));    
    };
};

// must spawn these
server_spawncleanDead = {
    private ["_deathTime","_delQtyZ","_delQtyP","_qty","_allDead"];
    _allDead = allDead;
    _delQtyZ = 0;
    _delQtyP = 0;
    {
        if (local _x) then {
            if (_x isKindOf "zZombie_Base") then
            {
                _x call dayz_perform_purge;
                sleep 0.05;
                _delQtyZ = _delQtyZ + 1;
            } else {
                if (_x isKindOf "CAManBase") then {
                    _deathTime = _x getVariable ["processedDeath", diag_tickTime];
                    if (diag_tickTime - _deathTime > 1800) then {
                        _x call dayz_perform_purge_player;
                        sleep 0.025;
                        _delQtyP = _delQtyP + 1;
                    };
                };
            };
        };
        sleep 0.025;
    } count _allDead;
    if (_delQtyZ > 0 || _delQtyP > 0) then {
        _qty = count _allDead;
        diag_log (format["CLEANUP: Deleted %1 players && %2 zombies out of %3 dead",_delQtyP,_delQtyZ,_qty]);
    };
};
server_cleanupGroups = {
    if (DZE_DYN_AntiStuck3rd > 3) then { DZE_DYN_GroupCleanup = nil; DZE_DYN_AntiStuck3rd = 0; };
    if(!isNil "DZE_DYN_GroupCleanup") exitWith {  DZE_DYN_AntiStuck3rd = DZE_DYN_AntiStuck3rd + 1;};
    DZE_DYN_GroupCleanup = true;
    {
        if ((count (units _x) == 0) && (_x != grpNull)) then {
            deleteGroup _x;
        };
        sleep 0.001;
    } count allGroups;
    DZE_DYN_GroupCleanup = nil;
};

server_checkHackers = {
    if (DZE_DYN_AntiStuck2nd > 3) then { DZE_DYN_HackerCheck = nil; DZE_DYN_AntiStuck2nd = 0; };
    if(!isNil "DZE_DYN_HackerCheck") exitWith {  DZE_DYN_AntiStuck2nd = DZE_DYN_AntiStuck2nd + 1;};
    DZE_DYN_HackerCheck = true;
    {
    if (!((isNil "_x") || {(isNull _x)})) then {
    // Epoch Admin Tools
    if(vehicle _x != _x && !(vehicle _x in PVDZE_serverObjectMonitor) && (isPlayer _x) && !((typeOf vehicle _x) in DZE_safeVehicle) && (vehicle _x getVariable ["Mission",0] != 1) &&(vehicle _x getVariable ["MalSar",0] != 1) && (vehicle _x getVariable ["Sarge",0] != 1)) then {
            diag_log ("CLEANUP: KILLING A HACKER " + (name _x) + " " + str(_x) + " IN " + (typeOf vehicle _x));
            (vehicle _x) setDamage 1;
            _x setDamage 1;
            sleep 0.25;
        };
    };
        sleep 0.001;
    } count allUnits;
    DZE_DYN_HackerCheck = nil;
};

server_spawnCleanFire = {
    private ["_delQtyFP","_qty","_delQtyNull","_missionFires"];
    _missionFires = allMissionObjects "Land_Fire_DZ";
    _delQtyFP = 0;
    {
        if (local _x) then {
            deleteVehicle _x;
            sleep 0.025;
            _delQtyFP = _delQtyFP + 1;
        };
        sleep 0.001;
    } count _missionFires;
    if (_delQtyFP > 0) then {
        _qty = count _missionFires;
        diag_log (format["CLEANUP: Deleted %1 fireplaces out of %2",_delQtyNull,_qty]);
    };
};
server_spawnCleanLoot = {
    private ["_created","_delQty","_nearby","_age","_keep","_qty","_missionObjs","_dateNow"];
    if (DZE_DYN_AntiStuck > 3) then { DZE_DYN_cleanLoot = nil; DZE_DYN_AntiStuck = 0; };
    if(!isNil "DZE_DYN_cleanLoot") exitWith {  DZE_DYN_AntiStuck = DZE_DYN_AntiStuck + 1;};
    DZE_DYN_cleanLoot = true;

    _missionObjs =  allMissionObjects "ReammoBox";
    _delQty = 0;
    _dateNow = (DateToNumber date);
    {
        if (!isNull _x) then {
            _keep = _x getVariable["permaLoot", false];
            if (!_keep) then {
                _created = _x getVariable["created", -0.1];
                if (_created == -0.1) then{
                    _x setVariable["created", _dateNow, false];
                    _created = _dateNow;
                }
                else {
                    _age = (_dateNow - _created) * 525948;
                    if (_age > 20) then{
                        _nearby = { (isPlayer _x) && (alive _x) } count(_x nearEntities[["CAManBase", "AllVehicles"], 130]);
                        if (_nearby == 0) then{
                            deleteVehicle _x;
                            sleep 0.025;
                            _delQty = _delQty + 1;
                        };
                    };
                };
            };
        };
        sleep 0.001;
    } count _missionObjs;
    if (_delQty > 0) then {
        _qty = count _missionObjs;
        diag_log (format["CLEANUP: Deleted %1 Loot Piles out of %2",_delQty,_qty]);
    };
    DZE_DYN_cleanLoot = nil;
};

server_spawnCleanAnimals = {
    private ["_pos","_delQtyAnimal","_qty","_missonAnimals","_nearby"];
    _missonAnimals = entities "CAAnimalBase";
    _delQtyAnimal = 0;
    {
        if (local _x) then {
            _x call dayz_perform_purge;
            sleep 0.05;
            _delQtyAnimal = _delQtyAnimal + 1;
        } else {
            if (!alive _x) then {
                _pos = getPosATL _x;
                if (count _pos > 0) then {
                    _nearby = {(isPlayer _x) && (alive _x)} count (_pos nearEntities [["CAManBase","AllVehicles"], 130]);
                    if (_nearby==0) then {
                        _x call dayz_perform_purge;
                        sleep 0.05;
                        _delQtyAnimal = _delQtyAnimal + 1;
                    };
                };
            };
        };
        sleep 0.001;
    } count _missonAnimals;
    if (_delQtyAnimal > 0) then {
        _qty = count _missonAnimals;
        diag_log (format["CLEANUP: Deleted %1 Animals out of %2",_delQtyAnimal,_qty]);
    };
};

server_logUnlockLockEvent = {
    private["_player", "_obj", "_objectID", "_objectUID", "_statusText", "_status"];
    _player = _this select 0;
    _obj = _this select 1;
    _status = _this select 2;
    if (!isNull(_obj)) then {
        _objectID = _obj getVariable["ObjectID", "0"];
        _objectUID = _obj getVariable["ObjectUID", "0"];
        _statusText = "UNLOCKED";
        if (_status) then {
            [_obj, "gear"] call server_updateObject;
            _statusText = "LOCKED";
        };
        diag_log format["SAFE %5: ID:%1 UID:%2 BY %3(%4)", _objectID, _objectUID, (name _player), (getPlayerUID _player), _statusText];
    };
};

KK_fnc_floatToString = {
    private "_arr";
    if (abs (_this - _this % 1) == 0) exitWith { str _this };
    _arr = toArray str abs (_this % 1);
    _arr set [0, 32];
    toString (toArray str (
        abs (_this - _this % 1) * _this / abs _this
    ) + _arr - [32])
};

KK_fnc_positionToString = {
    format [
        "[%1,%2,%3]",
        _this select 0 call KK_fnc_floatToString,
        _this select 1 call KK_fnc_floatToString,
        _this select 2 call KK_fnc_floatToString
    ]
};
execVM "\z\addons\dayz_server\init\broadcaster.sqf";

initialSend = false;
donn_server_timeSync = server_timeSync;
server_timeSync = {if (!initialSend) then {[] call donn_server_timeSync;}; initialSend = true;};
[] spawn {
    waitUntil {initialSend};
    while {true} do {
        _dayTime = dayTime;
        //========================TIME FUNCTION============================
        if (_dayTime >= 8 && _dayTime <= 16) then {donn_speed =  4.000;};
        if (_dayTime >  4 && _dayTime <   8) then {donn_speed =  6.666;};
        if (_dayTime > 16 && _dayTime <  20) then {donn_speed =  6.666;};
        if (_dayTime <= 4 || _dayTime >= 20) then {donn_speed = 10.000;};
        //=================================================================
        cad_pvar_server_date = [date, donn_speed];
        publicVariable "cad_pvar_server_date";
        sleep 30;
    };
};
"cad_pvar_send_owner" addPublicVariableEventHandler {
    cad_pvar_server_date = [date, donn_speed];
    owner (_this select 1) publicVariableClient "cad_pvar_server_date";
};

 

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
  • Advertisement
×
×
  • Create New...