Advertisement
kusehsup

Untitled

Dec 14th, 2024
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 8.67 KB | None | 0 0
  1. #include <a_samp>
  2. #include <streamer>
  3. #include <dc_cmd>
  4. #include <a_mysql>
  5.  
  6. main(){}
  7.  
  8. #define MYSQL_HOST      "127.0.0.1"
  9. #define MYSQL_USER      "root"
  10. #define MYSQL_DATABASE  "test"
  11. #define MYSQL_PASSWORD  ""
  12.  
  13. new MySQL: db;
  14.  
  15. #define BOX_ENABLED
  16.  
  17. #define MAX_BOXES_COUNT (3)
  18. #define MAX_PRIZE_COUNT (7)
  19. #define MAX_LENGHT_NAME_ITEM_PRIZE (64)
  20. #define MAX_PRIZE_COUNT_ON_PAGE (10)
  21.  
  22. #define INVALID_BOX_ID (-1)
  23.  
  24. enum BOX_STRUCT
  25. {
  26.     ID,
  27.     Float: POS_X,
  28.     Float: POS_Y,
  29.     Float: POS_Z,
  30.     AREA_ID
  31. };
  32.  
  33. new boxes[MAX_BOXES_COUNT][BOX_STRUCT] =
  34. {
  35.     { INVALID_BOX_ID, 1899.2340, 1177.8785, 30.0135, INVALID_STREAMER_ID },
  36.     { INVALID_BOX_ID, 1879.9230, 1168.1254, 30.0106, INVALID_STREAMER_ID },
  37.     { INVALID_BOX_ID, 1886.7753, 1182.9382, 30.0087, INVALID_STREAMER_ID }
  38. };
  39.  
  40. enum
  41. {
  42.     ITEM_TYPE_MONEY,
  43.     ITEM_TYPE_WEAPON,
  44.     ITEM_TYPE_VEHICLE
  45. }
  46.  
  47. enum PRIZE_STRUCT
  48. {
  49.     ITEM_TYPE,
  50.     ITEM_ID,
  51.     ITEM_NAME[MAX_LENGHT_NAME_ITEM_PRIZE],
  52.     ITEM_VALUE
  53. };
  54.  
  55. new prizes_list[MAX_PRIZE_COUNT][E_PRIZE_STRUCT] =
  56. {
  57.     { ITEM_TYPE_WEAPON,     24,     "Deagle",                       15          },
  58.     { ITEM_TYPE_WEAPON,     6,      "Лопата",                     1           },
  59.     { ITEM_TYPE_WEAPON,     10,     "Дилдо",                       1           },
  60.     { ITEM_TYPE_MONEY,      0,      "Деньги",                     50_000      },
  61.     { ITEM_TYPE_MONEY,      0,      "Деньги",                         100_000     },
  62.     { ITEM_TYPE_MONEY,      0,      "Деньги",                         200_000     },
  63.     { ITEM_TYPE_VEHICLE,    400,    "BMW X5",                       -1          }
  64. };
  65.  
  66. new current_page_prizes[MAX_PLAYERS];
  67.  
  68. enum
  69. {
  70.     DIALOG_PRIZE_LIST,
  71.     DIALOG_TAKE_PRIZE
  72. }
  73.  
  74. public OnGameModeInit()
  75. {
  76.     DataBaseConnect();
  77.     BoxInit();
  78.  
  79.     return 1;
  80. }
  81.  
  82. forward DataBaseConnect();
  83. public DataBaseConnect()
  84. {
  85.     db = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE);
  86.     mysql_set_charset("cp1251");
  87.  
  88.     if (mysql_errno())
  89.     {
  90.         printf("Произошла ошибка при подключении к базе данных.");
  91.         return 0;
  92.     }
  93.  
  94.     return 1;
  95. }
  96.  
  97. stock BoxInit()
  98. {
  99.     for (new i = 0; i < MAX_BOXES_COUNT; i++)
  100.     {
  101.         new Float: x = boxes[i][POS_X],
  102.             Float: y = boxes[i][POS_Y],
  103.             Float: z = boxes[i][POS_Z];
  104.  
  105.         new area_id = CreateBox(x, y, z);
  106.  
  107.         boxes[i][ID] = i;
  108.         boxes[i][AREA_ID] = area_id;
  109.  
  110.         printf("[Boxes] Box Init coord x: %f, y: %f, z: %f, area: %i", x, y, z, area_id);
  111.     }
  112. }
  113.  
  114.  
  115. stock CreateBox(Float: x, Float: y, Float: z)
  116. {
  117.     new area_id = CreateDynamicSphere(x, y, z, 3.0, 0, 0);
  118.  
  119.     CreateDynamicObject(19056, x, y, z, 0, 0, 0, 0, 0);
  120.     CreateDynamic3DTextLabel("Нажмите alt чтобы открыть подарок", -1, x, y, z, 4.0, .worldid = 0, .interiorid = 0, .areaid = area_id);
  121.  
  122.     return area_id;
  123. }
  124.  
  125. public OnPlayerEnterDynamicArea(playerid, STREAMER_TAG_AREA: areaid)
  126. {
  127.     new string[144];
  128.     format(string, sizeof(string), "Player: %i, Area: %i", playerid, areaid);
  129.     SendClientMessage(playerid, -1, string);
  130.  
  131.     SetPVarInt(playerid, "PLAYER_AREA_ID", areaid + 1);
  132.  
  133.     return 1;
  134. }
  135.  
  136. stock GetBoxByArea(area_id)
  137. {
  138.     for (new i = 0; i < MAX_BOXES_COUNT; i++)
  139.     {
  140.         new box_area_id = boxes[i][AREA_ID];
  141.  
  142.         if (area_id == box_area_id)
  143.         {
  144.             return i;
  145.         }
  146.     }
  147.  
  148.     return INVALID_BOX_ID;
  149. }
  150.  
  151. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  152. {
  153.     switch (dialogid)
  154.     {
  155.         case DIALOG_TAKE_PRIZE:
  156.         {
  157.             if (response)
  158.             {
  159.                 new box_id = GetPVarInt(playerid, "ACTIVE_BOX_ID") - 1,
  160.                     prize = random(MAX_PRIZE_COUNT);
  161.  
  162.                 new prize_item_name[MAX_LENGHT_NAME_ITEM_PRIZE],
  163.                     prize_item_value = prizes_list[prize][ITEM_VALUE],
  164.                     prize_item_id = prizes_list[prize][ITEM_ID],
  165.                     prize_item_type = prizes_list[prize][ITEM_TYPE];
  166.                
  167.                 format(prize_item_name, sizeof(prize_item_name), "%s", prizes_list[prize][ITEM_NAME]);
  168.  
  169.                 new query[256], player_name[MAX_PLAYER_NAME];
  170.                 GetPlayerName(playerid, player_name, sizeof(player_name));
  171.                
  172.                 format
  173.                 (
  174.                     query, sizeof(query),
  175.                     "INSERT INTO prizes_history (player_name, item_id, item_name, item_value) VALUES ('%s', %i, '%s', %i)",
  176.                     player_name, prize_item_id, prize_item_name, prize_item_value
  177.                 );
  178.                 mysql_query(db, query);
  179.  
  180.                 switch (prize_item_type)
  181.                 {
  182.                     case ITEM_TYPE_MONEY: GivePlayerMoney(playerid, prize_item_value);
  183.  
  184.                     case ITEM_TYPE_WEAPON: GivePlayerWeapon(playerid, prize_item_id, prize_item_value);
  185.  
  186.                     case ITEM_TYPE_VEHICLE:
  187.                     {
  188.                         new Float: x, Float: y, Float: z;
  189.                         GetPlayerPos(playerid, x, y, z);
  190.  
  191.                         AddStaticVehicle(prize_item_id, x + 2.0, y + 2.0, z + 1.0, 0, 1, 1);
  192.                     }
  193.                 }
  194.  
  195.                 new string[144];
  196.                 format(string, sizeof(string), "Вы забрали приз: %s из коробки №%i", prize_item_name, box_id);
  197.                 SendClientMessage(playerid, -1, string);
  198.  
  199.                 DestroyBox(playerid, box_id);
  200.             }
  201.         }
  202.  
  203.         case DIALOG_PRIZE_LIST:
  204.         {
  205.             if (response == 1)
  206.             {
  207.                 current_page_prizes[playerid]--;
  208.                 DialogShowPrizesList(playerid);
  209.             }
  210.             else if (response == 0)
  211.             {
  212.                 current_page_prizes[playerid]++;
  213.                 DialogShowPrizesList(playerid);
  214.             }
  215.         }
  216.     }
  217. }
  218.  
  219. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
  220. {
  221.     if (newkeys == 1024)
  222.     {
  223.         new player_area_id = GetPVarInt(playerid, "PLAYER_AREA_ID") -1;
  224.  
  225.         if (player_area_id != 0)
  226.         {
  227.             new box_id = GetBoxByArea(player_area_id);
  228.  
  229.             printf("BOX_ID: %i, player_area_id: %i", box_id, player_area_id);
  230.  
  231.             if (box_id != INVALID_BOX_ID)
  232.             {
  233.                 ShowPlayerDialog(playerid, DIALOG_TAKE_PRIZE, DIALOG_STYLE_MSGBOX, "Подарок!", "Вы нашли подарок, открыв его обнаружили ", "Забрать", "Отказаться");
  234.  
  235.                 DeletePVar(playerid, "PLAYER_AREA_ID");
  236.                 SetPVarInt(playerid, "ACTIVE_BOX_ID", box_id + 1);
  237.             }
  238.         }
  239.  
  240.     }
  241.     return 1;
  242. }
  243.  
  244. public OnPlayerSpawn(playerid)
  245. {
  246.     SetPlayerPos(playerid, 1890.6500, 1167.9888, 29.6750);
  247.  
  248.     new player_name[MAX_PLAYER_NAME];
  249.     GetPlayerName(playerid, player_name, sizeof(player_name));
  250.  
  251.     new query[256];
  252.     mysql_format(db, query, sizeof(query), "INSERT INTO `users` (`nickname`) VALUES ('%e')", player_name);
  253.     mysql_query(db, query);
  254.  
  255.     return 1;
  256. }
  257.  
  258. stock DestroyBox(playerid, box_id)
  259. {
  260.     DestroyDynamicObject(STREAMER_TAG_OBJECT: boxes[box_id][AREA_ID]);
  261.     DestroyDynamic3DTextLabel(STREAMER_TAG_3D_TEXT_LABEL: boxes[box_id][AREA_ID]);
  262.     DestroyDynamicArea(boxes[box_id][AREA_ID]);
  263.  
  264.     DeletePVar(playerid, "ACTIVE_BOX_ID");
  265.  
  266.     return 1;
  267. }
  268.  
  269. stock DialogShowPrizesList(playerid)
  270. {
  271.     new player_name[MAX_PLAYER_NAME];
  272.     GetPlayerName(playerid, player_name, sizeof(player_name));
  273.  
  274.     new query[256];
  275.     format(query, 256, "SELECT `item_name`, `item_value`, `timestamp` FROM prizes_history WHERE `player_name` = '%s' ORDER BY `timestamp` DESC", player_name);
  276.    
  277.     new Cache: result = mysql_query(db, query);
  278.     new rows = cache_num_rows() - 1;
  279.  
  280.     new prize_name[MAX_LENGHT_NAME_ITEM_PRIZE], prize_value, prize_time[32], string[1024];
  281.  
  282.     new page = current_page_prizes[playerid] + 1;
  283.  
  284.     new start_row = (page -1) * MAX_PRIZE_COUNT_ON_PAGE,
  285.         end_row = start_row + MAX_PRIZE_COUNT_ON_PAGE - 1;
  286.  
  287.     if (end_row > rows) end_row = rows;
  288.  
  289.     for (new i = start_row; i <= end_row; i++)
  290.     {
  291.         cache_get_value_name(i, "item_name", prize_name, sizeof(prize_name));
  292.         cache_get_value_name_int(i, "item_value", prize_value);
  293.         cache_get_value_name(i, "timestamp", prize_time, sizeof(prize_time));        
  294.  
  295.         format(string, sizeof(string), "%s%s\t%i\t%s\n", string, prize_name, prize_value, prize_time);
  296.     }
  297.  
  298.     new max_page = (rows / MAX_PRIZE_COUNT_ON_PAGE) + (rows % MAX_PRIZE_COUNT_ON_PAGE != 0 ? 1 : 0);
  299.  
  300.     if (page > max_page)
  301.     {
  302.         page = max_page;
  303.     }
  304.    
  305.     new buttons[24], buttons2[24];
  306.     if (page == max_page)
  307.     {
  308.         format(buttons, sizeof(buttons), "Предыдущая");
  309.         format(buttons2, sizeof(buttons2), "Закрыть");
  310.     }
  311.     else if (page == 1)
  312.     {
  313.         format(buttons, sizeof(buttons), "Закрыть");
  314.         format(buttons2, sizeof(buttons2), "Следующая");
  315.     }
  316.     else
  317.     {
  318.         format(buttons, sizeof(buttons), "Предыдущая");
  319.         format(buttons2, sizeof(buttons2), "Следующая");
  320.     }
  321.  
  322.     strins(string, "Приз\tКоличество\tВремя\n", 0);
  323.  
  324.     ShowPlayerDialog(playerid, DIALOG_PRIZE_LIST, DIALOG_STYLE_TABLIST_HEADERS, "Лист призов", string, buttons, buttons2);
  325.  
  326.     cache_delete(Cache: result);
  327.  
  328.     return 1;
  329. }
  330.  
  331.  
  332. CMD:show_prize(playerid)
  333. {
  334.     DialogShowPrizesList(playerid);
  335.  
  336.     return 1;
  337. }
  338.  
  339. CMD:spawn_box(playerid)
  340. {
  341.     BoxInit();
  342.    
  343.     return 1;
  344. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement