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