Jump to content
Korean Random
Polyacov_Yury

[Сломан в 1.10] Настраиваемое боевое радиальное меню команд

Recommended Posts

1 hour ago, Polyacov_Yury said:

Предлагаешь нагромоздить конвертацию в кортежи в ридер JSON-конфигов?

Предлагаю для всех типов данных и контейнеров обдуманно и осознанно выбирать базовые типы. Везде и всегда.

On 10/8/2019 at 5:32 PM, Polyacov_Yury said:

Мысль, конечно, неплохая. Но применить можно не везде.

Предлагаю посмотреть как это реализовано у меня - в код модификации вшита базовая структура файла конфигурации, в ней для каждого параметра прописаны типы данных и значения по умолчанию. В процессе чтения файла конфигурации происходит автоматическое преобразование полученных из файла сырых данных в целевой объект данных в соответствии с указанным в базовой структуре типом, определяющим характер и последовательность преобразований.

К примеру, так в базовой структуре конфигурации выглядит сочетание клавиш, так оно прописано в файлах конфигурации, в конечной рабочей конфигурации параметр является экземпляром вот этого класса, а вот, собственно, цепочка преобразования (раз, два). А вот как выглядит проверка и что происходит на самом деле. Еще немного магии происходит здесь и здесь. В результате проверки получается обработчик, который и управляет конечным значением параметра. Параметр switch определяет, в каком режиме работает сочетание - переключатель (каждое нажатие инициирует переключение статуса на противоположное) или кнопка (активный статус только при удержании в нажатом положении). Параметр invert инвертирует push-событие клавиатуры - переключатель срабатывает на отпускание основной клавиши сочетания, а кнопка возвращает неактивный статус при удержании клавиши в нажатом положении (для примера). Параметр repeat включает обработку повторов при длительном удержании клавиши в нажатом положении, практически никогда не используется.

Чтение локализованных текстовых шаблонов с макросами реализовано аналогичным образом - так описан шаблон в базовой структуре конфигурации, а так он выглядит в файлах конфигурации (это ссылка на файл локализации). Полную цепочку преобразований при необходимости отследишь самостоятельно. Вот так скромно и неприметно выглядит форматирование текстового шаблона в коде модификации, а вот что происходит на самом деле.

Думаю в качестве примера по переносу сложности из логики в данные вполне пойдет. Что касается кода в классах (типах) данных - он пишется один раз, отлаживается в модульном режиме, после чего про внутренности можно вообще забыть, особенно если при разработке модуля были предусмотрены все возможные (адекватные и логичные, естественно) варианты его использования, и вероятность возникновения необходимости добавления дополнительного функционала минимальна.

Так что у меня уже давным-давно металл автоматически конвертируется в танки, причем тихо, скромно, неприметно и практически беспалевно.

On 10/8/2019 at 5:32 PM, Polyacov_Yury said:

Да и не очень понятно, как я их к Танкам прикручу

Могу лишь настоятельно посоветовать прочитать внимательно предоставленные ранее материалы еще раз с самого начала. Хотя ладно, пожалуй немного упрощу тебе задачу.

Quote

Правило разделения: Отделяйте правила (policy) от механизма (mechanism); отделяйте интерфейс от движка (engine).

Хуки - это интерфейс, а модули и классы - это движок. Разделяй и властвуй. А при отладке некоторых модулей (при правильном подходе к их написанию) можно обойтись даже без клиента игры, хватает и обычного питона.

Share this post


Link to post

Short link
Share on other sites

Ну что, товарищи, продолжаем чинить очевидные баги в никому не нужном очень редко используемом функционале?

 

@NooBooL мне тут в личку пожаловался, мол, не хочет радиальное меню открываться при наведении прицела на противника. После долгих пыток (включающих попытки выйти в бой и не забыть попробовать открыть розу команд, наведя прицел на противника) удалось выяснить, что происходит (вернее, происходило) это только на арте.

И таки действительно, я совершил багулю в коде, который отправлял данные в, собственно, само радиальное меню. Баг исправлен, мод перезалит, все дела.

 

Почему функционал не нужный? Да потому что баг в коде сидел никем не замеченным *смотрит на часы* почти полгода - с 7 октября 2019 года.

 

P.S. Смотрите, что нашёл. :D

class BattleReplay(object):
    def handleKeyEvent(self, isDown, key, mods, isRepeat, event):
        player = BigWorld.player()
        if not isPlayerAvatar():
            return False
        isCursorVisible = player.isForcedGuiControlMode()
        if not self.isPlaying:
            return False
        elif cmdMap.isFiredList((CommandMapping.CMD_CM_LOCK_TARGET,
         CommandMapping.CMD_CM_LOCK_TARGET_OFF,
         CommandMapping.CMD_CM_POSTMORTEM_NEXT_VEHICLE,
         CommandMapping.CMD_CM_POSTMORTEM_SELF_VEHICLE,
         CommandMapping.CMD_RADIAL_MENU_SHOW,
         CommandMapping.CMD_RELOAD_PARTIAL_CLIP), key) and isDown and not isCursorVisible:
            suppressCommand = True
        if suppressCommand:
            return True  # при возвращении True дальнейшие хендлеры нажатий клавиш не отрабатывают
        return False

Если коротко - то если в реплее по тем или иным причинам курсор отображается - например, зажат Ctrl - то все вышеперечисленные команды (вкл/выкл автоприцел, переключиться на другой или свой танк в посмертном режиме, перезарядить барабан и, что самое главное - показать радиальное меню) как минимум отправляются на обработку, если, конечно, выполнены все остальные условия. Поскольку для радиального меню таковыми является отсутствие открытых окон (вроде диалогов, меню по Tab или меню, где отдел двигания кнопки хлеб зарабатывает) - то оно честно открывается.

Share this post


Link to post

Short link
Share on other sites
On 1/24/2017 at 9:14 PM, Daryl said:

Please for 0.9.17.0.3, make it in french langage! :)

 

Hello guys

An old post mentionned this, it is done bellow  :

{
    "battleMessage_commandOnDelay": "Cette commande est désactivée, veuillez patienter.",
    "description": "Radial Menu",
    "UI_setting_mapMenu_key_text": "Raccourci menu alternatif",
    "UI_setting_mapMenu_key_tooltip": "Active le menu Radial alternatif à l'aide de cette touche. Un menu spécifique à la carte s'affiche si la config est paramétrée.",
    "UI_setting_selectedConfig_defaultMeta": "Messages par défaut",
    "UI_setting_selectedConfig_text": "Configuration active :",
    "UI_setting_selectedConfig_tooltip": "Cette config sera utilisée par le menu Radial."
}

See you :)

Edited by Hydros

Share this post


Link to post

Short link
Share on other sites
7 минут назад, Hydros сказал:

 

Hello guys

An old post mentionned this, it is done bellow  :


{
    "battleMessage_commandOnDelay": "Cette commande est désactivée, veuillez patienter.",
    "description": "Radial Menu",
    "UI_setting_mapMenu_key_text": "Raccourci menu alternatif",
    "UI_setting_mapMenu_key_tooltip": "Active le menu Radial alternatif à l'aide de cette touche. Un menu spécifique à la carte s'affiche si la config est paramétrée.",
    "UI_setting_selectedConfig_defaultMeta": "Messages par défaut",
    "UI_setting_selectedConfig_text": "Configuration active :",
    "UI_setting_selectedConfig_tooltip": "Cette config sera utilisée par le menu Radial."
}

See you :)

 

Thanks. This lang would only affect the mod's settings and a message about command being on cooldown. I think, they requested a "skin" - the command config. I have about a dozen russian configs and one english bundled, but other languages are expected to be created by users manually.

Share this post


Link to post

Short link
Share on other sites

Ну что, посоны, Радиалка больше нинужна?)

 

 

 

Share this post


Link to post

Short link
Share on other sites

@Polyacov_Yury, это если у них получится что-то действительно универсальное, и в тоже время гибкое, настраиваемое под индивидуальные предпочтения, во что верится с трудом.

 

PS может быть кому пригодится: 

 

В архиве:

configs\PYmods\PYmodsGUI\i18n\uk.json
configs\PYmods\RadialMenu\i18n\uk.json
configs\PYmods\RadialMenu\RadialMenu.json
configs\PYmods\RadialMenu\skins\ecommand_en.json
configs\PYmods\RadialMenu\skins\ecommand_uk.json

uk.json          - файли налаштувань моду українською;
RadialMenu.json  - параметри моду з коментарями українською;
ecommand_uk.json - Бойове радіальне меню українською:
                   в основі відповідне до стандартного меню клієнта з доданням окремої команди щодо інформування про висвітлення:
                   "Висвітлений в {ownPos}", "ping": "{ownPos}" (в секції "hotkeyOnly", з активацією по "hotKey": ["KEY_F9"]);
ecommand_en.json - Battle Radial Menu in English:
                   basically the same as standard vanilla one, with the separate supplementary command to inform on spotting:
                   "Spotted at {ownPos}", "ping": "{ownPos}" (section "hotkeyOnly", binded to "hotKey": ["KEY_F9"]).

 

PYmods_RadialMenu_uk_ua_Ukrainian_en_English.zip

 

 

Edited by beb

Share this post


Link to post

Short link
Share on other sites
5 часов назад, beb сказал:

@Polyacov_Yury, это если у них получится что-то действительно универсальное, и в тоже время гибкое, настраиваемое под индивидуальные предпочтения, во что верится с трудом.

 

Не знаю. Лично я поглядел и что-то не увидел у них того, что ещё не предлагают 95% конфигов под радиалку (за исключением обкладывания цели матюками, конечно).

  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

Здравствуйте многоуважаемый.
ВГ высрала свою радиалку, поменяв всё, а у игроков эта шляпа вызывает только дискомфорт.
Будет ли дальше поддержка этого мода? Возможно он единственное спасение от гомункула что сотворила ВГ.

Edited by EngineExt

Share this post


Link to post

Short link
Share on other sites
15 часов назад, EngineExt сказал:

Здравствуйте многоуважаемый.
ВГ высрала свою радиалку, поменяв всё, а у игроков эта шляпа вызывает только дискомфорт.
Будет ли дальше поддержка этого мода? Возможно он единственное спасение от гомункула что сотворила ВГ.

 

Там не только внешне гомункул, но и внутренне. Так что ситуация примерно как с CamoSelector'ом.

 

Напомню, https://boosty.to/polyacov_yury и https://patreon.com/polyacov_yury - способы отвлечь меня от работы на работе в пользу работы над модиками.

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

  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

@Polyacov_Yury , скажите, а нельзя ли сделать упрощенную версию, типа RadialMenuMini, которая бы по сути не затрагивала стандартное клиентское меню, а только лишь реализовывала функцию добавления отсутствующих в нем команд

"hotkeyOnly": [] // команды, которые в Розе вы не увидите, но будут доступны по хоткею

Мне кажется, соответствующий код мини-меню будет гораздо проще и компактнее полного, и в тоже время такой мод может быть востребованным.

В текущей реализации мода мой рабочий конфиг:

{
"default": {},
"hotkeyOnly":  [
    {
    "title": "Spotted",
    "icon": "Helpme",
    "text": "Spotted at {ownPos}",
    "chatMode": "Team",
    "ping": "{ownPos}",
    "hotKey": ["KEY_F9"]
    },
    {
    "title": "Attack",
    "icon": "Support",
    "text": "Attention to {viewPos}",
    "chatMode": "Team",
    "ping": "{viewPos}",
    "hotKey": ["KEY_F10"]
    }
]
}

 

Share this post


Link to post

Short link
Share on other sites

Ну, насчёт Attention - есть кнопка Т в стандартном клиенте.

Про Spotted интереснее, конечно.

 

Хотя, если так подумать, на Spotted моды есть.

Ну и концепции квадратов в игре больше нет, так что тыкать на себя при засвете довольно бессмысленно.

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.

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...