gangcrates.pwn 41 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033
  1. /*
  2. /$$ /$$ /$$$$$$ /$$$$$$$ /$$$$$$$
  3. | $$$ | $$ /$$__ $$ | $$__ $$| $$__ $$
  4. | $$$$| $$| $$ \__/ | $$ \ $$| $$ \ $$
  5. | $$ $$ $$| $$ /$$$$ /$$$$$$| $$$$$$$/| $$$$$$$/
  6. | $$ $$$$| $$|_ $$|______/| $$__ $$| $$____/
  7. | $$\ $$$| $$ \ $$ | $$ \ $$| $$
  8. | $$ \ $$| $$$$$$/ | $$ | $$| $$
  9. |__/ \__/ \______/ |__/ |__/|__/
  10. Next Generation Gaming, LLC
  11. (created by Next Generation Gaming Development Team)
  12. Developers:
  13. - Dom
  14. - Jingles
  15. - Miguel
  16. * Copyright (c) 2016, Next Generation Gaming, LLC
  17. *
  18. * All rights reserved.
  19. *
  20. * Redistribution and use in source and binary forms, with or without modification,
  21. * are not permitted in any case.
  22. *
  23. *
  24. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  25. * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  26. * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  27. * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
  28. * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
  29. * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  30. * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
  31. * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
  32. * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  33. * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  34. * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  35. */
  36. #include <YSI\y_hooks>
  37. #define GANG_CRATE_COST 150000
  38. #define MAX_CRATE_GUNS 30
  39. #define MAX_CRATE_DRUGS 200
  40. #define MAX_GANG_SIMUL_CRATES 2
  41. CreateGCrate(playerid, iGroupID) {
  42. szMiscArray[0] = 0;
  43. for(new i = 0; i < MAX_GANG_CRATES; ++i) {
  44. if(arrGCrateData[i][gcr_isLoaded] == 0) {
  45. format(szMiscArray, sizeof(szMiscArray), "UPDATE `gCrates` SET `iGroupID` = %d, `9mm` = '0', `sdpistol` = '0', `deagle` = '0', `uzi` = '0', `tec9` = '0', \
  46. `mp5` = '0', `m4` = '0', `ak47` = '0', `rifle` = '0', `sniper` = '0', `shotty` = '0', `sawnoff` = '0', `spas` = '0', \
  47. `pot` = '0', `crack` = '0', `meth` = '0', `ecstasy` = '0', `heroin` = '0' WHERE `iCrateID` = %d", iGroupID, i+1);
  48. return mysql_tquery(MainPipeline, szMiscArray, true, "OnCreateGCrate", "iii", playerid, iGroupID, i);
  49. }
  50. }
  51. SendClientMessageEx(playerid, COLOR_GRAD1, "There are no more crate slots available. Please try again at a later moment.");
  52. return 1;
  53. }
  54. forward OnCheckGCrates(playerid, iGroupID);
  55. public OnCheckGCrates(playerid, iGroupID) {
  56. if(cache_get_row_count() == MAX_GANG_SIMUL_CRATES) return SendClientMessageEx(playerid, COLOR_WHITE, "You have reached the maximum of 2 unprocessed gang crates.");
  57. else CreateGCrate(playerid, iGroupID);
  58. return 1;
  59. }
  60. forward OnCreateGCrate(playerid, iGroupID, iCrateID);
  61. public OnCreateGCrate(playerid, iGroupID, iCrateID) {
  62. new
  63. Float:fTemp[3],
  64. iVW,
  65. iInt;
  66. szMiscArray[0] = 0;
  67. // log the crate purchase
  68. format(szMiscArray, sizeof(szMiscArray), "[GANG CRATE] [Gang: %s (ID: %i)] [Name: %s]", arrGroupData[iGroupID][g_szGroupName], iGroupID, GetPlayerNameEx(playerid));
  69. Log("logs/gangcrates.log", szMiscArray);
  70. GetPlayerPos(playerid, fTemp[0], fTemp[1], fTemp[2]);
  71. iVW = GetPlayerVirtualWorld(playerid);
  72. iInt = GetPlayerInterior(playerid);
  73. arrGCrateData[iCrateID][gcr_iObject] = CreateDynamicObject(964, fTemp[0], fTemp[1], fTemp[2]-0.95, 0,0,0, .worldid = iVW, .interiorid = iInt);
  74. format(szMiscArray, sizeof(szMiscArray), "Gang Crate ID: %d\nDropped by: %s\n%s", iCrateID, GetPlayerNameEx(playerid), arrGroupData[iGroupID][g_szGroupName]);
  75. arrGCrateData[iCrateID][gcr_iLabel] = CreateDynamic3DTextLabel(szMiscArray, COLOR_GREEN, fTemp[0], fTemp[1], fTemp[2], 5.0, _, _, 1, GetPlayerVirtualWorld(playerid), GetPlayerInterior(playerid), _, 20.0);
  76. arrGroupData[iGroupID][g_iBudget] -= GANG_CRATE_COST;
  77. arrGCrateData[iCrateID][gcr_isLoaded] = 1;
  78. return 1;
  79. }
  80. DeleteGCrate(playerid, iCrateID) {
  81. format(szMiscArray, sizeof(szMiscArray), "UPDATE `gCrates` SET `iGroupID` = '255' WHERE `iCrateID` = %i", iCrateID+1);
  82. return mysql_tquery(MainPipeline, szMiscArray, false, "OnDeleteGCrate", "ii", playerid, iCrateID);
  83. }
  84. forward OnDeleteGCrate(playerid, iCrateID);
  85. public OnDeleteGCrate(playerid, iCrateID)
  86. {
  87. if(IsValidDynamicObject(arrGCrateData[iCrateID][gcr_iObject]))
  88. DestroyDynamicObject(arrGCrateData[iCrateID][gcr_iObject]);
  89. if(IsValidDynamic3DTextLabel(arrGCrateData[iCrateID][gcr_iLabel]))
  90. DestroyDynamic3DTextLabel(arrGCrateData[iCrateID][gcr_iLabel]);
  91. arrGCrateData[iCrateID][gcr_iObject] = INVALID_OBJECT_ID;
  92. arrGCrateData[iCrateID][gcr_iLabel] = Text3D:-1;
  93. arrGCrateData[iCrateID][gcr_isLoaded] = 0;
  94. //format(szMiscArray, sizeof szMiscArray, "You have successfully destroyed gang crate ID %i.", iCrateID);
  95. //SendClientMessageEx(playerid, COLOR_GRAD1, szMiscArray);
  96. return 1;
  97. }
  98. LoadGCrates() {
  99. format(szMiscArray, sizeof(szMiscArray), "SELECT * FROM `gCrates`");
  100. return mysql_tquery(MainPipeline, szMiscArray, true, "OnLoadGCrates", "");
  101. }
  102. forward OnLoadGCrates();
  103. public OnLoadGCrates() {
  104. new
  105. iFields,
  106. iRows,
  107. iCount,
  108. iGroupID,
  109. iCrateID;
  110. cache_get_data(iRows, iFields, MainPipeline);
  111. while(iCount < iRows) {
  112. iGroupID = cache_get_field_content_int(iCount, "iGroupID", MainPipeline);
  113. if(!(0 <= iGroupID < MAX_GROUPS)) break;
  114. iCrateID = cache_get_field_content_int(iCount, "iCrateID", MainPipeline);
  115. iCrateID--; // Mysql starts at 1. Have the game's idx start at 0.
  116. SpawnGCrateAtGroup(iGroupID, iCrateID);
  117. iCount++;
  118. }
  119. printf("[Gang Crates] Loaded %i Gang Crates", iCount);
  120. return 1;
  121. }
  122. SaveGCrate(iCrateID, iGroupID) {
  123. format(szMiscArray, sizeof(szMiscArray), "UPDATE `gCrates` SET `iGroupID` = %d WHERE `iCrateID` = %d", iGroupID, iCrateID+1);
  124. mysql_tquery(MainPipeline, szMiscArray, false, "OnQueryFinish", "i", SENDDATA_THREAD);
  125. return 1;
  126. }
  127. ShowGCrateItems(iPlayerID, iCrateID, itemid = -1) {
  128. szMiscArray[0] = 0;
  129. format(szMiscArray, sizeof(szMiscArray), "SELECT * FROM `gCrates` WHERE `iCrateID` = '%d' LIMIT 1", iCrateID+1);
  130. return mysql_tquery(MainPipeline, szMiscArray, true, "OnShowGCrateItems", "iii", iPlayerID, iCrateID, itemid);
  131. }
  132. forward OnShowGCrateItems(iPlayerID, iCrateID, itemid);
  133. public OnShowGCrateItems(iPlayerID, iCrateID, itemid) {
  134. szMiscArray[0] = 0;
  135. new
  136. iRows,
  137. iFields,
  138. iCount;
  139. cache_get_data(iRows, iFields, MainPipeline);
  140. while(iCount < iRows) {
  141. szMiscArray[3999] = cache_get_field_content_int(iCount, "iCrateID", MainPipeline);
  142. szMiscArray[4000] = cache_get_field_content_int(iCount, "iGroupID", MainPipeline);
  143. szMiscArray[4001] = cache_get_field_content_int(iCount, "9mm", MainPipeline);
  144. szMiscArray[4002] = cache_get_field_content_int(iCount, "sdpistol", MainPipeline);
  145. szMiscArray[4003] = cache_get_field_content_int(iCount, "deagle", MainPipeline);
  146. szMiscArray[4004] = cache_get_field_content_int(iCount, "uzi", MainPipeline);
  147. szMiscArray[4005] = cache_get_field_content_int(iCount, "tec9", MainPipeline);
  148. szMiscArray[4006] = cache_get_field_content_int(iCount, "mp5", MainPipeline);
  149. szMiscArray[4007] = cache_get_field_content_int(iCount, "m4", MainPipeline);
  150. szMiscArray[4008] = cache_get_field_content_int(iCount, "ak47", MainPipeline);
  151. szMiscArray[4009] = cache_get_field_content_int(iCount, "rifle", MainPipeline);
  152. szMiscArray[4010] = cache_get_field_content_int(iCount, "sniper", MainPipeline);
  153. szMiscArray[4011] = cache_get_field_content_int(iCount, "shotty", MainPipeline);
  154. szMiscArray[4012] = cache_get_field_content_int(iCount, "sawnoff", MainPipeline);
  155. szMiscArray[4013] = cache_get_field_content_int(iCount, "spas", MainPipeline);
  156. szMiscArray[4014] = cache_get_field_content_int(iCount, "pot", MainPipeline);
  157. szMiscArray[4015] = cache_get_field_content_int(iCount, "crack", MainPipeline);
  158. szMiscArray[4016] = cache_get_field_content_int(iCount, "meth", MainPipeline);
  159. szMiscArray[4017] = cache_get_field_content_int(iCount, "ecstasy", MainPipeline);
  160. szMiscArray[4018] = cache_get_field_content_int(iCount, "heroin", MainPipeline);
  161. iCount++;
  162. }
  163. if(PlayerInfo[iPlayerID][pMember] != szMiscArray[4000]) return SendClientMessageEx(iPlayerID, COLOR_GRAD2, "This crate does not belong to your group.");
  164. if(itemid != -1) {
  165. return szMiscArray[4000+itemid];
  166. }
  167. else if(itemid == -1) {
  168. format(szMiscArray, sizeof(szMiscArray), "Item\tAmount\n\
  169. 9mm \t%d\n\
  170. Silenced 9mm\t%d\n\
  171. Desert Eagle\t%d\n\
  172. UZI\t%d\n\
  173. Tec-9\t%d\n\
  174. MP5\t%d\n\
  175. M4\t%d\n\
  176. AK47\t%d\n\
  177. Country Rifle\t%d\n\
  178. Sniper Rifle\t%d\n\
  179. Pump-Action Shotgun\t%d\n\
  180. Sawn-off Shotguns\t%d\n\
  181. Spas-12\t%d\n\
  182. Pot\t%d\n\
  183. Crack\t%d\n\
  184. Meth\t%d\n\
  185. Ecstasy\t%d\n\
  186. Heroin\t%d",
  187. szMiscArray[4001],
  188. szMiscArray[4002],
  189. szMiscArray[4003],
  190. szMiscArray[4004],
  191. szMiscArray[4005],
  192. szMiscArray[4006],
  193. szMiscArray[4007],
  194. szMiscArray[4008],
  195. szMiscArray[4009],
  196. szMiscArray[4010],
  197. szMiscArray[4011],
  198. szMiscArray[4012],
  199. szMiscArray[4013],
  200. szMiscArray[4014],
  201. szMiscArray[4015],
  202. szMiscArray[4016],
  203. szMiscArray[4017],
  204. szMiscArray[4018]
  205. );
  206. ShowPlayerDialogEx(iPlayerID, DIALOG_GANG_CRATE1, DIALOG_STYLE_TABLIST_HEADERS, "Gang Shipment Stock Preparation", szMiscArray, "Select", "Cancel");
  207. SetPVarInt(iPlayerID, "GCTransferTo", iCrateID);
  208. }
  209. return 1;
  210. }
  211. forward OnCheckGCrateItems(iPlayerID, iCrateID, itemid, szGCItem[], iAmount);
  212. public OnCheckGCrateItems(iPlayerID, iCrateID, itemid, szGCItem[], iAmount) {
  213. new
  214. iRows,
  215. iFields,
  216. iCount,
  217. iCurrentAmount;
  218. cache_get_data(iRows, iFields, MainPipeline);
  219. while(iCount < iRows) {
  220. iCurrentAmount = cache_get_field_content_int(iCount, szGCItem, MainPipeline);
  221. ++iCount;
  222. }
  223. if(iAmount > iCurrentAmount)
  224. {
  225. return SendClientMessage(iPlayerID, COLOR_GRAD1, "You are trying to transfer more than there is!");
  226. }
  227. format(szMiscArray, sizeof(szMiscArray), "UPDATE `gCrates` SET `%s` = '%d' - '%d' WHERE `iCrateID` = '%d'",
  228. szGCItem,
  229. iCurrentAmount,
  230. iAmount,
  231. iCrateID+1
  232. );
  233. mysql_tquery(MainPipeline, szMiscArray, true, "OnTransferItemFromCrate", "iiii", iPlayerID, itemid, iAmount, iCrateID);
  234. return 1;
  235. }
  236. /*
  237. CountLockerGuns(iGroupID, iWeaponID) {
  238. szMiscArray[0] = 0;
  239. format(szMiscArray, sizeof(szMiscArray), "SELECT * FROM `gWeaponsNew` WHERE `Group_ID` = '%d' AND `Weapon_ID` = '%d'", iGroupID, iWeaponID);
  240. return mysql_tquery(MainPipeline, szMiscArray, true, "OnCountLockerGuns", "ii", iGroupID, iWeaponID);
  241. }
  242. forward OnCountLockerGuns(iGroupID, iWeaponID);
  243. public OnCountLockerGuns(iGroupID, iWeaponID) {
  244. szMiscArray[0] = 0;
  245. new
  246. iRows = cache_get_row_count();
  247. return iRows;
  248. }*/
  249. forward OnPlayerCountLockerGuns(iPlayerID, iGroupID, iWeaponID, iAmount, itemid, iCrateID);
  250. public OnPlayerCountLockerGuns(iPlayerID, iGroupID, iWeaponID, iAmount, itemid, iCrateID) {
  251. szMiscArray[0] = 0;
  252. new iRows,
  253. iFields,
  254. tempWep[3],
  255. iCount;
  256. cache_get_data(iRows, iFields, MainPipeline);
  257. valstr(tempWep, iWeaponID);
  258. iCount = cache_get_field_content_int(0, tempWep, MainPipeline);
  259. if(iCount < iAmount) SendClientMessage(iPlayerID, COLOR_GRAD1, "You are trying to transfer more than there is!");
  260. else {
  261. format(szMiscArray, sizeof(szMiscArray), "SELECT `%s` FROM `gCrates` WHERE `iCrateID` = '%d'", GetGCItemSQLFldName(itemid), iCrateID+1);
  262. mysql_tquery(MainPipeline, szMiscArray, true, "OnTransferItemToCrate", "iiii", iPlayerID, itemid, iAmount, iCrateID);
  263. }
  264. return 1;
  265. }
  266. ShowGCrates(iPlayerID) {
  267. szMiscArray[0] = 0;
  268. format(szMiscArray, sizeof(szMiscArray), "SELECT * FROM `gCrates` WHERE `iGroupID` != 255");
  269. return mysql_tquery(MainPipeline, szMiscArray, true, "OnShowGCrates", "i", iPlayerID);
  270. }
  271. forward OnShowGCrates(iPlayerID);
  272. public OnShowGCrates(iPlayerID) {
  273. szMiscArray[0] = 0;
  274. new
  275. iRows,
  276. iFields,
  277. iCount;
  278. cache_get_data(iRows, iFields, MainPipeline);
  279. if(!iRows) return SendClientMessageEx(iPlayerID, COLOR_WHITE, "There are no spawned gang crates.");
  280. while(iCount < iRows) {
  281. szMiscArray[3999] = cache_get_field_content_int(iCount, "iCrateID", MainPipeline);
  282. szMiscArray[4000] = cache_get_field_content_int(iCount, "iGroupID", MainPipeline);
  283. format(szMiscArray, sizeof(szMiscArray), "%s\n(ID: %i) %s",
  284. szMiscArray,
  285. szMiscArray[3999],
  286. arrGroupData[szMiscArray[4000]][g_szGroupName]
  287. );
  288. iCount++;
  289. }
  290. ShowPlayerDialogEx(iPlayerID, DIALOG_ADM_GCRATES, DIALOG_STYLE_LIST, "Gang Crates", szMiscArray, "Select", "Cancel");
  291. return 1;
  292. }
  293. GetItemNameFromIdx(itemid) {
  294. new szReturn[24];
  295. switch(itemid) {
  296. case 0: szReturn = "9mm";
  297. case 1: szReturn = "Silenced 9mm";
  298. case 2: szReturn = "Desert Eagle";
  299. case 3: szReturn = "UZI";
  300. case 4: szReturn = "Tec-9";
  301. case 5: szReturn = "MP5";
  302. case 6: szReturn = "M4";
  303. case 7: szReturn = "Ak-47";
  304. case 8: szReturn = "Country Rifle";
  305. case 9: szReturn = "Sniper Rifle";
  306. case 10: szReturn = "Pump-Action Shotgun";
  307. case 11: szReturn = "Sawn-Off Shotgun";
  308. case 12: szReturn = "Spas-12";
  309. case 13: szReturn = "Pot";
  310. case 14: szReturn = "Crack";
  311. case 15: szReturn = "Meth";
  312. case 16: szReturn = "Ecstasy";
  313. case 17: szReturn = "Heroin";
  314. }
  315. return szReturn;
  316. }
  317. GetGCItemSQLFldName(itemid) {
  318. new szReturn[24];
  319. switch(itemid) {
  320. case 0: szReturn ="9mm";
  321. case 1: szReturn ="sdpistol";
  322. case 2: szReturn ="deagle";
  323. case 3: szReturn ="uzi";
  324. case 4: szReturn ="tec9";
  325. case 5: szReturn ="mp5";
  326. case 6: szReturn ="m4";
  327. case 7: szReturn ="ak47";
  328. case 8: szReturn ="rifle";
  329. case 9: szReturn ="sniper";
  330. case 10: szReturn ="shotty";
  331. case 11: szReturn ="sawnoff";
  332. case 12: szReturn ="spas";
  333. case 13: szReturn ="pot";
  334. case 14: szReturn ="crack";
  335. case 15: szReturn ="meth";
  336. case 16: szReturn ="ecstasy";
  337. case 17: szReturn ="heroin";
  338. }
  339. return szReturn;
  340. }
  341. GetWepIDFromGCIdx(itemid) {
  342. switch(itemid) {
  343. case 0: return WEAPON_COLT45;
  344. case 1: return WEAPON_SILENCED;
  345. case 2: return WEAPON_DEAGLE;
  346. case 3: return WEAPON_UZI;
  347. case 4: return WEAPON_TEC9;
  348. case 5: return WEAPON_MP5;
  349. case 6: return WEAPON_M4;
  350. case 7: return WEAPON_AK47;
  351. case 8: return WEAPON_RIFLE;
  352. case 9: return WEAPON_SNIPER;
  353. case 10: return WEAPON_SHOTGUN;
  354. case 11: return WEAPON_SAWEDOFF;
  355. case 12: return WEAPON_SHOTGSPA;
  356. default: return 0;
  357. }
  358. return 0;
  359. }
  360. SpawnGCrateAtGroup(iGroupID, iCrateID) {
  361. szMiscArray[0] = 0;
  362. arrGCrateData[iCrateID][gcr_iObject] = CreateDynamicObject(964, arrGroupData[iGroupID][g_fCratePos][0], arrGroupData[iGroupID][g_fCratePos][1], arrGroupData[iGroupID][g_fCratePos][2]-0.95, 0.0, 0.0, 0.0);
  363. format(szMiscArray, sizeof(szMiscArray), "Gang Crate ID: %d\n%s", iCrateID, arrGroupData[iGroupID][g_szGroupName]);
  364. arrGCrateData[iCrateID][gcr_iLabel] = CreateDynamic3DTextLabel(szMiscArray, COLOR_GREEN, arrGroupData[iGroupID][g_fCratePos][0], arrGroupData[iGroupID][g_fCratePos][1], arrGroupData[iGroupID][g_fCratePos][2], 5.0);
  365. arrGCrateData[iCrateID][gcr_isLoaded] = 1;
  366. return 1;
  367. }
  368. IsPlayerNearGCrate(playerid, i) {
  369. new
  370. Float:fTemp[3];
  371. if(IsValidDynamicObject(arrGCrateData[i][gcr_iObject])) {
  372. GetDynamicObjectPos(arrGCrateData[i][gcr_iObject], fTemp[0], fTemp[1], fTemp[2]);
  373. if(IsPlayerInRangeOfPoint(playerid, 6.0, fTemp[0], fTemp[1], fTemp[2])) {
  374. return 1;
  375. }
  376. }
  377. return 0;
  378. }
  379. /*
  380. -->WITHDRAWING FROM LOCKER
  381. TransferItemToCrate
  382. -> Check if there is sufficient of the item in the locker before transfering.
  383. -> Is it a weapon?
  384. ->Run query to remove from locker
  385. ->Run another query to increase crate quantity.
  386. -> Is it ammo or drugs?
  387. ->Decrease var
  388. ->Run query to increase crate quantity.
  389. ->WITHDRAWING FROM CRATE (ShowGCrateItems)
  390. TransferItemFromCrate
  391. -> Is there sufficient of the item in the crate before transfering?
  392. ->Is it a weapon?
  393. ->Run query to remove from crate.
  394. ->Use add locker weapon function.
  395. ->Is it ammo or drugs?
  396. ->Run query to remove from crate
  397. ->Increase var
  398. */
  399. TransferItemFromCrate(playerid, itemid, iAmount, iCrateID) {
  400. new szGCItem[24];
  401. szGCItem = GetGCItemSQLFldName(itemid);
  402. format(szMiscArray, sizeof(szMiscArray), "SELECT `%s` FROM `gCrates` WHERE `iCrateID` = '%d'", szGCItem, iCrateID+1);
  403. mysql_tquery(MainPipeline, szMiscArray, true, "OnCheckGCrateItems", "iiisi", playerid, iCrateID, itemid, szGCItem, iAmount);
  404. return 1;
  405. }
  406. forward OnTransferItemFromCrate(playerid, itemid, iAmount, iCrateID);
  407. public OnTransferItemFromCrate(playerid, itemid, iAmount, iCrateID) {
  408. szMiscArray[0] = 0;
  409. new iGroupID = PlayerInfo[playerid][pMember],
  410. iLoad = GetGVarInt("GCrateLoad", iCrateID);
  411. switch(itemid) {
  412. case 0 .. 12: {
  413. for(new i = 0; i < iAmount; i++) {
  414. SetGVarInt("GCrateLoad", iLoad-1, iCrateID);
  415. AddGroupSafeWeapon(INVALID_PLAYER_ID, iGroupID, GetWepIDFromGCIdx(itemid));
  416. }
  417. }
  418. case 13: arrGroupData[iGroupID][g_iDrugs][0] += iAmount; // pot
  419. case 14: arrGroupData[iGroupID][g_iDrugs][1] += iAmount; // crack
  420. case 15: arrGroupData[iGroupID][g_iDrugs][2] += iAmount; // meth
  421. case 16: arrGroupData[iGroupID][g_iDrugs][3] += iAmount; // ecstasy
  422. case 17: arrGroupData[iGroupID][g_iDrugs][4] += iAmount; // heroin
  423. }
  424. return 1;
  425. }
  426. TransferItemToCrate(playerid, itemid, iAmount, iCrateID) {
  427. szMiscArray[0] = 0;
  428. new iGroupID = PlayerInfo[playerid][pMember],
  429. iLoad = GetGVarInt("GCrateLoad", iCrateID);
  430. switch(itemid) {
  431. case 0 .. 12: {
  432. new
  433. iWeaponID = GetWepIDFromGCIdx(itemid);
  434. if(iLoad +1 > MAX_CRATE_GUNS) return SendClientMessageEx(playerid, COLOR_GRAD2, "You cannot store anymore guns in this crate.");
  435. SetGVarInt("GCrateLoad", iLoad+1, iCrateID);
  436. format(szMiscArray, sizeof(szMiscArray), "SELECT `%d` FROM `gWeaponsNew` WHERE `Group_ID` = '%d'", iWeaponID, iGroupID+1);
  437. mysql_tquery(MainPipeline, szMiscArray, true, "OnPlayerCountLockerGuns", "iiiiii", playerid, iGroupID, iWeaponID, iAmount, itemid, iCrateID);
  438. }
  439. case 13: { // Pot
  440. if(0 < arrGroupData[iGroupID][g_iDrugs][0] < iAmount) return SendClientMessageEx(playerid, COLOR_GRAD2, "You are trying to transfer more than there is!");
  441. }
  442. case 14: { // Crack
  443. if(0 < arrGroupData[iGroupID][g_iDrugs][1] < iAmount) return SendClientMessageEx(playerid, COLOR_GRAD2, "You are trying to transfer more than there is!");
  444. }
  445. case 15: { // Meth
  446. if(0 < arrGroupData[iGroupID][g_iDrugs][2] < iAmount) return SendClientMessageEx(playerid, COLOR_GRAD2, "You are trying to transfer more than there is!");
  447. }
  448. case 16: { // Ecstasy
  449. if(0 < arrGroupData[iGroupID][g_iDrugs][3] < iAmount) return SendClientMessageEx(playerid, COLOR_GRAD2, "You are trying to transfer more than there is!");
  450. }
  451. case 17: { // Heroin
  452. if(0 < arrGroupData[iGroupID][g_iDrugs][4] < iAmount) return SendClientMessageEx(playerid, COLOR_GRAD2, "You are trying to transfer more than there is!");
  453. }
  454. }
  455. if(itemid > 12) {
  456. format(szMiscArray, sizeof(szMiscArray), "SELECT `%s` FROM `gCrates` WHERE `iCrateID` = '%d'", GetGCItemSQLFldName(itemid), iCrateID+1);
  457. mysql_tquery(MainPipeline, szMiscArray, true, "OnTransferItemToCrate", "iiii", playerid, itemid, iAmount, iCrateID);
  458. }
  459. return 1;
  460. }
  461. forward OnTransferItemToCrate(playerid, itemid, iAmount, iCrateID);
  462. public OnTransferItemToCrate(playerid, itemid, iAmount, iCrateID) {
  463. szMiscArray[0] = 0;
  464. new
  465. iRows,
  466. iFields,
  467. iCount,
  468. iTemp;
  469. cache_get_data(iRows, iFields, MainPipeline);
  470. szMiscArray = GetGCItemSQLFldName(itemid);
  471. while(iCount < iRows) {
  472. iTemp = cache_get_field_content_int(iCount, szMiscArray, MainPipeline);
  473. ++iCount;
  474. }
  475. format(szMiscArray, sizeof(szMiscArray), "UPDATE `gCrates` SET `%s` = '%d' WHERE `iCrateID` = '%d'", szMiscArray, iTemp + iAmount, iCrateID+1);
  476. mysql_tquery(MainPipeline, szMiscArray, false, "OnFinalizeItemTransfer", "iiii", playerid, itemid, iAmount, iCrateID);
  477. return 1;
  478. }
  479. forward OnFinalizeItemTransfer(playerid, itemid, iAmount, iCrateID);
  480. public OnFinalizeItemTransfer(playerid, itemid, iAmount, iCrateID) {
  481. new
  482. iGroupID = PlayerInfo[playerid][pMember];
  483. switch(itemid) {
  484. case 0 .. 12: for(new i = 0; i < iAmount; i++) { WithdrawGroupSafeWeapon(INVALID_PLAYER_ID, iGroupID, GetWepIDFromGCIdx(itemid)); }
  485. case 13: arrGroupData[iGroupID][g_iDrugs][0] -= iAmount; // pot
  486. case 14: arrGroupData[iGroupID][g_iDrugs][1] -= iAmount; // crack
  487. case 15: arrGroupData[iGroupID][g_iDrugs][2] -= iAmount; // meth
  488. case 16: arrGroupData[iGroupID][g_iDrugs][3] -= iAmount; // ecstasy
  489. case 17: arrGroupData[iGroupID][g_iDrugs][4] -= iAmount; // heroin
  490. }
  491. return 1;
  492. }
  493. DeliverGCCrate(playerid, iGroupID, iCrateID) {
  494. szMiscArray[0] = 0;
  495. format(szMiscArray, sizeof(szMiscArray), "SELECT * FROM `gCrates` WHERE `iCrateID` = '%d'", iCrateID+1);
  496. mysql_tquery(MainPipeline, szMiscArray, true, "OnDeliverGCCrate", "iii", playerid, iGroupID, iCrateID);
  497. return 1;
  498. }
  499. forward OnDeliverGCCrate(playerid, iGroupID, iCrateID);
  500. public OnDeliverGCCrate(playerid, iGroupID, iCrateID) {
  501. szMiscArray[0] = 0;
  502. new
  503. iRows,
  504. iFields,
  505. iCount;
  506. cache_get_data(iRows, iFields, MainPipeline);
  507. while(iCount < iRows) {
  508. szMiscArray[4001] = cache_get_field_content_int(iCount, "9mm", MainPipeline);
  509. szMiscArray[4002] = cache_get_field_content_int(iCount, "sdpistol", MainPipeline);
  510. szMiscArray[4003] = cache_get_field_content_int(iCount, "deagle", MainPipeline);
  511. szMiscArray[4004] = cache_get_field_content_int(iCount, "uzi", MainPipeline);
  512. szMiscArray[4005] = cache_get_field_content_int(iCount, "tec9", MainPipeline);
  513. szMiscArray[4006] = cache_get_field_content_int(iCount, "mp5", MainPipeline);
  514. szMiscArray[4007] = cache_get_field_content_int(iCount, "m4", MainPipeline);
  515. szMiscArray[4008] = cache_get_field_content_int(iCount, "ak47", MainPipeline);
  516. szMiscArray[4009] = cache_get_field_content_int(iCount, "rifle", MainPipeline);
  517. szMiscArray[4010] = cache_get_field_content_int(iCount, "sniper", MainPipeline);
  518. szMiscArray[4011] = cache_get_field_content_int(iCount, "shotty", MainPipeline);
  519. szMiscArray[4012] = cache_get_field_content_int(iCount, "sawnoff", MainPipeline);
  520. szMiscArray[4013] = cache_get_field_content_int(iCount, "spas", MainPipeline);
  521. szMiscArray[4014] = cache_get_field_content_int(iCount, "pot", MainPipeline);
  522. szMiscArray[4015] = cache_get_field_content_int(iCount, "crack", MainPipeline);
  523. szMiscArray[4016] = cache_get_field_content_int(iCount, "meth", MainPipeline);
  524. szMiscArray[4017] = cache_get_field_content_int(iCount, "ecstasy", MainPipeline);
  525. szMiscArray[4018] = cache_get_field_content_int(iCount, "heroin", MainPipeline);
  526. ++iCount;
  527. }
  528. if(szMiscArray[4001] != 0) /*for(new i = 0; i < szMiscArray[4001]; i++)*/ AddGroupSafeWeapon(INVALID_PLAYER_ID, iGroupID, WEAPON_COLT45, szMiscArray[4001]);
  529. if(szMiscArray[4002] != 0) /*for(new i = 0; i < szMiscArray[4002]; i++)*/ AddGroupSafeWeapon(INVALID_PLAYER_ID, iGroupID, WEAPON_SILENCED, szMiscArray[4002]);
  530. if(szMiscArray[4003] != 0) /*for(new i = 0; i < szMiscArray[4003]; i++)*/ AddGroupSafeWeapon(INVALID_PLAYER_ID, iGroupID, WEAPON_DEAGLE, szMiscArray[4003]);
  531. if(szMiscArray[4004] != 0) /*for(new i = 0; i < szMiscArray[4004]; i++)*/ AddGroupSafeWeapon(INVALID_PLAYER_ID, iGroupID, WEAPON_UZI, szMiscArray[4004]);
  532. if(szMiscArray[4005] != 0) /*for(new i = 0; i < szMiscArray[4005]; i++)*/ AddGroupSafeWeapon(INVALID_PLAYER_ID, iGroupID, WEAPON_TEC9, szMiscArray[4005]);
  533. if(szMiscArray[4006] != 0) /*for(new i = 0; i < szMiscArray[4006]; i++)*/ AddGroupSafeWeapon(INVALID_PLAYER_ID, iGroupID, WEAPON_MP5, szMiscArray[4006]);
  534. if(szMiscArray[4007] != 0) /*for(new i = 0; i < szMiscArray[4007]; i++)*/ AddGroupSafeWeapon(INVALID_PLAYER_ID, iGroupID, WEAPON_M4, szMiscArray[4007]);
  535. if(szMiscArray[4008] != 0) /*for(new i = 0; i < szMiscArray[4008]; i++)*/ AddGroupSafeWeapon(INVALID_PLAYER_ID, iGroupID, WEAPON_AK47, szMiscArray[4008]);
  536. if(szMiscArray[4009] != 0) /*for(new i = 0; i < szMiscArray[4009]; i++)*/ AddGroupSafeWeapon(INVALID_PLAYER_ID, iGroupID, WEAPON_RIFLE, szMiscArray[4009]);
  537. if(szMiscArray[4010] != 0) /*for(new i = 0; i < szMiscArray[4010]; i++)*/ AddGroupSafeWeapon(INVALID_PLAYER_ID, iGroupID, WEAPON_SNIPER, szMiscArray[4010]);
  538. if(szMiscArray[4011] != 0) /*for(new i = 0; i < szMiscArray[4011]; i++)*/ AddGroupSafeWeapon(INVALID_PLAYER_ID, iGroupID, WEAPON_SHOTGUN, szMiscArray[4011]);
  539. if(szMiscArray[4012] != 0) /*for(new i = 0; i < szMiscArray[4012]; i++)*/ AddGroupSafeWeapon(INVALID_PLAYER_ID, iGroupID, WEAPON_SAWEDOFF, szMiscArray[4012]);
  540. if(szMiscArray[4013] != 0) /*for(new i = 0; i < szMiscArray[4013]; i++)*/ AddGroupSafeWeapon(INVALID_PLAYER_ID, iGroupID, WEAPON_SHOTGSPA, szMiscArray[4013]);
  541. arrGroupData[iGroupID][g_iDrugs][0] += szMiscArray[4014];
  542. arrGroupData[iGroupID][g_iDrugs][1] += szMiscArray[4016];
  543. arrGroupData[iGroupID][g_iDrugs][2] += szMiscArray[4017];
  544. arrGroupData[iGroupID][g_iDrugs][3] += szMiscArray[4018];
  545. DeleteGCrate(playerid, iCrateID);
  546. SendClientMessageEx(playerid, COLOR_WHITE, "You have successfully delivered the crate to your locker.");
  547. return 1;
  548. }
  549. ShowGCrateTransferMenu(playerid, itemid, transfertype, stage = 0) {
  550. szMiscArray[0] = 0;
  551. //SetPVarInt(playerid, "TransferItem", itemid);
  552. switch(stage) {
  553. case 0: {
  554. ShowPlayerDialogEx(playerid, DIALOG_GANG_CRATE2, DIALOG_STYLE_LIST, "Please select an action!", "Withdraw from crate\nDeposit into crate", "Select", "Cancel");
  555. }
  556. case 1: {
  557. switch(transfertype) {
  558. case 0: { // withdraw
  559. format(szMiscArray, sizeof(szMiscArray), "Please input the quantity of %s you wish to withdraw!", GetItemNameFromIdx(itemid));
  560. ShowPlayerDialogEx(playerid, GCRATE_TRANSFER_WITHDRAW, DIALOG_STYLE_INPUT, "Withdraw item from crate!", szMiscArray, "Select", "Cancel");
  561. }
  562. case 1: { //deposit
  563. format(szMiscArray, sizeof(szMiscArray), "Please input the quantity of %s you wish to deposit!", GetItemNameFromIdx(itemid));
  564. ShowPlayerDialogEx(playerid, GCRATE_TRANSFER_DEPOSIT, DIALOG_STYLE_INPUT, "Deposit item into crate!", szMiscArray, "Select", "Cancel");
  565. }
  566. }
  567. }
  568. }
  569. return 1;
  570. }
  571. hook OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) {
  572. if(arrAntiCheat[playerid][ac_iFlags][AC_DIALOGSPOOFING] > 0) return 1;
  573. szMiscArray[0] = 0;
  574. switch(dialogid) {
  575. case DIALOG_GANG_CRATE1: {
  576. if(response) {
  577. //if(listitem < 13) return SendClientMessageEx(playerid, COLOR_RED, "This feature has been disabled. You can now transfer weapons via your locker!");
  578. SetPVarInt(playerid, "TransferItem", listitem);
  579. ShowGCrateTransferMenu(playerid, listitem, 0, 0);
  580. }
  581. }
  582. case DIALOG_GANG_CRATE2: {
  583. if(response) {
  584. new
  585. litemid = GetPVarInt(playerid, "TransferItem");
  586. ShowGCrateTransferMenu(playerid, litemid, listitem, 1);
  587. }
  588. }
  589. case PURCHASE_GANG_CRATE: {
  590. new iGroupID = PlayerInfo[playerid][pMember];
  591. if(response) {
  592. if(arrGroupData[iGroupID][g_iBudget] < 150000) return SendClientMessageEx(playerid, COLOR_GRAD2, "Your group does not have sufficient funds to create a crate!");
  593. format(szMiscArray, sizeof(szMiscArray), "SELECT * FROM `gCrates` WHERE `iGroupID` = %d", iGroupID);
  594. mysql_tquery(MainPipeline, szMiscArray, true, "OnCheckGCrates", "ii", playerid, iGroupID);
  595. }
  596. }
  597. case GCRATE_TRANSFER_DEPOSIT: {
  598. if(response) {
  599. if(strval(inputtext) < 1 || !IsNumeric(inputtext)) return SendClientMessage(playerid, COLOR_GRAD1, "You specified an invalid amount.");
  600. new
  601. iAmount = strval(inputtext),
  602. iItem = GetPVarInt(playerid, "TransferItem"),
  603. iCrateID = GetPVarInt(playerid, "GCTransferTo");
  604. TransferItemToCrate(playerid, iItem, iAmount, iCrateID);
  605. DeletePVar(playerid, "TransferItem");
  606. DeletePVar(playerid, "GCTransferTo");
  607. }
  608. }
  609. case GCRATE_TRANSFER_WITHDRAW: {
  610. if(response) {
  611. if(strval(inputtext) < 1 || !IsNumeric(inputtext)) return SendClientMessage(playerid, COLOR_GRAD1, "You specified an invalid amount.");
  612. new iAmount = strval(inputtext);
  613. TransferItemFromCrate(playerid, GetPVarInt(playerid, "TransferItem"), iAmount, GetPVarInt(playerid, "GCTransferTo"));
  614. DeletePVar(playerid, "TransferItem");
  615. DeletePVar(playerid, "GCTransferTo");
  616. }
  617. }
  618. }
  619. return 0;
  620. }
  621. CMD:purchasegcrate(playerid, params[]) {
  622. if(!GCrates_Permission(playerid)) return SendClientMessage(playerid, COLOR_GRAD2, "You cannot use this command.");
  623. ShowPlayerDialogEx(playerid, PURCHASE_GANG_CRATE, DIALOG_STYLE_MSGBOX, "Purchase Gang Crate",
  624. "Are you sure you wish to purchase a gang crate?\nThis will cost your gang $150,000!\n\
  625. If so, make sure you are in a place where a vehicle can access your crate!",
  626. "Create Crate", "Cancel"
  627. );
  628. return 1;
  629. }
  630. GCrates_Permission(playerid)
  631. {
  632. new iGroupID = PlayerInfo[playerid][pMember];
  633. if(PlayerInfo[playerid][pLeader] == iGroupID && (arrGroupData[iGroupID][g_iGroupType] == GROUP_TYPE_CRIMINAL || arrGroupData[iGroupID][g_iGroupType] == GROUP_TYPE_CONTRACT)) return 1;
  634. if(PlayerInfo[playerid][pAdmin] > 1) return 1;
  635. return 0;
  636. }
  637. CMD:preparegcrate(playerid, params[]) {
  638. szMiscArray[0] = 0;
  639. if(!GCrates_Permission(playerid)) return SendClientMessage(playerid, COLOR_GRAD2, "You cannot use this command.");
  640. new
  641. iCrateID;
  642. if(sscanf(params, "i", iCrateID)) return SendClientMessageEx(playerid, COLOR_GRAD2, "USAGE: /preparegcrate [crateid]");
  643. if(!IsValidDynamicObject(arrGCrateData[iCrateID][gcr_iObject])) return SendClientMessageEx(playerid, COLOR_GRAD2, "Invalid crate ID.");
  644. new
  645. Float:fTemp[3];
  646. GetDynamicObjectPos(arrGCrateData[iCrateID][gcr_iObject], fTemp[0], fTemp[1], fTemp[2]);
  647. if(IsPlayerInRangeOfPoint(playerid, 10.0, fTemp[0], fTemp[1], fTemp[2])) {
  648. ShowGCrateItems(playerid, iCrateID);
  649. }
  650. else SendClientMessage(playerid, COLOR_GRAD1, "You are not near the crate.");
  651. return 1;
  652. }
  653. CMD:gloadforklift(playerid, params[]) {
  654. if(!GCrates_Permission(playerid)) return SendClientMessage(playerid, COLOR_GRAD2, "You cannot use this command.");
  655. new iVehID = GetPlayerVehicleID(playerid),
  656. iCrateID;
  657. if(sscanf(params, "d", iCrateID)) return SendClientMessageEx(playerid, COLOR_GRAD2, "USAGE: /gloadforklift [crateid]");
  658. if(IsPlayerNearGCrate(playerid, iCrateID) == 0) return SendClientMessageEx(playerid, COLOR_GRAD1, "You are not near that gang crate.");
  659. if(GetVehicleModel(iVehID) != 530) return SendClientMessageEx(playerid, COLOR_GRAD1, "You are not in a forklift.");
  660. if(CrateVehicleLoad[iVehID][vForkLoaded]) return SendClientMessageEx(playerid, COLOR_GRAD1, "You already have a crate on your forklift.");
  661. CrateVehicleLoad[iVehID][vForkLoaded] = 1;
  662. CrateVehicleLoad[iVehID][vCrateID][0] = iCrateID;
  663. DestroyDynamicObject(arrGCrateData[iCrateID][gcr_iObject]);
  664. arrGCrateData[iCrateID][gcr_iObject] = CreateDynamicObject(964,-1077.59997559,4274.39990234,3.40000010,0.00000000,0.00000000,0.00000000);
  665. AttachDynamicObjectToVehicle(arrGCrateData[iCrateID][gcr_iObject], iVehID, 0, 0.9, 0, 0, 0, 0);
  666. DestroyDynamic3DTextLabel(arrGCrateData[iCrateID][gcr_iLabel]);
  667. format(szMiscArray, sizeof(szMiscArray), "Gang Crate ID: %d\n%s", iCrateID, arrGroupData[PlayerInfo[playerid][pMember]][g_szGroupName]);
  668. arrGCrateData[iCrateID][gcr_iLabel] = CreateDynamic3DTextLabel(szMiscArray, COLOR_GREEN, 0.0, 0.0, 0.0, 5.0, INVALID_PLAYER_ID, iVehID);
  669. return 1;
  670. }
  671. CMD:gunloadforklift(playerid, params[])
  672. {
  673. if(!GCrates_Permission(playerid)) return SendClientMessage(playerid, COLOR_GRAD2, "You cannot use this command.");
  674. new iVehID = GetPlayerVehicleID(playerid),
  675. iCrateID,
  676. Float:fTemp[3];
  677. if(GetVehicleModel(iVehID) != 530) return SendClientMessageEx(playerid, COLOR_GRAD1, "You are not in a forklift.");
  678. if(!CrateVehicleLoad[iVehID][vForkLoaded]) return SendClientMessage(playerid, COLOR_GRAD1, "You do not have a crate on your forklift.");
  679. iCrateID = CrateVehicleLoad[iVehID][vCrateID][0];
  680. CrateVehicleLoad[iVehID][vForkLoaded] = 0;
  681. DestroyDynamicObject(arrGCrateData[iCrateID][gcr_iObject]);
  682. DestroyDynamic3DTextLabel(arrGCrateData[iCrateID][gcr_iLabel]);
  683. GetPlayerPos(playerid, fTemp[0], fTemp[1], fTemp[2]);
  684. new iVW = GetPlayerVirtualWorld(playerid),
  685. iInt = GetPlayerInterior(playerid);
  686. GetXYInFrontOfPlayer(playerid, fTemp[0], fTemp[1], 2.0);
  687. arrGCrateData[iCrateID][gcr_iObject] = CreateDynamicObject(964, fTemp[0], fTemp[1], fTemp[2]-0.88, 0,0,0, .worldid = iVW, .interiorid = iInt);
  688. format(szMiscArray, sizeof(szMiscArray), "Gang Crate ID: %d\nDropped by: %s\n%s", iCrateID, GetPlayerNameEx(playerid), arrGroupData[PlayerInfo[playerid][pMember]][g_szGroupName]);
  689. arrGCrateData[iCrateID][gcr_iLabel] = CreateDynamic3DTextLabel(szMiscArray, COLOR_GREEN, fTemp[0], fTemp[1], fTemp[2], 5.0);
  690. return 1;
  691. }
  692. /*
  693. hook OnVehicleDeath(vehicleid, killerid)
  694. {
  695. if(CrateVehicleLoad[vehicleid][vForkLoaded]) if(IsValidDynamicObject(arrGCrateData[CrateVehicleLoad[vehicleid][vCrateID][0]][gcr_iObject])) DestroyDynamicObject(arrGCrateData[CrateVehicleLoad[vehicleid][vCrateID][0]][gcr_iObject]);
  696. }
  697. hook OnVehicleSpawn(vehicleid)
  698. {
  699. if(CrateVehicleLoad[vehicleid][vForkLoaded]) if(IsValidDynamicObject(arrGCrateData[CrateVehicleLoad[vehicleid][vCrateID][0]][gcr_iObject])) DestroyDynamicObject(arrGCrateData[CrateVehicleLoad[vehicleid][vCrateID][0]][gcr_iObject]);
  700. }*/
  701. CMD:gloadcrate(playerid, params[]) {
  702. if(!GCrates_Permission(playerid)) return SendClientMessage(playerid, COLOR_GRAD2, "You cannot use this command.");
  703. szMiscArray[0] = 0;
  704. new
  705. iVehID = GetPlayerVehicleID(playerid),
  706. iLoadVehID = GetClosestCar(playerid, iVehID, 6.0),
  707. iCrateID,
  708. iVehModelID = GetVehicleModel(iVehID);
  709. if(IsABike(iLoadVehID)) return SendClientMessageEx(playerid, COLOR_GRAD1, "Crates cannot be loaded onto bikes.");
  710. if(DynVehicleInfo[DynVeh[iLoadVehID]][gv_igID] == INVALID_GROUP_ID) SendClientMessageEx(playerid, COLOR_YELLOW, "This vehicle is not owned by a group!");
  711. if(iVehModelID != 530) return SendClientMessageEx(playerid, COLOR_WHITE, "You are not in a forklift.");
  712. if(sscanf(params, "d", iCrateID)) return SendClientMessageEx(playerid, COLOR_GRAD2, "USAGE: /gloadcrate [crateid]");
  713. if(CrateVehicleLoad[iVehID][vCrateID][0] != iCrateID) return SendClientMessageEx(playerid, COLOR_WHITE, "You do not have that crate on your forklift");
  714. if(iLoadVehID == INVALID_VEHICLE_ID) return SendClientMessageEx(playerid, COLOR_WHITE, "You are not near a vehicle.");
  715. if(CrateVehicleLoad[iLoadVehID][vForkLoaded])return SendClientMessageEx(playerid, COLOR_GRAD1, "There is a crate in that vehicle already!");
  716. DestroyDynamicObject(arrGCrateData[iCrateID][gcr_iObject]);
  717. DestroyDynamic3DTextLabel(arrGCrateData[iCrateID][gcr_iLabel]);
  718. format(szMiscArray, sizeof(szMiscArray), "Gang Crate ID: %d\n%s", iCrateID, arrGroupData[DynVehicleInfo[DynVeh[iLoadVehID]][gv_igID]][g_szGroupName]);
  719. arrGCrateData[iCrateID][gcr_iLabel] = CreateDynamic3DTextLabel(szMiscArray, COLOR_GREEN, 0.0, 0.0, 0.0, 5.0, INVALID_PLAYER_ID, iLoadVehID);
  720. format(szMiscArray, sizeof(szMiscArray), "You have successfully stored the crate into %s's %s", arrGroupData[DynVehicleInfo[DynVeh[iLoadVehID]][gv_igID]][g_szGroupName], VehicleName[GetVehicleModel(iLoadVehID)-400]);
  721. SendClientMessageEx(playerid, COLOR_WHITE, szMiscArray);
  722. CrateVehicleLoad[iVehID][vForkLoaded] = 0;
  723. CrateVehicleLoad[iLoadVehID][vForkLoaded] = 1;
  724. CrateVehicleLoad[iLoadVehID][vCrateID][0] = iCrateID;
  725. SaveGCrate(iCrateID, DynVehicleInfo[DynVeh[iLoadVehID]][gv_igID]);
  726. Streamer_Update(playerid);
  727. return 1;
  728. }
  729. CMD:gunloadcrate(playerid, params[])
  730. {
  731. if(!GCrates_Permission(playerid)) return SendClientMessage(playerid, COLOR_GRAD2, "You cannot use this command.");
  732. szMiscArray[0] = 0;
  733. new iVehID = GetPlayerVehicleID(playerid),
  734. iGVehID = GetClosestCar(playerid, iVehID, 6.0),
  735. iVehModelID = GetVehicleModel(iVehID);
  736. if(DynVehicleInfo[DynVeh[iGVehID]][gv_igID] == INVALID_GROUP_ID) SendClientMessageEx(playerid, COLOR_YELLOW, "This vehicle is not owned by a group!");
  737. if(iVehModelID != 530) return SendClientMessageEx(playerid, COLOR_GRAD1, "You are not in a forklift.");
  738. // if(iGVehID == INVALID_VEHICLE_ID || arrGroupData[DynVehicleInfo[DynVeh[iGVehID]][gv_igID]][g_iGroupType] != GROUP_TYPE_CRIMINAL || arrGroupData[DynVehicleInfo[DynVeh[iGVehID]][gv_igID]][g_iGroupType] != GROUP_TYPE_CONTRACT) return SendClientMessageEx(playerid, COLOR_GRAD1, "You are not near a gang vehicle.");
  739. if(CrateVehicleLoad[iVehID][vForkLoaded]) return SendClientMessageEx(playerid, COLOR_GRAD1, "You already have a crate on your forklift.");
  740. if(CrateVehicleLoad[iGVehID][vForkLoaded])
  741. {
  742. new iCrateID = CrateVehicleLoad[iGVehID][vCrateID][0];
  743. CrateVehicleLoad[iVehID][vCrateID][0] = iCrateID;
  744. CrateVehicleLoad[iGVehID][vForkLoaded] = 0;
  745. CrateVehicleLoad[iVehID][vForkLoaded] = 1;
  746. arrGCrateData[iCrateID][gcr_iObject] = CreateDynamicObject(964,-1077.59997559,4274.39990234,3.40000010,0.00000000,0.00000000,0.00000000);
  747. AttachDynamicObjectToVehicle(arrGCrateData[iCrateID][gcr_iObject], iVehID, 0, 0.9, 0, 0, 0, 0);
  748. DestroyDynamic3DTextLabel(arrGCrateData[iCrateID][gcr_iLabel]);
  749. format(szMiscArray, sizeof(szMiscArray), "Gang Crate ID: %d\n%s", iCrateID, arrGroupData[PlayerInfo[playerid][pMember]][g_szGroupName]);
  750. arrGCrateData[iCrateID][gcr_iLabel] = CreateDynamic3DTextLabel(szMiscArray, COLOR_GREEN, 0.0, 0.0, 0.0, 5.0, INVALID_PLAYER_ID, iVehID);
  751. format(szMiscArray, sizeof(szMiscArray), "You have successfully taken a crate from %s' %s.", arrGroupData[DynVehicleInfo[DynVeh[iGVehID]][gv_igID]][g_szGroupName], VehicleName[iGVehID-400]);
  752. SendClientMessageEx(playerid, COLOR_WHITE, szMiscArray);
  753. }
  754. else SendClientMessageEx(playerid, COLOR_WHITE, "This vehicle does not have any crates stored.");
  755. return 1;
  756. }
  757. CMD:gdelivercrate(playerid, params[])
  758. {
  759. new iGroupID = PlayerInfo[playerid][pMember],
  760. iVehID = GetPlayerVehicleID(playerid);
  761. if(arrGroupData[iGroupID][g_iGroupType] == GROUP_TYPE_CRIMINAL || arrGroupData[iGroupID][g_iGroupType] == GROUP_TYPE_CONTRACT) {
  762. new Float:fTemp[3];
  763. GetPlayerPos(playerid, fTemp[0], fTemp[1], fTemp[2]);
  764. for(new i; i < MAX_GROUPS; i++)
  765. {
  766. if(IsPlayerInRangeOfPoint(playerid, 6.0, arrGroupData[i][g_fCratePos][0], arrGroupData[i][g_fCratePos][1], arrGroupData[i][g_fCratePos][2]) && arrGroupData[i][g_iGroupType] == GROUP_TYPE_CRIMINAL)
  767. {
  768. if(CrateVehicleLoad[iVehID][vForkLoaded])
  769. {
  770. for(new ix = 0; ix < sizeof(CrateInfo); ix++)
  771. {
  772. if(CrateInfo[ix][InVehicle] == iVehID)
  773. {
  774. SetPVarInt(playerid, "CrateGuns_CID", ix);
  775. }
  776. }
  777. //DeliverGCCrate(playerid, iGroupID, CrateVehicleLoad[iVehID][vCrateID][0]);
  778. ShowPlayerDialogEx(playerid, DIALOG_GDELIVER_CRATE, DIALOG_STYLE_LIST, "Weapon - Quantity for Gang Deposit", "Desert Eagle - 13\nSPAS-12 - 5\nMP5 - 10\nM4A1 - 5\nAK-47 - 10\nSniper Rifle - 5\nShotgun - 17\n9mm - 50", "Select", "Cancel");
  779. break;
  780. }
  781. else SendClientMessageEx(playerid, COLOR_GRAD1, "Your vehicle does not have a crate stored.");
  782. break;
  783. }
  784. }
  785. }
  786. else SendClientMessageEx(playerid, COLOR_GRAD1, "You are not in a gang.");
  787. return 1;
  788. }
  789. CMD:gdelivergangcrate(playerid, params[])
  790. {
  791. if(!GCrates_Permission(playerid)) return SendClientMessage(playerid, COLOR_GRAD2, "You cannot use this command.");
  792. new iGroupID = PlayerInfo[playerid][pMember],
  793. iVehID = GetPlayerVehicleID(playerid);
  794. if(arrGroupData[iGroupID][g_iGroupType] == GROUP_TYPE_CRIMINAL || arrGroupData[iGroupID][g_iGroupType] == GROUP_TYPE_CONTRACT) {
  795. new Float:fTemp[3];
  796. GetPlayerPos(playerid, fTemp[0], fTemp[1], fTemp[2]);
  797. if(IsPlayerInRangeOfPoint(playerid, 6.0, arrGroupData[iGroupID][g_fCratePos][0], arrGroupData[iGroupID][g_fCratePos][1], arrGroupData[iGroupID][g_fCratePos][2]))
  798. {
  799. if(CrateVehicleLoad[iVehID][vForkLoaded])
  800. {
  801. CrateVehicleLoad[iVehID][vForkLoaded] = 0;
  802. DeliverGCCrate(playerid, iGroupID, CrateVehicleLoad[iVehID][vCrateID][0]);
  803. return 1;
  804. }
  805. else SendClientMessageEx(playerid, COLOR_GRAD1, "Your vehicle does not have a crate stored.");
  806. }
  807. else SendClientMessageEx(playerid, COLOR_GRAD1, "You are not near your group's crate delivery point.");
  808. }
  809. else SendClientMessageEx(playerid, COLOR_GRAD1, "You are not in a gang.");
  810. return 1;
  811. }
  812. CMD:gdestroycrate(playerid, params[])
  813. {
  814. if(IsACop(playerid))
  815. {
  816. new
  817. Float:fTemp[3],
  818. iCrateID;
  819. if(sscanf(params, "d", iCrateID)) return SendClientMessage(playerid, COLOR_GRAD1, "Usage: /gdestroycrate [crateid]");
  820. GetDynamicObjectPos(arrGCrateData[iCrateID][gcr_iObject], fTemp[0], fTemp[1], fTemp[2]);
  821. if(IsPlayerInRangeOfPoint(playerid, 7.0, fTemp[0], fTemp[1], fTemp[2])) {
  822. DeleteGCrate(playerid, iCrateID);
  823. Streamer_Update(playerid);
  824. }
  825. }
  826. else SendClientMessageEx(playerid, COLOR_GRAD2, "You are not a cop.");
  827. return 1;
  828. }
  829. CMD:agcrates(playerid, params[]) {
  830. szMiscArray[0] = 0;
  831. if(PlayerInfo[playerid][pAdmin] >= 1337)
  832. ShowGCrates(playerid);
  833. return 1;
  834. }
  835. CMD:adestroygcrate(playerid, params[]) {
  836. szMiscArray[0] = 0;
  837. new iCrateID;
  838. if(sscanf(params, "d", iCrateID)) return SendClientMessageEx(playerid, COLOR_WHITE, "Usage: /adestroygcrate [Crate ID]");
  839. DeleteGCrate(playerid, iCrateID);
  840. return 1;
  841. }
  842. CMD:gcratehelp(playerid, params[]) {
  843. SendClientMessageEx(playerid, COLOR_WHITE, "*** GANG CRATES *** /purchasegcrate /preparegcrate /gloadforklift /gunloadforklift /gloadcrate /gunloadcrate /gdelivercrate /gdelivergangcrate");
  844. if(IsACop(playerid)) SendClientMessageEx(playerid, COLOR_WHITE, "*** GANG CRATES (LEO) *** /gdestroycrate");
  845. if(PlayerInfo[playerid][pAdmin] >= 2) SendClientMessageEx(playerid, COLOR_WHITE, "*** GANG CRATES (ADMIN) *** /agcrates /adestroygcrate");
  846. return 1;
  847. }