Вопросы

Всем привет, такая ситуация как сделать так чтобы админ-пароль выдавался в базе данных моя система админки устроена так "Когда вы выдаете игроку админку пароль выдаётся рандомный даже когда вы его допустим повысите пароль выдаётся другой, даже когда вы выдаете один и тот же лвл пароль всё равно выдаётся другой + чтобы в админку нужно было авторизовываться заново" В общем как сделать так чтобы пароль выдавался(При выдаче админки) и изменялся (При изменении лвла админки)?

 

CMD:madmin(playerid, params[])
{
    new randPassword[6];
	randPassword[0] = getLowerLatinLetter();
	randPassword[1] = getLowerLatinLetter();
	randPassword[2] = getDigit();
	randPassword[3] = getDigit();
	randPassword[4] = getDigit();
	randPassword[5] = getDigit();
    new string[256];
   	if(PlayerLogged[playerid] == 0) return 1;
   	if(PlayerInfo[playerid][pAdmin] < 10 || AdminLogged[playerid] == false) return 1;
	new admin[MAX_PLAYER_NAME];
	GetPlayerName(playerid, admin, sizeof(admin));
	{
        if(sscanf(params, "ud", params[0],params[1])) return SendMes(playerid, COLOR_WHITE, "Ââåäèòå: /madmin [playerid] [level(1-7)]");
   	    if(params[1] > 10 || params[1] < 0) return SendClientMessage(playerid, COLOR_GREY, "Óðîâåíü àäìèíêè äîëæåí áûòü îò 1 äî 10.");
   	    if(params[1] == 0) return PlayerInfo[params[0]][pAdmin] = params[1],AdminLogged[params[0]] = false,SendMes(playerid,0x3bd1d1ff, " Âû íàçíà÷èëè %s àäìèíèñòðàòîðîì óðîâíÿ {FF0000}0.", sendername(params[0])),SendMes(params[0],0x3bd1d1ff, " Âû áûëè íàçíà÷åíû àäìèíèñòðàòîðîì óðîâíÿ {FF0000}0");
        if(params[0] == playerid) return SendClientMessage(playerid, COLOR_GREY, "Âû íå ìîæåòå èñïîëüçîâàòü ýòó êîìàíäó íà ñåáå.");
		format(string, 128, "%s íàçíà÷èë íîâîãî àäìèíèñòðàòîðà %s", PlayerInfo[playerid][pSendername], sendername(params[0]));
		SendAdminMessage(COLOR_YELLOW, string);
       	format(totalstring, 100, " Âû íàçíà÷èëè %s àäìèíèñòðàòîðîì óðîâíÿ {FF0000}%d.",sendername(params[0]), params[1]);
		SendClientMessage(playerid,0x3BD1D1FF, totalstring);
		format(totalstring, 100, " Âû áûëè íàçíà÷åíû àäìèíèñòðàòîðîì óðîâíÿ {FF0000}%d",params[1]);
		SendClientMessage(params[0],0x3BD1D1FF, totalstring);
		PlayerInfo[params[0]][pAdmin] = params[1];
		SendMes(params[0], 0xF272DDFF, " Âàø ïàðîëü ê àäìèí.äîñòóïó: {FFFFFF}%s",randPassword);
	}
	return 1;
}

 

Поделиться сообщением


Ссылка на сообщение

22 ответа на этот вопрос

  • 1

Хм, видимо strcat ничего не записал в переменную, возможно из-за того, что она изначально пустая. 

Попробуйте заменить строку со strcat в команде на такую строчку

format(PlayerInfo[params[0]][pDostup], 24"%s", randPassword);

Это, наверное, будет более правильным решением, так как пароль должен перезаписаться, а не дозаписаться.

format, насколько я помню, как раз очищает строчку перед записью в нее. 

Поделиться сообщением


Ссылка на сообщение
  • 0

@R0m4ik, я правильно понимаю, что суть вопроса кроется в двух проблемах?

  1. При изменении прав администратора новый пароль администратора не сохраняется в базе данных.
  2. Администратор не может авторизоваться с тем паролем, который ему выдала система?

Поделиться сообщением


Ссылка на сообщение
  • 0

@Снеговик Про 2 не совсем когда выдаю повышаю админку 0 реакций я как и был авторизован в админке так и  остаюсь.

а 1 да пароль как и не изменяется так и не выдаётся 

Поделиться сообщением


Ссылка на сообщение
  • 0

@R0m4ik, покажите код, связанный с авторизацией администратора.

Поделиться сообщением


Ссылка на сообщение
  • 0

@Снеговик 

CMD:alogin(playerid, params[])
{
	if(PlayerLogged[playerid] == 0) return 1;
    if(PlayerInfo[playerid][pAdmin] < 1) return 1;//AdminLogged[playerid] = true
    if(AdminLogged[playerid] == true) return SendClientMessage(playerid, COLOR_GREY, "Âû óæå àâòîðèçîâàíû!");
	format(totalstring, 256, "{ffffff}Ââåäèòå Âàø ïàðîëü îò àäìèí.äîñòóïà",PlayerInfo[playerid][pSendername],PlayerInfo[playerid][pAdmin]);
	ShowPlayerDialog(playerid, D_ALOGIN, 1, "{ffffff}Àâòîðèçàöèÿ", totalstring, "Äàëåå",">>>");
	return true;
}

		case D_ALOGIN:
	    {
	        if(response)
			{
	        	if(!strlen(inputtext))
				{
                    format(totalstring, 256, "{ffffff}Ââåäèòå Âàø ïàðîëü îò àäìèí.äîñòóïà",PlayerInfo[playerid][pSendername],PlayerInfo[playerid][pAdmin]);
					ShowPlayerDialog(playerid, D_ALOGIN, 1, "{ffffff}Àâòîðèçàöèÿ", totalstring, "Äàëåå",">>>");
				}
               	else if(!strcmp(inputtext, GetAccount(PlayerInfo[playerid][pSendername], "dostup"), true))
		  		{
		  			AdminLogged[playerid] = true;
					SendClientMessage(playerid, COLOR_GREY, " Âû àâòîðèçîâàëèñü!");
		  			return 1;
		  		}
                else
				{
					SendClientMessage(playerid,COLOR_LIGHTRED, " Âû ââåëè íåâåðíûé ïàðîëü!");
					//Kick(playerid);
					//format(string, 128, " %s ?? ?????? ??????????? ? ?????.?????? ( IP: 255.255.255.255 )",PlayerInfo[playerid][pSendername]);
					//SendAdminMessage(0xFF4FD9FF, string);

				}
			}
		}

 

Поделиться сообщением


Ссылка на сообщение
  • 0

@R0m4ik, у вас вообще в базе данных есть поле для хранения пароля администратора?

Поделиться сообщением


Ссылка на сообщение
  • 0

@Снеговик Есть только вот эта строка которая отвечает за пароль раньше был пароль админки по умолчанию сейчас временно выдаю вручную.

73    dostup     varchar(11)     utf8_bin      Нет    Нет   Изменить Изменить Удалить Удалить Показать больше операций Ещё

Поделиться сообщением


Ссылка на сообщение
  • 0

@Cawfee Ответьте!

Заметка от DEST , создано

Не нужно упоминать конкретного участника форума, это не совсем вежливо.
Если хотите напомнить о своей теме, просто отправьте сообщение с текстом "Up". Это поднимет вашу тему выше, и участники форума смогут вновь ее заметить. По правилам форума такое сообщение разрешено оставлять не чаще, чем раз в 24 часа.

Поделиться сообщением


Ссылка на сообщение
  • 0

в команду madmin перед этой строкой

В 05.01.2022 в 18:00, R0m4ik сказал:

SendMes(params[0], 0xF272DDFF, " Âàø ïàðîëü ê àäìèí.äîñòóïó: {FFFFFF}%s",randPassword);

добавить

strcat(PlayerInfo[params[0]][pDostup], randPassword);

это запишет сгенерированный пароль в параметры игрока.

Сейчас в этой команде просто выводится пароль в чат, но никуда не записывается.

После перезахода он должен будет сохраниться в базу данных, проверьте это. 

И, да, когда копируете текст из редактора PAWNO, нужно делать это на русской раскладке, чтобы квакозябриков не было, читать неудобно. 

Поделиться сообщением


Ссылка на сообщение
  • 0

C:\Users\Roma\Desktop\REVENT RP BY SOSED\gamemodes\justice.pwn(68991) : warning 217: loose indentation
C:\Users\Roma\Desktop\REVENT RP BY SOSED\gamemodes\justice.pwn(68991) : error 029: invalid expression, assumed zero
C:\Users\Roma\Desktop\REVENT RP BY SOSED\gamemodes\justice.pwn(68992) : warning 217: loose indentation

Поделиться сообщением


Ссылка на сообщение
  • 0

@R0m4ik когда прикладываете ошибки, выкладывайте и код, который к ним относится, с пометкой строк, на которые ошибка. 

В данном случае необходимо приложить строчки 68991 и 68992, а также 10 строк сверху них и 10 строк снизу. 

Поделиться сообщением


Ссылка на сообщение
  • 0
        if(params[1] > 10 || params[1] < 0) return SendClientMessage(playerid, COLOR_GREY, "Уровень админки должен быть от 1 до 10.");
        if(params[1] == 0) return PlayerInfo[params[0]][pAdmin] = params[1],AdminLogged[params[0]] = false,SendMes(playerid,0x3bd1d1ff, " Вы назначили %s администратором уровня {FF0000}0.", sendername(params[0])),SendMes(params[0],0x3bd1d1ff, " Вы были назначены администратором уровня {FF0000}0");
        if(params[0] == playerid) return SendClientMessage(playerid, COLOR_GREY, "Вы не можете использовать эту команду на себе.");
        format(string, 128, "%s назначил нового администратора %s", PlayerInfo[playerid][pSendername], sendername(params[0]));
        SendAdminMessage(COLOR_YELLOW, string);
        format(totalstring, 100, " Вы назначили %s администратором уровня {FF0000}%d.",sendername(params[0]), params[1]);
        SendClientMessage(playerid,0x3BD1D1FF, totalstring);
        format(totalstring, 100, " Вы были назначены администратором уровня {FF0000}%d",params[1]);
        SendClientMessage(params[0],0x3BD1D1FF, totalstring);
        PlayerInfo[params[0]][pAdmin] = params[1];
        strcat(PlayerInfo[params[0]][pDostup], randPassword);//Ошибка/варнинг
        SendMes(params[0], 0xF272DDFF, " Ваш пароль к админ.доступу: {FFFFFF}%s",randPassword);//варнинг

 

Поделиться сообщением


Ссылка на сообщение
  • 0

@R0m4ik а pDostup есть еще где-то в моде? 

Поделиться сообщением


Ссылка на сообщение
  • 0

Да есть

в pInfo

 

pDostup[24],

 

в LoadAccount

 

PlayerInfo[playerid][pDostup],

 

в SaveAccount

 

format(src,sizeof(src),"dostup='%s',",PlayerInfo[playerid][pDostup]);

strcat(query,src,sizeof(query));

 

и в Стоке ResetStats

 

PlayerInfo[playerid][pDostup] = EOS

 

И я походу уже догадался в чём проблема случайно не в playerid перед Playerinfo

Поделиться сообщением


Ссылка на сообщение
  • 0

@R0m4ik скиньте полностью команду

Поделиться сообщением


Ссылка на сообщение
  • 0
CMD:madmin(playerid, params[])
{
    new randPassword[7];
    randPassword[0] = getLowerLatinLetter();
    randPassword[1] = getLowerLatinLetter();
    randPassword[2] = getDigit();
    randPassword[3] = getDigit();
    randPassword[4] = getDigit();
    randPassword[5] = getDigit();
    new string[256];
    if(PlayerLogged[playerid] == 0) return 1;
    if(PlayerInfo[playerid][pAdmin] < 10 || AdminLogged[playerid] == false) return 1;
    new admin[MAX_PLAYER_NAME];
    GetPlayerName(playerid, admin, sizeof(admin));
    {
        if(sscanf(params, "ud", params[0],params[1])) return SendMes(playerid, COLOR_WHITE, "Введите: /madmin [playerid] [level(1-7)]");
        if(params[1] > 10 || params[1] < 0) return SendClientMessage(playerid, COLOR_GREY, "Уровень админки должен быть от 1 до 10.");
        if(params[1] == 0) return PlayerInfo[params[0]][pAdmin] = params[1],AdminLogged[params[0]] = false,SendMes(playerid,0x3bd1d1ff, " Вы назначили %s администратором уровня {FF0000}0.", sendername(params[0])),SendMes(params[0],0x3bd1d1ff, " Вы были назначены администратором уровня {FF0000}0");
        if(params[0] == playerid) return SendClientMessage(playerid, COLOR_GREY, "Вы не можете использовать эту команду на себе.");
        format(string, 128, "%s назначил нового администратора %s", PlayerInfo[playerid][pSendername], sendername(params[0]));
        SendAdminMessage(COLOR_YELLOW, string);
        format(totalstring, 100, " Вы назначили %s администратором уровня {FF0000}%d.",sendername(params[0]), params[1]);
        SendClientMessage(playerid,0x3BD1D1FF, totalstring);
        format(totalstring, 100, " Вы были назначены администратором уровня {FF0000}%d",params[1]);
        SendClientMessage(params[0],0x3BD1D1FF, totalstring);
        PlayerInfo[params[0]][pAdmin] = params[1];
    `   strcat(PlayerInfo[params[0]][pDostup], randPassword);
        SendMes(params[0], 0xF272DDFF, " Ваш пароль к админ.доступу: {FFFFFF}%s",randPassword);
    }
    return 1;
}

 

Поделиться сообщением


Ссылка на сообщение
  • 0
6 минут назад, R0m4ik сказал:

   `   strcat(P

внимательней копируйте, у вас тут кавычка затесалась `, удалите ее и будет счастье :) 

Поделиться сообщением


Ссылка на сообщение
  • 0

Я думал это пятнышко на мониторе какое-то спасибо!

Поделиться сообщением


Ссылка на сообщение
  • 0

К сожалению способ который вы мне скинули не сработал может ли это быть связано с тем что 1.Это готовый мод с интернета 2.Это мод 2013-2015 года 3.Версия MySQL R5

Поделиться сообщением


Ссылка на сообщение
  • 0

С шагом написания кода программы мы справились, теперь переходим ко второму, почти всегда неминуемому - отладке написанной программы. 

Отлаживать будем с помощью printf, то есть будем печатать в консоль сервера интересующие нас значения.

 

Перед вот этими двумя строчками 

1 час назад, R0m4ik сказал:

format(src,sizeof(src),"dostup='%s',",PlayerInfo[playerid][pDostup]);

strcat(query,src,sizeof(query));

Которые в SaveAccount, добавим отладочный вывод: 

printf("[DEBUG] PlayerInfo[%d][pDostup] = %s", playerid, PlayerInfo[playerid][pDostup]);

После запустите мод, выдайте админку, выйдите с сервера, сервер не выключайте, посмотрите в консоль и найдите эту строчку там, скиньте сюда. 

Поделиться сообщением


Ссылка на сообщение
  • 0

[DEBUG] PlayerInfo[0][pDostup] =

Поделиться сообщением


Ссылка на сообщение
  • 0

Отлично всё работает!

Поделиться сообщением


Ссылка на сообщение
Гость
Эта тема закрыта для публикации ответов.
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Похожий контент

    • Mister Odin
      От Mister Odin
       
      new
       g_teleport_list[39][E_TELEPORT_LIST] = {  {"Спавн пгт.Батырево", 1802.3612, 2508.4824, 15.8887},  {"Спавн г.Арзамас", -113.5887, 977.7222, 12.0346},     {"Спавн г.Южный", 2744.2770, -2446.7246, 21.8988},     {"Центральный банк", 1852.020385,2040.791381,15.892713},  {"Рублёвка", -837.7783, 888.6161, 12.7232},  {"Казино", 1332.4252, 2358.7014, 17.6641},  {"Битва за контейнеры", 614.5167, 1722.3566, 12.0709},  {"Автосалон низкого класса", 2493.9616, -722.9544, 12.3315},  {"Автосалон среднего класса", 1407.7449, 455.4801, 13.1630},  {"Автосалон высокого класса", -14.0637, 2614.5664, 10.9892},   {"Мотосалон Harley Davidson", 785.720153, 750.465087, 12.000024},  {"Автошкола", 1909.174438,2227.679687,15.708162},  {"Военкомат", 1916.778564,2302.411376,15.574637},  {"Правительство области", -139.140975,593.789611,12.145712},  {"Отдел полиции №1 (ГИБДД)", 1906.805786,-2234.382812,11.257631},  {"Отдел полиции №2 (УМВД)", 2581.309326,-2416.139892,21.960090},  {"Отдел ФСБ", 1823.904663,2095.636718,15.848405},  {"Городская больница г.Арзамас", -285.797210,581.851562,12.120290},   {"СМИ", -317.708038,821.221679,13.051450},  {"Воинская часть", 1703.197265,1678.025878,15.279437},  {"Арзамасская ОПГ", 438.705322,1046.505126,12.002637},  {"Батыревская ОПГ", 1941.203857,2161.006591,15.705187},  {"Лыткаринская ОПГ", -2346.002441,75.257041,21.002962},  {"Шахта", 2381.5727, 1726.4451, -2.1506},  {"Завод", -1062.6697, 2204.1894, 38.0964},  {"Инкосация", 1864.1374, 2011.7136, 15.8546},  {"Транспортная Компания", 2362.1115, 1972.5627, 15.5530},  {"База механиков", 1840.918090,-118.025146,15.695312},  {"Курьерская служба доставки", 2764.509765,-2396.882568,21.890625},  {"Аренда автобуса(Южный)", 2771.041992,-2454.780761,21.845964},  {"Аренда автобуса(Арзамас)", -127.487670,943.652648,12.142824},   {"Аренда автобуса(Батырево)", 1798.986328,2529.591552,15.664262},  {"Гоночная трасса", -1568.7784, 1611.8305, 36.3971},  {"Дом на горе", -789.5397, -456.7479, 741.1422},  {"СТО и тюнинг-ателье", 1856.1375, -122.3266, 15.6888},  {"Аренда транспорта пгт.Батырево", 1763.641723,2255.673339,15.865348},  {"Аренда транспорта г.Арзамас", -36.923530,1360.673583,12.002090},  {"Аренда транспорта г.Южный", 1966.599975,-2603.943603,10.820312},  {"Тайный интерьер в Лыткарино", -2424.5818, 2846.3291, 40.7908} };