Гость stibs

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

В теме 20 сообщений

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

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

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


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

@stibs А что такое "хэш"?

0

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


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

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

0

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


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

@DEST а как их получить?

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

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


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

@DEST у меня не появляется хэш, в чем может быть промах?

0

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


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

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

0

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


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

@DEST dc_cmd, что дальше?

0

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


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

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

 

1

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


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

@DEST серовно не работает

0

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


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

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

0

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


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

@DEST OnPlayerCommandReceived нету, в OnPlayerCommandPerfomed пробовал

0

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


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

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

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

 

0

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


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

@DEST серовно не работает

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

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


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

@DEST не работает

0

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


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

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

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

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

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


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

Войти

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


Войти

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

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