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

OpenSource !LOBBYBAN

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

  1. rost Гуру

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

    Это в Game.cpp:
    Код:
    ///////////////
    ///////////////
    //// !LobbyBan
    ///////////////
    if(Command == "lb" || Command == "lobbyban")
    {
        string filename = "lobbybans.txt";
     
        if(Payload.empty())
        {
        ifstream in;
        in.open( filename.c_str() ); /// поиск файла
        if(in.fail( ))
          {
          SendChat(player->GetPID(),"Список лобби банов пуст. . .");
          }
          else
          {
              string AllBL = "";
              uint32_t total = 0;
              string Line;
              uint32_t per = 0;
                  while( !in.eof( ) )
              {
              getline( in, Line );
              total++;
              if(per > 0)
              AllBL+=", " + Line;
              else
              AllBL+=Line;
     
              per++;
              }
                SendChat(player->GetPID(),"Всего " + UTIL_ToString(total) + " записи: " + AllBL);
          }
        }
     
        if(!Payload.empty())
        {
        string NameKick = "";
        uint32_t fckerr = 0;
        CGamePlayer *LastMatch = NULL;
        uint32_t Matches = GetPlayerFromNamePartial( Payload, &LastMatch );
     
        if(Matches == 0)
            NameKick = Payload;
        else if(Matches == 1)
            NameKick = LastMatch->GetName();
        else if(Matches > 1)
        {
        NameKick = "";
        SendAllChat("Найдено больше 1 совпадения!");
        fckerr = 1;
        }
        ///// попытка открыть
        ifstream in;
        in.open( filename.c_str() ); /// поиск файла
        if(in.fail( ))
        {
        if(fckerr < 1)
        SendChat(player->GetPID(),"Создание списка лобби банов. . .");
     
        ofstream f(filename.c_str());
        f.close();
        }
                ofstream BL;
                BL.open( filename.c_str( ), ios :: app );
     
                if( !BL.fail( ) )
                {
                    if(fckerr < 1)
                    {
                    BL << NameKick << endl;
                    }
                    BL.close( );
                }
        if(fckerr < 1)
        SendChat(player->GetPID(),"Добавление в список лобби банов: " + NameKick);
     
     
        for( vector<CGamePlayer *> :: iterator i = m_Players.begin( ); i != m_Players.end( ); i++ )
                        {
     
                            if ( NameKick == (*i)->GetName() )
                                    {
                                        SendAllChat((*i)->GetName( ) + " - заблокирован, забанен на время лобби");
                                        (*i)->SetDeleteMe( true );
                                        (*i)->SetLeftReason( "kicked - banned on lobby" );
                                        (*i)->SetLeftCode( PLAYERLEAVE_LOBBY );
                                        OpenSlot( GetSIDFromPID( (*i)->GetPID( ) ), false );
                                    }
                        }
     
     
     
        }
    }

    Это в Game_Base.cpp:

    После
    Код:
    // send info about every other player to the new player
     
                if( m_GHost->m_HideIPAddresses )
                    Player->Send( m_Protocol->SEND_W3GS_PLAYERINFO( (*i)->GetPID( ), (*i)->GetName( ), BlankIP, BlankIP ) );
                else
                    Player->Send( m_Protocol->SEND_W3GS_PLAYERINFO( (*i)->GetPID( ), pristavkaA + (*i)->GetName( ), (*i)->GetExternalIP( ), (*i)->GetInternalIP( ) ) );
            }
        }
    Вставьте
    Код:
    ///// CHECK for LOBBY ban or noT?
    for( vector<CGamePlayer *> :: iterator i = m_Players.begin( ); i != m_Players.end( ); ++i )
    {
        string filename = "lobbybans.txt";
        ifstream in;
        in.open( filename.c_str() ); /// поиск файла
        if(!in.fail( ))
          {
              string AllBL = "";
              uint32_t total = 0;
              string Line;
              uint32_t per = 0;
                  while( !in.eof( ) )
              {
              getline( in, Line );
              if(Player->GetName() == Line)
                    {
                                        SendAllChat(Player->GetName( ) + " - заблокирован, забанен на время лобби");
                                        Player->SetDeleteMe( true );
                                        Player->SetLeftReason( "kicked - banned on lobby" );
                                        Player->SetLeftCode( PLAYERLEAVE_LOBBY );
                                        OpenSlot( GetSIDFromPID( Player->GetPID( ) ), false );
                    }
              }
        in.close( );
          }
     
    }
    ///////////
    И еще после
    Код:
    if( Shortest && Longest )
        {
            SendAllChat( m_GHost->m_Language->GetLang("lang_0071", "$USER$", Shortest->GetName( ), "$LOADINGTIME$", UTIL_ToString( (float)( Shortest->GetFinishedLoadingTicks( ) - m_StartedLoadingTicks ) / 1000, 2 ) ) ); // ShortestLoadByPlayer
            SendAllChat( m_GHost->m_Language->GetLang("lang_0072", "$USER$", Longest->GetName( ), "$LOADINGTIME$", UTIL_ToString( (float)( Longest->GetFinishedLoadingTicks( ) - m_StartedLoadingTicks ) / 1000, 2 ) ) ); // LongestLoadByPlayer
          
    Вставить
    Код:
    ///// удаление лобби банов
        string filename = "lobbybans.txt";
        remove( filename.c_str() );
    Doterok нравится это.
  2. Doterok Старожила

    Сообщения:
    923
    Спасибы:
    171
    Сборка бота GHost:
    Ghost ++ 17.2
    Дата начала использования бота:
    2011
    Спасибо,щас тестить буду!
    Рост зайди в скайп спросить 1 вещь надо
    тема создавать лень()
  3. Synth (LM) Пантограф!

    Сообщения:
    2.762
    Спасибы:
    172
    Сборка бота GHost:
    My own version of GhostOne
    Дата начала использования бота:
    15.06.2008
    Skype:
    Мой статус
    О боже... Это не так делается. Всегда найдется нуб, который кодит лучше автора. (C)
  4. rost Гуру

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

    Захотел сделать так. Нехотел долго мудрить через вектор, хотя неуверен, что было бы дольше, ну да ладно)))
  5. MuP .

    Сообщения:
    653
    Спасибы:
    202
    Сборка бота GHost:
    Ghost++ rev 579
    Дата начала использования бота:
    00.00.0000
    Через вектор и быстрее и компактнее и проще, да и диск шуршить не будет, представь что к тебе ломится кто-то с забаннего айпи раз 100 в секунду, винт не жалко будет?
  6. Synth (LM) Пантограф!

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

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

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

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

    Сообщения:
    923
    Спасибы:
    171
    Сборка бота GHost:
    Ghost ++ 17.2
    Дата начала использования бота:
    2011
    эм,можно подробней?
  11. Doterok Старожила

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

    Сообщения:
    1.258
    Спасибы:
    150
    Сборка бота GHost:
    LtG
    Дата начала использования бота:
    01.11.2010
    Skype:
    Мой статус
    Нужно тогда смотреть. Пробуй сам ищи БАГ (может файл несоздает или еще чето, а вообще лучше проси чтобы дали код с вектором, он лучше, я просто нехочу писать, да и эти коды дал из старого, нече нефиксил)
  13. Doterok Старожила

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