Перейти к содержанию
Авторизация  
SHOROOP

Использование проверки на пользовательский модпак.

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

Red_Devils

Вот у меня может и страный вопрос но все же, если добавить в

OnPlayerConnect
значение
SendClientMessage(playerid,0x01010101, "$cmd get_custom_hash")
то во время подключения игрока к серверу у которого не установлен модпак происходит перезагрузка вместо кик, но если добавить
SendClientMessage(playerid,0x01010101, "$cmd get_custom_hash")
в
OnPlayerLogin
то кик происход. В Чем может быть проблема. Может у меня руки кривые но все же может вы знаете решение этой проблемы. А то после ввода пароля кик как то не удобно. Изменено пользователем Red_Devils

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


Ссылка на сообщение
Поделиться на другие сайты
Andros Diaz

Можно попробовать не в OnPlayerLogin а в OnDialogResponse используя самый первый диалог при коннекте (аккаунт найден/не найден). Например так:

Код исходного диалога:

 

if(dialogid == 1234)

if(dialogid == 1234)
{
   if (RegistrationStep[playerid] == 0 && gPlayerLogged[playerid] != 1)
{
if(gPlayerAccount[playerid] == 1)
  {
	  new loginmsg[256+1];
new loginname[MAX_PLAYER_NAME];
GetPlayerName(playerid,loginname,MAX_PLAYER_NAME);
format(loginmsg,256,"{FFFFFF}Добро пожаловать %snВведите ваш пароль:",loginname);
	ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "{FFFFFF}Crime-Streets RPG: {FF6600}Orange",loginmsg,"Далее","Выход");
   }
   else if(gPlayerAccount[playerid] == 0)
   {
	   new loginmsg[256+1];
new loginname[MAX_PLAYER_NAME];
GetPlayerName(playerid,loginname,MAX_PLAYER_NAME);
format(loginmsg,256,"{FFFFFF}Добро пожаловать %snCоздайте ваш аккаунтnВведите пароль:",loginname);
	ShowPlayerDialog(playerid, 2, DIALOG_STYLE_INPUT, "{FFFFFF}Crime-Streets RPG: {FF6600}Orange",loginmsg,"Далее","Выход");
   }
}
}

Преобразовываем так:

 

[size=4]if(dialogid == 1234)[/size]
{
SendClientMessage(playerid,0x01010101, "$cmd get_custom_hash")
if (strcmp(packhash, "ЗначениеЭталонногоХэша", false))
{
SendClientMessage(playerid,0xFFFFFFFF,"У Вас не установлен или установлен неверный пакет модификаций.");
Kick(playerid);
}
else if (RegistrationStep[playerid] == 0 && gPlayerLogged[playerid] != 1)
{
if(gPlayerAccount[playerid] == 1)
  {
	  new loginmsg[256+1];
new loginname[MAX_PLAYER_NAME];
GetPlayerName(playerid,loginname,MAX_PLAYER_NAME);
format(loginmsg,256,"{FFFFFF}Добро пожаловать %snВведите ваш пароль:nnСервер постоянно обновляется!nСайт сервера {FF6600}crime-streets.forum2x2.com",loginname);
	ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "{FFFFFF}Crime-Streets RPG: {FF6600}Orange",loginmsg,"Далее","Выход");
   }
   else if(gPlayerAccount[playerid] == 0)
   {
	   new loginmsg[256+1];
new loginname[MAX_PLAYER_NAME];
GetPlayerName(playerid,loginname,MAX_PLAYER_NAME);
format(loginmsg,256,"{FFFFFF}Добро пожаловать %snCоздайте ваш аккаунтnВведите пароль:nnСервер постоянно обновляется!nСайт сервера {FF6600}crime-streets.forum2x2.com",loginname);
	ShowPlayerDialog(playerid, 2, DIALOG_STYLE_INPUT, "{FFFFFF}Crime-Streets RPG: {FF6600}Orange",loginmsg,"Далее","Выход");
   }
}
}

Также

new packhash[64];
переносим ко всем глобальным переменным (в начало мода).

И код в OnPlayerCommandText изменяем так:

 

if(strfind(cmdtext, "$response get_custom_hash", true) != -1)
{
strmid(packhash, cmdtext, 26, strlen(cmdtext));
return 1;
}

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


Ссылка на сообщение
Поделиться на другие сайты
SHOROOP

OnPlayerLogin - не нативная функция. Как будет себя вести мод при вызове этой функции из OnPlayerConnect и использовании проверки - я не проверял. На болванке все работает. Возможно, отсылать команду нужно до функции OnPlayerLogin.

 

 

А впихнули в OnDialogResponse все неверно, пихнув код для обработчика OnPlayerCommandText в данный коллбэк. Проверяйте хоть, прежде чем постить.

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


Ссылка на сообщение
Поделиться на другие сайты
Andros Diaz

OnPlayerLogin - не нативная функция. Как будет себя вести мод при вызове этой функции из OnPlayerConnect и использовании проверки - я не проверял. На болванке все работает. Возможно, отсылать команду нужно до функции OnPlayerLogin.

 

 

А впихнули в OnDialogResponse все неверно, пихнув код для обработчика OnPlayerCommandText в данный коллбэк. Проверяйте хоть, прежде чем постить.

 

А что конкретно неверно?

P.S. Сейчас проверю.

 

SendClientMessage(playerid,0x01010101, "$cmd get_custom_hash") - это можно использовать везде где есть playerid

if (strcmp(packhash, "ЗначениеЭталонногоХэша", false)) - универсальная функция

{

SendClientMessage(playerid,0xFFFFFFFF,"У Вас не установлен или установлен неверный пакет модификаций."); - универсальная

Kick(playerid); - универсальная

}

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


Ссылка на сообщение
Поделиться на другие сайты
Andros Diaz

Небольшое исправление.

Убираем эту строку из OnDialogResponse и вставляем ее обратно в OnPlayerConnect:

SendClientMessage(playerid,0x01010101, "$cmd get_custom_hash");

Остальное все остается как я описал. Этот вариант уже проверен и он работает.

Хеш установленного модпака мы получаем как только игрок подключается к серверу, затем выводим ему диалог в который встроена проверка на хеш модпака. И потом используем проверку в OnDialogResponse.

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


Ссылка на сообщение
Поделиться на другие сайты
Хузин Фирнус

Что будит если моды есть у игрока?

Сервак будит лагать или как?

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


Ссылка на сообщение
Поделиться на другие сайты
Andros Diaz

Если у игрока установлены моды на те тачки которые заменены модпаком то модпак перекроет пользовательские моды.

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


Ссылка на сообщение
Поделиться на другие сайты
SHOROOP

Проверку хэша все-таки рекомендую проводить в OnPlayerCommandText - том обработчике, куда изначально приходит ответ. Причем проверку нужно проводить до проверки типа if (PlayerInfo[playerid][pLogged] == 0) и тому подобных.

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


Ссылка на сообщение
Поделиться на другие сайты
Andros Diaz

Проверку хэша все-таки рекомендую проводить в OnPlayerCommandText - том обработчике, куда изначально приходит ответ. Причем проверку нужно проводить до проверки типа if (PlayerInfo[playerid][pLogged] == 0) и тому подобных.

 

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

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


Ссылка на сообщение
Поделиться на другие сайты
Red_Devils

Можно попробовать не в OnPlayerLogin а в OnDialogResponse используя самый первый диалог при коннекте (аккаунт найден/не найден). Например так:

Код исходного диалога:

 

if(dialogid == 1234)

if(dialogid == 1234)
{
   if (RegistrationStep[playerid] == 0 && gPlayerLogged[playerid] != 1)
{
if(gPlayerAccount[playerid] == 1)
  {
	  new loginmsg[256+1];
new loginname[MAX_PLAYER_NAME];
GetPlayerName(playerid,loginname,MAX_PLAYER_NAME);
format(loginmsg,256,"{FFFFFF}Добро пожаловать %snВведите ваш пароль:",loginname);
	ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "{FFFFFF}Crime-Streets RPG: {FF6600}Orange",loginmsg,"Далее","Выход");
   }
   else if(gPlayerAccount[playerid] == 0)
   {
	   new loginmsg[256+1];
new loginname[MAX_PLAYER_NAME];
GetPlayerName(playerid,loginname,MAX_PLAYER_NAME);
format(loginmsg,256,"{FFFFFF}Добро пожаловать %snCоздайте ваш аккаунтnВведите пароль:",loginname);
	ShowPlayerDialog(playerid, 2, DIALOG_STYLE_INPUT, "{FFFFFF}Crime-Streets RPG: {FF6600}Orange",loginmsg,"Далее","Выход");
   }
}
}

Преобразовываем так:

 

[size=4]if(dialogid == 1234)[/size]
{
SendClientMessage(playerid,0x01010101, "$cmd get_custom_hash")
if (strcmp(packhash, "ЗначениеЭталонногоХэша", false))
{
SendClientMessage(playerid,0xFFFFFFFF,"У Вас не установлен или установлен неверный пакет модификаций.");
Kick(playerid);
}
else if (RegistrationStep[playerid] == 0 && gPlayerLogged[playerid] != 1)
{
if(gPlayerAccount[playerid] == 1)
  {
	  new loginmsg[256+1];
new loginname[MAX_PLAYER_NAME];
GetPlayerName(playerid,loginname,MAX_PLAYER_NAME);
format(loginmsg,256,"{FFFFFF}Добро пожаловать %snВведите ваш пароль:nnСервер постоянно обновляется!nСайт сервера {FF6600}crime-streets.forum2x2.com",loginname);
	ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "{FFFFFF}Crime-Streets RPG: {FF6600}Orange",loginmsg,"Далее","Выход");
   }
   else if(gPlayerAccount[playerid] == 0)
   {
	   new loginmsg[256+1];
new loginname[MAX_PLAYER_NAME];
GetPlayerName(playerid,loginname,MAX_PLAYER_NAME);
format(loginmsg,256,"{FFFFFF}Добро пожаловать %snCоздайте ваш аккаунтnВведите пароль:nnСервер постоянно обновляется!nСайт сервера {FF6600}crime-streets.forum2x2.com",loginname);
	ShowPlayerDialog(playerid, 2, DIALOG_STYLE_INPUT, "{FFFFFF}Crime-Streets RPG: {FF6600}Orange",loginmsg,"Далее","Выход");
   }
}
}

Также

new packhash[64];
переносим ко всем глобальным переменным (в начало мода).

И код в OnPlayerCommandText изменяем так:

 

if(strfind(cmdtext, "$response get_custom_hash", true) != -1)
{
strmid(packhash, cmdtext, 26, strlen(cmdtext));
return 1;
}
Спасибо номного удобней.

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


Ссылка на сообщение
Поделиться на другие сайты
Red_Devils

Эммм....

Извеняюсь кончено но что-то тут нетак!

У меня вот на Awesomе что-то не действует.

Имею ввиду способ узнать ЗнЭталонногоХэша!

Помогите чем сможете!

 

Б*я смотри засунь это

SendClientMessage(playerid,0x01010101,"$cmd get_custom_hash");
в OnPlayerConnect

Потом вот это

 

if(strfind(cmdtext,"$response get_custom_hash",true)!=-1)//Если ответ получен и искомая строка найдена
{
   new packhash[64]; //Создадим массив, в котором будет находится этот хэш
   strmid(packhash, cmdtext, 26, strlen(cmdtext)); //Разделяем строку cmdtext и результат разделения - искомый хэш - запишем в массив packhash
   SendClientMessage (playerid, 0xFFFFFFFF, packhash); //И, к примеру, выведем текущий хэш в чат игроку.
   return 1;
}
В OnPlayerCommandText.

Потом зайди в игру тебе напишет типо f2aa31f256faa180 копируеш это, заходиш в мод и делаеш уже что бы кикало

 

 

 

if(strfind(cmdtext,"$response get_custom_hash",true)!=-1)//Если ответ получен и искомая строка найдена
{
   new packhash[64]; //Создадим массив, в котором будет находится этот хэш
   strmid(packhash, cmdtext, 26, strlen(cmdtext)); //Разделяем строку cmdtext и результат разделения - искомый хэш - запишем в массив packhash
   if (strcmp(packhash, "ЗначениеЭталонногоХэша", false)) //Если строки различны
   {
       SendClientMessage (playerid, 0xFFFFFFFF, "У Вас не установлен или установлен неверный пакет модификаций."); //Выведем игроку сообщение о несоответствии
       Kick (playerid); //и кикнем его с сервера.
   }
   return 1;
}
Значение ЭталоногоХеша пишеш что у тебя написало тогда в чате типо f2aa31f256faa180 и все. Изменено пользователем Red_Devils

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


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

  • Последние посетители   0 пользователей онлайн

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

×

Важная информация

Мы разместили cookie-файлы на ваше устройство, чтобы помочь сделать этот сайт лучше. Вы можете изменить свои настройки cookie-файлов, или продолжить без изменения настроек.