Jump to content
Korean Random

Динамические макросы в Python


Recommended Posts

2 часа назад, sirmax сказал:

вместо локализованного текста нужно использовать ключи локализации

Может сделать, чтобы оба варианта поддерживалось? 

Link to comment
Short link
Share on other sites

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

Link to comment
Short link
Share on other sites

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

  • Upvote 1
Link to comment
Short link
Share on other sites

10 часов назад, sirmax сказал:

только вместо локализованного текста нужно использовать ключи локализации

5 часов назад, sirmax сказал:

хотя считаю, что ключей достаточно

 

Ключами немного не то получается, в шаблонах прописываем ключ:

i18n.makeString('#system_messages:connected')

Получаем на выходе:

Добро пожаловать на сервер '%s' World of Tanks!

По этому шаблону мы не можем скрыть текст в системном канале т.к наименование сервера не указано.

И так не только с сервером, в локализации множество фраз аналогично дополняется (Ремонт: ..., Куплено: ... и т.п).

Edited by night_dragon_on
Link to comment
Short link
Share on other sites

@night_dragon_on а если так:

connectionMgr = dependency.instance(IConnectionManager)
i18n.makeString('#system_messages:connected'.format(connectionMgr.serverUserName))

P.S. А, это же в конфиге надо прописывать

P.P.S. ключи надо сравнивать раньше. Хотя раньше негде.

 

Edited by ktulho
Link to comment
Short link
Share on other sites

17 минут назад, ktulho сказал:

ключи надо сравнивать раньше

 

Я же ранее упомянул что помимо именно этой фразы полно других в которые так или иначе данные подставляются, например:

i18n.makeString('#system_messages:artefact_apply/money_success')
%(kind)s '%(name)s' снято с машины. Потрачено %(money)s.

i18n.makeString('#system_messages:artefact_apply/success')
%(kind)s '%(name)s' установлено на машину.

i18n.makeString('#system_messages:artefact_buy/not_enough_crystal')
Покупка %(kind)s '%(name)s' не удалась. Недостаточно бон.

И т.п., так что первоначальный вариант записи непосредственно текстом единственно возможный.

Link to comment
Short link
Share on other sites

@ktulho поймал ошибку и вылет с новым скриптом infoAutoAim.py

 

Захватил противника в автоприцел, он скрылся передо мной за камнем, после чего пропал из засвета.

Когда появился - игра вылетела, в логе - указанная ошибка.

 

Реплей, к сожалению, не сохранился из-за вылета. Пустой temp.wotreplay остался.

2018-06-13 18:01:41.495: INFO: =============================
2018-06-13 18:01:41.495: INFO: 2018-06-13 18:01:41: [ERROR] mods/xfw/python/xfw/events.pyc
2018-06-13 18:01:41.495: ERROR: Traceback (most recent call last):
2018-06-13 18:01:41.495: ERROR:   File "mods/xfw/python/xfw/events.py", line 57, in __event_handler
2018-06-13 18:01:41.496: ERROR:   File "mods/xfw/python/xfw/events.py", line 24, in fire
2018-06-13 18:01:41.497: ERROR:   File "res_mods/configs/xvm/py_macro\infoAutoAim.py", line 79, in onLockTarget
2018-06-13 18:01:41.497: ERROR:     hideMarker(oldTarget)
2018-06-13 18:01:41.497: ERROR:   File "res_mods/configs/xvm/py_macro\infoAutoAim.py", line 31, in hideMarker
2018-06-13 18:01:41.497: ERROR:     node = target.appearance.compoundModel.node('hull')
2018-06-13 18:01:41.497: ERROR: AttributeError: 'NoneType' object has no attribute 'appearance'
2018-06-13 18:01:41.497: INFO: =============================

Полный лог в аттаче.

python.log

Edited by ADv
  • Upvote 1
Link to comment
Short link
Share on other sites

18 минут назад, night_dragon_on сказал:

Я же ранее упомянул что помимо именно этой фразы полно других в которые так или иначе данные подставляются, например:

Как раз с этими примерами проблем нет. Их все можно перехватить в SystemMessages.pushI18nMessage()

7 минут назад, ADv сказал:

поймал ошибку и вылет с новым скриптом infoAutoAim.py

Спасибо, но лучше писать в соответствующую тему.

  • Upvote 1
Link to comment
Short link
Share on other sites

Может так:

@overrideMethod(i18n, 'makeString')
def _i18n_makeString(base, key, *args, **kwargs):
    if key in config.get('hangar/hideMessagePatterns', []):
        return ''
    return base(key, *args, **kwargs)

В принципе здесь и проверку шаблонов можно делать.

Edited by ktulho
Link to comment
Short link
Share on other sites

Так смотрели, если ключ совпал с тем что прописано в конфиге возвращается константа:

return XVM_TOOLTIPS.HIDE

Но я так и не понял почему она далее ищется в tooltipId

if XVM_TOOLTIPS.HIDE not in tooltipId

Она же имеет постоянное значение, на нее ничего не присваивается.

(или у меня просто голова после смены не варит сегодня и я чего то перед носом не вижу :smile:).

Edited by night_dragon_on
Link to comment
Short link
Share on other sites

ищется, чтобы скрыть. в первом методе помечаем то, что надо скрыть, во втором - скрываем.

"not in" - потому что tooltipId - это уже локализованный текст (почему так называется переменная - это к WG). А она может быть форматированной, с лишними тегами. Поэтому ищем уникальный текст во всей строке.

Edited by sirmax
  • Upvote 1
Link to comment
Short link
Share on other sites

  • 2 weeks later...
В 13.6.2018 в 09:10, sirmax сказал:

meaning that the keys are universal for any language, respectively, the config will not be tied to one localization. Otherwise, the feature will be limited, it will not be convenient to use.

this mod: http://forum.worldoftanks.eu/index.php?/topic/496784-0919-tidy-messenger/ can filter messages by message ID, language independet. maybe his approach is interesting in this case?

Link to comment
Short link
Share on other sites

  • 2 weeks later...

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