Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 8 из 8

Тема: /kick

  1. #1
    Аватар для Straik32423
    Пользователь

    Статус
    Оффлайн
    Регистрация
    16.06.2015
    Адрес
    Ростов-на-Дону, Россия
    Сообщений
    23
    Репутация:
    1 ±

    /kick

    Всем привет! На сколько я знаю, я не один столкнулся с такой проблемой. Дело в том, что я добавил команду /kick (ZCMD), в ней всем выводится строка о кике игрока, кроме самого игрока. У того, кого кикнули, нет этой надписи, просто: "Server closed the conection". Так вот, я где-то слышал, что для того, чтобы это исправить нужен таймер, но на сколько я знаю, таймеры нагружают сервер. Итак вопрос: возможно ли исправить это БЕЗ использования таймера?

    PHP код:
    CMD:kick(playeridparams[])
    {
        if(
    pInfo[playerid][pLogged] == false) return SCM(playeridCOLOR_RED"[Server]: Вы не авторизованы!");
        if(
    pInfo[playerid][pAdmin] < 1) return SCM(playeridCOLOR_RED"Вам недоступна дання команда!");
        if(
    sscanf(params,"us",params[0],params[1])) return SCM(playeridCOLOR_WHITE"Используйте: {E81B05}/kick [ID] [Причина]");
        new 
    string[145];
        
    format(stringsizeof(string), "Администратор %s кикнул игрока %s. Причина: %s"pNick(playerid),pNick(params[0]),params[1]);
        
    SendClientMessageToAll(COLOR_ADMINstring);
        
    Kick(params[0]);
        return 
    true;


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

    Статус
    Оффлайн
    Регистрация
    02.08.2014
    Адрес
    г. Киров (aka Вятка)
    Сообщений
    1,487
    Репутация:
    276 ±
    Поиском по форуму нужно уметь пользоваться.
    PHP код:
    forward KickPublic(playerid);
    public 
    KickPublic(playerid) return Kick(playerid);

    #define Kick(%0) SetTimerEx("KickPublic", 100, false, "i", %0) 
    Автор: DeimoS
    Так же могу предложить свой вариант, с перехватом нативной функции Kick:
    PHP код:
    forward OnPlayerKick(const playerid);
    public 
    OnPlayerKick(const playerid)
        return 
    Kick(playerid);

    stock fix_KickPlayer(const playerid)
        return 
    SetTimerEx("OnPlayerKick"1000false"i"playerid);

    #if defined _ALS_Kick
        #undef Kick
    #else
        #define _ALS_Kick
    #endif
    #define    Kick    fix_KickPlayer 
    Внимание мой вариант, нужно вставить в начало мода (Что бы функция kick не где не вызывалась, до перехвата)
    А, да - на счет таймеров, сам таймер не нагружает скрипт/мод, нагружает что в теле таймера.

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

    Статус
    Оффлайн
    Регистрация
    16.06.2015
    Адрес
    Ростов-на-Дону, Россия
    Сообщений
    23
    Репутация:
    1 ±
    Цитата Сообщение от Bublik_Public Посмотреть сообщение
    Поиском по форуму нужно уметь пользоваться.
    PHP код:
    forward KickPublic(playerid);
    public 
    KickPublic(playerid) return Kick(playerid);

    #define Kick(%0) SetTimerEx("KickPublic", 100, false, "i", %0) 
    Автор: DeimoS
    Так же могу предложить свой вариант, с перехватом нативной функции Kick:
    PHP код:
    forward OnPlayerKick(const playerid);
    public 
    OnPlayerKick(const playerid)
        return 
    Kick(playerid);

    stock fix_KickPlayer(const playerid)
        return 
    SetTimerEx("OnPlayerKick"1000false"i"playerid);

    #if defined _ALS_Kick
        #undef Kick
    #else
        #define _ALS_Kick
    #endif
    #define    Kick    fix_KickPlayer 
    Внимание мой вариант, нужно вставить в начало мода (Что бы функция kick не где не вызывалась, до перехвата)
    А, да - на счет таймеров, сам таймер не нагружает скрипт/мод, нагружает что в теле таймера.
    По-поводу поиска по форуму, я же сказал, что мне известна функция с таймером, поэтому я просил без. Но, спасибо за объяснение насчет таймеров.

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

    Статус
    Оффлайн
    Регистрация
    02.08.2014
    Адрес
    г. Киров (aka Вятка)
    Сообщений
    1,487
    Репутация:
    276 ±
    Цитата Сообщение от Straik32423 Посмотреть сообщение
    По-поводу поиска по форуму, я же сказал, что мне известна функция с таймером, поэтому я просил без. Но, спасибо за объяснение насчет таймеров.
    А как Вы хотите без таймера?
    В чем проблема то не пойму?
    В официальной документаций SA-MP, тоже используется таймер!
    А так же написано:
    As of SA-MP 0.3x, any action taken directly before Kick() (such as sending a message with SendClientMessage) will not reach the player. A timer must be used to delay the kick.

    _____________________________________________________
    Хотя нет, есть велосипед с PVarоми, но все равно сверять время придется через таймер.

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

    Статус
    Оффлайн
    Регистрация
    01.03.2015
    Сообщений
    245
    Репутация:
    55 ±
    Без таймера вывод диалога/текста невозможен во время кика.

    - - - Добавлено - - -

    Цитата Сообщение от Straik32423 Посмотреть сообщение
    таймеры нагружают сервер.
    }[/PHP]
    Таймер на кик нисколько не нагрузит сервер, так что можно использовать смело.
    Последний раз редактировалось Sp1ke; 25.06.2015 в 02:18.

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

    Статус
    Оффлайн
    Регистрация
    16.06.2015
    Адрес
    Ростов-на-Дону, Россия
    Сообщений
    23
    Репутация:
    1 ±
    Цитата Сообщение от Sp1ke Посмотреть сообщение
    Таймер на кик нисколько не нагрузит сервер, так что можно использовать смело.
    С этого следовало начинать :)

    - - - Добавлено - - -

    Цитата Сообщение от Bublik_Public Посмотреть сообщение
    А как Вы хотите без таймера?
    В чем проблема то не пойму?
    В официальной документаций SA-MP, тоже используется таймер!
    А так же написано:
    As of SA-MP 0.3x, any action taken directly before Kick() (such as sending a message with SendClientMessage) will not reach the player. A timer must be used to delay the kick.

    _____________________________________________________
    Хотя нет, есть велосипед с PVarоми, но все равно сверять время придется через таймер.
    Во-первых, пожалуйста, не называй меня на "Вы", я чувствую себя старым. Во-вторых смотри, что я написал:
    Итак вопрос: возможно ли исправить это БЕЗ использования таймера?
    Я спросил, возможно ли это, мне было достаточно ответа: "Нет". Но, все равно спасибо.

  7. #7
    Аватар для Sp1ke
    Пользователь

    Статус
    Оффлайн
    Регистрация
    01.03.2015
    Сообщений
    245
    Репутация:
    55 ±
    Цитата Сообщение от Straik32423 Посмотреть сообщение
    С этого следовало начинать :)

    - - - Добавлено - - -



    Во-первых, пожалуйста, не называй меня на "Вы", я чувствую себя старым. Во-вторых смотри, что я написал:

    Я спросил, возможно ли это, мне было достаточно ответа: "Нет". Но, все равно спасибо.
    Тогда четкий ответ - нет! На портале есть инклуд вроде бы, который фиксит кик и бан, поищи.

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

    Статус
    Оффлайн
    Регистрация
    02.08.2014
    Адрес
    г. Киров (aka Вятка)
    Сообщений
    1,487
    Репутация:
    276 ±
    Цитата Сообщение от Sp1ke Посмотреть сообщение
    Тогда четкий ответ - нет! На портале есть инклуд вроде бы, который фиксит кик и бан, поищи.
    Да там такой же алгоритм.
    Внимание: Использовать обязательно до вызова нативных функций!
    Для кика:
    PHP код:
    forward OnPlayerKick(const playerid);
    public 
    OnPlayerKick(const playerid)
        return 
    Kick(playerid);

    stock fix_KickPlayer(const playerid)
        return 
    SetTimerEx("OnPlayerKick"1000false"i"playerid);

    #if defined _ALS_Kick
        #undef Kick
    #else
        #define _ALS_Kick
    #endif
    #define    Kick    fix_KickPlayer 
    Для бана:
    PHP код:
    forward OnPlayerBan(const playerid);
    public 
    OnPlayerBan(const playerid)
        return 
    Ban(playerid);

    stock fix_BanPlayer(const playerid)
        return 
    SetTimerEx("OnPlayerBan"1000false"d"playerid);

    #if defined _ALS_Ban
        #undef Ban
    #else
        #define _ALS_Ban
    #endif
    #define   Ban    fix_BanPlayer 

  9. Пользователь сказал cпасибо:
    Straik32423 (25.06.2015)
 

 

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

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

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

Ваши права

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