Рекомендованные сообщения



20 posts in this topic

Не работает авторизация (на регистрации стоит шифровка md5 и не могу сделать на авторизацию что бы работало)
 

Спойлер

case dLogin:
	    {
	        if(!response) return SPD(playerid, dLogin, info, "Оповещение", "{FFFFFF}Вы были кикнуты с сервера.\n{FF0000}Причина: Отказ от авторизации.\n{FFFFFF}Для выхода с сервера введите \"/q\" в чат", "Вход", "Выход"), Kick(playerid);
	        if(!strlen(inputtext)) return SPD(playerid, dLogin, DIALOG_STYLE_PASSWORD, "Авторизация", "Ошибка. Вы ничего не ввели\n{FFFFFF}Введите пароль от аккаунта для того, чтоб продолжить игру:", "Вход", "Выход");
            for(new i = strlen(inputtext)-1; i != -1; i--)
	        {
	            switch(inputtext[i])
	            {
	                case '0'..'9', 'а'..'я', 'a'..'z', 'А'..'Я', 'A'..'Z': continue;
	                default: return SPD(playerid, dLogin, DIALOG_STYLE_PASSWORD, "Авторизация", "Ошибка. Использовать возможно только латинские буквы и цифры\n{FFFFFF}Введите пароль от аккаунта для того, чтоб продолжить игру:", "Вход", "Выход");
	            }
	        }
	        if(!strcmp(pInfo[playerid][pPass], inputtext))
     		{
	            mysql_format:str_small( "SELECT * FROM `" #DB_ACCOUNTS "` WHERE `ID` = %d", pInfo[playerid][pID] );
				mysql_tquery( mysql_connect_ID, str_small, "UploadPlayerAccount","i", playerid );
	        }
	        else
			{
				SPD(playerid, dLogin, DIALOG_STYLE_PASSWORD, "Авторизация", "Ошибка. Вы ввели неверный пароль\n{FFFFFF}Введите пароль от аккаунта для того, чтоб продолжить игру:", "Вход", "Выход");
			}
			return 1;
	    }

 

 

Share this post


Link to post
Share on other sites

UP

Share this post


Link to post
Share on other sites

@mikivtanke если при регистрации пароль шифруется в MD5, то при авторизации нужно сверять не сохраненный пароль с введенным, а сохраненный пароль с MD5 от введенного пароля. 

if(!strcmp(pInfo[playerid][pPass], md5(inputtext)))

Share this post


Link to post
Share on other sites

@DEST

Спойлер

 warning 202: number of arguments does not match definition
warning 224: indeterminate array size in "sizeof" expression (symbol "size")
error 035: argument type mismatch (argument 2)
Pawn compiler 3.2.3664	 	 	Copyright (c) 1997-2006, ITB CompuPhase


1 Error.

 


Строка:
 

if(!strcmp(pInfo[playerid][pPass], md5(inputtext)))

 

Edited by mikivtanke

Share this post


Link to post
Share on other sites

@mikivtanke посмотрите в своем инклуде md5 как объявлена эта функция или посмотрите как она используется в моде в других местах, но скорее всего должно быть так: 

md5(inputtext, strlen(inputtext))

Share this post


Link to post
Share on other sites

@DEST используется только в регистации на данный момент, в инклуде прописан так:
 

native md5(dest[], source[], size = sizeof dest);

 

ошибки:
 

C:\Users\user2\Documents\MEGA\Заказчикам\EXCITING\Мод\gamemodes\exproject.pwn(8263) : error 035: argument type mismatch (argument 2)
Pawn compiler 3.2.3664	 	 	Copyright (c) 1997-2006, ITB CompuPhase


1 Error.

 

Edited by mikivtanke

Share this post


Link to post
Share on other sites

@mikivtanke 
 

new md5Pass[кол-во_ячеек_pPass];
md5(inputtext, md5Pass, кол-во_ячеек_pPass);
if(!strcmp(pInfo[playerid][pPass], md5Pass))
...

 

Share this post


Link to post
Share on other sites

@DEST как понять "кол-во ячеек"? 

Share this post


Link to post
Share on other sites

@DEST В консоль выдает:
 

MD5 warning: NULL source string passed to native 'md5'

 

Share this post


Link to post
Share on other sites

@mikivtanke inputtext и md5Pass поменяйте местами

Share this post


Link to post
Share on other sites

@DEST не дает пройти авторизацию вообще (что верный, что не верный пароль - одно и тоже), ошибки/варнинги не выдает

Share this post


Link to post
Share on other sites

@mikivtanke, а зачем вы при подключении игрока к серверу загружаете его аккаунт, а потом загруженный пароль сверяете на стороне сервера с введенным паролем? Ведь можно и в базе данных искать сразу по имени пользователя и паролю.

Спойлер

new string[], nickname[MAX_PLAYER_NAME];
GetPlayerName(playerid, nickname, sizeof nickname); // получим ник пользователя
// предположим, что password - введенный пользователем пароль в игре для авторизации
format(string, sizeof string, "SELECT * FROM accounts WHERE nickname = '%s' AND password = MD5('%s) LIMIT 1", nickname, password);
new Cache:cache = mysql_query(dbHandle, string); // отправим запрос в базу данных на загрузку аккаунта по нику И паролю

if(cache_num_rows()) { // если что-нибудь возвращено (то есть аккаунт найден)
	// загружаем аккаунт
}

 

 

Edited by odosenok
Причина: исправление опечатки (см. ответ от DEST).

Share this post


Link to post
Share on other sites

@odosenok не хочется менять скрипт регистрации и не до конца понимаю че к чему. Пока что попробовал так:
 

Спойлер

new string[90], nickname[MAX_PLAYER_NAME];
			GetPlayerName(playerid, nickname, sizeof nickname); // получим ник пользователя
			// предположим, что password - введенный пользователем пароль в игре для авторизации
			format(string, sizeof string, "SELECT * FROM accounts WHERE nickname = '%s' AND password = MD5('%s') LIMIT 1", nickname, inputtext);
			new Cache:mysql_function_query(mysql_connect_ID, string); // ошибка тут

			if(cache_num_rows()) // если что-нибудь возвращено (то есть аккаунт найден)
			{
	  			mysql_format:str_small( "SELECT * FROM `" #DB_ACCOUNTS "` WHERE `ID` = %d", pInfo[playerid][pID] );
				mysql_tquery( mysql_connect_ID, str_small, "UploadPlayerAccount","i", playerid );
			}

 

 

Спойлер

C:\Users\user2\Documents\MEGA\Çàêàç÷èêàì\EXCITING\Ìîä\gamemodes\exproject.pwn(8279) : error 001: expected token: ";", but found "("
C:\Users\user2\Documents\MEGA\Çàêàç÷èêàì\EXCITING\Ìîä\gamemodes\exproject.pwn(8279) : warning 215: expression has no effect
C:\Users\user2\Documents\MEGA\Çàêàç÷èêàì\EXCITING\Ìîä\gamemodes\exproject.pwn(8279) : warning 203: symbol is never used: "mysql_function_query"
Pawn compiler 3.2.3664	 	 	Copyright (c) 1997-2006, ITB CompuPhase


1 Error.

 

 

Share this post


Link to post
Share on other sites

@mikivtanke, а какая у вас версия MySQL?

Share this post


Link to post
Share on other sites

@mikivtanke, а UploadPlayerAccount покажите-ка еще.

 

Share this post


Link to post
Share on other sites
В 26.10.2019 в 12:47, mikivtanke сказал:

new Cache:mysql_function_query(mysql_connect_ID, string);

в этой строке название переменной пропущено. Скорее всего, имелось ввиду: 
new Cache: cache = mysql_function_query(mysql_connect_ID, string);

Share this post


Link to post
Share on other sites

@odosenok 

Спойлер

public: UploadPlayerAccount(playerid)
{
	pInfo[playerid][pID] = cache_get_field_content_int(0, "ID", mysql_connect_ID);
    pInfo[playerid][pAdmin] = cache_get_field_content_int(0, "Admin", mysql_connect_ID);
    pInfo[playerid][pAdminPass] = cache_get_field_content_int(0, "AdminPass", mysql_connect_ID);
    pInfo[playerid][pMoney] = cache_get_field_content_int(0, "Money", mysql_connect_ID);
    
    new numid = cache_get_field_content_int(0, "Org", mysql_connect_ID);
    if(numid != 0)
    {
    	for( new i; i != LoadAllOrg; i++ )
		{
		    if(numid == oInfo[i][oID])
			{
			    pInfo[playerid][pOrg][0] = i;
				break;
			}
	    }
    }
	else
	{
	    pInfo[playerid][pOrg][0] = -1;
	}
    
    pInfo[playerid][pOrg][1] = cache_get_field_content_int(0, "Orang", mysql_connect_ID);
    pInfo[playerid][pHspawn] = cache_get_field_content_int(0, "Hspawn", mysql_connect_ID);
    pInfo[playerid][pDonate] = cache_get_field_content_int(0, "Donate", mysql_connect_ID);
    pInfo[playerid][pArrest] = cache_get_field_content_int(0, "Arrest", mysql_connect_ID);
    pInfo[playerid][pBank] = cache_get_field_content_int(0, "Bank", mysql_connect_ID);
    pInfo[playerid][pGame] = cache_get_field_content_int(0, "Game", mysql_connect_ID);
    pInfo[playerid][pAnim] = cache_get_field_content_int(0, "Anim", mysql_connect_ID);
    pInfo[playerid][pNumber] = cache_get_field_content_int(0, "Number", mysql_connect_ID);
    pInfo[playerid][pWarn] = cache_get_field_content_int(0, "Warn", mysql_connect_ID);
    pInfo[playerid][pVip] = cache_get_field_content_int(0, "Vip", mysql_connect_ID);
    pInfo[playerid][pVipday] = cache_get_field_content_int(0, "Vipday", mysql_connect_ID);
    pInfo[playerid][pPhonemoney] = cache_get_field_content_int(0, "Phonemoney", mysql_connect_ID);
    pInfo[playerid][pVirt] = cache_get_field_content_int(0, "Virt", mysql_connect_ID);
    pInfo[playerid][pFrakskin] = cache_get_field_content_int(0, "Fskin", mysql_connect_ID);
    pInfo[playerid][pFight] = cache_get_field_content_int(0, "Fight", mysql_connect_ID);
    pInfo[playerid][pJail] = cache_get_field_content_int(0, "Jail", mysql_connect_ID);
  	pInfo[playerid][pJailTime] = cache_get_field_content_int(0, "JailTime", mysql_connect_ID);
  	pInfo[playerid][pDeath] = cache_get_field_content_int(0, "Death", mysql_connect_ID);
    if(pInfo[playerid][pGame]>2) SetPlayerScore(playerid,1);
    SetPVarInt(playerid,"mute",cache_get_field_content_int(0, "Mute", mysql_connect_ID));
    if(GetPVarInt(playerid,"mute")==0) DeletePVar(playerid,"mute");
    
    //cache_get_field_content(0, "Regcharacter", pInfo[playerid][pRegCharacter], mysql_connect_ID, 2024);
    SetPlayerFightingStyle(playerid, pInfo[playerid][pFight]);

    new mall[25];
    cache_get_field_content(0, "Mail", mall, mysql_connect_ID, 25);
    strmid(pInfo[playerid][pMail], mall, 0, strlen(mall), 25);
    
    cache_get_field_content(0, "Regip", mall, mysql_connect_ID, 17);
    strmid(pInfo[playerid][pRegip], mall, 0, strlen(mall), 17);
    pInfo[playerid][pRegdate] = cache_get_field_content_int(0, "Regdate", mysql_connect_ID);

    cache_get_field_content(0, "Lastip", mall, mysql_connect_ID, 17);
    strmid(pInfo[ playerid ][ pLastip ], mall, 0, strlen(mall), 17);
    pInfo[playerid][pLastdate] = cache_get_field_content_int(0, "Lastdate", mysql_connect_ID);

    new frak[35];
    cache_get_field_content(0, "Frak",frak, mysql_connect_ID,35);
    sscanf(frak, "p<|>dd",
	pInfo[playerid][pFrak][0],
	pInfo[playerid][pFrak][1]);
	
	if( pInfo[playerid][pFrak][0] != 0 || pInfo[playerid][pOrg][0] != -1)
	{
		new rang[40];
		cache_get_field_content(0, "Dol", rang, mysql_connect_ID, 35);
		strmid(pInfo[playerid][pDol], rang, 0, strlen(rang), 35);
	}

    new lica[64];
    cache_get_field_content(0, "Lic",lica, mysql_connect_ID,64);
    sscanf(lica, "p<|>dddd",
	pInfo[playerid][pLic][0],
	pInfo[playerid][pLic][1],
	pInfo[playerid][pLic][2],
	pInfo[playerid][pLic][3]);

	new jobj[15];
    cache_get_field_content(0, "Job",jobj, mysql_connect_ID,20);
    sscanf(jobj, "p<|>dd",
	pInfo[playerid][pJob][0],
	pInfo[playerid][pJob][1]);

	new pos[35];
    cache_get_field_content(0, "Pos",pos, mysql_connect_ID,35);
    sscanf(pos, "p<|>ffff",
	pInfo[playerid][pPos][0],
	pInfo[playerid][pPos][1],
	pInfo[playerid][pPos][2],
	pInfo[playerid][pPos][3]);

	new time[40];
    cache_get_field_content(0, "Time", time, mysql_connect_ID,11);
	sscanf(time, "p<|>dd",
	pInfo[playerid][pTime][0],
	pInfo[playerid][pTime][1]);

    new load[40];
    cache_get_field_content(0, "Chart", load, mysql_connect_ID,11);
	sscanf(load, "p<|>dddd",
	pInfo[playerid][pChart][0],
	pInfo[playerid][pChart][1],
	pInfo[playerid][pChart][2],
	pInfo[playerid][pChart][3]);

	new invent[70];
    cache_get_field_content(0, "pInvSlots", invent, mysql_connect_ID,50);
	sscanf(invent, "p<|>dddddddddd",
	_invPlayer[playerid][invSlot][0],
	_invPlayer[playerid][invSlot][1],
	_invPlayer[playerid][invSlot][2],
	_invPlayer[playerid][invSlot][3],
	_invPlayer[playerid][invSlot][4],
	_invPlayer[playerid][invSlot][5],
	_invPlayer[playerid][invSlot][6],
	_invPlayer[playerid][invSlot][7],
	_invPlayer[playerid][invSlot][8],
	_invPlayer[playerid][invSlot][9]);

	new invent2[70];
	cache_get_field_content(0, "pInvSlotsKol", invent2, mysql_connect_ID,70);
	sscanf(invent2, "p<|>dddddddddd",
	_invPlayer[playerid][invSlotKol][0],
	_invPlayer[playerid][invSlotKol][1],
	_invPlayer[playerid][invSlotKol][2],
	_invPlayer[playerid][invSlotKol][3],
	_invPlayer[playerid][invSlotKol][4],
	_invPlayer[playerid][invSlotKol][5],
	_invPlayer[playerid][invSlotKol][6],
	_invPlayer[playerid][invSlotKol][7],
	_invPlayer[playerid][invSlotKol][8],
	_invPlayer[playerid][invSlotKol][9]);
	
 	for(new z; z != LoadAllCar; z++)
	{
		if(!strcmp(cInfo[z][cOwner],pInfo[playerid][pName],true))
		{
			if( cInfo[ z ][ cTime ] == 1 )
			{
				cInfo[ z ][ cTime ] = 0;
				cInfo[z][cCar] = CreateVehicle(cInfo[z][cModel],cInfo[z][cLpos][0],cInfo[z][cLpos][1],cInfo[z][cLpos][2],cInfo[z][cLpos][3],cInfo[z][cColor][0],cInfo[z][cColor][1],-1);
				new carss = cInfo[z][cCar];
				LoadCarAttach(z, 0);
				milleage[ cInfo[ z ][ cCar ] ] = cInfo[ z ][ cMilleage ];
     			if(cInfo[z][cLock]==1) CarLock(cInfo[z][cCar],1,-1); else CarLock(cInfo[z][cCar],0,-1);
				if(strcmp(cInfo[z][cNumber],"none",true))
				{
					cInfo[z][cText] = CreateDynamic3DTextLabel(cInfo[z][cNumber], 0xFFFFFFFF, 0.0, 0.0, 1.1, 15.0, INVALID_PLAYER_ID, cInfo[z][cCar],1,-1,-1,-1,16.0);
				}
				UpdateVehicleDamageStatus(cInfo[z][cCar], cInfo[z][cDamage][0],cInfo[z][cDamage][1],cInfo[z][cDamage][2],cInfo[z][cDamage][3]);
				if(cInfo[z][cSirena] == 1)
				{
				    if(siren[carss] == 1) return SendClientMessage(cInfo[z][cOwner],-1,"Сирена стоит уже додя");
				    SendClientMessage(cInfo[z][cOwner],-1,"Сирена поставлена");
			    	sirenid[carss] = CreateObject(18646, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
			        AttachObjectToVehicle(sirenid[carss],carss,790.69702148,871.21807861,12.81365680,0.00000000,0.00000000,0.00000000);
			        siren[carss] = 1;
				}
			}
		 	else if( cInfo[ z ][ cTime ] != 0 )
			{
				cInfo[ z ][ cTime ] = 0;
			}
		}
  	}
    
    if( pInfo[ playerid ][ pVip ] > 0 && pInfo[ playerid ][ pVipday ] <= gettime() )
	{
		SCM(playerid,-1,"Срок действия вашего VIP-статуса истёк");
		SCM(playerid,-1,"{AEAEAE}Вы можете продлить его, пополнив свой баланс и выбрав нужный пункт в меню /donate");
		
		pInfo[playerid][pVip]=0;
		pInfo[playerid][pVipday]=0;
		
		mysql_format:str_cmd("UPDATE `" #DB_ACCOUNTS "` SET `Vip` = '0',`Vipday` = '0' WHERE `ID` = %d",pInfo[playerid][pID]);
		mysql_function_query(mysql_connect_ID, str_cmd, false, "", "");
	}
	if(GetPVarInt(playerid,"gLogged")==1) return 1;
	SetPVarInt(playerid,"helpengine",1);
	//for(new i; i != LoadAllOrg; i++) { if(!strcmp(oInfo[i][oOwner],pInfo[playerid][pName],true)) { pInfo[playerid][pNed][1]=oInfo[i][oNed], strmid(nInfo[oInfo[i][oNed]][nOwner], pInfo[playerid][pName], 0, strlen(pInfo[playerid][pName]), 24); break; }}
	
	if(pInfo[playerid][pChart][0]==-1) // ВЫБОР СКИНА ПОСЛЕ UCP
	{
		return SPD(playerid,dRegister,info,"Регистрация","{ffffff}Выберите пол вашего персонажа","М","Ж");
	}
	
	if(pInfo[playerid][pChart][1]<1) // ВЫБОР СКИНА ПОСЛЕ UCP
	{
		SetPVarInt(playerid,"skinchange",1);
		SpawnPlayer(playerid);
		return 1;
	}

    new c,m,s,y,me,d;
	gettime(c,m,s); getdate(y,me,d);
	if(pInfo[playerid][pTime][1]!=d) return SetPVarInt(playerid,"spawns",1), SPD(playerid,dLogin+1,list,"" #C_GRAY "Выберите спавн вашего персонажа","" #C_GRAY "1.{FFFFFF} Место выхода\n" #C_GRAY "2.{FFFFFF} Дом\n" #C_GRAY "3.{FFFFFF} Работа\n" #C_GRAY "4.{FFFFFF} Вокзал","Ок","Закрыть");
	if(pInfo[playerid][pTime][0]>23) pInfo[playerid][pTime][0]=0;
	if(pInfo[playerid][pTime][0]>c) return SetPVarInt(playerid,"spawns",1), SPD(playerid,dLogin+1,list,"" #C_GRAY "Выберите спавн вашего персонажа","" #C_GRAY "1.{FFFFFF} Место выхода\n" #C_GRAY "2.{FFFFFF} Дом\n" #C_GRAY "3.{FFFFFF} Работа\n" #C_GRAY "4.{FFFFFF} Вокзал","Ок","Закрыть");
	if(c<=pInfo[playerid][pTime][0]+2)
	{
		SetPVarInt(playerid,"spawns",2), SetPVarInt(playerid, "gLogged", 1); for(new i; i < 20; i++) SCM(playerid, -1, ""); SCM(playerid, 0xFFFFFFAA, "Мы снова рады видеть вас на сервере"), SpawnPlayer(playerid);
		SendMessageVip(playerid), CheckDelay(playerid);
		mysql_format:str_small( "SELECT * FROM `" #DB_ACCOUNTS "` WHERE `ID` = %d", pInfo[playerid][pID] );
		mysql_tquery( mysql_connect_ID, str_small, "LoadWeapon","i", playerid );
		return 1;
	}
    SetPVarInt(playerid,"spawns",1), SPD(playerid,dLogin+1,list,"" #C_GRAY "Выберите спавн вашего персонажа","" #C_GRAY "1.{FFFFFF} Место выхода\n" #C_GRAY "2.{FFFFFF} Дом\n" #C_GRAY "3.{FFFFFF} Работа\n" #C_GRAY "4.{FFFFFF} Вокзал","Ок","Закрыть");
    
    return printf("[Загружен аккаунт]: %s", pInfo[playerid][pName]);
}

 

 

@DEST на это йже строке
 

Спойлер

C:\Users\user2\Documents\MEGA\Заказчикам\EXCITING\Мод\gamemodes\exproject.pwn(8279) : error 017: undefined symbol "mysql_function_query"
C:\Users\user2\Documents\MEGA\Заказчикам\EXCITING\Мод\gamemodes\exproject.pwn(8279) : warning 213: tag mismatch
C:\Users\user2\Documents\MEGA\Заказчикам\EXCITING\Мод\gamemodes\exproject.pwn(8279) : warning 204: symbol is assigned a value that is never used: "cache"
Pawn compiler 3.2.3664	 	 	Copyright (c) 1997-2006, ITB CompuPhase


1 Error.

 

 

Share this post


Link to post
Share on other sites

UP

Share this post


Link to post
Share on other sites

@mikivtanke, а если так?
 

Спойлер

new string[90], nickname[MAX_PLAYER_NAME];
GetPlayerName(playerid, nickname, sizeof nickname); // получим ник пользователя
// предположим, что password - введенный пользователем пароль в игре для авторизации
format(string, sizeof string, "SELECT * FROM `" #DB_ACCOUNTS "` WHERE nickname = '%s' AND password = MD5('%s) LIMIT 1", nickname, password);
mysql_tquery(mysql_connect_ID, string, "UploadPlayerAccount", "i", playerid); // отправим запрос в базу данных на загрузку аккаунта по нику И паролю

 

 

И в запросе поменяйте название столбца с ником пользователя (вместо nickname) и, соответственно, название столбца с паролем (вместо password).

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.
Sign in to follow this  
Followers 0

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • .037
      By .037
      в чём может быть проблема? Передаю строку через PR_String, и получаю с клиента бред
      CMD:TestData(playerid, params[]){ new msg[] = "Code_Test"; new BitStream:bs = BS_New(); BS_WriteInt8(bs,30); BS_WriteFloat(bs,0.9); BS_WriteFloat(bs,23.4); BS_WriteString(bs, msg, sizeof msg); PR_SendRPC(bs, playerid, 179); BS_Delete(bs); return 1; } [05:57:27] RPC - Длина  30 | 0.900000 | 23.400000 | I*(!@dp
      И всегда текст разный 

      Хотя принимаю всё нормально:

       
      bool CALLBACK Hok_RPC_BYTE(stRakNetHookParams *params) { if (params->packetId == 179) { SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(0, 0xAA, 0), "Кастомный RPC работает!!!"); byte nameLen; float test; float test1; char szPlayerName[100]; params->bitStream->ResetReadPointer(); params->bitStream->Read(nameLen); params->bitStream->Read(test); params->bitStream->Read(test1); params->bitStream->Read(szPlayerName, 100); params->bitStream->ResetReadPointer(); SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(0, 0xAA, 0), "RPC - Длина %d | %f | %f | %s", nameLen, test , test1, szPlayerName); } return true; };