Guest User

Untitled

a guest
Jan 13th, 2018
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 17.85 KB | None | 0 0
  1. //===========================================
  2. //THIS VERSION IS FOR ARMA 2: ANDRE CONVOYS
  3. //===========================================
  4. //By Donnovan from Brazil
  5. //===========================================
  6.  
  7. if (isServer) then {
  8. //=======================
  9. //BASIC KONFIGURATION 1!
  10. //=======================
  11.  
  12. //Vehicles: Its ok to repeate the same car with different configuration.
  13. donn_carsConvy = [
  14. ["M113_TK_EP1",4,["100Rnd_127x99_M2"]],
  15. ["Offroad_DSHKM_Gue",2,["150Rnd_127x107_DSHKM"]],
  16. ["Ikarus_TK_CIV_EP1",7,[]]
  17. ];
  18.  
  19. //Soldier of the Convoys (all the soldiers are the same)
  20. donn_soldierSkin = ["Soldier_Bodyguard_AA12_PMC"];
  21.  
  22. //=======================
  23. //BASIC KONFIGURATION 2!
  24. //=======================
  25.  
  26. //CONVOY CONFIGURATION
  27.  
  28. //Time between each consecutive spawn
  29. _timeBetweenSpawns = 60 * 7;
  30.  
  31. //Cars in each convoy (refere to donn_carsConvy)
  32. _convoyFormation = [
  33. [1],
  34. [1],
  35. [0,1],
  36. [2,1],
  37. [0],
  38. [2]
  39. ];
  40.  
  41. //Crew Skill (driver, cargors and turreters)
  42. _generalSkill = 1.0; //All skills, except ain skill, for all AI
  43. _driverManAin = 1.0; //Ain of the driver, from 0 to 1
  44. _cargoMansAin = 1.0; //Ain of the cargo ocupants, from 0 to 1
  45. _turretMansAin = 0.8; //Ain ot the turret operators, from 0 to 1
  46.  
  47. //SMART BOMBER MAN CONFIG - Percentage of bomberman AI in car disembarks: 0 is 0% and 1 is 100%
  48. //Those bombermans will fight and run to the player in the first oportunity
  49. //0.25 means 1 smart bomber each 4 vehicle disembark (1/0.25 = 4)
  50. donn_fighterBomberManPerc = 0.1;
  51. donn_fighterBomberIndicator = true; //indicates the fighter bombers with a small sphere above their heads
  52.  
  53. //SMART BOMBER MAN CONFIG - Percentage of bomberman AI in car disembarks: 0 is 0% and 1 is 100%
  54. //Those bomberman will not fight and search for a player to explode right after disembark
  55. //0.2 means 1 runner bomber each 5 vehicle disembark (1/0.2 = 5)
  56. donn_runnerBomberManPerc = 1;
  57. donn_runnerBomberIndicator = true; //indicates the runner bombers with a small sphere above their heads
  58.  
  59. //ICONS SETTINGS
  60. _showMapIcons = false; //Show spawn, convoy and AI icons on map?
  61. _showMapIconsOnlyWhenNotInWar = false; //Hide convoy icons when they enter in war, so the fight is not spoted.
  62. _showCrewNumber = false; //Show crew number on the vehicle icon on map? (runner bombers don't count as vehicle crew)
  63.  
  64. //SPECIAL REWARDS
  65. //Special kill (main char kill or combo kill) reward in gold or coins? Use false to gold / true to coins.
  66. _useCoinsReward = true;
  67. //Special Reward Array: _xxxxxRewards = [kill reward,son of general kill reward,extra for each combo kill];
  68. donn_coinRewards = [1000,4000,1000];
  69. donn_goldRewards = [["ItemSilverBar",0],["ItemGoldBar10oz",1],["ItemGoldBar",1]];
  70.  
  71. //HUMANITY GAIN
  72. //How much humnity to gain for each AI kill?
  73. donn_humanityGainForKill = 50;
  74. //Bellow this value you is in the Bandit Way so donn_humanityGainForKill will subtract to your humanity
  75. //Above this value you is in the Hero Way so donn_humanityGainForKill will add to your humanity
  76. donn_humanityZeroScale = 2500;
  77.  
  78. //OTHER SETTINGS
  79. donn_aiCarVulnerable = true; //false or 0 is INVUNERABLE true or 1 is VULNERABLE
  80. _donn_delete_body_time = 2400; //Time in seconds to delete a dead AI body
  81. _lootCutter = 2; //Number of loot piles in veh are divided by this number (minimum of 1 loot pile)
  82.  
  83. //====================
  84. //MAP CONFIGURATION
  85. //====================
  86.  
  87. //VEHICLES SPAWN: [[vehicle spawn position],[nothing],spawn angle,spawn radius]
  88.  
  89. //CHERNARUS SPAWNS
  90. _spawns = [
  91. [[11046,9015,0.1],[],174,15],
  92. [[11356,14327,0.1],[],160,15],
  93. [[13428.2,12174.7,0.1],[],200,15],
  94. [[16045.8,15612.8,0.1],[],265,15],
  95. [[4988,14867,0.1],[],87,15],
  96. [[3433,7512.5,0.1],[],310,15],
  97. [[9344,5211,0.1],[],352,15],
  98. [[4980,8169,0.1],[],136,15]
  99. ];
  100.  
  101. //=====================
  102. //EXTRA KONFIGURATION!
  103. //=====================
  104.  
  105. //LOOT IN VEHICLE
  106. _loot1 = [
  107. [["addWeaponCargoGlobal","Mk48_DZ",[2,1,2]],["addMagazineCargoGlobal","100Rnd_762x51_M240",[1,2,3]]], //Maried Loot
  108. [["addWeaponCargoGlobal","M249_DZ",[2,2,2]],["addMagazineCargoGlobal","200Rnd_556x45_M249",[1,2,3]]], //Maried Loot
  109. [["addWeaponCargoGlobal","G36K_Camo_DZ",[1,1,2]],["addMagazineCargoGlobal","30Rnd_556x45_Stanag",[2,3,4]]], //Maried Loot
  110. [["addWeaponCargoGlobal","DMR_DZ",[1,3,2]],["addMagazineCargoGlobal","20Rnd_762x51_DMR",[3,4,5]]], //Maried Loot
  111. [["addWeaponCargoGlobal","AKM_DZ",[5,1,2]],["addMagazineCargoGlobal","30Rnd_762x39_AK47",[2,3,4]]], //Maried Loot
  112. [["addWeaponCargoGlobal","NVGoggles",[3,4,5]]],
  113. [["addWeaponCargoGlobal","ItemEtool",[3,4,5]]],
  114. [["addWeaponCargoGlobal","Binocular_Vector",[2,3,4]]],
  115. [["addMagazineCargoGlobal","ItemBloodBag",[8,12,16]]],
  116. [["addMagazineCargoGlobal","PartEngine",[5,7,9]]],
  117. [["addMagazineCargoGlobal","ItemBandage",[20,25,30]]],
  118. [["addMagazineCargoGlobal","HandGrenade_West",[6,10,14]]],
  119. [["addMagazineCargoGlobal","ItemBriefcase100oz",[1,1,1]]],
  120. [["addMagazineCargoGlobal","ItemBriefcase100oz",[1,2,2]]]
  121. ];
  122.  
  123. //AI WEAPONS & AMMO
  124. _donn_weapons = [
  125. ["Mk48_DZ","100Rnd_762x51_M240"],
  126. ["M249_DZ","200Rnd_556x45_M249"],
  127. ["M240_DZ","100Rnd_762x51_M240"],
  128. ["G36K_Camo_DZ","30Rnd_556x45_Stanag"],
  129. ["G36A_Camo_DZ","30Rnd_556x45_Stanag"],
  130. ["G36C_camo","30Rnd_556x45_Stanag"],
  131. ["AKM_DZ","30Rnd_762x39_AK47"],
  132. ["DMR_DZ","20Rnd_762x51_DMR"],
  133. ["RPK74_DZ","75Rnd_545x39_RPK"]
  134. ];
  135.  
  136. //=========================
  137. //END OF KONFIGURATION
  138. //=========================
  139.  
  140. //==============================================================================================================
  141. //==============================================================================================================
  142. //==============================================================================================================
  143. //==============================================================================================================
  144.  
  145. //Avoid Vehicles to Explode when Entering it
  146. waitUntil {sleep 2;!isNil "DZE_safeVehicle"};
  147. _cascaVehicles = [];
  148. {
  149. _car = _x select 0;
  150. if !(_car in _cascaVehicles) then {
  151. _cascaVehicles = _cascaVehicles + [_car];
  152. };
  153. } forEach donn_carsConvy;
  154. DZE_safeVehicle = DZE_safeVehicle + _cascaVehicles;
  155.  
  156. //Generate Functions
  157. call compile preprocessFileLineNumbers "scripts\andreconvoy\andre_convoy_functions.sqf";
  158.  
  159. //Set Type of Kill Reward (Coins or Gold)
  160. if (_useCoinsReward) then {donn_cleanUnit = donn_cleanUnitCoins;} else {donn_cleanUnit = donn_cleanUnitGold;};
  161.  
  162. //Find Waypoints: Automatic find street waypoints
  163. donn_wps = [1200] call donn_find_intersections;
  164.  
  165. //Show Spawn Icons on Map / refuel Vehicles / Show convoy icons on map
  166. donn_motor = [];
  167. donn_units_motor = [];
  168. donn_units_delete = [];
  169. if (_showMapIcons) then {
  170. [_spawns,_showCrewNumber,_donn_delete_body_time] spawn {
  171. //Convoy Icons on Map Iniciate variables
  172. _showCrewNumber = _this select 1;
  173. _donn_delete_body_time = _this select 2;
  174. _add = [];
  175. _remove = [];
  176. _update = [];
  177. _donn_units_motor_icon_old = [];
  178. //Add Icon Function
  179. _addIcon = {
  180. _iName = _this select 0;
  181. _iPos = _this select 1;
  182. _iColor = _this select 2;
  183. _iText = _this select 3;
  184. _mark = createMarker [_iName, _iPos];
  185. _mark setMarkerColor _iColor;
  186. _mark setMarkerShape "Icon";
  187. _mark setMarkerType "mil_dot";
  188. _mark setMarkerText _iText;
  189. };
  190.  
  191. //Spawn icons on map iniciate variables
  192. _spawns = _this select 0;
  193. _donn_casca_icons = [];
  194. {_donn_casca_icons = _donn_casca_icons + [[_x select 0,"NAT ARMY" + str (_forEachIndex + 1)]];} forEach _spawns;
  195.  
  196. //While: Spawn icons / Convoy Icons / Refuel
  197. _sleep_a = 0;
  198. _sleep_b = 0;
  199. _sleep_c = 0;
  200. while {true} do {
  201. //Spawn Icons Add
  202. if (_sleep_a == 0) then {
  203. {
  204. _mark = createMarker ["Donn_Spawn_" + str _forEachIndex, _x select 0];
  205. _mark setMarkerShape "Icon";
  206. _mark setMarkerText (_x select 1);
  207. _mark setMarkerType "mil_dot";
  208. _mark setMarkerColor "ColorPink";
  209. } forEach _donn_casca_icons;
  210. };
  211.  
  212. //Refual Vehicles each 100 seconds and delete dead AI body
  213. if (_sleep_b >= 100) then {
  214. _sleep_b = 0;
  215.  
  216. //Refuel
  217. {_x setFuel 1;} forEach donn_motor;
  218.  
  219. //Delete AI dead body
  220. {
  221. _unit = _x select 0;
  222. _dieTime = _x select 1;
  223. if (!isNull _unit) then {
  224. if (time - _dieTime > _donn_delete_body_time) then {
  225. _unit call donn_AI_deleteBody;
  226. };
  227. };
  228. } forEach donn_units_delete;
  229. };
  230.  
  231. //Convoy Icons
  232. {
  233. deleteMarker vehicleVarName _x;
  234. } forEach _remove;
  235. {
  236. _color = "";
  237. if (_x isKindOf "LandVehicle") then {
  238. if (_x getVariable ["donn_tu",false]) then {_color = "ColorRed";} else {_color = "ColorBlue";};
  239. } else {
  240. _color = "ColorYellow";
  241. };
  242. _array = [vehicleVarName _x,position _x,_color,""];
  243. _array call _addIcon;
  244. } forEach _add;
  245. {
  246. _posXY = position _x;
  247. _marker = vehicleVarName _x;
  248. _marker setMarkerPos (getPosATL _x);
  249. if (_x isKindOf "LandVehicle") then {
  250. if (_showCrewNumber) then {_marker setMarkerText str ({alive _x} count crew _x);};
  251. };
  252.  
  253. } forEach _update;
  254. _donn_units_motor_icon = [];
  255. _vehIcon = [];
  256. {
  257. if !((group _x) getVariable ["donn_inWar",false]) then {
  258. _veh = vehicle _x;
  259. _assigned = assignedVehicle _x;
  260. if (_veh != _x) then {
  261. if !(_veh in _vehIcon) then {
  262. _vehIcon = _vehIcon + [_veh];
  263. _donn_units_motor_icon = _donn_units_motor_icon + [_veh];
  264. };
  265. } else {
  266. _donn_units_motor_icon = _donn_units_motor_icon + [_x];
  267. };
  268. if !(_assigned in _vehIcon) then {
  269. _vehIcon = _vehIcon + [_assigned];
  270. _donn_units_motor_icon = _donn_units_motor_icon + [_assigned];
  271. };
  272. };
  273.  
  274. } forEach donn_units_motor;
  275. if (_sleep_c >= 20) then {
  276. _add = _donn_units_motor_icon;
  277. _remove = _donn_units_motor_icon_old;
  278. _donn_units_motor_icon_old = _donn_units_motor_icon;
  279. _sleep_c = 0;
  280. } else {
  281. _add = _donn_units_motor_icon - _donn_units_motor_icon_old;
  282. _remove = _donn_units_motor_icon_old - _donn_units_motor_icon;
  283. _update = _donn_units_motor_icon - _add;
  284. _donn_units_motor_icon_old = _donn_units_motor_icon;
  285. };
  286.  
  287. //Sleep Divisor of all
  288. _sleepTime = 4.0;
  289. uiSleep _sleepTime;
  290. _sleep_a = _sleep_a + _sleepTime;
  291. _sleep_b = _sleep_b + _sleepTime;
  292. _sleep_c = _sleep_c + _sleepTime;
  293.  
  294. //Spawn Icons Remove
  295. if (_sleep_a == 15) then {
  296. _sleep_a = 0;
  297. {deleteMarker ("Donn_Spawn_" + str _forEachIndex);} forEach _donn_casca_icons;
  298. };
  299. };
  300. };
  301. } else {
  302. //Refual Vehicles each 100 seconds and Check for AI body delete
  303. _donn_delete_body_time spawn {
  304. while {true} do {
  305. _donn_delete_body_time = _this;
  306.  
  307. //Refuel
  308. {_x setFuel 1;} forEach donn_motor;
  309.  
  310. //Delete AI dead body
  311. {
  312. _unit = _x select 0;
  313. _dieTime = _x select 1;
  314. if (!isNull _unit) then {
  315. if (time - _dieTime > _donn_delete_body_time) then {
  316. _unit call donn_AI_deleteBody;
  317. };
  318. };
  319. } forEach donn_units_delete;
  320. uiSleep 100;
  321. };
  322. };
  323. };
  324.  
  325. donn_godModeMult = 0;
  326. if (donn_aiCarVulnerable) then {donn_godModeMult = 1;};
  327.  
  328. //Safe Sleep
  329. sleep 10;
  330.  
  331. //Spawn Casca Units/Cars
  332. for "_cs" from 1 to (count _convoyFormation) do {
  333. diag_log ("[CASCA CONVOY] Initialized Spawn! " + str _cs);
  334.  
  335. //Inicialization
  336. _spawn = _spawns select ((_cs + ((count _spawns)-1)) mod (count _spawns));
  337. _origin = _spawn select 0;
  338. _rad = _spawn select 3;
  339. _rosa_group = createGroup EAST;
  340. _convoy = _convoyFormation select (_cs-1);
  341. _behaviorSafe = "CARELESS";
  342. _speed = "NORMAL";
  343. _qtd = count _convoy;
  344. _cars = [];
  345. {
  346. _cars = _cars + [donn_carsConvy select _x];
  347. } forEach _convoy;
  348. for "_n" from 1 to _qtd do {
  349. private ["_firstDriver"];
  350.  
  351. //Spawn Car
  352. _car = _cars select (_n - 1);
  353. _motor = createVehicle [_car select 0,_origin,[],_rad,"NONE"];
  354. _motor allowDamage donn_aiCarVulnerable;
  355. _motor setVehicleVarName ("CASCA_CAR_" + str _cs + "_" + str _n);
  356. _motorID = str(round(random 999999));
  357. _motor setVariable ["ObjectID",_motorID,true];
  358. _motor setVariable ["ObjectUID",_motorID,true];
  359. //PVDZE_serverObjectMonitor set [count PVDZE_serverObjectMonitor,_motor];
  360. _motor setVariable ["car_group",_rosa_group,false];
  361. _motor removeAllEventHandlers "HandleDamage";
  362. _motor addEventHandler ["HandleDamage",{_this call donn_casca_veh_HD;(_this select 2)*donn_godModeMult}];
  363. _motor setDir (_spawn select 2);
  364. _motor setFuel 1;
  365. donn_motor = donn_motor + [_motor];
  366. _motor addEventHandler ["GetIn",{_this call donn_casca_getIn;}];
  367. _motor addEventHandler ["GetOut",{_this call donn_casca_getOut;}];
  368.  
  369. //Add Vehicle Ammo
  370. _ammos = _car select 2;
  371. if (count _ammos > 0) then {
  372. [_ammos,_motor,"add"] call donn_cascar_tuAmmo;
  373. _motor setVariable ["donn_tu",true,true];
  374. };
  375.  
  376. //count Crew
  377. _driverCount = 1;
  378. _turreterCount = count _ammos;
  379. _cargorsCount = _car select 1;
  380. _crewCount = _driverCount + _turreterCount + _cargorsCount;
  381.  
  382. //Put Loot in the Car
  383. clearWeaponCargoGlobal _motor;
  384. clearMagazineCargoGlobal _motor;
  385. {
  386. {call compile format ["_motor %1 ['%2',%3];",_x select 0,_x select 1,_x select 2 select ((_qtd - 1) min 2)];} forEach _x;
  387. } forEach ([_loot1,ceil (_crewCount/_lootCutter)] call donn_selectLoot);
  388.  
  389. //Spawn Soldiers
  390. _gunnerPos = 0;
  391. for "_y" from 1 to _crewCount do {
  392.  
  393. //Create Soldier
  394. _skin = donn_soldierSkin call BIS_fnc_selectRandom;
  395. _unit = _rosa_group createUnit [_skin,[50,50,50],[],50,"PRIVATE"];
  396. _unit setVehicleVarName ("CASCA_AI_" + str _cs + "_" + str _n + "_" + str _y);
  397. [_unit] joinSilent _rosa_group;
  398. //_unit addEventHandler ["Killed",{_this call donn_cleanUnit;}];
  399. _unit setVariable ["bodyName","unknown",true];
  400. _unit addEventHandler ["HandleDamage",{_this call donn_casca_unit_HD}];
  401. donn_units_motor = donn_units_motor + [_unit];
  402. _unit disableAi "TARGET";
  403. _unit disableAi "AUTOTARGET";
  404.  
  405. //Give Soldier Weapon and Ammo
  406. removeAllWeapons _unit;
  407. {_unit removeMagazine _x} forEach magazines _unit;
  408. _weap_mag = _donn_weapons call BIS_fnc_selectRandom;
  409. _weapon = _weap_mag select 0;
  410. _magazine = _weap_mag select 1;
  411. _unit addWeapon _weapon;
  412. _unit selectWeapon _weapon;
  413. for "_pa" from 1 to (ceil (1 + random 2)) do {
  414. _unit addMagazine _magazine;
  415. };
  416.  
  417. //Put AI in the car
  418. if (_y == 1) then {
  419. //Driver
  420. _unit assignAsDriver _motor;
  421. _unit moveInDriver _motor;
  422. _unit setSkill _generalSkill;
  423. _unit setSkill ["aimingAccuracy",_driverManAin];
  424. };
  425. if (_y > 1 && _y <= 1 + _turreterCount) then {
  426. //Turreters
  427. _unit assignAsGunner _motor;
  428. _unit moveInTurret [_motor,[_gunnerPos]];
  429. _unit setSkill _generalSkill;
  430. _unit setSkill ["aimingAccuracy",_turretMansAin];
  431. _gunnerPos = _gunnerPos + 1;
  432. };
  433. if (_y > 1 + _turreterCount) then {
  434. //Cargors
  435. _unit assignAsCargo _motor;
  436. _unit moveInCargo _motor;
  437. _unit setSkill _generalSkill;
  438. _unit setSkill ["aimingAccuracy",_cargoMansAin];
  439. };
  440. };
  441. _rosa_group setCombatMode "BLUE";
  442. _rosa_group setBehaviour _behaviorSafe;
  443. _rosa_group setVariable ["donn_pshot",false,false];
  444. _rosa_group setVariable ["donn_inWar",false,false];
  445. {_x allowFleeing 0} forEach units _rosa_group;
  446. {[_x] allowGetIn true;sleep 0.2;} forEach units _rosa_group;
  447. {[_x] orderGetIn true;sleep 0.2;} forEach units _rosa_group;
  448. };
  449.  
  450. //Make Units leave or Embark car
  451. [_rosa_group,_behaviorSafe] spawn {
  452. _rosa_group = _this select 0;
  453. _behaviorSafe = _this select 1;
  454. _noHurtTime = 0;
  455. _tm = 1;
  456. _targetOff = true;
  457. while {!isNil "_rosa_group"} do {
  458. _newHurt = _rosa_group getVariable ["donn_pshot",false];
  459. if (isNil "_newHurt") then {_newHurt = false;};
  460. if (_newHurt) then {
  461. _noHurtTime = 0;
  462. _rosa_group setVariable ["donn_pshot",false,false];
  463. if (_targetOff) then {
  464. _targetOff = false;
  465. _rosa_group setVariable ["donn_inWar",true,false];
  466. {_x enableAi "TARGET";sleep 0.025;} forEach units _rosa_group;
  467. {_x enableAi "AUTOTARGET";sleep 0.025;} forEach units _rosa_group;
  468. sleep 0.5;
  469. _rosa_group setBehaviour "COMBAT";
  470. _rosa_group setCombatMode "RED";
  471. sleep 0.5;
  472. _turreters = [];
  473. {if ((assignedVehicleRole _x) select 0 == "Turret") then {_turreters = _turreters + [_x];};} forEach units _rosa_group;
  474. _leaveToFight = (units _rosa_group) - _turreters;
  475. {[_x] orderGetIn false;sleep 0.05;} forEach _leaveToFight;
  476. {[_x] allowGetIn false;sleep 0.05;} forEach _leaveToFight;
  477. _tm = 15;
  478. };
  479. } else {
  480. _noHurtTime = _noHurtTime + _tm;
  481. if (_noHurtTime > 120) then {
  482. _noDangerFell = true;
  483. {if (_rosa_group knowsAbout _x > 0) exitWith {_noDangerFell = false;};} forEach playableUnits;
  484. if (_noDangerFell) then {
  485. _targetOff = true;
  486. _rosa_group setVariable ["donn_inWar",false,false];
  487. {_x disableAi "TARGET";} forEach units _rosa_group;
  488. {_x disableAi "AUTOTARGET";} forEach units _rosa_group;
  489. sleep 1;
  490. _rosa_group setBehaviour _behaviorSafe;
  491. _rosa_group setCombatMode "BLUE";
  492. sleep 2;
  493. {[_x] allowGetIn true;sleep 0.2;} forEach units _rosa_group;
  494. {[_x] orderGetIn true;sleep 0.2;} forEach units _rosa_group;
  495. _tm = 1;
  496. };
  497. };
  498. };
  499. sleep _tm;
  500. };
  501. };
  502.  
  503. //Make Convoy Route
  504. [_spawn select 0,_rosa_group,_speed,donn_wps] call donn_makeroute;
  505.  
  506. //Sleep Before Next Spawn
  507. sleep _timeBetweenSpawns;
  508. };
  509. };
Advertisement
Add Comment
Please, Sign In to add comment