• Уважаемый Гость.
    - Прежде чем создать свою тему, пожалуйста, попробуй воспользоваться этим -> ПОИСКОМ !!!
    - После решения Вашего вопроса (проблемы) - нажмите "Лучший ответ", на сообщении, которое его решило. За игнорирование этого действия - Вы получите соответствующее предупреждение. Мы - стараемся Вам помочь. Уделите 10 секунд - чтобы нажать кнопку. (Если у Вас нет такой возможности - укажите в последнем своем сообщении какой ответ Вы считаете лучшим. Наши модераторы сделают это за Вас)
    ЗАПРЕЩЕНО:
    - Cоздавать темы с названиями "Помогите", "Плиз", "Ошибка", "Не могу найти", "Хелп" и тому подобное;
    - Cоздавать темы без детального описания того, что нужно исправить.
    - Cоздавать темы из одного скриншота.
    За игнор правил форума - Ваша тема будет удалена, а Вы получите системное предупреждение.

Проблема с регистрацией (2)

Статус
В этой теме нельзя размещать новые ответы.

John Powell

Начинающий
Пользователь
Регистрация
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, "Войти", "Выход");
}
 
Последнее редактирование модератором:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу