1. Соблюдайте Правила форума и проявляйте уважение к другим участникам беседы.

OpenSource !BANIP

Тема в разделе 'Кодинг/Собственные решения', создана пользователем rost, 18 сен 2012.

  1. rost Гуру

    Сообщения:
    1.258
    Спасибы:
    150
    Сборка бота GHost:
    LtG
    Дата начала использования бота:
    01.11.2010
    Skype:
    Мой статус
    Попросили команду бана ip в игре
    Ну собсно кидаю сюда, может кому будет еще нужна

    Вставить в файл game.cpp куда угодно в командах (ракам необъясняю)
    Код:
                /////
                /////  !BANIP
                /////
                else if(Command == "banip" && !Payload.empty())
                {
     
                    if( !RootAdminCheck ){
                    SendChat(player, "Забанить IP может только HEAD ADMIN");
                    return HideCommand;}
     
                    CGamePlayer *LastMatch = NULL;
                    uint32_t Matches = GetPlayerFromNamePartial( Payload, &LastMatch );
     
                    if(Matches > 1){
                    SendAllChat("Найдено больше 1 совпадения!");
                    return HideCommand;}
     
                    if(Matches == 0){
                    SendAllChat("Не найдено совпадений!");
                    return HideCommand;}
       
                    string banip = LastMatch->GetExternalIPString();
     
                    if(Matches == 1)
                    {
                    SendAllChat("Игрок [" + LastMatch->GetName() + "] забанен по ip (" + banip + ")");
                    CONSOLE_Print( "[GAME: " + m_GameName + "] admin [" + User+ "] banned ip [" + Payload + "]" );
     
                              LastMatch->SetDeleteMe( true );
                              LastMatch->SetLeftReason("vikinut... ban ip");
                              LastMatch->SetLeftCode( PLAYERLEAVE_LOBBY );
                              OpenSlot( GetSIDFromPID( LastMatch->GetPID( ) ), false );
                                           
                string filename = "ipblacklist.txt";
                ifstream in;
                in.open( filename.c_str() ); /// поиск файла
                if(!in.fail( ))
                  {
                    ofstream BL;
                    BL.open( filename.c_str( ), ios :: app );
     
                    if( !BL.fail( ) )
                      {
                    BL << banip << endl;
                    BL.close( );
                      }
                  }
                }
            ifstream in;
            in.open( m_GHost->m_IPBlackListFile.c_str( ) );
     
            if( in.fail( ) )
                CONSOLE_Print( "[GAME: " + m_GameName + "] error loading IP blacklist file [" + m_GHost->m_IPBlackListFile + "]" );
            else
            {
                CONSOLE_Print( "[GAME: " + m_GameName + "] loading IP blacklist file [" + m_GHost->m_IPBlackListFile + "]" );
                string Line;
     
                while( !in.eof( ) )
                {
                    getline( in, Line );
     
                    // ignore blank lines and comments
                    if( Line.empty( ) || Line[0] == '#' )
                        continue;
     
                    // remove newlines and partial newlines to help fix issues with Windows formatted files on Linux systems
                    Line.erase( remove( Line.begin( ), Line.end( ), ' ' ), Line.end( ) );
                    Line.erase( remove( Line.begin( ), Line.end( ), '\r' ), Line.end( ) );
                    Line.erase( remove( Line.begin( ), Line.end( ), '\n' ), Line.end( ) );
     
                    // ignore lines that don't look like IP addresses
                    if( Line.find_first_not_of( "1234567890." ) != string :: npos )
                        continue;
                    m_IPBlackList.insert( Line );
                }
                in.close( );
                CONSOLE_Print( "[GAME: " + m_GameName + "] loaded " + UTIL_ToString( m_IPBlackList.size( ) ) + " lines from IP blacklist file" );
            }
     
    }
    ////////////
    Doterok и TyMaH нравится это.
  2. rost Гуру

    Сообщения:
    1.258
    Спасибы:
    150
    Сборка бота GHost:
    LtG
    Дата начала использования бота:
    01.11.2010
    Skype:
    Мой статус
    Кароче, подправить пост немогу, вот Объяснения на использование

    Принцып работы:
    в игре пишите !banip pet

    если находит игрока у которого в имени будет сочетание букв pet и он такой будет один, то его выкинет из игры, даст ип бан, путем занесения в ipblacklist.txt и сразу же перезагрузит все ип баны
  3. Doterok Старожила

    Сообщения:
    923
    Спасибы:
    171
    Сборка бота GHost:
    Ghost ++ 17.2
    Дата начала использования бота:
    2011
    у меня бот с ошибкой вылетал)от этой команды -_-
    Сори оффтопик рост дай лобби бан)
  4. rost Гуру

    Сообщения:
    1.258
    Спасибы:
    150
    Сборка бота GHost:
    LtG
    Дата начала использования бота:
    01.11.2010
    Skype:
    Мой статус
    да тошо тогда в коде были ошибки... а этим я уже пользовался пару раз
    Doterok нравится это.
  5. rost Гуру

    Сообщения:
    1.258
    Спасибы:
    150
    Сборка бота GHost:
    LtG
    Дата начала использования бота:
    01.11.2010
    Skype:
    Мой статус
    У меня по лобби бану свой подход, думаю не самый рациональный, зато легкий
    Doterok нравится это.
  6. Doterok Старожила

    Сообщения:
    923
    Спасибы:
    171
    Сборка бота GHost:
    Ghost ++ 17.2
    Дата начала использования бота:
    2011
    строку ниже прочитай)
    кстате на какие боты код если не секрет?)
  7. rost Гуру

    Сообщения:
    1.258
    Спасибы:
    150
    Сборка бота GHost:
    LtG
    Дата начала использования бота:
    01.11.2010
    Skype:
    Мой статус
    у меня получается был когдато он БРТ (39 ревизия)
    Щас я конечтно уже очень сильно его излопатил
  8. Doterok Старожила

    Сообщения:
    923
    Спасибы:
    171
    Сборка бота GHost:
    Ghost ++ 17.2
    Дата начала использования бота:
    2011
    вот мне он и нужен. что бы не пускало в игру пока не началась другая :)
  9. MuP .

    Сообщения:
    653
    Спасибы:
    202
    Сборка бота GHost:
    Ghost++ rev 579
    Дата начала использования бота:
    00.00.0000
    Е мое.:facepalm: Ну держись Рост, не в обиду, мне просто за державу обидно
    1) Нет ограниения на применения команды в лобби. Подумай что будет, если ты применишь эту команду после загрузки.
    Код:
    else if(Command == "banip" && !Payload.empty() && !m_GameLoaded && !m_GameLoading)
    2) Быдлокод на мой взгляд:
    Код:
                    if(Matches > 1){
                    SendAllChat("Найдено больше 1 совпадения!");
                    return HideCommand;}
     
                    if(Matches == 0){
                    SendAllChat("Не найдено совпадений!");
                    return HideCommand;}
     
                    string banip = LastMatch->GetExternalIPString();
     
                    if(Matches == 1)
    Во 1 - правильнее сделать через else, во 2 - ты сначала обрубаешь все кроме 1, потом пишешь if(Matches == 1), в данном случае всегда в этом месте будет 1, иначе обрубалось бы раньше.
    По моему так будет лучше:
    Код:
    if(Matches != 1){
      SendAllChat("Чувак, ты ошибся при написании!");
      return HideCommand;
    } else {
    string banip = LastMatch->GetExternalIPString();
    // далее по тексту
    3. Вместо того чтобы сразу терзать файл 2 раза, надо просто добавить айпи в список
    Код:
    m_IPBlackList.insert( banip );
    а потом дописать в конец файла айпи. Ничего пересчитывать не надо. Данная игра будет работать с m_IPBlackList, а при старте следующей автоматически считается файл с забаненными айпи.
    Т.е. мы сократили список ненужных действий и ошибок
    P.s. ошибка #4
    Код:
                string filename = "ipblacklist.txt";
    В конфиге могут поменять имя файла, следовательно
    Код:
            ifstream in;
            in.open( m_GHost->m_IPBlackListFile.c_str( ) );
    Короче переписывай, сплошной быдлокод
  10. Doterok Старожила

    Сообщения:
    923
    Спасибы:
    171
    Сборка бота GHost:
    Ghost ++ 17.2
    Дата начала использования бота:
    2011
    хз,я тестанул на one всё отлично)
  11. MuP .

    Сообщения:
    653
    Спасибы:
    202
    Сборка бота GHost:
    Ghost++ rev 579
    Дата начала использования бота:
    00.00.0000
    Я не говорил что "оно" не будет работать, я лишь указал что допущены ляпы.
    При изменении имени файла в конфиге, бан будет только на текущуюю игру.
    Кстати попробуй в игре(после загрузки карты) забанить айпишник, и напиши сюда, что произошло
  12. rost Гуру

    Сообщения:
    1.258
    Спасибы:
    150
    Сборка бота GHost:
    LtG
    Дата начала использования бота:
    01.11.2010
    Skype:
    Мой статус
    По ограничению:
    у меня стоит проверка ROOT я команду не юзаю по КД чтобы гдето были краши
    По быдлокоду:
    может быть, я копипастом выдерал из ip кодов, непытался даже что-то оптимизировать . Ну а поповоду else ты прав, пишу быстро (тошо пишу много) и зачастую быдлокодом (это чтобы непутатся поначалу, а потмо забываю поправлять)

    А бан на эту игру (текущую) если изменить название ipblakclist тоже недаст
  13. MuP .

    Сообщения:
    653
    Спасибы:
    202
    Сборка бота GHost:
    Ghost++ rev 579
    Дата начала использования бота:
    00.00.0000
    Чтобы дало бан на эту игру, надо добавить IP в множество m_IPBlackList, ты плохо прочитал.
    Если ты делаешь код для себя - не вопрос, твори что хочешь. Но если решил выложить - будь добр выкладывай нормальный, рабочий код без диких ляпов.Ибо школота потом с вопросами появится "Почему не работает? Вы все козлы и т.д."
    Doterok нравится это.
  14. rost Гуру

    Сообщения:
    1.258
    Спасибы:
    150
    Сборка бота GHost:
    LtG
    Дата начала использования бота:
    01.11.2010
    Skype:
    Мой статус
    сор, меня достали допустим вопросами по скайпу и тд... одними т теми же, я беру и вылажую и все.
    Он рабочий? да. Если кому нужно его править - дело ихнее. Я выложил просто рабочий код, оптимизация за юзверями.
    Ну и офк, мог бы кто и другой выложить более стабилный код, спрашуют то много, ответов мало (по таким вопросам вот)

    хотя я тоже вылажую не все
  15. Synth (LM) Пантограф!

    Сообщения:
    2.762
    Спасибы:
    172
    Сборка бота GHost:
    My own version of GhostOne
    Дата начала использования бота:
    15.06.2008
    Skype:
    Мой статус
    Выкладываю, их, спрашивают.
  16. rost Гуру

    Сообщения:
    1.258
    Спасибы:
    150
    Сборка бота GHost:
    LtG
    Дата начала использования бота:
    01.11.2010
    Skype:
    Мой статус
    Развели блин офтопик))) я выложил 2 команды чтоб меньше меня спрашивали))
    Сам я юзаю их 1 раз в неделю, и везде рут проверка на них стоит (хотя лобби проде нет)
    ну вот и что когдато натровил, тем и пользуюсь))) Вы меня пассивно щас заставите еще себе исходник править)))
  17. Doterok Старожила

    Сообщения:
    923
    Спасибы:
    171
    Сборка бота GHost:
    Ghost ++ 17.2
    Дата начала использования бота:
    2011
    ну вообщем бот вылетел с ошибкой....
  18. rost Гуру

    Сообщения:
    1.258
    Спасибы:
    150
    Сборка бота GHost:
    LtG
    Дата начала использования бота:
    01.11.2010
    Skype:
    Мой статус
    ситуацию конкретней опиши...

    Это делал?
  19. Doterok Старожила

    Сообщения:
    923
    Спасибы:
    171
    Сборка бота GHost:
    Ghost ++ 17.2
    Дата начала использования бота:
    2011
    да, дал бан в игре сперва выдезла не понятная надпись (с кодировкой беда)
    а потом разрыв соединения свернулся бота нету :D
  20. rost Гуру

    Сообщения:
    1.258
    Спасибы:
    150
    Сборка бота GHost:
    LtG
    Дата начала использования бота:
    01.11.2010
    Skype:
    Мой статус
    ну поставь там интвервал минимум минуту после начала игры
    Doterok нравится это.