ZiGGi

MySQL Register System v3.0

May 2nd, 2011
2,405
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 6.50 KB | None | 0 0
  1. /*
  2.  
  3.     Название: MySQL Register System 3.0
  4.     Описание:
  5.         Система регистрации с использованием MySQL
  6.         Используемый MySQL плагин: MySQL Plugin by BlueG (R7)
  7.         Диалог регистрации представлен в виде диалоговых форм
  8.         Используются PVar'ы
  9.         В скрипте есть команда /stats со статистикой денег, убийств и смертей
  10.    
  11.     Автор: ZiGGi (ziggi.org, [email protected])
  12.     Дата: 2012-06-26
  13.    
  14.     Платформа: sa-mp server версии 0.3a и выше
  15.     Компилятор: Pawn 3.2.3664
  16.  
  17. */
  18.  
  19. #include <a_samp>
  20. #include <a_mysql>
  21.  
  22. #define MySQL_DEBUG     0
  23. #define MySQL_HOST      "127.0.0.1"
  24. #define MySQL_USER      "root"
  25. #define MySQL_DATABASE  "samp-reg"
  26. #define MySQL_PASS      ""
  27.  
  28. #define PlayerTable     "players"
  29.  
  30. #define MAX_STRING      128
  31. #define MAX_QUERY       512
  32. #define MAX_RESULT      1024
  33. #define MAX_IP          16
  34. #define player_RegLog_DIALOG 0
  35.  
  36. #define COLOR_WHITE     0xFFFFFFAA
  37.  
  38. #define GivePVarInt(%1,%2,%3) SetPVarInt(%1,%2,GetPVarInt(%1,%2) + %3)
  39. #define player_Exist(%0) GetPVarInt(%0, "account_Exist")
  40. #define player_IsLogged(%0) GetPVarInt(%0, "IsLogged")
  41.  
  42. new g_ConnectionHandle;
  43.  
  44. public OnFilterScriptInit()
  45. {
  46.     mysql_debug(MySQL_DEBUG);
  47.     g_ConnectionHandle = mysql_connect(MySQL_HOST, MySQL_USER, MySQL_DATABASE, MySQL_PASS);
  48.     return 1;
  49. }
  50.  
  51. public OnFilterScriptExit()
  52. {
  53.     mysql_close();
  54.     return 1;
  55. }
  56.  
  57. public OnPlayerConnect(playerid)
  58. {
  59.     new query[MAX_QUERY];
  60.     format(query, sizeof(query), "SELECT * FROM `"PlayerTable"` WHERE `Name` = '%s'", oGetPlayerName(playerid));
  61.     mysql_query_callback(playerid, query, "OnPlayerCheck", -1, g_ConnectionHandle);
  62.    
  63.     ShowRegLogDialog(playerid);
  64.     return 1;
  65. }
  66.  
  67. public OnPlayerDisconnect(playerid, reason)
  68. {
  69.     player_Save(playerid);
  70.     return 1;
  71. }
  72.  
  73. public OnPlayerRequestSpawn(playerid)
  74. {
  75.     if (!player_IsLogged(playerid))
  76.     {
  77.         return 0;
  78.     }
  79.     return 1;
  80. }
  81.  
  82. public OnPlayerDeath(playerid, killerid, reason)
  83. {
  84.     if (killerid != INVALID_PLAYER_ID)
  85.     {
  86.         GivePVarInt(killerid, "Kills", 1);
  87.     }
  88.     GivePVarInt(playerid, "Deaths", 1);
  89.     return 1;
  90. }
  91.  
  92. public OnPlayerCommandText(playerid, cmdtext[])
  93. {
  94.     if (!strcmp(cmdtext, "/stats", true))
  95.     {
  96.         new string[MAX_STRING];
  97.         format(string, sizeof(string),
  98.             "Убийств: %d, Смертей: %d, Денег: %d",
  99.             GetPVarInt(playerid, "Kills"), GetPVarInt(playerid, "Deaths"), GetPVarInt(playerid, "Money")
  100.         );
  101.         return SendClientMessage(playerid, COLOR_WHITE, string);
  102.     }
  103.     return 0;
  104. }
  105.  
  106. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  107. {
  108.     if (dialogid == player_RegLog_DIALOG)
  109.     {
  110.         if (response)
  111.         {
  112.             if (!player_Exist(playerid) || strlen(inputtext) == 0)
  113.             {
  114.                 SendClientMessage(playerid, COLOR_WHITE, "Этот аккаунт не зарегистрирован или вы не ввели пароль.");
  115.                 return ShowRegLogDialog(playerid);
  116.             }
  117.             player_Login(playerid, inputtext);
  118.             return 1;
  119.         }
  120.         else
  121.         {
  122.             if (player_Exist(playerid) || strlen(inputtext) == 0)
  123.             {
  124.                 SendClientMessage(playerid, COLOR_WHITE, "Этот аккаунт уже зарегистрирован или вы не ввели пароль.");
  125.                 return ShowRegLogDialog(playerid);
  126.             }
  127.             player_Register(playerid, inputtext);
  128.             return ShowRegLogDialog(playerid);
  129.         }
  130.     }
  131.     return 1;
  132. }
  133.  
  134. forward OnPlayerCheck(query[], playerid, extraid, connectionHandle);
  135. public OnPlayerCheck(query[], playerid, extraid, connectionHandle)
  136. {
  137.     mysql_store_result();
  138.     if (mysql_num_rows() >= 1)
  139.     {
  140.         SetPVarInt(playerid, "account_Exist", 1);
  141.     }
  142.     else
  143.     {
  144.         SetPVarInt(playerid, "account_Exist", 0);
  145.     }
  146.     mysql_free_result();
  147.     return 1;
  148. }
  149.  
  150. forward OnPlayerRegister(query[], playerid, extraid, connectionHandle);
  151. public OnPlayerRegister(query[], playerid, extraid, connectionHandle)
  152. {
  153.     SetPVarInt(playerid, "account_Exist", 1);
  154.     SendClientMessage(playerid, COLOR_WHITE, "Регистрация прошла успешно");
  155.     return 1;
  156. }
  157.  
  158. forward OnPlayerLogin(query[], playerid, extraid, connectionHandle);
  159. public OnPlayerLogin(query[], playerid, extraid, connectionHandle)
  160. {
  161.     mysql_store_result();
  162.     if (mysql_num_rows() >= 1)
  163.     {
  164.         new tmp[MAX_STRING];
  165.         mysql_retrieve_row();
  166.        
  167.         mysql_get_field("ID", tmp);
  168.         SetPVarInt(playerid, "MySQL_ID", strval(tmp));
  169.        
  170.         mysql_get_field("Money", tmp);
  171.         oSetPlayerMoney(playerid, strval(tmp));
  172.        
  173.         mysql_get_field("Kills", tmp);
  174.         SetPVarInt(playerid,"Kills", strval(tmp));
  175.        
  176.         mysql_get_field("Deaths", tmp);
  177.         SetPVarInt(playerid,"Deaths", strval(tmp));
  178.  
  179.         SetPVarInt(playerid, "IsLogged", 1);
  180.         SendClientMessage(playerid, COLOR_WHITE, "Вы успешно вошли.");
  181.     }
  182.     else
  183.     {
  184.         SendClientMessage(playerid, COLOR_WHITE, "Неправильный пароль.");
  185.         ShowRegLogDialog(playerid);
  186.     }
  187.     mysql_free_result();
  188.     return 1;
  189. }
  190.  
  191. stock player_Register(playerid, password[])
  192. {
  193.     new query[MAX_QUERY];
  194.     format(query,sizeof(query), "INSERT INTO `"PlayerTable"` (`Name`, `Password`) VALUES ('%s', '%s')", oGetPlayerName(playerid), password);
  195.     mysql_query_callback(playerid, query, "OnPlayerRegister", -1, g_ConnectionHandle);
  196. }
  197.  
  198. stock player_Login(playerid, password[])
  199. {
  200.     new query[MAX_QUERY];
  201.     format(query, sizeof(query), "SELECT * FROM `"PlayerTable"` WHERE `Name` = '%s' AND `Password` = '%s'", oGetPlayerName(playerid), password);
  202.     mysql_query_callback(playerid, query, "OnPlayerLogin", -1, g_ConnectionHandle);
  203.     return 1;
  204. }
  205.  
  206. stock player_Save(playerid)
  207. {
  208.     if (!player_IsLogged(playerid))
  209.     {
  210.         return 0;
  211.     }
  212.     new query[MAX_QUERY];
  213.     format(query, sizeof(query),
  214.         "UPDATE `"PlayerTable"` SET \
  215.         `Money` = %d, `Kills` = %d, `Deaths` = %d \
  216.         WHERE `ID` = %d",
  217.         GetPVarInt(playerid, "Money"), GetPVarInt(playerid, "Kills"), GetPVarInt(playerid, "Deaths"),
  218.         GetPVarInt(playerid, "MySQL_ID")
  219.     );
  220.     mysql_query(query, -1, -1, g_ConnectionHandle);
  221.     return 1;
  222. }
  223.  
  224. stock ShowRegLogDialog(playerid)
  225. {
  226.     return ShowPlayerDialog(playerid, player_RegLog_DIALOG, DIALOG_STYLE_INPUT,
  227.         "Вход в аккаунт",
  228.         "Введите пароль чтобы войти или зарегистрировать аккаунт.",
  229.         "Войти", "Зарегать"
  230.     );
  231. }
  232.  
  233. stock oGetPlayerName(playerid)
  234. {
  235.     new name[MAX_PLAYER_NAME];
  236.     GetPlayerName(playerid, name, sizeof(name));
  237.     return name;
  238. }
  239.  
  240. stock oSetPlayerMoney(playerid, money)
  241. {
  242.     SetPVarInt(playerid, "Money", money);
  243.     ResetPlayerMoney(playerid);
  244.     return GivePlayerMoney(playerid, money);
  245. }
Advertisement
Add Comment
Please, Sign In to add comment