1.7.6.1 Heli Crash Help

Krankie

New Member
Hey Ladies & Gents,

I'm trying to work on heli crash spawns for my server.

I'm happy so far as I've removed Military Loot & Special Military Loot and only HelICrash_No50s loot spawns now.

However I'd like to change the frequency of how often they spawn, or atleast the variance & perhaps a chance for 2 to spawn every hour.

Iv'e tired the solution in this thread but it still always spawns 1: http://opendayz.net/index.php?threads/1-7-6-1-heli-crash-site-loot.8416/

And unfortunately the solution in this thread doesn't work either as it seems the file was changed between 1.7.6 and 1.7.6.1: http://opendayz.net/index.php?threads/need-help-1-7-6-helicrash-customization.8261/

I've included my server_spawnCrashSite.sqf as it currently stands.

Thanks!

EDIT: can someone explain to me what _this select 0 etc at the top is referring to? If I can understand where the frequency and variance variables are being pulled from I can easily work from there.

Code:
private["_position","_num","_config","_itemType","_itemChance","_weights","_index","_iArray","_crashModel","_lootTable","_guaranteedLoot","_randomizedLoot","_frequency","_variance","_spawnChance","_spawnMarker","_spawnRadius","_spawnFire","_permanentFire","_crashName"];
 
//_crashModel    = _this select 0;
//_lootTable    = _this select 1;
_guaranteedLoot = _this select 0;
_randomizedLoot = _this select 1;
_frequency    = _this select 2;
_variance    = _this select 3;
_spawnChance    = _this select 4;
_spawnMarker    = _this select 5;
_spawnRadius    = _this select 6;
_spawnFire    = _this select 7;
_fadeFire    = _this select 8;
 
 
diag_log("CRASHSPAWNER: Starting spawn logic for Crash Spawner");
 
while {true} do {
    private["_timeAdjust","_timeToSpawn","_spawnRoll","_crash","_hasAdjustment","_newHeight","_adjustedPos"];
    // Allows the variance to act as +/- from the spawn frequency timer
    _timeAdjust = round(random(_variance * 2) - _variance);
    _timeToSpawn = time + _frequency + _timeAdjust;
 
    //Adding some Random systems
    _crashModel = ["UH60Wreck_DZ","UH1Wreck_DZ"] call BIS_fnc_selectRandom;
 
    //Crash loot just uncomment the one you wish to use by default with 50cals is enabled.
    //Table including 50 cals
    //_lootTable = ["Military","HeliCrash","MilitarySpecial"] call BIS_fnc_selectRandom;
    //Table without 50 cals
    _lootTable = ["HeliCrash_No50s"] call BIS_fnc_selectRandom;
 
    _crashName    = getText (configFile >> "CfgVehicles" >> _crashModel >> "displayName");
 
    diag_log(format["CRASHSPAWNER: %1%2 chance to spawn '%3' with loot table '%4' at %5", round(_spawnChance * 100), '%', _crashName, _lootTable, _timeToSpawn]);
 
    // Apprehensive about using one giant long sleep here given server time variances over the life of the server daemon
    while {time < _timeToSpawn} do {
        sleep 5;
    };
 
    _spawnRoll = random 1;
 
    // Percentage roll
    if (_spawnRoll <= _spawnChance) then {
 
        _position = [getMarkerPos _spawnMarker,0,_spawnRadius,10,0,2000,0] call BIS_fnc_findSafePos;
 
        diag_log(format["CRASHSPAWNER: Spawning '%1' with loot table '%2' NOW! (%3) at: %4", _crashName, _lootTable, time, str(_position)]);
 
        _crash = createVehicle [_crashModel,_position, [], 0, "CAN_COLLIDE"];
        // Randomize the direction the wreck is facing
        _crash setDir round(random 360);
 
        // Using "custom" wrecks (using the destruction model of a vehicle vs. a prepared wreck model) will result
        // in the model spawning halfway in the ground.  To combat this, an OPTIONAL configuration can be tied to
        // the CfgVehicles class you've created for the custom wreck to define how high above the ground it should
        // spawn.  This is optional.
        _config = configFile >> "CfgVehicles" >> _crashModel >> "heightAdjustment";
        _hasAdjustment =  isNumber(_config);
        _newHeight = 0;
        if (_hasAdjustment) then {
            _newHeight = getNumber(_config);
            //diag_log(format["DIAG: ADJUSTMENT FOUND FOR %1, IT IS: %2", _crashName, _newHeight]);
        };
 
        // Must setPos after a setDir otherwise the wreck won't level itself with the terrain
        _adjustedPos = [(_position select 0), (_position select 1), _newHeight];
        //diag_log(format["DIAG: Designated Position: %1", str(_adjustedPos)]);
        _crash setPos _adjustedPos;
 
        // I don't think this is needed (you can't get "in" a crash), but it was in the original DayZ Crash logic
        dayz_serverObjectMonitor set [count dayz_serverObjectMonitor,_crash];
 
        _crash setVariable ["ObjectID",1,true];
 
        if (_spawnFire) then {
            //["dayzFire",[_crash,2,time,false,_fadeFire]] call broadcastRpcCallAll;
            dayzFire = [_crash,2,time,false,_fadeFire];
            publicVariable "dayzFire";
            _crash setvariable ["fadeFire",_fadeFire,true];
        };
 
        _num        = round(random _randomizedLoot) + _guaranteedLoot;
     
        _config =        configFile >> "CfgBuildingLoot" >> _lootTable;
        _itemTypes =    [] + getArray (_config >> "itemType");
        _index =        dayz_CBLBase  find "HeliCrash";
        _weights =        dayz_CBLChances select _index;
        _cntWeights = count _weights;
 
 
        for "_x" from 1 to _num do {
            //create loot
            _index = floor(random _cntWeights);
            _index = _weights select _index;
            _itemType = _itemTypes select _index;
            [_itemType select 0, _itemType select 1, _position, 5] call spawn_loot;
 
            diag_log(format["CRASHSPAWNER: Loot spawn at '%1' with loot table '%2'", _crashName, _lootTable]);
 
            // ReammoBox is preferred parent class here, as WeaponHolder wouldn't match MedBox0 and other such items.
            _nearby = _position nearObjects ["ReammoBox", sizeOf(_crashModel)];
            {
                _x setVariable ["permaLoot",true];
            } forEach _nearBy;
        };
    };
};
 
To change the frequency of the helicopter crash sites you have to go to the bottom of the server_monitor.sqf and find this.

Code:
// [_guaranteedLoot, _randomizedLoot, _frequency, _variance, _spawnChance, _spawnMarker, _spawnRadius, _spawnFire, _fadeFire]
nul = [4, 4, (50 * 20), (15 * 30), 0.95, 'center', 4000, true, false] spawn server_spawnCrashSite;

This is the code I use. I got it from another thread talking about increasing crash site spawn rates. This should make a crash site spawn everyone 20 minutes.
 
Ah brilliant!

That's the solution from the second thread but I assumed that line was in the server_spawnCrashSite.sqf

Thanks Fred, much appreciated :)

Dave
 
I used server_spawnCrashSite.sqf to edit the type of loot spawning: _lootTable = ["HeliCrash_No50s"] call BIS_fnc_selectRandom;

I then used server_monitor.sqf to chence the spawn chance and frequency. I have a 95% chance to spawn a crash ever 30 mins.

Dave
 
I would like to know how to edit the "helicrash" loot table in order to add non-banned non-spawning weapons tospawn at heli crash sites. is this possible? my host is dayz.st
 
This isn't mine but it's edited to be exactly like the one in the post I sent you.

The line that defines the loot is line 86 (Starting with _itemTypes)
The chances for the items to spawn are in the line below, 87 oddly enough, (starting with _itemChance)

The arrays align so item 1 in array _itemType aligns with chance 1 from _itemChance

Hope that makes sense :)

Dave

Code:
private["_position","_num","_config","_itemType","_itemChance","_weights","_index","_iArray","_crashModel","_lootTable","_guaranteedLoot","_randomizedLoot","_frequency","_variance","_spawnChance","_spawnMarker","_spawnRadius","_spawnFire","_permanentFire","_crashName"];
 
//_crashModel    = _this select 0;
//_lootTable    = _this select 1;
_guaranteedLoot = _this select 0;
_randomizedLoot = _this select 1;
_frequency    = _this select 2;
_variance    = _this select 3;
_spawnChance    = _this select 4;
_spawnMarker    = _this select 5;
_spawnRadius    = _this select 6;
_spawnFire    = _this select 7;
_fadeFire    = _this select 8;
 
 
diag_log("CRASHSPAWNER: Starting spawn logic for Crash Spawner");
 
while {true} do {
    private["_timeAdjust","_timeToSpawn","_spawnRoll","_crash","_hasAdjustment","_newHeight","_adjustedPos"];
    // Allows the variance to act as +/- from the spawn frequency timer
    _timeAdjust = round(random(_variance * 2) - _variance);
    _timeToSpawn = time + _frequency + _timeAdjust;
 
    //Adding some Random systems
    _crashModel = ["UH60Wreck_DZ","UH1Wreck_DZ"] call BIS_fnc_selectRandom;
 
    //Crash loot just uncomment the one you wish to use by default with 50cals is enabled.
    //Table including 50 cals
    //_lootTable = ["Military","HeliCrash","MilitarySpecial"] call BIS_fnc_selectRandom;
    //Table without 50 cals
    _lootTable = ["HeliCrash_No50s"] call BIS_fnc_selectRandom;
 
    _crashName    = getText (configFile >> "CfgVehicles" >> _crashModel >> "displayName");
 
    diag_log(format["CRASHSPAWNER: %1%2 chance to spawn '%3' with loot table '%4' at %5", round(_spawnChance * 100), '%', _crashName, _lootTable, _timeToSpawn]);
 
    // Apprehensive about using one giant long sleep here given server time variances over the life of the server daemon
    while {time < _timeToSpawn} do {
        sleep 5;
    };
 
    _spawnRoll = random 1;
 
    // Percentage roll
    if (_spawnRoll <= _spawnChance) then {
 
        _position = [getMarkerPos _spawnMarker,0,_spawnRadius,10,0,2000,0] call BIS_fnc_findSafePos;
 
        diag_log(format["CRASHSPAWNER: Spawning '%1' with loot table '%2' NOW! (%3) at: %4", _crashName, _lootTable, time, str(_position)]);
 
        _crash = createVehicle [_crashModel,_position, [], 0, "CAN_COLLIDE"];
        // Randomize the direction the wreck is facing
        _crash setDir round(random 360);
 
        // Using "custom" wrecks (using the destruction model of a vehicle vs. a prepared wreck model) will result
        // in the model spawning halfway in the ground.  To combat this, an OPTIONAL configuration can be tied to
        // the CfgVehicles class you've created for the custom wreck to define how high above the ground it should
        // spawn.  This is optional.
        _config = configFile >> "CfgVehicles" >> _crashModel >> "heightAdjustment";
        _hasAdjustment =  isNumber(_config);
        _newHeight = 0;
        if (_hasAdjustment) then {
            _newHeight = getNumber(_config);
            //diag_log(format["DIAG: ADJUSTMENT FOUND FOR %1, IT IS: %2", _crashName, _newHeight]);
        };
 
        // Must setPos after a setDir otherwise the wreck won't level itself with the terrain
        _adjustedPos = [(_position select 0), (_position select 1), _newHeight];
        //diag_log(format["DIAG: Designated Position: %1", str(_adjustedPos)]);
        _crash setPos _adjustedPos;
 
        // I don't think this is needed (you can't get "in" a crash), but it was in the original DayZ Crash logic
        dayz_serverObjectMonitor set [count dayz_serverObjectMonitor,_crash];
 
        _crash setVariable ["ObjectID",1,true];
 
        if (_spawnFire) then {
            //["dayzFire",[_crash,2,time,false,_fadeFire]] call broadcastRpcCallAll;
            dayzFire = [_crash,2,time,false,_fadeFire];
            publicVariable "dayzFire";
            _crash setvariable ["fadeFire",_fadeFire,true];
        };
 
            _num= round(random 4) + 5;
            _config = configFile >> "CfgBuildingLoot" >> _lootTable;
            _itemTypes = [["SCAR_H_LNG_Sniper", "weapon"], ["SCAR_H_LNG_Sniper_SD", "weapon"], ["SCAR_L_STD_Mk4CQT", "weapon"], ["SCAR_L_CQC_EGLM_Holo", "weapon"], ["SCAR_L_STD_EGLM_RCO", "weapon"], ["SCAR_H_Base", "weapon"], ["SCAR_H_STD_EGLM_Spect", "weapon"], ["AKS_74_UN_kobra", "weapon"], ["m8_base", "weapon"], ["m8_carbineGL", "weapon"], ["SCAR_H_CQC_CCO", "weapon"], ["BAF_AS50_TWS", "weapon"], ["PMC_AS50_scoped", "weapon"], ["PMC_AS50_TWS", "weapon"], ["", "military"], ["MedBox0", "object"], ["NVGoggles", "weapon"], ["AmmoBoxSmall_556", "object"], ["AmmoBoxSmall_762", "object"], ["Skin_Camo1_DZ", "magazine"], ["Skin_Soldier1_DZ", "magazine"], ["Skin_Sniper1_DZ", "magazine"]];
            _itemChance = [0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.9, 0.09, 0.05, 0.5, 0.05, 0.05, 0.05, 0.05];
            _weights = [];
            _weights = [_itemType,_itemChance] call fnc_buildWeightedArray;
            _cntWeights = count _weights;
            _index = _weights call BIS_fnc_selectRandom;
 
        for "_x" from 1 to _num do {
            //create loot
            _index = floor(random _cntWeights);
            _index = _weights select _index;
            _itemType = _itemTypes select _index;
            [_itemType select 0, _itemType select 1, _position, 5] call spawn_loot;
 
            diag_log(format["CRASHSPAWNER: Loot spawn at '%1' with loot table '%2'", _crashName, _lootTable]);
 
            // ReammoBox is preferred parent class here, as WeaponHolder wouldn't match MedBox0 and other such items.
            _nearby = _position nearObjects ["ReammoBox", sizeOf(_crashModel)];
            {
                _x setVariable ["permaLoot",true];
            } forEach _nearBy;
        };
    };
};
 
As Condemn said. How do you up the amount of Heli's to spawn. We don't want 1 to spawn every X number of minutes we want several.
 
I am sure that if you lower the chance numbers in the server monitor to a chance of a spawn at 1.00 every 5 minutes with a variance of 30 minutes it would give you are pretty crazy amount of helicrash sites if thats what you want.
 
Back
Top