Jump to content
Sign in to follow this  
KokaKolaA3

need help for a Safezone script

Recommended Posts

Hey, im trying to make a Safezone, I put in every init of a vehlice "this allowdamage false;", and i want when the vehicle drive through a trigger the vehicle damage turns on. I have a lot vehicles so i dont want to make 30 triggers for each vehicle.(at activation: veh1 or veh2 or veh3 ... allowdamage true). And i have another question, if i put in a trigger "player allowdamage true;" does every Player turns the damage on or only the one who entered the trigger?
 

Share this post


Link to post
Share on other sites

Not that I would want to advertise my content, but I reckoned this to be the easiest and fastest way:

_safezoneTrigger = createTrigger ["EmptyDetector", _yourSafezonePosition];
_safezoneTrigger setTriggerActivation ["ANY", "PRESENT", true];
_safezoneTrigger setTriggerArea [10, 10, 0, false];
_safezoneTrigger = [
    _safezoneTrigger,
    {_x allowDamage false;},
    {_x allowDamage true;},
    true
] call fnc_triggerListChanged;

Using this little script:

[sCRIPT] Trigger List Changed v2.1 - Handle units which entered/left a trigger's list

 

That way, every unit entering the trigger area (Safezone) is invulnerable. Every unit leaving the trigger area is vulnerable again.

 

EDIT:

I'm not sure right now whether this also affects the vehicle's crew, but I believe it doesn't. You might need to add some respective code to the trigger list lines above:

if (_x isKindOf "Car") then {{_x allowDamage false;} forEach (crew _x);}
if (_x isKindOf "Car") then {{_x allowDamage true;} forEach (crew _x);}

 And i have another question, if i put in a trigger "player allowdamage true;" does every Player turns the damage on or only the one who entered the trigger?

Only the unit activating the trigger gets its allowDamage set.

Share this post


Link to post
Share on other sites

Another way to do it:

 

1. Put triggers for each of the area want to protect

2. Put the following in the init.sqf file:

//init.sqf
MISSION_SAFEZONES = [*list of trigger names in here*];
MISSION_ALLOWSAFEZONEFIRING = false; // Allows players to fire in safezone - can be changed during mission
MISSION_ALLOWSAFEZONEDAMAGE = false; // Allows players to be damaged in the safezone - can be changed during mission
MISSION_SAFEZONE_FNC_INSAFEZONE = {
   _object = _this param [0,objnull,[objnull]];
   _inSafeZone = false;
   if (isNull _object) exitWith {false};
   _safeZones = MISSION_SAFEZONES;
   for "_i" from 0 to ((count _safeZones) - 1) step 1 do {
      _safeZone = _safeZones select _i;
      if ([_object,_safeZone] call BIS_fnc_inTrigger) exitWith {
         _inSafeZone = true;
      };
   };
   _inSafeZone;
};

player addEventHandler ["Fired",{
   // Checks if player is in safezone
   _inSafeZone = [(_this select 0)] call MISSION_SAFEZONE_FNC_INSAFEZONE;
   if (_inSafeZone && !MISSION_ALLOWSAFEZONEFIRING) {
      // Deletes projectile
      deleteVehicle (_this select 6);
   };
};

player addEventHandler ["HandleDamage",{
     _inSafeZone = [(_this select 0)] call MISSION_SAFEZONE_FNC_INSAFEZONE;
     if !(MISSION_ALLOWSAFEZONEDAMAGE && !(_inSafeZone)) then {
        (_this select 0) setDamage 0;
        true;
     };
};

That means that you can change the parameters on the fly, and have multiple safezones.

 

 

Hope that helps,

 

Bull

Share this post


Link to post
Share on other sites

Make a marker on map called "westSafeZone" (or "esatSafeZone" but has to be changed in script)

Fix distance inside script.

Change Magazine types to the magazines you use. (each case)

 

Prevents players from firing weapons, planting c4, throwing nades/smokes, etc.

Also warns player on entering/exiting Safezone

// Safezone Script
// Written by Schadler.C [TacBF Team]

_safeZone = getMarkerPos "westSafeZone";
	
while {true} do {

	waitUntil {_safeZone distance player < 250};
		
		sleep 2;
		hint parseText format ["<t size = '1.5' color = '#FF0000'>SAFEZONE!</t><br/><br/>You have entered the safezone!<br/>Firing your weapon or throwing grenades is prohibited!"];
		player allowDamage false;
		_safeZoneDamageEH = player addEventhandler["HandleDamage",{false}];
		_safeZoneFiredEH = player addEventHandler ["Fired", {
			
			_unit = _this select 0;
			_type = _this select 5;
			_projectile = _this select 6;
			_projectileName = getText(configFile >> "CfgMagazines" >>_type >> "displayName");
			
			switch (_type) do {

					deleteVehicle _projectile;
					
				case "rhs_mag_30Rnd_556x45_M855A1_Stanag": {
					
					hint parseText format ["<t size = '1.5' color = '#FF0000'>SAFEZONE!</t><br/><br/>Do Not Discharge Weapons In Safezone!"];
					_unit setAmmo [currentWeapon player, 0];
					
				};
				
				case "rhs_mag_30Rnd_556x45_M855A1_Stanag_Tracer_Red": {
				
					hint parseText format ["<t size = '1.5' color = '#FF0000'>SAFEZONE!</t><br/><br/>Do Not Discharge Weapons In Safezone!"];
					_unit setAmmo [currentWeapon player, 0];
				
				};
				
				case "rhsusf_100Rnd_556x45_soft_pouch": {
				
					hint parseText format ["<t size = '1.5' color = '#FF0000'>SAFEZONE!</t><br/><br/>Do Not Discharge Weapons In Safezone!"];
					_unit setAmmo [currentWeapon player, 0];
				
				};
				
				case "rhs_mag_M441_HE": {
				
					hint parseText format ["<t size = '1.5' color = '#FF0000'>SAFEZONE!</t><br/><br/>Do Not Discharge Weapons In Safezone!<br/><br/>All %1s Removed From Inventory!", _projectileName];
					_unit removeMagazines "rhs_mag_M441_HE";
				
				};
					
				case "rhs_mag_M433_HE": {
				
					hint parseText format ["<t size = '1.5' color = '#FF0000'>SAFEZONE!</t><br/><br/>Do Not Discharge Weapons In Safezone!<br/><br/>All %1s Removed From Inventory!", _projectileName];
					_unit removeMagazines "rhs_mag_M433_HE";
				
				};
				
				case "rhs_m136_mag": {
				
					hint parseText format ["<t size = '1.5' color = '#FF0000'>SAFEZONE!</t><br/><br/>Do Not Discharge Weapons In Safezone!"];
					_unit setAmmo [currentWeapon player, 0];
				
				};
				
				case "rhs_fgm148_Magazines_AT": {
				
					hint parseText format ["<t size = '1.5' color = '#FF0000'>SAFEZONE!</t><br/><br/>Do Not Discharge Weapons In Safezone!<br/><br/>All %1s Removed From Inventory!", _projectileName];
					_unit removeMagazines "rhs_fgm148_Magazines_AT";
				
				};

				case "rhsusf_20Rnd_762x51_m118_special_Mag": {
				
					hint parseText format ["<t size = '1.5' color = '#FF0000'>SAFEZONE!</t><br/><br/>Do Not Discharge Weapons In Safezone!"];
					_unit setAmmo [currentWeapon player, 0];
				
				};
				
				case "rhsusf_5Rnd_300winmag_xm2010": {
				
					hint parseText format ["<t size = '1.5' color = '#FF0000'>SAFEZONE!</t><br/><br/>Do Not Discharge Weapons In Safezone!"];
					_unit setAmmo [currentWeapon player, 0];
				
				};

				case "rhs_mag_m67": {
					
					hint parseText format ["<t size = '1.5' color = '#FF0000'>SAFEZONE!</t><br/><br/>Do Not Throw Grenades In Safezone!<br/><br/>All Grenades Removed From Inventory!"];
					_unit removeMagazines "rhs_mag_m67";
					_unit removeMagazines "SmokeShell";
					_unit removeMagazines "SmokeShellBlue";
					_unit removeMagazines "SmokeShellRed";
					_unit removeMagazines "SmokeShellOrange";
				
				};
				
				case "SmokeShell": {
					
					hint parseText format ["<t size = '1.5' color = '#FF0000'>SAFEZONE!</t><br/><br/>Do Not Throw Grenades In Safezone!<br/><br/>All Grenades Removed From Inventory!"];
					_unit removeMagazines "rhs_mag_m67";
					_unit removeMagazines "SmokeShell";
					_unit removeMagazines "SmokeShellBlue";
					_unit removeMagazines "SmokeShellRed";
					_unit removeMagazines "SmokeShellOrange";
				
				};
				
				case "SmokeShellBlue": {
					
					hint parseText format ["<t size = '1.5' color = '#FF0000'>SAFEZONE!</t><br/><br/>Do Not Throw Grenades In Safezone!<br/><br/>All Grenades Removed From Inventory!"];
					_unit removeMagazines "rhs_mag_m67";
					_unit removeMagazines "SmokeShell";
					_unit removeMagazines "SmokeShellBlue";
					_unit removeMagazines "SmokeShellRed";
					_unit removeMagazines "SmokeShellOrange";	
				
				};
				
				case "SmokeShellRed": {
					
					hint parseText format ["<t size = '1.5' color = '#FF0000'>SAFEZONE!</t><br/><br/>Do Not Throw Grenades In Safezone!<br/><br/>All Grenades Removed From Inventory!"];
					_unit removeMagazines "rhs_mag_m67";
					_unit removeMagazines "SmokeShell";
					_unit removeMagazines "SmokeShellBlue";
					_unit removeMagazines "SmokeShellRed";
					_unit removeMagazines "SmokeShellOrange";
				
				};
				
				case "SmokeShellOrange": {
					
					hint parseText format ["<t size = '1.5' color = '#FF0000'>SAFEZONE!</t><br/><br/>Do Not Throw Grenades In Safezone!<br/><br/>All Grenades Removed From Inventory!"];
					_unit removeMagazines "rhs_mag_m67";
					_unit removeMagazines "SmokeShell";
					_unit removeMagazines "SmokeShellBlue";
					_unit removeMagazines "SmokeShellRed";
					_unit removeMagazines "SmokeShellOrange";
					
				};
				
				case "DemoCharge_Remote_Mag": {
					
					hint parseText format ["<t size = '1.5' color = '#FF0000'>SAFEZONE!</t><br/><br/>Do Not Discharge Weapons In Safezone!<br/><br/>All %1s Removed From Inventory!", _projectileName];
					_unit removeMagazines "DemoCharge_Remote_Mag";
					
				};

				case default {
					
					systemChat format ["%1", _this select 0];
					systemChat format ["%1", _this select 1];
					systemChat format ["%1", _this select 2];
					systemChat format ["%1", _this select 3];
					systemChat format ["%1", _this select 4];
					systemChat format ["%1", _this select 5];
					
					hint parseText format ["<t size = '1.5' color = '#FF0000'>BUG FOUND!</t><br/><br/>Please Report Ammotype (Located In Chat) To Admin/Developer!"];
					
				};
			};
				
		}];
		
	waitUntil {_safeZone distance player > 250};
		
		hint parseText format ["<t size = '1.5' color = '#FF0000'>SAFEZONE!</t><br/><br/>You are leaving the safezone!<br/>You are now vulnerable to enemies!"];
		player allowDamage true;
		player removeEventhandler["HandleDamage", _safeZoneDamageEH];
		player removeEventHandler["Fired", _safeZoneFiredEH];
		
};
  • Like 2

Share this post


Link to post
Share on other sites

 

Make a marker on map called "westSafeZone" (or "esatSafeZone" but has to be changed in script)

Fix distance inside script.

Change Magazine types to the magazines you use. (each case)

 

Prevents players from firing weapons, planting c4, throwing nades/smokes, etc.

Also warns player on entering/exiting Safezone

// Safezone Script
// Written by Schadler.C [TacBF Team]

_safeZone = getMarkerPos "westSafeZone";
	
while {true} do {

	waitUntil {_safeZone distance player < 250};
		
		sleep 2;
		hint parseText format ["<t size = '1.5' color = '#FF0000'>SAFEZONE!</t><br/><br/>You have entered the safezone!<br/>Firing your weapon or throwing grenades is prohibited!"];
		player allowDamage false;
		_safeZoneDamageEH = player addEventhandler["HandleDamage",{false}];
		_safeZoneFiredEH = player addEventHandler ["Fired", {
			
			_unit = _this select 0;
			_type = _this select 5;
			_projectile = _this select 6;
			_projectileName = getText(configFile >> "CfgMagazines" >>_type >> "displayName");
			
			switch (_type) do {

					deleteVehicle _projectile;
					
				case "rhs_mag_30Rnd_556x45_M855A1_Stanag": {
					
					hint parseText format ["<t size = '1.5' color = '#FF0000'>SAFEZONE!</t><br/><br/>Do Not Discharge Weapons In Safezone!"];
					_unit setAmmo [currentWeapon player, 0];
					
				};
				
				case "rhs_mag_30Rnd_556x45_M855A1_Stanag_Tracer_Red": {
				
					hint parseText format ["<t size = '1.5' color = '#FF0000'>SAFEZONE!</t><br/><br/>Do Not Discharge Weapons In Safezone!"];
					_unit setAmmo [currentWeapon player, 0];
				
				};
				
				case "rhsusf_100Rnd_556x45_soft_pouch": {
				
					hint parseText format ["<t size = '1.5' color = '#FF0000'>SAFEZONE!</t><br/><br/>Do Not Discharge Weapons In Safezone!"];
					_unit setAmmo [currentWeapon player, 0];
				
				};
				
				case "rhs_mag_M441_HE": {
				
					hint parseText format ["<t size = '1.5' color = '#FF0000'>SAFEZONE!</t><br/><br/>Do Not Discharge Weapons In Safezone!<br/><br/>All %1s Removed From Inventory!", _projectileName];
					_unit removeMagazines "rhs_mag_M441_HE";
				
				};
					
				case "rhs_mag_M433_HE": {
				
					hint parseText format ["<t size = '1.5' color = '#FF0000'>SAFEZONE!</t><br/><br/>Do Not Discharge Weapons In Safezone!<br/><br/>All %1s Removed From Inventory!", _projectileName];
					_unit removeMagazines "rhs_mag_M433_HE";
				
				};
				
				case "rhs_m136_mag": {
				
					hint parseText format ["<t size = '1.5' color = '#FF0000'>SAFEZONE!</t><br/><br/>Do Not Discharge Weapons In Safezone!"];
					_unit setAmmo [currentWeapon player, 0];
				
				};
				
				case "rhs_fgm148_Magazines_AT": {
				
					hint parseText format ["<t size = '1.5' color = '#FF0000'>SAFEZONE!</t><br/><br/>Do Not Discharge Weapons In Safezone!<br/><br/>All %1s Removed From Inventory!", _projectileName];
					_unit removeMagazines "rhs_fgm148_Magazines_AT";
				
				};

				case "rhsusf_20Rnd_762x51_m118_special_Mag": {
				
					hint parseText format ["<t size = '1.5' color = '#FF0000'>SAFEZONE!</t><br/><br/>Do Not Discharge Weapons In Safezone!"];
					_unit setAmmo [currentWeapon player, 0];
				
				};
				
				case "rhsusf_5Rnd_300winmag_xm2010": {
				
					hint parseText format ["<t size = '1.5' color = '#FF0000'>SAFEZONE!</t><br/><br/>Do Not Discharge Weapons In Safezone!"];
					_unit setAmmo [currentWeapon player, 0];
				
				};

				case "rhs_mag_m67": {
					
					hint parseText format ["<t size = '1.5' color = '#FF0000'>SAFEZONE!</t><br/><br/>Do Not Throw Grenades In Safezone!<br/><br/>All Grenades Removed From Inventory!"];
					_unit removeMagazines "rhs_mag_m67";
					_unit removeMagazines "SmokeShell";
					_unit removeMagazines "SmokeShellBlue";
					_unit removeMagazines "SmokeShellRed";
					_unit removeMagazines "SmokeShellOrange";
				
				};
				
				case "SmokeShell": {
					
					hint parseText format ["<t size = '1.5' color = '#FF0000'>SAFEZONE!</t><br/><br/>Do Not Throw Grenades In Safezone!<br/><br/>All Grenades Removed From Inventory!"];
					_unit removeMagazines "rhs_mag_m67";
					_unit removeMagazines "SmokeShell";
					_unit removeMagazines "SmokeShellBlue";
					_unit removeMagazines "SmokeShellRed";
					_unit removeMagazines "SmokeShellOrange";
				
				};
				
				case "SmokeShellBlue": {
					
					hint parseText format ["<t size = '1.5' color = '#FF0000'>SAFEZONE!</t><br/><br/>Do Not Throw Grenades In Safezone!<br/><br/>All Grenades Removed From Inventory!"];
					_unit removeMagazines "rhs_mag_m67";
					_unit removeMagazines "SmokeShell";
					_unit removeMagazines "SmokeShellBlue";
					_unit removeMagazines "SmokeShellRed";
					_unit removeMagazines "SmokeShellOrange";	
				
				};
				
				case "SmokeShellRed": {
					
					hint parseText format ["<t size = '1.5' color = '#FF0000'>SAFEZONE!</t><br/><br/>Do Not Throw Grenades In Safezone!<br/><br/>All Grenades Removed From Inventory!"];
					_unit removeMagazines "rhs_mag_m67";
					_unit removeMagazines "SmokeShell";
					_unit removeMagazines "SmokeShellBlue";
					_unit removeMagazines "SmokeShellRed";
					_unit removeMagazines "SmokeShellOrange";
				
				};
				
				case "SmokeShellOrange": {
					
					hint parseText format ["<t size = '1.5' color = '#FF0000'>SAFEZONE!</t><br/><br/>Do Not Throw Grenades In Safezone!<br/><br/>All Grenades Removed From Inventory!"];
					_unit removeMagazines "rhs_mag_m67";
					_unit removeMagazines "SmokeShell";
					_unit removeMagazines "SmokeShellBlue";
					_unit removeMagazines "SmokeShellRed";
					_unit removeMagazines "SmokeShellOrange";
					
				};
				
				case "DemoCharge_Remote_Mag": {
					
					hint parseText format ["<t size = '1.5' color = '#FF0000'>SAFEZONE!</t><br/><br/>Do Not Discharge Weapons In Safezone!<br/><br/>All %1s Removed From Inventory!", _projectileName];
					_unit removeMagazines "DemoCharge_Remote_Mag";
					
				};

				case default {
					
					systemChat format ["%1", _this select 0];
					systemChat format ["%1", _this select 1];
					systemChat format ["%1", _this select 2];
					systemChat format ["%1", _this select 3];
					systemChat format ["%1", _this select 4];
					systemChat format ["%1", _this select 5];
					
					hint parseText format ["<t size = '1.5' color = '#FF0000'>BUG FOUND!</t><br/><br/>Please Report Ammotype (Located In Chat) To Admin/Developer!"];
					
				};
			};
				
		}];
		
	waitUntil {_safeZone distance player > 250};
		
		hint parseText format ["<t size = '1.5' color = '#FF0000'>SAFEZONE!</t><br/><br/>You are leaving the safezone!<br/>You are now vulnerable to enemies!"];
		player allowDamage true;
		player removeEventhandler["HandleDamage", _safeZoneDamageEH];
		player removeEventHandler["Fired", _safeZoneFiredEH];
		
};

 

where i have to put the script?

 

in safezonescript.sqf and this in the init.sqf: execVM "safezonescript.sqf";  or  just a marker or trigger.... ?

Share this post


Link to post
Share on other sites

Create the marker ingame, then call for the script in init.sqf or initPlayerLocal.sqf, however you prefer.

But yeah, make your own .sqf to call for

Share this post


Link to post
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
Sign in to follow this  

×