Topic: Статистика из ghost в pvpgn
Как сделать так чтобы сервер читал из бд не через uid а через username
и чтобы записывалось так же
либо айди вообще не нужен пока есть username ))
PvPGN Community Forums |
forums.pvpgn.pro → [RU] Warcraft → Статистика из ghost в pvpgn
Как сделать так чтобы сервер читал из бд не через uid а через username
и чтобы записывалось так же
либо айди вообще не нужен пока есть username ))
Т.е без учета регистра username должно читать вместо uid ?
Почему бы и нет но я глянул там много кода заменить придется что бы работало через Username вместо "BNET\\acct\\userid"
Если студия есть удалить попробовать account->uid и потом по ходу ошибок заменять на username)
уу какой же ты быстрый не спишь тут ?)
а через storage_sql.cpp возможно?
то есть
не SELECT строка FROM таблица Where uid
а SELECT строка FROM таблица Where username
В сервере Pvpgn или в боте Ghost или где я че-то не понял)
в сервере pvpgn
Добавлено: 10.01.2017 20:04
а клиент не связан с айди? )
если связан то ничего не получится
ну я не все посмотрел возможно сложнее чем я думал)
Вопрос в следующем: Зачем такой грязный хак? В целом, не сложно даже опцию сделать, но зачем?
Из кода можно искать по uid, так и по username (но этот поиск происходит в памяти сервера, а не в БД):
extern t_account * accountlist_find_account(char const * username);
extern t_account * accountlist_find_account_by_uid(unsigned int uid);
Одно из основных предназначений uid в связывании всех таблиц БД, поэтому избавиться от него не получится.
Вопрос в том, что автор под всем этим имел ввиду. если поиск по базе через username - элементарно, если какая-то обвязка - тоже. Я, например, жду ответа на первый вопрос
я хочу чтобы сервер читал из бд ghost статистику через username
иначе айди не совпадают
Добавлено: 11.01.2017 20:45
В файле storage_sql.cpp :
snprintf(query, sizeof(query), "SELECT %s FROM %s%s WHERE " SQL_UID_FIELD " = %u", col, tab_prefix, tab, uid);
если это изменю на
user = xstrdup(username);
strlower(user);
snprintf(query, sizeof(query), "SELECT %s FROM %s%s WHERE username = %s", col, tab_prefix, tab, user);
и сделаю всё что связано с uid изменю на username получится ли? )
Что мешает боту записывать статистику игрокам в bnet таблицу? Создав соответствующие колонки?
Запрос для бота примерно такой
UPDATE bnet SET games='количество игр', wins='побед', losses='поражений', winspcnt='побед%', kills='убийств', deaths='смертей', assists='помощи', pts='очки', rank='место_в_топе', leavecount='ливы', leavepcnt='ливы%' WHERE username='игрок'
Корректировать можно под себя ясное дело
1. Serc а можно ли как нибудь сделать . чтобы изначально статистика не в scores/ а в BNET записывались все игроки сыгравшие, чтобы в BNET создавались новые игроки.
-
Что мешает боту записывать статистику игрокам в bnet таблицу? Создав соответствующие колонки?
Запрос для бота примерно такой
UPDATE bnet SET games='количество игр', wins='побед', losses='поражений', winspcnt='побед%', kills='убийств', deaths='смертей', assists='помощи', pts='очки', rank='место_в_топе', leavecount='ливы', leavepcnt='ливы%' WHERE username='игрок'
Корректировать можно под себя ясное дело
спасибо ценная инфо )
Добавлено: 12.01.2017 18:30
осталось тестит
На самом деле, статистику из ghost бота можно отображать в статистике игрока на pvpgn-pro без единой строчки кода.
Для этого необходимо:
1. Добавить дополнительные колонки в таблицу `record`. Например: W3XP_dota_rating, W3XP_dota_wins, W3XP_dota_loss.
2. Настроить icons.conf для отображения иконок, и для вывода статистики по команде /stats, используя эти добавленные колонки.
3. Добавить триггеры на update и insert в бд ghost на те таблицы, в которых есть нужные нам данные. За неимением бота не могу сказать какие там таблицы и на какие поля добавлять триггеры. По всей видимости, это dotagames и dotaplayers.
Триггеры должны делать update в добавленные ранее в pvpgn колонки из 1 пункта. Таким образом, автоматически будет осуществляться односторонняя синхронизация статистики из бд ghost в бд pvpgn.
когда у меня был вдс новый pvpgn-pro не запускалось какие то ошибку выдавал поэтому использую до сих пор старый pvpgn его все вдс или машины могут держать без ошибок
когда у меня был вдс новый pvpgn-pro не запускалось какие то ошибку выдавал поэтому использую до сих пор старый pvpgn его все вдс или машины могут держать без ошибок
В последних коммитах допускается такое поведение, и об этом нужно репортить
https://github.com/pvpgn/pvpgn-server/w … rash-dump)
Для рабочего сервера лучше использовать стабильный релиз, в котором таких багов не должно быть
https://github.com/pvpgn/pvpgn-server/releases
Добавлено: 12.01.2017 18:17
В любом случае, речь идет про перенос статистики из бота в pvpgn.
Serc предлагает чтобы бот обновлял её в бд pvpgn.
Мой вариант состоит в том, чтобы это делалось само в базе данных с помощью триггеров.
https://habrahabr.ru/post/37693/
Это был самый простой способ. В кодинге сервера я не разбираюсь - предлагаю идеи по системе "GHost+PvPGN".
Но несомнено харпи дал очень ценную информацию.
З.Ы. Куда пропали кнопки "Цититировать" и "+/-" ??
а что мешает чтобы сервер читал бд через username ?
На самом деле, статистику из ghost бота можно отображать в статистике игрока на pvpgn-pro без единой строчки кода.
Для этого необходимо:
1. Добавить дополнительные колонки в таблицу `record`. Например: W3XP_dota_rating, W3XP_dota_wins, W3XP_dota_loss.
2. Настроить icons.conf для отображения иконок, и для вывода статистики по команде /stats, используя эти добавленные колонки.
3. Добавить триггеры на update и insert в бд ghost на те таблицы, в которых есть нужные нам данные. За неимением бота не могу сказать какие там таблицы и на какие поля добавлять триггеры. По всей видимости, это dotagames и dotaplayers.
Триггеры должны делать update в добавленные ранее в pvpgn колонки из 1 пункта. Таким образом, автоматически будет осуществляться односторонняя синхронизация статистики из бд ghost в бд pvpgn.
Ну привет мистер Гэрпивар. С прошедшим новым годом и с Старым новым годом.
Давайте по теме...
А вы вкурсе что у бота UID другой и у сервера?
И каким же образом он будет записывать в таблицу record если там нету значения username?
И третье это колонки.
А вы вкурсе что Serc подсказал правильно, т.к он ищет по Username и дописывает игроку в доп.поле.
Язык SQL достаточно мощный, чтобы внутри триггера сначала сделать выборку по username, и затем обновить record по uid по нужным колонкам.
Serc подсказал всё правильно. Я лишь предложил дополнительный вариант, который мне кажется более элегантным - с ним уменьшается связность бота и pvpgn. Как известно, чем меньше связность отдельных модулей, тем проще затем поддерживать весь проект в целом.
Так, все, я въехал. Это продолжение этой темы?
Так может я чего не понимаю, но у нас в данном случае возможные ключевые поля.
1. UID - Не катит, так как две разных базы.
2. Никнейм - плохо, потому что может дублироваться
3. E-Mail - Я так понимаю, нет в ghost (не щупал, лично мне пока не нужно)
Так, а если у нас ладдер - не проще народ регистрировать через веб-морду? В этом случае у нас может быть вообще промежуточная база, связывающая обе системы. Кто мешает ghost учитывать e-mail?
Ну или вообще левый внутренний ID проекту создать - вообще ничего не надо перепахивать. Тут главное не страдать избыточностью головного мозга.
Так, все, я въехал. Это продолжение этой темы?
Так может я чего не понимаю, но у нас в данном случае возможные ключевые поля.
1. UID - Не катит, так как две разных базы.
2. Никнейм - плохо, потому что может дублироваться
3. E-Mail - Я так понимаю, нет в ghost (не щупал, лично мне пока не нужно)
Так, а если у нас ладдер - не проще народ регистрировать через веб-морду? В этом случае у нас может быть вообще промежуточная база, связывающая обе системы. Кто мешает ghost учитывать e-mail?
Ну или вообще левый внутренний ID проекту создать - вообще ничего не надо перепахивать. Тут главное не страдать избыточностью головного мозга.
Как и говорилось до этого, база у сервера и у бота должна быть одна. Запороть базу это никак не может - таблицы у проектов разные.
1. Сделать выборку по UID запросом не проблема. Затем занос в вектор и вывод в таблицу records (HarpyWar®).
2. Как никнейм может дублироваться в таблице сервера? Судя по запросу который я показал, происходит не новая запись, а обновление столбцов.
3. Столбец с почтой может быть пустым... Бот записывает очки акцентируясь на никнейм. Поэтому этот вариант отпадает сразу.
П.С. В прошлой теме уже был показан вывод в команду stats на сервере. В этой я показал сам запрос бота для обновления столбцов с нужными нам данными для команды stats.
Serc подсказал всё правильно. Я лишь предложил дополнительный вариант, который мне кажется более элегантным - с ним уменьшается связность бота и pvpgn. Как известно, чем меньше связность отдельных модулей, тем проще затем поддерживать весь проект в целом.
Ну попробую поработать да этой фичой, но кажись у пвпгн не прямой запрос а через КЭШ...
Верно, кеш может мешать отображению этой статистики на сервере в реальном времени. Чтобы этого не было, нужен другой подход.
Может быть кто-то уже займется реализацией общения бота с pvpgn через команды чата, и выложит в общий доступ? https://github.com/Grief-Code/OHSystem/issues/279
Вроде бы там и не так сложно по большей части, вся информация есть. Для сервера на Lua скриптах уже все сделано, остался только бот.
Сразу бы отпали вопросы по этой части, а то каждый делает для себя по всякому, часто полурабочие решения.
Верно, кеш может мешать отображению этой статистики на сервере в реальном времени. Чтобы этого не было, нужен другой подход.
Может быть кто-то уже займется реализацией общения бота с pvpgn через команды чата, и выложит в общий доступ? https://github.com/Grief-Code/OHSystem/issues/279
Вроде бы там и не так сложно по большей части, вся информация есть. Для сервера на Lua скриптах уже все сделано, остался только бот.
Сразу бы отпали вопросы по этой части, а то каждый делает для себя по всякому, часто полурабочие решения.
Про "OHSYSTEM" можно просто забыть...
Взять чистого бота и добавить какие функции вам интересуется и запустить...
А со сервера требуется чтобы Игрок передавал игроку в "ЛС" скрытно, ну как сделано в /clan msg...
На счет "полурабочих" решений, бывает часто вылеты с базой и краши, не знаю чем это связано, но уже успешенно сделал статистику. Ну если поюзать поиск то найдете решение.
forums.pvpgn.pro → [RU] Warcraft → Статистика из ghost в pvpgn