Advertisement
Guest User

Untitled

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