Kapany3uk Posted May 29, 2016 Share Posted May 29, 2016 макросы на тоталхп и цвет по той самой формуле,что обсуждали, у меня готовые лежат с возвращением :))поделишься? @ Quote Link to comment Short link Share on other sites More sharing options...
sirmax Posted May 29, 2016 Share 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 Link to comment Short link Share on other sites More sharing options...
seriych Posted May 29, 2016 Share Posted May 29, 2016 А что ты патаешься этим type() сделать? тоже самое, что ты в "if total_hp_start is None:" @ Quote Link to comment Short link Share on other sites More sharing options...
sirmax Posted May 29, 2016 Share Posted May 29, 2016 тоже самое, что ты в "if total_hp_start is None:" исключения лучше не использовать по возможности, так как они "тяжелые". @ Quote Link to comment Short link Share on other sites More sharing options...
Kupnu4 Posted May 30, 2016 Share 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 Link to comment Short link Share on other sites More sharing options...
sirmax Posted May 30, 2016 Share Posted May 30, 2016 работает и ладно, насчет чистоты кода не парься, ты же для себя делаешь. @ Quote Link to comment Short link Share on other sites More sharing options...
anatoly999 Posted May 30, 2016 Share 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 Link to comment Short link Share on other sites More sharing options...
seriych Posted May 30, 2016 Share Posted May 30, 2016 Если вместо табов в начале строки использовать пробелы (или даже в какой нибудь строке поставить лишний таб), то весь код не грузиться.В блоках без условий такого нет. В питоне для упорядочивания последовательности действий используются не скобки или специальные слова, как в других языках, а количество отступов в начале строки. В зависимости от компилятора смешивание пробелов и табуляций в начале одной строки может быть как вообще запрещено, так и приводить к непредсказуемым последствиям, так как компилятор не знает, какому количеству пробелов соответсвует табуляция. Так что используй что-то одно для отступов: либо только пробелы, либо только табуляцию.У меня в notepad++ забиндено на сочетание клавиш убирание замыкающих отступов, преобразование всех табуляций в пробелы и сохранение файла. Всегда сохраняю программные файлы этим сочетанием клавиш и нет проблем. 1 @ Quote Link to comment Short link Share on other sites More sharing options...
Kupnu4 Posted May 30, 2016 Share Posted May 30, 2016 работает и ладно, насчет чистоты кода не парься, ты же для себя делаешь. а полевые испытания показали что Max_HP_start приняло значение из 1го боя и всё, больше не хочет меняться. вот теперь как это решить? сделать проверку на обнуление одного из хп, а вдруг захват базы @ Quote Link to comment Short link Share on other sites More sharing options...
sirmax Posted May 30, 2016 Share 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 Link to comment Short link Share on other sites More sharing options...
Kupnu4 Posted May 30, 2016 Share Posted May 30, 2016 (edited) а если карта 3 раза к ряду одна и таже? на разных танках с разным общим хп? не раз просто было уже ЗЫ а есть ли инфа о начале боя? переменная или с того же таймера? Edited May 30, 2016 by Kupnu4 @ Quote Link to comment Short link Share on other sites More sharing options...
sirmax Posted May 30, 2016 Share Posted May 30, 2016 arenaUniqueID - это уникальный идентификатор боя, а не карты. Он для каждого боя будет разным. @ Quote Link to comment Short link Share on other sites More sharing options...
Kupnu4 Posted May 30, 2016 Share Posted May 30, 2016 if g_arenaUniqueID != arenaUniqueID: g_arenaUniqueID = arenaUniqueID: g_maxStartHP = max(panel.teams_totalhp) во 2й строчке двоеточие лишнее?) ЗЫ Спасибо за подсказочку, погляжу тоже в оборот пошел код? @ Quote Link to comment Short link Share on other sites More sharing options...
sirmax Posted May 30, 2016 Share Posted May 30, 2016 во 2й строчке двоеточие лишнее?) дапогляжу тоже в оборот пошел код?я просто его взял для примера @ Quote Link to comment Short link Share on other sites More sharing options...
yan-polonov Posted May 30, 2016 Share 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 Link to comment Short link Share on other sites More sharing options...
sirmax Posted May 30, 2016 Share Posted May 30, 2016 "format": "{{py:xvm.test.percent(0)}}" 1 @ Quote Link to comment Short link Share on other sites More sharing options...
yan-polonov Posted May 30, 2016 Share 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 Link to comment Short link Share on other sites More sharing options...
goodman Posted May 30, 2016 Author Share Posted May 30, 2016 4 поля с обновлением "ON_PLAYERS_HP_CHANGED" и два с "ON_VEHICLE_DESTROYED" насколько я понимаю, то больше влияет количество ивентов, чем количество полей, если утрировать @ Quote Link to comment Short link Share on other sites More sharing options...
wotunion Posted May 31, 2016 Share Posted May 31, 2016 с возвращением :)) поделишься? Так там основа не сам py макрос, а переделанеый fragcorrelationpanel.py Спасибо ) А большая разница в нагрузке на расчеты между тем как раньше было прописан вывод очков прочности и сейчас через battleLabels. И сильно ли должно нагружать систему если к примеру я меня прописано 4 поля с обновлением "ON_PLAYERS_HP_CHANGED" и два с "ON_VEHICLE_DESTROYED" Несущественная разница по выводу тоталхп По кол-ву ивентов - нагрузка пропорциональна, но существенна ли она - смотрите опытным путем Кол-во полей тоже оказывает влияние поделишься? Хотя есть смутные сомнения: py-макросы из папки автоматом грузятся? @ Quote Link to comment Short link Share on other sites More sharing options...
sirmax Posted May 31, 2016 Share Posted May 31, 2016 Хотя есть смутные сомнения: py-макросы из папки автоматом грузятся? Да. Кстати, можно их использовать не только для макросов, но и моды писать. 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.