Advertisement
kusehsup

Untitled

Dec 12th, 2024
50
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 7.24 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.  
  21. #define INVALID_BOX_ID (-1)
  22.  
  23. enum E_BOX_STRUCT
  24. {
  25.     BS_ID,
  26.     Float: BS_POS_X,
  27.     Float: BS_POS_Y,
  28.     Float: BS_POS_Z,
  29.     BS_AREA_ID
  30. };
  31.  
  32. new boxes[MAX_BOXES_COUNT][E_BOX_STRUCT] =
  33. {
  34.     { 1899.2340, 1177.8785, 30.0135, INVALID_STREAMER_ID },
  35.     { 1879.9230, 1168.1254, 30.0106, INVALID_STREAMER_ID },
  36.     { 1886.7753, 1182.9382, 30.0087, INVALID_STREAMER_ID }
  37. };
  38.  
  39. enum
  40. {
  41.     ITEM_TYPE_MONEY,
  42.     ITEM_TYPE_WEAPON,
  43.     ITEM_TYPE_VEHICLE
  44. }
  45.  
  46. enum E_PRIZE_STRUCT
  47. {
  48.     PS_ITEM_TYPE,
  49.     PS_ITEM_ID,
  50.     PS_ITEM_NAME[MAX_LENGHT_NAME_ITEM_PRIZE],
  51.     PS_ITEM_VALUE
  52. };
  53.  
  54. new prizes_list[MAX_PRIZE_COUNT][E_PRIZE_STRUCT] =
  55. {
  56.     { ITEM_TYPE_WEAPON,     24,     "Deagle",                       15          },
  57.     { ITEM_TYPE_WEAPON,     6,      "Лопата",                     1           },
  58.     { ITEM_TYPE_WEAPON,     10,     "Дилдо",                       1           },
  59.     { ITEM_TYPE_MONEY,      0,      "Деньги в размере 50 000",    50_000      },
  60.     { ITEM_TYPE_MONEY,      0,      "Деньги в размере 100 000",   100_000     },
  61.     { ITEM_TYPE_MONEY,      0,      "Деньги в размере 200 000",   200_000     },
  62.     { ITEM_TYPE_VEHICLE,    400,    "BMW X5",                       -1          }
  63. };
  64.  
  65. enum
  66. {
  67.     DIALOG_PRIZE_LIST
  68. }
  69.  
  70. public OnGameModeInit()
  71. {
  72.     SetGameModeText("Test");
  73.  
  74.     Database_connect();
  75.  
  76.     BoxInit();
  77.  
  78.     return 1;
  79. }
  80.  
  81. forward Database_connect();
  82. public Database_connect()
  83. {
  84.     db = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE);
  85.     mysql_set_charset("cp1251");
  86.  
  87.     if (mysql_errno()) {
  88.         printf("Произошла ошибка при подключении к базе данных.");
  89.         SendRconCommand("exit");
  90.         return 0;
  91.     }
  92.  
  93.     return 1;
  94. }
  95.  
  96. stock BoxInit()
  97. {
  98.     for (new i = 0; i < MAX_BOXES_COUNT; i++)
  99.     {
  100.         new Float: x = boxes[i][BS_POS_X],
  101.             Float: y = boxes[i][BS_POS_Y],
  102.             Float: z = boxes[i][BS_POS_Z];
  103.  
  104.         new area_id = CreateBox(x, y, z);
  105.  
  106.         boxes[i][BS_ID] = i;
  107.         boxes[i][BS_AREA_ID] = area_id;
  108.  
  109.         printf("[Boxes] Box Init coord x: %f, y: %f, z: %f, area: %i", x, y, z, area_id);
  110.     }
  111. }
  112.  
  113.  
  114. stock CreateBox(Float: x, Float: y, Float: z)
  115. {
  116.     new area_id = CreateDynamicSphere(x, y, z, 3.0, 0, 0);
  117.  
  118.     CreateDynamicObject(19056, x, y, z, 0, 0, 0, 0, 0);
  119.     CreateDynamic3DTextLabel("Нажмите alt чтобы открыть подарок", -1, x, y, z, 4.0, .worldid = 0, .interiorid = 0, .areaid = area_id);
  120.  
  121.     return area_id;
  122. }
  123.  
  124. public OnPlayerEnterDynamicArea(playerid, STREAMER_TAG_AREA: areaid)
  125. {
  126.     new string[144];
  127.     format(string, sizeof(string), "Player: %i, Area: %i", playerid, areaid);
  128.     SendClientMessage(playerid, -1, string);
  129.  
  130.     SetPVarInt(playerid, "PLAYER_AREA_ID", areaid + 1);
  131.  
  132.     return 1;
  133. }
  134.  
  135. stock GetBoxByArea(playerid, area_id)
  136. {
  137.     for (new i = 0; i < MAX_BOXES_COUNT; i++)
  138.     {
  139.         new box_area_id = boxes[i][BS_AREA_ID];
  140.  
  141.         if (area_id == box_area_id)
  142.         {
  143.             return i;
  144.         }
  145.     }
  146.  
  147.     return INVALID_BOX_ID;
  148. }
  149.  
  150. public OnPlayerLeaveDynamicArea(playerid, STREAMER_TAG_AREA: areaid)
  151. {
  152.     return 1;
  153. }
  154.  
  155. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
  156. {
  157.     if (newkeys == 1024)
  158.     {
  159.         new player_area_id = GetPVarInt(playerid, "PLAYER_AREA_ID");
  160.  
  161.         if (player_area_id != 0)
  162.         {
  163.             new box_id = GetBoxByArea(playerid, player_area_id);
  164.  
  165.             if (box_id != INVALID_BOX_ID)
  166.             {
  167.                 ShowPlayerDialog(playerid, DIALOG_TAKE_PRIZE, DIALOG_STYLE_MSGBOX, "Подарок!", "Вы нашли подарок, открыв его обнаружили ", "Забрать", "Отказаться");
  168.  
  169.                 DeletePVar(playerid, "PLAYER_AREA_ID");
  170.                 SetPVarInt(playerid, "ACTIVE_BOX_ID", box_id);
  171.             }
  172.         }
  173.  
  174.     }
  175.     return 1;
  176. }
  177.  
  178. public OnPlayerSpawn(playerid)
  179. {
  180.     SetPlayerPos(playerid, 1890.6500, 1167.9888, 29.6750);
  181.  
  182.     new player_name[MAX_PLAYER_NAME];
  183.     GetPlayerName(playerid, player_name, sizeof(player_name));
  184.  
  185.     new query[256];
  186.     mysql_format(db, query, sizeof(query), "INSERT INTO `users` (`nickname`) VALUES ('%e')", player_name);
  187.     mysql_query(db, query);
  188.  
  189.     return 1;
  190. }
  191.  
  192.  
  193. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  194. {
  195.     switch (dialogid)
  196.     {
  197.         case DIALOG_PRIZE_LIST:
  198.         {
  199.             if (response)
  200.             {
  201.                 new box_id = GetPVarInt(playerid, "ACTIVE_BOX_ID"),
  202.                     prize = random(MAX_PRIZE_COUNT);
  203.  
  204.                 new prize_item_name[MAX_LENGHT_NAME_ITEM_PRIZE],
  205.                     prize_item_value = prizes_list[prize][PS_ITEM_VALUE],
  206.                     prize_item_id = prizes_list[prize][PS_ITEM_ID],
  207.                     prize_item_type = prizes_list[prize][PS_ITEM_TYPE];
  208.                
  209.                 format(prize_item_name, sizeof(prize_item_name), "%s", prizes_list[prize][PS_ITEM_NAME]);
  210.  
  211.                 new query[256], player_name[MAX_PLAYER_NAME];
  212.                 GetPlayerName(playerid, player_name, sizeof(player_name));
  213.                
  214.                 format
  215.                 (
  216.                     query, sizeof(query),
  217.                     "INSERT INTO `prizes_history` (`player_name`, `item_id`, `item_name`, `item_value`, `timestamp`) VALUES ('%s', %i, '%s', %i, %i)",
  218.                     player_name, prize_item_id, prize_item_name, prize_item_value, gettime()
  219.                 );
  220.                 mysql_query(db, query);
  221.  
  222.                 switch (prize_item_type)
  223.                 {
  224.                     case ITEM_TYPE_MONEY: GivePlayerMoney(playerid, prize_item_value);
  225.  
  226.                     case ITEM_TYPE_WEAPON: GivePlayerWeapon(playerid, prize_item_id, prize_item_value);
  227.  
  228.                     case ITEM_TYPE_VEHICLE:
  229.                     {
  230.                         new Float: x, Float: y, Float: z;
  231.                         GetPlayerPos(playerid, x, y, z);
  232.  
  233.                         AddStaticVehicle(prize_item_id, x + 2.0, y + 2.0, z + 1.0, 0, 1, 1);
  234.                     }
  235.                 }
  236.  
  237.                 new string[144];
  238.                 format(string, sizeof(string), "Вы забрали приз: %s из коробки №%i", prize_item_name, box_id);
  239.                 SendClientMessage(playerid, -1, string);
  240.  
  241.                 DestroyBox(box_id);
  242.             }
  243.         }
  244.  
  245.         // case n: ...
  246.     }
  247. }
  248.  
  249. stock DestroyBox(box_id)
  250. {
  251.     DestroyDynamicObject(boxes[box_id][BS_AREA_ID]);
  252.     DestroyDynamic3DTextLabel(boxes[box_id][BS_AREA_ID]);
  253.     DestroyDynamicArea(boxes[box_id][BS_AREA_ID]);
  254.  
  255.     DeletePVar(playerid, "ACTIVE_BOX_ID");
  256.  
  257.     return 1;
  258. }
  259.  
  260. CMD:show_prize(playerid)
  261. {
  262.     new player_name[MAX_PLAYER_NAME];
  263.     GetPlayerName(playerid, player_name, sizeof(player_name));
  264.  
  265.     new query[256];
  266.     format(query, 256, "SELECT `item_name`, `item_value`, `timestamp` FROM prizes_history WHERE `player_name` = '%s'", player_name);
  267.    
  268.     new Cache: result = mysql_query(db, query),
  269.         rows = cache_num_rows() - 1;
  270.  
  271.     new prize_name[MAX_LENGHT_NAME_ITEM_PRIZE], prize_value, prize_time, string[256];
  272.  
  273.     for (new i; i <= rows; i++)
  274.     {
  275.         cache_get_value_name(i, "item_name", prize_name, sizeof(prize_name));
  276.         cache_get_value_name_int(i, "item_value", prize_value);
  277.         cache_get_value_name_int(i, "timestamp", prize_time);
  278.  
  279.         format(string, sizeof(string), "Приз: %s, Количество: %i, Время: %i", prize_name, prize_value, prize_time);
  280.         printf("INFO: %s", string);
  281.     }
  282.  
  283.     cache_delete(Cache: result);
  284.  
  285.     return 1;
  286. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement