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

GhostOne Wins, losses, leaves

Тема в разделе 'Основные вопросы', создана пользователем Bio, 2 авг 2013.

  1. Bio Ньюфаг

    Сообщения:
    21
    Спасибы:
    0
    Дата начала использования бота:
    21.03.2013
    Всем добрый вечер. Ну и перейду сразу к делу. В общем столкнулся с такой проблемой:
    IIoBeJluTeJlb Игр: 140 ↔( В/П/Л : 90~50~6 )↔ PTS: 6175 ☼ [A+] ↔ Читер
    Как видно игр 140 (90 побед, 50 поражений, 6 ливов), получается в 6 играх при ливе мой слот остался в игре и мне засчитали победу/поражение. Вот именно это я и хочу исправить. Формулу юзаю такую: 1000+(wins*100)-(losses*75)-(leaves*75)-(kicks*75)
    При ливе у игрока отнимают 75 очков, но если его команда одержала победу, то получится +25 очков ливеру, так же если они проиграли (-175 очков ливеру).
    В game_base.cpp нашёл такие строки:
    m_LastLeaverTicks = GetTicks();
    player->SetDeleteMe( true );
    if( reason == PLAYERLEAVE_GPROXY )
    player->SetLeftReason( m_GHost->m_Language->WasUnrecoverablyDroppedFromGProxy( ) );
    else
    player->SetLeftReason( m_GHost->m_Language->HasLeftVoluntarily( ) );
    player->SetLeftCode( PLAYERLEAVE_LOST );

    ReCalculateTeams();
    Посчитал что ReCalculateTeams(); решение моей проблемы, но он либо не работает как нужно, либо выполняет совсем иную функцию.
    В ghostdbmysql.cpp думаю попробовать использовать вместо вот этого:
    sum(gp.leftreason LIKE 'Leave') as leaves,
    вот это:
    sum(case when(gp.leftreason LIKE 'Leave' and wins)then 1 else 0) as leaves1, sum(case when(gp.leftreason LIKE 'Leave' and losses)then 1 else 0) as leaves2,
    И в формуле использовать так: 1000+(wins*100)-(losses*75)-(leaves1*175)+(leaves2*75)-(kicks*75)
    Ещё не пробовал, так что мб и не получится, но даже это не решит проблемы, так как хочу сделать примерно так:
    IIoBeJluTeJlb Игр: 1 ↔( В/П/Л : 0~0~1 )↔ PTS: 925 ☼ [D] ↔ Нуб
    Буду благодарен за помощь, подсказки, "пинок" в нужное направление :)
  2. Suicider Старожила

    Сообщения:
    673
    Спасибы:
    117
    Сборка бота GHost:
    Ghost++ 17.1 by w3gh
    Дата начала использования бота:
    12.07.2011
    1. Может всё таки сначало сделать то, что описал выше?
    2. Для этого нужно будет копаться в statsdota.cpp

    P.S. Ничего так придумал, можете себе тоже такое замутит... Хотя не, лень мне чтот -_-
  3. Doterok Старожила

    Сообщения:
    923
    Спасибы:
    171
    Сборка бота GHost:
    Ghost ++ 17.2
    Дата начала использования бота:
    2011
    на сколько я знаю дефолтный пересчет запускается после игры, и высчитывает по формуле, то есть ливер за победу получает 25 птс а за лосс теряет 150.
    но могу и ошибаться, если не найдешь решение своей проблемы, могу полностью переделать пересчет игры, естественно не за спасибо.
  4. Suicider Старожила

    Сообщения:
    673
    Спасибы:
    117
    Сборка бота GHost:
    Ghost++ 17.1 by w3gh
    Дата начала использования бота:
    12.07.2011
    :facepalm: смысл ему обращаться к тебе тогда?
  5. Doterok Старожила

    Сообщения:
    923
    Спасибы:
    171
    Сборка бота GHost:
    Ghost ++ 17.2
    Дата начала использования бота:
    2011
    Если сам не сделает пусть платит вот весь смысл, ну и пересчет что я буду делать который несильно базу грузит и удобней работать в плане модификаций и тп
  6. Bio Ньюфаг

    Сообщения:
    21
    Спасибы:
    0
    Дата начала использования бота:
    21.03.2013
    Мм... Я вроде написал в 1 посте:
    Буду благодарен за помощь, подсказки, "пинок" в нужное направление
    :)

    Так что покупать ничего не собираюсь). Значит в statsdota.cpp придётся копаться? Можно поподробнее в каких файлах ещё идёт пересчёт, или же только в statsdota.cpp?
  7. Suicider Старожила

    Сообщения:
    673
    Спасибы:
    117
    Сборка бота GHost:
    Ghost++ 17.1 by w3gh
    Дата начала использования бота:
    12.07.2011
    Я бы помог, но вот только... тык
  8. Bio Ньюфаг

    Сообщения:
    21
    Спасибы:
    0
    Дата начала использования бота:
    21.03.2013
    No problem . . .
  9. Bio Ньюфаг

    Сообщения:
    21
    Спасибы:
    0
    Дата начала использования бота:
    21.03.2013
    В game_base.cpp в void CBaseGame :: ReCalculateTeams( )
    нашёл такие строки:
    // ignore players who left and didn't get deleted yet.
    Получается ReCalculateTeam не работает на ливеров...
    Позже попробую закомментировать несколько строк и протестирую, мб получится.