Kurzdor 451 Posted November 19, 2020 (edited) Доброго времени суток! Нашлось желание сделать модик, который улучшает интеграцию игры с Discord-ом, есть даже небольшой Proof-of-Concept, что такое возможно сделать в виде *.wotmod-а. Есть некоторый опыт в разработке, правда не на Python. Мне нужно подписаться на данные события/понимать что где сейчас игрок находится/делает: Запуск игры - готово, реализовано через init() В ангаре - готово, реализовано через onAccountShowGUI() В ангаре (AFK) Создание взвода в ангаре/Вход игрока во взвод, получение их количества Нажатие на кнопку "В Бой", статус - поиск боя Вход в бой, получение данных о типе боя, карте, технике, получение информации на счёт состояния во взводе игрока и кол-во игроков во взводе Унитожение техники игрока Выход из боя Просмотр результатов боя Просмотр реплея через *.wotreplay - получения данных о реплее(боя) - Карта, Техника Выход из игры, чтобы правильно закончить работу Discord RPC - готово, реализовано через fini() Если есть способы подписки на события получше тех, которые уже использованы сейчас, я не против и услышать и их. Буду очень рад любой помощи! Спасибо. Edited November 19, 2020 by Kurzdor 3 Quote Share this post Link to post Short link Share on other sites
StranikS_Scan 4,210 #492782 Posted November 19, 2020 Для "входа" и "выхода" предусмотрены события onBecomePlayer и onBecomeNonPlayer. Они есть в классе аккаунта PlayerAccount https://github.com/StranikS-Scan/WorldOfTanks-Decompiled/blob/0e3bdba56ecac655dfefaeb409bc33fbdbbad492/source/res/scripts/client/Account.py#L218 https://github.com/StranikS-Scan/WorldOfTanks-Decompiled/blob/0e3bdba56ecac655dfefaeb409bc33fbdbbad492/source/res/scripts/client/Account.py#L259 а есть в классе игрока в бою Avatar https://github.com/StranikS-Scan/WorldOfTanks-Decompiled/blob/0e3bdba56ecac655dfefaeb409bc33fbdbbad492/source/res/scripts/client/Avatar.py#L275 https://github.com/StranikS-Scan/WorldOfTanks-Decompiled/blob/0e3bdba56ecac655dfefaeb409bc33fbdbbad492/source/res/scripts/client/Avatar.py#L387 1 час назад, Kurzdor сказал: AFK А ангаре АФК можно реализовать только путем хука перемещения курсора мышки и нажатий клавиш на клавиатуры. Если изменений нет в течении определенного промежутка времени - то юзвер АФК. Поищите в исходниках слово LOBBY_VIEW_MOUSE_MOVE. Что касается нажатия клавиш то юзаем InputHandler.g_instance.onKeyDown. 1 час назад, Kurzdor сказал: получение данных о типе боя, карте, технике, получение информации на счёт состояния во взводе игрока и кол-во игроков во взводе https://github.com/StranikS-Scan/WorldOfTanks-Decompiled/blob/0e3bdba56ecac655dfefaeb409bc33fbdbbad492/source/res/scripts/client/Avatar.py#L288 2 часа назад, Kurzdor сказал: Унитожение техники игрока https://github.com/StranikS-Scan/WorldOfTanks-Decompiled/blob/0e3bdba56ecac655dfefaeb409bc33fbdbbad492/source/res/scripts/client/Avatar.py#L2296 https://github.com/StranikS-Scan/WorldOfTanks-Decompiled/blob/0e3bdba56ecac655dfefaeb409bc33fbdbbad492/source/res/scripts/client/Avatar.py#L2492 2 часа назад, Kurzdor сказал: Выход из боя https://github.com/StranikS-Scan/WorldOfTanks-Decompiled/blob/0e3bdba56ecac655dfefaeb409bc33fbdbbad492/source/res/scripts/client/Avatar.py#L529 2 часа назад, Kurzdor сказал: Просмотр результатов боя Получение cообщения с результатами с сервера тут https://github.com/StranikS-Scan/WorldOfTanks-Decompiled/blob/0e3bdba56ecac655dfefaeb409bc33fbdbbad492/source/res/scripts/client/Avatar.py#L2151 2 часа назад, Kurzdor сказал: Просмотр реплея Объект ниже по ссылке отвечает за реплеи. Изучаем его. https://github.com/StranikS-Scan/WorldOfTanks-Decompiled/blob/0e3bdba56ecac655dfefaeb409bc33fbdbbad492/source/res/scripts/client/game.py#L82 2 Quote Share this post Link to post Short link Share on other sites
QuiseShampe 10 #492786 Posted November 19, 2020 1 час назад, StranikS_Scan сказал: А ангаре АФК можно реализовать только путем хука перемещения курсора мышки и нажатий клавиш на клавиатуры. Если изменений нет в течении определенного промежутка времени - то юзвер АФК. Поищите в исходниках слово LOBBY_VIEW_MOUSE_MOVE. Что касается нажатия клавиш то юзаем InputHandler.g_instance.onKeyDown. Как вариант можно ещё использовать нативный метод, ЕМНИП он работает и для свернутой игры... TIMEOUT = 5 def idle(): print 'Idle handler fired' def wakeup(): print 'Wakeup handler fired' BigWorld.addIdleCallbackForDelay(TIMEOUT, idle, wakeup) 2 Quote Share this post Link to post Short link Share on other sites
Kurzdor 451 #492788 Posted November 19, 2020 @StranikS_Scan @QuiseShampe огромное спасибо за помощь! Quote Share this post Link to post Short link Share on other sites
DuMaH_K 15 #503004 Posted May 26, 2021 @Kurzdor Дело встало?) Quote Share this post Link to post Short link Share on other sites
Kurzdor 451 #503148 Posted May 29, 2021 On 5/26/2021 at 3:21 PM, DuMaH_K said: @Kurzdor Дело встало?) Пока что встало, возможно будет снова желание и время - вернусь. Quote Share this post Link to post Short link Share on other sites
Kurzdor 451 #508264 Posted September 10, 2021 (edited) On 11/19/2020 at 9:10 PM, QuiseShampe said: Как вариант можно ещё использовать нативный метод, ЕМНИП он работает и для свернутой игры... TIMEOUT = 5 def idle(): print 'Idle handler fired' def wakeup(): print 'Wakeup handler fired' BigWorld.addIdleCallbackForDelay(TIMEOUT, idle, wakeup) Это рабочий вариант, только тем кто будет использовать его -- WG перед добавлением своего idle callback-а в ангаре удаляет все, которые уже зарегистрированы. TIMEOUT задаётся в секундах. Edited September 10, 2021 by Kurzdor Quote Share this post Link to post Short link Share on other sites
Kurzdor 451 #510574 Posted November 1, 2021 Релиз.https://kr.cm/f/t/69349/ 2 Quote Share this post Link to post Short link Share on other sites