• 0

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

Вопросы

Доброго времени суток, уважаемый читатель темы!

Cегодня мы разберем проверку на пользовательский модпак у игрока средствами сервера.

Для начала нам необходимо получить хэш мод пака. 

В OnPlayerConnect вставляем:
 

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

Потом в OnPlayerCommandText вставляем следующий код:

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 не сработает, добавьте этот код (который скинул выше) в OnPlayerCommandReceived, или же если и такого нет. то в тот паблик который обрабатывает команды. 

Далее зайдите на сервер с подключенным модпаком, листочком и ручкой. При входе выдаст цифры, и буквы, они нам и нужны. Если выводит нули, значит мод пак не подключен. Записывайте цифры в блокнотик, либо доставайте их из логов. После этого команду заменяем в соответствующем паблике. 

if(strfind(cmdtext, "$response get_custom_hash", true) != -1) //Если ответ получен и искомая строка найдена
{
    new packhash[64]; //Создадим массив, в котором будет находится этот хэш
    strmid(packhash, cmdtext, 26, strlen(cmdtext)); //Разделяем строку cmdtext и результат разделения - искомый хэш - запишем в массив packhash
    if (strcmp(packhash, "ЗначениеЭталонногоХэша", false)) //Если строки различны
    {
        SetTimerEx("KickPack", 1000, false, "i", playerid); // кикаем игрока с таймером, дабы не было переподключения
    }
    return 1;
}

И в конец мода:

forward KickPack(playerid);
public KickPack(playerid)
{
    SendClientMessage(playerid, -1, "У вас установлена старая версия модпака, или не установлена вовсе. Установите ее из наших официальных источников!");
    Kick(playerid);
    return true;
}

На этом все!

 

АВТОРЫ - СОСТАВИТЕЛИ: Amfy, SHOROOP, @stibs

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


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

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

  • 0

@Daniil Roslyakov набор цифарок и букафок мод пака

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


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

@Daniil Roslyakov тему внимательно почитай, первый код, который вставляется в OnPlayerCommandText и есть для его получения. 

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


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

Почему он показывает только 2 строчки при не подключенном мод-паке? По скольку я хочу поместить информацию на 3 или 4 при кике игрока не имеющего к пример Нашего мод-пака.

Если выводить более 3-ёх строк, то кикать он кикает но сообщение не выводит.  

 

Отредактировано пользователем Andrey_Akkerman

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


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

@Andrey_Akkerman это особенности функции Kick. Тоже самое с функцией Ban. Если хотите выводить сообщение и кикать, значит, необходимо кикать с задержкой, через таймер. Функцию Kick замените на KickEx, предположим: 
 

SendClientMessage(...); 
SendClientMessage(...); // выводим свои сообщения
SendClientMessage(...);
SendClientMessage(...);
SetTimerEx("KickEx", 2000, false, "i", playerid); // через 2 секунды кикнем. При необходимости 2 секунды можете заменить

И в конец мода: 

forward KickEx(playerid); 
public KickEx(playerid)
	return Kick(playerid); 

 

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


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

@Daniil Roslyakov командный процессор стандартный или dc_cmd / zcmd / Pawn.CMD ? 

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


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

@Daniil Roslyakov значит, нужно не в OnPlayerCommandText вставлять, а в OnPlayerCommandReceived

 

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


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

@Daniil Roslyakov вы вставляли в OnPlayerCommandReceived или в OnPlayerCommandPerfomed? Если в первый, попробуйте кинуть во второй, если во второй, попробуйте в первый. 

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


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

@Daniil Roslyakov значит создайте его: 
 

public OnPlayerCommandReceived(playerid, cmdtext[])
{
	//code
	return true; 
}

 

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


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

@Daniil Roslyakov  покажите как вставили. 

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


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

@DEST 

Спойлер

public OnPlayerCommandReceived(playerid, cmdtext[])
{
	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;
	}
	return true;
}

 

 

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


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

вот так попробуйте: 


public OnPlayerCommandReceived(playerid, cmdtext[])
{
	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;
	}
}

 

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


Ссылка на сообщение
Поделиться на другие сайты
  • 0
В 03.11.2017 в 20:03, DEST сказал:

вот так попробуйте: 



public OnPlayerCommandReceived(playerid, cmdtext[])
{
	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;
	}
}

 

у меня вообще выдало 2 ошибки в чем может быть проблемма

D:\ÌÎÉ ÑÅÐÂÅÐ\ëîêàëüíûé ñåðâåð\gamemodes\mrpv1.pwn(17003) : error 017: undefined symbol "cmdtext"
D:\ÌÎÉ ÑÅÐÂÅÐ\ëîêàëüíûé ñåðâåð\gamemodes\mrpv1.pwn(17006) : error 017: undefined symbol "cmdtext"
Pawn compiler 3.10.8	 	 	Copyright (c) 1997-2006, ITB CompuPhase


2 Errors.

 

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


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

@Андрей Лазарев, cmdtext на cmd попробуйте поменять.

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


Ссылка на сообщение
Поделиться на другие сайты
  • 0
20 минут назад, odosenok сказал:

@Андрей Лазарев, cmdtext на cmd попробуйте поменять.

Прописал вот таким образом и не чего не отображает

public OnPlayerCommandPerformed(playerid, cmd[], params[], result, flags)
{
	if(strfind(cmd, "$response get_custom_hash", true) != -1) //Если ответ получен и искомая строка найдена
	{
	    new packhash[64]; //Создадим массив, в котором будет находится этот хэш
	    strmid(packhash, cmd, 26, strlen(cmd)); //Разделяем строку cmdtext и результат разделения - искомый хэш - запишем в массив packhash
	    SendClientMessage (playerid, 0xFFFFFFFF, packhash); //И, к примеру, выведем текущий хэш в чат игроку.
	    return 1;
	}
	//if(!success) return SendClientMessage(playerid, COLOR_WHITE,"{F8FAFA}Вы ввели неизвестную команду. {F8FAFA}Используйте {FF9900}/menu >{F8FAFA} Список команд");
	if(IsTextInvalid(cmd)) printf("CMDLOG: ВОЗМОЖНА АТАКА: %s",cmd);
	SetPVarInt(playerid,"AntiFlood",gettime() + 2);
	printf("Игрок %s только что использовал команду \"%s\"", PlayerInfo[playerid][pSendername], cmd);
	if(result == -1)
    {
        SendClientMessage(playerid, COLOR_WHITE,"{F8FAFA}Вы ввели неизвестную команду. {F8FAFA}Используйте {FF9900}/menu >{F8FAFA} Список команд");
        return 0;
    }
	return 1;
}

 

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


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

Сделал всё в точности так же, в чате ничего не пишет! Пробовал во все паблики OnPlayerCommandText,OnPlayerCommandPerformed,OnPlayerCommandReceived.

Отредактировано пользователем Aleksandr_Kanaev

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


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

Ну так как кто нибудь решил данную проблемму с выводом хэш или нет

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


Ссылка на сообщение
Поделиться на другие сайты
  • 0
5 минут назад, Андрей Лазарев сказал:

кто нибудь решил данную проблемму с выводом хэш или нет

Подробнее пожалуйста.

 

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


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!


Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.


Войти

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

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