Advertisement
Guest User

Untitled

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