[Tutorial] Custom Loot Tables and Adjusting Spawn Rates

Discussion in 'Tutorials' started by AVendettaForYou, Jun 25, 2013.

  1. AVendettaForYou

    AVendettaForYou Well-Known Member

    Joined:
    Jun 25, 2013
    Messages:
    75
    Likes Received:
    63
    ======================= PREFACE =======================

    This will be broken up into different parts and show customization to each one.

    First before we begin I would like to thank each person that has contributed to figuring out how to customize loot tables as well as these threads that provide help regarding loot spawns:
    If I missed any thread please let know so I can add it to this list.
    The purpose of this guide is just to collect all the gathered information and put it in one centralized location so it's easier to find.

    So you want to edit your loot spawns because we all know with DayZ 1.7.7.1 loot spawns are not what they use to be and us server admins have to deal with the constant questions and complaints about players not finding loot and it taking forever just to find a simple can of beans. Well here is the place for all the useful information you are going to be needing.
    Github for pre made mission file that has everything installed just needs to be configured to your liking.
    1.8
    https://github.com/AVendettaForYou/DayZ_1.8_Custom_Loot_Tables
    1.7.7.1
    https://github.com/AVendettaForYou/DayZ_1.7.7.1_Custom_Loot_Tables
     
  2. AVendettaForYou

    AVendettaForYou Well-Known Member

    Joined:
    Jun 25, 2013
    Messages:
    75
    Likes Received:
    63
    ======================== ITEMS REQUIRED ===========================
    Before we can begin you are going to need these:
    • A PBO manager of choice
    • Notepad/Notepad ++
    • Mission.pbo
    • Server.pbo
    • dayz_code.pbo
    Dayz_code can be found in:
    Code:
    For Steam users, this is normally:  C:/Program Files (x86)/Steam/SteamApps/common/ArmA 2 Operation [email protected]/Addons
    and
    Code:
    For non-Steam  users: C:/Program FIles (x86)/Bohemia Interactive/ArmA 2 Operation [email protected]/Addons
    Once you have all the PBO files unpack them to a folder of choice.
     
  3. AVendettaForYou

    AVendettaForYou Well-Known Member

    Joined:
    Jun 25, 2013
    Messages:
    75
    Likes Received:
    63
    ================== INSTALLING CUSTOM LOOT TABLES =====================

    Ok now that we have everything unpacked lets move to the next step

    Open up your mission folder and create a folder named Fixes. (This is where we will be putting most of our edits.)

    Now let's open our dayz_code folder this is the list of files that you will need to copy and paste into your Fixes folder:
    • dayz_code\init\compiles.sqf
    • dayz_code\init\loot_init.sqf
    • dayz_code\init\variables.sqf
    • dayz_code\compile\building_spawnLoot.sqf
    • dayz_code\compile\building_spawnZombies.sqf
    • dayz_code\compile\player_spawnCheck.sqf
    • dayz_code\compile\spawn_loot.sqf
    • dayz_code\compile\zombie_generate.sqf
    Once you have copied each of those into your Fixes folder move to the next part.
    In the main directory of you mission.pbo folder you will need to copy and paste these three files:
    • dayz_code\Configs\CfgLoot\CfgBuildingLoot.hpp
    • dayz_code\Configs\CfgLoot\CfgBuildingPos.hpp
    • dayz_code\Configs\CfgLoot\CfgLoot.hpp
    Once you have done that move to the next part.
    After all this has been done open up description.ext in the root of your mission.pbo and place this line at the very top:
    Code:
    #include "cfgBuildingLoot.hpp"
    Save your changes.
    Open up init.sqf and edit these lines:
    Variables
    Code:
    call compile preprocessFileLineNumbers "\z\addons\dayz_code\init\variables.sqf"; //Initilize the Variables (IMPORTANT: Must happen very early)
    to
    Code:
    call compile preprocessFileLineNumbers "Fixes\variables.sqf";//Initilize the Variables (IMPORTANT: Must happen very early)
    Compiles
    Code:
    call compile preprocessFileLineNumbers "\z\addons\dayz_code\init\compiles.sqf";//Compile regular functions
    to
    Code:
    call compile preprocessFileLineNumbers "Fixes\compiles.sqf";//Compile regular functions
    Save your changes and we can move to the next part.
    After you have done this move to the compiles.sqf in your fixes folder and edit the folder call on each of these lines to correspond to the Fixes folder:
    1. Line 19: player_spawnCheck = compile preprocessFileLineNumbers "Fixes\player_spawnCheck.sqf";
    2. Line 22: building_spawnLoot = compile preprocessFileLineNumbers "Fixes\building_spawnLoot.sqf";
    3. Line 24: building_spawnZombies = compile preprocessFileLineNumbers "Fixes\building_spawnZombies.sqf";
    4. Line 56: zombie_generate = compile preprocessFileLineNumbers "Fixes\zombie_generate.sqf";
    5. Line 502: spawn_loot = compile preprocessFileLineNumbers "Fixes\spawn_loot.sqf";
    Now you will need to open EACH of the files that you placed in the fixes folder and look for
    Code:
    _config = configfile >> "CfgBuildingLoot" >> _type;

    you will need to do it for both CFGBUILDINGLOOT and CFGLOOT and will need to read as:
    Code:
    _config = missionConfigfile >> "CfgBuildingLoot"


    Save your edits then move to variables.sqf and edit this line to correspond to call out of the fixes folder.

    1. Line 420: call compile preprocessFileLineNumbers "Fixes\loot_init.sqf";
    Save your changes and continue.

    Congratulations you have installed the necessary files and can now customize your loot tables!
     
  4. AVendettaForYou

    AVendettaForYou Well-Known Member

    Joined:
    Jun 25, 2013
    Messages:
    75
    Likes Received:
    63
    ===================== CUSTOMIZING LOOT TABLES ======================

    Let us begin by opening variables.sqf in our fixes folder.

    On line 407 you should see this line:
    Code:
    dayz_maxMaxWeaponHolders = 80; // max quantity of loot piles around players. Below this limit we can spawn some loot
    Now this line determines the amount of loot that will spawn around a player. The higher it is the more loot will spawn around players, you can edit the 80 to a higher number of your choice.

    On line 408 and 409 you can adjust the time on how often a loot cycle will occur and replace any old loot with new loot.
    Code:
    dayz_tagDelayWeaponHolders = 20; // prevent any new loot spawn on this building during this delay (minutes)
    dayz_tagDelayZombies = 20; // prevent any new zombie spawn into or near this building during this delay (minutes)
    On line 410 you will see this line:
    Code:
    dayz_spawnArea = 200; // radius around player where we can spawn loot & Z
    This determines the radius at which both loot and zombies spawn around your players the higher it is the larger the radius of loot and zombies spawn adjust to your liking.

    On line 415 you will see this line:
    Code:
    dayz_lootSpawnBias = 67; // between 50 and 100. The lower it is, the lower chance some of the lootpiles will spawn
    This determines the spawning of loot piles, you can edit this to your liking as well.


    On line 497 and 498 you will want to change it to:
    Code:
    dayz_spawnDelay = 120;
    dayz_spawnWait = -120;
    This will give you the exact configuration that was used in 1.7.6.1

    Once you have adjusted all these properties save your changes and move to the next part.

    In the root of your mission folder you can edit CfgBuildingLoot, CfgBuildingPos, and CfgLoot, I will be giving a quick run down of what each does.

    CfgBuildingLoot:
    Code:
    class Hospital: Default {
    zombieChance = 0.4;
    minRoaming = 2;
    maxRoaming = 6;
    zombieClass[] = {"z_doctor","z_doctor","z_doctor"};
    lootChance = 0.2;
    lootPos[] = {};
    lootType[] = {
    {"","trash",0.5},
    {"","hospital",0.5},
    {"MedBox0","object",0.01}
    };
    };
    As you can see this is the building loot for hospitals we can edit the chance at which zombies spawn as well as the minimum and maximum zombies if you want to you can even edit the types of zombies that spawn.

    Your lootChance will determine the percentage of how loot spawns as you can see by default it is 0.2 which = 20% you can adjust that to your liking. The higher the number the better chance at loot spawning.

    Under lootType you see each type of loot that spawns you can edit the chance as well as add in other loot, remember that the last class does not need a "," at the end only the classes above that.

    CfgBuildingPos:
    Code:
    class Land_HouseV_1I4: Residential {
    lootPos[] = {{-0.400146,-3.87891,-2.7688},{-3.67651,-2.51758,-2.76544},{-0.472412,3.19824,-2.72028}};
    };
    This determines how many spots in the buildings that loot spawns you can configure your own coordinates and add in more loot spawn areas for each building.

    CfgLoot:
    Code:
    hospital[] = {
    {"ItemBandage",0.06},
    {"ItemPainkiller",0.04},
    {"ItemMorphine",0.04},
    {"ItemEpinephrine",0.03},
    {"ItemBloodbag",0.03},
    {"ItemAntibiotic",0.01}
    };
    This determines the percentage of each loot spawning in the category you can edit this however you please.

    After you have edited the loot tables to your liking you can save the changes and pack up your mission folder and upload it to the server. Now you have edited your loot spawns and should see a good increase on loot spawns.
     
  5. AVendettaForYou

    AVendettaForYou Well-Known Member

    Joined:
    Jun 25, 2013
    Messages:
    75
    Likes Received:
    63
    ====================== SERVER SIDE FILE EDITING ======================

    This is completely optional if you decide to do it, use at your own risk.

    A thank you to [GSG] Az for putting this out to the public to use.
    Open up your server_cleanup.fsm under dayz_server/system and replace it with:

    https://github.com/azmodii/DayZ-Sou...7.1/SQF/dayz_server/system/server_cleanup.fsm

    Now find this string of code:
    Code:
    /*%FSM<LINK "too_many_objects">*/
    class too_many_objects
    {
    priority = 2.000000;
    to="cleanup_objects";
    precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
    condition=/*%FSM<CONDITION""">*/"((diag_tickTime - _timeNem) > 60)"/*%FSM</CONDITION""">*/;
    action=/*%FSM<ACTION""">*/"_timeNem = diag_tickTime;"/*%FSM</ACTION""">*/;
    };
    /*%FSM</LINK>*/
    and replace it with:
    Code:
    /*%FSM<LINK "too_many_objects">*/
    class too_many_objects
            {
              priority = 2.000000;
              to="cleanup_objects";
              precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
              condition=/*%FSM<CONDITION""">*/"((diag_tickTime - _timeNem) > 3600)"/*%FSM</CONDITION""">*/;
              action=/*%FSM<ACTION""">*/"_timeNem = diag_tickTime;"/*%FSM</ACTION""">*/;
            };
    /*%FSM</LINK>*/
    This should resolve loot not spawning, as well as server lag and general gameplay issues.
     
    CommanderRetra and CraftLourens like this.
  6. AVendettaForYou

    AVendettaForYou Well-Known Member

    Joined:
    Jun 25, 2013
    Messages:
    75
    Likes Received:
    63
    ======================== COMMUNITY NOTES ======================

    This is reserved for community input.

     
    CommanderRetra and CraftLourens like this.
  7. Killer7ofu

    Killer7ofu New Member

    Joined:
    Jun 20, 2013
    Messages:
    28
    Likes Received:
    2
    I have a working 1.7.7.1 loot script. i have one more thing to test on it. once i am sure it is 100% ready I will post it with instructions on how to add it... it is VERY easy to do with what i already have done.

    I cant do any testing right now cause i am on my laptop.. but i will once i get back.
     
  8. AVendettaForYou

    AVendettaForYou Well-Known Member

    Joined:
    Jun 25, 2013
    Messages:
    75
    Likes Received:
    63
    Guide is finished. If you have any other useful information please let me know and I will post it in the community notes section. Once again I would like to thank everyone who put out the resources to make this guide possible.
     
  9. Killer7ofu

    Killer7ofu New Member

    Joined:
    Jun 20, 2013
    Messages:
    28
    Likes Received:
    2
    I dont know if this is needed but it is in the fixes folder and being called so im sure it should be added
    Around line 24:
    building_spawnZombies = compile preprocessFileLineNumbers "Fixes\building_spawnZombies.sqf";



    Question...

    Did you have to go into the player_spawnCheck.sqf file in the fixes folder and change at line 87:

    _config = configFile >> "CfgBuildingLoot" >> _type;

    to

    _config = missionconfigFile >> "CfgBuildingLoot" >> _type;




    I did this with all the "configFile" in all the files in the fixes folder that called for one for the Cfg files.
     
    ZGreen-Spectre likes this.
  10. AVendettaForYou

    AVendettaForYou Well-Known Member

    Joined:
    Jun 25, 2013
    Messages:
    75
    Likes Received:
    63
    No, I do not have anything calling from missionconfigfile, I have loot spawns working perfectly on my server without changing where it calls the config file from, I know there is some pointers to change it to missionconfig but I have not tested myself since it worked fine with just calling it from config.
     
  11. kaysio

    kaysio Valued Member!

    Joined:
    Feb 15, 2013
    Messages:
    256
    Likes Received:
    97
    This does NOT work without 'missionconfigfile'

    How did I test,

    I created a new class in the loot table with the invisible helipad.
    To spawn 100% loot, covered Balota airstrip with 20 'H'
    Not one spawned any loot or zeds.


    Changing the 60 to 3600 does fix the spawn problems, as that what the fix is for.
     
  12. sukkaed

    sukkaed Well-Known Member

    Joined:
    May 1, 2013
    Messages:
    173
    Likes Received:
    14
    I`m getting these on .rpt log

    Code:
    22:28:07 Error Zero divisor
     
    22:28:07 File mpmissions\__cur_mp.chernarus\Fixes\spawn_loot.sqf, line 27
     
    22:28:07 Error in expression <find _iClass;
     
    _weights = dayz_CLChances select _index;
     
    _cntWeights = count _weig>
     
    22:28:07 Error position: <select _index;
     
    _cntWeights = count _weig>
     
  13. Hangender

    Hangender Valued Member!

    Joined:
    Jan 14, 2013
    Messages:
    126
    Likes Received:
    37
    This is got to be the longest guide on opendayz
     
  14. seaweeduk

    seaweeduk OpenDayZ Rockstar!

    Joined:
    Nov 19, 2012
    Messages:
    535
    Likes Received:
    124
    The problem I've been having is the mod doesn't work unless I replace the call in variables.sqf for loot_init.sqf

    Doing so makes everything work but also results in a lot of rpt spam anyone know why? _j should be defined unless its null in the call to loot_init.sqf right?

    Code:
    21:04:17 Error in expression <
    {
    _weighted set [_j + _k, _l];
    };
    _j = _j + _weight;
    };
    dayz_CBLChances set [co>
    21:04:17  Error position: <_j + _weight;
    };
    dayz_CBLChances set [co>
    21:04:17  Error Undefined variable in expression: _j
    21:04:17 File mpmissions\__cur_mp.chernarus\fixes\loot_init.sqf, line 23
     
  15. Killer7ofu

    Killer7ofu New Member

    Joined:
    Jun 20, 2013
    Messages:
    28
    Likes Received:
    2
    I didnt need to replace all of them.. the only thing I had to do is in the files that are in the mission.pbo I changed almost all of the line that calls for:

    _config = configFile >> "CfgBuildingLoot" >> _type;

    To

    _config = missionconfigFile >> "CfgBuildingLoot" >> _type;

    If you look where it says CfgBuildingLoot. That is a file that has been added to the mission.pbo by you. There are more then just that one and there are other files it calls for.

    However there are a few lines that have the same _config line but they call for a file that is not part of this. So they DO NOT need to be changed...

    This works 100% for me.
     
  16. sukkaed

    sukkaed Well-Known Member

    Joined:
    May 1, 2013
    Messages:
    173
    Likes Received:
    14
    This works for me. Is there way to trigger loot spawn faster. After 1.7.7 it takes a lot longer to spawn.
    I dont want to increase spawn radius too much.

    Maybe these lines in variables.sqf
    Code:
    dayz_lootDelay = 3;
     
    dayz_lootWait = -300;
     
  17. Killer7ofu

    Killer7ofu New Member

    Joined:
    Jun 20, 2013
    Messages:
    28
    Likes Received:
    2
    Do u mean to respawn or to Spain for the first time?
     
  18. sukkaed

    sukkaed Well-Known Member

    Joined:
    May 1, 2013
    Messages:
    173
    Likes Received:
    14
    To spawn in first place. Sometimes you have to wait like 5-10min until loot spawns.
    Server lag plays big part on this too i would guess.
     
  19. Killer7ofu

    Killer7ofu New Member

    Joined:
    Jun 20, 2013
    Messages:
    28
    Likes Received:
    2
    U probably have too much loot trying to spawn in an area. The default limit is 80 objects in a 200m radius. If u try to go from hospital to a supermarket that is only 150m away one of then won't spawn because u have a bunch of little loot piles everywhere in between.

    Look around ur loot files and find where u can change max loot limit and spawn area. Not at my comp right now so can't tell u what they are. It took me a lot of tweaking to find the sweet spot.
     
  20. AVendettaForYou

    AVendettaForYou Well-Known Member

    Joined:
    Jun 25, 2013
    Messages:
    75
    Likes Received:
    63
    Somewhere in your changes it is trying to divide by zero, you would need to go over your changes and look to where it would contain a zero. If you still can't find the error upload your mission file and I'll take a look at it.



    Those lines are default in 1.7.6.1, now for your loot spawning for the first time would it happen to take 5-10 minutes after you start your server or is this anywhere you go on the map after the server has been up for awhile? With the 1.7.7.1 update after each restart it takes about 5 minutes to load every configuration on the server so if you are having the issue after restarts then that would be the cause of it.
     

Share This Page