fn_handleItem.sqf 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499
  1. /*
  2. @version: 1.3
  3. @file_name: fn_handleItem.sqf
  4. @file_author: TAW_Tonic
  5. @file_edit: 6/22/2013
  6. @file_description: Handles the incoming requests and adds or removes it, returns true if operation done sucessfully or false for failing.
  7. */
  8. private["_item","_details","_bool","_ispack","_items","_isgun","_ongun","_override"];
  9. _item = _this select 0;
  10. _bool = _this select 1;
  11. _ispack = if(isNil {_this select 2}) then {false} else {_this select 2};
  12. _ongun = if(isNil {_this select 3}) then {false} else {_this select 3};
  13. _override = if(isNil {_this select 4}) then {false} else {_this select 4};
  14. _gear = str([] call VAS_fnc_fetchPlayerGear);
  15. _isgun = false;
  16. _details = [_item] call VAS_fnc_fetchCfgDetails;
  17. if(count _details == 0) exitWith {};
  18. if(
  19. (_item in VAS_r_weapons) OR (_item in VAS_r_backpacks) OR (_item in VAS_r_magazines) OR (_item in VAS_r_items) OR (_item in VAS_r_glasses) OR
  20. ((_details select 13) in VAS_r_weapons) OR ((_details select 13) in VAS_r_backpacks) OR ((_details select 13) in VAS_r_magazines) OR ((_details select 13) in VAS_r_items) OR ((_details select 13) in VAS_r_glasses)
  21. ) exitWith {systemChat format["%1 is a restricted item and will be not added.",(_details select 1)];};
  22. if(_bool) then
  23. {
  24. switch((_details select 6)) do
  25. {
  26. case "CfgGlasses":
  27. {
  28. if(goggles player != "") then
  29. {
  30. removeGoggles player;
  31. };
  32. player addGoggles _item;
  33. };
  34. case "CfgVehicles":
  35. {
  36. if(backpack player != "") then
  37. {
  38. _items = (backpackItems player);
  39. removeBackpack player;
  40. };
  41. player addBackpack _item;
  42. if(!isNil {_items}) then
  43. {
  44. {[_x,true,true,false,true] spawn VAS_fnc_handleItem; } foreach _items;
  45. };
  46. };
  47. case "CfgMagazines":
  48. {
  49. if(_ispack) then
  50. {
  51. (unitBackpack player) addMagazineCargoGlobal [_item,1];
  52. }
  53. else
  54. {
  55. player addMagazine _item;
  56. };
  57. };
  58. case "CfgWeapons":
  59. {
  60. if((_details select 4) in [1,2,4,5,4096]) then
  61. {
  62. if((_details select 4) == 4096) then
  63. {
  64. if((_details select 5) == -1) then
  65. {
  66. _isgun = true;
  67. };
  68. }
  69. else
  70. {
  71. _isgun = true;
  72. };
  73. };
  74. if(_isgun) then
  75. {
  76. if(!_ispack && _override) exitWith {}; //It was in the vest/uniform, try to close to prevent it overriding stuff... (Actual weapon and not an item)
  77. if(_item == "MineDetector") then
  78. {
  79. player addItem _item;
  80. }
  81. else
  82. {
  83. if(_ispack) then
  84. {
  85. if(backpack player != "") then {(unitBackpack player) addWeaponCargoGlobal [_item,1];};
  86. }
  87. else
  88. {
  89. player addWeapon _item;
  90. };
  91. };
  92. }
  93. else
  94. {
  95. switch(_details select 5) do
  96. {
  97. case 0:
  98. {
  99. if(_ispack) then
  100. {
  101. (unitBackpack player) addItemCargoGlobal [_item,1];
  102. }
  103. else
  104. {
  105. if(_override) then
  106. {
  107. player addItem _item;
  108. }
  109. else
  110. {
  111. if(_item in (assignedItems player)) then
  112. {
  113. player addItem _item;
  114. }
  115. else
  116. {
  117. player addItem _item;
  118. player assignItem _item;
  119. };
  120. };
  121. };
  122. };
  123. case 605:
  124. {
  125. if(_ispack) then
  126. {
  127. (unitBackpack player) addItemCargoGlobal [_item,1];
  128. }
  129. else
  130. {
  131. if(_override) then
  132. {
  133. player addItem _item;
  134. }
  135. else
  136. {
  137. if(headGear player == _item) then
  138. {
  139. player addItem _item;
  140. }
  141. else
  142. {
  143. if(headGear player != "") then
  144. {
  145. removeHeadGear player;
  146. };
  147. player addHeadGear _item;
  148. };
  149. };
  150. };
  151. };
  152. case 801:
  153. {
  154. if(_ispack) then
  155. {
  156. (unitBackpack player) addItemCargoGlobal [_item,1];
  157. }
  158. else
  159. {
  160. if(_override) then
  161. {
  162. player addItem _item;
  163. }
  164. else
  165. {
  166. if(uniform player == _item) then
  167. {
  168. player addItem _item;
  169. }
  170. else
  171. {
  172. if(uniform player != "") then
  173. {
  174. _items = uniformItems player;
  175. removeUniform player;
  176. };
  177. player addUniform _item;
  178. if(!isNil {_items}) then
  179. {
  180. {[_x,true,nil,false,true] spawn VAS_fnc_handleItem;} foreach _items;
  181. };
  182. };
  183. };
  184. };
  185. };
  186. case 701:
  187. {
  188. if(_ispack) then
  189. {
  190. (unitBackpack player) addItemCargoGlobal [_item,1];
  191. }
  192. else
  193. {
  194. if(_override) then
  195. {
  196. player addItem _item;
  197. }
  198. else
  199. {
  200. if(vest player == _item) then
  201. {
  202. player addItem _item;
  203. }
  204. else
  205. {
  206. if(vest player != "") then
  207. {
  208. _items = vestItems player;
  209. removeVest player;
  210. };
  211. player addVest _item;
  212. if(!isNil {_items}) then
  213. {
  214. {[_x,true,nil,false,true] spawn VAS_fnc_handleItem;} foreach _items;
  215. };
  216. };
  217. };
  218. };
  219. };
  220. case 201:
  221. {
  222. if(_ispack) then
  223. {
  224. (unitBackpack player) addItemCargoGlobal [_item,1];
  225. }
  226. else
  227. {
  228. private["_type"];
  229. _type = [_item,201] call VAS_fnc_accType;
  230. if(_ongun) then
  231. {
  232. switch (_type) do
  233. {
  234. case 1: { player addPrimaryWeaponItem _item; };
  235. case 2: { player addSecondaryWeaponItem _item; };
  236. case 3: { player addHandgunItem _item; };
  237. };
  238. }
  239. else
  240. {
  241. if(_override) then
  242. {
  243. player addItem _item;
  244. }
  245. else
  246. {
  247. createDialog "VAS_prompt";
  248. waitUntil {!isNil {vas_prompt_choice}};
  249. if(vas_prompt_choice) then
  250. {
  251. switch (_type) do
  252. {
  253. case 1: { player addPrimaryWeaponItem _item; };
  254. case 2: { player addSecondaryWeaponItem _item; };
  255. case 3: { player addHandgunItem _item; };
  256. };
  257. }
  258. else
  259. {
  260. player addItem _item;
  261. };
  262. vas_prompt_choice = nil;
  263. };
  264. };
  265. };
  266. };
  267. case 301:
  268. {
  269. if(_ispack) then
  270. {
  271. (unitBackpack player) addItemCargoGlobal [_item,1];
  272. }
  273. else
  274. {
  275. private["_type"];
  276. _type = [_item,301] call VAS_fnc_accType;
  277. if(_ongun) then
  278. {
  279. switch (_type) do
  280. {
  281. case 1: { player addPrimaryWeaponItem _item; };
  282. case 2: { player addSecondaryWeaponItem _item; };
  283. case 3: { player addHandgunItem _item; };
  284. };
  285. }
  286. else
  287. {
  288. if(_override) then
  289. {
  290. player addItem _item;
  291. }
  292. else
  293. {
  294. createDialog "VAS_prompt";
  295. waitUntil {!isNil {vas_prompt_choice}};
  296. if(vas_prompt_choice) then
  297. {
  298. switch (_type) do
  299. {
  300. case 1: { player addPrimaryWeaponItem _item; };
  301. case 2: { player addSecondaryWeaponItem _item; };
  302. case 3: { player addHandgunItem _item; };
  303. };
  304. }
  305. else
  306. {
  307. player addItem _item;
  308. };
  309. vas_prompt_choice = nil;
  310. };
  311. };
  312. };
  313. };
  314. case 101:
  315. {
  316. if(_ispack) then
  317. {
  318. (unitBackpack player) addItemCargoGlobal [_item,1];
  319. }
  320. else
  321. {
  322. private["_type"];
  323. _type = [_item,101] call VAS_fnc_accType;
  324. if(_ongun) then
  325. {
  326. switch (_type) do
  327. {
  328. case 1: { player addPrimaryWeaponItem _item; };
  329. case 2: { player addSecondaryWeaponItem _item; };
  330. case 3: { player addHandgunItem _item; };
  331. };
  332. }
  333. else
  334. {
  335. if(_override) then
  336. {
  337. player addItem _item;
  338. }
  339. else
  340. {
  341. createDialog "VAS_prompt";
  342. waitUntil {!isNil {vas_prompt_choice}};
  343. if(vas_prompt_choice) then
  344. {
  345. switch (_type) do
  346. {
  347. case 1: { player addPrimaryWeaponItem _item; };
  348. case 2: { player addSecondaryWeaponItem _item; };
  349. case 3: { player addHandgunItem _item; };
  350. };
  351. }
  352. else
  353. {
  354. player addItem _item;
  355. };
  356. vas_prompt_choice = nil;
  357. };
  358. };
  359. };
  360. };
  361. default
  362. {
  363. if(_ispack) then
  364. {
  365. (unitBackpack player) addItemCargoGlobal [_item,1];
  366. }
  367. else
  368. {
  369. if(_item == "NVGoggles") then
  370. {
  371. player addItem _item;
  372. player assignItem _item;
  373. }
  374. else
  375. {
  376. player addItem _item;
  377. };
  378. };
  379. };
  380. };
  381. };
  382. };
  383. };
  384. }
  385. else
  386. {
  387. switch((_details select 6)) do
  388. {
  389. case "CfgVehicles":
  390. {
  391. removeBackpack player;
  392. };
  393. case "CfgMagazines":
  394. {
  395. player removeMagazine _item;
  396. };
  397. case "CfgGlasses":
  398. {
  399. removeGoggles player;
  400. };
  401. case "CfgWeapons":
  402. {
  403. if((_details select 4) in [1,2,4,5,4096]) then
  404. {
  405. if((_details select 4) == 4096) then
  406. {
  407. if(isNil {(_details select 5)}) then
  408. {
  409. _isgun = true;
  410. };
  411. }
  412. else
  413. {
  414. _isgun = true;
  415. };
  416. };
  417. if(_isgun) then
  418. {
  419. switch(true) do
  420. {
  421. case (primaryWeapon player == _item) : {_ispack = false;};
  422. case (secondaryWeapon player == _item) : {_ispack = false;};
  423. case (handGunweapon player == _item) : {_ispack = false;};
  424. case (_item in assignedItems player) : {_ispack = false;};
  425. default {_ispack = true;};
  426. };
  427. if(_item == "MineDetector") then
  428. {
  429. player removeItem _item;
  430. }
  431. else
  432. {
  433. if(_ispack) then
  434. {
  435. _items = (backpackItems player);
  436. _index = _items find _item;
  437. if(_index != -1) then
  438. {
  439. _items set[_index,-1];
  440. _items = _items - [-1];
  441. };
  442. clearWeaponCargo (unitBackpack player);
  443. if(count _items > 0) then
  444. {
  445. {[_x,true,true,nil,nil] spawn VAS_fnc_handleItem;} foreach _items;
  446. };
  447. }
  448. else
  449. {
  450. player removeWeapon _item;
  451. };
  452. };
  453. }
  454. else
  455. {
  456. switch((_details select 5)) do
  457. {
  458. case 0: {player unassignItem _item; player removeItem _item;};
  459. case 605: {if(headGear player == _item) then {removeHeadgear player} else {player removeItem _item};};
  460. case 801: {if(uniform player == _item) then {removeUniform player} else {player removeItem _item};};
  461. case 701: {if(vest player == _item) then {removeVest player} else {player removeItem _item};};
  462. default
  463. {
  464. switch (true) do
  465. {
  466. case (_item in (primaryWeaponItems player)) : {player removePrimaryWeaponItem _item;};
  467. case (_item in (handgunItems player)) : {player removeHandgunItem _item;};
  468. case (_item == "NVGoggles") : {player unassignItem _item; player removeItem _item;};
  469. default {player removeItem _item;};
  470. };
  471. };
  472. };
  473. };
  474. };
  475. };
  476. };