wotunion 95 #330442 Posted May 31, 2016 Да. Кстати, можно их использовать не только для макросов, но и моды писать. Вот это действительно круто. можно и папочку переименовать в py_scripts или подобное а конструкция импорта модуля из папки типа import folder.subfolder_py_file сработает? Quote Share this post Link to post Short link Share on other sites
seriych 2,178 #330448 Posted May 31, 2016 Да. Кстати, можно их использовать не только для макросов, но и моды писать. А есть какая-то разница с тем, что тот же .pyc кинуть в scripts\client\gui\mods? кроме того, что тут .py, а не .pyc. Или там импортить из XVM нельзя? Quote Share this post Link to post Short link Share on other sites
sirmax 5,499 #330450 Posted May 31, 2016 (edited) А есть какая-то разница с тем, что тот же .pyc кинуть в scripts\client\gui\mods? кроме того, что тут .py, а не .pyc. Или там импортить из XVM нельзя? в целом нет разницы, только у нас отключен импорт нескольких системных модулей. ну и перекомпиливать не надо - это основной плюс и код открыт - это тоже плюс можно и папочку переименовать в py_scripts или подобное Можно рядом дополнительную сделать, чтобы макросы не мешались с модами. Если идея будет пользоваться популярностью, то наверно так и сделаем. а конструкция импорта модуля из папки типа import folder.subfolder_py_file сработает? не проверял, но по идее можно сделать, если не работает Edited May 31, 2016 by sirmax Quote Share this post Link to post Short link Share on other sites
wotunion 95 #330459 Posted May 31, 2016 в целом нет разницы, только у нас отключен импорт нескольких системных модулей. а каких? Quote Share this post Link to post Short link Share on other sites
seriych 2,178 #330461 Posted May 31, 2016 (edited) а каких? https://bitbucket.org/XVM/xvm/commits/1b39103936a765acfa1faf60a9d21d0065a2995f illegal_functions = ('__import__', 'eval', 'execfile') illegal_import = ('os', 'sys', 'import_lib') Edited May 31, 2016 by seriych Quote Share this post Link to post Short link Share on other sites
wotunion 95 #330464 Posted May 31, 2016 Короче ограничения по фс Вообще байткод для того и сделан, чтобы шустрее интерпретация осуществлялась, может поддержку pyc как опцию стоит ввести? Quote Share this post Link to post Short link Share on other sites
sirmax 5,499 #330484 Posted May 31, 2016 Короче ограничения по фс Вообще байткод для того и сделан, чтобы шустрее интерпретация осуществлялась, может поддержку pyc как опцию стоит ввести? ну если ты сделаешь анализатор pyc в ast, то ок. :) Quote Share this post Link to post Short link Share on other sites
wotunion 95 #330500 Posted May 31, 2016 как в самом первом варианте py макросов Quote Share this post Link to post Short link Share on other sites
night_dragon_on 5,601 #330522 Posted May 31, 2016 Да, точно, оно ж глобальное для клиента, и между боями запоминается.Тогда надо привязаться к arenaUniqueID Тут тоже один минус, в таком виде расчет для одной команды будет неверным так как переменная с максимальным начальным значением запаса прочности берется из большего значения толь или иной команды. 'hp_panel.py ; battleLabelsTemplates.xc ; shot-1.png' {{py:xvm.frag_correlation.percent_hp(0)}} {{py:xvm.frag_correlation.percent_hp(1)}} import BigWorld import xvm_battle.python.fragCorrelationPanel as panel actual_arenaUniqueID = None hp_max_team = 0 @xvm.export('xvm.frag_correlation.current_hp', deterministic=False) def current_hp(current_team): return panel.teams_totalhp[current_team] @xvm.export('xvm.frag_correlation.percent_hp', deterministic=False) def percent_hp(current_team): global actual_arenaUniqueID, hp_max_team arenaUniqueID = BigWorld.player().arenaUniqueID if actual_arenaUniqueID != arenaUniqueID and hp_max_team == 0: actual_arenaUniqueID = arenaUniqueID hp_max_team = max(panel.teams_totalhp) return round((100. * current_hp(current_team)) / hp_max_team, 0) Во втором случае расчет для одной команды производится нормально, а для другой остается постоянной переменная с максимальным начальным значением запаса прочности. 'hp_panel.py ; battleLabelsTemplates.xc ; shot-2.png' {{py:xvm.frag_correlation.percent_hp(0)}} {{py:xvm.frag_correlation.percent_hp(1)}} import BigWorld import xvm_battle.python.fragCorrelationPanel as panel actual_arenaUniqueID = None hp_max_team = 0 @xvm.export('xvm.frag_correlation.percent_hp', deterministic=False) def percent_hp(current_team): global actual_arenaUniqueID, hp_max_team arenaUniqueID = BigWorld.player().arenaUniqueID if actual_arenaUniqueID != arenaUniqueID and hp_max_team == 0: actual_arenaUniqueID = arenaUniqueID hp_max_team = panel.teams_totalhp[current_team] return round((100. * current_hp(current_team)) / hp_max_team, 0) Так что тут для правильного расчета нужно будет создавать две отдельных функции import BigWorld hp_max_ally = 0 hp_max_enemy = 0 actual_arenaUniqueID = None @xvm.export('xvm.frag_correlation.percent_hp_ally', deterministic=False) def percent_hp_ally(): global actual_arenaUniqueID, hp_max_ally arenaUniqueID = BigWorld.player().arenaUniqueID if actual_arenaUniqueID != arenaUniqueID and hp_max_ally == 0: actual_arenaUniqueID = arenaUniqueID hp_max_ally = panel.teams_totalhp[0] return round((100. * current_hp(0)) / hp_max_ally, 0) @xvm.export('xvm.frag_correlation.percent_hp_enemy', deterministic=False) def percent_hp_enemy(): global actual_arenaUniqueID, hp_max_enemy arenaUniqueID = BigWorld.player().arenaUniqueID if actual_arenaUniqueID != arenaUniqueID and hp_max_enemy == 0: actual_arenaUniqueID = arenaUniqueID hp_max_enemy = panel.teams_totalhp[1] return round((100. * current_hp(1)) / hp_max_enemy, 0) Или можно как то по другому выкрутится? Quote Share this post Link to post Short link Share on other sites
Kapany3uk 948 #330524 Posted May 31, 2016 (edited) Вообще байткод для того и сделан, чтобы шустрее интерпретация осуществлялась, может поддержку pyc как опцию стоит ввести? ну если ты сделаешь анализатор pyc в ast, то ок. :) Парни, вы только не заставляйте пользователей компилировать кастомные файлы - пусть при загрузке автоматом компилятся (а мы ничего и не заметим :)) вот и грусть печаль)) все кинутся компилировать и обфусцировать.. Вот-вот! Edited May 31, 2016 by Kapany3uk Quote Share this post Link to post Short link Share on other sites
goodman 664 #330528 Posted May 31, 2016 (edited) может поддержку pyc как опцию стоит ввести? вот и грусть печаль)) все кинутся компилировать и обфусцировать.. как тут учиться и подражать удачным примерам? ну и перекомпиливать не надо - это основной плюс и код открыт - это тоже плюс я уж и не пойму... плюс или не будет плюса? Edited May 31, 2016 by goodman 1 Quote Share this post Link to post Short link Share on other sites
sirmax 5,499 #330529 Posted May 31, 2016 вот и грусть печаль)) все кинутся компилировать и обфусцировать.. как тут учиться и подражать удачным примерам? я уж и не пойму... плюс или не будет плюса? мы против обфускации, поэтому и сделали загрузку .py, а не .pyc 1 Quote Share this post Link to post Short link Share on other sites
seriych 2,178 #330530 Posted May 31, 2016 Так что тут для правильного расчета нужно будет создавать две отдельных функцииДля "правильного расчета" вообще нафиг не нужно отображать процент от изначального хп команды, важно лишь соотношение между HP команд. 1 Quote Share this post Link to post Short link Share on other sites
sirmax 5,499 #330531 Posted May 31, 2016 Вообще байткод для того и сделан, чтобы шустрее интерпретация осуществлялась разницы нет, он все равно при загрузке преобразуется в памяти в тот же байткод Quote Share this post Link to post Short link Share on other sites
night_dragon_on 5,601 #330536 Posted May 31, 2016 Для "правильного расчета" вообще нафиг не нужно отображать процент от изначального хп команды, важно лишь соотношение между HP команд. Суть не в отображении процента, а изменение размера фоновой подложки пропорционально изменению ХП. Quote Share this post Link to post Short link Share on other sites
demon2597 5,468 #330540 Posted May 31, 2016 какие проценты, какие подложки? зачем? сейчас сделано лаконично, понятно и красиво, для чего всё усложнять и прикручивать всякую ерунду? Quote Share this post Link to post Short link Share on other sites
Kapany3uk 948 #330541 Posted May 31, 2016 какие проценты, какие подложки? зачем? сейчас сделано лаконично, понятно и красиво, для чего всё усложнять и прикручивать всякую ерунду? "Воу-воу, полегче" :))не дави на инициативу: я вот все жду, пока кто-нить выложит внятный код для анимации (с ддс-ками или пнг-шками) - вот ее очень не хватает в кастомизации... Quote Share this post Link to post Short link Share on other sites
goodman 664 #330542 Posted May 31, 2016 "Воу-воу, полегче" :)) не дави на инициативу: я вот все жду, пока кто-нить выложит внятный код для анимации (с ддс-ками или пнг-шками) - вот ее очень не хватает в кастомизации... тоже жду интересных идей от наших светлых голов. посмотрю, а там может и у меня понимание появится и идеи в дальнейшем :) Quote Share this post Link to post Short link Share on other sites
wotunion 95 #330543 Posted May 31, 2016 Тут тоже один минус, в таком виде расчет для одной команды будет неверным так как переменная с максимальным начальным значением запаса прочности берется из большего значения толь или иной команды. ммм. может сбрасывать по завершению боя типа @registerEvent(score_panel._FragCorrelationPanel, 'destroy') def destroy_hp(*args, **kwargs): try: hp_max_team = 0 except Exception, ex: err(traceback.format_exc()) Quote Share this post Link to post Short link Share on other sites
night_dragon_on 5,601 #330549 Posted May 31, 2016 может сбрасывать по завершению боя Так дело же немного в другом, там процент вычисляется для двух команд (в зависимости от переменой - current_team). При первом расчёте для команды "0", союзников, присваивается максимальное значение хп на начало боя в константу "hp_max_team", производится далее расчёт процента относительно текущего значения хп союзников. В тоже время нам нужно вычислить тот же процент, но уже для команды противника "1", а параметр "hp_max_team" уже имеет ненулевое значение и расчёт продолжает вестись относительно него, что неправильно в этом случае. Quote Share this post Link to post Short link Share on other sites