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

GhostOne Глюк помогите исправить

Тема в разделе 'Запуск и Поддержка', создана пользователем ELITE, 21 май 2013.

  1. ELITE Гуру

    Сообщения:
    252
    Спасибы:
    23
    Дата начала использования бота:
    00.00.2012
    вроде ничего не менял но в списке хостов название игры начало отрезатьпервых 4 символа
    при этом в логах название пишет полное как положено....
    подскажите где идет вывод названия игры для списка игр (хостов) на сервера

    тоесть в конфиге bot_autohostgamename = 1234567890
    в логах, в лобби, в самой игре, в базе - в общем везде название будет 1234567890
    А В СПИСКЕ хостов отображает - 567890
    --------------------
    бот ghost one 1.7.266
    логи -
    Код:
    [                            GHOST] creating game [|cFFFF8000Goblin Survival #103]
    [        GAME: |cFFFF8000Goblin Survival #103] loading IP blacklist file [ipblacklist.txt]
    [        GAME: |cFFFF8000Goblin Survival #103] loaded 635 lines from IP blacklist file
    [        GAME: |cFFFF8000Goblin Survival #103] attempting to bind to all available addresses
    [        GAME: |cFFFF8000Goblin Survival #103] listening on port 6113
    [        GAME: |cFFFF8000Goblin Survival #103] votestart expired
    [IMG]
  2. Sparko_Dima Старожила

    Сообщения:
    744
    Спасибы:
    104
    Сборка бота GHost:
    Ghost Sparko
    Дата начала использования бота:
    10.10.09
    это в гарене я фиксил)) в скайпе расспишу
  3. ELITE Гуру

    Сообщения:
    252
    Спасибы:
    23
    Дата начала использования бота:
    00.00.2012
    итак кто всётаки наведет на путь где баг искать

    всю цепочку от загрузки названия с конфига до вывода где только есть проверил - никаких подозрений на этот глюк не нашел :(
    уже неделю не могу найти бага :(
  4. JiLiZART Администрация

    Сообщения:
    815
    Спасибы:
    35
    Сборка бота GHost:
    Ghost++ 17.1
    Дата начала использования бота:
    12.12.04
    1. Бот, версия, 2. Через че хостишь 3. Логи.
    Почему так трудно это сделать?
    Doterok нравится это.
  5. Doterok Старожила

    Сообщения:
    923
    Спасибы:
    171
    Сборка бота GHost:
    Ghost ++ 17.2
    Дата начала использования бота:
    2011
    потому что форум раз в месяц модерируется
    JiLiZART нравится это.
  6. ELITE Гуру

    Сообщения:
    252
    Спасибы:
    23
    Дата начала использования бота:
    00.00.2012
    потому, что во всех версиях вывод названия одинаковый
    логи привел
  7. JiLiZART Администрация

    Сообщения:
    815
    Спасибы:
    35
    Сборка бота GHost:
    Ghost++ 17.1
    Дата начала использования бота:
    12.12.04
    Прояви инициативу.
    По логам и скрину сразу стало понятно в чем дело. |cFF системная "фраза" обозначающая начало цвета, которую warcraft вырезает из любого текста, даже если он не может применить к нему цвет.
  8. ELITE Гуру

    Сообщения:
    252
    Спасибы:
    23
    Дата начала использования бота:
    00.00.2012
    вы хоть поняли, что сморозили!
    1) стандарты цвета почитайте - для варика это или |c или |c******** или |r |g |b (последние 3 работали только до 1.24 патча варика)
    2) почему же стандартная версия бота не вырезает этот код?!
    3) да и как писал - даже имя 12345678 будет обрезено до 5678 - тут нет никаких системных кодов
  9. Doterok Старожила

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

    Сообщения:
    252
    Спасибы:
    23
    Дата начала использования бота:
    00.00.2012
    мне всего бота выкладывать
    скажите какие куски кода показать
    ---------- 1) получаю имя хоста и обрезаю до 31 символа (с 0 по 31)
    Код:
        m_AutoHostGameName = CFG->GetString( "bot_autohostgamename", string( ) );
     
                    if( m_AutoHostGameName.size( ) > 31 ) {
                    CONSOLE_Print( "[GHOST] game name [" + m_AutoHostGameName + "] is too long, cut up to 31 characters" );
                    string str = m_AutoHostGameName.substr (0,31);
                    m_AutoHostGameName = str;
     
                    }
    ------------- 2) как я понимаю тут идет создание игры автохостом
    Код:
        // autohost
     
        if( !m_AutoHostGameName.empty( ) && m_AutoHostMaximumGames != 0 && m_AutoHostAutoStartPlayers != 0 && GetTime( ) - m_LastAutoHostTime >= 30 )
        {
            // copy all the checks from CGHost :: CreateGame here because we don't want to spam the chat when there's an error
            // instead we fail silently and try again soon
     
            if( !m_ExitingNice && m_Enabled && !m_CurrentGame && m_Games.size( ) < m_MaxGames && m_Games.size( ) < m_AutoHostMaximumGames )
            {
                if( m_AutoHostMap->GetValid( ) )
                {
     
                    string GameName = m_AutoHostGameName + " #" + UTIL_ToString( m_HostCounter );      
                   
            //-------------------------------- 
                    if( GameName.size( ) > 31 ) {
                    string str = GameName.substr (0,31);
                    GameName = str;
                    CONSOLE_Print( "[GHOST] display game name [" + GameName + "] is too long, cut up to 31 characters" );
                    }
            //---------------------------
                    if( m_AutoHostGameName.size( ) <= 31 )
                    {
     
                        m_AutoHosted = true;
                        CreateGame( m_AutoHostMap, GAME_PUBLIC, false, GameName, m_AutoHostOwner, m_AutoHostOwner, m_AutoHostServer, false );
                        m_AutoHosted = false;
     
                        if( m_CurrentGame )
    
    тут я пробовал заменять
    CreateGame( m_AutoHostMap, GAME_PUBLIC, false, GameName, m_AutoHostOwner, m_AutoHostOwner, m_AutoHostServer, false );
    на принудительно вписанное имя
    CreateGame( m_AutoHostMap, GAME_PUBLIC, false, "123456789", m_AutoHostOwner, m_AutoHostOwner, m_AutoHostServer, false );
    результата не дало - обрезает
    ----------------- 3) войд создания игры
    Код:
    void CGHost :: CreateGame( CMap *map, unsigned char gameState, bool saveGame, string gameName, string ownerName, string creatorName, string creatorServer, bool whisper )
    {
        if( !m_Enabled ) /*если бот отключен (невозможно создать игру)*/
        {
            for( vector<CBNET *> :: iterator i = m_BNETs.begin( ); i != m_BNETs.end( ); i++ )
            {
                if( (*i)->GetServer( ) == creatorServer )
                    (*i)->QueueChatCommand( m_Language->UnableToCreateGameDisabled( gameName.substr(0,10)+"...", m_DisableReason ), creatorName, whisper );
            }
     
            if( m_AdminGame )
                m_AdminGame->SendAllChat( m_Language->UnableToCreateGameDisabled( gameName.substr(0,10)+"...", m_DisableReason ) );
     
            return;
        }
     
        if( gameName.size( ) > 31 ) /*если слишком длинное название (невозможно создать игру)*/
        {
            for( vector<CBNET *> :: iterator i = m_BNETs.begin( ); i != m_BNETs.end( ); i++ )
            {
                if( (*i)->GetServer( ) == creatorServer )
                    (*i)->QueueChatCommand( m_Language->UnableToCreateGameNameTooLong( gameName ), creatorName, whisper );
            }
     
            if( m_AdminGame )
                m_AdminGame->SendAllChat( m_Language->UnableToCreateGameNameTooLong( gameName ) );
     
            return;
        }
     
        if( !map->GetValid( ) ) /*если ошибка карты (невозможно создать игру)*/
        {
            for( vector<CBNET *> :: iterator i = m_BNETs.begin( ); i != m_BNETs.end( ); i++ )
            {
                if( (*i)->GetServer( ) == creatorServer )
                    (*i)->QueueChatCommand( m_Language->UnableToCreateGameInvalidMap( gameName ), creatorName, whisper );
            }
     
            if( m_AdminGame )
                m_AdminGame->SendAllChat( m_Language->UnableToCreateGameInvalidMap( gameName ) );
     
            return;
        }
     
        if( saveGame ) /*если файл с ошибкой (невозможно создать игру)*/
        {
            if( !m_SaveGame->GetValid( ) )
            {
                for( vector<CBNET *> :: iterator i = m_BNETs.begin( ); i != m_BNETs.end( ); i++ )
                {
                    if( (*i)->GetServer( ) == creatorServer )
                        (*i)->QueueChatCommand( m_Language->UnableToCreateGameInvalidSaveGame( gameName ), creatorName, whisper );
                }
     
                if( m_AdminGame )
                    m_AdminGame->SendAllChat( m_Language->UnableToCreateGameInvalidSaveGame( gameName ) );
     
                return;
            }
     
            string MapPath1 = m_SaveGame->GetMapPath( );
            string MapPath2 = map->GetMapPath( );
            transform( MapPath1.begin( ), MapPath1.end( ), MapPath1.begin( ), (int(*)(int))tolower );
            transform( MapPath2.begin( ), MapPath2.end( ), MapPath2.begin( ), (int(*)(int))tolower );
     
            /*(невозможно создать игру)*/
            if( MapPath1 != MapPath2 ) UnableToCreateGameMustEnforceFirst
            {
                CONSOLE_Print( "[GHOST] path mismatch, saved game path is [" + MapPath1 + "] but map path is [" + MapPath2 + "]" );
     
                for( vector<CBNET *> :: iterator i = m_BNETs.begin( ); i != m_BNETs.end( ); i++ )
                {
                    if( (*i)->GetServer( ) == creatorServer )
                        (*i)->QueueChatCommand( m_Language->UnableToCreateGameSaveGameMapMismatch( gameName ), creatorName, whisper );
                }
     
                if( m_AdminGame )
                    m_AdminGame->SendAllChat( m_Language->UnableToCreateGameSaveGameMapMismatch( gameName ) );
     
                return;
            }
     
            if( m_EnforcePlayers.empty( ) )/*(невозможно создать игру)*/
            {
                for( vector<CBNET *> :: iterator i = m_BNETs.begin( ); i != m_BNETs.end( ); i++ )
                {
                    if( (*i)->GetServer( ) == creatorServer )
                        (*i)->QueueChatCommand( m_Language->UnableToCreateGameMustEnforceFirst( gameName ), creatorName, whisper );
                }
     
                if( m_AdminGame )
                    m_AdminGame->SendAllChat( m_Language->UnableToCreateGameMustEnforceFirst( gameName ) );
     
                return;
            }
        }
     
        if( m_CurrentGame )/*(невозможно создать игру)*/
        {
            for( vector<CBNET *> :: iterator i = m_BNETs.begin( ); i != m_BNETs.end( ); i++ )
            {
                if( (*i)->GetServer( ) == creatorServer )
                    (*i)->QueueChatCommand( m_Language->UnableToCreateGameAnotherGameInLobby( gameName, m_CurrentGame->GetDescription( ) ), creatorName, whisper );
            }
     
            if( m_AdminGame )
                m_AdminGame->SendAllChat( m_Language->UnableToCreateGameAnotherGameInLobby( gameName, m_CurrentGame->GetDescription( ) ) );
     
            return;
        }
     
        if( m_Games.size( ) >= m_MaxGames )/*(невозможно создать игру)*/
        {
            for( vector<CBNET *> :: iterator i = m_BNETs.begin( ); i != m_BNETs.end( ); i++ )
            {
                if( (*i)->GetServer( ) == creatorServer )
                    (*i)->QueueChatCommand( m_Language->UnableToCreateGameMaxGamesReached( gameName, UTIL_ToString( m_MaxGames ) ), creatorName, whisper );
            }
     
            if( m_AdminGame )
                m_AdminGame->SendAllChat( m_Language->UnableToCreateGameMaxGamesReached( gameName, UTIL_ToString( m_MaxGames ) ) );
     
            return;
        }
    /*---------------------- ошибок для создания игры нет ----------------------*/
        CONSOLE_Print( "[GHOST] creating game [" + gameName + "]..." );
        UDPChatSend("|newgame "+gameName);
     
        m_LastGameName = gameName;
     
    //    if (m_AutoHosted)
    //    if( saveGame )
    //        m_CurrentGame = new CGame( this, m_AutoHostMap, m_SaveGame, m_HostPort, gameState, gameName, ownerName, creatorName, creatorServer );
    //    else
    //        m_CurrentGame = new CGame( this, m_AutoHostMap, NULL, m_HostPort, gameState, gameName, ownerName, creatorName, creatorServer );
    //    else
        unsigned char gs = gameState;
        if (gameState!=GAME_PRIVATE && gameState!=GAME_PUBLIC)
            gameState = GAME_PRIVATE;
     
        if( saveGame )
            m_CurrentGame = new CGame( this, map, m_SaveGame, m_HostPort, gameState, gameName, ownerName, creatorName, creatorServer );
        else
            m_CurrentGame = new CGame( this, map, NULL, m_HostPort, gameState, gameName, ownerName, creatorName, creatorServer );
     
        // todotodo: check if listening failed and report the error to the user
     
        if( m_SaveGame )
        {
            m_CurrentGame->SetEnforcePlayers( m_EnforcePlayers );
            m_EnforcePlayers.clear( );
        }
     
        m_CurrentGame->m_GameStateS = gs;
     
        m_CurrentGame->SetAutoHosted(m_AutoHosted);
     
        // auto set HCL if map_defaulthcl is not empty
        m_CurrentGame->AutoSetHCL();
     
        // country checks
        if (!m_AutoHosted)
        if (m_AllowedCountries!="")
        {
            m_CurrentGame->m_Countries = m_AllowedCountries;
            m_CurrentGame->m_CountryCheck = true;
        }
     
        // score checks
        if (!m_AutoHosted)
            if (m_AllowedScores!=0)
            {
                m_CurrentGame->m_Scores = m_AllowedScores;
                m_CurrentGame->m_ScoreCheck = true;
            }
       
        // score checks in autohosted
        if (m_AutoHosted)
        if (m_AutoHostAllowedScores!=0)
        {
            m_CurrentGame->m_Scores = m_AllowedScores;
            m_CurrentGame->m_ScoreCheck = true;
        }
     
        if (!m_AutoHosted)
        if (m_DeniedCountries!="")
        {
            m_CurrentGame->m_Countries2 = m_DeniedCountries;
            m_CurrentGame->m_CountryCheck2 = true;
        }
     
        // add players from RMK if any
     
        if (m_HoldPlayersForRMK && m_PlayersfromRMK.length()>0)
        {
            CONSOLE_Print( "[GHOST] reserving players from last game");
     
            stringstream SS;
            string s;
            SS << m_PlayersfromRMK;
            while( !SS.eof( ) )
            {
                SS >> s;
                m_CurrentGame->AddToReserved(s, 255);
            }
            m_PlayersfromRMK = string();
        }
       
        bool AutoHostRefresh = m_AutoHostLocal && m_AutoHosted;
        // don't advertise the game if it's autohosted locally
        if (!AutoHostRefresh )
        for( vector<CBNET *> :: iterator i = m_BNETs.begin( ); i != m_BNETs.end( ); i++ )
        {
            if( whisper && (*i)->GetServer( ) == creatorServer )
            {
                // note that we send this whisper only on the creator server
     
                if( gameState == GAME_PRIVATE )
                    (*i)->QueueChatCommand( m_Language->CreatingPrivateGame( gameName, ownerName ), creatorName, whisper );
                else if( gameState == GAME_PUBLIC )
                    (*i)->QueueChatCommand( m_Language->CreatingPublicGame( gameName, ownerName ), creatorName, whisper );
            }
            else
            {
                // note that we send this chat message on all other bnet servers
     
                if( gameState == GAME_PRIVATE )
                    (*i)->QueueChatCommand( m_Language->CreatingPrivateGame( gameName, ownerName ) );
                else if( gameState == GAME_PUBLIC )
                    (*i)->QueueChatCommand( m_Language->CreatingPublicGame( gameName, ownerName ) );
            }
     
            if( saveGame )
                (*i)->QueueGameCreate( gameState, gameName, string( ), map, m_SaveGame, m_CurrentGame->GetHostCounter( ) );
            else
                (*i)->QueueGameCreate( gameState, gameName, string( ), map, NULL, m_CurrentGame->GetHostCounter( ) );
        }
     
        if( m_AdminGame )
        {
            if( gameState == GAME_PRIVATE )
                m_AdminGame->SendAllChat( m_Language->CreatingPrivateGame( gameName, ownerName ) );
            else if( gameState == GAME_PUBLIC )
                m_AdminGame->SendAllChat( m_Language->CreatingPublicGame( gameName, ownerName ) );
        }
     
        // if we're creating a private game we don't need to send any game refresh messages so we can rejoin the chat immediately
        // unfortunately this doesn't work on PVPGN servers because they consider an enterchat message to be a gameuncreate message when in a game
        // so don't rejoin the chat if we're using PVPGN
     
        if( gameState == GAME_PRIVATE )
        {
            for( vector<CBNET *> :: iterator i = m_BNETs.begin( ); i != m_BNETs.end( ); i++ )
            {
                if( (*i)->GetPasswordHashType( ) != "pvpgn" )
                    (*i)->QueueEnterChat( );
            }
        }
     
        // hold friends and/or clan members
     
        for( vector<CBNET *> :: iterator i = m_BNETs.begin( ); i != m_BNETs.end( ); i++ )
        {
            if( (*i)->GetHoldFriends( ) )
                (*i)->HoldFriends( m_CurrentGame );
     
            if( (*i)->GetHoldClan( ) )
                (*i)->HoldClan( m_CurrentGame );
        }
     
        //------------------------------------------------------- WaaaghTV
     
    #ifdef WIN32
        if (m_wtv && m_CurrentGame->wtvprocessid == 0 && m_Map->GetMapObservers()>=3)
        {
            m_CurrentGame->CloseSlot( m_CurrentGame->m_Slots.size()-2, true );
            m_CurrentGame->CloseSlot( m_CurrentGame->m_Slots.size()-1, true );
            m_CurrentGame->CreateWTVPlayer( m_wtvPlayerName, true );
     
            STARTUPINFO si;
            PROCESS_INFORMATION pi;
     
            ZeroMemory( &si, sizeof(si) );
            si.cb = sizeof(si);
            ZeroMemory( &pi, sizeof(pi) );
     
            string wtvRecorderEXE = m_wtvPath + "wtvRecorder.exe";
     
            //hProcess = CreateProcess( _T("D:\\Programme\\wc3tv\\wtvRecorder.exe"), NULL, NULL, NULL, TRUE, HIGH_PRIORITY_CLASS, NULL, _T("D:\\Programme\\wc3tv\\" ), &si, &pi );
            //HANDLE hProcess = CreateProcess( wtvRecorderEXE, NULL, NULL, NULL, TRUE, HIGH_PRIORITY_CLASS, NULL, m_wtvPath, &si, &pi );
            int hProcess = CreateProcessA( wtvRecorderEXE.c_str( ), NULL, NULL, NULL, TRUE, HIGH_PRIORITY_CLASS, NULL, m_wtvPath.c_str( ), LPSTARTUPINFOA(&si), &pi );
     
            if( !hProcess )
                CONSOLE_Print( "[WaaaghTV] : Failed to start wtvRecorder.exe" );
            else
            {
                m_CurrentGame->wtvprocessid = int( pi.dwProcessId );
                CONSOLE_Print( "[WaaaghTV] : wtvRecorder.exe started!" );
                CloseHandle(pi.hProcess);
                CloseHandle(pi.hThread);
            }
        }
    #endif
    }
    
    ------------ что еще показать?
  11. Doterok Старожила

    Сообщения:
    923
    Спасибы:
    171
    Сборка бота GHost:
    Ghost ++ 17.2
    Дата начала использования бота:
    2011
    Ужас, с таким недовольствием выкладываешь, как будто как будто тебе тут должны слету все рассказать
    Как я понял изменения это начал после установки патча для гарены?
    Надо смотреть в ту строну
    будет возможность пробну откомпилировать тот патч, а так трудно что то сказать.
  12. ELITE Гуру

    Сообщения:
    252
    Спасибы:
    23
    Дата начала использования бота:
    00.00.2012
    извини, если тон показался грубым, ничего подобного не имел ввиду, просто уже бошку свернул на этом глюке...
    ----------
    да ставил патч для гарены (из gcb)
    до него никаких глюков не было
    патч тоже смотрел но в нем ничего связанного с названием нет
  13. Doterok Старожила

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

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

    Сообщения:
    252
    Спасибы:
    23
    Дата начала использования бота:
    00.00.2012
    разные пробовал - результат одинаковый