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

OpenSource [ghostone] админка с паролем

Тема в разделе 'Кодинг/Собственные решения', создана пользователем AJlex, 14 май 2015.

  1. AJlex Наш человек

    Сообщения:
    8
    Спасибы:
    8
    код частично взят из этой темы
    game.cpp
    находим
    Код:
    // upgrade LAN players to admins in case bot_lanadmins = 1
    // upgrade local players to admins in case bot_localadmins = 1
    if ((m_GHost->m_LanAdmins && player->IsLAN()) || (m_GHost->m_LocalAdmins && player->GetExternalIPString()=="127.0.0.1" ))
    {
    AdminCheck = true;
    AdminAccess = m_GHost->CMDAccessAddOwner(AdminAccess);
    }
    
    после добавляем
    Код:
    map<string,string> admins;
        std::ifstream file("admin.txt");
        std::string str;
        while (std::getline(file, str))
        {
            std::string s = str;
            std::string delimiter = ":";
     
            size_t pos = 0;
            std::string token;
            pos = s.find(delimiter);
                token = s.substr(0, pos);
                string admin_name = token;
                s.erase(0, pos + delimiter.length());
                string admin_pass = s;
                admins.insert(pair<string,string>(admin_name,admin_pass)); 
        }
        string m_Password = "1234";
    находим
    Код:
    if( !m_Locked || RootAdminCheck || IsOwner( User ) )
            {
    после добавляем
    Код:
    // !PASSWORD
      if( Command == "password" && !player->GetLoggedIn( ) )
        {
            if( !m_Password.empty( ) && Payload == admins.find(User)->second )
            {
                CONSOLE_Print( "[ADMINGAME] user [" + User + "] logged in" );
                SendChat( player, m_GHost->m_Language->AdminLoggedIn( ) );
                player->SetLoggedIn( true );
            }
            else
            {
                uint32_t LoginAttempts = player->GetLoginAttempts( ) + 1;
                player->SetLoginAttempts( LoginAttempts );
                CONSOLE_Print( "[ADMINGAME] user [" + User + "] login attempt failed" );
                SendChat( player, m_GHost->m_Language->AdminInvalidPassword( UTIL_ToString( LoginAttempts ) ) );
                if( LoginAttempts >= 1 )
                {
                    player->SetDeleteMe( true );
                    player->SetLeftReason( "was kicked for too many failed login attempts" );
                    player->SetLeftCode( PLAYERLEAVE_LOBBY );
                    OpenSlot( GetSIDFromPID( player->GetPID( ) ), false );
                }
            }
            HideCommand = true;
        }
    находим
    Код:
    /*****************
    * ADMIN COMMANDS *
    ******************/
    
    перед добавляем
    Код:
    if( player->GetLoggedIn( ) )
                    {
    
    находим
    Код:
    /*********************
    * NON ADMIN COMMANDS *
    *********************/
    
    перед ним закрываем ковычку
    Код:
    }
    
    в папке с ботом создаем файл admin.txt
    в нем пишем админов,на 1 строчке по 1 админу
    например
    Player1:1234
    логин:пароль
    перед этим не забудьте добавить их в боте
    если у игрока в игре ник будет Player123 а в admin.txt будет написано player123,то бот вылетит ,регистр букв тут тоже важен

    после захода админа/овнера в игру до ввода пароля админ команды у него работать не будут,логин в игре или в лобби командой !password пароль
    при вводе неверного пароля игрока выдывает из лобби

    вот что еще забыл
    если не работает у админов то меняем проверку(уже упоминал выше)
    Код:
    if( !m_Locked || RootAdminCheck || IsOwner( User ) )
            {
    
    на
    Код:
    if( !m_Locked || RootAdminCheck || AdminCheck || IsOwner( User ) )
    {
    
    JiLiZART и Begzod нравится это.
  2. Begzod Гуру

    Сообщения:
    141
    Спасибы:
    4
    Сборка бота GHost:
    Ghost One 1.7.266
    Дата начала использования бота:
    10.06.2010
    bot_lanadmins = 1
    // upgrade local players to admins in case bot_localadmins = 1
    if ((m_GHost->m_LanAdmins && player->IsLAN()) || (m_GHost->m_LocalAdmins && player->GetExternalIPString()=="127.0.0.1" ))
    {
    AdminCheck = true;
    AdminAccess = m_GHost->CMDAccessAddOwner(AdminAccess);
    }
    [/CODE]
    после добавляем
    Код:
    map<string,string> admins;
        std::ifstream file("admin.txt");
        std::string str;
        while (std::getline(file, str))
        {
            std::string s = str;
            std::string delimiter = ":";
     
            size_t pos = 0;
            std::string token;
            pos = s.find(delimiter);
                token = s.substr(0, pos);
                string admin_name = token;
                s.erase(0, pos + delimiter.length());
                string admin_pass = s;
                admins.insert(pair<string,string>(admin_name,admin_pass));
        }
        string m_Password = "1234";
    находим
    Код:
    if( !m_Locked || RootAdminCheck || IsOwner( User ) )
            {
    после добавляем
    Код:
    // !PASSWORD
      if( Command == "password" && !player->GetLoggedIn( ) )
        {
            if( !m_Password.empty( ) && Payload == admins.find(User)->second )
            {
                CONSOLE_Print( "[ADMINGAME] user [" + User + "] logged in" );
                SendChat( player, m_GHost->m_Language->AdminLoggedIn( ) );
                player->SetLoggedIn( true );
            }
            else
            {
                uint32_t LoginAttempts = player->GetLoginAttempts( ) + 1;
                player->SetLoginAttempts( LoginAttempts );
                CONSOLE_Print( "[ADMINGAME] user [" + User + "] login attempt failed" );
                SendChat( player, m_GHost->m_Language->AdminInvalidPassword( UTIL_ToString( LoginAttempts ) ) );
                if( LoginAttempts >= 1 )
                {
                    player->SetDeleteMe( true );
                    player->SetLeftReason( "was kicked for too many failed login attempts" );
                    player->SetLeftCode( PLAYERLEAVE_LOBBY );
                    OpenSlot( GetSIDFromPID( player->GetPID( ) ), false );
                }
            }
            HideCommand = true;
        }
    находим
    Код:
    /*****************
    * ADMIN COMMANDS *
    ******************/
    
    перед добавляем
    Код:
    if( player->GetLoggedIn( ) )
                    {
    
    находим
    Код:
    /*********************
    * NON ADMIN COMMANDS *
    *********************/
    
    перед ним закрываем ковычку
    Код:
    }
    
    в папке с ботом создаем файл admin.txt
    в нем пишем админов,на 1 строчке по 1 админу
    например
    Player1:1234
    логин:пароль
    перед этим не забудьте добавить их в боте
    если у игрока в игре ник будет Player123 а в admin.txt будет написано player123,то бот вылетит ,регистр букв тут тоже важен

    после захода админа/овнера в игру до ввода пароля админ команды у него работать не будут,логин в игре или в лобби командой !password пароль
    при вводе неверного пароля игрока выдывает из лобби

    вот что еще забыл
    если не работает у админов то меняем проверку(уже упоминал выше)
    Код:
    if( !m_Locked || RootAdminCheck || IsOwner( User ) )
            {
    
    на
    Код:
    if( !m_Locked || RootAdminCheck || AdminCheck || IsOwner( User ) )
    {
    
    [/quote]
    Спасибо всем кто участвовал в создании этого кода но чуть не удобная но сойдёт хотябы бесплатно некоторые только платно делают....
  3. Begzod Гуру

    Сообщения:
    141
    Спасибы:
    4
    Сборка бота GHost:
    Ghost One 1.7.266
    Дата начала использования бота:
    10.06.2010
    Извените за повторных куате чет телефонный браузер гонит(
  4. Max5 Старожила

    Сообщения:
    360
    Спасибы:
    68
    Сборка бота GHost:
    GhostOne 1.7.266
    Дата начала использования бота:
    14.05.2013
    а нельзя ли после
    Код:
    string admin_name = token;
    добавить трансформацию ника в нижний регист
    Код:
    transform(  admin_name.begin( ),  admin_name.end( ),  admin_name.begin( ), (int(*)(int))tolower ); 
    а перед
    Код:
    if( !m_Password.empty( ) && Payload == admins.find(User)->second )
    сделать
    Код:
    string user =  User;
     
      transform(  user.begin( ),  user.end( ),  user.begin( ), (int(*)(int))tolower ); 
    ну и следовательно поменять на
    Код:
     if( !m_Password.empty( ) && Payload == admins.find(user)->second )  
    Или я бред написал?
  5. Max5 Старожила

    Сообщения:
    360
    Спасибы:
    68
    Сборка бота GHost:
    GhostOne 1.7.266
    Дата начала использования бота:
    14.05.2013
    Сделал по своему, но спасибо за основу.
    Интересно, для какой цели присваивается значение
    Код:
     string m_Password = "1234";
    и потом проверяется, не пустое ли оно?
    Код:
    !m_Password.empty( )
    т.е эти части как бы и не нужны.