Advertisement
-DeimoS-

Регистрация MySQL R39

Aug 7th, 2022 (edited)
2,597
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 16.72 KB | None | 0 0
  1. /*------------------------------------------------------------------------------
  2. Разработчик - DeimoS
  3. ----------------------------------=[ Инклюды ]=-------------------------------*/
  4. #include <a_samp>
  5. #include <a_mysql>
  6.  
  7. /*------------------------------=[ Данные MySQL ]=----------------------------*/
  8. #define MYSQL_HOST                "localhost"//Адрес, по которому расположен MySQL-Сервер
  9. #define MYSQL_USER                "root"//Имя пользователя, на которого была создана база данных
  10. #define MYSQL_DATABASE            "sa-mp"// Имя базы данных
  11. #define MYSQL_PASSWORD            ""//Пароль для доступа к серверу MySQL
  12.  
  13. /*-------------------------------=[ Переменные ]=-----------------------------*/
  14. new mysql_connect_id;
  15. new player_is_authorized[MAX_PLAYERS char];
  16. /*--------------------------------=[ Enum's ]=--------------------------------*/
  17. enum e_PLAYER_INFO
  18. {
  19.     pID,
  20.     pName[MAX_PLAYER_NAME],
  21.     pPassword[31]
  22. };
  23. new pInfo[MAX_PLAYERS][e_PLAYER_INFO];
  24. enum e_DIALOG_IDs
  25. {
  26.     dKickMessage,//Автоматически займёт ID 0
  27.     dRegister,//ID 1
  28.     dLogin//ID 2
  29. };
  30. /*--------------------------------=[ Прочее ]=--------------------------------*/
  31. main()
  32. {
  33.     print("\n -----------------------   ");
  34.     print("      Автор - DeimoS         ");
  35.     print("  Специально для Pro-Pawn.Ru ");
  36.     print(" -----------------------   \n");
  37. }
  38. /*-------------------------------=[ Public's ]=-------------------------------*/
  39. public OnGameModeInit()
  40. {
  41.     mysql_connect_id = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_DATABASE, MYSQL_PASSWORD);
  42.     switch(mysql_errno())
  43.     {
  44.     case 0: print("Подключение к базе данных удалось");
  45.     case 1044: print("Подключение к базе данных не удалось [Указано неизвестное имя пользователя]");
  46.     case 1045: print("Подключение к базе данных не удалось [Указан неизвестный пароль]");
  47.     case 1049: print("Подключение к базе данных не удалось [Указана неизвестная база данных]");
  48.     case 2003: print("Подключение к базе данных не удалось [Хостинг с базой данных недоступен]");
  49.     case 2005: print("Подключение к базе данных не удалось [Указан неизвестный адрес хостинга]");
  50.     default: printf("Подключение к базе данных не удалось [Неизвестная ошибка. Код ошибки: %d]", mysql_errno());
  51.     }
  52.     mysql_function_query(mysql_connect_id, !"SET CHARACTER SET 'utf8'", false, "", "");
  53.     mysql_function_query(mysql_connect_id, !"SET NAMES 'utf8'", false, "", "");
  54.     mysql_function_query(mysql_connect_id, !"SET character_set_client = 'cp1251'", false, "", "");
  55.     mysql_function_query(mysql_connect_id, !"SET character_set_connection = 'cp1251'", false, "", "");
  56.     mysql_function_query(mysql_connect_id, !"SET character_set_results = 'cp1251'", false, "", "");
  57.     mysql_function_query(mysql_connect_id, !"SET SESSION collation_connection = 'utf8_general_ci'", false, "", "");
  58.     SetGameModeText("new.pwn v.0.1");
  59.     AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
  60.     return 1;
  61. }
  62.  
  63. public OnGameModeExit()
  64. {
  65.     mysql_close(mysql_connect_id);
  66.     return 1;
  67. }
  68.  
  69. public OnPlayerRequestClass(playerid, classid)
  70. {
  71.     SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
  72.     SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
  73.     SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
  74.     return 1;
  75. }
  76.  
  77. public OnPlayerConnect(playerid)
  78. {
  79.     GetPlayerName(playerid, pInfo[playerid][pName], MAX_PLAYER_NAME);
  80.     new query_string[49+MAX_PLAYER_NAME-4+1];
  81.     format(query_string, sizeof(query_string), "SELECT * FROM `accounts` WHERE `player_name` = '%s'", pInfo[playerid][pName]);
  82.     mysql_function_query(mysql_connect_id, query_string, true, "FindPlayerInTable","i", playerid);
  83.     return 1;
  84. }
  85.  
  86. public OnPlayerDisconnect(playerid, reason)
  87. {
  88.     SaveAccount(playerid);
  89.     RemovePlayerInfo(playerid);
  90.     return 1;
  91. }
  92.  
  93. public OnPlayerSpawn(playerid)
  94. {
  95.     return 1;
  96. }
  97.  
  98. public OnPlayerDeath(playerid, killerid, reason)
  99. {
  100.     return 1;
  101. }
  102.  
  103. public OnVehicleSpawn(vehicleid)
  104. {
  105.     return 1;
  106. }
  107.  
  108. public OnVehicleDeath(vehicleid, killerid)
  109. {
  110.     return 1;
  111. }
  112.  
  113. public OnPlayerText(playerid, text[])
  114. {
  115.     if(!player_is_authorized{playerid})
  116.     {
  117.     SendClientMessage(playerid, -1, "Вы не авторизировались и не можете писать в чат!");
  118.     return 0;
  119. }
  120.     return 1;
  121. }
  122.  
  123. public OnPlayerCommandText(playerid, cmdtext[])
  124. {
  125.     if(!player_is_authorized{playerid}) return SendClientMessage(playerid, -1, "Вы не авторизировались и не можете использовать команды!");
  126.     if (strcmp("/mycommand", cmdtext, true, 10) == 0)
  127.     {
  128.         // Do something here
  129.         return 1;
  130.     }
  131.     return 0;
  132. }
  133.  
  134. public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
  135. {
  136.     return 1;
  137. }
  138.  
  139. public OnPlayerExitVehicle(playerid, vehicleid)
  140. {
  141.     return 1;
  142. }
  143.  
  144. public OnPlayerStateChange(playerid, newstate, oldstate)
  145. {
  146.     return 1;
  147. }
  148.  
  149. public OnPlayerEnterCheckpoint(playerid)
  150. {
  151.     return 1;
  152. }
  153.  
  154. public OnPlayerLeaveCheckpoint(playerid)
  155. {
  156.     return 1;
  157. }
  158.  
  159. public OnPlayerEnterRaceCheckpoint(playerid)
  160. {
  161.     return 1;
  162. }
  163.  
  164. public OnPlayerLeaveRaceCheckpoint(playerid)
  165. {
  166.     return 1;
  167. }
  168.  
  169. public OnRconCommand(cmd[])
  170. {
  171.     return 1;
  172. }
  173.  
  174. public OnPlayerRequestSpawn(playerid)
  175. {
  176.     return 1;
  177. }
  178.  
  179. public OnObjectMoved(objectid)
  180. {
  181.     return 1;
  182. }
  183.  
  184. public OnPlayerObjectMoved(playerid, objectid)
  185. {
  186.     return 1;
  187. }
  188.  
  189. public OnPlayerPickUpPickup(playerid, pickupid)
  190. {
  191.     return 1;
  192. }
  193.  
  194. public OnVehicleMod(playerid, vehicleid, componentid)
  195. {
  196.     return 1;
  197. }
  198.  
  199. public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
  200. {
  201.     return 1;
  202. }
  203.  
  204. public OnVehicleRespray(playerid, vehicleid, color1, color2)
  205. {
  206.     return 1;
  207. }
  208.  
  209. public OnPlayerSelectedMenuRow(playerid, row)
  210. {
  211.     return 1;
  212. }
  213.  
  214. public OnPlayerExitedMenu(playerid)
  215. {
  216.     return 1;
  217. }
  218.  
  219. public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
  220. {
  221.     return 1;
  222. }
  223.  
  224. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
  225. {
  226.     return 1;
  227. }
  228.  
  229. public OnRconLoginAttempt(ip[], password[], success)
  230. {
  231.     return 1;
  232. }
  233.  
  234. public OnPlayerUpdate(playerid)
  235. {
  236.     return 1;
  237. }
  238.  
  239. public OnPlayerStreamIn(playerid, forplayerid)
  240. {
  241.     return 1;
  242. }
  243.  
  244. public OnPlayerStreamOut(playerid, forplayerid)
  245. {
  246.     return 1;
  247. }
  248.  
  249. public OnVehicleStreamIn(vehicleid, forplayerid)
  250. {
  251.     return 1;
  252. }                                                                                                            
  253.  
  254. public OnVehicleStreamOut(vehicleid, forplayerid)
  255. {
  256.     return 1;
  257. }
  258.  
  259. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  260. {
  261.     switch(dialogid)
  262. {
  263.     case dRegister:
  264.     {
  265.         if(!response)
  266.         {
  267.             ShowPlayerDialog(playerid, dKickMessage, DIALOG_STYLE_MSGBOX, "Оповещение", "{FFFFFF}Вы были кикнуты с сервера.\n{FF0000}Причина: Отказ от регистрации.\n{FFFFFF}Для выхода с сервера введите \"/q\" в чат", "Выход", "");
  268.             return Kick(playerid);
  269.         }
  270.         if(!strlen(inputtext)) return ShowPlayerDialog(playerid, dRegister, DIALOG_STYLE_INPUT, "Регистрация нового пользователя", "{FF0000}Ошибка: {FFFFFF}Вы не можете продолжить регистрацию не введя пароль!\nВведите пароль для регистрации нового аккаунта:\n{C0C0C0}Примечание:\n{666666}- Пароль чувствителен к регистру.\n- Пароль должен содержать от 4 до 30 символов.\n- Пароль может содержать латинские/кириллические символы и цифры (aA-zZ, аА-яЯ, 0-9).", "Регистрация", "Выход");
  271.         else if(strlen(inputtext) < 4) return ShowPlayerDialog(playerid, dRegister, DIALOG_STYLE_INPUT, "Регистрация нового пользователя", "{FF0000}Ошибка: {FFFFFF}Пароль слишком короткий!\nВведите пароль для регистрации нового аккаунта:\n{C0C0C0}Примечание:\n{666666}- Пароль чувствителен к регистру.\n- Пароль должен содержать от 4 до 30 символов.\n- Пароль может содержать латинские/кириллические символы и цифры (aA-zZ, аА-яЯ, 0-9).", "Регистрация", "Выход");
  272.         else if(strlen(inputtext) > 30) return ShowPlayerDialog(playerid, dRegister, DIALOG_STYLE_INPUT, "Регистрация нового пользователя", "{FF0000}Ошибка: {FFFFFF}Пароль слишком длинный!\nВведите пароль для регистрации нового аккаунта:\n{C0C0C0}Примечание:\n{666666}- Пароль чувствителен к регистру.\n- Пароль должен содержать от 4 до 30 символов.\n- Пароль может содержать латинские/кириллические символы и цифры (aA-zZ, аА-яЯ, 0-9).", "Регистрация", "Выход");
  273.         for(new i = strlen(inputtext)-1; i != -1; i--)
  274.         {
  275.             switch(inputtext[i])
  276.             {
  277.                 case '0'..'9', 'а'..'я', 'a'..'z', 'А'..'Я', 'A'..'Z': continue;
  278.                 default: return ShowPlayerDialog(playerid, dRegister, DIALOG_STYLE_INPUT, "Регистрация нового пользователя", "{FF0000}Ошибка: {FFFFFF}Пароль содержит запрещённые символы!\nВведите пароль для регистрации нового аккаунта:\n{C0C0C0}Примечание:\n{666666}- Пароль чувствителен к регистру.\n- Пароль должен содержать от 4 до 30 символов.\n- Пароль может содержать латинские/кириллические символы и цифры (aA-zZ, аА-яЯ, 0-9).", "Регистрация", "Выход");
  279.             }
  280.         }
  281.         pInfo[playerid][pPassword][0] = EOS;
  282.         strins(pInfo[playerid][pPassword], inputtext, 0);
  283.         CreateNewAccount(playerid, pInfo[playerid][pPassword]);
  284.         return 1;
  285.     }
  286.     case dLogin:
  287.     {
  288.         if(!response)
  289.         {
  290.             ShowPlayerDialog(playerid, dKickMessage, DIALOG_STYLE_MSGBOX, "Оповещение", "{FFFFFF}Вы были кикнуты с сервера.\n{FF0000}Причина: Отказ от авторизации.\n{FFFFFF}Для выхода с сервера введите \"/q\" в чат", "Выход", "");
  291.             return Kick(playerid);
  292.         }
  293.         if(!strlen(inputtext)) return ShowPlayerDialog(playerid, dLogin, DIALOG_STYLE_INPUT, "Авторизация", "{FF0000}Ошибка: {FFFFFF}Вы не можете продолжить авторизацию не введя пароль!\nВведите пароль от аккаунта для входа на сервер:", "Вход", "Выход");
  294.         for(new i = strlen(inputtext)-1; i != -1; i--)
  295.         {
  296.             switch(inputtext[i])
  297.             {
  298.                 case '0'..'9', 'а'..'я', 'a'..'z', 'А'..'Я', 'A'..'Z': continue;
  299.                 default: return ShowPlayerDialog(playerid, dLogin, DIALOG_STYLE_INPUT, "Авторизация", "{FF0000}Ошибка: {FFFFFF}Введённый пароль содержит запрещённые символы!\nВведите пароль от аккаунта для входа на сервер:", "Вход", "Выход");
  300.             }
  301.         }
  302.         if(!strcmp(pInfo[playerid][pPassword], inputtext))
  303.         {
  304.             new query_string[49+MAX_PLAYER_NAME];
  305.             format(query_string, sizeof(query_string), "SELECT * FROM `accounts` WHERE `player_name` = '%s'", pInfo[playerid][pName]);
  306.             mysql_function_query(mysql_connect_id, query_string, true, "UploadPlayerAccount","i", playerid);
  307.         }
  308.         else
  309.         {
  310.             switch(GetPVarInt(playerid, "WrongPassword"))
  311.             {
  312.                 case 0: ShowPlayerDialog(playerid, dLogin, DIALOG_STYLE_INPUT, "Авторизация", "{FF0000}Ошибка: {FFFFFF}Вы ввели неверный пароль! У Вас осталось 3 попытки.\nВведите пароль от аккаунта для входа на сервер:", "Вход", "Выход");
  313.                 case 1: ShowPlayerDialog(playerid, dLogin, DIALOG_STYLE_INPUT, "Авторизация", "{FF0000}Ошибка: {FFFFFF}Вы ввели неверный пароль! У Вас осталось 2 попытки.\nВведите пароль от аккаунта для входа на сервер:", "Вход", "Выход");
  314.                 case 2: ShowPlayerDialog(playerid, dLogin, DIALOG_STYLE_INPUT, "Авторизация", "{FF0000}Ошибка: {FFFFFF}Вы ввели неверный пароль! У Вас осталось 1 попытка.\nВведите пароль от аккаунта для входа на сервер:", "Вход", "Выход");
  315.                 case 3: ShowPlayerDialog(playerid, dLogin, DIALOG_STYLE_INPUT, "Авторизация", "{FF0000}Ошибка: {FFFFFF}Вы ввели неверный пароль! У Вас осталась последняя попытка, после чего Вас кикнет.\nВведите пароль от аккаунта для входа на сервер:", "Вход", "Выход");
  316.                 default:
  317.                 {
  318.                     ShowPlayerDialog(playerid, dKickMessage, DIALOG_STYLE_MSGBOX, "Оповещение", "{FFFFFF}Вы были кикнуты с сервера.\n{FF0000}Причина: Превышен лимит попыток на ввод пароля.\n{FFFFFF}Для выхода с сервера введите \"/q\" в чат", "Выход", "");
  319.                     return Kick(playerid);
  320.                 }
  321.             }
  322.             SetPVarInt(playerid, "WrongPassword", GetPVarInt(playerid, "WrongPassword")+1);
  323.         }
  324.         return 1;
  325.     }
  326. }
  327.     return 1;
  328. }
  329.  
  330. public OnPlayerClickPlayer(playerid, clickedplayerid, source)
  331. {
  332.     return 1;
  333. }
  334.  
  335. forward FindPlayerInTable(playerid);
  336. public FindPlayerInTable(playerid)
  337. {
  338.     new rows, fields;
  339.     cache_get_data(rows, fields);
  340.     if(!rows)
  341.     {
  342.         ShowPlayerDialog(playerid, dRegister, DIALOG_STYLE_INPUT, "Регистрация нового пользователя", "Введите пароль для регистрации нового аккаунта:", "Регистрация", "Выход");
  343.     }
  344.     else
  345.     {
  346.         ShowPlayerDialog(playerid, dLogin, DIALOG_STYLE_INPUT, "Авторизация", "Введите пароль от аккаунта для того, чтоб продолжить игру:", "Вход", "Выход");
  347.         cache_get_field_content(0, "password", pInfo[playerid][pPassword], mysql_connect_id, 31);
  348.     }
  349.     return 1;
  350. }
  351.  
  352. stock CreateNewAccount(playerid, password[])
  353. {
  354.     new query_string[66+MAX_PLAYER_NAME-4+30+1];
  355.     format(query_string, sizeof(query_string), "INSERT INTO `accounts` (`player_name`, `password`) VALUES ('%s', '%s')", pInfo[playerid][pName], password);
  356.     mysql_function_query(mysql_connect_id, query_string, true, "UploadPlayerAccountNumber", "i", playerid);
  357.  
  358.  
  359.     format(query_string, sizeof(query_string), "Аккаунт %s успешно зарегистрирован. Администрация желает Вам приятной игры!", pInfo[playerid][pName]);
  360.     SendClientMessage(playerid, 0xFFFFFF00, query_string);
  361.     player_is_authorized{playerid} = 1;
  362.     SpawnPlayer(playerid);
  363.     return 1;
  364. }
  365.  
  366. forward UploadPlayerAccountNumber(playerid);
  367. public UploadPlayerAccountNumber(playerid) pInfo[playerid][pID] = cache_insert_id(mysql_connect_id);
  368.  
  369. forward UploadPlayerAccount(playerid);
  370. public UploadPlayerAccount(playerid)
  371. {
  372.     pInfo[playerid][pID] = cache_get_field_content_int(0, "id", mysql_connect_id);
  373.     SendClientMessage(playerid, 0xFFFFFF00, "Вы успешно авторизировались!");
  374.     player_is_authorized{playerid} = 1;
  375.     SpawnPlayer(playerid);
  376.     return 1;
  377. }
  378.  
  379. stock SaveAccount(playerid)
  380. {
  381.     new query_string[(21)+(16+11)+(20+MAX_PLAYER_NAME)+(16+30)] = "UPDATE `accounts` SET";
  382.  
  383.     format(query_string, sizeof(query_string), "%s `player_name` = '%s',", query_string, pInfo[playerid][pName]);
  384.     format(query_string, sizeof(query_string), "%s `password` = '%s'", query_string, pInfo[playerid][pPassword]);
  385.  
  386.     format(query_string, sizeof(query_string), "%s WHERE `id` = '%d'", query_string, pInfo[playerid][pID]);
  387.     mysql_function_query(mysql_connect_id, query_string, false, "", "");
  388.     return 1;
  389. }
  390. stock RemovePlayerInfo(playerid)
  391. {
  392.     pInfo[playerid][pID] = 0;
  393.     pInfo[playerid][pName][0] = EOS;
  394.     pInfo[playerid][pPassword][0] = EOS;
  395.     player_is_authorized{playerid} = 0;
  396.     return 1;
  397. }
  398. /*----------------------------------------------------------------------------*/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement