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

[ФИКС] Отнимать очки за лив

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

Статус темы:
Закрыта.
  1. rost Гуру

    Сообщения:
    1.258
    Спасибы:
    150
    Сборка бота GHost:
    LtG
    Дата начала использования бота:
    01.11.2010
    Skype:
    Мой статус
    Фикс позволит вам отнимать очки за ливы. Так же можно зделать и за дисконнекты. Просто немного больше изменить в конфиге языка, ну и добавить в подсчет к боту по аналогии как мы сейчас зделаем лив.
    Для ботов: Ghost One / BrtGhost

    GHOSTDBMYSQL.CPP

    Открываем файл ghostdbmysql.cpp и находим:
    Код:
    bool MySQLCalculateScores
    Находим строку такую чуть ниже
    Код:
    string Query = "select name,server, (" + formula + ") as totalscore from(select *, (kills/deaths)
    Вставляем такое допустим после sum(dp.kills) as killstotal,
    Код:
    sum(gp.leftreason LIKE 'leave') as leaves,
    Сохраняем и компилируем!

    GHOST.CFG

    Далее идем в ghost.cfg и в формулу дописуем -leaves
    Код:
    bot_scoreformula = 500+wins*100-losses*120-leaves*150
    Из формулы видно что дает 500 стартового птс, аз победу +100, pf поражение -120, за лив -150, причем если ты проиграл и при этом ливнул будет -270! Но формулу можете выбрать любую свою, просто дописав -leaves*число умножения

    Так же находим строку
    Код:
    # initiate game over timer when x seconds have passed since world tree/frozen throne has fallen - 0 to disable
    И выставляем значение
    Код:
    bot_gameoverbasefallen = 1
    Чтобы при конце игры игроки, которые выходят, неполучали минус, так как ихняя причина выхода будет leave, а если бот сразу же закроет игру то причина выхода будет Игра закончена
    Но если игрок выйдет хотябы за секунду до окончания игры, ему будет минус!

    RUSSIAN.CFG

    Далее идем в russian.cfg ну или как там у вас называеться конфиг языка (english.cfg мб)
    И вот в этом месте lang_0082 меняем на leave ваш старый ризон выхода из игры добровольно
    Код:
    lang_0082 = leave
    PS: Все! Радуемся и ставим спасибки=) :)
    Cyberbob и evilmaker нравится это.
  2. Synth (LM) Пантограф!

    Сообщения:
    2.762
    Спасибы:
    172
    Сборка бота GHost:
    My own version of GhostOne
    Дата начала использования бота:
    15.06.2008
    Skype:
    Мой статус
    :facepalm: Я понял почему у меня уже -775 птс. окда.
  3. rost Гуру

    Сообщения:
    1.258
    Спасибы:
    150
    Сборка бота GHost:
    LtG
    Дата начала использования бота:
    01.11.2010
    Skype:
    Мой статус
    Личный твой трабл. Да ок. Обнули себя...
    Подстраиваться под неждущих? Мне то нах :bIbIbIblya: :bIbIbIblya: :bIbIbIblya:
  4. Synth (LM) Пантограф!

    Сообщения:
    2.762
    Спасибы:
    172
    Сборка бота GHost:
    My own version of GhostOne
    Дата начала использования бота:
    15.06.2008
    Skype:
    Мой статус
    Анальная глупость... ЗА СЕКУНДУ ДО ОКОНЧАНИЯ!
  5. rost Гуру

    Сообщения:
    1.258
    Спасибы:
    150
    Сборка бота GHost:
    LtG
    Дата начала использования бота:
    01.11.2010
    Skype:
    Мой статус
    ... кому как, я знал что ты будешь на это постить, только вот что я тебе скажу, как ты тоже иногда говоришь, нахрена искать тяжолые пути??????
    Тоесть компилить лефт ризон чтоли как-то и тд и тп...
  6. rost Гуру

    Сообщения:
    1.258
    Спасибы:
    150
    Сборка бота GHost:
    LtG
    Дата начала использования бота:
    01.11.2010
    Skype:
    Мой статус
    Я просто выложил, т.к. часто спрашивали и постили...
    Не тебеж лично дал, да тебе и ненадо. Кому нужно пусть берут, а ихняя придирчивость к этому, не мои проблемы. Допиши пост, как надо чтобы делать там за 5-3 минут до окончания и недавало ни минуса ни бана.
    Мне лень -_-
    Sawaof нравится это.
  7. Synth (LM) Пантограф!

    Сообщения:
    2.762
    Спасибы:
    172
    Сборка бота GHost:
    My own version of GhostOne
    Дата начала использования бота:
    15.06.2008
    Skype:
    Мой статус
    Запрос изменить и все. Сча посмотрю как.
  8. Mefix Наш человек

    Сообщения:
    114
    Спасибы:
    3
    По поводу формул. Вы переделали расчёт очков? Я именно про строчку :
    Код:
    string Query3 = "DELETE from scores";
    Я считаю недопустимо такое использовать. Ибо колоссальная нагрузка на БД и на перерасчёт.
    Когда была эта строчка, постоянная процессорная нагрузка на бота 20% процессорного времени. Если отключить 1-3%. И это выполняется после каждой игры. Я сейчас сделал расчёт очков по крону формулой бота, ибо она считает в какой-то мере быстрее чем dota_elo. Т.к. dota_elo при большом кол-ве игр,(чем больше игр тем медленнее) очень трудно найти не посчитанные игры(возможно у меня поле не проиндексировано, из-за этого dota_elo подтупливает).

    Эту проблему можно решить, нужно обозначить только то чтобы не все очки пересчитывались а только закончившейся игры. Проставляем индекс по уникальности, на name и server, и далее в боте дописываем sql запросом, что делаем insert очков, но при условии если возвращается ошибка по уникальности, сразу делается update. Причём вся нагрузка этой деятельности остаётся на mysql, допустимо только на версии 5.1+(возможно даже с 4-ой есть не помню)
  9. rost Гуру

    Сообщения:
    1.258
    Спасибы:
    150
    Сборка бота GHost:
    LtG
    Дата начала использования бота:
    01.11.2010
    Skype:
    Мой статус
    Я могу и тебе еще сказать, мне не так сложно, я выложил фикс, не мне решать кому надо а кому нет.
    У меня перещет ВООБЩЕ неработает. Нагрузка минимальна. После окончания игры бот не напрягается для перещета всего топа.
    Ливы тоже не так у меня считает. Я выложил то, что может использовать каждый, мой же способ несмогут :parovozdjan:
  10. rost Гуру

    Сообщения:
    1.258
    Спасибы:
    150
    Сборка бота GHost:
    LtG
    Дата начала использования бота:
    01.11.2010
    Skype:
    Мой статус
    У меня тоже CRON и все намного легче -_-
    Опять же говорю, выложил не для себя, а для новичков и тролей, делающих копипастом. Вот :avtoradolf:
    Begzod нравится это.
  11. Mefix Наш человек

    Сообщения:
    114
    Спасибы:
    3
    А ну ладн. Ибо я топ и всю стату собираюсь триггерами считать. Т.к. Отказался от идеи просчёта и добавления ботом.
  12. Synth (LM) Пантограф!

    Сообщения:
    2.762
    Спасибы:
    172
    Сборка бота GHost:
    My own version of GhostOne
    Дата начала использования бота:
    15.06.2008
    Skype:
    Мой статус
    Ну так вот:
    1. Изменяем формулу
    2. В коде меняем запрос
    Вот мой вариант - лив считает от 10 и больше минут:
    Код:
    select name,server, (wins*50-losses*25-leaves*100) as totalscore
    from(select *, (kills/deaths) as killdeathratio, (totgames-wins) as losses from (select gp.name as name,ga.server as server,gp.gameid as gameid, gp.colour as colour, avg(dp.courierkills) as courierkills, sum(dp.raxkills) as raxkillstotal, sum(case when((dg.min*60+dg.sec > gp.left+600)) then 1 else 0 end) as leaves, sum(dp.towerkills) as towerkillstotal, sum(dp.assists) as assiststotal, sum(dp.courierkills) as courierkillstotal, sum(dp.creepdenies) as creepdeniestotal, sum(dp.creepkills) as creepkillstotal, sum(dp.neutralkills) as neutralkillstotal, sum(dp.deaths) as deathstotal, sum(dp.kills) as killstotal, avg(dp.raxkills) as raxkills,avg(dp.towerkills) as towerkills, avg(dp.assists) as assists, avg(dp.creepdenies) as creepdenies, avg(dp.creepkills) as creepkills,avg(dp.neutralkills) as neutralkills, avg(dp.deaths) as deaths, avg(dp.kills) as kills,count(*) as totgames, SUM(case when((dg.winner = 1 and dp.newcolour < 6) or (dg.winner = 2 and dp.newcolour > 6)) then 1 else 0 end) as wins from gameplayers as gp, dotagames as dg, games as ga,dotaplayers as dp where dg.winner <> 0 and dp.gameid = gp.gameid and dg.gameid = dp.gameid and dp.gameid = ga.id and gp.gameid = dg.gameid and gp.colour = dp.colour
    group by gp.name having totgames >= 1) as h) as i ORDER BY totalscore desc, name asc
    И еще замечание по твоему коду, рост:
    Если ты юзаешь
    Это не значит что у всех будет так. Мб будет "leaver" или "leave from game" итд... Пофиксить можно это так:
  13. Mefix Наш человек

    Сообщения:
    114
    Спасибы:
    3
    ммм... Long и как я понимаю стандартный русский лив можно не удалять даже. просто добавить слово Leaver. Но вообще поиск по тексту лучше не делать, т.к выборка по нему происходит долго. Лучше вывести все значения выхода из игры в отдельную таблицу, там сделать привязку по ID и в gameplayers(или куда там у нас) сделать чтобы добавлялся ID-шник, а то получается у нас как в лотус нотус.

    Я вот выборку по никнейму для статы буду делать напрямую, а не через перекрёстные ссылки, т.к. разницы особо нет тут, ибо напрямую никнейм легче брать чем через ID а потом через перекрёстные ссылки. Ну и имена игроков это всё уникальные значения. А вот текст не уникальные. Так что задумайтесь. Именно эту функцию лучше делать через join.
  14. Synth (LM) Пантограф!

    Сообщения:
    2.762
    Спасибы:
    172
    Сборка бота GHost:
    My own version of GhostOne
    Дата начала использования бота:
    15.06.2008
    Skype:
    Мой статус
    Да
  15. rost Гуру

    Сообщения:
    1.258
    Спасибы:
    150
    Сборка бота GHost:
    LtG
    Дата начала использования бота:
    01.11.2010
    Skype:
    Мой статус
    По поводу лефтризона, лонг я же написал чтобы его изменили, ну если люди совсем не туту то могут везде слово поставить любой. Я написал как для примера. А по коду, да так будет за 5 мин банить, но только очень возрастет нагрузка. Особенно у хостов с большой базой.
  16. Mefix Наш человек

    Сообщения:
    114
    Спасибы:
    3
    Да и вообще формулы расчёта из brt и one бота нельзя использовать если БД находится на удалённом сервере. Помониторьте увидите про что я говорю. Нужно делать чтобы для каждой новой игры стата отдельно считалась, далее вставлялась в уникальную таблицу(по имени и серверу) инсертом, и в этом же запросе, если если mysql даёт ошибку на инсерт(из-за уникальности), тогда делается update этих значений, тоесть суммируется. Далее раз в месяц через крон просто ставим чтобы стата пересчитывалась по всей базе, и смотрим сильно ли отличаются значения от тех что были просчитаны автоматом. Ну и далее пытаемся разобраться почему. В общем-с как-то так.
  17. rost Гуру

    Сообщения:
    1.258
    Спасибы:
    150
    Сборка бота GHost:
    LtG
    Дата начала использования бота:
    01.11.2010
    Skype:
    Мой статус
    Проще игркоов по каждой игре апдейтить. Только тех кто играл.
  18. Synth (LM) Пантограф!

    Сообщения:
    2.762
    Спасибы:
    172
    Сборка бота GHost:
    My own version of GhostOne
    Дата начала использования бота:
    15.06.2008
    Skype:
    Мой статус
    Офтоп
Статус темы:
Закрыта.