Jump to content
Korean Random
Kurzdor

Помощь с интеграцией Discord Rich Presence в WoT

Recommended Posts

Доброго времени суток!
Нашлось желание сделать модик, который улучшает интеграцию игры с Discord-ом, есть даже небольшой Proof-of-Concept, что такое возможно сделать в виде *.wotmod-а.

Есть некоторый опыт в разработке, правда не на Python.

 

Мне нужно подписаться на данные события/понимать что где сейчас игрок находится/делает:

  1. Запуск игры - готово, реализовано через init()
  2. В ангаре - готово, реализовано через onAccountShowGUI()
  3. В ангаре (AFK)
  4. Создание взвода в ангаре/Вход игрока во взвод, получение их количества
  5. Нажатие на кнопку "В Бой",  статус - поиск боя
  6. Вход в бой, получение данных о типе боя, карте, технике, получение информации на счёт состояния во взводе игрока и кол-во игроков во взводе
  7. Унитожение техники игрока
  8. Выход из боя
  9. Просмотр результатов боя
  10. Просмотр реплея через *.wotreplay - получения данных о реплее(боя) - Карта, Техника
  11. Выход из игры, чтобы правильно закончить работу Discord RPC - готово, реализовано через fini()

 

Если есть способы подписки на события получше тех, которые уже использованы сейчас, я не против и услышать и их.
Буду очень рад любой помощи! Спасибо.

Edited by Kurzdor
  • Upvote 3

Share this post


Link to post

Short link
Share on other sites

Для "входа" и "выхода" предусмотрены события 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

  • Upvote 2

Share this post


Link to post

Short link
Share on other sites
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)

 

  • Upvote 2

Share this post


Link to post

Short link
Share on other sites
On 5/26/2021 at 3:21 PM, DuMaH_K said:

@Kurzdor Дело встало?) 

Пока что встало, возможно будет снова желание и время - вернусь.

Share this post


Link to post

Short link
Share on other sites
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 by Kurzdor

Share this post


Link to post

Short link
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...