Guest User

Inventory System with MYSQL

a guest
Jul 15th, 2016
364
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 9.39 KB | None | 0 0
  1. #include <a_samp>
  2. #include <ArrayList>// Include ArrayList for PAWN
  3. #include <a_mysql>
  4. #include <sscanf2> // Sscanf for cmd
  5. #include <zcmd> // ZCMD commands
  6.  
  7. #pragma tabsize 0
  8.  
  9. #undef MAX_PLAYERS
  10. #define MAX_PLAYERS             (50)
  11. #define MAX_ITEMS               (10) // Max items per player in inventory
  12. #define INVENTORY_DIALOG        (8080)
  13.  
  14. new Handle;//Mysql Handle
  15.  
  16. enum E_INVENTORY
  17. {
  18.     bool:   i_used,
  19.             i_id,
  20.             i_item_type,
  21.             i_item_amount
  22. }
  23. new
  24.     PlayerInventory[MAX_PLAYERS][E_INVENTORY][MAX_ITEMS];
  25.  
  26. // Items
  27. new ItemArray [] [] =
  28. {
  29.     {1, "Desert Eagle"},
  30.     {2, "Medkit"},
  31.     {3, "Burger"},
  32.     {4, "Police Vest"}
  33. };
  34.  
  35. // Declare lists
  36. new
  37.     ArrayList:InventoryList[MAX_PLAYERS];
  38.  
  39.  
  40. main()
  41. {
  42.     print("\n----------------------------------");
  43.     print("  Bare Script\n");
  44.     print("----------------------------------\n");
  45. }
  46.  
  47. public OnPlayerConnect(playerid)
  48. {
  49.     GameTextForPlayer(playerid,"~w~SA-MP: ~r~Bare Script",5000,5);
  50.    
  51.     InventoryList[playerid] = NewArrayList<INTEGER>(MAX_ITEMS);
  52.    
  53.     new query[110];
  54.     mysql_format(Handle, query, sizeof(query), "SELECT `Type`, `Amount` FROM `items` WHERE `User` = '%e'", GetPlayerNam(playerid));
  55.     mysql_function_query(Handle, query, true, "OnPlayerLoadItems", "i", playerid);
  56.    
  57.     return 1;
  58. }
  59.  
  60. public OnPlayerDisconnect(playerid, reason)
  61. {
  62.     // Clear array
  63.     ClearInventory(playerid);
  64.  
  65.     // Destroy list
  66.     ArrayList::Destroy(InventoryList[playerid]);
  67.     return 1;
  68. }
  69.  
  70. public OnPlayerSpawn(playerid)
  71. {
  72.     SetPlayerInterior(playerid,0);
  73.     TogglePlayerClock(playerid,0);
  74.    
  75.     return 1;
  76. }
  77.  
  78. public OnPlayerDeath(playerid, killerid, reason)
  79. {
  80.     return 1;
  81. }
  82.  
  83. SetupPlayerForClassSelection(playerid)
  84. {
  85.     SetPlayerInterior(playerid,14);
  86.     SetPlayerPos(playerid,258.4893,-41.4008,1002.0234);
  87.     SetPlayerFacingAngle(playerid, 270.0);
  88.     SetPlayerCameraPos(playerid,256.0815,-43.0475,1004.0234);
  89.     SetPlayerCameraLookAt(playerid,258.4893,-41.4008,1002.0234);
  90. }
  91.  
  92. public OnPlayerRequestClass(playerid, classid)
  93. {
  94.     SetupPlayerForClassSelection(playerid);
  95.     return 1;
  96. }
  97.  
  98. public OnGameModeInit()
  99. {
  100.     SetGameModeText("Bare Script");
  101.     ShowPlayerMarkers(1);
  102.     ShowNameTags(1);
  103.     AllowAdminTeleport(1);
  104.  
  105.     AddPlayerClass(265,1958.3783,1343.1572,15.3746,270.1425,0,0,0,0,-1,-1);
  106.    
  107.         Handle = mysql_connect("localhost", "root", "db", "");
  108.       if(mysql_errno() != 0)
  109.     {
  110.         print("MYSQL CONNECTION ERROR!");
  111.         SendRconCommand("exit");
  112.     }
  113.     else
  114.     {
  115.         print("CONNECTED TO MYSQL SUCESSFULLY");
  116.     }
  117.  
  118.     return 1;
  119. }
  120.  
  121. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  122. {
  123.     if (dialogid == INVENTORY_DIALOG)
  124.     {
  125.         if (!response)      {
  126.         }
  127.          else
  128.         {
  129.              new buffer[120];
  130.              format (buffer, sizeof(buffer), "%s", ItemArray[PlayerInventory[playerid][i_item_type][listitem] - 1][1]);
  131.                
  132.                 //Max 10 Items
  133.                  if(!strcmp(buffer,"Burger",true))
  134.     {
  135.     if(PlayerInventory[playerid][i_item_amount][listitem] < 1) return SendClientMessage(playerid, -1, "No Amount"), RemoveItemFromInventory(playerid, listitem + 1);
  136.     SendClientMessage(playerid, -1, "I'am a Burger!");
  137.     PlayerInventory[playerid][i_item_amount][listitem] -= 1;
  138.     UpdateAmountFromInventory(playerid, listitem + 1);
  139.     }
  140.                  if(!strcmp(buffer,"Police Vest",true))
  141.     {
  142.     if(PlayerInventory[playerid][i_item_amount][listitem] < 1) return SendClientMessage(playerid, -1, "No Amount"), RemoveItemFromInventory(playerid, listitem + 1);
  143.     SendClientMessage(playerid, -1, "I'am a Police Vest!");
  144.     PlayerInventory[playerid][i_item_amount][listitem] -= 1;
  145.     UpdateAmountFromInventory(playerid, listitem + 1);
  146.     }
  147.                  if(!strcmp(buffer,"Desert Eagle",true))
  148.     {
  149.     if(PlayerInventory[playerid][i_item_amount][listitem] < 1) return SendClientMessage(playerid, -1, "No Amount"), RemoveItemFromInventory(playerid, listitem + 1);
  150.     GivePlayerWeapon(playerid, 24, 50);
  151.     SendClientMessage(playerid, -1, "I'am a Desert Eagle!");
  152.     PlayerInventory[playerid][i_item_amount][listitem] -= 1;
  153.     UpdateAmountFromInventory(playerid, listitem + 1);
  154.     }
  155.                  if(!strcmp(buffer,"Medkit",true))
  156.     {
  157.     if(PlayerInventory[playerid][i_item_amount][listitem] < 1) return SendClientMessage(playerid, -1, "No Amount"), RemoveItemFromInventory(playerid, listitem + 1);
  158.     SendClientMessage(playerid, -1, "I'am a Medkit!");
  159.     PlayerInventory[playerid][i_item_amount][listitem] -= 1;
  160.     UpdateAmountFromInventory(playerid, listitem + 1);
  161.     }
  162.         }
  163.     }
  164.     return 1;
  165. }
  166. // Functions
  167. stock ClearInventory(playerid)
  168. {
  169.     for (new i = 0; i < MAX_ITEMS; i++)
  170.     {
  171.         PlayerInventory[playerid][i_used][i] = false;
  172.     }
  173.     ArrayList::Clear(InventoryList[playerid]);
  174.     return 1;
  175. }
  176.  
  177. stock AddItemInInventory(playerid, item_type, item_amount)
  178. {
  179.     if (ArrayList::Size(InventoryList[playerid]) < MAX_ITEMS)
  180.     {
  181.         new
  182.             empty_id = ArrayList::Size(InventoryList[playerid]);
  183.  
  184.         ArrayList::Add(InventoryList[playerid], empty_id);
  185.  
  186.         PlayerInventory[playerid][i_used][empty_id] = true;
  187.         PlayerInventory[playerid][i_item_type][empty_id] = item_type;
  188.         PlayerInventory[playerid][i_item_amount][empty_id] = item_amount;
  189.         PlayerInventory[playerid][i_id][empty_id] = empty_id + 1;
  190.  
  191.         SendClientMessage(playerid, -1, "Item added.");
  192.        
  193. new query[250];
  194. mysql_format(Handle, query, sizeof(query), "INSERT INTO `items` (`ID`,`User`,`Type`,`Amount`) VALUES ('%d','%e','%d','%d')",
  195. PlayerInventory[playerid][i_id][empty_id],GetPlayerNam(playerid),PlayerInventory[playerid][i_item_type][empty_id],PlayerInventory[playerid][i_item_amount][empty_id]);
  196. mysql_function_query(Handle, query, false, "", "");
  197.     }
  198.     else SendClientMessage(playerid, -1, "Error: Your inventory is full!");
  199.     return 1;
  200. }
  201.  
  202. stock UpdateAmountFromInventory(playerid, slot)
  203. {
  204.     slot = slot - 1;
  205. new query[250];
  206.     if (slot < ArrayList::Size(InventoryList[playerid]))
  207.     {
  208.         new
  209.             s = ArrayList::Get(InventoryList[playerid], slot);
  210.  
  211.      mysql_format(Handle, query, sizeof(query), "UPDATE `items` SET `Amount` = %d WHERE `User` = '%e' AND ID = '%i'", PlayerInventory[playerid][i_item_amount][s], GetPlayerNam(playerid), PlayerInventory[playerid][i_id][s]);
  212.      mysql_function_query(Handle, query, false, "", "");
  213.  
  214.     }
  215.     else SendClientMessage(playerid, -1, "Error: Choosen slot is empty.");
  216.     return 1;
  217. }
  218.  
  219. stock RemoveItemFromInventory(playerid, slot)
  220. {
  221.     slot = slot - 1;
  222.  
  223.     if (slot < ArrayList::Size(InventoryList[playerid]))
  224.     {
  225.         new
  226.             s = ArrayList::Get(InventoryList[playerid], slot);
  227.            
  228.         new query[250];
  229.         mysql_format(Handle, query, sizeof(query), "DELETE FROM `items` WHERE `User` = '%e' AND `ID` = %i", GetPlayerNam(playerid), PlayerInventory[playerid][i_id][s]);
  230.         mysql_function_query(Handle, query, false, "", "");
  231.  
  232.         PlayerInventory[playerid][i_used][s] = false;
  233.         PlayerInventory[playerid][i_item_type][s] = -1;
  234.         PlayerInventory[playerid][i_item_amount][s] = -1;
  235.  
  236.         ArrayList::Remove(InventoryList[playerid], s);
  237.  
  238.         SendClientMessage(playerid, -1, "Item removed");
  239.     }
  240.     else SendClientMessage(playerid, -1, "Error: Choosen slot is empty.");
  241.     return 1;
  242. }
  243.  
  244. stock ShowInventory(playerid)
  245. {
  246.     new
  247.         buffer[1024],
  248.         item_name[24],
  249.         amount,
  250.         get_id = -1;
  251.  
  252.     if (ArrayList::Size(InventoryList[playerid]) > 0)
  253.     {
  254.         for (new i = 0; i < ArrayList::Size(InventoryList[playerid]); i++)
  255.         {
  256.             get_id = ArrayList::Get(InventoryList[playerid], i);
  257.  
  258.             format (item_name, sizeof(item_name), "%s", ItemArray[ PlayerInventory[playerid][i_item_type][get_id] - 1 ][1]);
  259.             amount = PlayerInventory[playerid][i_item_amount][get_id];
  260.             format (buffer, sizeof(buffer), "%s{90C3D4}%d {FFFFFF}%s (%d)\n", buffer, (i + 1), item_name, amount);
  261.  
  262.             get_id = -1;
  263.         }
  264.         for (new j = ArrayList::Size(InventoryList[playerid]); j < MAX_ITEMS; j++)
  265.         {
  266.             format (buffer, sizeof(buffer), "%s{90C3D4}%d {FFFFFF}empty slot (0)\n", buffer, (j + 1));
  267.         }
  268.     }
  269.     else format (buffer, sizeof(buffer), "Your inventory is empty");
  270.  
  271.     ShowPlayerDialog(playerid, INVENTORY_DIALOG, DIALOG_STYLE_LIST, "Inventory", buffer, "Select", "Cancel");
  272.     return 1;
  273. }
  274.  
  275. stock GetPlayerNam(playerid)
  276. {
  277.       new name[MAX_PLAYER_NAME];
  278.       GetPlayerName(playerid, name, MAX_PLAYER_NAME);
  279.       return name;
  280. }
  281.  
  282.  
  283. // Commands
  284. CMD:inventory(playerid, params[])
  285. {
  286.     ShowInventory(playerid);
  287.     return 1;
  288. }
  289.  
  290. CMD:add(playerid, params[])
  291. {
  292.     new
  293.         item,
  294.         amount;
  295.  
  296.     if (!sscanf(params, "ii", item, amount))
  297.     {
  298.         AddItemInInventory(playerid, item, amount);
  299.     }
  300.     else SendClientMessage(playerid, -1, "Usage: /add [ITEM TYPE] [AMOUNT]");
  301.     return 1;
  302. }
  303.  
  304. CMD:remove(playerid, params[])
  305. {
  306.     new
  307.         slot;
  308.  
  309.     if (!sscanf(params, "i", slot))
  310.     {
  311.         RemoveItemFromInventory(playerid, slot);
  312.     }
  313.     else SendClientMessage(playerid, -1, "Usage: /remove [SLOT ID]");
  314.     return 1;
  315. }
  316.  
  317. forward OnPlayerLoadItems(playerid);
  318. public OnPlayerLoadItems(playerid) {
  319.     new fields,
  320.         rows,
  321.         type,
  322.         amount;
  323.  
  324.     cache_get_data(rows, fields);
  325.     for(new i = 0; i != rows; i++)
  326.     {
  327.             type = cache_get_row_int(i, 0);
  328.             amount = cache_get_row_int(i, 1);
  329.            
  330.         if (ArrayList::Size(InventoryList[playerid]) < MAX_ITEMS)
  331.     {
  332.         new
  333.             empty_id = ArrayList::Size(InventoryList[playerid]);
  334.  
  335.         ArrayList::Add(InventoryList[playerid], empty_id);
  336.  
  337.         PlayerInventory[playerid][i_used][empty_id] = true;
  338.         PlayerInventory[playerid][i_item_type][empty_id] = type;
  339.         PlayerInventory[playerid][i_item_amount][empty_id] = amount;
  340.         PlayerInventory[playerid][i_id][empty_id] = empty_id + 1;
  341.  
  342.     }
  343.        
  344.     }
  345.     return 1;
  346. }
Add Comment
Please, Sign In to add comment