Sign in to follow this  
Followers 0
Guest stibs

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

20 posts in this topic

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

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

0

Share this post


Link to post
Share on other sites

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

0

Share this post


Link to post
Share on other sites

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

0

Share this post


Link to post
Share on other sites

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

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

 

Edited by Andrey_Akkerman

0

Share this post


Link to post
Share on other sites

@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

Share this post


Link to post
Share on other sites

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

0

Share this post


Link to post
Share on other sites

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

 

1

Share this post


Link to post
Share on other sites

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

0

Share this post


Link to post
Share on other sites

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

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

 

0

Share this post


Link to post
Share on other sites

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

0

Share this post


Link to post
Share on other sites

@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

Share this post


Link to post
Share on other sites

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


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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0

  • Recently Browsing   0 members

    No registered users viewing this page.