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

@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

@Polyacov_Yury 

01.12.2016 в 16:27, Polyacov_Yury сказал:

Да понял я, понял. Выкладываю.

 

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

 

dHdxp1N.png

Модификация - это возрождение всем известного мода от locastan, какое-то время поддерживаемого сначала tehHedger, потом - TRJ_VoRoN.

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

 

Автор не несет ответственности за написанное в конфигах и/или за последствия использования модификации (бан за флуд/мат/оскорбления). А то токсинов понапишут, а Юра виноват :P

 

Настройка

  Показать содержимое

post-8065-0-19453800-1481213350_thumb.png

При выборе самого первого скина в настройках (или установке 0 в selectedConfig) все команды в радиальном меню будут стандартными, но мод добавит отправку сообщения "Перезаряжаюсь!" по клавише С.

Основной конфиг

  Показать содержимое



{
//  Глобальный триггер.
    "enabled": true,
//  задержка между отправкой сообщения в чат (в мс)
    "chatDelay": 550,
//  задержка между нажатием хоткея и отправкой команды в чат, а также между хоткеями (в мс)
    "hotDelay": 350,
//  клавиша для отображения альтернативного меню (специфического для карты)
    "mapMenu_Key": ["KEY_LALT"],
//  выбранный скин. По умолчанию - мой ^_^
    "selectedConfig": 11
}

 

Создание скина

  Показать содержимое

Конфиг состоит из нескольких похожих опциональных секций. Их типы:




"TankMenu": {},  // стандартное меню, если не указано для типа танка
"lightTankMenu": {}, // меню по типу танка
"mediumTankMenu": {},
"heavyTankMenu": {},
"AT-SPGMenu": {},
"SPGMenu": {},
"tankSpecific": {}, // тут можно задать индивидуальные настройки для танка/группы танков
"Map_default": {},  // стандартное альтернативное меню
"Map_mapname": {}, // меню, появляющееся вместо альтернативного на определенной карте
"hotkeyOnly": [] // команды, которые в Розе вы не увидите, но будут доступны по хоткею

Во всех секциях, кроме hotkeyOnly и tankSpecific (о второй ниже), добавляются три опциональные секции:




"default": [], // прицел ни на кого не наведен
"ally": [], // прицел наведен на союзника
"enemy": [] // прицел наведен на противника

В секциях, тип которых - [], добавляются собственно команды. В секциях кроме hotkeyOnly отобразятся в розе только первые 6 команд. Однако, по хоткею доступны все команды.

Структура команды:




{
"title": "Так точно!",  // название команды, отображаемое в радиальном меню.
"icon": "Attack", // Иконка.
"text": "{randPart}", // текст сообщения. Поддерживаются макросы.
"chatMode": "All", // Режим чата: Squad, Team, All (третий отправляет в командный чат, если бой не тренировочный)
"command": "POSITIVE", // можно отправить встроенную в клиент команду.
"ping": "A2 B4 {ownPos}", // список квадратов для прокликивания. разделяется пробелом. {ownPos} - своя позиция, {viewPos} - куда смотрит камера.
"variants": [
    "text1",  // варианты подстановки вместо макроса randPart.
    "text2",
    "text3"
],
"sequentChoice": true, // дописываем, если хотим, чтобы сообщения из randPart подставлялись по порядку. Поле опциональное, стандартное значение - false
"cooldown": 1.1, // антиспам-задержка между отправками этой команды в секундах. стандартное значение - 1.1
"hotKey": ["KEY_LALT", "KEY_2"], // задание комбинации клавиш. можно прописывать так: [["KEY_LALT", "KEY_RALT"], "KEY_8"] (порядок не важен). Тогда действие сработает, если прожат левый или правый альт и 8.
"inPostmortem": False, // Команда сработает, даже если танк игрока мертв.
}

В команде все поля опциональны.

Макросы для поля text и подстановок в variants:




{name} - ник цели или ваш ник, если цели нет
{vehicle} - название танка цели или вашего танка
{clan} - аббревиатура клана цели или вашего танка
{randPart} - подстановка рандомного или следующего текста из variants
{viewPos} - квадрат, в который смотрит камера
{ownPos} - квадрат местонахождения вашего танка
{reload} - оставшееся время перезарядки
{ammo} - количество снарядов в барабане
{ownVehicle} - название вашего танка

Особо выскажусь насчет reload и ammo. В большинстве случаев достаточно в команде написать "command": "RELOADINGGUN", и эти значения будут в стандартном сообщении при надобности.

Иконки | Встроенные команды // значения:




Attack | ATTACK // В атаку!
Backtobase | BACKTOBASE // Защищайте базу!
Yes | POSITIVE // Так точно!
No | NEGATIVE // Никак нет!
Helpme| HELPME // Нужна помощь!
Reload | RELOADINGGUN // Перезаряжаюсь!
Followme | FOLLOWME // За мной!
Turnback | TURNBACK // Назад!
Helpmeex | HELPMEEX // Помоги!
Support | SUPPORTMEWITHFIRE // Поддержите огнем!
AttackSPG | ATTACKENEMY // Атакую
Stop | STOP // Стой!

Насчет tankSpecific.




tankSpecific: {
"имя_танка1": {}, // настройка идентична таким секциям, как TankMenu
"имя_группы1": {},
"имя_танка2": "имя_танка1", // имя_танка1 обязано присутствовать в конфиге
"имя_танка3": "имя_группы1"
}

P.S. Если команда пустая, то есть выглядит так:




"default": [
    {"title": "some_command"}, // не пустая
    {},  // вот так выглядит пустая
    {"icon": "Stop"} // тоже не пустая
]

то вместо нее подхватится стандартная. Этим можно воспользоваться для уменьшения занимаемого места в конфиге.

 

Скачать

  Показать содержимое

Список изменений

  Показать содержимое

Ссылка на GitHub (там всегда свежее)

12.07.2018

  • Ядро: обновлён код, отвечающий за хранение настроек горячих клавиш.
  • Мелкое исправление мелкой ошибки.

10.07.2018

  • Большой рефакторинг кода.

04.12.2017

  • Исправлена ошибка, возникшая при скоростном ремонте ошибки, исправленной вчера.

03.12.2017

  • Команды по хоткею больше не отправляются после гибели танка игрока. Можно отключить, написав в конфиге команды "inPostmortem": True.

29.11.2017

  • Исправлена ошибка, возникшая при обновлении Ядра.

15.11.2017

  • Обновление Ядра до версии 2.4.0.

28.10.2017

  • Аналитика отправляет дату компиляции скрипта.

26.10.2017

  • Исправление под многобашенность.

21.09.2017

  • Обнаружена и исправлена ошибка обработки оторванных башен.

04.09.2017

  • Исправлена ошибка в новом режиме боев.

13.08.2017

  • Исправлен редкий баг при определении танка игрока.

2.1.2 (18.06.2017)

  • Новая версия Ядра.

2.1.1 (02.03.2017)

  • Переезд в .wotmod-пакет.

2.1.0 (13.12.2016)

  • Переход на modsCore 2.0
  • Исправлена обработка hotkeyOnly.

08.12.2016

  • Убрано сообщение в сервисном канале. Галочка для его убирания заменена на надпись "Специально для ...".
  • Исправлена блокировка клика по миникарте при отправке перед ним сообщения в чат.
  • Мелкие правки моего конфига.

04.12.2016

  • Добавлен конфиг от Ogrebay.
  • Мелкие правки логики.

01.12.2016

  • Официальный релиз.
  • Добавлена секция tankSpecific.
  • Мелкие правки логики.
  • Запилена куча конфигов.

2.0.0 (26.11.2016)

  • Первый релиз.

Спасибки

  Показать содержимое

Авторам мода - за старые исходники :)

Команде wotspeak.ru - за новый модуль оперативной памяти :З

Здрасти Юрий! У меня большая просьба, Перелазил в гугле, яндексе, яху, кореанрандом, ютуб и т.д, ответа нет нигде! Только краткие описание.. ссылки..наброски..и опять ссылки на краткие пособия! Вопрос к вам, у вас есть возможность, показать в видео как адаптировать этот мод под текущий патч! Читать всякие краткие пособия я не собираюсь, мне надо посмотреть само видео как адаптировать мод к патчу! (увидеть картинку с надписью и увидеть просто надпись! что больше запомнится? Конечно картинка с надписью чем просто надпись, вот у меня так память работает, увижу..! больше запомню чем просто почитаю, вот по этому и прошу видеотутор про адаптацию), программы для редактирования, декомпиляции, для работы с флешами и т.д это всё есть у меня и не большое представление как с ними работать есть! и за пк я сижу уже с 93 года! (пару фраз я то отредактировал в файле ingame_help.mo,такие как захват, помогу, спасибо, слушаюсь капитан, и т.д, но это ведь совсем не то) Интересуюсь именно про расширенную розу команд! Есть такая возможность? 

Share this post


Link to post

Short link
Share on other sites
25 минут назад, Иван Алексеевич сказал:

@Polyacov_Yury 

Здрасти Юрий! У меня большая просьба, Перелазил в гугле, яндексе, яху, кореанрандом, ютуб и т.д, ответа нет нигде! Только краткие описание.. ссылки..наброски..и опять ссылки на краткие пособия! Вопрос к вам, у вас есть возможность, показать в видео как адаптировать этот мод под текущий патч! Читать всякие краткие пособия я не собираюсь, мне надо посмотреть само видео как адаптировать мод к патчу! (увидеть картинку с надписью и увидеть просто надпись! что больше запомнится? Конечно картинка с надписью чем просто надпись, вот у меня так память работает, увижу..! больше запомню чем просто почитаю, вот по этому и прошу видеотутор про адаптацию), программы для редактирования, декомпиляции, для работы с флешами и т.д это всё есть у меня и не большое представление как с ними работать есть! и за пк я сижу уже с 93 года! (пару фраз я то отредактировал в файле ingame_help.mo,такие как захват, помогу, спасибо, слушаюсь капитан, и т.д, но это ведь совсем не то) Интересуюсь именно про расширенную розу команд! Есть такая возможность? 

 

Обычно видеогайд нужен по чему-то готовому. Условно - "как я рисовал вот этот арт с понями, рисуйте свои похожим образом".

Так вот. Чтобы снять гайд о том, как починить мод, мне нужно починить мод.

Суть проблемы в том, что его, по факту, надо не починить, а процентов на 80 с нуля переписать, поскольку ВГ переработали код, на котором мод основан.

  • Upvote 1

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