Advertisement
Guest User

Untitled

a guest
Apr 11th, 2023
39
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 23.57 KB | None | 0 0
  1. #include "..\..\script_macros.hpp"
  2. /*
  3. File: fn_handleItem.sqf
  4. Author: Bryan "Tonic" Boardwine
  5.  
  6. Description
  7. Main gear handling functionality.
  8. */
  9. private "_items";
  10.  
  11. params [
  12. ["_item","",[""]],
  13. ["_bool",false,[false]],
  14. ["_ispack",false,[false]],
  15. ["_ongun",false,[false]],
  16. ["_override",false,[false]],
  17. ["_toUniform",false,[false]],
  18. ["_toVest",false,[false]],
  19. ["_preview",false,[false]]
  20. ];
  21.  
  22.  
  23. //Some checks
  24. if (_item isEqualTo "") exitWith {};
  25. private _isgun = false;
  26.  
  27. private _details = [_item] call life_fnc_fetchCfgDetails;
  28. if (count _details isEqualTo 0) exitWith {};
  29.  
  30. if (_bool) then {
  31. switch (_details select 6) do {
  32. case "CfgGlasses": {
  33. if (_toUniform) exitWith {player addItemToUniform _item;};
  34. if (_toVest) exitWith {player addItemToVest _item;};
  35.  
  36. if (_ispack) then {
  37. player addItemToBackpack _item;
  38. } else {
  39. if (_override) then {
  40. player addItem _item;
  41. } else {
  42. if (!(goggles player isEqualTo "")) then {
  43. removeGoggles player;
  44. };
  45. player addGoggles _item;
  46. };
  47. };
  48. };
  49.  
  50. case "CfgVehicles": {
  51. if (!(backpack player isEqualTo "")) then {
  52. _items = (backpackItems player);
  53. removeBackpack player;
  54. };
  55.  
  56. player addBackpack _item;
  57. clearAllItemsFromBackpack player;
  58.  
  59. if (!isNil "_items") then {
  60. {[_x,true,true,false,true] call life_fnc_handleItem; } forEach _items;
  61. };
  62. };
  63.  
  64. case "CfgMagazines": {
  65. if (_toUniform) exitWith {player addItemToUniform _item;};
  66. if (_toVest) exitWith {player addItemToVest _item;};
  67. if (_ispack) exitWith {player addItemToBackpack _item;};
  68.  
  69. player addMagazine _item;
  70. };
  71.  
  72. case "CfgWeapons": {
  73. //New addition
  74. if (_toUniform) exitWith {player addItemToUniform _item;};
  75. if (_toVest) exitWith {player addItemToVest _item;};
  76. if (_ispack) exitWith {player addItemToBackpack _item;};
  77.  
  78. if ((_details select 4) in [1,2,4,5,4096]) then {
  79. if ((_details select 4) isEqualTo 4096) then {
  80. if ((_details select 5) isEqualTo -1) then {
  81. _isgun = true;
  82. };
  83. } else {
  84. _isgun = true;
  85. };
  86. };
  87.  
  88. if (_isgun) then {
  89. if (!_ispack && _override) exitWith {}; //It was in the vest/uniform, try to close to prevent it overriding stuff... (Actual weapon and not an item)
  90. if (_item isEqualTo "MineDetector") then {
  91. player addItem _item;
  92. } else {
  93. player addWeapon _item;
  94. };
  95. } else {
  96. switch (_details select 5) do {
  97. case 0: {
  98. if (_ispack) then {
  99. player addItemToBackpack _item;
  100. } else {
  101. if (_override) then {
  102. player addItem _item;
  103. } else {
  104. if (_item in (assignedItems player)) then {
  105. player addItem _item;
  106. } else {
  107. player linkItem _item;
  108. };
  109. };
  110. };
  111. };
  112.  
  113. case 605: {
  114. if (_ispack) then{
  115. player addItemToBackpack _item;
  116. } else {
  117. if (_override) then {
  118. player addItem _item;
  119. } else {
  120. if (headgear player isEqualTo _item && {!_preview}) then {
  121. player addItem _item;
  122. } else {
  123. if (!(headgear player isEqualTo "")) then {removeHeadGear player;};
  124. player addHeadGear _item;
  125. };
  126. };
  127. };
  128. };
  129.  
  130. case 801: {
  131. if (_ispack) then {
  132. player addItemToBackpack _item;
  133. } else {
  134. if (_override) then {
  135. player addItem _item;
  136. } else {
  137. if (player isKindOf "Civilian") then {
  138. if (uniform player isEqualTo _item && {!_preview}) then {
  139. player addItem _item;
  140. } else {
  141. if (!(uniform player isEqualTo "")) then {
  142. _items = uniformItems player;
  143. removeUniform player;
  144. };
  145.  
  146. player addUniform _item;
  147. if (!isNil "_items") then {
  148. {player addItemToUniform _x} forEach _items;
  149. };
  150. };
  151. } else {
  152. if (!(uniform player isEqualTo "")) then {
  153. _items = uniformItems player;
  154. removeUniform player;
  155. };
  156.  
  157. if (!(player isUniformAllowed _item)) then {
  158. player forceAddUniform _item;
  159. } else {
  160. player addUniform _item;
  161. };
  162. if (!isNil "_items") then {
  163. {player addItemToUniform _x} forEach _items;
  164. };
  165. };
  166. };
  167. };
  168. };
  169.  
  170. case 701: {
  171. if (_ispack) then {
  172. player addItemToBackpack _item;
  173. } else {
  174. if (_override) then{
  175. player addItem _item;
  176. } else {
  177. if (vest player isEqualTo _item && {!_preview}) then {
  178. player addItem _item;
  179. } else {
  180. if (!(vest player isEqualTo "")) then {
  181. _items = vestItems player;
  182. removeVest player;
  183. };
  184.  
  185. player addVest _item;
  186.  
  187. if (!isNil "_items") then {
  188. {[_x,true,false,false,true] call life_fnc_handleItem;} forEach _items;
  189. };
  190. };
  191. };
  192. };
  193. };
  194.  
  195. case 201: {
  196. if (_ispack) then {
  197. player addItemToBackpack _item;
  198. } else {
  199. private "_type";
  200. _type = [_item,201] call life_fnc_accType;
  201. if (_ongun) then {
  202. switch (_type) do {
  203. case 1: { player addPrimaryWeaponItem _item; };
  204. case 2: { player addSecondaryWeaponItem _item; };
  205. case 3: { player addHandgunItem _item; };
  206. };
  207. } else {
  208. if (_override) then {
  209. player addItem _item;
  210. } else {
  211. private ["_wepItems","_action","_slotTaken"];
  212. _wepItems = switch (_type) do {case 1:{primaryWeaponItems player}; case 2:{secondaryWeaponItems player}; case 3:{handgunItems player}; default {["","",""]};};
  213. _slotTaken = false;
  214.  
  215. if (!((_wepItems select 2) isEqualTo "")) then {_slotTaken = true;};
  216.  
  217. if (_slotTaken) then {
  218. _action = [localize "STR_MISC_AttachmentMSG",localize "STR_MISC_Attachment",localize "STR_MISC_Weapon",localize "STR_MISC_Inventory"] call BIS_fnc_guiMessage;
  219. if (_action) then {
  220. switch (_type) do {
  221. case 1: {player addPrimaryWeaponItem _item;};
  222. case 2: {player addSecondaryWeaponItem _item;};
  223. case 3: {player addHandgunItem _item;};
  224. default {player addItem _item;};
  225. };
  226. } else {
  227. player addItem _item; //Add it to any available container
  228. };
  229. } else {
  230. switch (_type) do {
  231. case 1: {player addPrimaryWeaponItem _item;};
  232. case 2: {player addSecondaryWeaponItem _item;};
  233. case 3: {player addHandgunItem _item;};
  234. default {player addItem _item;};
  235. };
  236. };
  237. };
  238. };
  239. };
  240. };
  241.  
  242. case 301: {
  243. if (_ispack) then {
  244. player addItemToBackpack _item;
  245. } else {
  246. private "_type";
  247. _type = [_item,301] call life_fnc_accType;
  248.  
  249. if (_ongun) then {
  250. switch (_type) do {
  251. case 1: { player addPrimaryWeaponItem _item; };
  252. case 2: { player addSecondaryWeaponItem _item; };
  253. case 3: { player addHandgunItem _item; };
  254. };
  255. } else {
  256. if (_override) then {
  257. player addItem _item;
  258. } else {
  259. private ["_wepItems","_action","_slotTaken"];
  260. _wepItems = switch (_type) do {case 1:{primaryWeaponItems player}; case 2:{secondaryWeaponItems player}; case 3:{handgunItems player}; default {["","",""]};};
  261. _slotTaken = false;
  262.  
  263. if (!((_wepItems select 1) isEqualTo "")) then {_slotTaken = true;};
  264.  
  265. if (_slotTaken) then {
  266. _action = [localize "STR_MISC_AttachmentMSG",localize "STR_MISC_Attachment",localize "STR_MISC_Weapon",localize "STR_MISC_Inventory"] call BIS_fnc_guiMessage;
  267. if (_action) then {
  268. switch (_type) do {
  269. case 1: {player addPrimaryWeaponItem _item;};
  270. case 2: {player addSecondaryWeaponItem _item;};
  271. case 3: {player addHandgunItem _item;};
  272. default {player addItem _item;};
  273. };
  274. } else {
  275. player addItem _item; //Add it to any available container
  276. };
  277. } else {
  278. switch (_type) do {
  279. case 1: {player addPrimaryWeaponItem _item;};
  280. case 2: {player addSecondaryWeaponItem _item;};
  281. case 3: {player addHandgunItem _item;};
  282. default {player addItem _item;};
  283. };
  284. };
  285. };
  286. };
  287. };
  288. };
  289.  
  290. case 101:{
  291. if (_ispack) then {
  292. player addItemToBackpack _item;
  293. } else {
  294. private "_type";
  295. _type = [_item,101] call life_fnc_accType;
  296.  
  297. if (_ongun) then {
  298. switch (_type) do {
  299. case 1: { player addPrimaryWeaponItem _item; };
  300. case 2: { player addSecondaryWeaponItem _item; };
  301. case 3: { player addHandgunItem _item; };
  302. };
  303. } else {
  304. if (_override) then {
  305. player addItem _item;
  306. } else {
  307. private ["_wepItems","_action","_slotTaken"];
  308. _wepItems = switch (_type) do {case 1:{primaryWeaponItems player}; case 2:{secondaryWeaponItems player}; case 3:{handgunItems player}; default {["","",""]};};
  309. _slotTaken = false;
  310.  
  311. if (!((_wepItems select 0) isEqualTo "")) then {_slotTaken = true;};
  312.  
  313. if (_slotTaken) then {
  314. _action = [localize "STR_MISC_AttachmentMSG",localize "STR_MISC_Attachment",localize "STR_MISC_Weapon",localize "STR_MISC_Inventory"] call BIS_fnc_guiMessage;
  315. if (_action) then {
  316. switch (_type) do {
  317. case 1: {player addPrimaryWeaponItem _item;};
  318. case 2: {player addSecondaryWeaponItem _item;};
  319. case 3: {player addHandgunItem _item;};
  320. default {player addItem _item;};
  321. };
  322. } else {
  323. player addItem _item; //Add it to any available container
  324. };
  325. } else {
  326. switch (_type) do {
  327. case 1: {player addPrimaryWeaponItem _item;};
  328. case 2: {player addSecondaryWeaponItem _item;};
  329. case 3: {player addHandgunItem _item;};
  330. default {player addItem _item;};
  331. };
  332. };
  333. };
  334. };
  335. };
  336. };
  337.  
  338. case 621: {
  339. if (_ispack) then {
  340. player addItemToBackpack _item;
  341. } else {
  342. if (_override) then {
  343. player addItem _item;
  344. } else {
  345. player linkItem _item;
  346. };
  347. };
  348. };
  349.  
  350. case 616: {
  351. if (_ispack) then {
  352. player addItemToBackpack _item;
  353. } else {
  354. if (_override) then {
  355. player addItem _item;
  356. } else {
  357. player linkItem _item;
  358. };
  359. };
  360. };
  361.  
  362. default {
  363. if (_ispack) then {
  364. player addItemToBackpack _item;
  365. } else {
  366. player addItem _item;
  367. };
  368. };
  369. };
  370. };
  371. };
  372. };
  373. } else {
  374. switch (_details select 6) do {
  375. case "CfgVehicles": {
  376. removeBackpack player;
  377. };
  378.  
  379. case "CfgMagazines": {
  380. player removeMagazine _item;
  381. };
  382.  
  383. case "CfgGlasses": {
  384. if (_item isEqualTo goggles player) then {
  385. removeGoggles player;
  386. } else {
  387. player removeItem _item;
  388. };
  389. };
  390.  
  391. case "CfgWeapons": {
  392. if ((_details select 4) in [1,2,4,5,4096]) then {
  393. if ((_details select 4) isEqualTo 4096) then {
  394. if ((_details select 5) isEqualTo 1) then {
  395. _isgun = true;
  396. };
  397. } else {
  398. _isgun = true;
  399. };
  400. };
  401.  
  402. if (_isgun) then {
  403. switch (true) do {
  404. case (primaryWeapon player isEqualTo _item) : {_ispack = false;};
  405. case (secondaryWeapon player isEqualTo _item) : {_ispack = false;};
  406. case (handgunWeapon player isEqualTo _item) : {_ispack = false;};
  407. case (_item in assignedItems player) : {_ispack = false;};
  408. default {_ispack = true;};
  409. };
  410.  
  411. if (_item isEqualTo "MineDetector") then {
  412. player removeItem _item;
  413. } else {
  414.  
  415. //Lovely code provided by [OCB]Dash
  416. private "_tmpfunction";
  417. _tmpfunction = {
  418. private ["_tWeapons","_tWeaponCount"];
  419. switch (true) do {
  420. case (_this in (uniformItems player)): {
  421. _tWeapons = (getWeaponCargo (uniformContainer player)) select 0;
  422. _tWeaponCount = (getWeaponCargo (uniformContainer player)) select 1;
  423.  
  424. clearWeaponCargo (uniformContainer player);
  425. {
  426. _numVestWeps = _tWeaponCount select _forEachIndex;
  427. if (_x isEqualTo _this) then
  428. {
  429. _numVestWeps = _numVestWeps - 1;
  430. };
  431. (uniformContainer player) addWeaponCargo [ _x,_numVestWeps];
  432. }forEach _tWeapons;
  433. };
  434.  
  435. case (_this in (vestItems player)): {
  436. _tWeapons = (getWeaponCargo (vestContainer player)) select 0;
  437. _tWeaponCount = (getWeaponCargo (vestContainer player)) select 1;
  438.  
  439. clearWeaponCargo (vestContainer player);
  440. {
  441. _numVestWeps = _tWeaponCount select _forEachIndex;
  442. if (_x isEqualTo _this) then
  443. {
  444. _numVestWeps = _numVestWeps - 1;
  445. };
  446. (vestContainer player) addWeaponCargo [ _x,_numVestWeps];
  447. }forEach _tWeapons;
  448. };
  449.  
  450. case (_this in (backpackItems player)): {
  451. _tWeapons = (getWeaponCargo (backpackContainer player)) select 0;
  452. _tWeaponCount = (getWeaponCargo (backpackContainer player)) select 1;
  453.  
  454. clearWeaponCargo (backpackContainer player);
  455. {
  456. _numVestWeps = _tWeaponCount select _forEachIndex;
  457. if (_x isEqualTo _this) then
  458. {
  459. _numVestWeps = _numVestWeps - 1;
  460. };
  461. (backpackContainer player) addWeaponCargo [ _x,_numVestWeps];
  462. }forEach _tWeapons;
  463. };
  464. };
  465. };
  466.  
  467. if (_ispack) then {
  468. _item call _tmpfunction;
  469. } else {
  470. switch (true) do {
  471. case (_item in (uniformItems player)): {_item call _tmpfunction;};
  472. case (_item in (vestItems player)) : {_item call _tmpfunction;};
  473. case (_item in (backpackItems player)) : {_item call _tmpfunction;};
  474. default {player removeWeapon _item;};
  475. };
  476. };
  477. };
  478. } else {
  479. switch (_details select 5) do {
  480. case 0: {player unassignItem _item; player removeItem _item;};
  481. case 605: {if (headgear player isEqualTo _item) then {removeHeadgear player} else {player removeItem _item};};
  482. case 801: {if (uniform player isEqualTo _item) then {removeUniform player} else {player removeItem _item};};
  483. case 701: {if (vest player isEqualTo _item) then {removeVest player} else {player removeItem _item};};
  484. case 621: {player unassignItem _item; player removeItem _item;};
  485. case 616: {player unassignItem _item; player removeItem _item;};
  486. default {
  487. switch (true) do {
  488. case (_item in primaryWeaponItems player) : {player removePrimaryWeaponItem _item;};
  489. case (_item in handgunItems player) : {player removeHandgunItem _item;};
  490. default {player removeItem _item;};
  491. };
  492. };
  493. };
  494. };
  495. };
  496. };
  497. };
  498.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement