Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Название: MySQL Register System 3.0
- Описание:
- Система регистрации с использованием MySQL
- Используемый MySQL плагин: MySQL Plugin by BlueG (R7)
- Диалог регистрации представлен в виде диалоговых форм
- Используются PVar'ы
- В скрипте есть команда /stats со статистикой денег, убийств и смертей
- Автор: ZiGGi (ziggi.org, [email protected])
- Дата: 2012-06-26
- Платформа: sa-mp server версии 0.3a и выше
- Компилятор: Pawn 3.2.3664
- */
- #include <a_samp>
- #include <a_mysql>
- #define MySQL_DEBUG 0
- #define MySQL_HOST "127.0.0.1"
- #define MySQL_USER "root"
- #define MySQL_DATABASE "samp-reg"
- #define MySQL_PASS ""
- #define PlayerTable "players"
- #define MAX_STRING 128
- #define MAX_QUERY 512
- #define MAX_RESULT 1024
- #define MAX_IP 16
- #define player_RegLog_DIALOG 0
- #define COLOR_WHITE 0xFFFFFFAA
- #define GivePVarInt(%1,%2,%3) SetPVarInt(%1,%2,GetPVarInt(%1,%2) + %3)
- #define player_Exist(%0) GetPVarInt(%0, "account_Exist")
- #define player_IsLogged(%0) GetPVarInt(%0, "IsLogged")
- new g_ConnectionHandle;
- public OnFilterScriptInit()
- {
- mysql_debug(MySQL_DEBUG);
- g_ConnectionHandle = mysql_connect(MySQL_HOST, MySQL_USER, MySQL_DATABASE, MySQL_PASS);
- return 1;
- }
- public OnFilterScriptExit()
- {
- mysql_close();
- return 1;
- }
- public OnPlayerConnect(playerid)
- {
- new query[MAX_QUERY];
- format(query, sizeof(query), "SELECT * FROM `"PlayerTable"` WHERE `Name` = '%s'", oGetPlayerName(playerid));
- mysql_query_callback(playerid, query, "OnPlayerCheck", -1, g_ConnectionHandle);
- ShowRegLogDialog(playerid);
- return 1;
- }
- public OnPlayerDisconnect(playerid, reason)
- {
- player_Save(playerid);
- return 1;
- }
- public OnPlayerRequestSpawn(playerid)
- {
- if (!player_IsLogged(playerid))
- {
- return 0;
- }
- return 1;
- }
- public OnPlayerDeath(playerid, killerid, reason)
- {
- if (killerid != INVALID_PLAYER_ID)
- {
- GivePVarInt(killerid, "Kills", 1);
- }
- GivePVarInt(playerid, "Deaths", 1);
- return 1;
- }
- public OnPlayerCommandText(playerid, cmdtext[])
- {
- if (!strcmp(cmdtext, "/stats", true))
- {
- new string[MAX_STRING];
- format(string, sizeof(string),
- "Убийств: %d, Смертей: %d, Денег: %d",
- GetPVarInt(playerid, "Kills"), GetPVarInt(playerid, "Deaths"), GetPVarInt(playerid, "Money")
- );
- return SendClientMessage(playerid, COLOR_WHITE, string);
- }
- return 0;
- }
- public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
- {
- if (dialogid == player_RegLog_DIALOG)
- {
- if (response)
- {
- if (!player_Exist(playerid) || strlen(inputtext) == 0)
- {
- SendClientMessage(playerid, COLOR_WHITE, "Этот аккаунт не зарегистрирован или вы не ввели пароль.");
- return ShowRegLogDialog(playerid);
- }
- player_Login(playerid, inputtext);
- return 1;
- }
- else
- {
- if (player_Exist(playerid) || strlen(inputtext) == 0)
- {
- SendClientMessage(playerid, COLOR_WHITE, "Этот аккаунт уже зарегистрирован или вы не ввели пароль.");
- return ShowRegLogDialog(playerid);
- }
- player_Register(playerid, inputtext);
- return ShowRegLogDialog(playerid);
- }
- }
- return 1;
- }
- forward OnPlayerCheck(query[], playerid, extraid, connectionHandle);
- public OnPlayerCheck(query[], playerid, extraid, connectionHandle)
- {
- mysql_store_result();
- if (mysql_num_rows() >= 1)
- {
- SetPVarInt(playerid, "account_Exist", 1);
- }
- else
- {
- SetPVarInt(playerid, "account_Exist", 0);
- }
- mysql_free_result();
- return 1;
- }
- forward OnPlayerRegister(query[], playerid, extraid, connectionHandle);
- public OnPlayerRegister(query[], playerid, extraid, connectionHandle)
- {
- SetPVarInt(playerid, "account_Exist", 1);
- SendClientMessage(playerid, COLOR_WHITE, "Регистрация прошла успешно");
- return 1;
- }
- forward OnPlayerLogin(query[], playerid, extraid, connectionHandle);
- public OnPlayerLogin(query[], playerid, extraid, connectionHandle)
- {
- mysql_store_result();
- if (mysql_num_rows() >= 1)
- {
- new tmp[MAX_STRING];
- mysql_retrieve_row();
- mysql_get_field("ID", tmp);
- SetPVarInt(playerid, "MySQL_ID", strval(tmp));
- mysql_get_field("Money", tmp);
- oSetPlayerMoney(playerid, strval(tmp));
- mysql_get_field("Kills", tmp);
- SetPVarInt(playerid,"Kills", strval(tmp));
- mysql_get_field("Deaths", tmp);
- SetPVarInt(playerid,"Deaths", strval(tmp));
- SetPVarInt(playerid, "IsLogged", 1);
- SendClientMessage(playerid, COLOR_WHITE, "Вы успешно вошли.");
- }
- else
- {
- SendClientMessage(playerid, COLOR_WHITE, "Неправильный пароль.");
- ShowRegLogDialog(playerid);
- }
- mysql_free_result();
- return 1;
- }
- stock player_Register(playerid, password[])
- {
- new query[MAX_QUERY];
- format(query,sizeof(query), "INSERT INTO `"PlayerTable"` (`Name`, `Password`) VALUES ('%s', '%s')", oGetPlayerName(playerid), password);
- mysql_query_callback(playerid, query, "OnPlayerRegister", -1, g_ConnectionHandle);
- }
- stock player_Login(playerid, password[])
- {
- new query[MAX_QUERY];
- format(query, sizeof(query), "SELECT * FROM `"PlayerTable"` WHERE `Name` = '%s' AND `Password` = '%s'", oGetPlayerName(playerid), password);
- mysql_query_callback(playerid, query, "OnPlayerLogin", -1, g_ConnectionHandle);
- return 1;
- }
- stock player_Save(playerid)
- {
- if (!player_IsLogged(playerid))
- {
- return 0;
- }
- new query[MAX_QUERY];
- format(query, sizeof(query),
- "UPDATE `"PlayerTable"` SET \
- `Money` = %d, `Kills` = %d, `Deaths` = %d \
- WHERE `ID` = %d",
- GetPVarInt(playerid, "Money"), GetPVarInt(playerid, "Kills"), GetPVarInt(playerid, "Deaths"),
- GetPVarInt(playerid, "MySQL_ID")
- );
- mysql_query(query, -1, -1, g_ConnectionHandle);
- return 1;
- }
- stock ShowRegLogDialog(playerid)
- {
- return ShowPlayerDialog(playerid, player_RegLog_DIALOG, DIALOG_STYLE_INPUT,
- "Вход в аккаунт",
- "Введите пароль чтобы войти или зарегистрировать аккаунт.",
- "Войти", "Зарегать"
- );
- }
- stock oGetPlayerName(playerid)
- {
- new name[MAX_PLAYER_NAME];
- GetPlayerName(playerid, name, sizeof(name));
- return name;
- }
- stock oSetPlayerMoney(playerid, money)
- {
- SetPVarInt(playerid, "Money", money);
- ResetPlayerMoney(playerid);
- return GivePlayerMoney(playerid, money);
- }
Advertisement
Add Comment
Please, Sign In to add comment