Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * Safezone Commander Script by AlienX
- * www.opendayz.net
- * Thanks to everyone who has provided other scripts of the same format, without you I would not have been able to make this.
- *
- * 2014-05-30: Added cargod (Martijn Stolk/netripper)
- */
- diag_log ( "[AGN] Starting Trader City Safezone Commander!" );
- if ( isDedicated || isServer ) exitWith {diag_log ( "Error: Attempting to start AGN products on a server where it should not be!" );};
- Private ["_EH_Fired", "_ehID", "_fix","_inVehicle","_inVehicleLast","_EH_Fired_Vehicle",
- "_inVehicleDamage","_antiBackpackThread","_antiBackpackThread2","_anti_zombie",
- "_vehicle","_veh_array","_y","_veh_total","_godmodeThread"];
- //SCRIPT SETTINGS
- AGN_safeZoneDebug = false; //Debug notes on screen.
- AGN_safeZoneGodmode = true; //Should safezone Godmode be enabled?
- AGN_safeZoneMessages = true; //Should players get messages when entering and exiting the safe zone?
- AGN_safeZone_Backpack_EnableAntiBackpack = true; //Should players not be able to take from peoples bags?
- AGN_safeZone_Backpack_AllowGearFromLootPiles = true; //Should players be able to loot from loot piles?
- AGN_safeZone_Backpack_AllowGearFromVehicles = true; //Should players be able to loot from a vehicles gear?
- AGN_safeZone_Backpack_AllowGearFromDeadPlayers = true; //Should players be able to loot from a dead players corpse?
- AGN_safeZone_Backpack_AllowFriendlyTaggedAccess = true; //Should players who are tagged friendly be able to access each others bags?
- AGN_safeZone_Vehicles_DisableMountedGuns = true; //Should players not be able to shoot bullets/projectiles from mounted guns?
- AGN_safeZone_Vehicles_AllowGearFromWithinVehicles = true; //Should players be able to open the gear screen while they are inside a vehicle?
- AGN_safeZone_Players_DisableWeaponFiring = true; //Should players not be able to shoot bullets/projectiles from their weapon(s)?
- AGN_safeZone_Players_RemoveZombies= true; //Players allowed to delete zombies while in safe zone?
- //Probs not needed, but meh :)
- disableSerialization;
- waitUntil {!isNil "dayz_animalCheck"};
- if ( AGN_safeZoneMessages ) then { systemChat ( "[AGN] Trader Zone Commander Loaded!" ); };
- _inVehicle = objNull;
- _inVehicleLast = objNull;
- while {true} do {
- waitUntil { !canBuild };
- _inSafezoneFinished = false;
- if ( AGN_safeZoneMessages ) then { systemChat ("[AGN] Entering Trader Area - God Mode Enabled"); };
- _thePlayer = player;
- if ( AGN_safeZoneGodmode ) then
- {
- _godmodeThread = [] spawn {
- while {!canBuild} do
- {
- if (AGN_safeZoneDebug) then { diag_log format["[AGN-MST] Godmode check, Player = %1, Vehicle = %2", player, vehicle player]; };
- // Disable handlers
- player_zombieCheck = {};
- fnc_usec_damageHandler = {};
- // Disable damage on player
- player removeAllEventHandlers "HandleDamage";
- player addEventHandler ["HandleDamage", {false}];
- player allowDamage false;
- // Disable damage on vehicle
- fnc_usec_damageVehicle = {};
- vehicle_handleDamage = {};
- vehicle_handleKilled = {};
- if (vehicle player != player) then {
- if (AGN_safeZoneDebug) then { diag_log format["[AGN-MST] In vehicle, setting cargod mode on this car"]; };
- // Setting godmode on this vehicle
- vehicle player removeAllEventHandlers "handleDamage";
- vehicle player addEventHandler ["handleDamage", {false}];
- vehicle player allowDamage false;
- // Check for towed vehicles
- {
- if (!isNull _x) then
- {
- private ["_attachedObj"];
- diag_log format["[AGN-MST] Testing nearby object for tow/lift: %1", _x];
- _attachedObj = _x getVariable["R3F_LOG_est_transporte_par", objNull];
- if (!isNull _attachedObj) then {
- // Found a vehicle being towed
- diag_log format["[AGN-MST] Setting cargod on my towed/lifted object: %1", _x];
- _x removeAllEventHandlers "handleDamage";
- _x addEventHandler ["handleDamage", {_this select 2}];
- _x allowDamage true;
- };
- };
- } forEach ((vehicle player) nearEntities ['AllVehicles', 50]);
- };
- sleep 1;
- };
- };
- };
- if ( AGN_safeZone_Players_RemoveZombies ) then
- {
- _anti_zombie = [] spawn {
- private ["_entity_array"];
- while {!canBuild} do
- {
- _entity_array = (getPos player) nearEntities ["CAManBase",50];
- {
- if (_x isKindof "zZombie_Base") then {
- deletevehicle _x;
- };
- } forEach _entity_array;
- sleep 4;
- };
- };
- };
- if ( AGN_safeZone_Players_DisableWeaponFiring ) then
- {
- _EH_Fired = _thePlayer addEventHandler ["Fired", {
- systemChat ("[AGN] You can not fire your weapon in a Trader City Area");
- NearestObject [_this select 0,_this select 4] setPos[0,0,0];
- }];
- };
- if ( AGN_safeZone_Backpack_EnableAntiBackpack ) then
- {
- AGN_LastPlayerLookedAt = objNull;
- AGN_LastPlayerLookedAtCountDown = 5;
- _antiBackpackThread = [] spawn {
- private [ "_ct","_ip","_ia","_dis"] ;
- while {!canBuild} do
- {
- if ( isNull AGN_LastPlayerLookedAt ) then
- {
- waitUntil {!isNull cursorTarget};
- _ct = cursorTarget;
- _ip = isPlayer _ct;
- if ( _ip ) then { _ia = alive _ct; _dis = _ct distance player; } else { _ia = false; _dis = 1000; };
- if ( (_ip && _ia) && (_dis < 6.5) ) then
- {
- AGN_LastPlayerLookedAt = _ct;
- };
- } else {
- AGN_LastPlayerLookedAtCountDown = AGN_LastPlayerLookedAtCountDown - 1;
- if ( AGN_LastPlayerLookedAtCountDown < 0 ) then { AGN_LastPlayerLookedAtCountDown = 5; AGN_LastPlayerLookedAt = objNull; };
- sleep 1;
- };
- };
- };
- _antiBackpackThread2 = [] spawn {
- private ["_to","_dis","_inchk","_ip","_ia","_skip","_ct","_iv","_lp","_inv","_ctOwnerID","_friendlies","_if"];
- _ctOwnerID = 0;
- while {!canBuild} do
- {
- _ct = cursorTarget;
- _if = false;
- _skip = false;
- if ( !isNull (_ct) ) then
- {
- _to = typeOf _ct;
- _dis = _ct distance player;
- _inchk = ["WeaponHolder","ReammoBox"];
- _lp = false;
- {
- if ( (_to isKindOf _x) && (_dis < 10) && AGN_safeZone_Backpack_AllowGearFromLootPiles ) then
- {
- _lp = true;
- };
- } forEach ( _inchk );
- _ip = isPlayer _ct;
- _ia = alive _ct;
- _iv = _ct isKindOf "AllVehicles";
- _inv = (vehicle player != player);
- _if = false;
- if ( _ip ) then {
- _ctOwnerID = _ct getVariable["CharacterID","0"];
- _friendlies = player getVariable ["friendlyTo",[]];
- if(_ctOwnerID in _friendlies) then {
- if ( AGN_safeZone_Backpack_AllowFriendlyTaggedAccess ) then
- {
- _if = true;
- };
- };
- };
- if ( AGN_safeZoneDebug ) then {
- hintSilent ( format["AGN Safezone Commander\n\nCursorTarget\n%1\n\nDistance\n%2\n\nLootpile\n%3 [%9]\n\nisPlayer\n%4\n\nAlive\n%5\n\nisVehicle\n%6\n\ninVehicle\n%7\n\nisFriendly\n%8 (%12) [%10]\n\nSkip: %11\n",
- _ct, _dis, _lp, _ip, _ia, _iv, _inv, _if, AGN_safeZone_Backpack_AllowGearFromLootPiles, AGN_safeZone_Backpack_AllowFriendlyTaggedAccess, _skip, _ctOwnerID] );
- };
- //Lootpile check
- if ( _lp ) then {_skip = true;};
- //Dead body check
- if ( !(_ia) && AGN_safeZone_Backpack_AllowGearFromDeadPlayers ) then {_skip = true;};
- //Vehicle check
- if ( _iv && (_dis < 10) && !(_ip) && AGN_safeZone_Backpack_AllowGearFromVehicles ) then {_skip = true;};
- //In a vehicle check
- if ( _inv && AGN_safeZone_Vehicles_AllowGearFromWithinVehicles ) then { _skip = true; };
- //Is player friendly?
- if ( _if ) then { _skip = true; };
- };
- if( !isNull (FindDisplay 106) && !_skip ) then
- {
- if ( isNull AGN_LastPlayerLookedAt ) then
- {
- (findDisplay 106) closeDisplay 1;
- waitUntil { isNull (FindDisplay 106) };
- createGearDialog [(player), 'RscDisplayGear'];
- if ( AGN_safeZoneMessages ) then { systemChat ("[AGN] Anti Backpack Stealing - Redirecting you to your own gear!"); };
- waitUntil { isNull (FindDisplay 106) };
- } else {
- if ( AGN_safeZoneMessages ) then { systemChat (format["[AGN] You cannot open your gear at this time as you have looked at a player in the last 5 seconds."]); };
- (findDisplay 106) closeDisplay 1;
- waitUntil { isNull (FindDisplay 106) };
- };
- };
- if ( _skip && _if ) then {
- // MST - Disabled due to spam
- //if ( AGN_safeZoneMessages ) then { systemChat ("[AGN] This player is tagged friendly, you have access to this players bag") };
- };
- };
- };
- };
- if ( AGN_safeZone_Vehicles_DisableMountedGuns ) then
- {
- while { !canBuild } do
- {
- sleep 0.1;
- if ( !(isNull _inVehicle) && (vehicle player == player) ) then
- {
- _inVehicle removeEventHandler ["Fired", _EH_Fired_Vehicle];
- _inVehicleLast = _inVehicle;
- _inVehicleLast removeEventHandler ["Fired", _EH_Fired_Vehicle];
- _inVehicle = objNull;
- };
- if ( vehicle player != player && isNull _inVehicle ) then
- {
- if (AGN_safeZoneMessages) then { systemChat ( "[AGN] No Firing Vehicle Guns Enabled" ); };
- _inVehicle = vehicle player;
- _inVehicleDamage = getDammage _inVehicle;
- _EH_Fired_Vehicle = _inVehicle addEventHandler ["Fired", {
- systemChat ("[AGN] You can not fire your vehicles weapon in a Trader City Area");
- NearestObject [_this select 0,_this select 4] setPos[0,0,0];
- }];
- };
- };
- } else {
- waitUntil { canBuild };
- };
- AGN_LastPlayerLookedAt = objNull;
- AGN_LastPlayerLookedAtCountDown = 5;
- terminate _antiBackpackThread;
- terminate _antiBackpackThread2;
- terminate _anti_zombie;
- terminate _godmodeThread;
- if ( AGN_safeZoneMessages ) then { systemChat ("[AGN] Exiting Trader Area - God Mode Disabled"); };
- if ( AGN_safeZone_Vehicles_DisableMountedGuns ) then
- {
- if ( !(isNull _inVehicle) ) then
- {
- if ( AGN_safeZoneMessages ) then { systemChat ( "[AGN] No Firing Vehicle Guns Disabled" ); };
- _inVehicle removeEventHandler ["Fired", _EH_Fired_Vehicle];
- };
- if ( !(isNull _inVehicleLast) ) then
- {
- if ( AGN_safeZoneMessages ) then { systemChat ( "[AGN] No Firing Vehicle Guns Disabled" ); };
- _inVehicleLast removeEventHandler ["Fired", _EH_Fired_Vehicle];
- };
- };
- if ( AGN_safeZone_Players_DisableWeaponFiring ) then
- {
- _thePlayer removeEventHandler ["Fired", _EH_Fired];
- };
- if ( AGN_safeZoneGodmode ) then
- {
- if (AGN_safeZoneDebug) then { diag_log format["[AGN-MST] Leaving godmode"]; };
- // Reload handlers
- player_zombieCheck = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_zombieCheck.sqf";
- fnc_usec_damageHandler = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_damageHandler.sqf";
- fnc_usec_damageVehicle = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_damageHandlerVehicle.sqf";
- vehicle_handleDamage = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\vehicle_handleDamage.sqf";
- vehicle_handleKilled = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\vehicle_handleKilled.sqf";
- // Re-enable damage on player
- _thePlayer removeAllEventHandlers "HandleDamage";
- _thePlayer addEventHandler ["HandleDamage", {_this call fnc_usec_damageHandler}];
- _thePlayer allowDamage true;
- // Re-enable damage on vehicle
- if (vehicle player != player) then {
- if (AGN_safeZoneDebug) then { diag_log format["[AGN-MST] Leaving cargodmode, fixing my car: %1", vehicle player]; };
- vehicle player removeAllEventHandlers "handleDamage";
- vehicle player addEventHandler ["handleDamage", {_this select 2}];
- vehicle player allowDamage true;
- // Re-enable damage on any towed vehicles
- {
- if (!isNull _x) then
- {
- private ["_attachedObj"];
- if (AGN_safeZoneDebug) then { diag_log format["[AGN-MST] Testing nearby object for tow/lift: %1", _x]; };
- _attachedObj = _x getVariable["R3F_LOG_est_transporte_par", objNull];
- if (!isNull _attachedObj) then {
- if (AGN_safeZoneDebug) then { diag_log format["[AGN-MST] Removing cargod on my tow/lifted object: %1", _x]; };
- _x removeAllEventHandlers "handleDamage";
- _x addEventHandler ["handleDamage", {_this select 2}];
- _x allowDamage true;
- };
- };
- } forEach ((vehicle player) nearEntities ['AllVehicles', 50]);
- };
- };
- _inSafezoneFinished = true;
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement