- Регистрация
- 14 Авг 2019
- Сообщения
- 11
- Лучшие ответы
- 0
- Репутация
- 0
Ошибка! если аккаунт сохранился в базе данных то все ровно выскакивает окно с регистрацией
Держите весь мод и то только одна регистрация...
Держите весь мод и то только одна регистрация...
PHP:
main() { }
//==============================================================================
//include
#include <a_samp>
#include <fix>
#include <a_mysql>
#include <streamer>
#include <a_actor>
#include <dc_cmd>
#include <sscanf2>
#include <foreach>
#include <Pawn.Regex>
#include <crashdetect>
//==============================================================================
#define SERVER_NAME "xxxxx RolePlay"
#define SERVER_MAP "San Andreas"
#define SERVER_MODE "xxxxx RP 0.1v"
#define SERVER_VERSION "xxxxxx RP 0.1v"
#define SERVER_WEBSITE "vk.com/xxxxxx-rp.com"
#define SERVER_LANGUAGE "Russian/Русский"
//==============================================================================
//MySQL
#define MYSQL_HOST "xxxxxx"
#define MYSQL_USER "xxxxxx"
#define MYSQL_PASS ""
#define MYSQL_BASE "xxxxxx"
//==================================[Дефайны]===================================
//------------------------------[Дефайны функции]-------------------------------
#define SCM SendClientMessage
#define SCMTA SendClientMessageToAll
#define SPD ShowPlayerDialog
#define DSI DIALOG_STYLE_INPUT
#define DSP DIALOG_STYLE_PASSWORD
#define DSM DIALOG_STYLE_MSGBOX
#define DSL DIALOG_STYLE_LIST
#define PN player_info
//-------------------------------[Дефайны цвета]--------------------------------
#define COLOR_WHITE 0xFFFFFFFF
#define COLOR_GREY 0xAFAFAFFF
//==============================================================================
//=================================[Переменные]=================================
new MySQL: dbHandle;
enum player
{
ID,
NAME[MAX_PLAYER_NAME],
PASSWORD[65],
SALT[11],
EMAIL[64],
SEX,
SKIN,
REGDATA[12],
REGIP[16],
}
enum dialogs
{
DLG_NONE,
DLG_REG,
DLG_LOG,
DLG_REGEMAIL,
DLG_REGSEX,
DLG_RACE
}
new player_info[MAX_PLAYERS][player];
new gRandomM[4] = {26,35,142,262};
new gRandomF[3] = {65,69,193};
//==============================================================================
public OnGameModeInit()
{
SetGameModeText(""SERVER_MODE"");
SendRconCommand("hostname "SERVER_NAME"");
SendRconCommand("mapname "SERVER_MAP"");
SendRconCommand("weburl "SERVER_WEBSITE"");
SendRconCommand("language "SERVER_LANGUAGE"");
SetGameModeText(SERVER_VERSION);
ManualVehicleEngineAndLights();
EnableStuntBonusForAll(0);
DisableInteriorEnterExits();
ConnectMySQL();
AddPlayerClass(0,1225.7109,-1815.1077,16.5938,223.0721,0,0,0,0,0,0);
//==============================================================================
//3D тексты
Create3DTextLabel("Сервер в разработке...", COLOR_WHITE, 1225.7443,-1814.5817,16.5938, 30.0, 0, 1);
//==============================================================================
return 1;
}
public OnGameModeExit()
{
return 1;
}
public OnPlayerRequestClass(playerid, classid)
{
return 1;
}
public OnPlayerConnect(playerid)
{
PN[playerid][SKIN] = 0;
TogglePlayerSpectating(playerid, 1);
GetPlayerName(playerid, player_info[playerid][NAME], MAX_PLAYER_NAME);
static const fmt_query[] = "SELECT `id` FROM `users` WHERE `name` = '%s'";
new query[sizeof(fmt_query)+(-2+MAX_PLAYER_NAME)];
format(query, sizeof(query), fmt_query, player_info[playerid][NAME]);
mysql_tquery(dbHandle, query, "CheckRegistration", "i", playerid);
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
return 1;
}
public OnPlayerSpawn(playerid)
{
SetPlayerSkin(playerid, player_info[playerid][SKIN]);
AddPlayerClass(PN[playerid][SKIN],1225.7109,-1815.1077,16.5938,223.0721,0,0,0,0,0,0);
return 1;
}
public OnPlayerDeath(playerid, killerid, reason)
{
return 1;
}
public OnPlayerText(playerid, text[])
{
return 1;
}
public OnPlayerCommandText(playerid, cmdtext[])
{
return 0;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
switch(dialogid)
{
case DLG_REG:
{
if(response)
{
if(!strlen(inputtext))
{
ShowRegistration(playerid);
}
//if(!(8 <= strlen(inputtext) <= 20))
if(strlen(inputtext) < 8 || strlen(inputtext) > 20)
{
ShowRegistration(playerid);
}
new regex:rg_passwordcheck = regex_new("^[a-zA-Z0-9]{1,}$");
if(regex_check(inputtext, rg_passwordcheck))
{
new salt[11];
for(new i; i <10; i++)
{
salt[i] = random(79) + 47;
}
salt[10] = 0;
SHA256_PassHash(inputtext, salt, player_info[playerid][PASSWORD], 65);
strmid(PN[playerid][SALT], salt, 0, 11, 11);
//printf("%s", PN[playerid][SALT]);
//strmid(player_info[playerid][PASSWORD], inputtext, 0, strlen(inputtext), 20);
SPD(playerid, DLG_REGEMAIL, DSI, "{cdeb1f}E-mail {FFFFFF}| Шаг 2/3",
"{FFFFFF}Введите ваш E-mail адрес\nЕсли вы потеряете доступ к аккаунту, то с помощью e-mail вы сможете восстановить его",
"{FFFFFF}Далее", "");
}
else
{
ShowRegistration(playerid);
regex_delete(rg_passwordcheck);
}
}
else
{
SCM(playerid, COLOR_WHITE, "Для выхода из игры используйте: '/q(uit)'");
SPD(playerid, -1, 0, " ", " ", " ", "");
return Kick(playerid);
}
}
case DLG_REGEMAIL:
{
if(!strlen(inputtext))
{
SPD(playerid, DLG_REGEMAIL, DSI, "{cdeb1f}E-mail {FFFFFF}| Шаг 2/3",
"{FFFFFF}Введите ваш E-mail адрес\nЕсли вы потеряете доступ к аккаунту, то с помощью e-mail вы сможете восстановить его",
"{FFFFFF}Далее", "");
}
new regex:rg_emailcheck = regex_new("^([-A-Za-z0-9_]+\\.)*[-A-Za-z0-9_]+@([A-Za-z0-9][-A-Za-z0-9]*\\.)+[A-Za-z]{2,6}$");
if(regex_check(inputtext, rg_emailcheck))
{
strmid(player_info[playerid][EMAIL], inputtext, 0, strlen(inputtext), 64);
SPD(playerid, DLG_REGSEX, DIALOG_STYLE_MSGBOX, "{cdeb1f}Выбор пола {FFFFFF}| Шаг 3/3", "{FFFFFF}Выберите пол вашего персонажа:\n- Мужчина\n- Женчина", "Мужской", "Женский");
}
else
{
SPD(playerid, DLG_REGEMAIL, DSI, "{cdeb1f}E-mail {FFFFFF}| Шаг 2/3",
"{FFFFFF}Введите ваш E-mail адрес\nЕсли вы потеряете доступ к аккаунту, то с помощью e-mail вы сможете восстановить его",
"{FFFFFF}Далее", "");
}
regex_delete(rg_emailcheck);
}
case DLG_REGSEX:
{
if(response)
{
PN[playerid][SEX] = 1;
new RandomM = random(sizeof(gRandomM));
SetPlayerSkin(playerid,gRandomM[RandomM]);
PN[playerid][SKIN] = gRandomM[RandomM];
}
else
{
PN[playerid][SEX] = 2;
new RandomF = random(sizeof(gRandomF));
SetPlayerSkin(playerid,gRandomF[RandomF]);
PN[playerid][SKIN] = gRandomF[RandomF];
}
SpawnPlayer(playerid);
TogglePlayerSpectating(playerid, 0);
SCM(playerid, COLOR_WHITE, "Регистрация завершена");
new Year, Month, Day;
getdate(Year, Month, Day);
new date[12];
format(date, sizeof(date), "%02d.%02d.%d", Day, Month, Year);
new ip[16];
GetPlayerIp(playerid, ip, sizeof(ip));
static const fmt_query[] = "INSERT INTO `users` (`name`,`password`, `salt`, `email`, `sex`, `skin`, `regdata`, `regip`) VALUES ('%s', '%s', '%s', '%s', '%d', '%d', '%s', '%s')";
new query[sizeof(fmt_query)+(-2+MAX_PLAYER_NAME)+(-2+64)+(-2+10)+(-2+65)+(-2+8)+(-2+1)+(-2+3)+(-2+12)+(-2+15)];
format(query, sizeof(query), fmt_query, PN[playerid][NAME], PN[playerid][PASSWORD], PN[playerid][SALT], PN[playerid][EMAIL], PN[playerid][SEX], PN[playerid][SKIN], date, ip);
mysql_query(dbHandle, query);
static const fmt_query2[] = "SELECT * FROM `users` WHERE `name` = '%s' AND `password` = '%s'";
format(query, sizeof(query), fmt_query2, PN[playerid][NAME], PN[playerid][PASSWORD]);
mysql_tquery(dbHandle, query, "PlayerLogin", "i", playerid);
SetPVarInt(playerid, "Logged", 1);
}
case DLG_LOG:
{
if(response)
{
new checkpass[65];
SHA256_PassHash(inputtext, PN[playerid][SALT], checkpass, 65);
printf("%s\n%s", checkpass, PN[playerid][SALT]);
if(strcmp(PN[playerid][PASSWORD], checkpass, false, 64) == 0)
{
SCM(playerid, COLOR_WHITE, "Пароль верный");
TogglePlayerSpectating(playerid, 0);
}
else
{
SCM(playerid, COLOR_WHITE, "Пароль неверен");
ShowLogin(playerid);
}
}
else
{
SCM(playerid, COLOR_WHITE, "Для выхода из игры используйте: '/q(uit)'");
SPD(playerid, -1, 0, " ", " ", " ", "");
return Kick(playerid);
}
}
}
return 1;
}
forward PlayerLogin(playerid);
public PlayerLogin(playerid)
{
new rows;
cache_get_row_count(rows);
if(rows)
{
cache_get_value_name_int(0, "id", PN[playerid][ID]);
cache_get_value_name(0, "password", PN[playerid][PASSWORD], 65);
cache_get_value_name(0, "salt", PN[playerid][SALT], 11);
cache_get_value_name(0, "email", PN[playerid][EMAIL], 64);
cache_get_value_name_int(0, "sex", PN[playerid][SEX]);
cache_get_value_name_int(0, "skin", PN[playerid][SKIN]);
cache_get_value_name(0, "regdata", PN[playerid][REGDATA], 12);
cache_get_value_name(0, "regip", PN[playerid][REGDATA], 15);
TogglePlayerSpectating(playerid, 0);
SetPVarInt(playerid, "Logged", 1);
SpawnPlayer(playerid);
}
return 1;
}
public OnPlayerClickPlayer(playerid, clickedplayerid, source)
{
return 1;
}
forward CheckRegistration(playerid);
public CheckRegistration(playerid)
{
new rows;
cache_get_row_count(rows);
if(rows)
{
cache_get_value_name(0, "password", PN[playerid][PASSWORD], 65);
cache_get_value_name(0, "salt", PN[playerid][SALT], 11);
cache_get_value_name_int(0, "skin", PN[playerid][SKIN]);
ShowLogin(playerid);
}
else ShowRegistration(playerid);
}
stock ConnectMySQL()
{
dbHandle = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS, MYSQL_BASE);
switch(mysql_errno())
{
case 0: print("[MySQL] MySQL connection: FALSE\n");
default: print("[MySQL] MySQL connection: TRUE\n");
}
mysql_log(ERROR | WARNING);
mysql_set_charset("cp1251");
}
stock ShowRegistration(playerid)
{
new dialog[370+(-2+MAX_PLAYER_NAME)];
format(dialog, sizeof(dialog),
"{FFFFFF}Добро пожаловать на Lanix Role Play\n\n Логин: %s\n {FFFFFF}Статус аккаунта: {e63034}Не зарегистрирован{ffffff}\n\nПридумайте пароль и нажмите 'Далее'\n\n\
Пароль чувствителен к регистру.",
PN[playerid][NAME]
);
SPD(playerid, DLG_REG, DSI, "{FFFFFF}Регистрация {FFFFFF}| Шаг 1/3", dialog, "Далее", "Выход");
}
stock ShowLogin(playerid)
{
new dialog[270+(-2+MAX_PLAYER_NAME)];
format(dialog, sizeof(dialog),
"{FFFFFF}Добро пожаловать на Lanix Role Play\n\n Логин: %s\n {FFFFFF}Статус аккаунта: {21e14d}Зарегистрирован{ffffff}\n\nВведите пароль и нажмите 'Далее'\n",
PN[playerid][NAME]);
SPD(playerid, DLG_LOG, DSI, "{FFFFFF}Авторизация", dialog, "Войти", "Выход");
}
Последнее редактирование модератором: