[Source 2009][Оплата] Исправление бага со сменой ника

Тема в разделе "Программирование / Скриптинг", создана пользователем Jiffs, 27 янв 2013.

  1. Jiffs

    Jiffs

    Сообщения:
    10
    Симпатии:
    0
    Добрый день.

    В наличии имеется плагин который запрещает определенные ники и если заходит игрок с таким ником, то плагин, либо меняет ему ник, либо кикает. Проблема в том, что в играх на движке Source 2009 (в моем случае это DoD:S) возникает проблема, когда выбран вариант смены ника.

    Возьмем ситуацию, когда в файле для запрещенных ников прописано "JM", а мой ник "Jiffs Maverick". Когда я захожу на сервер - все нормально. Но если я сменю ник на "JM", то в чате начинается такой балаган:

    Код:
    Player Jiffs Maverick changed name to JM
    Sorry, bad name!
    Player Player 82355 changed name to JM
    Sorry, bad name!
    Player Player 95298 changed name to JM
    Sorry, bad name!
    Player Player 44594 changed name to JM
    
    около сотни таких строк
    
    Sorry, bad name!
    Player Player 5351 changed name to JM
    Sorry, bad name!
    Player JM changed name to Player 23422
    В логах sourcemod это выглядит так:

    Код:
    L 26/01/2013 - 22:36:09: [namefilter.smx] Player found with badword in his name: JM
    L 26/01/2013 - 22:36:09: [namefilter.smx] Player found with badword in his name: JM
    L 26/01/2013 - 22:36:09: [namefilter.smx] Player found with badword in his name: JM
    L 26/01/2013 - 22:36:09: [namefilter.smx] Player found with badword in his name: JM
    
    около сотни таких строк
    
    L 26/01/2013 - 22:36:29: [namefilter.smx] Player found with badword in his name: JM
    L 26/01/2013 - 22:36:29: [namefilter.smx] Player found with badword in his name: JM
    Такая же ситуация происходит, если меняется карта. Отмечу, при заходе на сервер игрока с запрещенным ником - проблемы нет, ник нормально меняется.

    Кто поможет исправить данную проблему? А то сам пытался скорректировать, но ни чего не вышло, к сожалению. Естественно я заплачу (Webmoney), если решение будет найдено.

    P.S.: в L4D1/L4D2 такой проблемы нет.
    P.P.S.: другие плагины не предлагать, надо исправить именно этот.
     

    Вложения:

    • namefilter.sp
      Размер файла:
      4,4 КБ
      Просмотров:
      18
    Последнее редактирование: 27 янв 2013
  2. The Night Fury

    The Night Fury Администратор

    Сообщения:
    1.222
    Симпатии:
    915
    Jiffs, это работает и на других администраторов, или только на тебя?
     
  3. Jiffs

    Jiffs

    Сообщения:
    10
    Симпатии:
    0
    Это не связано с наличием админки. Этот баг касается всех игроков.
     
  4. The Night Fury

    The Night Fury Администратор

    Сообщения:
    1.222
    Симпатии:
    915
    Jiffs, то есть, если игрок во время игры сменит ник на запрещённый, то ничего, кроме print'ов не происходит, верно?
     
  5. Jiffs

    Jiffs

    Сообщения:
    10
    Симпатии:
    0
    Если верить таблице счет в игре, в которой отображается ник, то все это происходит так:

    1) Игрок меняет ник на запрещенный;
    2) Начинается спам в чат;
    3) Пока идет спам, в таблице счета отображается запрещенный ник;
    4) Спам заканчивается;
    5) Ник игрока становится "unnamed число".
     
  6. The Night Fury

    The Night Fury Администратор

    Сообщения:
    1.222
    Симпатии:
    915
    Jiffs, хм. Ну, тут мне не понятно зачем, автор добавил таймер, который и вызывает функцию смены/оповещения.

    Попробуй вместо

    PHP:
        CreateTimer(0.1tCheckClientiClient); // Weird timing spam issues without timer
    просто вызвать функцию tCheckClient.

    Я думаю, что в этом дело. Скажи, если оно.
     
  7. Jiffs

    Jiffs

    Сообщения:
    10
    Симпатии:
    0
    Если так сделать, то спама нет, но плагин ник не меняет, ни после захода на сервер, ни после ручной смены ника. Сообщение выводится, но запрещенный ник остается.
     
  8. The Night Fury

    The Night Fury Администратор

    Сообщения:
    1.222
    Симпатии:
    915
    Не уверен, но попробуй так:

    Функция OnClientSettingsChanged:
    замени
    PHP:
    else if (iMode == MODE_RENAME)
            {
                
    CreateTimer(0.1tCheckClientiClient); // Weird timing spam issues without timer
            
    }
    на
    PHP:
    else if (iMode == MODE_RENAME)
            {
                if (
    IsValidEntity(iClient))
                    
    RenameClient(iClient);
            }
    Может быть, так сработает. Если сработает, то всю функцию tCheckClient сотри из сисходника, чтоб не висела там.
     
  9. Jiffs

    Jiffs

    Сообщения:
    10
    Симпатии:
    0
    Не все так просто... Этот вариант я сам уже использовал некоторое время назад. К сожалению это не помогает, спам остается.
     
  10. The Night Fury

    The Night Fury Администратор

    Сообщения:
    1.222
    Симпатии:
    915
    Jiffs, и имена постоянно меняются, и в логи постоянно пишет, и в чат?
     
  11. The Night Fury

    The Night Fury Администратор

    Сообщения:
    1.222
    Симпатии:
    915
    AlmazON, не в этом дело. Он де говорит, что и ник тоже постоянно меняется.
     
  12. Jiffs

    Jiffs

    Сообщения:
    10
    Симпатии:
    0
    Infiltrait0rN7, да.

    AlmazON, системное сообщение от сервера о том что игрок изменил ник - тоже предлагаете удалить? Тут ведь проблема не в том что в чат и в логи спам идет. А в том, что плагин сотню раз ник меняет. Вы предлагаете убирать симптомы, а требуется устранить источник проблемы.
     
  13. The Night Fury

    The Night Fury Администратор

    Сообщения:
    1.222
    Симпатии:
    915
    Jiffs, пффф... не знаю, чот ещё может быть.
    Попробуй заменить в функции tCheckClient оператор return Plugin_Handled; на return Plugin_Continue;

    Другого способа не вижу пока.
     
  14. Jiffs

    Jiffs

    Сообщения:
    10
    Симпатии:
    0
    К сожалению, это не помогло. Спам остался.
     
  15. Impulse72

    Impulse72

    Сообщения:
    246
    Симпатии:
    170
    Jiffs, Вы стим? Если стим игроку поменять ник через сервер, он встанет обратно примерно через 20-30 секунд на тот что у него в профиле. Я писал плагин один на заказ, когда тестил, тоже не понял что происходит вообще и почему обратно ник меняется. В итоге плагин переименовывал меня, мой ник становился прежним, он опять переименовывал. И так постоянно) Однако но стим пользователей переименовывало без проблем.
     
  16. Jiffs

    Jiffs

    Сообщения:
    10
    Симпатии:
    0
    AlmazON, ничего не изменилось.

    Impulse72, сервер no steam. Но я честно говоря не замечал, чтобы обладателям лицензий ник сам возвращался во время игры. Обычно это происходит только после смены карты или после перезахода.
     
  17. Jiffs

    Jiffs

    Сообщения:
    10
    Симпатии:
    0
    Проведя несколько тестов, выяснилось что в движке встроена защита от частой смены ника. В течении первых 20 секунд после смены ника, его нельзя менять снова. Собственно, именно поэтому возникал тот балаган. Плагин отредактировал с учетом этого факта. Теперь плагин работает, в принципе, нормально.

    Мою просьбу теперь можно переформулировать следующим образом: можно ли убрать эту 20-и секундную блокировку движком смены ника?
     

    Вложения:

    • namefilter.sp
      Размер файла:
      4,5 КБ
      Просмотров:
      0
  18. Jiffs

    Jiffs

    Сообщения:
    10
    Симпатии:
    0
    Код:
    "sv_namechange_cooldown_seconds" = "20.0"
     - When a client name change is received, wait N seconds allowing another name change

    Чертовски дельная мысль. И ведь казалось же, что Valve когда-то вводили какую-то переменную для такой целей. Спасибо!

    Собственно, все проблемы теперь решены. Всем спасибо. Тему можно закрывать.