Jump to content
Korean Random
goodman

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

Recommended Posts

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

Готово. Заодно добавил модификаторы ctrlKey, altKey, shiftKey.

Спасибо. Проверил, работает.

  • Upvote 1

Share this post


Link to post

Short link
Share on other sites
В 20.11.2017 в 10:13, ADv сказал:

@ktulho Если можно, еще разок?) Пожалуйста


2017-11-16 19:01:36.499: INFO: =============================
2017-11-16 19:01:36.499: INFO: 2017-11-16 19:01:36: [ERROR] mods/com.modxvm.xfw/python/xfw/events.pyc
2017-11-16 19:01:36.499: ERROR: Traceback (most recent call last):
2017-11-16 19:01:36.499: ERROR:   File "mods/xfw/python/xfw/events.py", line 57, in __event_handler
2017-11-16 19:01:36.501: ERROR:   File "mods/xfw/python/xfw/events.py", line 24, in fire
2017-11-16 19:01:36.502: ERROR:   File "res_mods/configs/xvm/py_macro\anglesAiming.py", line 139, in set_gunAnglesPacked
2017-11-16 19:01:36.502: ERROR:     if not player.isObserver():
2017-11-16 19:01:36.502: ERROR: AttributeError: 'NoneType' object has no attribute 'isObserver'
2017-11-16 19:01:36.503: INFO: =============================

 

aimingposition.py

Привет! Решил, что там не так? пользуюсь этим же скриптом и не работает

Share this post


Link to post

Short link
Share on other sites
2 минуты назад, DrShats сказал:

Привет! Решил, что там не так? пользуюсь этим же скриптом и не работает

скрипт anglesAiming.py обновить нужно

Share this post


Link to post

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

скрипт anglesAiming.py обновить нужно

Спасибо! Но

В процитированном мной сообщении, ADv ошибся с логами. Вопрос его (как и мой) про скрипт aimingposition.py, который показывает куда целится союзная арта. Про это есть инфа?

Edited by DrShats
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

Небольшой скрипт для тех, у кого скопилось куча не открытых коробок.

Скрипт автоматически открывает все имеющиеся новогодние коробки. Так же при входе в окно разбития игрушек, он автоматически выбирает все имеющиеся игрушки. Код не мой, я всего лишь вырезал и адаптировал под py_macro данный функционал из autoaim_indicator v2017-12-30v2 (http://forum.worldoftanks.eu/index.php?/topic/441413-)

Установка: файл mod_NY18.py надо положить в папку res_mods\configs\xvm\py_macro\, для активации функционала необходимо в файле конфига hangar.xc добавить "NY18_BoxAutoOpen": true

Примерно так:

/**
 * Parameters for hangar
 * Параметры ангара
 */
{
  "hangar": {
...
    "NY18_BoxAutoOpen": true
  }
}

ЗЫ. Из минусов можно отметить что нету никакой информации о содержимом коробок, содержимое просто появляется в инвентаре. Да и эвент к понедельнику закончиться.

mod_NY18.py

  • Upvote 6

Share this post


Link to post

Short link
Share on other sites

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

Может @Yukikaze сможет что-то дополнить, в основном это его реализация.

Кстати, может тебе пора свои наработки переносить в состав XVM? Твои "макросы" уже давно можно считать полноценными модами, мы не думали, что в py_macro будет настолько сложная логика.

Share this post


Link to post

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

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

С другой стороны, сейчас довольно много мелких скриптов и было бы удобно, если бы пользователь смог разложить их по папкам как ему удобно. А какие конфликты могут быть?

  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

Ну, как минимум, придется текущие папки с модулями куда-то убирать за пределы py_macro.

Share this post


Link to post

Short link
Share on other sites

@ktulho @sirmax 

 

Добрый день. Хотел бы у вас уточнить один момент по py-macro.

Для примера опишу ситуацию на данном коде:

 

battleLabelsTemplates.xc

    "test": {
      "enabled": true,
      "updateEvent": "PY(ON_MY_UPDATE)",
      "width": 100,
      "height": 50,
      "alpha": 100,
      "screenHAlign": "center",
      "screenVAlign": "center",
      "bgColor": "0x000000",
      "textFormat": { "align": "center", "valign": "center" },
      "format": "{{py:ifKeyIsDown=down?{{py:getClientLang}}|None}}"
    },

test_py_macro.py

from Avatar import PlayerAvatar
from xfw import *

keyIsDown = 'notDown'

@registerEvent(PlayerAvatar, 'handleKey')
def handleKey(self, isDown, key, mods):
    global keyIsDown
    if key != 41:
        return
    if isDown:
        keyIsDown = 'down'
    elif not isDown:
        keyIsDown = 'notDown'
    as_event('ON_MY_UPDATE')

@xvm.export('getClientLang', deterministic=True)
def getClientLang():
    clientLang = getClientLanguage()
    debug('debug_mods: %s, %s' % (clientLang, keyIsDown))
    return clientLang

@xvm.export('ifKeyIsDown', deterministic=False)
def ifKeyIsDown():
    return keyIsDown

Так далее коротко опишу. Например нам нужно получить локализию запущенного клиента, но получить мы должны эти данные только при нажатии горячей клавиши Тильда (буква Ё/ символ ~). Если кнопка не нажата функция getClientLang() по идее не должна вызываться. Я добавил в код debug, для того чтобы увидель работает ли она и в какой ситуации. После прогона реплея получил в логе следующее:

2018-04-10 18:32:02.070: INFO: 2018-04-10 18:32:02: [DEBUG] debug_mods: ru, notDown
2018-04-10 18:32:02.075: INFO: 2018-04-10 18:32:02: [DEBUG] debug_mods: ru, notDown
2018-04-10 18:32:02.289: INFO: 2018-04-10 18:32:02: [DEBUG] [XFW] xfw_cmd: xfw.initialized ()
2018-04-10 18:32:02.305: INFO: 2018-04-10 18:32:02: [DEBUG] debug_mods: ru, notDown
2018-04-10 18:32:02.312: INFO: 2018-04-10 18:32:02: [DEBUG] debug_mods: ru, notDown
2018-04-10 18:32:02.325: INFO: 2018-04-10 18:33:05: [DEBUG] debug_mods: ru, notDown
2018-04-10 18:32:02.327: INFO: 2018-04-10 18:33:05: [DEBUG] debug_mods: ru, notDown
2018-04-10 18:32:02.328: INFO: 2018-04-10 18:33:05: [DEBUG] debug_mods: ru, notDown
2018-04-10 18:32:02.347: INFO: 2018-04-10 18:34:09: [DEBUG] debug_mods: ru, down

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

 

Я конечно не шипко разбираюсь в питоне, только начинаю свои шаги в его освоении, но вроде бы правильно прописал, по крайней мере так думаю). Возможно все так и должно работать, м.б. подскажите как лучше сделать если где то ошибся.

 

Еще один момент:

deterministic

При True это статичная функция, при False - динамическая?

Edited by Jonario

Share this post


Link to post

Short link
Share on other sites

@Jonario я так понимаю, что вы перематывали риплей? Попробуйте посмотреть риплей без перемотки. 

Share this post


Link to post

Short link
Share on other sites

@ktulho , нет не перематывал. Запустил, дождался окончания отсчета времени загрузки боя, нажал горячую клавишу (последняя запись в логе), закрыл реплей.

Share this post


Link to post

Short link
Share on other sites

@Jonario проверил у себя (вместо getClientLanguage() подставил '5555') .

В логе:

2018-04-10 19:51:34.545: INFO: 2018-04-10 19:51:34: [DEBUG] debug_mods: 5555, notDown
2018-04-10 19:51:34.545: INFO: 2018-04-10 19:51:34: [DEBUG] debug_mods: 5555, notDown
2018-04-10 19:51:34.910: INFO: 2018-04-10 19:51:34: [DEBUG] [XFW] xfw_cmd: xfw.initialized ()
2018-04-10 19:51:36.971: INFO: 2018-04-10 19:51:36: [DEBUG] debug_mods: 5555, notDown
2018-04-10 19:52:45.547: INFO: 2018-04-10 19:52:45: [DEBUG] debug_mods: 5555, down
2018-04-10 19:52:46.393: INFO: 2018-04-10 19:52:46: [DEBUG] debug_mods: 5555, notDown

Последние две строчки это я нажал и отпустил клавишу.

ИМХО:

1 строчка появляется, так как в battleLabels создается "визуальный" объект, то соответственно вызываются и все макросы в нем.

3 строка скорее всего "контрольное" обновление полей (поля обновляются после полной загрузки XVM).

Но это только мое предположение.

 

 

Меня смутило расхождение времени в вашем логе:

2018-04-10 18:32:02.325: INFO: 2018-04-10 18:33:05: [DEBUG] debug_mods: ru, notDown
2018-04-10 18:32:02.327: INFO: 2018-04-10 18:33:05: [DEBUG] debug_mods: ru, notDown
2018-04-10 18:32:02.328: INFO: 2018-04-10 18:33:05: [DEBUG] debug_mods: ru, notDown
2018-04-10 18:32:02.347: INFO: 2018-04-10 18:34:09: [DEBUG] debug_mods: ru, down

 

Share this post


Link to post

Short link
Share on other sites

Would it be possible to create a macro, to use during game (preferably in the "ears" I guess), that would return the current distance covered by a vehicle? And if yes, then would anyone be wiling to create one?

I'm writing this request on behalf of another player who asked me to do so. He'd be grateful :)

Edited by konrad509

Share this post


Link to post

Short link
Share on other sites

I think I might have misunderstood him a little bit as to what he wants. I need to make it clear with him first.

 

EDIT:

Yeah, I was wrong. My bad.

 

What he wants is the average distance travelled by a player on a given vehicle in all battles he played on that vehicle. So I guess it's not just about creating a "simple" macro, but rather a new type of a statistic that would require collecting data and stuff, am I right? And if anything, I should post it in Suggestions subforum.

Edited by konrad509

Share this post


Link to post

Short link
Share on other sites

hideMessagePatterns.png.c202b53e000948c558c16ad788abd49e.png

 

Дополнение: hideMessagePatterns.py

Скрывает указанные сообщения в системном канале в ангаре.

 

Установка:

1) Установить XVM

2) Распаковать содержимое архива в корневую директорию клиента

3) Добавить в конфиг в  файл "hangar.xc" параметр:

"hideMessagePatterns": [],

Скачать:

hideMessagePatterns.zip

 

Шаблон сообщений:

    "hideMessagePatterns": [
      "Добро пожаловать на сервер",
      "Уважаемый пользователь! Рекомендуем выполнить привязку вашего аккаунта к",
      "Уважаемый пользователь! Вы не меняли пароль уже 30 дней. Рекомендуем сменить",
      "Ремонт:",
      "Куплено:",
      "Продано:",
      "Кастомизация:",
      "Исследовано:",
      "Демонтировано:",
      "Модуль",
      "Оборудование",
      "Высадка экипажа в Казарму выполнена успешно",
      "Высадка члена экипажа в Казарму выполнена успешно",
      "Пересадка экипажа выполнена успешно",
      "Пересадка члена экипажа выполнена успешно",
      "Замена члена экипажа выполнена успешно",
      "Член экипажа демобилизован успешно",
      "Ускоренное обучение экипажа",
      "Новое умение успешно изучено",
      "Скриншот сохранён",
      "Жалоба на",
      "Приглашение принято",
      "Приглашение отклонено",
      "Приглашение недействительно",
      "Время действия личного резерва",
      "Изменены элементы внешнего вида"
    ],
  • Upvote 7

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