Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 7 из 7
  1. #1
    Аватар для Rick
    Пользователь

    Статус
    Оффлайн
    Регистрация
    10.08.2013
    Сообщений
    68
    Репутация:
    0 ±

    Оповещание

    Простите за такой слегка глупый вопрос, но как создать оповещание администрации для античита, к примеру у меня имеется античит на спид - хак - он кикает, мне требуется чтобы администрации после кика игрока ( Читера ) писало это, то что тот игрок кикнут за использование спид - хака, писало чтобы чисто администрации

  2. #2
    Аватар для underwoker
    Пользователь

    Статус
    Оффлайн
    Регистрация
    07.03.2014
    Сообщений
    331
    Репутация:
    47 ±
    Делаешь цикл на всех игроков, через switch или if делаешь проверку на переменную в которой хранится уровень админа, и выводишь им.
    "Власть, кровь, няш-мяш, кровь, власть, Крым наш!" - (c) Наталья Поклонская.

    Критик должен быть готов и способен в любой момент и по первому требованию занять место критикуемого им и выполнять его дело продуктивно и компетентно. В противном случае критика превращается в наглую, самодовлеющую силу и становится тормозом на пути прогресса. (с) AXE

  3. #3
    Аватар для $continue$
    Пользователь

    Статус
    Оффлайн
    Регистрация
    02.08.2014
    Адрес
    г. Киров (aka Вятка)
    Сообщений
    1,487
    Репутация:
    276 ±
    Ну дак continue + цикл + обычное оповещение.
    PHP код:
     forward SendAdminMessage(colorstring[]);
    public 
    SendAdminMessage(colorstring[])
    {
        foreach(new 
    iPlayer)
        {
            if(!
    PlayerInfo[i][pAdmin]) continue;
            
    SendClientMessage(icolorstring);
        }


  4. #4
    Аватар для L0ndl3m
    Пользователь

    Статус
    Оффлайн
    Регистрация
    19.10.2013
    Адрес
    Ярославль
    Сообщений
    1,366
    Репутация:
    774 ±
    Цитата Сообщение от Bublik_Public Посмотреть сообщение
    Ну дак continue + цикл + обычное оповещение.
    Интересный у вас цикл по вашим словам, сначала пропуск итерации, а потом уже цикл.


    Первая версия ( компилятор сам высчитывает длину строки, то есть не нужно считать, сколько нужно выделять памяти на сообщение ):
    PHP код:
    static const
        
    fmt_str[] = "Игрок %s был кикнут по подозрению на Speed Hack."// Само сообщение в массиве

    new
        
    str[sizeof(fmt_str) - MAX_PLAYER_NAME],
        
    // сначала указываем массив со строкой, далее вычитаем два,
        // т.к. "%s" занимаем 2 символа в строки,
        // и прибавляем значение константы MAX_PLAYER_NAME ( макс. длина никнейма игрока )
        
    GetMaxPlayers();
        
    // получаем макс. количество игроков,
        // которое может играть на сервере ( для перебора игроков, и отбирание тех, которые являются админами )
        
    GetPlayerName(playeridstrsizeof(str)); // Получение никнейма, и сразу же запись в массив str, мы его ещё не использовали

    format(strsizeof(str), fmt_strstr); // Форматируем сообщение для верного отображения в чате.

    do // цикл do while, самый лучший на мой взгляд цикл для перебора игроков
    {
        --
    i// Вычтем из переменной единицы ( теперь значение переменной i будет равно i - 1, то есть, условие цикла будет выполняться, пока i положительное число ( см. ниже: while(i) )
        
    if(IsPlayerConnected(i) && IsPlayerAdmin(i)) // если текущий игрок в итераторе подключен и если он является админом
            
    SendClientMessage(i, -1str); // выведем игроку сообщение, которое содержится в массиве fmt_str ( исходная строка: str )
    }
    while(
    i); 
    Вторая версия, для начинающего более простая, на мой взгляд, ( может и не так ):
    PHP код:
    new
        
    str[67],
        
    GetMaxPlayers();

    GetPlayerName(playeridstrsizeof(str));

    format(str67"Игрок %s был кикнут по подозрению на Speed Hack."str);

    do
    {
        --
    i;
        if(
    IsPlayerConnected(i) && IsPlayerAdmin(i))
            
    SendClientMessage(i, -1str);
    }
    while(
    i); 
    Последний раз редактировалось L0ndl3m; 04.08.2014 в 17:59.

  5. #5
    Аватар для Rick
    Пользователь

    Статус
    Оффлайн
    Регистрация
    10.08.2013
    Сообщений
    68
    Репутация:
    0 ±
    SendAdminMessage, мне кажется это более легкий способ?

    PHP код:
            new Float:veh_health_now,Floatveh_speed GetPlayerSpeed playerid );
            
    GetVehicleHealthplayer_vehicleplayerid ],veh_health_now );
            if( 
    veh_speed speed_player playerid ] > 20 && veh_health_now vehicle_health playerid ] == )
            {
                
    Kickplayerid );/
                return 
    1;
            }
            
    speed_player playerid ] = veh_speed
    Куда именно вставлять то что мне требуется, дабы было оповещение о том какого игрока кикнуло за чит, а оповестило администрацию

  6. #6
    Аватар для L0ndl3m
    Пользователь

    Статус
    Оффлайн
    Регистрация
    19.10.2013
    Адрес
    Ярославль
    Сообщений
    1,366
    Репутация:
    774 ±
    Цитата Сообщение от Rick Посмотреть сообщение
    SendAdminMessage, мне кажется это более легкий способ?
    Это вам всего лишь предоставили функцию, которая отправляет сообщение админам сервера, которое вы укажете во втором параметре.
    Также она будет работать только у тех, кто использует инклюд foreach. И на сколько я помню вам нужно построить само сообщение, а не только функцию. Вот примерно так это всё должно выглядеть:
    PHP код:
    new
        
    Floatveh_health_now,
        
    Floatveh_speed GetPlayerSpeed(playerid);

    GetVehicleHealth(player_vehicle[playerid], veh_health_now);

    if(
    veh_speed speed_player[playerid] > 20 && veh_health_now vehicle_health[playerid] == 0)
    {
        new
            
    str[67],
            
    GetMaxPlayers();

        
    GetPlayerName(playeridstrsizeof(str));

        
    format(str67"Игрок %s был кикнут по подозрению на Speed Hack."str);

        do
        {
            --
    i;
            if(
    IsPlayerConnected(i) && IsPlayerAdmin(i))
                
    SendClientMessage(i, -1str);
        }
        while(
    i);

        
    Kick(playerid);

        return 
    1;
    }
    speed_player[playerid] = veh_speed
    - - - Добавлено - - -

    Также могу посоветовать функцию, чтобы каждый раз не писать повторяющийся код:
    PHP код:
    stock SendToAdminsCheaterText(const playerid, const is_kick 1, const text[])
    {
        new
            
    str[80],
            
    GetMaxPlayers();

        
    GetPlayerName(playeridstrsizeof(str));

        
    format(str80"Игрок %s был %s по подозрению на %s."stris_kick ? ("кикнут") : ("забанен"), text);

        do
        {
            --
    i;
            if(
    IsPlayerConnected(i) && IsPlayerAdmin(i))
                
    SendClientMessage(i, -1str);
        }
        while(
    i);

    Использование такое:
    PHP код:
    SendToAdminsCheaterText(playerid1"Speed Hack"); 
    Выведет в чат ( допустим ):

    Код:
    Игрок Londlem был кикнут по подозрению на Speed Hack.
    Второй аргумент ( который в примере принимает значение 1 ) даёт понять, что игрок кикнут, если поставить 0, будет вместо слова 'кикнут' заменено на 'забанен'.

    Для вашего примера можно сделать так:
    PHP код:
    if(veh_speed speed_player[playerid] > 20 && veh_health_now vehicle_health[playerid] == 0)
    {
        
    SendToAdminsCheaterText(playerid1"Speed Hack");

        
    Kick(playerid);

        return 
    1;

    Последний раз редактировалось L0ndl3m; 04.08.2014 в 18:58.

  7. Пользователь сказал cпасибо:
    Rick (04.08.2014)
  8. #7
    Аватар для Rick
    Пользователь

    Статус
    Оффлайн
    Регистрация
    10.08.2013
    Сообщений
    68
    Репутация:
    0 ±
    Проблема решена, спасибо всем кто отозвался. Особенно Londlem

 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •