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

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

Рекомендуемые сообщения

(изменено)

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

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

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

Изменено пользователем neLeax

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

post-10271-0-49105300-1464516386_thumb.png
  • Нравится 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
(изменено)

 

 

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

 

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

Изменено пользователем yan-polonov

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
(изменено)

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

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

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

Изменено пользователем seriych
  • Нравится 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
(изменено)

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

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

 

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

Изменено пользователем sirmax

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
(изменено)

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

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

Изменено пользователем Kapany3uk

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
(изменено)

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

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

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

Изменено пользователем sirmax

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Ага, понял, "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" },
  • Нравится 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Это соответствует статическим и динамическим макросам. Статические быстрее, так как только раз вычисляются.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
(изменено)

*** > delete < ***

Изменено пользователем yan-polonov

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
(изменено)

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

 

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

 

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

Изменено пользователем wotunion

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Да

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
(изменено)

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

 

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

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

Изменено пользователем neLeax

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

 

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

    Нет пользователей, просматривающих эту страницу.

×