shape1
shape2
shape3
shape4
shape7
shape8

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


SHOROOP

Освоившийся
Пользователь
30.01.2014
58
56
0
30
Скриптер
Доброго времени суток, господа.

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

Как писал на форумах самп.ком DimonML, существуют несколько специальных команд, отсылаемых сервером клиенту. Одна из них позволяет получить хэш установленного модпака.
Для того, чтобы отослать эту команду, необходимо использовать следующее выражение:

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

В принципе, отослать его можно где угодно (естественно, в том коллбэке, где используется playerid), но я рекомендую отправлять непосредственно в OnPlayerConnect. Однако возможны случаи, когда клиент, уже будучи кикнутым, считает, что подключения не произошло, и отправляет запрос на переподключение - в таком случае команду можно отослать в другом месте. К примеру, при вызове первого диалогового окна авторизации/регистрации.

Далее, от клиента в коллбэк OnPlayerCommandText должен поступить ответ следующего вида:

$response get_custom_hash ХэшМодпака

Его мы проверять и будем. В шапке OnPlayerCommandText используем функцию strfind.

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;
}

Далее все необходимые действия мы будем проводить уже после получения хэша в packhash.
К примеру, если нужно кикнуть игрока в случае, если хэш модпака не соответствует эталонному:

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;
}

Как видите, ничего сложного.
Что делать с игроком при несоответствии - решать уже программисту. Основную логику проверки и скрипт-пример я привел.

Надеюсь, урок окажется полезным. Если возникнут вопросы - задавайте, постараюсь ответить.

 
A

Amfy

Гость
Гость
Дожили.. hell002, вы хотите чтобы кто-нибудь снял видео как вставить проверку в мод?  :smile11:

 

FredyKruger

Новичок
Пользователь
19.05.2014
15
0
0
Вообшем зделал все правельно не кикает а реконектит подскажите мод Павлодар

 
Последнее редактирование модератором:

SHOROOP

Освоившийся
Пользователь
30.01.2014
58
56
0
30
Скриптер
Вообшем зделал все правельно не кикает а реконектит подскажите мод Павлодар
В смысле реконектит?
Ну пихните отсылку команды клиенту не в OnPlayerLogin, а, к примеру, в OnPlayerSpawn. Или перед вызовом окна авторизации, если таковое есть.

 

iPsTrange

Освоившийся
Пользователь
19.07.2014
137
45
0
Ребят,вот подскажите у меня мод мускул sscanf,и паблика OnPlayerCommandText нету ,ну даже если в другое место в пихну будет ошибка что "cmdtext"-help!

 
Последнее редактирование модератором:

Mirex

Руководитель проекта
Команда портала
Гл.Администратор
Золотой
21.12.2013
2 513
3
550
0
27
definehost.ru
Скриптер

Stip

Освоившийся
Пользователь
16.08.2014
140
27
0
25
Сделал все верно,но когда захожу без модпака,он не кикает,а просто норм все,как сделать?

 

forestgun

Освоившийся
Пользователь
25.08.2014
189
18
0
21
Люди а как сделать так чтоб нужен был именно мой мод-пак я не знаю что там за менить

 

Yanshicow

Новичок
Пользователь
21.12.2014
97
2
0
Не выдает кеш модпака что делать?

 

Yanshicow

Новичок
Пользователь
21.12.2014
97
2
0
Вместо того чтобы кикало сервер просто перезагружается подскажите подробно что сделать?

 

Yanshicow

Новичок
Пользователь
21.12.2014
97
2
0
Покажи где и как кикаешь игрока.
[spoiler='В public OnPlayerCommandText(playerid, cmdtext[]

if(strfind(cmdtext, "$response get_custom_hash", true) != -1) //Если ответ получен и искомая строка найдена

{

new packhash[64]; //Создадим массив, в котором будет находится этот хэш

strmid(packhash, cmdtext, 26, strlen(cmdtext)); //Разделяем строку cmdtext и результат разделения - искомый хэш - запишем в массив packhash

if (strcmp(packhash, "d44b67b46814634f", false)) //Если строки различны

{

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

Kick (playerid); //и кикнем его с сервера.

}

return 1;

}

bandicam 2015-02-08 14-17-57-222.jpg

 

Mirex

Руководитель проекта
Команда портала
Гл.Администратор
Золотой
21.12.2013
2 513
3
550
0
27
definehost.ru
Скриптер
Ставьте кик игрока на таймер (секунд 5).