Advertisement
Guest User

new.pwn

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