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

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

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

goodman   

В этой теме обсуждаем динамические макросы в Python, делимся опытом и идеями, помогаем друг другу сделать свой клиент идеальным :)
@xvm.export('xvm.total_hp.sign', deterministic=False)
def sign():
    return '<' if panel.total_hp_sign == '<' else '>' if panel.total_hp_sign == '>' else panel.total_hp_sign

@xvm.export('xvm.total_hp.text', deterministic=False)
def text():
    return "%6s <font color='#%s'>%s</font> %-6s" % (ally(), color(), sign(), enemy())

а как мне тут выводить другие символы вместо 

<  >

:hmm:   
мне нужны \u00d1 \u00d2

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

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


Ссылка на сообщение
Поделиться на других сайтах
а как мне тут выводить другие символы вместо  < > ?     мне нужны \u00d1 \u00d2

попробуй вставить Ñ и Ò соответственно

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

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


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

точно, спасибо! 

а как выводится и выводится ли "=" и как подменить? питон не разумею..

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

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


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

точно, спасибо! 

а как выводится и выводится ли "=" и как подменить? питон не разумею..

по-моему, знак "=" выводится по-умолчанию.

если нужно вместо него вывести что-то другое, впиши нужный символ в конец строки вместо panel.total_hp_sign (в одинарных кавычках)

def sign():
    return '<' if panel.total_hp_sign == '<' else '>' if panel.total_hp_sign == '>' else '...;'
Изменено пользователем Kapany3uk

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


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

впиши это "другое"

спасибо! попробую. развлекаюсь  как могу :)

 

post-10271-0-27068700-1464445527.png 

post-10271-0-24615100-1464445528.png

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


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

@sirmax, сейчас математические операции (match - сравнение значения) в макросах из внешних скриптов не поддерживаются при форматировании вида:

battleLabelsTemplates.xc

"format": "<font color='{{py:xvm.total_hp.match()=ally_lose?#F50800|#96FF00}}'><b>{{py:xvm.total_hp.ally()}}</b></font>"
"format": "<font color='{{py:xvm.total_hp.match()=enemy_lose?#F50800|#96FF00}}'><b>{{py:xvm.total_hp.enemy()}}</b></font>"
total_hp.py

@xvm.export('xvm.total_hp.match', deterministic=False)
def match():
    return 'ally_lose' if panel.total_hp_sign == '<' else 'enemy_lose' if panel.total_hp_sign == '>' else panel.total_hp_sign
Изменено пользователем night_dragon_on

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


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

 

@sirmax, сейчас математические операции (match - сравнение значения) в макросах из внешних скриптов не поддерживаются при форматировании вида:

Проще всего реализовать эту логику непосредственно в питоне.

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

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


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

@sirmax,При каждом обращении к питон макросу новая песочница образуется, а как запомнить значение какой-то переменной при первом использовании макроса, чтобы при следующих можно было обратиться к изначальному значению? Вот, например, хочу суммарное хп команд на начало боя запомнить, есть вариант нормальный?

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

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


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

по идее глобальные переменные должны нормально работать. может ты локальную переменную создаешь?

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


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

 

 

по идее глобальные переменные должны нормально работать. может ты локальную переменную создаешь?
ага, работает, спс

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


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

 

@sirmax, сейчас математические операции (match - сравнение значения) в макросах из внешних скриптов не поддерживаются при форматировании вида:

battleLabelsTemplates.xc

"format": "<font color='{{py:xvm.total_hp.match()=ally_lose?#F50800|#96FF00}}'><b>{{py:xvm.total_hp.ally()}}</b></font>"
"format": "<font color='{{py:xvm.total_hp.match()=enemy_lose?#F50800|#96FF00}}'><b>{{py:xvm.total_hp.enemy()}}</b></font>"
total_hp.py

@xvm.export('xvm.total_hp.match', deterministic=False)
def match():
    return 'ally_lose' if panel.total_hp_sign == '<' else 'enemy_lose' if panel.total_hp_sign == '>' else panel.total_hp_sign

А почему бы не так?

@xvm.export('xvm.total_hp.loser_color', deterministic=False)
def match(ally_color, enemy_color):
    return ally_color if panel.total_hp_sign == '<' else enemy_color
"format": "<font color='{{py:xvm.total_hp.loser_color('#F50800', '#96FF00')}}'><b>{{py:xvm.total_hp.ally()}}</b></font>"

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


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

Хочу вывести процент, на который лидирующая команда превосходит проигрывающую по ХП.

 

Пока только это смог родить:

import xvm_battle.python.fragCorrelationPanel as panel

@xvm.export('xvm.total_hp.ally', deterministic=False)
def ally():
    return float(panel.teams_totalhp[0])

@xvm.export('xvm.total_hp.enemy', deterministic=False)
def enemy():
    return float(panel.teams_totalhp[1])

@xvm.export('xvm.total_hp.color', deterministic=False)
def color():
    return panel.total_hp_color

def compare():
    return round(100. - (100. / panel.teams_totalhp[0]) * panel.teams_totalhp[1] , 2)

@xvm.export('xvm.total_hp.superiority', deterministic=False)
def superiority():
    return "<font color='#%s'>%s</font>" % (color(), compare())
Никак не могу сообразить, как записать сравнение - если у союзников больше ХП, то считается по первой формуле:

round(100. - (100. / panel.teams_totalhp[0]) * panel.teams_totalhp[1] , 2)
А если у противников, то по второй:

round(100. - (100. / panel.teams_totalhp[1]) * panel.teams_totalhp[0] , 2)
Знающие люди подскажите.

 

PS: Прошу прощения за глупый вопрос - с питоном первый раз столкнулся.

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

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


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

А почему бы не так?

@xvm.export('xvm.total_hp.loser_color', deterministic=False)
def match(ally_color, enemy_color):
    return ally_color if panel.total_hp_sign == '<' else enemy_color
"format": "<font color='{{py:xvm.total_hp.loser_color('#F50800', '#96FF00')}}'><b>{{py:xvm.total_hp.ally()}}</b></font>"
а не надо коды цвета местами поменять (или в .ру аргументы enemy/ally)?

 

как записать сравнение:

попробуй через 'если'

if хп0 > хп1:

формула1

elif хп1 > хп0:

формула2

else:

(? значение при равенстве хп)

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

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


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

@neLeax,

def compare():
    min_hp = min(panel.teams_totalhp)
    max_hp = max(panel.teams_totalhp)
    return round(100. - (100. / max_hp) * min_hp, 2) 

если я правильно понял задумку

 

 

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

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

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


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

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


 

 

Хочу вывести процент, на который лидирующая команда превосходит проигрывающую по ХП.
мы как-то формулу предпочтительную обсуждали. Можешь тут почитать:

http://www.koreanrandom.com/forum/topic/16856-дефолтный-конфиг-обсуждение-default-cfg-discussions/page-43#entry324777

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


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

@neLeax,

def compare():
    min_hp = min(panel.teams_totalhp)
    max_hp = max(panel.teams_totalhp)
    return round(100. - (100. / max_hp) * min_hp, 2) 
если я правильно понял задумку

 

Спасибо, то что и пытался сделать.

 

мы как-то формулу предпочтительную обсуждали. Можешь тут почитать:

http://www.koreanrandom.com/forum/topic/16856-дефолтный-конфиг-обсуждение-default-cfg-discussions/page-43#entry324777

Спасибо за наводку.

В итоге остановился на твоей формуле - (hpAlly - hpEnemy)/max(hpAlly, hpEnemy)

Во-первых она более простая, а во-вторых сразу выводит "-" если у противников больше ХП.

 

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

Прикольная идея:) Можешь поделиться кодом? Хочу понять принцип, как подобное реализовывается. Что-то затупил под вечер. Только дошло, что это процент превосходства по очкам прочности, заданный как координата "x". Изменено пользователем neLeax

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


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

 

 

по идее глобальные переменные должны нормально работать
Предлагаю сделать пороговые значения отношения хп команд для градиентной смены цвета в total_hp редактируемыми (ввести переменные). Давно написал формулу и код в лс @Helkar, но до воплощения так и не дошло...

Нужно дополнить total_hp.py верхней и нижней границами диапазона градиентной смены цвета и переписать 'xvm.total_hp.color'

'код'

""" total_hp with editable thresholds for the gradient color change / ХП команд с редактируемыми порогами градиентной смены цвета """

import xvm_battle.python.fragCorrelationPanel as panel

# Values are percentages of the teams_HP within which will change the gradient color (0..100)
# IMPORTANT: maxRatio ≠ minRatio (values should NOT be equal, otherwise will give an error "division by "0")
# Значения процентного отношения ХП команд в пределах которых будет меняться градиент цвета (0..100)
# ВАЖНО: maxRatio ≠ minRatio (значения должны быть НЕ равны, иначе выдаст ошибку "деления на "0")

# Higher the value, the color will remain "neutral"
# Выше этого значения цвет останется нейтральным
maxRatio = 95

# Below this value the color will change completely on the "bad" or "good" (depending on the relationship of teams_hp)
# Ниже этого значения цвет полностью изменится на "bad" или "good" (в зависимости от отношения ХП команд)
minRatio = 65

@xvm.export('xvm.total_hp.ally', deterministic=False)
def ally():
    return panel.teams_totalhp[0]

@xvm.export('xvm.total_hp.enemy', deterministic=False)
def enemy():
    return panel.teams_totalhp[1]

@xvm.export('xvm.total_hp.color', deterministic=False)
def color():
    if panel.teams_totalhp[0] < panel.teams_totalhp[1]:
        ratio = max(min((100. * panel.teams_totalhp[0] / panel.teams_totalhp[1] - minRatio) / (maxRatio - minRatio), 1), 0)
        color = panel.color_gradient(panel.hp_colors['neutral'], panel.hp_colors['bad'], ratio)
    elif panel.teams_totalhp[0] > panel.teams_totalhp[1]:
        ratio = max(min((100. * panel.teams_totalhp[1] / panel.teams_totalhp[0] - minRatio) / (maxRatio - minRatio), 1), 0)
        color = panel.color_gradient(panel.hp_colors['neutral'], panel.hp_colors['good'], ratio)
    else:
        color = panel.color_gradient(panel.hp_colors['neutral'], panel.hp_colors['neutral'], 1)
    return color

@xvm.export('xvm.total_hp.sign', deterministic=False)
def sign():
    return '<' if panel.total_hp_sign == '<' else '>' if panel.total_hp_sign == '>' else panel.total_hp_sign

@xvm.export('xvm.total_hp.text', deterministic=False)
def text():
    return "<font color='#%s'>%6s %s %-6s</font>" % (color(), ally(), sign(), enemy())

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


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

Надо в конфиг эти параметры вынести.

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


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

 

return "<font color='#%s'>%6s %s %-6s</font>" % (color(), ally(), sign(), enemy())

 

я так и не победил выравнивание... в итоге сделал три поля с собственным выравниванием и в каждое вызываю соответствующую функцию

post-10271-0-88767700-1464515688.png post-10271-0-42457100-1464515690.png post-10271-0-87394000-1464515689.png

 

'xvm.total_hp.text' вообще удалил из питона

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

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


Ссылка на сообщение
Поделиться на других сайтах
Только дошло, что это процент превосходства по очкам прочности, заданный как координата "x"

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

 

 

'xvm.total_hp.text' вообще удалил из питона

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

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

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


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

Создайте аккаунт или войдите в него для комментирования

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

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

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

×