goodman Posted May 28, 2016 Share Posted May 28, 2016 (edited) В этой теме обсуждаем динамические макросы в 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()) а как мне тут выводить другие символы вместо < > ? мне нужны \u00d1 \u00d2 Edited June 2, 2016 by goodman @ Quote Link to comment Short link Share on other sites More sharing options...
Kapany3uk Posted May 28, 2016 Share Posted May 28, 2016 (edited) а как мне тут выводить другие символы вместо < > ? мне нужны \u00d1 \u00d2 попробуй вставить Ñ и Ò соответственно Edited May 28, 2016 by Kapany3uk @ Quote Link to comment Short link Share on other sites More sharing options...
goodman Posted May 28, 2016 Author Share Posted May 28, 2016 (edited) соответственно точно, спасибо! а как выводится и выводится ли "=" и как подменить? питон не разумею.. Edited May 28, 2016 by goodman @ Quote Link to comment Short link Share on other sites More sharing options...
Kapany3uk Posted May 28, 2016 Share Posted May 28, 2016 (edited) точно, спасибо! а как выводится и выводится ли "=" и как подменить? питон не разумею.. по-моему, знак "=" выводится по-умолчанию. если нужно вместо него вывести что-то другое, впиши нужный символ в конец строки вместо panel.total_hp_sign (в одинарных кавычках) def sign(): return '<' if panel.total_hp_sign == '<' else '>' if panel.total_hp_sign == '>' else '...;' Edited May 28, 2016 by Kapany3uk 1 @ Quote Link to comment Short link Share on other sites More sharing options...
goodman Posted May 28, 2016 Author Share Posted May 28, 2016 впиши это "другое" спасибо! попробую. развлекаюсь как могу :) 1 @ Quote Link to comment Short link Share on other sites More sharing options...
night_dragon_on Posted May 28, 2016 Share Posted May 28, 2016 (edited) @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 Edited May 28, 2016 by night_dragon_on @ Quote Link to comment Short link Share on other sites More sharing options...
sirmax Posted May 28, 2016 Share Posted May 28, 2016 (edited) @sirmax, сейчас математические операции (match - сравнение значения) в макросах из внешних скриптов не поддерживаются при форматировании вида: Проще всего реализовать эту логику непосредственно в питоне. Edited May 28, 2016 by sirmax @ Quote Link to comment Short link Share on other sites More sharing options...
seriych Posted May 28, 2016 Share Posted May 28, 2016 (edited) @sirmax,При каждом обращении к питон макросу новая песочница образуется, а как запомнить значение какой-то переменной при первом использовании макроса, чтобы при следующих можно было обратиться к изначальному значению? Вот, например, хочу суммарное хп команд на начало боя запомнить, есть вариант нормальный? Edited May 28, 2016 by seriych @ Quote Link to comment Short link Share on other sites More sharing options...
sirmax Posted May 28, 2016 Share Posted May 28, 2016 по идее глобальные переменные должны нормально работать. может ты локальную переменную создаешь? 1 @ Quote Link to comment Short link Share on other sites More sharing options...
seriych Posted May 28, 2016 Share Posted May 28, 2016 по идее глобальные переменные должны нормально работать. может ты локальную переменную создаешь? ага, работает, спс @ Quote Link to comment Short link Share on other sites More sharing options...
Yukikaze Posted May 28, 2016 Share Posted May 28, 2016 @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>" 1 @ Quote Link to comment Short link Share on other sites More sharing options...
anatoly999 Posted May 28, 2016 Share Posted May 28, 2016 (edited) Хочу вывести процент, на который лидирующая команда превосходит проигрывающую по ХП. Пока только это смог родить: 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: Прошу прощения за глупый вопрос - с питоном первый раз столкнулся. Edited May 28, 2016 by neLeax @ Quote Link to comment Short link Share on other sites More sharing options...
Kapany3uk Posted May 28, 2016 Share Posted May 28, 2016 (edited) А почему бы не так? @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: (? значение при равенстве хп) Edited May 28, 2016 by Kapany3uk 1 @ Quote Link to comment Short link Share on other sites More sharing options...
Yukikaze Posted May 28, 2016 Share Posted May 28, 2016 (edited) @neLeax, def compare(): min_hp = min(panel.teams_totalhp) max_hp = max(panel.teams_totalhp) return round(100. - (100. / max_hp) * min_hp, 2) если я правильно понял задумку ЗЫ Для подобных вопросов надо бы раздел запилить Edited May 28, 2016 by Yukikaze 1 @ Quote Link to comment Short link Share on other sites More sharing options...
seriych Posted May 28, 2016 Share Posted May 28, 2016 Вспомнилось мне тут одно обсужденьице... Хочу вывести процент, на который лидирующая команда превосходит проигрывающую по ХП. мы как-то формулу предпочтительную обсуждали. Можешь тут почитать:http://www.koreanrandom.com/forum/topic/16856-дефолтный-конфиг-обсуждение-default-cfg-discussions/page-43#entry324777 1 @ Quote Link to comment Short link Share on other sites More sharing options...
anatoly999 Posted May 28, 2016 Share Posted May 28, 2016 (edited) @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". Edited May 28, 2016 by neLeax @ Quote Link to comment Short link Share on other sites More sharing options...
Kapany3uk Posted May 29, 2016 Share Posted May 29, 2016 по идее глобальные переменные должны нормально работать Предлагаю сделать пороговые значения отношения хп команд для градиентной смены цвета в 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()) @ Quote Link to comment Short link Share on other sites More sharing options...
sirmax Posted May 29, 2016 Share Posted May 29, 2016 Надо в конфиг эти параметры вынести. 2 @ Quote Link to comment Short link Share on other sites More sharing options...
goodman Posted May 29, 2016 Author Share Posted May 29, 2016 (edited) return "<font color='#%s'>%6s %s %-6s</font>" % (color(), ally(), sign(), enemy()) я так и не победил выравнивание... в итоге сделал три поля с собственным выравниванием и в каждое вызываю соответствующую функцию 'xvm.total_hp.text' вообще удалил из питона Edited May 29, 2016 by goodman @ Quote Link to comment Short link Share on other sites More sharing options...
seriych Posted May 29, 2016 Share Posted May 29, 2016 (edited) Только дошло, что это процент превосходства по очкам прочности, заданный как координата "x" разве в "x" оно работает? 'xvm.total_hp.text' вообще удалил из питона наверное, не стоит трогать дефолтные файлы, лучше свой создавать, ибо если человек будут несколько конфигов пробовать, у него проблемы будут. В идеале грузить питон непосредственно из .xc файла конфига, но хз можно ли это по-нормальному сделать Edited May 29, 2016 by seriych 1 @ Quote Link to comment Short link Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.