Перейти к содержимому

Фото

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


  • Чтобы отвечать, сперва войдите на форум
1319 ответов в теме

#21 neLeax

neLeax
  • Пользователь
  • 276 сообщений
  • Nick:neLeax
  • WoT Server:RU (Русский)

Опубликовано 29 Май 2016 - 11:00

разве в "x" оно работает?

Проверил - точно, не работает. До этого не проверял, просто предположил. Тогда действительно хотелось бы посмотреть, как ты реализовал это.
В питоне не шарю, хотелось бы разобраться как оно работает на конкретных примерах.

Изменено: neLeax, 29 Май 2016 - 11:03

  • 0

#22 goodman

goodman
  • Premium Member
  • 3 554 сообщений
  • Город: Саратов

Опубликовано 29 Май 2016 - 11:06

не стоит трогать дефолтные файлы, лучше свой создавать

я так и поступил, для верности ещё и функции переобозвал по своему :)


  • 1

#23 yan-polonov

yan-polonov
  • Пользователь
  • 17 сообщений
  • Nick:last_light
  • WoT Server:RU (Русский), NA (American), EU (European)

Опубликовано 29 Май 2016 - 11:13

Вспомнилось мне тут одно обсужденьице...

 

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


Изменено: yan-polonov, 29 Май 2016 - 17:05

  • 0

#24 seriych

seriych

    Всем счастья

  •  XVM Developer
  • 7 358 сообщений
  • Nick:seriych
  • WoT Server:RU (Русский)
  • Город: Чайковский/Москва

Опубликовано 29 Май 2016 - 12:00

Проверил - точно, не работает.

Уфф, обрадовал, а то я уж подумал, что зря столько мучился.
Я дописываю неразрывные пробелы перед или после поля с текстом/картинкой, количество которых пропорционально разнице в HP.
 
#kanat.py:

@xvm.export('diff_hp_pic')
def diff_hp_pic(a, b):
    st = '<img src="xvm://res/icons/kanat.png">'
    return full_string(a, b, st)

@xvm.export('diff_hp')
def diff_hp(a, b):
    st = '{{py:xvm.total_hp.text()}}'
    return full_string(a, b, st)

def full_string(a, b, st1):
    st2 = '<font size="4" face="$FieldFont" alpha="#00">' + ('&nbsp;' * int(450*abs(a - b)/max(a, b))) + '</font>'
    if b > a:
        st1, st2 = st2, st1
    return st1 + st2
// battleLabelsTemplates.xc:

    "totalHP": {
      "enabled": true,
      "updateEvent": "ON_PLAYERS_HP_CHANGED",
      "x": 0,
      "y": 36,
      "width": 500,
      "height": 150,
      "autoSize": "center",
      "align": "center",
      "shadow": { "distance": 1, "angle": 90, "alpha": 80, "blur": 5, "strength": 4 },
      "currentFieldDefaultStyle": { "color": "0xF4EFE8", "size": 15 },
      "format": "{{py:diff_hp({{py:xvm.total_hp.ally()}},{{py:xvm.total_hp.enemy()}})}}"
    },
    "totalHPpic": {
      "$ref": { "path": "def.totalHP"},
      "y": 10,
      "format": "{{py:diff_hp_pic({{py:xvm.total_hp.ally()}},{{py:xvm.total_hp.enemy()}})}}"
    },
// battleLabels.xc:

      ${ "battleLabelsTemplates.xc":"def.totalHPpic" },
      ${ "battleLabelsTemplates.xc":"def.totalHP" },

Для подобных вопросов надо бы раздел запилить

Угадай, кто там будет отвечать:-)

Почему код выше работает, а если сделать так, то нет:
тык

Разобрался: http://www.koreanran...hp/#entry329924
 
И как из .xc файла передать в питон строковый аргумент со спецсимволами. Например, те же '{{py:xvm.total_hp.text()}}' или '<img src="xvm://res/icons/kanat.png">'?

Изменено: seriych, 29 Май 2016 - 15:44

  • 1

#25 sirmax

sirmax

    [XVM] Разработчик

  •  XVM Developer
  • 12 677 сообщений
  • Nick:sirmax2
  • WoT Server:RU (Русский)

Опубликовано 29 Май 2016 - 12:03

наверное, не стоит трогать дефолтные файлы, лучше свой создавать, ибо если человек будут несколько конфигов пробовать, у него проблемы будут. В идеале грузить питон непосредственно из .xc файла конфига, но хз можно ли это по-нормальному сделать

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

 

UPD: подпапки не работают.


Изменено: sirmax, 29 Май 2016 - 15:06

  • 0

#26 Kapany3uk

Kapany3uk

    07.10.15 Родилась внучка!

  • Пользователь
  • 2 716 сообщений
  • Nick:Kapany3uk
  • WoT Server:RU (Русский)
  • Город: дер. Осеченки

Опубликовано 29 Май 2016 - 13:06

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

а как назначить путь к своей папке? или имеется ввиду /xvm/py-macro/...(folder)...? просто хотелось бы вынести папку с .py файлами за пределы xvm/py_macro, как минимум внедрить в папку с .хс конфигом... Может по типу пути к иконке 6-го чувства и/или пути к иконкам кланов сделать настраиваемый параметр в battle.xc?


Изменено: Kapany3uk, 29 Май 2016 - 13:08

  • 0

#27 seriych

seriych

    Всем счастья

  •  XVM Developer
  • 7 358 сообщений
  • Nick:seriych
  • WoT Server:RU (Русский)
  • Город: Чайковский/Москва

Опубликовано 29 Май 2016 - 13:48

или имеется ввиду /xvm/py-macro/...(folder)...?
да
  • 0

#28 sirmax

sirmax

    [XVM] Разработчик

  •  XVM Developer
  • 12 677 сообщений
  • Nick:sirmax2
  • WoT Server:RU (Русский)

Опубликовано 29 Май 2016 - 15:04

просто хотелось бы вынести папку с .py файлами за пределы xvm/py_macro, как минимум внедрить в папку с .хс конфигом... Может по типу пути к иконке 6-го чувства и/или пути к иконкам кланов сделать настраиваемый параметр в battle.xc?

Нельзя. Макросы грузятся исключительно из res_mods\configs\xvm\py_macro\ и подпапок, из-за соображений безопасности, а так же чтобы избежать конфликтов.


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


Изменено: sirmax, 29 Май 2016 - 15:05

  • 0

#29 seriych

seriych

    Всем счастья

  •  XVM Developer
  • 7 358 сообщений
  • Nick:seriych
  • WoT Server:RU (Русский)
  • Город: Чайковский/Москва

Опубликовано 29 Май 2016 - 15:41

Почему код выше работает, а если сделать так, то нет:

Ага, понял, "deterministic=True" по умолчанию прописали. Это для производительности надо? Иначе непонятно, зачем
 
neLeax,
Соответственно, можно упростить:
#kanat.py:

import xvm_battle.python.fragCorrelationPanel as panel

@xvm.export('diff_hp', deterministic=False)
def diff_hp():
    st = '{{py:xvm.total_hp.text()}}'
    return full_string(st)

@xvm.export('diff_hp_pic', deterministic=False)
def diff_hp_pic():
    st = '<img src="xvm://res/icons/kanat.png">'
    return full_string(st)

def full_string(st1):
    a = panel.teams_totalhp[0]
    b = panel.teams_totalhp[1]
    st2 = '<font size="4" alpha="#00">' + ('&nbsp;' * int(450*abs(a - b)/max(a, b))) + '</font>'
    if b > a:
        st1, st2 = st2, st1
    return st1 + st2
    "totalHP": {
      "enabled": true,
      "updateEvent": "ON_PLAYERS_HP_CHANGED",
      "x": 0,
      "y": 36,
      "width": 500,
      "height": 150,
      "autoSize": "center",
      "align": "center",
      "shadow": { "distance": 1, "angle": 90, "alpha": 80, "blur": 5, "strength": 4 },
      "currentFieldDefaultStyle": { "color": "0xF4EFE8", "size": 15 },
      "format": "{{py:diff_hp()}}"
    },
    "totalHPpic": {
      "$ref": { "path": "def.totalHP"},
      "y": 10,
      "format": "{{py:diff_hp_pic()}}"
    },
// battleLabels.xc:

      ${ "battleLabelsTemplates.xc":"def.totalHPpic" },
      ${ "battleLabelsTemplates.xc":"def.totalHP" },

  • 1

#30 sirmax

sirmax

    [XVM] Разработчик

  •  XVM Developer
  • 12 677 сообщений
  • Nick:sirmax2
  • WoT Server:RU (Русский)

Опубликовано 29 Май 2016 - 16:15

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

#31 yan-polonov

yan-polonov
  • Пользователь
  • 17 сообщений
  • Nick:last_light
  • WoT Server:RU (Русский), NA (American), EU (European)

Опубликовано 29 Май 2016 - 17:05

*** > delete < ***


Изменено: yan-polonov, 02 Июнь 2016 - 16:26

  • 0

#32 wotunion

wotunion
  • Пользователь
  • 299 сообщений
  • Nick:Doberm4n
  • WoT Server:RU (Русский)

Опубликовано 29 Май 2016 - 17:48

Кстати, макросы на тоталхп и цвет по той самой формуле,что обсуждали, у меня готовые лежат, ждут поддержки импорта модулей в реализации py-макросов
  • 0

#33 goodman

goodman
  • Premium Member
  • 3 554 сообщений
  • Город: Саратов

Опубликовано 29 Май 2016 - 17:51

Кстати, макросы на тоталхп и цвет по той самой формуле,что обсуждали, у меня готовые лежат, ждут поддержки импорта модулей в реализации py-макросов

так включайся в тему, всё уже работает


  • 0

#34 wotunion

wotunion
  • Пользователь
  • 299 сообщений
  • Nick:Doberm4n
  • WoT Server:RU (Русский)

Опубликовано 29 Май 2016 - 17:58

Что-то пропустил, я мало читал, с какой сборки?
А, нашел, позавчера, ну тогда втопку
  • 0

#35 demon2597

demon2597

    конфигОратор

  • Premium Member
  • 14 117 сообщений
  • Nick:demon2597
  • WoT Server:RU (Русский)
  • Город: Иваново

Опубликовано 29 Май 2016 - 18:05

wotunion, тени в полях карусели в диапазоне 0-100 когда ожидать?) 


  • 0

#36 wotunion

wotunion
  • Пользователь
  • 299 сообщений
  • Nick:Doberm4n
  • WoT Server:RU (Русский)

Опубликовано 29 Май 2016 - 18:17

wotunion, тени в полях карусели в диапазоне 0-100 когда ожидать?)

Сори, как время будет, занят еще, на форум и то на 2 мин захожу

Upd.Хотя имплементация цвета совершенно не такая, какую обсуждали, остались градиенты

Изменено: wotunion, 29 Май 2016 - 18:18

  • 0

#37 demon2597

demon2597

    конфигОратор

  • Premium Member
  • 14 117 сообщений
  • Nick:demon2597
  • WoT Server:RU (Русский)
  • Город: Иваново

Опубликовано 29 Май 2016 - 18:34

Хотя имплементация цвета совершенно не такая, какую обсуждали, остались градиенты
а обсуждали чего, цветовые дипазоны в зависимости от разницы? а по мне вроде с градиентом хорошо, мне нравится
  • 0

#38 wotunion

wotunion
  • Пользователь
  • 299 сообщений
  • Nick:Doberm4n
  • WoT Server:RU (Русский)

Опубликовано 29 Май 2016 - 18:39

а обсуждали чего, цветовые дипазоны в зависимости от разницы? а по мне вроде с градиентом хорошо, мне нравится


Да
  • 0

#39 neLeax

neLeax
  • Пользователь
  • 276 сообщений
  • Nick:neLeax
  • WoT Server:RU (Русский)

Опубликовано 29 Май 2016 - 19:38

seriych, Спасибо, более-менее стал понимать как это все работает.
Теперь не могу дойти до того, как вывести значение прочности команд на начало боя. На предыдущей странице говорилось, что для этого нужно задать глобальную переменную, все не пойму, как конкретно это сделать.
И еще, можно ли с помощью питона выцепить нанесенный урон из хитлога? Хочу в дальнейшем прикрутить динамический расчет оставшегося урона до основного калибра. На сколько я понял, нужно в каком-то из этих файлов искать.

 

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

Прикрепленный файл  worldoftanks 2016-05-29 21-33-43-96.png   61,92 Кб   0 раз скачано


Изменено: neLeax, 29 Май 2016 - 19:41

  • 0

#40 seriych

seriych

    Всем счастья

  •  XVM Developer
  • 7 358 сообщений
  • Nick:seriych
  • WoT Server:RU (Русский)
  • Город: Чайковский/Москва

Опубликовано 29 Май 2016 - 20:07

Теперь не могу дойти до того, как вывести значение прочности команд на начало боя. На предыдущей странице говорилось, что для этого нужно задать глобальную переменную, все не пойму, как конкретно это сделать.
А я сам не знаю, как это правильно сделать. Первое что пришло в голову сработало:
import xvm_battle.python.fragCorrelationPanel as panel

@xvm.export('thp')
def total_hp_string():
    try:
        type(total_hp_start)
    except:
        global total_hp_start, A, B
        A = panel.teams_totalhp[0]
        B = panel.teams_totalhp[1]
        total_hp_start = A + B
    #blablabla

но может как-то адекватнее можно без проверки try type()


  • 0





0 пользователей читают эту тему

0 зарегистрированных, 0 гостей, 0 невидимых

© Mr 13