dufflebag.inc 40 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818
  1. /*
  2. _____ __ __ _ _ ____ _____ _
  3. | __ \ / _|/ _| | | | | _ \ | __ \ | |
  4. | | | |_ _| |_| |_| | ___| |__ __ _ __ _ | |_) |_ _ | | | | ___ ___ _ __ ___ ___ _ __ __| |
  5. | | | | | | | _| _| |/ _ \ '_ \ / _` |/ _` | | _ <| | | | | | | |/ _ \/ __| '_ ` _ \ / _ \| '_ \ / _` |
  6. | |__| | |_| | | | | | | __/ |_) | (_| | (_| | | |_) | |_| | | |__| | __/\__ \ | | | | | (_) | | | | (_| |
  7. |_____/ \__,_|_| |_| |_|\___|_.__/ \__,_|\__, | |____/ \__, | |_____/ \___||___/_| |_| |_|\___/|_| |_|\__,_|
  8. __/ | __/ |
  9. |___/ |___/
  10. Replaces briefcase, not a "hidden" storage place.
  11. Can not be unequipped - only dropped. Does not save if the user logged out.
  12. It will instead drop on the ground with the items (restart wipes them all completely).
  13. The system will track every dufflebag ID and have variables to determine whenever it is:
  14. Currently equipped by a player
  15. Dropped on the ground
  16. Instead of assigning it to players.
  17. */
  18. #define MAX_DUFFLEBAGS 200
  19. #define MAX_DUFFLEBAG_WEAPONS 7
  20. #define MAX_DUFFLEBAG_MATERIALS 25000 // 25k
  21. #define MAX_DUFFLEBAG_MONEY 1000000 // 1 million
  22. #define MAX_DUFFLEBAG_DRUGS 750 // note that this is not for all of the drugs in the dufflebag - it's per each one
  23. #define DUFFLEBAG_DISAPPEAR_TIME 600 // in seconds, 600 seconds = 10 minutes
  24. #define DUFFLEBAG_COOLDOWN 1200 // in seconds, 1200 seconds = 20 minutes, cooldown of /buy duffle bag (saves)
  25. enum dufflebaginfo
  26. {
  27. bool:dfCreated, // is the dufflebag ID in use?
  28. bool:dfDropped, // is the dufflebag currently on the ground?
  29. bool:dfHold, // is the dufflebag currently being held?
  30. Float:dfPos[3], // position X, Y and Z if on the ground
  31. Text3D:dfText, // 3d label of the duffle
  32. dfPlayer, // playerid of the duffle (it's possible that there is not)
  33. dfObject, // objectid of the duffle
  34. dfTimer, // timer to auto remove the dufflebag if it's removed
  35. /* Dufflebag Items */
  36. dfWeapon[MAX_DUFFLEBAG_WEAPONS], // 7 slots for weapons
  37. dfMaterials, // materials storage
  38. dfMoney, // money storage
  39. /* Drugs */
  40. dfCocaine,
  41. dfMeth,
  42. dfCannabis,
  43. dfXanax,
  44. dfPromethazine,
  45. dfCodeine,
  46. dfLean,
  47. };
  48. new DuffleBag[MAX_DUFFLEBAGS][dufflebaginfo];
  49. /* Player Variables */
  50. new bool:holdingDufflebag[MAX_PLAYERS]; // is a player holding a dufflebag
  51. new holdingDufflebagID[MAX_PLAYERS]; // the ID of the dufflebag that a player is holding
  52. CreateDuffleBag()
  53. {
  54. new duffleid = -1;
  55. for(new i = 0; i < sizeof(DuffleBag); i++)
  56. {
  57. if(DuffleBag[i][dfCreated]) continue;
  58. DuffleBag[i][dfCreated] = true;
  59. duffleid = i;
  60. break;
  61. }
  62. return duffleid;
  63. }
  64. DeleteDuffleBag(duffleid)
  65. {
  66. /* We're resetting ALL of the dufflebag's variables since the ID might be
  67. used again and therefore we wouldn't want it to keep previous data. */
  68. DestroyDynamicObject(DuffleBag[duffleid][dfObject]);
  69. DuffleBag[duffleid][dfCreated] = false;
  70. DuffleBag[duffleid][dfDropped] = false;
  71. DuffleBag[duffleid][dfHold] = false;
  72. DuffleBag[duffleid][dfPos][0] = 0;
  73. DuffleBag[duffleid][dfPos][1] = 0;
  74. DuffleBag[duffleid][dfPos][2] = 0;
  75. DuffleBag[duffleid][dfPlayer] = -1;
  76. DuffleBag[duffleid][dfObject] = INVALID_OBJECT_ID;
  77. KillTimer(DuffleBag[duffleid][dfTimer]);
  78. DestroyDynamic3DTextLabel(DuffleBag[duffleid][dfText]);
  79. for(new i = 0; i < MAX_DUFFLEBAG_WEAPONS; i++)
  80. {
  81. DuffleBag[duffleid][dfWeapon][i] = 0;
  82. }
  83. DuffleBag[duffleid][dfMaterials] = 0;
  84. DuffleBag[duffleid][dfMoney] = 0;
  85. DuffleBag[duffleid][dfCocaine] = 0;
  86. DuffleBag[duffleid][dfMeth] = 0;
  87. DuffleBag[duffleid][dfCannabis] = 0;
  88. DuffleBag[duffleid][dfXanax] = 0;
  89. DuffleBag[duffleid][dfPromethazine] = 0;
  90. DuffleBag[duffleid][dfCodeine] = 0;
  91. DuffleBag[duffleid][dfLean] = 0;
  92. return 1;
  93. }
  94. AttachDufflebagToPlayer(playerid, duffleid)
  95. {
  96. holdingDufflebag[playerid] = true;
  97. holdingDufflebagID[playerid] = duffleid;
  98. SetPlayerAttachedObject(playerid, 9, 11745, 5, 0.175999, -0.038000, 0.020999, 0, -96.099967, 98.399986, 1.0, 1.0, 1.0);
  99. DuffleBag[duffleid][dfHold] = true;
  100. DuffleBag[duffleid][dfPlayer] = playerid;
  101. DuffleBag[duffleid][dfDropped] = false;
  102. if(IsValidDynamic3DTextLabel(DuffleBag[duffleid][dfText])) DestroyDynamic3DTextLabel(DuffleBag[duffleid][dfText]);
  103. return 1;
  104. }
  105. RemoveDufflebagFromPlayer(playerid, duffleid)
  106. {
  107. holdingDufflebag[playerid] = false;
  108. holdingDufflebagID[playerid] = -1;
  109. RemovePlayerAttachedObject(playerid, 9);
  110. DuffleBag[duffleid][dfHold] = false;
  111. DuffleBag[duffleid][dfPlayer] = -1;
  112. return 1;
  113. }
  114. DropDufflebag(playerid, duffleid)
  115. {
  116. if(pDeathState[playerid] == PLAYER_STATE_REVIVE || pDeathState[playerid] == PLAYER_STATE_INHOSP)
  117. {
  118. DuffleBag[duffleid][dfPos][0] = DeathPos[playerid][DeathX];
  119. DuffleBag[duffleid][dfPos][1] = DeathPos[playerid][DeathY];
  120. DuffleBag[duffleid][dfPos][2] = DeathPos[playerid][DeathZ]-1;
  121. }
  122. else
  123. {
  124. new Float: newpos[3];
  125. GetPlayerPos(playerid, newpos[0], newpos[1], newpos[2]);
  126. DuffleBag[duffleid][dfPos][0] = newpos[0];
  127. DuffleBag[duffleid][dfPos][1] = newpos[1];
  128. DuffleBag[duffleid][dfPos][2] = newpos[2]-0.78; // -0.78 to make sure it's on the ground
  129. }
  130. RemoveDufflebagFromPlayer(playerid, duffleid);
  131. DuffleBag[duffleid][dfDropped] = true;
  132. DuffleBag[duffleid][dfObject] = CreateDynamicObject(11745, DuffleBag[duffleid][dfPos][0], DuffleBag[duffleid][dfPos][1], DuffleBag[duffleid][dfPos][2], 0, 0, 5.22000, GetPlayerVirtualWorld(playerid), GetPlayerInterior(playerid), -1, 100.0);
  133. DuffleBag[duffleid][dfTimer] = SetTimerEx("DufflebagTimer", DUFFLEBAG_DISAPPEAR_TIME * 1000, false, "i", duffleid); // 1 seconds (1000 miliseconds) multiplied by the seconds defined to remove a dufflebag.
  134. DuffleBag[duffleid][dfText] = CreateDynamic3DTextLabel("{FF5E5A}Duffle Bag\n{FFFFFF}/dufflebag pickup", -1, DuffleBag[duffleid][dfPos][0], DuffleBag[duffleid][dfPos][1], DuffleBag[duffleid][dfPos][2]+0.3, 5);
  135. return 1;
  136. }
  137. IsPlayerNearDuffle(playerid)
  138. {
  139. new duffleid = -1;
  140. for(new i = 0; i < sizeof(DuffleBag); i++)
  141. {
  142. // dfDropped is checked as well, just in case, to make sure it's on the ground.
  143. if(IsPlayerInRangeOfPoint(playerid, 3, DuffleBag[i][dfPos][0], DuffleBag[i][dfPos][1], DuffleBag[i][dfPos][2]) && DuffleBag[i][dfDropped])
  144. {
  145. duffleid = i;
  146. break;
  147. }
  148. }
  149. return duffleid;
  150. }
  151. ShowPlayerDuffleContents(playerid, duffleid)
  152. {
  153. SendClientMessage(playerid, COLOR_WHITE, "Duffle bag Contents:");
  154. new msg[128], weapname[40];
  155. for(new i = 0; i < MAX_DUFFLEBAG_WEAPONS; i++)
  156. {
  157. if(DuffleBag[duffleid][dfWeapon][i] == 0) // if the weapon id in that slot is 0, which means it's not used
  158. {
  159. format(msg, sizeof(msg), "Slot %d: None", i); // display the slot ID of that weapon slot
  160. SendClientMessage(playerid, COLOR_BITEM, msg);
  161. }
  162. else // if there's a weapon, display its slot and name
  163. {
  164. GetWeaponName(DuffleBag[duffleid][dfWeapon][i], weapname, sizeof(weapname)); // get that weapon's name
  165. format(msg, sizeof(msg), "Slot %d: %s", i, weapname); // display the slot ID of that weapon and tell the player what weapon it is
  166. SendClientMessage(playerid, COLOR_BITEM, msg);
  167. }
  168. }
  169. format(msg, sizeof(msg), "Materials: %d", DuffleBag[duffleid][dfMaterials]);
  170. SendClientMessage(playerid, COLOR_BITEM, msg);
  171. format(msg, sizeof(msg), "Money: $%d", DuffleBag[duffleid][dfMoney]);
  172. SendClientMessage(playerid, COLOR_BITEM, msg);
  173. format(msg, sizeof(msg), "Cocaine: %d.0g", DuffleBag[duffleid][dfCocaine]);
  174. SendClientMessage(playerid, COLOR_BITEM, msg);
  175. format(msg, sizeof(msg), "Meth: %d.0g", DuffleBag[duffleid][dfMeth]);
  176. SendClientMessage(playerid, COLOR_BITEM, msg);
  177. format(msg, sizeof(msg), "Cannabis: %d.0g", DuffleBag[duffleid][dfCannabis]);
  178. SendClientMessage(playerid, COLOR_BITEM, msg);
  179. format(msg, sizeof(msg), "Xanax: %d.0g", DuffleBag[duffleid][dfXanax]);
  180. SendClientMessage(playerid, COLOR_BITEM, msg);
  181. format(msg, sizeof(msg), "Promethazine: %d.0 fl oz", DuffleBag[duffleid][dfPromethazine]);
  182. SendClientMessage(playerid, COLOR_BITEM, msg);
  183. format(msg, sizeof(msg), "Codeine: %d.0 fl oz", DuffleBag[duffleid][dfCodeine]);
  184. SendClientMessage(playerid, COLOR_BITEM, msg);
  185. format(msg, sizeof(msg), "Lean: %d.0 fl oz", DuffleBag[duffleid][dfLean]);
  186. SendClientMessage(playerid, COLOR_BITEM, msg);
  187. return 1;
  188. }
  189. IsPlayerHoldingDuffleBag(playerid) // is the player holding a duffle bag?
  190. {
  191. if(holdingDufflebag[playerid] != false) return 1;
  192. return 0;
  193. }
  194. HoldingDufflebagID(playerid) // the ID of the duffle bag that the player is holding
  195. {
  196. return holdingDufflebagID[playerid];
  197. }
  198. IsAllowedDuffleFaction(playerid) // this makes sure the player is in PD, FBI or SANG, in order to forcefully take a duffle bag from another player (must be restrained)
  199. {
  200. if(IsACop(playerid) || IsASANG(playerid)) return 1;
  201. return 0;
  202. }
  203. forward DufflebagTimer(duffleid);
  204. public DufflebagTimer(duffleid)
  205. {
  206. DeleteDuffleBag(duffleid);
  207. return 1;
  208. }
  209. forward IsDisallowedWeapon(playerid);
  210. // make sure to check if they are holding a weapon first
  211. public IsDisallowedWeapon(playerid)
  212. {
  213. new weaponid = GetPlayerWeapon(playerid);
  214. switch(weaponid)
  215. {
  216. case WEAPON_CHAINSAW: return 1; // chainsaw
  217. case WEAPON_GRENADE: return 1; //grenade
  218. case WEAPON_TEARGAS: return 1; // tear gas
  219. case WEAPON_MOLTOV: return 1; // molotov
  220. case WEAPON_FLAMETHROWER: return 1; // flamethrower
  221. case WEAPON_SATCHEL: return 1; // satchel charge (C4)
  222. case WEAPON_BOMB: return 1; // detonator of C4
  223. case WEAPON_SPRAYCAN: return 1; // spraycan
  224. case WEAPON_FIREEXTINGUISHER: return 1; // fire extinguisher
  225. }
  226. return 0;
  227. }
  228. Hook:df_OnPlayerConnect(playerid)
  229. {
  230. holdingDufflebag[playerid] = false;
  231. holdingDufflebagID[playerid] = -1;
  232. RemovePlayerAttachedObject(playerid, 9);
  233. return 1;
  234. }
  235. Hook:df_OnPlayerDisconnect(playerid, reason)
  236. {
  237. if(IsPlayerHoldingDuffleBag(playerid)) DropDufflebag(playerid, HoldingDufflebagID(playerid));
  238. RemovePlayerAttachedObject(playerid, 9);
  239. return 1;
  240. }
  241. Hook:df_OnPlayerDeath(playerid)
  242. {
  243. if(IsPlayerHoldingDuffleBag(playerid))
  244. {
  245. if(pDeathState[playerid] == PLAYER_STATE_NORMAL || PLAYER_STATE_REVIVE)
  246. {
  247. DropDufflebag(playerid, HoldingDufflebagID(playerid));
  248. }
  249. }
  250. return 1;
  251. }
  252. Hook:df_OnGameModeExit()
  253. {
  254. foreach(new i: Player)
  255. {
  256. RemovePlayerAttachedObject(i, 9);
  257. }
  258. return 1;
  259. }
  260. CMD:dufflebag(playerid, params[])
  261. {
  262. if(pDeathState[playerid] != PLAYER_STATE_NORMAL) return SendClientMessage(playerid, COLOR_GRAD1, "You can't use your duffle bag at this time.");
  263. if(PlayerInfo[playerid][pConnectTime] < 2) return SendClientMessage(playerid, COLOR_GRAD1, "You must play for at least 2 hours before you can get a duffle bag.");
  264. if(PlayerCuffed[playerid] > 0) return SendClientMessage(playerid, COLOR_GRAD1, "You can't use your duffle bag when cuffed.");
  265. if(inPaintball[playerid] > 0) return SendClientMessage(playerid, COLOR_GRAD1, "You cannot use your duffle bag at this time.");
  266. if(PlayerInfo[playerid][pJailed] == 1 || PlayerInfo[playerid][pJailed] == 2 || PlayerInfo[playerid][pAdminJailed] == 1) return SendClientMessage(playerid, COLOR_GREY, "You can't use this while you're in prison.");
  267. new action[2][32], slot, amount;
  268. if(sscanf(params, "s[32] ", action[0]))
  269. {
  270. SendClientMessage(playerid, COLOR_GREY, "{00BFFF}Usage:{FFFFFF} /dufflebag [name]");
  271. if(IsAllowedDuffleFaction(playerid)) SendClientMessage(playerid, COLOR_GRAD1, "Available names: pickup, check, deposit, withdraw, show, drop, give, take");
  272. else SendClientMessage(playerid, COLOR_GRAD1, "Available names: pickup, check, deposit, withdraw, show, drop, give");
  273. return 1;
  274. }
  275. if(!strcmp(action[0], "pickup", true))
  276. {
  277. if(IsPlayerHoldingDuffleBag(playerid)) return SendClientMessage(playerid, COLOR_GREY, "You already have a duffle bag in hand.");
  278. if(pDeathState[playerid] == PLAYER_STATE_REVIVE || IsPlayerRestricted(playerid)) return SendClientMessage(playerid, COLOR_GREY, "You can not do this right now.");
  279. new duffleid = IsPlayerNearDuffle(playerid);
  280. if(duffleid == -1) return SendClientMessage(playerid, COLOR_GREY, "You are not near a duffle bag that you can pick up.");
  281. DestroyDynamicObject(DuffleBag[duffleid][dfObject]);
  282. AttachDufflebagToPlayer(playerid, duffleid);
  283. DuffleBag[duffleid][dfDropped] = false;
  284. KillTimer(DuffleBag[duffleid][dfTimer]);
  285. new str[128];
  286. format(str, sizeof(str), "* %s picks up a duffle bag.", PlayerICName(playerid));
  287. ProxDetector(10.0, playerid, str, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE);
  288. PlayerPlaySound(playerid, 1052, 0.0, 0.0, 0.0);
  289. }
  290. else if(!strcmp(action[0], "check", true))
  291. {
  292. // duffleid is a dufflebag that's on ground near the player, however we prioritize the dufflebag that the player is holding
  293. new duffleid = IsPlayerNearDuffle(playerid);
  294. if(IsPlayerHoldingDuffleBag(playerid)) ShowPlayerDuffleContents(playerid, HoldingDufflebagID(playerid));
  295. else if(duffleid != -1) ShowPlayerDuffleContents(playerid, duffleid);
  296. else SendClientMessage(playerid, COLOR_GREY, "You are not near a duffle bag, or do not have one in hand.");
  297. }
  298. else if(!strcmp(action[0], "deposit", true))
  299. {
  300. if(!IsPlayerHoldingDuffleBag(playerid)) return SendClientMessage(playerid, COLOR_GREY, "You are not holding a duffle bag.");
  301. if(sscanf(params, "s[32] s[32] ", action[0], action[1]))
  302. {
  303. SendClientMessage(playerid, COLOR_GREY, "{00BFFF}Usage:{FFFFFF} /dufflebag deposit [item]");
  304. SendClientMessage(playerid, COLOR_GRAD1, "Available Items: weapon, materials, money, cocaine, meth, cannabis, xanax, promethazine, codeine, lean");
  305. return 1;
  306. }
  307. new duffleid = HoldingDufflebagID(playerid);
  308. if(!strcmp(action[1], "weapon", true))
  309. {
  310. if(sscanf(params, "s[32] s[32] i", action[0], action[1], slot))
  311. {
  312. SendClientMessage(playerid, COLOR_GREY, "{00BFFF}Usage:{FFFFFF} /dufflebag deposit weapon [slot]");
  313. }
  314. if(PlayerInfo[playerid][pConnectTime] < 2) return SendClientMessage(playerid, COLOR_GREY, "You must play for at least 2 hours before you can use this.");
  315. if(GetPlayerWeapon(playerid) == 0) return SendClientMessage(playerid, COLOR_GREY, "You are not holding any weapon.");
  316. if(IsDisallowedWeapon(playerid)) return SendClientMessage(playerid, COLOR_GREY, "You may not store this weapon.");
  317. if(IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, COLOR_GREY, "You can't do this in a vehicle.");
  318. if(IsAtEvent[playerid] == 1) return SendClientMessage(playerid, COLOR_GREY, "You cannot store a weapon during an event.");
  319. if(IsACop(playerid) || IsANG(playerid) || IsAMedic(playerid) || IsASenate(playerid) || PlayerInfo[playerid][pMember] == 10 || PlayerInfo[playerid][pMember] == 9 || IsASANG(playerid)) return SendClientMessage(playerid, COLOR_GRAD1, "Cops/DEA/DoC/SAN/Taxi Company can not use this command.");
  320. if(slot >= MAX_DUFFLEBAG_WEAPONS || slot < 0)
  321. {
  322. new msg[70];
  323. format(msg, sizeof(msg), "Invalid slot (slots 0-%d).", MAX_DUFFLEBAG_WEAPONS-1);
  324. return SendClientMessage(playerid, COLOR_GREY, msg);
  325. }
  326. new str[128];
  327. new getweap = GetPlayerWeapon(playerid);
  328. if(HaveAdminWeapon(playerid, getweap) == getweap) return SendClientMessage(playerid, COLOR_GREY, "You cannot store admin given weapons in your duffle bag.");
  329. if(HaveWeapon(playerid, getweap) != getweap)
  330. {
  331. format(str, sizeof(str), "{FF0000}AdmWarning{FFFFFF}: %s has attempted to duffle bag store a fake weapon.", PlayerOOCName(playerid));
  332. ABroadCast(COLOR_WHITE, str, 1);
  333. return SendClientMessage(playerid, COLOR_GREY, "You are not carrying a weapon.");
  334. }
  335. if(DuffleBag[duffleid][dfWeapon][slot] != 0) return SendClientMessage(playerid, COLOR_GREY, "There is already a weapon in that slot.");
  336. DuffleBag[duffleid][dfWeapon][slot] = GetPlayerWeapon(playerid);
  337. TakePlayerWeapon(playerid, getweap);
  338. SetPlayerArmedWeapon(playerid, 0);
  339. new weapname[40];
  340. GetWeaponName(getweap, weapname, sizeof(weapname));
  341. format(str, sizeof(str), "* %s puts their %s inside of their duffle bag.", PlayerICName(playerid), weapname);
  342. ProxDetector(10.0, playerid, str, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE);
  343. PlayerPlaySound(playerid, 1052, 0.0, 0.0, 0.0);
  344. }
  345. else if(!strcmp(action[1], "materials", true))
  346. {
  347. if(sscanf(params, "s[32] s[32] i", action[0], action[1], amount)) return SendClientMessage(playerid, COLOR_GREY, "{00BFFF}Usage:{FFFFFF} /dufflebag deposit materials [amount]");
  348. if(amount <= 0) return SendClientMessage(playerid, COLOR_GREY, "Invalid amount.");
  349. if(amount > PlayerInfo[playerid][pMats]) return SendClientMessage(playerid, COLOR_GRAD1, "You don't have that many materials on you.");
  350. new mats = DuffleBag[duffleid][dfMaterials];
  351. new calc = mats + amount;
  352. new str[128];
  353. if(calc > MAX_DUFFLEBAG_MATERIALS)
  354. {
  355. format(str, sizeof(str), "The duffle bag can only carry %d materials.", MAX_DUFFLEBAG_MATERIALS);
  356. return SendClientMessage(playerid, COLOR_GREY, str);
  357. }
  358. DuffleBag[duffleid][dfMaterials] += amount;
  359. PlayerInfo[playerid][pMats] -= amount;
  360. format(str, sizeof(str), "* %s puts some materials inside of their duffle bag.", PlayerICName(playerid));
  361. ProxDetector(10.0, playerid, str, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE);
  362. PlayerPlaySound(playerid, 1052, 0.0, 0.0, 0.0);
  363. }
  364. else if(!strcmp(action[1], "money", true))
  365. {
  366. if(sscanf(params, "s[32] s[32] i", action[0], action[1], amount)) return SendClientMessage(playerid, COLOR_GREY, "{00BFFF}Usage:{FFFFFF} /dufflebag deposit money [amount]");
  367. if(amount <= 0) return SendClientMessage(playerid, COLOR_GREY, "Invalid amount.");
  368. if(amount > PlayerInfo[playerid][pCash]) return SendClientMessage(playerid, COLOR_GREY, "You don't have that much money on you.");
  369. new cash = DuffleBag[duffleid][dfMoney];
  370. new calc = cash + amount;
  371. new str[128];
  372. if(calc > MAX_DUFFLEBAG_MONEY)
  373. {
  374. format(str, sizeof(str), "The duffle bag can only carry $%d money.", MAX_DUFFLEBAG_MONEY);
  375. return SendClientMessage(playerid, COLOR_GREY, str);
  376. }
  377. DuffleBag[duffleid][dfMoney] += amount;
  378. GiveMoney(playerid, -amount);
  379. format(str, sizeof(str), "* %s puts some money inside of their duffle bag.", PlayerICName(playerid));
  380. ProxDetector(10.0, playerid, str, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE);
  381. PlayerPlaySound(playerid, 1052, 0.0, 0.0, 0.0);
  382. }
  383. else if(!strcmp(action[1], "cocaine", true))
  384. {
  385. if(sscanf(params, "s[32] s[32] i", action[0], action[1], amount)) return SendClientMessage(playerid, COLOR_GREY, "{00BFFF}Usage:{FFFFFF} /dufflebag deposit cocaine [amount]");
  386. if(amount <= 0) return SendClientMessage(playerid, COLOR_GREY, "Invalid amount.");
  387. if(amount > PlayerInfo[playerid][pCocaine]) return SendClientMessage(playerid, COLOR_GREY, "You don't have that much cocaine on you.");
  388. new cocaine = DuffleBag[duffleid][dfCocaine];
  389. new calc = cocaine + amount;
  390. new str[128];
  391. if(calc > MAX_DUFFLEBAG_DRUGS)
  392. {
  393. format(str, sizeof(str), "The duffle bag can only carry %d.0g cocaine.", MAX_DUFFLEBAG_DRUGS);
  394. return SendClientMessage(playerid, COLOR_GREY, str);
  395. }
  396. DuffleBag[duffleid][dfCocaine] += amount;
  397. PlayerInfo[playerid][pCocaine] -= amount;
  398. format(str, sizeof(str), "* %s puts some cocaine inside of their duffle bag.", PlayerICName(playerid));
  399. ProxDetector(10.0, playerid, str, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE);
  400. PlayerPlaySound(playerid, 1052, 0.0, 0.0, 0.0);
  401. }
  402. else if(!strcmp(action[1], "meth", true))
  403. {
  404. if(sscanf(params, "s[32] s[32] i", action[0], action[1], amount)) return SendClientMessage(playerid, COLOR_GREY, "{00BFFF}Usage:{FFFFFF} /dufflebag deposit meth [amount]");
  405. if(amount <= 0) return SendClientMessage(playerid, COLOR_GREY, "Invalid amount.");
  406. if(amount > PlayerInfo[playerid][pMeth]) return SendClientMessage(playerid, COLOR_GREY, "You don't have that much meth on you.");
  407. new meth = DuffleBag[duffleid][dfMeth];
  408. new calc = meth + amount;
  409. new str[128];
  410. if(calc > MAX_DUFFLEBAG_DRUGS)
  411. {
  412. format(str, sizeof(str), "The duffle bag can only carry %d.0g meth.", MAX_DUFFLEBAG_DRUGS);
  413. return SendClientMessage(playerid, COLOR_GREY, str);
  414. }
  415. DuffleBag[duffleid][dfMeth] += amount;
  416. PlayerInfo[playerid][pMeth] -= amount;
  417. format(str, sizeof(str), "* %s puts some meth inside of their duffle bag.", PlayerICName(playerid));
  418. ProxDetector(10.0, playerid, str, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE);
  419. PlayerPlaySound(playerid, 1052, 0.0, 0.0, 0.0);
  420. }
  421. else if(!strcmp(action[1], "cannabis", true))
  422. {
  423. if(sscanf(params, "s[32] s[32] i", action[0], action[1], amount)) return SendClientMessage(playerid, COLOR_GREY, "{00BFFF}Usage:{FFFFFF} /dufflebag deposit cannabis [amount]");
  424. if(amount <= 0) return SendClientMessage(playerid, COLOR_GREY, "Invalid amount.");
  425. if(amount > PlayerInfo[playerid][pCannabis]) return SendClientMessage(playerid, COLOR_GREY, "You don't have that much cannabis on you.");
  426. new cannabis = DuffleBag[duffleid][dfCannabis];
  427. new calc = cannabis + amount;
  428. new str[128];
  429. if(calc > MAX_DUFFLEBAG_DRUGS)
  430. {
  431. format(str, sizeof(str), "The duffle bag can only carry %d.0g cannabis.", MAX_DUFFLEBAG_DRUGS);
  432. return SendClientMessage(playerid, COLOR_GREY, str);
  433. }
  434. DuffleBag[duffleid][dfCannabis] += amount;
  435. PlayerInfo[playerid][pCannabis] -= amount;
  436. format(str, sizeof(str), "* %s puts some cannabis inside of their duffle bag.", PlayerICName(playerid));
  437. ProxDetector(10.0, playerid, str, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE);
  438. PlayerPlaySound(playerid, 1052, 0.0, 0.0, 0.0);
  439. }
  440. else if(!strcmp(action[1], "xanax", true))
  441. {
  442. if(sscanf(params, "s[32] s[32] i", action[0], action[1], amount)) return SendClientMessage(playerid, COLOR_GREY, "{00BFFF}Usage:{FFFFFF} /dufflebag deposit xanax [amount]");
  443. if(amount <= 0) return SendClientMessage(playerid, COLOR_GREY, "Invalid amount.");
  444. if(amount > PlayerInfo[playerid][pXanax]) return SendClientMessage(playerid, COLOR_GREY, "You don't have that much xanax on you.");
  445. new xanax = DuffleBag[duffleid][dfXanax];
  446. new calc = xanax + amount;
  447. new str[128];
  448. if(calc > MAX_DUFFLEBAG_DRUGS)
  449. {
  450. format(str, sizeof(str), "The duffle bag can only carry %d.0g xanax.", MAX_DUFFLEBAG_DRUGS);
  451. return SendClientMessage(playerid, COLOR_GREY, str);
  452. }
  453. DuffleBag[duffleid][dfXanax] += amount;
  454. PlayerInfo[playerid][pXanax] -= amount;
  455. format(str, sizeof(str), "* %s puts some xanax inside of their duffle bag.", PlayerICName(playerid));
  456. ProxDetector(10.0, playerid, str, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE);
  457. PlayerPlaySound(playerid, 1052, 0.0, 0.0, 0.0);
  458. }
  459. else if(!strcmp(action[1], "promethazine", true))
  460. {
  461. if(sscanf(params, "s[32] s[32] i", action[0], action[1], amount)) return SendClientMessage(playerid, COLOR_GREY, "{00BFFF}Usage:{FFFFFF} /dufflebag deposit promethazine [amount]");
  462. if(amount <= 0) return SendClientMessage(playerid, COLOR_GREY, "Invalid amount.");
  463. if(amount > PlayerInfo[playerid][pPromethazine]) return SendClientMessage(playerid, COLOR_GREY, "You don't have that much promethazine on you.");
  464. new promethazine = DuffleBag[duffleid][dfPromethazine];
  465. new calc = promethazine + amount;
  466. new str[128];
  467. if(calc > MAX_DUFFLEBAG_DRUGS)
  468. {
  469. format(str, sizeof(str), "The duffle bag can only carry %d.0 fl oz promethazine.", MAX_DUFFLEBAG_DRUGS);
  470. return SendClientMessage(playerid, COLOR_GREY, str);
  471. }
  472. DuffleBag[duffleid][dfPromethazine] += amount;
  473. PlayerInfo[playerid][pPromethazine] -= amount;
  474. format(str, sizeof(str), "* %s puts some promethazine inside of their duffle bag.", PlayerICName(playerid));
  475. ProxDetector(10.0, playerid, str, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE);
  476. PlayerPlaySound(playerid, 1052, 0.0, 0.0, 0.0);
  477. }
  478. else if(!strcmp(action[1], "codeine", true))
  479. {
  480. if(sscanf(params, "s[32] s[32] i", action[0], action[1], amount)) return SendClientMessage(playerid, COLOR_GREY, "{00BFFF}Usage:{FFFFFF} /dufflebag deposit codeine [amount]");
  481. if(amount <= 0) return SendClientMessage(playerid, COLOR_GREY, "Invalid amount.");
  482. if(amount > PlayerInfo[playerid][pCodeine]) return SendClientMessage(playerid, COLOR_GREY, "You don't have that much codeine on you.");
  483. new codeine = DuffleBag[duffleid][dfCodeine];
  484. new calc = codeine + amount;
  485. new str[128];
  486. if(calc > MAX_DUFFLEBAG_DRUGS)
  487. {
  488. format(str, sizeof(str), "The duffle bag can only carry %d.0 fl oz codeine.", MAX_DUFFLEBAG_DRUGS);
  489. return SendClientMessage(playerid, COLOR_GREY, str);
  490. }
  491. DuffleBag[duffleid][dfCodeine] += amount;
  492. PlayerInfo[playerid][pCodeine] -= amount;
  493. format(str, sizeof(str), "* %s puts some codeine inside of their duffle bag.", PlayerICName(playerid));
  494. ProxDetector(10.0, playerid, str, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE);
  495. PlayerPlaySound(playerid, 1052, 0.0, 0.0, 0.0);
  496. }
  497. else if(!strcmp(action[1], "lean", true))
  498. {
  499. if(sscanf(params, "s[32] s[32] i", action[0], action[1], amount)) return SendClientMessage(playerid, COLOR_GREY, "{00BFFF}Usage:{FFFFFF} /dufflebag deposit lean [amount]");
  500. if(amount <= 0) return SendClientMessage(playerid, COLOR_GREY, "Invalid amount.");
  501. if(amount > PlayerInfo[playerid][pLean]) return SendClientMessage(playerid, COLOR_GREY, "You don't have that much lean on you.");
  502. new lean = DuffleBag[duffleid][dfLean];
  503. new calc = lean + amount;
  504. new str[128];
  505. if(calc > MAX_DUFFLEBAG_DRUGS)
  506. {
  507. format(str, sizeof(str), "The duffle bag can only carry %d.0 fl oz codeine.", MAX_DUFFLEBAG_DRUGS);
  508. return SendClientMessage(playerid, COLOR_GREY, str);
  509. }
  510. DuffleBag[duffleid][dfLean] += amount;
  511. PlayerInfo[playerid][pLean] -= amount;
  512. format(str, sizeof(str), "* %s puts some codeine inside of their duffle bag.", PlayerICName(playerid));
  513. ProxDetector(10.0, playerid, str, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE);
  514. PlayerPlaySound(playerid, 1052, 0.0, 0.0, 0.0);
  515. }
  516. }
  517. else if(!strcmp(action[0], "withdraw", true))
  518. {
  519. if(!IsPlayerHoldingDuffleBag(playerid)) return SendClientMessage(playerid, COLOR_GREY, "You are not holding a duffle bag.");
  520. if(sscanf(params, "s[32] s[32] ", action[0], action[1]))
  521. {
  522. SendClientMessage(playerid, COLOR_GREY, "{00BFFF}Usage:{FFFFFF} /dufflebag withdraw [item]");
  523. SendClientMessage(playerid, COLOR_GRAD1, "Available Items: weapon, materials, money, cocaine, meth, cannabis, xanax, promethazine, codeine, lean");
  524. return 1;
  525. }
  526. new duffleid = HoldingDufflebagID(playerid);
  527. if(!strcmp(action[1], "weapon", true))
  528. {
  529. if(sscanf(params, "s[32] s[32] i", action[0], action[1], slot)) return SendClientMessage(playerid, COLOR_GREY, "{00BFFF}Usage:{FFFFFF} /dufflebag withdraw weapon [slot]");
  530. if(PlayerInfo[playerid][pConnectTime] < 2) return SendClientMessage(playerid, COLOR_GRAD1, "You must play for at least 2 hours before you can use this.");
  531. if(IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, COLOR_GRAD2, "You can't do this in a vehicle.");
  532. if(IsAtEvent[playerid] == 1) return SendClientMessage(playerid, COLOR_GRAD1, "You cannot withdraw a weapon during an event.");
  533. if(IsACop(playerid) == 1 || IsANG(playerid) == 1 || IsAMedic(playerid) == 1 || IsASenate(playerid) || PlayerInfo[playerid][pMember] == 10 || PlayerInfo[playerid][pMember] == 9 || PlayerInfo[playerid][pMember] == FACTION_SANG) return SendClientMessage(playerid, COLOR_GRAD1, "Cops/DEA/DoC/SAN/Taxi Company can not use this command.");
  534. if(slot >= MAX_DUFFLEBAG_WEAPONS || slot < 0)
  535. {
  536. new msg[70];
  537. format(msg, sizeof(msg), "Invalid slot (slots 0-%d).", MAX_DUFFLEBAG_WEAPONS-1);
  538. return SendClientMessage(playerid, COLOR_GREY, msg);
  539. }
  540. new str[128];
  541. if(DuffleBag[duffleid][dfWeapon][slot] == 0) return SendClientMessage(playerid, COLOR_GREY, "There is no weapon in that slot.");
  542. GivePlayerGun(playerid, DuffleBag[duffleid][dfWeapon][slot]);
  543. SetPlayerArmedWeapon(playerid, DuffleBag[duffleid][dfWeapon][slot]);
  544. new weapname[40];
  545. GetWeaponName(DuffleBag[duffleid][dfWeapon][slot], weapname, sizeof(weapname));
  546. DuffleBag[duffleid][dfWeapon][slot] = 0;
  547. format(str, sizeof(str), "* %s takes a %s from their duffle bag.", PlayerICName(playerid), weapname);
  548. ProxDetector(10.0, playerid, str, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE);
  549. PlayerPlaySound(playerid, 1052, 0.0, 0.0, 0.0);
  550. }
  551. else if(!strcmp(action[1], "materials", true))
  552. {
  553. if(sscanf(params, "s[32] s[32] i", action[0], action[1], amount)) return SendClientMessage(playerid, COLOR_GREY, "{00BFFF}Usage:{FFFFFF} /dufflebag withdraw materials [amount]");
  554. if(amount <= 0) return SendClientMessage(playerid, COLOR_GREY, "Invalid amount.");
  555. if(amount > DuffleBag[duffleid][dfMaterials]) return SendClientMessage(playerid, COLOR_GRAD1, "The duffle bag doesn't have that much materials.");
  556. new str[128];
  557. DuffleBag[duffleid][dfMaterials] -= amount;
  558. PlayerInfo[playerid][pMats] += amount;
  559. format(str, sizeof(str), "* %s withdraws some materials from the dufflebag.", PlayerICName(playerid));
  560. ProxDetector(10.0, playerid, str, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE);
  561. PlayerPlaySound(playerid, 1052, 0.0, 0.0, 0.0);
  562. }
  563. else if(!strcmp(action[1], "money", true))
  564. {
  565. if(sscanf(params, "s[32] s[32] i", action[0], action[1], amount)) return SendClientMessage(playerid, COLOR_GREY, "{00BFFF}Usage:{FFFFFF} /dufflebag deposit money [amount]");
  566. if(amount <= 0) return SendClientMessage(playerid, COLOR_GREY, "Invalid amount.");
  567. if(amount > DuffleBag[duffleid][dfMoney]) return SendClientMessage(playerid, COLOR_GREY, "The duffle bag doesn't have that much money.");
  568. new str[128];
  569. DuffleBag[duffleid][dfMoney] -= amount;
  570. GiveMoney(playerid, amount);
  571. format(str, sizeof(str), "* %s takes some money from their duffle bag.", PlayerICName(playerid));
  572. ProxDetector(10.0, playerid, str, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE);
  573. PlayerPlaySound(playerid, 1052, 0.0, 0.0, 0.0);
  574. }
  575. else if(!strcmp(action[1], "cocaine", true))
  576. {
  577. if(sscanf(params, "s[32] s[32] i", action[0], action[1], amount)) return SendClientMessage(playerid, COLOR_GREY, "{00BFFF}Usage:{FFFFFF} /dufflebag withdraw cocaine [amount]");
  578. if(amount <= 0) return SendClientMessage(playerid, COLOR_GREY, "Invalid amount.");
  579. if(amount > DuffleBag[duffleid][dfCocaine]) return SendClientMessage(playerid, COLOR_GREY, "The duffle bag doesn't have that much cocaine.");
  580. new str[128];
  581. DuffleBag[duffleid][dfCocaine] -= amount;
  582. PlayerInfo[playerid][pCocaine] += amount;
  583. format(str, sizeof(str), "* %s takes some cocaine from their duffle bag.", PlayerICName(playerid));
  584. ProxDetector(10.0, playerid, str, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE);
  585. PlayerPlaySound(playerid, 1052, 0.0, 0.0, 0.0);
  586. }
  587. else if(!strcmp(action[1], "meth", true))
  588. {
  589. if(sscanf(params, "s[32] s[32] i", action[0], action[1], amount)) return SendClientMessage(playerid, COLOR_GREY, "{00BFFF}Usage:{FFFFFF} /dufflebag withdraw meth [amount]");
  590. if(amount <= 0) return SendClientMessage(playerid, COLOR_GREY, "Invalid amount.");
  591. if(amount > DuffleBag[duffleid][dfMeth]) return SendClientMessage(playerid, COLOR_GREY, "The duffle bag doesn't have that much meth.");
  592. new str[128];
  593. DuffleBag[duffleid][dfMeth] -= amount;
  594. PlayerInfo[playerid][pMeth] += amount;
  595. format(str, sizeof(str), "* %s takes some meth from their duffle bag.", PlayerICName(playerid));
  596. ProxDetector(10.0, playerid, str, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE);
  597. PlayerPlaySound(playerid, 1052, 0.0, 0.0, 0.0);
  598. }
  599. else if(!strcmp(action[1], "cannabis", true))
  600. {
  601. if(sscanf(params, "s[32] s[32] i", action[0], action[1], amount)) return SendClientMessage(playerid, COLOR_GREY, "{00BFFF}Usage:{FFFFFF} /dufflebag withdraw cannabis [amount]");
  602. if(amount <= 0) return SendClientMessage(playerid, COLOR_GREY, "Invalid amount.");
  603. if(amount > DuffleBag[duffleid][dfCannabis]) return SendClientMessage(playerid, COLOR_GREY, "The duffle bag doesn't have that much cannabis.");
  604. new str[128];
  605. DuffleBag[duffleid][dfCannabis] -= amount;
  606. PlayerInfo[playerid][pCannabis] += amount;
  607. format(str, sizeof(str), "* %s takes some cannabis from their duffle bag.", PlayerICName(playerid));
  608. ProxDetector(10.0, playerid, str, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE);
  609. PlayerPlaySound(playerid, 1052, 0.0, 0.0, 0.0);
  610. }
  611. else if(!strcmp(action[1], "xanax", true))
  612. {
  613. if(sscanf(params, "s[32] s[32] i", action[0], action[1], amount)) return SendClientMessage(playerid, COLOR_GREY, "{00BFFF}Usage:{FFFFFF} /dufflebag withdraw xanax [amount]");
  614. if(amount <= 0) return SendClientMessage(playerid, COLOR_GREY, "Invalid amount.");
  615. if(amount > DuffleBag[duffleid][dfXanax]) return SendClientMessage(playerid, COLOR_GREY, "The duffle bag doesn't have that much xanax.");
  616. new str[128];
  617. DuffleBag[duffleid][dfXanax] -= amount;
  618. PlayerInfo[playerid][pXanax] += amount;
  619. format(str, sizeof(str), "* %s takes some xanax from their duffle bag.", PlayerICName(playerid));
  620. ProxDetector(10.0, playerid, str, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE);
  621. PlayerPlaySound(playerid, 1052, 0.0, 0.0, 0.0);
  622. }
  623. else if(!strcmp(action[1], "promethazine", true))
  624. {
  625. if(sscanf(params, "s[32] s[32] i", action[0], action[1], amount)) return SendClientMessage(playerid, COLOR_GREY, "{00BFFF}Usage:{FFFFFF} /dufflebag withdraw promethazine [amount]");
  626. if(amount <= 0) return SendClientMessage(playerid, COLOR_GREY, "Invalid amount.");
  627. if(amount > DuffleBag[duffleid][dfPromethazine]) return SendClientMessage(playerid, COLOR_GREY, "The duffle bag doesn't have that much promethazine.");
  628. new str[128];
  629. DuffleBag[duffleid][dfPromethazine] -= amount;
  630. PlayerInfo[playerid][pPromethazine] += amount;
  631. format(str, sizeof(str), "* %s takes some promethazine from their duffle bag.", PlayerICName(playerid));
  632. ProxDetector(10.0, playerid, str, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE);
  633. PlayerPlaySound(playerid, 1052, 0.0, 0.0, 0.0);
  634. }
  635. else if(!strcmp(action[1], "codeine", true))
  636. {
  637. if(sscanf(params, "s[32] s[32] i", action[0], action[1], amount)) return SendClientMessage(playerid, COLOR_GREY, "{00BFFF}Usage:{FFFFFF} /dufflebag withdraw codeine [amount]");
  638. if(amount <= 0) return SendClientMessage(playerid, COLOR_GREY, "Invalid amount.");
  639. if(amount > DuffleBag[duffleid][dfCodeine]) return SendClientMessage(playerid, COLOR_GREY, "The duffle bag doesn't have that much codeine.");
  640. new str[128];
  641. DuffleBag[duffleid][dfCodeine] -= amount;
  642. PlayerInfo[playerid][pCodeine] += amount;
  643. format(str, sizeof(str), "* %s takes some codeine from their duffle bag.", PlayerICName(playerid));
  644. ProxDetector(10.0, playerid, str, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE);
  645. PlayerPlaySound(playerid, 1052, 0.0, 0.0, 0.0);
  646. }
  647. else if(!strcmp(action[1], "lean", true))
  648. {
  649. if(sscanf(params, "s[32] s[32] i", action[0], action[1], amount)) return SendClientMessage(playerid, COLOR_GREY, "{00BFFF}Usage:{FFFFFF} /dufflebag withdraw lean [amount]");
  650. if(amount <= 0) return SendClientMessage(playerid, COLOR_GREY, "Invalid amount.");
  651. if(amount > DuffleBag[duffleid][dfLean]) return SendClientMessage(playerid, COLOR_GREY, "The duffle bag doesn't have that much lean.");
  652. new str[128];
  653. DuffleBag[duffleid][dfLean] -= amount;
  654. PlayerInfo[playerid][pLean] += amount;
  655. format(str, sizeof(str), "* %s takes some lean from their duffle bag.", PlayerICName(playerid));
  656. ProxDetector(10.0, playerid, str, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE);
  657. PlayerPlaySound(playerid, 1052, 0.0, 0.0, 0.0);
  658. }
  659. }
  660. else if(!strcmp(action[0], "show", true))
  661. {
  662. if(!IsPlayerHoldingDuffleBag(playerid)) return SendClientMessage(playerid, COLOR_GREY, "You do not have a duffle bag in hand.");
  663. new target;
  664. if(sscanf(params, "s[32] u", action[0], target)) return SendClientMessage(playerid, COLOR_GREY, "{00BFFF}Usage:{FFFFFF} /dufflebag show [PartOfName/playerid]");
  665. if(!IsPlayerConnected(target) || target == INVALID_PLAYER_ID) return SendClientMessage(playerid, COLOR_GREY, "Invalid player.");
  666. if(!IsPlayerInRangeOfPlayer(3, playerid, target)) return SendClientMessage(playerid, COLOR_GREY, "You are not near that player.");
  667. new str[128];
  668. ShowPlayerDuffleContents(target, HoldingDufflebagID(playerid));
  669. format(str, sizeof(str), "* %s shows %s their duffle bag content.", PlayerICName(playerid), PlayerICName(target));
  670. ProxDetector(10.0, playerid, str, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE);
  671. }
  672. else if(!strcmp(action[0], "drop", true))
  673. {
  674. if(!IsPlayerHoldingDuffleBag(playerid)) return SendClientMessage(playerid, COLOR_GREY, "You do not have a duffle bag in hand.");
  675. if(IsPlayerRestricted(playerid)) return SendClientMessage(playerid, COLOR_GREY, "You can not do this right now.");
  676. DropDufflebag(playerid, HoldingDufflebagID(playerid));
  677. new str[128];
  678. format(str, sizeof(str), "* %s drops a duffle bag.", PlayerICName(playerid));
  679. ProxDetector(10.0, playerid, str, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE);
  680. PlayerPlaySound(playerid, 1052, 0.0, 0.0, 0.0);
  681. }
  682. else if(!strcmp(action[0], "give", true))
  683. {
  684. if(!IsPlayerHoldingDuffleBag(playerid)) return SendClientMessage(playerid, COLOR_GREY, "You do not have a duffle bag in hand.");
  685. if(IsPlayerRestricted(playerid)) return SendClientMessage(playerid, COLOR_GREY, "You can not do this right now.");
  686. new target;
  687. if(sscanf(params, "s[32] u", action[0], target)) return SendClientMessage(playerid, COLOR_GREY, "{00BFFF}Usage:{FFFFFF} /dufflebag give [PartOfName/playerid]");
  688. if(!IsPlayerConnected(target) || target == INVALID_PLAYER_ID) return SendClientMessage(playerid, COLOR_GREY, "Invalid player.");
  689. if(!IsPlayerInRangeOfPlayer(3, playerid, target)) return SendClientMessage(playerid, COLOR_GREY, "You are not near that player.");
  690. if(IsPlayerHoldingDuffleBag(target)) return SendClientMessage(playerid, COLOR_GREY, "That player already has a duffle bag in their hand.");
  691. new duffleid = HoldingDufflebagID(playerid); // get the id of the duffle bag that is given
  692. RemoveDufflebagFromPlayer(playerid, duffleid); // remove it from the player's hand, this will not reset anything but the player's variables, hence why we stored the id above
  693. AttachDufflebagToPlayer(target, duffleid); // give it to the target
  694. new str[128];
  695. format(str, sizeof(str), "* %s hands %s their duffle bag.", PlayerICName(playerid), PlayerICName(target));
  696. ProxDetector(10.0, playerid, str, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE);
  697. }
  698. else if(!strcmp(action[0], "take", true))
  699. {
  700. if(!IsAllowedDuffleFaction(playerid)) return 1;
  701. if(IsPlayerRestricted(playerid)) return SendClientMessage(playerid, COLOR_GREY, "You can not do this right now.");
  702. new target;
  703. if(sscanf(params, "s[32] u", action[0], target)) return SendClientMessage(playerid, COLOR_GREY, "{00BFFF}Usage:{FFFFFF} /dufflebag take [PartOfName/playerid]");
  704. if(!IsPlayerConnected(target) || target == INVALID_PLAYER_ID) return SendClientMessage(playerid, COLOR_GREY, "Invalid player.");
  705. if(!IsPlayerInRangeOfPlayer(3, playerid, target)) return SendClientMessage(playerid, COLOR_GREY, "You are not near that player.");
  706. if(!IsPlayerHoldingDuffleBag(target)) return SendClientMessage(playerid, COLOR_GREY, "That player doesn't have a duffle bag in their hand.");
  707. if(!PlayerCuffed[target]) return SendClientMessage(playerid, COLOR_GREY, "The player must be restrained first.");
  708. if(IsPlayerHoldingDuffleBag(playerid)) return SendClientMessage(playerid, COLOR_GREY, "You already have a duffle bag in hand.");
  709. new duffleid = HoldingDufflebagID(target); // get the id of the duffle bag that is given
  710. RemoveDufflebagFromPlayer(target, duffleid); // remove it from the player's hand, this will not reset anything but the player's variables, hence why we stored the id above
  711. AttachDufflebagToPlayer(playerid, duffleid); // give it to the target
  712. new str[128];
  713. format(str, sizeof(str), "* %s forcefully takes %s's duffle bag.", PlayerICName(playerid), PlayerICName(target));
  714. ProxDetector(10.0, playerid, str, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE);
  715. }
  716. return 1;
  717. }