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

Help Статистика, пользователь играл n часов на боте.

Тема в разделе 'Кодинг/Собственные решения', создана пользователем hakersoft, 8 июл 2014.

  1. hakersoft Гуру

    Сообщения:
    91
    Спасибы:
    54
    Сборка бота GHost:
    Ghost++ own edition
    Дата начала использования бота:
    20.03.13
    Заметил на боте тролей одну интересную фишку, а именно- если ты уже играл на боте, напишет кол-во игр(дефоулт) и количество часов, которые ты играл за все игры.
    Кто в курсе, мб есть наработки, как сделать что-то похожее?
    Oxxxymiron нравится это.
  2. Sparko_Dima Старожила

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

    Сообщения:
    91
    Спасибы:
    54
    Сборка бота GHost:
    Ghost++ own edition
    Дата начала использования бота:
    20.03.13
    Вот
    [IMG]
    Oxxxymiron нравится это.
  4. Arakunido Олд-фаг

    Сообщения:
    10
    Спасибы:
    1
    Дата начала использования бота:
    27.01.2010
    Кхм.. это команда !stats, которую немного поменяли.
    hakersoft нравится это.
  5. Begzod Гуру

    Сообщения:
    141
    Спасибы:
    4
    Сборка бота GHost:
    Ghost One 1.7.266
    Дата начала использования бота:
    10.06.2010
    Ну да это он и без тебя знал)
  6. Sparko_Dima Старожила

    Сообщения:
    744
    Спасибы:
    104
    Сборка бота GHost:
    Ghost Sparko
    Дата начала использования бота:
    10.10.09
    **** пздц а то мы не видем
  7. hakersoft Гуру

    Сообщения:
    91
    Спасибы:
    54
    Сборка бота GHost:
    Ghost++ own edition
    Дата начала использования бота:
    20.03.13
    Суть в том, что судя по всему в бд нету строки, отвечающей за количество сыгранного времени для каждого игрока, и в коде этого тоже нигде нету, тобишь не все так просто.
    З.Ы Arakunido, :fp:
    Oxxxymiron нравится это.
  8. Sparko_Dima Старожила

    Сообщения:
    744
    Спасибы:
    104
    Сборка бота GHost:
    Ghost Sparko
    Дата начала использования бота:
    10.10.09
    найди его хоть 1 нормальный пост...
  9. Sparko_Dima Старожила

    Сообщения:
    744
    Спасибы:
    104
    Сборка бота GHost:
    Ghost Sparko
    Дата начала использования бота:
    10.10.09
    мб как нить с бд сайта тянет я просто даже не знаю как это
  10. Begzod Гуру

    Сообщения:
    141
    Спасибы:
    4
    Сборка бота GHost:
    Ghost One 1.7.266
    Дата начала использования бота:
    10.06.2010
    +1 :D
  11. Sparko_Dima Старожила

    Сообщения:
    744
    Спасибы:
    104
    Сборка бота GHost:
    Ghost Sparko
    Дата начала использования бота:
    10.10.09
    появилась идея как это сделать
  12. hakersoft Гуру

    Сообщения:
    91
    Спасибы:
    54
    Сборка бота GHost:
    Ghost++ own edition
    Дата начала использования бота:
    20.03.13
    И как же?
    Oxxxymiron нравится это.
  13. Sparko_Dima Старожила

    Сообщения:
    744
    Спасибы:
    104
    Сборка бота GHost:
    Ghost Sparko
    Дата начала использования бота:
    10.10.09
    скайп
  14. ___ROB___ Гуру

    Сообщения:
    256
    Спасибы:
    45
    Сборка бота GHost:
    Ghost One 1.7.266
    Дата начала использования бота:
    1.1.1991
    сумируй лефт_тайм и дели на 3600
    hakersoft нравится это.
  15. hakersoft Гуру

    Сообщения:
    91
    Спасибы:
    54
    Сборка бота GHost:
    Ghost++ own edition
    Дата начала использования бота:
    20.03.13
    Сделал, на скорую руку.Получилось.Бд у меня стандартная, встроенная в бот.(sqllite)
    В ghostdbsqlite.cpp
    И так:поменял AVG(loadingtime)(среднее время загрузки в стате) на
    SUM(left)(сумирует все значения времени игры конкретного юзера, в секундах)
    До
    CDBGamePlayerSummary *CGHostDBSQLite :: GamePlayerSummaryCheck( string name )

    {

    if( GamePlayerCount( name ) == 0 )

    return NULL;

    transform( name.begin( ), name.end( ), name.begin( ), (int(*)(int))tolower );

    CDBGamePlayerSummary *GamePlayerSummary = NULL;

    sqlite3_stmt *Statement;

    m_DB->Prepare( "SELECT MIN(datetime), MAX(datetime), COUNT(*), MIN(loadingtime), AVG(loadingtime), MAX(loadingtime), MIN(left/CAST(duration AS REAL))*100, AVG(left/CAST(duration AS REAL))*100, MAX(left/CAST(duration AS REAL))*100, MIN(duration), AVG(duration), MAX(duration) FROM gameplayers LEFT JOIN games ON games.id=gameid WHERE name=?", (void **)&Statement );

    После

    CDBGamePlayerSummary *CGHostDBSQLite :: GamePlayerSummaryCheck( string name )
    {
    if( GamePlayerCount( name ) == 0 )
    return NULL;

    transform( name.begin( ), name.end( ), name.begin( ), (int(*)(int))tolower );
    CDBGamePlayerSummary *GamePlayerSummary = NULL;
    sqlite3_stmt *Statement;
    m_DB->Prepare( "SELECT MIN(datetime), MAX(datetime), COUNT(*), MIN(loadingtime), SUM(left) , MAX(loadingtime), MIN(left/CAST(duration AS REAL))*100, AVG(left/CAST(duration AS REAL))*100, MAX(left/CAST(duration AS REAL))*100, MIN(duration), AVG(duration), MAX(duration) FROM gameplayers LEFT JOIN games ON games.id=gameid WHERE name=?", (void **)&Statement );


    Далее ищем в game.cpp

    SendAllChat( m_GHost->m_Language->HasPlayedGamesWithThisBot( i->second->GetName( ), GamePlayerSummary->GetFirstGameDateTime( ), GamePlayerSummary->GetLastGameDateTime( ), UTIL_ToString( GamePlayerSummary->GetTotalGames( ) ), UTIL_ToString( (float)GamePlayerSummary->GetAvgLoadingTime( ) / 1000, 2 ), UTIL_ToString( GamePlayerSummary->GetAvgLeftPercent( ) ) ) );


    И другие вхождения, у меня их 3
    И меняем их на:
    SendAllChat( m_GHost->m_Language->HasPlayedGamesWithThisBot( i->second->GetName( ), GamePlayerSummary->GetFirstGameDateTime( ), GamePlayerSummary->GetLastGameDateTime( ), UTIL_ToString( GamePlayerSummary->GetTotalGames( ) ), UTIL_ToString(GamePlayerSummary->GetAvgLoadingTime( ) / 3600)+" часов "+UTIL_ToString((GamePlayerSummary->GetAvgLoadingTime( ) % 3600)/60)+" минут." , UTIL_ToString( GamePlayerSummary->GetAvgLeftPercent( ) ) ) );


    Ну и в Languages\Russian.cfg меняем примерно так, или на ваше усмотрение:
    lang_0061 = $USER$ - $TOTALGAMES$ игр. Играл на боте: $AVGLOADINGTIME$ Среднее пребывание: $AVGSTAY$ %.

    Сделано конечно косо-криво, но работает, я не стал заморачиваться пока с красотой, на одном дыхании делал.
    Если нужен также пункт "Среднее время загрузки" , то меняйте просто другую переменную, или делайте свою.
    Ну и вот, что получилось:
    [IMG]

    На сим кланяюсь, надеюсь кому-то пригодится.
    Suicider и Oxxxymiron нравится это.
  16. ___ROB___ Гуру

    Сообщения:
    256
    Спасибы:
    45
    Сборка бота GHost:
    Ghost One 1.7.266
    Дата начала использования бота:
    1.1.1991
    сократи "часов" на "ч" и тд. а то будет в лобб в две строки, не красиво)
  17. ıIıIİıİIıımusic Можно доверять

    Сообщения:
    134
    Спасибы:
    2
    Сборка бота GHost:
    Ghost One 1.7.266
    Дата начала использования бота:
    01.01.2013
    Skype:
    Мой статус

    Сделал всё как показано, не пашет:(

    Код:
     ilillimusic - 10 игр. Играл на боте: 19.56 Среднее пребывание: 99 %. 
  18. hakersoft Гуру

    Сообщения:
    91
    Спасибы:
    54
    Сборка бота GHost:
    Ghost++ own edition
    Дата начала использования бота:
    20.03.13
    UTIL_ToString( (float)GamePlayerSummary->GetAvgLoadingTime( ) / 1000, 2 ) везде поменял? около 3 раз в коде встречается.Судя по паре цифр после точки - поменял не везде
    Oxxxymiron нравится это.
  19. ıIıIİıİIıımusic Можно доверять

    Сообщения:
    134
    Спасибы:
    2
    Сборка бота GHost:
    Ghost One 1.7.266
    Дата начала использования бота:
    01.01.2013
    Skype:
    Мой статус

    У меня они встречаются в 2 местах только:
    Код:
    if( GamePlayerSummary )
                {
                    if( i->first.empty( ) )
                        SendAllChat( m_GHost->m_Language->HasPlayedGamesWithThisBot( i->second->GetName( ), GamePlayerSummary->GetFirstGameDateTime( ), GamePlayerSummary->GetLastGameDateTime( ), UTIL_ToString( GamePlayerSummary->GetTotalGames( ) ), UTIL_ToString(GamePlayerSummary->GetAvgLoadingTime( ) / 3600) + " часов " + UTIL_ToString((GamePlayerSummary->GetAvgLoadingTime( ) % 3600)/60) + " минут.", UTIL_ToString( GamePlayerSummary->GetAvgLeftPercent( ) ) ) );
                    else
                    {
                        CGamePlayer *Player = GetPlayerFromName( i->first, true );
     
                        if( Player )
                            SendChat( Player, m_GHost->m_Language->HasPlayedGamesWithThisBot( i->second->GetName( ), GamePlayerSummary->GetFirstGameDateTime( ), GamePlayerSummary->GetLastGameDateTime( ), UTIL_ToString( GamePlayerSummary->GetTotalGames( ) ), UTIL_ToString(GamePlayerSummary->GetAvgLoadingTime( ) / 3600) + " часов " + UTIL_ToString((GamePlayerSummary->GetAvgLoadingTime( ) % 3600)/60) + " минут.", UTIL_ToString( GamePlayerSummary->GetAvgLeftPercent( ) ) ) );
                    }
                }
  20. hakersoft Гуру

    Сообщения:
    91
    Спасибы:
    54
    Сборка бота GHost:
    Ghost++ own edition
    Дата начала использования бота:
    20.03.13
    :fp:


    З.Ы [IMG]
    Oxxxymiron нравится это.