Jump to content
Korean Random
goodman

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

Recommended Posts

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

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

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

Share this post


Link to post

Short link
Share on other sites

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

Share this post


Link to post

Short link
Share on other sites

@sirmax и я о том же. В дефолте прописать ключи, и оставить возможность использовать шаблоны. 

Share this post


Link to post

Short link
Share on other sites

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

  • Upvote 1

Share this post


Link to post

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

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

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

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

 

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

i18n.makeString('#system_messages:connected')

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

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

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

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

Edited by night_dragon_on

Share this post


Link to post

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

Share this post


Link to post

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' не удалась. Недостаточно бон.

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

Share this post


Link to post

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

Share this post


Link to post

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

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

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

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

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

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

  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

я ж говорю - посмотрите, как сделано в отключении тултипов

  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

@sirmax , текст то уберется таким способом

@overrideMethod(i18n, 'makeString')

Но само сообщение пустое будет висеть в ЦУ.

Edited by night_dragon_on

Share this post


Link to post

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

Share this post


Link to post

Short link
Share on other sites

@night_dragon_on ну вместо ''  можно возвращать какую-нибудь последовательность, а в as_setMessagesListS перехватывать эту последовательность. 

Share this post


Link to post

Short link
Share on other sites

ну так у меня и сделано, вы бы хоть посмотрели

Share this post


Link to post

Short link
Share on other sites

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

return XVM_TOOLTIPS.HIDE

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

if XVM_TOOLTIPS.HIDE not in tooltipId

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

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

Edited by night_dragon_on

Share this post


Link to post

Short link
Share on other sites

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

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

Edited by sirmax
  • Upvote 1

Share this post


Link to post

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

Share this post


Link to post

Short link
Share on other sites

@sirmax, есть ли возможность, при просмотре риплеев, сделать загрузку скриптов из py_macro пораньше, перед событием onBecomePlayer?

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