Jump to content

Donnovan

Member
  • Posts

    840
  • Joined

  • Last visited

  • Days Won

    12

Posts posted by Donnovan

  1. Don't need to spawn it as a event, you just need to change the configuration vars:

    //===============================
    // ANDRE MOST WANTED SCRIPT =====
    //===============================
    // By Donnovan ==================
    //===============================
    	
    //====================
    // CONFIGURATION =====
    //====================
    
    //THE TIME THE FUGITIVE NEED TO RESIST ALIVE TO WIN *IN MINUTES*
    _aliveTimeToWin = 20;
    
    //THE TIME CYCLE THE FUGITIVE MARK WILL BE UPDATED *IN SECONDS*
    _updateMark = 100;
    
    //MAXIMUN TIME THE FUGITIVE IS ALLOWED TO BE IN A PLOT OR SAFEZONES RADIUS TO RECEIVE HIS REWARD IN CASE OF WIN (a percentage of _aliveTimeToWin)
    _maxTimeNearPlot = 0.15;
    
    //TIME CYCLE *IN SECONDS* TO CHECK FOR PLOTS NEAR THE FUGITIVE OR IF HE IS IN A SAFEZONE
    _onPlotCheckFrequency = 20;
    
    //THE RADIUS OF THE POSITION HINT (FUGITIVE WILL BE SOMEWHERE INSIDE THE CIRCLE) *IN METERS*
    _circleSize = 200;
    
    //MINIMUM NUMBER OF PLAYERS TO RUN
    _minPlayersToRun = 15;
    
    //TIME TO WAIT BEFORE TRY TO RUN AGAIN *IN MINUTES*
    _runTimeInter = 50;
    
    //FIRST RUN DELAY *IN MINUTES*
    _firstRunDelay = 30;
    
    //SAFE ZONES (READY FOR CHERNARUS)
    _safezones = [
    	[6325,7807,0],
    	[4063,11664,0],
    	[11447,11364,0],
    	[1606,7803,0],
    	[12944,12766,0], 
    	[12060,12640,0]
    ];
    _safezonesRad = 160;
    
    //ADMINS STEAM ID (TO PREVENT THE SCRIPT TO SELECT ADMINS AS FUGITIVE)
    _admins = ["0","0","0","0"];

     

  2. MOSTWA is Andre Most Wanted Script

    **UPDATED ON 21 OF DECENBER OF 2015**

    WHAT IT DO?

    It choose a player based on a criteria and make hin the fugitive.

    WHAT THE FUGITIVE NEED TO DO?

    The fugitive need to avoid to beign killed by the other players and by the enviroment.

    UHH... AND WHAT THE FUGITIVE GAIN IF HE SURVIVE

    A temporary mozzie and 4 briefcases will appears arround hin.

    AND IF THE FUGITIVE DIE?

    So the 4 briefcases will be on his body for the other players to pick up.

    ITS NOT A HARD TASK FOR THE FUGITIVE?

    The fugitive have Time Rewards that are rewards he gain for mantain hinself alive for x time. The actual time rewards are:

    1 - Receive weapon and ammo. 2 - Receive a motorbike. 3 - Receive cure itens. 4 - See smoke on enemies.

    ITS NOT A HARD TASK FOR THE ONES TRYING TO KILL THE FUGITIVE?

    The hunters will see a mark on the map revealing the fugitive position with a configurable precision. The mark update speed depends if the fugitive is on foot, on a land vehicle or in an air vehicle.

    LAST UPDATE?

    Was on 25 of october of 2015 with those changes:

    - Loging players are not anymore selected as fugitive.

    - Fugitives that fly over 300 meter for some time cancel the event.

    - Stay on a plot or on a safe now also cancel the event and not just cancel the fugitive reward.

    - Fugitives are unique, a player can't be selected more than one time in each restart.

    - If the fugitive is flying over 45 meters, he does not receive the time rewards.

    Files updated: andre_most_wanted.sqf

     

    If you enjoy it, i ask for a donation. Thankyou!

    btn_donate_LG.gif $USD
    btn_donate_LG.gif $EURO

     

    INSTALATION:

    1 - Unpack dayz_server.pbo. Put the code bellow in a text file and save it on the root of your unpacked files with the name andre_most_wanted.sqf. Repack dayz_server.pbo. To unpack / repack dayz_server.pbo you can use PBO Manager.

    //===============================
    // ANDRE MOST WANTED SCRIPT =====
    //===============================
    // By Donnovan ==================
    //===============================
    	
    //====================
    // CONFIGURATION =====
    //====================
    
    //MAP SIZE TO PREVENT THE LOGING IN PLAYERS TO BE SELECTED AS FUGITIVE
    _mapSize = 15360;  //READY FOR CHERNARUS
    
    //THE TIME THE FUGITIVE NEED TO RESIST ALIVE TO WIN *IN MINUTES*
    _aliveTimeToWin = 20;
    
    //THE TIME CYCLE THE FUGITIVE MARK WILL BE UPDATED *IN SECONDS*
    _updateMark = 100;
    
    //MAXIMUN TIME THE FUGITIVE IS ALLOWED TO BE IN A PLOT OR SAFEZONE RADIUS TO RECEIVE HIS REWARD IN CASE OF WIN (a percentage of _aliveTimeToWin)
    _maxTimeNearPlot = 0.15;
    
    //TIME CYCLE *IN SECONDS* TO CHECK FOR PLOTS NEAR THE FUGITIVE AND SAFEZONES
    _onPlotCheckFrequency = 20;
    
    //THE RADIUS OF THE POSITION HINT (FUGITIVE WILL BE SOMEWHERE INSIDE THE CIRCLE) *IN METERS*
    _circleSize = 150;
    
    //MINIMUM NUMBER OF PLAYERS TO RUN
    _minPlayersToRun = 15;
    
    //TIME TO WAIT BEFORE TRY TO RUN AGAIN *IN MINUTES*
    _runTimeInter = 50;
    
    //FIRST RUN DELAY *IN MINUTES*
    _firstRunDelay = 30;
    
    //FUGITIVE TIME REWARDS: [time in minutes to exec reward (in sequence),reward message,reward code where _this is the fugitive]
    _fugitiveRewards = [
    	[4,"The Fugitive received a MK 48 and Ammo.",{_posF = position _this;_posFGround = [_posF select 0,_posF select 1,0];_holder = createVehicle ['Weaponholder',_posFGround,[],0,'NONE'];_holder addWeaponCargoGlobal ['Mk_48_DZ',1];_holder addMagazineCargoGlobal ['100Rnd_762x51_M240',5];_this reveal [_holder,4];}],
    	[4,"The fugitive received a motorbike.",{_posF = position _this;_posFGround = [_posF select 0,_posF select 1,0];_veh = createVehicle ['TT650_Ins',_posFGround,[],8,'NONE'];_veh setVariable ['ObjectID','0',true];_veh setVariable ['ObjectUID',str round random 9999999,true];_this reveal [_veh,4];}],
    	[4,"The fugitive received cure itens.",{_posF = position _this;_posFGround = [_posF select 0,_posF select 1,0];_holder = createVehicle ['Weaponholder',_posFGround,[],0,'NONE'];_holder addMagazineCargoGlobal ['ItemBloodBag',1];_holder addMagazineCargoGlobal ['ItemBandage',2];_holder addMagazineCargoGlobal ['ItemSeaBassCooked',1];_holder addMagazineCargoGlobal ['ItemWaterbottle',1];_holder addMagazineCargoGlobal ['ItemPainkiller',1];_holder addMagazineCargoGlobal ['ItemORP',1];_holder addMagazineCargoGlobal ['ItemMorphine',1];_this reveal [_holder,4];}],
    	[4,"The fugitive sees the enemy.",{donn_seeSmoke = [];{if (_this distance _x < 300 && !((vehicle _x) isKindOf 'Air')) then {_posK = position _x;for '_i' from 1 to 4 do {_smoke = createVehicle [['SmokeShell','SmokeShellYellow','SmokeShellRed','SmokeShellGreen','SmokeShellPurple','SmokeShellBlue','SmokeShellOrange'] call BIS_fnc_selectRandom,[_posK select 0,_posK select 1,40+_i*10],[],0,'CAN_COLLIDE'];donn_seeSmoke = donn_seeSmoke + [_smoke];};};} forEach (playableUnits-[_this]);}],
    	[1/12,"",{{deleteVehicle _x;} forEach donn_seeSmoke;}]
    ];
    
    //SAFE ZONES (READY FOR CHERNARUS)
    _safezones = [
    	[6325,7807,0],
    	[4063,11664,0],
    	[11447,11364,0],
    	[1606,7803,0],
    	[12944,12766,0], 
    	[12060,12640,0]
    ];
    _safezonesRad = 160;
    
    //ADMINS STEAM ID (TO PREVENT THE SCRIPT TO SELECT ADMINS AS FUGITIVE)
    _admins = ["00000000000000000","11111111111111111"];
    
    //=====================
    // FUNCTIONS ==========
    //=====================
    
    _lockedFugitives = [];
    
    //THE TWO LINES BELLOW ARE EPOCH SPECIFIC
    waitUntil {!isNil "DZE_safeVehicle"};
    DZE_safeVehicle = DZE_safeVehicle + ["TT650_Ins"];
    
    donn_fugitiveChoose = {
    	_fugitive = objNull;
    	_maxSumDist = -1;
    	{
    		_p = _x;
    		_pP = position _x;
    		_pPX = _pP select 0;
    		_pPY = _pP select 1;
    		if (_pPx > 0 && _pPY < _mapSize) then {
    			if (damage _p < 0.2 && vehicle _p == _p) then {
    				if (count (_p nearObjects ["Plastic_Pole_EP1_DZ",(DZE_PlotPole select 0)*1.25]) == 0) then {
    					_pUID = getPlayerUID _p;
    					if !(_pUID in _admins || _pUID in _lockedFugitives) then {
    						_sumDist = 0;
    						{_sumDist = _sumDist + (_p distance _x);} forEach playableUnits;
    						if (_sumDist > _maxSumDist) then {_fugitive = _p;_maxSumDist = _sumDist;};
    					};
    				};
    			};
    		};
    	} forEach playableUnits;
    	_fugitive
    };
    
    //=====================
    // THE SCRIPT =========
    //=====================
    
    _aliveTimeToWin = round (_aliveTimeToWin*60);
    _runTimeInter = round (_runTimeInter*60);
    _firstRunDelay = round (_firstRunDelay*60);
    _lastTimeConclude = time-_runTimeInter+_firstRunDelay;
    while {true} do {
    	waitUntil {uiSleep 15;count playableUnits >= _minPlayersToRun && (time-_lastTimeConclude) >= _runTimeInter};
    	_fugitive = call donn_fugitiveChoose;
    	if (!isNull _fugitive) then {
    		diag_log "[MOSTWA] Begin!";
    		_fugitiveName = name _fugitive;
    		_fugitiveID = getPlayerUID _fugitive;
    		_aliveTimeStart = time;
    		_aliveTimePassed = 0;
    		_timeCell = 2;
    		_sleepAMark = round(_updateMark/_timeCell);
    		_slepBIndex = 0;
    		_sleepBMark = -1;
    		if !(_slepBIndex == count _fugitiveRewards) then {
    			_sleepBMark = round(((_fugitiveRewards select _slepBIndex select 0)*60)/_timeCell);
    		};
    		_sleepCMark = round(_onPlotCheckFrequency/_timeCell);
    		_sleepDMark = round (10/_timeCell);
    		//_sleepA = _sleepAMark;
    		_sleepA = 0;
    		_sleepB = 0; 
    		_sleepC = 0;
    		_sleepD = 0;
    		_txt = ((name _fugitive)+" have a price on his head, kill hin to receive a reward.\n"+(name _fugitive)+", stay alive " +(str(round(_aliveTimeToWin/60)))+" minutes to receive the prize.\n\n");
    		_timeInPlot = 0;
    		while {alive _fugitive && !isNull _fugitive && _aliveTimePassed < _aliveTimeToWin && _timeInPlot <= _aliveTimeToWin*_maxTimeNearPlot} do {
    			if (_sleepA >= _sleepAMark) then {
    				_txt = _txt + ((name _fugitive)+" mark updated on map.\n"+(str (round(((_aliveTimeToWin-_aliveTimePassed)/60)*10)/10))+" minutes to stop the hunt.\n\n");
    				_sleepA = 0;
    				_fPos = position _fugitive;
    				_error = (_circleSize*2)/sqrt(2);
    				_fPosBlur = [(_fPos select 0)-_error/2+(random _error),(_fPos select 1)-_error/2+(random _error),0];
    				if (_aliveTimePassed > 0) then {deleteMarker "DONN_FUGITIVE";deleteMarker "DONN_FUGITIVE_DOT";};
    				createMarker ["DONN_FUGITIVE",_fPosBlur];
    				"DONN_FUGITIVE" setMarkerColor "ColorYellow";
    				"DONN_FUGITIVE" setMarkerShape "ELLIPSE";
    				"DONN_FUGITIVE" setMarkerBrush "SolidBorder";
    				"DONN_FUGITIVE" setMarkerSize [_circleSize,_circleSize];
    				createMarker ["DONN_FUGITIVE_DOT",_fPosBlur];
    				"DONN_FUGITIVE_DOT" setMarkerColor "ColorBlack";
    				"DONN_FUGITIVE_DOT" setMarkerType "Vehicle";
    				"DONN_FUGITIVE_DOT" setMarkerText "Fugitive!";
    			};
    			if (_sleepB == _sleepBMark) then {
    				_nearPlotPole = _fugitive nearObjects ["Plastic_Pole_EP1_DZ",DZE_PlotPole select 0];
    				_inSafe = false;
    				{if (_fugitive distance _x < _safezonesRad) exitWith {_inSafe = true;};} forEach _safezones;
    				_isFlying = ((getPosATL _fugitive) select 2) > 45;
    				if (count _nearPlotPole == 0 && !_inSafe && !_isFlying) then {
    					_txt = _txt + "Time Reward! " + (_fugitiveRewards select _slepBIndex select 1);
    					_code = _fugitiveRewards select _slepBIndex select 2;
    					_fugitive call _code;
    				} else {
    					_txt = _txt + "Time Reward!? In safe, on plot or flying. No reward...";
    				};
    				_sleepB = 0;
    				_slepBIndex = _slepBIndex + 1;
    				_sleepBMark = -1;
    				if !(_slepBIndex == count _fugitiveRewards) then {
    					_sleepBMark = round(((_fugitiveRewards select _slepBIndex select 0)*60)/_timeCell);
    				};
    			};
    			if (_sleepC == _sleepCMark) then {
    				_nearPlotPole = _fugitive nearObjects ["Plastic_Pole_EP1_DZ",DZE_PlotPole select 0];
    				_inSafe = false;
    				_isHigh = ((getPosATL _fugitive) select 2) > 300;
    				{if (_fugitive distance _x < _safezonesRad) exitWith {_inSafe = true;};} forEach _safezones;
    				if (count _nearPlotPole > 0 || _inSafe || _isHigh) then {_timeInPlot = _timeInPlot+_sleepCMark*_timeCell};
    				_sleepC = 0;
    			};
    			if (_sleepD == _sleepDMark) then {
    				if (vehicle _fugitive == _fugitive) then {
    					_sleepAMark = round(_updateMark/_timeCell);
    				} else {
    					if (vehicle _fugitive isKindOf "Air") then {
    						_sleepAMark = round ((_updateMark/_timeCell)*0.25);
    					} else {
    						_sleepAMark = round ((_updateMark/_timeCell)*0.5);
    					};
    				};
    				_sleepD = 0;
    			};
    			if (_txt != "" && _txt != "Time Reward! ") then {[nil,nil,rTitleText,_txt,"PLAIN",7.5] call RE;};
    			uiSleep _timeCell;
    			_txt = "";
    			_sleepA = _sleepA + 1;
    			_sleepB = _sleepB + 1;
    			_sleepC = _sleepC + 1;
    			_sleepD = _sleepD + 1;
    			_aliveTimePassed = (time - _aliveTimeStart);
    		};
    		deleteMarker "DONN_FUGITIVE";
    		deleteMarker "DONN_FUGITIVE_DOT";
    		if (!isNull _fugitive) then {
    			_lockedFugitives = _lockedFugitives + [_fugitiveID];
    			if (alive _fugitive) then {
    				if (_timeInPlot <= _aliveTimeToWin*_maxTimeNearPlot) then {
    					[nil,nil,rTitleText,(_fugitiveName+", time over! The prize is yours!\nColect your reward near you."),"PLAIN",7.5] call RE;
    					_posToHolder = position _fugitive;_posToHolder set [2,0];
    					_veh = createVehicle ["CSJ_GyroC",_posToHolder,[],2,'NONE'];
    					_veh setVariable ["ObjectID","0",true];
    					_veh setVariable ["ObjectUID",str round random 9999999,true];
    					_fugitive reveal _veh;
    					_posToHolder = position _fugitive;_posToHolder set [2,0];
    					_holder = createVehicle ["WeaponHolder",_posToHolder,[],0,"CAN_COLLIDE"];
    					_holder addMagazineCargoGlobal ["ItemBriefCase100oz",4];
    					_fugitive reveal _holder;
    					diag_log "[MOSTWA] Ending! Fugitive Win!";
    					_lastTimeConclude = time;
    				} else {
    					[nil,nil,rTitleText,("Hunt time over! "+(name _fugitive)+", you was too much near plot poles or safezones\n or high on sky. No pain no gain. No reward."),"PLAIN",10] call RE;
    					diag_log "[MOSTWA] Ending! Fugitive not Fair...";
    					_lastTimeConclude = time-_runTimeInter*0.75;
    				};
    			} else {
    				[nil,nil,rTitleText,((name _fugitive)+", perished! Collect the prize on his body!\nMark is on map fo 45 seconds..."),"PLAIN",10] call RE;
    				createMarker ["DONN_FUGITIVE",position _fugitive];
    				"DONN_FUGITIVE" setMarkerColor "ColorRed";
    				"DONN_FUGITIVE" setMarkerShape "ELLIPSE";
    				"DONN_FUGITIVE" setMarkerBrush "SolidBorder";
    				"DONN_FUGITIVE" setMarkerSize [100,100];
    				createMarker ["DONN_FUGITIVE_DOT",position _fugitive];
    				"DONN_FUGITIVE_DOT" setMarkerColor "ColorBlack";
    				"DONN_FUGITIVE_DOT" setMarkerType "Vehicle";
    				"DONN_FUGITIVE_DOT" setMarkerText "Fugitive Body...";
    				_posToHolder = position _fugitive;_posToHolder set [2,0];
    				_holder = createVehicle ["WeaponHolder",_posToHolder,[],0,"CAN_COLLIDE"];
    				_holder addMagazineCargoGlobal ["ItemBriefCase100oz",4];
    				diag_log "[MOSTWA] Ending! Fugitive perished.";
    				uiSleep 240;
    				deleteMarker "DONN_FUGITIVE";
    				deleteMarker "DONN_FUGITIVE_DOT";
    				_lastTimeConclude = time-240;
    			};
    		} else {
    			[nil,nil,rTitleText,("The hunt for "+_fugitiveName+" head is over... "+_fugitiveName+" disconnected."),"PLAIN",5] call RE;
    			diag_log "[MOSTWA] Fugitive disconnected...";
    			_lastTimeConclude = time-_runTimeInter*0.75;
    		};
    	} else {
    		diag_log "[MOSTWA] Cant find an elegible fugitive...";
    		_lastTimeConclude = time-_runTimeInter*0.75;
    	};
    };

    2 - Unpack your mission file, open init.sqf and put the code line bellow at the end of it:

    if (isServer) then {execVM "\z\addons\dayz_server\andre_most_wanted.sqf";};

    3 - Take a look at the script, and set the configuration vars to what you want or leave it alone and use the default settings.

  3. xandinfjg,

    If the heli is armed, they will go away, turn back and shot you, if its not armed it will release soldiers on the ground to hunt you. The soldiers can be deployed 600 meters from you, for example, and they will do the way back to your last know position.

    The amount of attack the helis do also depends of your agressivity and the risk you represent for then, not all helis will go after you if you is alone.

    Sometimes you may have killed all the turreters of a heli, and left it with only the pilot. This heli don't have much to do other than fly arround to know your position. Btw, you can hide from it, and it will forgive you after some time.

    All that is normal Arma 2 AI behavior, nothing of that was scripted by me, what i do is spawn the heli and the crew, set the way points and force the soldiers to reenbark the heli if the enemy is lost or killed. The behaviour to attack only if they are shot is also my creation.

  4. Thankyou for the answers.

    The reason i host in home is that here a dedicated server costs a absurd price, and the only generic server host avaliable locally, Villayer, don't provide good hardware.

    In my home i have a i7 4960K @ 4.6 Ghz, SSD HD and 16 GB of ram.

    Sometimes i run the main server, the test server and the game in this machine, and all runs fine (same game folder).

    The only cons is the connection: 50 mbps download and 6 mbps upload. But i can get 25 30 players... it just suffers a bit when too many players dies and need to load all world data again. There is no difference in bandwidth consume from 1st player join to re-join after death :( so many kills can generate excessive bandwidth consume.

  5. Some shots here: http://matadouro.forumeiro.com/t17-comboios-aereos-estagio-avancado#74

    - Helis with Gunner
    - Helis without Gunner
    - Helis hover above ground to release soldiers
    - If the Helis broke in air, soldiers jump from it to try to save their lifes
    - If the pilot dies in air, soldiers jump from the heli
    - Not all the soldiers have parachute :O
    - Helis only engage on you if you mess with then
    - If a comvoy engage on you, you can hide or run away to try to make then disengage

     

  6. ANDRE AERIAL PATROL:

    If it worked and you enjoy it, i ask for a donation. Thankyou!

    btn_donate_LG.gif $USD
    btn_donate_LG.gif $EURO

     

    OBS: The money rewards will only work if you have the coins script.

    INSTALLATION:

    1 - Put the script bellow on server side.

    2 - Exec it with execVM.

    if (isServer) then {
    	_gridN = 15;
    	_mapSize = 15360; //CHERNARUS
    	donn_hwps = [];
    	for "_i" from 1 to (_gridN - 1) do {
    		_wpx = (_i/_gridN)*_mapSize;
    		for "_y" from 1 to (_gridN - 1) do {
    			_wpy = (_y/_gridN)*_mapSize;
    			if !(surfaceIsWater [_wpx,_wpy]) then {donn_hwps = donn_hwps + [[_wpx,_wpy,0]];};
    		};
    	};
    	donn_heliConvy = [
    		/*0*/["UH1H_DZ",0,["100Rnd_762x51_M240","100Rnd_762x51_M240"],3],
    		/*1*/["UH1H_DZ",4,[],4],
    		/*2*/["Mi17_TK_EP1",5,["100Rnd_762x51_M240","100Rnd_762x51_M240"],5],
    		/*3*/["CH_47F_EP1_DZE",6,["100Rnd_762x51_M240","4000Rnd_762x51_M134","4000Rnd_762x51_M134"],6],
    		/*4*/["AH6J_EP1_DZ",1,[],2] //ARMED (PILOT)
    	];
    	//HELI MAIN CONFIG BEGIN
    	_heliFormation =[[0,0,2],[2,2],[4,4,4,4,4],[3],[3],[1,1]];
    	_heliAltitude =[[60,60,115],[100,100],[50,50,50,50,50],[100],[100],[115,115]];
    	_heliSpeed =["NORMAL","NORMAL","FULL","LIMITED","NORMAL","FULL"];
    	//HELI MAIN CONFIG END
    	_spawn = [100,100,400];
    	donn_heli_HD = {
    		_heliHurt = _this select 0;
    		_damage = _this select 2;
    		if !(canMove _heliHurt) then {
    			if (_heliHurt getVariable "dncmv") then {
    				_heliHurt setVariable ["dncmv",false,false];
    				{
    					if (random 100 > 50) then {_x action ["Eject",_heliHurt];} else {_x setPos getPos _heliHurt;};
    				} forEach crew _heliHurt;
    			};
    		};
    		_damage
    	};
    	donn_heli_unit_HD = {
    		_hurtedOne = _this select 0;
    		_damage = _this select 2;
    		_ofender = _this select 3;
    		_grp = group _hurtedOne;
    		if (combatMode _grp != "RED" && isPlayer _ofender) then {
    			{_x enableAi "TARGET";} forEach units _grp;
    			{_x enableAi "AUTOTARGET";} forEach units _grp;
    			_grp reveal [_ofender,1.5];
    			_grp setCombatMode "RED";_grp setBehaviour "COMBAT";
    		};
    		_damage
    	};	
    	donn_heli_unitKill = {
    		_unit = _this select 0;
    		_role = assignedVehicleRole _unit;
    		if ((assignedVehicleRole _unit) select 0 == "Driver") then {
    			_vehEject = assignedVehicle _unit;
    			{
    				if (random 100 > 40) then {_x action ["Eject",_vehEject];} else {_x setPos getPos _vehEject};
    			} forEach crew _vehEject;
    		};
    		if ({alive _x} count units group _unit == 0) then {donn_heliGrps = donn_heliGrps - [group _unit];};
    		_unit setVariable ["cashMoney",12500 + (round random 5) * 1000,true];
    	};
    	donn_makeAeroRoute = {
    		_origin = _this select 0;
    		_heli_group = _this select 1;
    		_speed = _this select 2;
    		_posBefore = _origin;
    		_posNow = _origin;
    		_wp = _heli_group addWaypoint [_posNow,0,0];
    		_wp setWaypointCompletionRadius 65;
    		_wp setWaypointType "MOVE";
    		_wp setWaypointSpeed _speed;
    		_posNext = [0,0,0];
    		for "_c" from 1 to 5 do {
    			_distToBefore = 0;
    			_distToNext = 0;
    			_found = false;
    			for "_x" from 1 to 200 do {
    				_posNext = donn_hwps call BIS_fnc_selectRandom;
    				_distToNext = _posNow distance _posNext;
    				_distToBefore = _posNext distance _posBefore;
    				if (_distToNext > 3000 && _distToBefore > 4000) exitWith {};
    				uiSleep 0.001;
    			};
    			if (!_found) then {_posNext = donn_hwps call BIS_fnc_selectRandom;};
    			_wp = _heli_group addWaypoint [_posNext,0,_c];
    			_wp setWaypointCompletionRadius 65;
    			_wp setWaypointType "MOVE";
    			_wp setWaypointSpeed _speed;
    			_posNow = _posNext;
    		};
    		_wp = _heli_group addWaypoint [_origin,0,6];
    		_wp setWaypointCompletionRadius 65;
    		_wp setWaypointType "CYCLE";
    		_wp setWaypointSpeed _speed;
    	};
    	donn_heliGrps = [];
    	[] spawn {
    		while {{!isNull _x} count donn_heliGrps > 0} do {
    			{
    				_grp = _x;
    				_forceIn = true;
    				{
    					if (_grp knowsAbout _x >= 1.5) then {_grp reveal [_x,4];_forceIn = false;};
    				} forEach playableUnits;
    				if (_forceIn) then {
    					if (combatMode _grp != "BLUE") then {
    						{_x disableAi "TARGET";uiSleep 0.001;} forEach units _grp;
    						{_x disableAi "AUTOTARGET";uiSleep 0.001;} forEach units _grp;
    						_grp setCombatMode "BLUE";_grp setBehaviour "CARELESS";
    					};
    					{
    						if (vehicle _x == _x) then {[_x] orderGetIn true;uiSleep 0.001;};
    					} forEach units _grp;
    				};
    			} forEach donn_heliGrps;	
    			uiSleep 10;
    		};
    		diag_log "[COMBOIOS AEREOS] FIM.";
    	};
    	for "_cs" from 1 to (count _heliFormation) do {
    		diag_log ("[HELI CONVOY] Initialized Spawn! " + str _cs);
    		_heli_group = createGroup EAST;
    		donn_heliGrps = donn_heliGrps + [_heli_group];
    		_convoy = _heliFormation select (_cs-1);
    		_convoyH = _heliAltitude select (_cs-1);
    		_convoyS = _heliSpeed select (_cs-1);
    		_qtd = count _convoy;
    		_helis = [];
    		{_helis = _helis + [donn_heliConvy select _x];} forEach _convoy;
    		for "_n" from 1 to _qtd do {
    			private ["_firstDriver"];
    			_heli = _helis select (_n-1);
    			_flyHeight = _convoyH select (_n-1);
    			_motor = createVehicle [_heli select 0,_spawn,[],50,"FLY"];
    			{deleteVehicle _x;} forEach crew _motor;
    			_motor removeAllEventHandlers "handleDamage";
    			_motor addEventHandler ["handleDamage",{_this call donn_heli_HD}];
    			_motor setVariable ["dncmv",true,false];
    			_motor setVariable ["dnishp",true,true];
    			_motor setVariable ["dnishpq",_heli select 3,true];
    			_motor setFuel 1;
    			_motor setVehicleLock "LOCKED";
    			_motor flyInHeight _flyHeight;
    			_ammos = _heli select 2;
    			{_ammo = _x;for "_a" from 1 to 8 do {_motor addMagazineTurret [_ammo,[_forEachIndex]];};} forEach _ammos;
    			_driverCount = 1;
    			_turreterCount = count _ammos;
    			_cargorsCount = _heli select 1;
    			_crewCount = _driverCount + _turreterCount + _cargorsCount;
    			_gunnerPos = 0;
    			for "_y" from 1 to _crewCount do {
    				_unit = _heli_group createUnit ["TK_INS_Bonesetter_EP1",[50,50,0],[],50,"PRIVATE"];
    				_unit removeAllEventHandlers "killed";
    				_unit removeAllEventHandlers "handleDamage";
    				_unit addEventHandler ["killed",{_this call donn_heli_unitKill;}];
    				_unit addEventHandler ["handleDamage",{_this call donn_heli_unit_HD}];
    				[_unit] joinSilent _heli_group;
    				_unit setSkill 0.85;
    				removeAllWeapons _unit;
    				{_unit removeMagazine _x} forEach magazines _unit;
    				_unit addWeapon "RPK_74";
    				_unit selectWeapon "RPK_74";
    				for "_pa" from 1 to 2 do {_unit addMagazine "75Rnd_545x39_RPK";};			
    				if (_y == 1) then {
    					_unit assignAsDriver _motor;
    					_unit moveInDriver _motor;
    					_unit setSkill ["aimingAccuracy",0.65];
    				};
    				if (_y > 1 && _y <= 1 + _turreterCount) then {
    					_unit assignAsGunner _motor;
    					_unit moveInTurret [_motor,[_gunnerPos]];
    					_gunnerPos = _gunnerPos + 1;
    					_unit setSkill ["aimingAccuracy",1];
    				};
    				if (_y > 1 + _turreterCount) then {
    					_unit assignAsCargo _motor;
    					_unit moveInCargo _motor;
    					_unit setSkill ["aimingAccuracy",0.65];
    				};
    			};
    			{_x disableAi "TARGET";uiSleep 0.001;} forEach units _heli_group;
    			{_x disableAi "AUTOTARGET";uiSleep 0.001;} forEach units _heli_group;
    			_heli_group setCombatMode "BLUE";_heli_group setBehaviour "CARELESS";
    			_sphere = createVehicle ["Sign_sphere100cm_EP1",[0,0,0],[],0,"CAN_COLLIDE"];
    			_sphere attachTo [_motor,[0,0,3]];
    		};
    		[donn_hwps call BIS_fnc_selectRandom,_heli_group,_convoyS] call donn_makeAeroRoute;
    		uiSleep (60*20);
    	};
    };

    3 - Run the script bellow in client side, with execVM.

    s_colect_heli = -1;
    while {true} do {
    	_donn_cursorTarget = cursorTarget;
    	_objVar = _donn_cursorTarget getVariable ["dnishpq",0];
    	_isHeliLoot = false;
    	if (!isNil "_objVar") then {
    		if (_objVar > 0) then {
    			if (player distance _donn_cursorTarget < ((sizeOf typeOf _donn_cursorTarget)/2 + 4)) then {
    				_isHeliLoot = true;
    			};
    		};
    	};
    	if (_isHeliLoot) then {
    		if (s_colect_heli < 0) then {
    			_heliTxt = "Collect tragedy itens...";
    			if (alive _donn_cursorTarget) then {_heliTxt = "Collect heli itens!";};
    			s_colect_heli = player addaction[("<t color=""#6666bb"">" + _heliTxt + "</t>"),"andre_heliConvoy_itens.sqf",_donn_cursorTarget,5,false,true,"",""];
    		};
    	} else {
    		player removeAction s_colect_heli;
    		s_colect_heli = -1;
    	};
    	uiSleep 1.5;
    };

    4 - Put the script bellow in the root of your mission file, with the name andre_heliConvoy_itens.sqf.

    _motor = _this select 3;
    _qLoot = _motor getVariable "dnishpq";
    _loot1 = [
    	[["addWeaponCargoGlobal","Mk_48_DZ",[1,1,2]],["addMagazineCargoGlobal","100Rnd_762x51_M240",[1,2,3]]],	//Maried Loot
    	[["addWeaponCargoGlobal","M249_DZ",[1,1,2]],["addMagazineCargoGlobal","200Rnd_556x45_M249",[1,2,3]]],	//Maried Loot
    	[["addWeaponCargoGlobal","G36C",[1,1,2]],["addMagazineCargoGlobal","30Rnd_556x45_Stanag",[2,3,4]]],		//Maried Loot
    	[["addWeaponCargoGlobal","DMR_DZ",[1,1,2]],["addMagazineCargoGlobal","20Rnd_762x51_DMR",[3,4,5]]],		//Maried Loot
    	[["addWeaponCargoGlobal","AK_47_M",[1,1,2]],["addMagazineCargoGlobal","30Rnd_762x39_AK47",[2,3,4]]],	//Maried Loot
    	[["addWeaponCargoGlobal","NVGoggles",[2,3,4]]],
    	[["addWeaponCargoGlobal","ItemEtool",[2,3,4]]],
    	[["addWeaponCargoGlobal","Binocular_Vector",[2,3,4]]],
    	[["addMagazineCargoGlobal","ItemBloodBag",[6,8,10]]],
    	[["addMagazineCargoGlobal","PartEngine",[2,3,4]]],
    	[["addMagazineCargoGlobal","ItemBandage",[10,15,20]]],
    	[["addMagazineCargoGlobal","HandGrenade_West",[3,5,7]]],
    	[["addMagazineCargoGlobal","ItemBriefcase100oz",[1,1,2]]]
    ];
    if (_qLoot > 0) then {
    	for "_i" from 1 to _qLoot do {
    		_holder = createVehicle ["WeaponHolder",position player,[],1.5,"CAN_COLLIDE"];
    		{
    			call compile format [
    				"_holder %1 ['%2',%3];",
    				_x select 0,
    				_x select 1,
    				(_x select 2) call BIS_fnc_selectRandom
    			];
    		} forEach (_loot1 call BIS_fnc_selectRandom);
    	};
    	_motor setVariable ["dnishpq",0,true];
    };

    Thankyou to Tang0 for more details in the install instructions:

  7. Some shots here: http://matadouro.forumeiro.com/t17-comboios-aereos-estagio-avancado#74

    - Helis with Gunner
    - Helis without Gunner
    - Helis hover above ground to release soldiers
    - If the Helis broke in air, soldiers jump from it to try to save their lifes
    - If the pilot dies in air, soldiers jump from the heli
    - Not all the soldiers have parachute :O
    - Helis only engage on you if you mess with then
    - If a comvoy engage on you, you can hide or run away to try to make then disengage

    - The Helis have loot even if they are destroyed
     

×
×
  • Create New...