Jump to content
Korean Random
GPCracker

Улучшенная система прицеливания / Advanced Aiming System

Recommended Posts

Upd 2.1. В очередной раз понимаю, что у некоторых разрабов WoT либо руки реально из одного места, либо мозг не варит, либо просто никто ничего не хочет делать. Все (ну кто моды не модпаком ставит) к примеру знают, что текстовые моды при установке (*.mo файлы)... нужно копировать сначала файлы из res/text, а уже потом, поверх них ставить моды.

Но мало кто в курсе, что это делать не совсем обязательно, если правильно настроить gettext модуль (ну точнее не сам gettext [это средство для локализации приложений, если кто не в курсе, загуглите, используется игрой для хранения практически всех текстов], а обертку для него, i18n) в игре, то можно подгружать файлы из любой папки. Сижу вот сейчас играюсь, смотрю что можно из него отжать.

А еще, можно (об этом есть даже тема в соседнем разделе) создавать свои файлы локализации и использовать их в своих целях.

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

translator = gettext.translation('achievements_', 'res_mods/0.9.15.0.1', languages=['text'])
Создал копию achievements.mo, добавил нижнее подчеркивание в имя (создавать файлик для тестов как-то влом). Вроде робит нормально.

Короч, для полного комфорта нужно запатчить scripts/client/helpers/i18n.py, заменить функцию _getTranslator получения транслятора (информация для @Polyacov_Yury).

Edited by GPCracker
  • Upvote 3

Share this post


Link to post

Short link
Share on other sites

Ибо использование XML для хранения больших текстовых значений не самая хорошая идея, особенно если используется HTML форматирование.

Что-то вы слишком мягко это сказали.

Share this post


Link to post

Short link
Share on other sites

Upd 2.2. Короч, запилил свой класс-локализатор с блекджеком и **** примерно ориентируясь на то, что было у картохи. В минусе имеем кучу ненужного лично мне мусора, в плюсе - более компактный вид и вызовы, ну и умеет находить нужные файлы там, где они реально лежат (ну вообще по путям шарится и файлы ищет ResMgr, он умеет).

"Весь код сей фичи"

class TranslatorsCache(dict):
	@staticmethod
	def _get_translator(domain):
		path = ResMgrUtils.basepath(ResMgrUtils.join_path('text/LC_MESSAGES', domain + '.mo'))
		return gettext.translation(domain, path, languages=['text'])

	def __missing__(self, domain):
		return self.setdefault(domain, self._get_translator(domain))

	def gettext(self, domain, message):
		return self[domain].gettext(message)

	def __repr__(self):
		return 'TranslatorsCache({})'.format(super(TranslatorsCache, self).__repr__())
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

Я тут посмотрел либу и понял, что ООП не нужно.

Что ты имеешь в виду?

Share this post


Link to post

Short link
Share on other sites

Так чем закончилась байга с Ббокс?

Пока ничем. Небольшой перерыв. Там посмотрим, может что прояснится.

Share this post


Link to post

Short link
Share on other sites

'Длиннопост лично для меня о_о'

Upd 2.1. В очередной раз понимаю, что у некоторых разрабов WoT либо руки реально из одного места, либо мозг не варит, либо просто никто ничего не хочет делать. Все (ну кто моды не модпаком ставит) к примеру знают, что текстовые моды при установке (*.mo файлы)... нужно копировать сначала файлы из res/text, а уже потом, поверх них ставить моды.

Но мало кто в курсе, что это делать не совсем обязательно, если правильно настроить gettext модуль (ну точнее не сам gettext [это средство для локализации приложений, если кто не в курсе, загуглите, используется игрой для хранения практически всех текстов], а обертку для него, i18n) в игре, то можно подгружать файлы из любой папки. Сижу вот сейчас играюсь, смотрю что можно из него отжать.

А еще, можно (об этом есть даже тема в соседнем разделе) создавать свои файлы локализации и использовать их в своих целях.

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

translator = gettext.translation('achievements_', 'res_mods/0.9.15.0.1', languages=['text'])
Создал копию achievements.mo, добавил нижнее подчеркивание в имя (создавать файлик для тестов как-то влом). Вроде робит нормально.

Короч, для полного комфорта нужно запатчить scripts/client/helpers/i18n.py, заменить функцию _getTranslator получения транслятора (информация для @Polyacov_Yury).

Информация полезная, но лично для меня не особо новая. Правда, структурирование помогло с, за что я благодарен. Одна вещь меня гложет.

 

запатчить scripts/client/helpers/i18n.py

Именно с этого начинался ButtonReplacer, и именно от этого я всеми силами пытался уйти. И именно поэтому он сейчас чуть ли не единственный мод на всё комьюнити, который остался в scripts/client/mods и требует CameraNode для запуска.

Если патчинг лучше, чем "старый" загрузчик - я перепилю, с этим проблем никаких :)

А насчет создания своего файла локали и неудобства настройки текстов в XML-конфиге - я эту проблему слегка по-читерски обошел. Я использую JSON-конфиги :D

Все-таки для написания JSON-ки спец-софт (если таковым Notepad++ не считать) не требуется. Порог вхождения ниже.

А насчет "ногами деланных скриптов" - в процессе настройки и отладки Краскопульта я наткнулся на такие слова в ключах, как "loby" и "maitenance" (это только из тех, на которые я внимание обратил.) Опять же - далеко не новость :)

Пока ничем. Небольшой перерыв. Там посмотрим, может что прояснится.

А как же мое предложение домножить это всё на vehicle.compoundModel.node('chassis'), который, ели я ничего не перепутал, является матрицей коррекции положения танка относительно Мирового ЭфираПространства?

Share this post


Link to post

Short link
Share on other sites

Если патчинг лучше, чем "старый" загрузчик - я перепилю, с этим проблем никаких :)

Я имею ввиду запилить патч (в.т.ч. способом, который я использую в тех загрузчиках, что кидал у тебя в теме и загрузчиках WST), чтобы тексты работали "правильно", т.е. как все остальные нормальные файлы в папке с модами - оверлоад res согласно путям. Ибо тексты, насколько я понимаю - это единственная вещь, которую все еще нужно копировать из res в res_mods.

Там патч всего одной функции, насколько я понял. Запили поиск по i18n, посмотри кто какие функции юзает... хотя я думаю ты и так такое уже делал.

На i18n нужно накатывать только фикс, а не сам мод. Тогда это будет корректно. Это по сути фикс не для одного мода, так-то, он решает глобальную проблему.

Для себя я запилил свой ридер, лежит тут... сорян, пока только у меня на харде. Разберусь с системой - коммитну в репо. Есть еще одна идея, как можно попробовать пофиксить.

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

А насчет создания своего файла локали и неудобства настройки текстов в XML-конфиге - я эту проблему слегка по-читерски обошел. Я использую JSON-конфиги :D

Я тоже как-то юзал на одном из сторонних проектов такое дело. Надо очень многое дипиливать. Комментарии, алгоритмы чтения, преобразования некоторых форматов, которые JSON не понимает и т.д. Для мода, активно взаимодействующего с движком, BW-XML подходит больше.

Все-таки для написания JSON-ки спец-софт (если таковым Notepad++ не считать) не требуется. Порог вхождения ниже.

Согласен. Для XML - тоже. Вопрос с использованием файлов локализации как хранилища для текстов требует проработки по части возможностей реалтайм компиляции *.po файлов в памяти.

Это такие же текстовые файлы, как и JSON и XML. *.mo - это машинные файлы, т.е. бинарники. А *.po - примеры лежат в репозитории XVM в разделе разобранного клиента.

А как же мое предложение домножить это всё на vehicle.compoundModel.node('chassis'), который, ели я ничего не перепутал, является матрицей коррекции положения танка относительно Мирового ЭфираПространства?

Возможный вариант я уже описывал тебе в скайпе. Пока занят немного другими вещами. Просто домножить не прокатит, поскольку vehicle.compoundModel.node('chassis') это матрица трансформации шасси из локальных координат в глобальные. Бокс уже задан в глобальных... если ты просто домножишь - получится не пойми что. Там грамотно фиксить надо.

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

Edited by GPCracker

Share this post


Link to post

Short link
Share on other sites

ogre.ninja autoaim

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

код не мой. но слежу с огромным интересом и широко открытыми глазами.

  • Upvote 3

Share this post


Link to post

Short link
Share on other sites

[Если я опять не совсем вылетел из потока; В связи с предстоящим патчем; Разбирал тут файлопомойку; Когда-то давным-давно;]

mi917765ZT_thumb.jpg470i9dc3f3_thumb.jpg4d686451O1_thumb.jpg

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

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

Кстати, на тесте никто не пробовал катать файлик с графическим тестом коробочки? Не пофиксили случаем?

Edited by GPCracker

Share this post


Link to post

Short link
Share on other sites
On 21.07.2016 at 10:20 PM, ShadowHunterRUS said:

rm -rf /* меня выручал)

Нее, если я таким образом буду с хламом бороться... тогда обнова точно не выйдет :)

Впилил парочку простеньких батничков для обвеса GnuWin32 и gettext. Парочка ярлыков в SendTo или твик в реестре, и в пару кликов можно разбирать и собирать текстовые файлы.

Возможно, в упрощенном виде такое можно заюзать через реестр без самих батничков. Ну или по-простому можно таскать файлики на батники drag&drop'ом.

Для обычных пользователей тут нет ничего интересного

GetText.zip

 

P.S. Подробно прочитать, как это в принципе работает, можно здесь

Edited by GPCracker
Заменен аттач-дубликат

Share this post


Link to post

Short link
Share on other sites

Я вот погляжу, ты Текстовик 2.0 пилишь-пилишь... А ведь имена файлов вшиты в ключи, а ключи захардкодены в питоне :)

 

И кстати, патчинг i18n'а с привлечением своих файлов переводов не позволяет без бубен-дэнсинга применять несколько разных переводов на один и тот же ключ (как у меня с кнопкой "В бой!")

Edited by Polyacov_Yury

Share this post


Link to post

Short link
Share on other sites

Я вот погляжу, ты Текстовик 2.0 пилишь-пилишь...

Экспериментирую, что из этой механики отжать можно.

А ведь имена файлов вшиты в ключи, а ключи захардкодены в питоне :)

Если ты про макросы gettext - захардкодены частично, часть в XML-ках прописана.

И кстати, патчинг i18n'а с привлечением своих файлов переводов не позволяет без бубен-дэнсинга применять несколько разных переводов на один и тот же ключ (как у меня с кнопкой "В бой!")

А это и не нужно. Основная идея моего предложения - сделать так, чтобы файлы переводов брались не оттуда, где папка text лежит, а оттуда, где лежит реальный файл, причем у res_mods приоритет.

Как происходит, например, со скриптами или XML, недавно с переходом на новое двигло впилили и для звуков. Лично меня напрягает копировать сначала все файлы из res, потом пойми, где моды, а где оригиналы...

Edited by GPCracker

Share this post


Link to post

Short link
Share on other sites

 

 

потом пойми, где моды, а где оригиналы...
Да, кстати, еще одну вещь вспомнил, которую намного проще реализовть через Реплейсор, чем через патченный gettext.

 

Межмододельная совместимость файлов.

Я в том смысле, что, к примеру, кто-то делает кнопку "В бой!", а кто-то - меняет, допустим, заголовок окна ЛБЗ. А и то и то лежит в файле menu. Как предложишь совмещать?)

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