Prevent Zed + loot spawn in safezones

thanks BaroN for the idea
This commit is contained in:
icomrade
2017-09-13 12:45:00 -04:00
parent 404210ac04
commit d750f576ed
10 changed files with 61 additions and 56 deletions

View File

@@ -39,27 +39,25 @@ if (_lootChance <= 0) exitWith {};
_lootPos = getArray (_config >> "lootPos");
_lootGroup = Loot_GetGroup(getText(_config >> "lootGroup"));
{
//Get the world position of the spawn position
_worldPos = _this modelToWorld _x;
_worldPos set [2, 0 max (_worldPos select 2)];
//Delete existing lootpiles within 1m of spawn location if no player is right next to it
if (!(_this call DZE_SafeZonePosCheck)) then {
{
if ({isPlayer _x} count (_x nearEntities ["CAManBase",4]) == 0) then {
deleteVehicle _x;
dayz_currentWeaponHolders = dayz_currentWeaponHolders - 1;
//Get the world position of the spawn position
_worldPos = _this modelToWorld _x;
_worldPos set [2, 0 max (_worldPos select 2)];
//Delete existing lootpiles within 1m of spawn location if no player is right next to it
{
if ({isPlayer _x} count (_x nearEntities ["CAManBase",4]) == 0) then {
deleteVehicle _x;
dayz_currentWeaponHolders = dayz_currentWeaponHolders - 1;
};
} foreach (_worldPos nearObjects ["ReammoBox", 1]);
if (_lootChance > random 1 && {dayz_currentWeaponHolders < dayz_maxMaxWeaponHolders}) then
{
Loot_SpawnGroup(_lootGroup, _worldPos);
};
}
foreach (_worldPos nearObjects ["ReammoBox", 1]);
if (_lootChance > random 1 && {dayz_currentWeaponHolders < dayz_maxMaxWeaponHolders}) then
{
Loot_SpawnGroup(_lootGroup, _worldPos);
};
}
foreach _lootPos;
} foreach _lootPos;
};
// EPOCH ADDITION
// lootPosSmall are additional positions in lockers, on shelves, etc. for small objects only.
// Example: soda cans, small ammo, pistols, bandage, etc.
@@ -68,24 +66,25 @@ if (isArray (_config >> "lootPosSmall")) then {
_lootPos = getArray (_config >> "lootPosSmall");
_lootGroup = Loot_GetGroup((getText(_config >> "lootGroup")) + "Small");
if (_lootGroup >= 1) then {
{
//Get the world position of the spawn position
_worldPos = _this modelToWorld _x;
_worldPos set [2, 0 max (_worldPos select 2)];
//Delete existing lootpiles within 1m of spawn location
if (!(_this call DZE_SafeZonePosCheck)) then {
{
deleteVehicle _x;
dayz_currentWeaponHolders = dayz_currentWeaponHolders - 1;
}
foreach (_worldPos nearObjects ["ReammoBox", 1]);
//Get the world position of the spawn position
_worldPos = _this modelToWorld _x;
_worldPos set [2, 0 max (_worldPos select 2)];
//Delete existing lootpiles within 1m of spawn location if no player is right next to it
{
if ({isPlayer _x} count (_x nearEntities ["CAManBase",4]) == 0) then {
deleteVehicle _x;
dayz_currentWeaponHolders = dayz_currentWeaponHolders - 1;
};
} foreach (_worldPos nearObjects ["ReammoBox", 1]);
if (_lootChance > random 1 && {dayz_currentWeaponHolders < dayz_maxMaxWeaponHolders}) then
{
Loot_SpawnGroup(_lootGroup, _worldPos);
};
}
foreach _lootPos;
if (_lootChance > random 1 && {dayz_currentWeaponHolders < dayz_maxMaxWeaponHolders}) then
{
Loot_SpawnGroup(_lootGroup, _worldPos);
};
} foreach _lootPos;
};
} else {
diag_log format["Loot group small: %1 does not exist", ((getText(_config >> "lootGroup")) + "Small")];
};

View File

@@ -33,12 +33,13 @@ if (_canLoot ) then {
//Walking Zombies
_num = (round(random _max)) max _min; // + round(_max / 3);
//diag_log ("Class: " + _type + " / Zombies: " + str(_unitTypes) + " / Walking: " + str(_num));
for "_i" from 0 to _num do
{
//_iPos = _obj modelToWorld _originalPos;
if ((_maxlocalspawned < _maxControlledZombies) and (dayz_CurrentNearByZombies < dayz_maxNearByZombies) and (dayz_currentGlobalZombies < dayz_maxGlobalZeds)) then {
[_originalPos,true,_unitTypes,_wreck] call zombie_generate;
if(!(_originalPos call DZE_SafeZonePosCheck)) then {
for "_i" from 0 to _num do
{
//_iPos = _obj modelToWorld _originalPos;
if ((_maxlocalspawned < _maxControlledZombies) and (dayz_CurrentNearByZombies < dayz_maxNearByZombies) and (dayz_currentGlobalZombies < dayz_maxGlobalZeds)) then {
[_originalPos,true,_unitTypes,_wreck] call zombie_generate;
};
};
};
@@ -51,7 +52,7 @@ if (_canLoot ) then {
{
_Pos = [_x select 0, _x select 1, 0];
_rnd = random 1;
if (_rnd < _zombieChance) then {
if (_rnd < _zombieChance && {!(_Pos call DZE_SafeZonePosCheck)}) then {
_iPos = _obj modelToWorld _Pos;
_nearByZed = {alive _x} count (_iPos nearEntities ["zZombie_Base",(((sizeOf _type) * 2) + 10)]) > 0;
_nearByPlayer = ({isPlayer _x} count (_iPos nearEntities ["CAManBase",30])) > 0;

View File

@@ -108,9 +108,7 @@ if !(dayz_playerUID in DZE_PlotManagementAdmins) then {
_buildCheck = call _checkClass;
if (_buildCheck select 0) then {
{
if ((player distance (_x select 0)) < _buildCheck select 1) exitWith {_canBuild = false;};
} count DZE_safeZonePosArray;
_canBuild = !((getPosATL player) call DZE_SafeZonePosCheck);
};
if !(_canBuild) exitWith {dayz_actionInProgress = false; format [localize "STR_EPOCH_PLAYER_166",_text,_buildCheck select 1] call dayz_rollingMessages; [false, _isPole];};

View File

@@ -12,7 +12,7 @@ while {_counter < _amount} do {
_type = "swarm_newBase"; //"_unitTypes call BIS_fnc_selectRandom;
//_type = "Pastor";
_position = [position _player,50,100,0] call fn_selectRandomLocation;
if(_position call DZE_SafeZonePosCheck) exitWith {};
_agent = createAgent [_type, _position, [], 0, "NONE"];
_agent setVariable["agentObjectSwarm",_agent,true];

View File

@@ -62,11 +62,11 @@ _cantSee = {
_skipFOV = false;
if ((_maxlocalspawned < _maxControlledZombies) && (dayz_CurrentNearByZombies < dayz_maxNearByZombies) && (dayz_currentGlobalZombies < dayz_maxGlobalZeds)) then {
if (_bypass) then {
if (_bypass) then {
_skipFOV = true;
_position = [_position,3,20,1] call fn_selectRandomLocation;
};
if(_position call DZE_SafeZonePosCheck) exitWith {};
if (surfaceIsWater _position) exitWith { diag_log "Location is in Water Abort"; };
if ((_skipFOV) or {([_position, 15, 10, 70] call _cantSee)}) then {