Jump to content
Korean Random
goodman

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

Recommended Posts

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

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

В питоне не шарю, хотелось бы разобраться как оно работает на конкретных примерах.

Edited by neLeax

Share this post


Link to post

Short link
Share on other sites

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

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

post-10271-0-49105300-1464516386_thumb.png
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

 

 

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

 

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

Edited by yan-polonov

Share this post


Link to post

Short link
Share on other sites

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

Уфф, обрадовал, а то я уж подумал, что зря столько мучился.

Я дописываю неразрывные пробелы перед или после поля с текстом/картинкой, количество которых пропорционально разнице в 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">' + (' ' * 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" },

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

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

 

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

тык

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

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

def full_string(st1):
    import xvm_battle.python.fragCorrelationPanel as panel
    a = panel.teams_totalhp[0]
    b = panel.teams_totalhp[1]
    st2 = '<font size="12" alpha="#00">' + (' ' * int(100*abs(a - b)/max(a, b))) + '</font>'
    if b > a:
        st1, st2 = st2, st1
    return st1 + st2
diff_hp() работает, а diff_hp_pic() выдает в начале правильный результат, но с течением боя результат не меняется.

Разобрался: http://www.koreanrandom.com/forum/topic/31856-totalhp/?do=findComment&comment=329924

 

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

Edited by seriych
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

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

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

 

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

Edited by sirmax

Share this post


Link to post

Short link
Share on other sites

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

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

Edited by Kapany3uk

Share this post


Link to post

Short link
Share on other sites

 

 

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

Share this post


Link to post

Short link
Share on other sites

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

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

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

Edited by sirmax

Share this post


Link to post

Short link
Share on other sites

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

Ага, понял, "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">' + (' ' * 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" },
  • 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

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

Share this post


Link to post

Short link
Share on other sites

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

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

Share this post


Link to post

Short link
Share on other sites

Что-то пропустил, я мало читал, с какой сборки?

А, нашел, позавчера, ну тогда втопку

Share this post


Link to post

Short link
Share on other sites

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

Share this post


Link to post

Short link
Share on other sites

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

 

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

 

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

Edited by wotunion

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

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

 

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

post-7590-0-47601300-1464546962_thumb.png

Edited by neLeax

Share this post


Link to post

Short link
Share on other sites

 

 

Теперь не могу дойти до того, как вывести значение прочности команд на начало боя. На предыдущей странице говорилось, что для этого нужно задать глобальную переменную, все не пойму, как конкретно это сделать.
А я сам не знаю, как это правильно сделать. Первое что пришло в голову сработало:
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()

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