Jump to content
  • 0

AI Harassing Safezones


Voltan

Question

Hi All,

Is there any way I can make the server kill or remove AI that attack players in the standard safe zones built into epoch 1.0.7?

It seems to remove Zombies, but doesn't do anything about DZAI, DZMS or WAI AI.

 

Link to comment
Share on other sites

1 answer to this question

Recommended Posts

  • 0
On 6/14/2021 at 9:23 AM, Voltan said:

Hi All,

Is there any way I can make the server kill or remove AI that attack players in the standard safe zones built into epoch 1.0.7?

It seems to remove Zombies, but doesn't do anything about DZAI, DZMS or WAI AI.

 

Hi Voltan, I use this this script made by BigEgg...it works fine,  if you use the admin tools that he made, I have disabled safe zones and use this script...

 

/*
    File: safe_zones.sqf
    Creates safe zones in predefined areas (DZE_SafeZonePosArray)
 
    Author: BigEgg
   https://github.com/BigEgg17
*/
 
private ["_bubbles", "_removeZ", "_removeAI", "_speedLimit", "_preventTheft", "_timer", "_disableWeps", "_badWeps"];
 
/**************************************************** Config ****************************************************/
_bubbles = false;        // Creates a circle of bubbles marking the circumference of the safe zone.
_removeZ = true;        // Remove zombies in safe zone.
_removeAI = true;        // Remove AI in safe zone.
_speedLimit = 0;        // Speed limit in safe zones. Set to 0 to disable speed limit.
_preventTheft = true;    // Prevent vehicles from being stolen by assigning them an owner (this includes gear).
_timer = 10;                // Delay ending safe zone protection for this many seconds upon leaving. Set to 0 to disable timer.
 
_disableWeps = true;    // Drops any weapons in _badWeps array.
_badWeps = [            // Will remove these weapons from the player if they try to select them. Only used if _disableWeps = true.
    "Vil_RPG29", "Vil_RPO_A", "Vil_RPG16", "Vil_RPG7V_PGO", "Vil_Panzerfaust3", "M136", "RPG7V", "vil_CG84T", "vilas_rpg22", "vilas_rpg26", "MAAWS", "Vil_RPG7d_PGO",
    "RPG18", "MeleeHatchet", "MeleeCrowbar","MeleeMachete", "MeleeFishingPole", "MeleeSledge", "MeleeBaseBallBatNails", "MeleeBaseBallBatBarbed", "MeleeBaseBallBat"
];
/****************************************************************************************************************/
 
// Needed on both client and server for vehicle protection
fnc_veh_handleDam2 = fnc_veh_handleDam;
fnc_veh_handleDam = {
    if ({(_this select 0) distance (_x select 0) <= (_x select 1)} count DZE_SafeZonePosArray > 0 || {(_this select 0) getVariable ["sz_immunity", false]}) exitWith {0};
    _this call fnc_veh_handleDam2;
};
 
if (isServer && {_bubbles}) then {
    private "_count";
 
    _count = 0;
    {
        private ["_pos", "_rad"];
 
        _pos = _x select 0;
        _rad = _x select 1;
 
        for "_i" from 0 to 360 step (360 / _rad) do
        {
            private ["_loc", "_obj"];
 
            _loc = [(_pos select 0) + ((cos _i) * _rad), (_pos select 1) + ((sin _i) * _rad), 0];
 
            _obj = "Sign_sphere100cm_EP1" createVehicle [0,0,0];
            _obj setPosATL _loc;
 
            _count = _count + 1;
        };
    } count DZE_SafeZonePosArray;
 
    diag_log format["INFO: Created %1 safe zone bubbles", [_count] call BIS_fnc_numberText];
};
 
if (!isDedicated) then {
    private ["_enter", "_exit"];
 
    safezone_enabled = false;
 
    _enter = {
        private ["_msg"];
 
        safezone_enabled = true;
        isInTraderCity = true;
        canbuild = false;
        safezone_time = diag_tickTime;
 
        vehicle player setCaptive true;
 
        if (!DZE_BackpackAntiTheft) then {DZE_BackpackAntiTheft = true;};
 
        _msg = localize "STR_CL_SZ_ENTER";
        taskHint [_msg, [0,1,0,1], "taskDone"];
//        _msg call dayz_rollingMessages;
 
        {
            if ((vehicle player distance (_x select 0)) < (_x select 1)) then {
                szpos = _x select 0; // Get the position of the safe zone in which the player is currently in
                szrad = _x select 1; // Get the radius of this safe zone
            };
        } count DZE_SafeZonePosArray;
 
        if (_preventTheft) then {
            private "_vehicle";
 
            _vehicle = vehicle player;
 
            if (isNil "fn_gearMenuChecks1") then { // Make sure vehicle gear checks aren't already disabled
                fn_gearMenuChecks1 = fn_gearMenuChecks;
            };
 
            if (_vehicle != player) then { // Reset owner when entering
                if (driver _vehicle == player) then {
                    private "_owner";
 
                    _owner = [];
                    _owner set [count _owner, getPlayerUID player];
 
                    {
                        if !(getPlayerUID _x in _owner) then {
                            _owner set [count _owner, getPlayerUID _x];
                        };
                    } count (crew _vehicle);
 
                    _vehicle setVariable ["Owner", _owner, true];
//                    localize "STR_CL_SZ_OWNER" call dayz_rollingMessages;
                };
            };
 
            fn_gearMenuChecks = { // Prevent player from accessing gear of vehicles that aren't their's
                if (vehicle player == player) then {
                    private ["_cursorTarget", "_dis"];
                    disableSerialization;
 
                    _display = _this select 0;
                    _cursorTarget = cursorTarget;
                    _dis = if (_cursorTarget isKindOf "USEC_ch53_E" || {_cursorTarget isKindOf "MV22"}) then {25} else {12};
 
                    if ((player distance _cursorTarget <= _dis) && {_cursorTarget isKindOf "Air" || {_cursorTarget isKindOf "LandVehicle"} || {_cursorTarget isKindOf "Ship"}}) then {
                        private ["_owner", "_deny"];
 
                        _owner = _cursorTarget getVariable ["Owner", []];
 
                        // Allow group members of the owner to access gear
                        _deny = true;
                        {
                            if (getPlayerUID _x == (_owner select 0)) exitWith {_deny = false;};
                        } count (units group player);
 
                        if (getPlayerUID player in _owner) then {_deny = false};
 
                        if (_deny) then {
                            _display closeDisplay 2;
                            localize "STR_CL_SZ_GEAR" call dayz_rollingMessages;
                        };
                    };
                };
 
                // Pass array on to normal gearMenuChecks
                _this call fn_gearMenuChecks1;
            };
        };
 
        if (isNil "fnc_usec_damageHandler1") then {
            fnc_usec_damageHandler1 = fnc_usec_damageHandler;
        };
        fnc_usec_damageHandler = {0}; // God mode
 
        if (isNil "player_zombieCheck1") then {
            player_zombieCheck1 = player_zombieCheck;
        };
        player_zombieCheck = {false}; // No zombie aggro
 
        if (isNil "player_fired1") then {
            player_fired1 = player_fired;
        };
        player_fired = { // Block firing in safe zone
            deleteVehicle (_this select 6);
            cutText [localize "STR_CL_SZ_FIRE", "WHITE IN"];
        };
 
        [_speedLimit, _disableWeps, _badWeps, _preventTheft, _removeZ, _removeAI] spawn {
            while {safezone_enabled} do
            {
                private "_vehicle";
 
                _vehicle = vehicle player;
 
                if (_this select 1) then {
                    private "_currentWeapon";
 
                    _currentWeapon = currentWeapon player;
 
                    if (_currentWeapon in (_this select 2)) then {
                        player action ["dropWeapon", player, _currentWeapon]; // Drops the weapon and the ammo for it
                    };
                };
 
                if (_vehicle != player) then {
                    // Speed Limit
                    if ((_this select 0) > 0) then {
                        if !(_vehicle isKindOf "Air") then {
                            private "_speed";
 
                            _speed = abs(speed _vehicle);
 
                            if (_speed > (_this select 0)) then {
                                private ["_velocity", "_mod"];
 
                                _velocity = velocity _vehicle;
                                _mod = if (_speed > 50) then {0.1} else {0.8};
 
                                _vehicle setVelocity [(_velocity select 0) * _mod, (_velocity select 1) * _mod, (_velocity select 2) * _mod];
                            };
                        };
                    };
                    // Remove player from vehicle if they lack ownership or aren't in owner's group
                    if (_this select 3) then {
                        private ["_owner", "_deny"];
 
                        _owner = _vehicle getVariable ["Owner", []];
 
                        if (driver _vehicle == player && {count _owner == 0}) then { // Set an owner if one doesn't exist
                            _owner set [count _owner, getPlayerUID player];
                            _vehicle setVariable ["Owner", _owner, true];
//                            localize "STR_CL_SZ_OWNER" call dayz_rollingMessages;
                        };
 
                        if (count _owner > 0) then {
                            _deny = true;
                            {
                                if (getPlayerUID _x == (_owner select 0)) exitWith {_deny = false;};
                            } count (units group player);
 
                            if (getPlayerUID player in _owner) then {_deny = false;};
 
                            if (_deny) then {
                                player action ["Eject", _vehicle];
                            };
                        };
                    };
                    // Prevent player from firing vehicle guns in safe zone
                    if !(_vehicle getVariable ["safezoneEH", false]) then {
                        _vehicle setVariable ["safezoneEH", true];
                        _vehicle addEventHandler ["Fired", {_this call player_fired}];
                    };
                };
 
                // Remove zombies from safe zone
                if (_this select 4) then {{deleteVehicle _x;} count (szpos nearEntities ["zZombie_Base", szrad]);};
 
                // Remove AI from safe zone
                if (_this select 5) then {
                    {
                        if ((!isNull group _x) && (getPlayerUID _x == '')) then {deleteVehicle _x;};
                    } count (szpos nearEntities ["Man", szrad]);
                };
 
                // Prevent player from being unconscious in safe zone
                {
                    player setVariable [_x, false, false];
                } count ["NORRN_unconscious", "USEC_isCardiac"];
 
                r_player_unconscious = false;
                r_player_cardiac = false;
 
                uiSleep 0.1;
            };
        };
    };
 
    _exit = {
        private ["_msg", "_time", "_vehicle"];
 
        safezone_enabled = false;
        isInTraderCity = false;
        canbuild = true;
 
        _msg = localize "STR_CL_SZ_EXIT";
        taskHint [_msg, [1,0,0,1], "taskFailed"];
//        _msg call dayz_rollingMessages;
 
        _time = diag_tickTime - safezone_time;
        _vehicle = vehicle player;
 
        if (_timer > 0) then {
            if (_time >= 60) then {
                if (_vehicle != player) then {
                    [_vehicle, _timer] spawn {
                        (_this select 0) setVariable ["sz_immunity", true, true];
                        uiSleep (_this select 1);
                        (_this select 0) setVariable ["sz_immunity", false, true];
                    };
                };
                for "_x" from _timer to 1 step -1 do
                {
                    [format[localize "STR_CL_SZ_ENDING", _x], 1] call dayz_rollingMessages;
                    uiSleep 1;
                    if ({_vehicle distance (_x select 0) <= (_x select 1)} count DZE_SafeZonePosArray > 0) exitWith {};
                };
            } else {
                format[localize "STR_CL_SZ_TIME", round _time] call dayz_rollingMessages;
            };
        };
 
//        localize "STR_CL_SZ_DISABLED" call dayz_rollingMessages;
 
        fnc_usec_damageHandler = fnc_usec_damageHandler1;
        player_zombieCheck = player_zombieCheck1;
        player_fired = player_fired1;
 
        vehicle player setCaptive false;
 
        if (_preventTheft) then {
            fn_gearMenuChecks = fn_gearMenuChecks1;
        };
 
        if (_vehicle != player) then {
            _vehicle setVariable ["safezoneEH", false];
            _vehicle removeAllEventHandlers "Fired";
        };
    };
 
    while {69 == 69} do
    {
        private ["_vehicle"];
 
        _vehicle = vehicle player;
 
        if (!safezone_enabled) then {
            if ({_vehicle distance (_x select 0) <= (_x select 1)} count DZE_SafeZonePosArray > 0) then {
                call _enter;
            };
        } else {
            if !({_vehicle distance (_x select 0) <= (_x select 1)} count DZE_SafeZonePosArray > 0) then {
                call _exit;
            };
        };
 
        uiSleep 1;
    };
};

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Discord

×
×
  • Create New...