Kapany3uk 948 #330087 Posted May 29, 2016 макросы на тоталхп и цвет по той самой формуле,что обсуждали, у меня готовые лежат с возвращением :))поделишься? Quote Share this post Link to post Short link Share on other sites
sirmax 5,499 #330088 Posted May 29, 2016 А я сам не знаю, как это правильно сделать. А что ты патаешься этим type() сделать? По идее надо так: import xvm_battle.python.fragCorrelationPanel as panel total_hp_start = None A = None B = None @xvm.export('thp') def total_hp_string(): global total_hp_start, A, B if total_hp_start is None: A = panel.teams_totalhp[0] B = panel.teams_totalhp[1] total_hp_start = A + B #blablabla Quote Share this post Link to post Short link Share on other sites
seriych 2,178 #330089 Posted May 29, 2016 А что ты патаешься этим type() сделать? тоже самое, что ты в "if total_hp_start is None:" Quote Share this post Link to post Short link Share on other sites
sirmax 5,499 #330091 Posted May 29, 2016 тоже самое, что ты в "if total_hp_start is None:" исключения лучше не использовать по возможности, так как они "тяжелые". Quote Share this post Link to post Short link Share on other sites
Kupnu4 0 #330156 Posted May 30, 2016 А что ты патаешься этим type() сделать? По идее надо так: import xvm_battle.python.fragCorrelationPanel as panel total_hp_start = None A = None B = None @xvm.export('thp') def total_hp_string(): global total_hp_start, A, B if total_hp_start is None: A = panel.teams_totalhp[0] B = panel.teams_totalhp[1] total_hp_start = A + B #blablabla На ночь глядя пришла идея, а что если красить кол-во хп по % от стартового значения и просидев до утра родилось: Max_HP_start = 0 ############################### @xvm.export('kupnu4.tHP.colorteam') def total_hp_color_team(cur_team): global Max_HP_start if Max_HP_start == 0: Max_HP_start = max(panel.teams_totalhp) current_hp = panel.teams_totalhp[cur_team] * 100 / Max_HP_start if current_hp >= 85: return '#60FF00' elif current_hp >= 45: return '#F8F400' elif current_hp >= 15: return '#FE7903' else: return '#FE0E00' На сколько это кривое решение? просто дуб в питоне, но с программированием как бы дружу Quote Share this post Link to post Short link Share on other sites
sirmax 5,499 #330179 Posted May 30, 2016 работает и ладно, насчет чистоты кода не парься, ты же для себя делаешь. Quote Share this post Link to post Short link Share on other sites
anatoly999 137 #330190 Posted May 30, 2016 (edited) Если в блоках с условиями if, elif, else. К примеру в таком: def mainGunR(): gun = En_max * 0.2 if gun < 1000: gun = 1000 return int(round(gun, 2))Если вместо табов в начале строки использовать пробелы (или даже в какой нибудь строке поставить лишний таб), то весь код не грузиться.В блоках без условий такого нет. А я вчера голову все ломал, почему не получается подобное сделать, хотя все правильно писал. Edited May 30, 2016 by neLeax Quote Share this post Link to post Short link Share on other sites
seriych 2,178 #330194 Posted May 30, 2016 Если вместо табов в начале строки использовать пробелы (или даже в какой нибудь строке поставить лишний таб), то весь код не грузиться.В блоках без условий такого нет. В питоне для упорядочивания последовательности действий используются не скобки или специальные слова, как в других языках, а количество отступов в начале строки. В зависимости от компилятора смешивание пробелов и табуляций в начале одной строки может быть как вообще запрещено, так и приводить к непредсказуемым последствиям, так как компилятор не знает, какому количеству пробелов соответсвует табуляция. Так что используй что-то одно для отступов: либо только пробелы, либо только табуляцию.У меня в notepad++ забиндено на сочетание клавиш убирание замыкающих отступов, преобразование всех табуляций в пробелы и сохранение файла. Всегда сохраняю программные файлы этим сочетанием клавиш и нет проблем. 1 Quote Share this post Link to post Short link Share on other sites
Kupnu4 0 #330251 Posted May 30, 2016 работает и ладно, насчет чистоты кода не парься, ты же для себя делаешь. а полевые испытания показали что Max_HP_start приняло значение из 1го боя и всё, больше не хочет меняться. вот теперь как это решить? сделать проверку на обнуление одного из хп, а вдруг захват базы Quote Share this post Link to post Short link Share on other sites
sirmax 5,499 #330258 Posted May 30, 2016 (edited) а полевые испытания показали что Max_HP_start приняло значение из 1го боя и всё, больше не хочет меняться. вот теперь как это решить? сделать проверку на обнуление одного из хп, а вдруг захват базы Да, точно, оно ж глобальное для клиента, и между боями запоминается. Тогда надо привязаться к arenaUniqueID: import BigWorld g_arenaUniqueID = None g_maxStartHP = 0 ############################### @xvm.export('kupnu4.tHP.colorteam') def total_hp_color_team(cur_team): global g_arenaUniqueID, g_maxStartHP arenaUniqueID = BigWorld.player().arenaUniqueID if g_arenaUniqueID != arenaUniqueID: g_arenaUniqueID = arenaUniqueID: g_maxStartHP = max(panel.teams_totalhp) current_hp = panel.teams_totalhp[cur_team] * 100 / g_maxStartHP if current_hp >= 85: return '#60FF00' elif current_hp >= 45: return '#F8F400' elif current_hp >= 15: return '#FE7903' else: return '#FE0E00' Edited May 30, 2016 by sirmax Quote Share this post Link to post Short link Share on other sites
Kupnu4 0 #330262 Posted May 30, 2016 (edited) а если карта 3 раза к ряду одна и таже? на разных танках с разным общим хп? не раз просто было уже ЗЫ а есть ли инфа о начале боя? переменная или с того же таймера? Edited May 30, 2016 by Kupnu4 Quote Share this post Link to post Short link Share on other sites
sirmax 5,499 #330264 Posted May 30, 2016 arenaUniqueID - это уникальный идентификатор боя, а не карты. Он для каждого боя будет разным. Quote Share this post Link to post Short link Share on other sites
Kupnu4 0 #330271 Posted May 30, 2016 if g_arenaUniqueID != arenaUniqueID: g_arenaUniqueID = arenaUniqueID: g_maxStartHP = max(panel.teams_totalhp) во 2й строчке двоеточие лишнее?) ЗЫ Спасибо за подсказочку, погляжу тоже в оборот пошел код? Quote Share this post Link to post Short link Share on other sites
sirmax 5,499 #330276 Posted May 30, 2016 во 2й строчке двоеточие лишнее?) дапогляжу тоже в оборот пошел код?я просто его взял для примера Quote Share this post Link to post Short link Share on other sites
yan-polonov 2 #330287 Posted May 30, 2016 (edited) Тогда надо привязаться к arenaUniqueID: во 2й строчке двоеточие лишнее?) Как правильно теперь задать тип переменной при выборе команды 'test.py' "format": "{{py:xvm.test.percent('0')}}""format": "{{py:xvm.test.percent('1')}}"======================================================================================================import BigWorld g_arenaUniqueID = Noneg_maxStartHP = [email protected]('xvm.test.percent')def percent(cur_team): global g_arenaUniqueID, g_maxStartHP arenaUniqueID = BigWorld.player().arenaUniqueID if g_arenaUniqueID != arenaUniqueID: g_arenaUniqueID = arenaUniqueID g_maxStartHP = max(panel.teams_totalhp) return round((100. * panel.teams_totalhp[cur_team]) / g_maxStartHP, 2) ======================================================================================================2016-05-30 22:05:45: [ERROR] Traceback (most recent call last): File "xvm_main/python_macro.py", line 152, in process_python_macro File "xvm_main/python_macro.py", line 145, in <lambda> File "res_mods/configs/xvm/py_macro\t.py", line 27, in percent return round((100. * int(panel.teams_totalhp[cur_team])) / g_maxStartHP, 2)TypeError: list indices must be integers, not str Edited June 2, 2016 by yan-polonov Quote Share this post Link to post Short link Share on other sites
sirmax 5,499 #330288 Posted May 30, 2016 "format": "{{py:xvm.test.percent(0)}}" 1 Quote Share this post Link to post Short link Share on other sites
yan-polonov 2 #330289 Posted May 30, 2016 (edited) "format": "{{py:xvm.test.percent(0)}}" Спасибо ) А, нашел, позавчера, ну тогда втопку А большая разница в нагрузке на расчеты между тем как раньше был прописан вывод очков прочности и сейчас через battleLabels. И сильно ли должно нагружать систему если к примеру у меня прописано 4 поля с обновлением "ON_PLAYERS_HP_CHANGED" и два с "ON_VEHICLE_DESTROYED" Edited June 2, 2016 by yan-polonov Quote Share this post Link to post Short link Share on other sites
goodman 664 #330301 Posted May 30, 2016 4 поля с обновлением "ON_PLAYERS_HP_CHANGED" и два с "ON_VEHICLE_DESTROYED" насколько я понимаю, то больше влияет количество ивентов, чем количество полей, если утрировать Quote Share this post Link to post Short link Share on other sites
wotunion 95 #330404 Posted May 31, 2016 с возвращением :)) поделишься? Так там основа не сам py макрос, а переделанеый fragcorrelationpanel.py Спасибо ) А большая разница в нагрузке на расчеты между тем как раньше было прописан вывод очков прочности и сейчас через battleLabels. И сильно ли должно нагружать систему если к примеру я меня прописано 4 поля с обновлением "ON_PLAYERS_HP_CHANGED" и два с "ON_VEHICLE_DESTROYED" Несущественная разница по выводу тоталхп По кол-ву ивентов - нагрузка пропорциональна, но существенна ли она - смотрите опытным путем Кол-во полей тоже оказывает влияние поделишься? Хотя есть смутные сомнения: py-макросы из папки автоматом грузятся? Quote Share this post Link to post Short link Share on other sites
sirmax 5,499 #330441 Posted May 31, 2016 Хотя есть смутные сомнения: py-макросы из папки автоматом грузятся? Да. Кстати, можно их использовать не только для макросов, но и моды писать. 1 Quote Share this post Link to post Short link Share on other sites