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

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

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

 

 

макросы на тоталхп и цвет по той самой формуле,что обсуждали, у меня готовые лежат
с возвращением :))

поделишься? 

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


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

А я сам не знаю, как это правильно сделать.

 

А что ты патаешься этим 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

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


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

 

 

А что ты патаешься этим type() сделать?
тоже самое, что ты в "if total_hp_start is None:"

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


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

тоже самое, что ты в "if total_hp_start is None:"

исключения лучше не использовать по возможности, так как они "тяжелые".

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


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

 

А что ты патаешься этим 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'

На сколько это кривое решение? просто дуб в питоне, но с программированием как бы дружу

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


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

работает и ладно, насчет чистоты кода не парься, ты же для себя делаешь.

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


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

Если в блоках с условиями if, elif, else. К примеру в таком:

def mainGunR():
	gun = En_max * 0.2
	if gun < 1000:
		gun = 1000
	return int(round(gun, 2))
Если вместо табов в начале строки использовать пробелы (или даже в какой нибудь строке поставить лишний таб), то весь код не грузиться.

В блоках без условий такого нет.

А я вчера голову все ломал, почему не получается подобное сделать, хотя все правильно писал.

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

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


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

 

 

Если вместо табов в начале строки использовать пробелы (или даже в какой нибудь строке поставить лишний таб), то весь код не грузиться.В блоках без условий такого нет.
В питоне для упорядочивания последовательности действий используются не скобки или специальные слова, как в других языках, а количество отступов в начале строки. В зависимости от компилятора смешивание пробелов и табуляций в начале одной строки может быть как вообще запрещено, так и приводить к непредсказуемым последствиям, так как компилятор не знает, какому количеству пробелов соответсвует табуляция. Так что используй что-то одно для отступов: либо только пробелы, либо только табуляцию.

У меня в notepad++ забиндено на сочетание клавиш убирание замыкающих отступов, преобразование всех табуляций в пробелы и сохранение файла. Всегда сохраняю программные файлы этим сочетанием клавиш и нет проблем.

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


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

работает и ладно, насчет чистоты кода не парься, ты же для себя делаешь.

 

а полевые испытания показали что Max_HP_start приняло значение из 1го боя и всё, больше не хочет меняться. вот теперь как это решить?  :dots:

сделать проверку на обнуление одного из хп, а вдруг захват базы  :hmm:

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


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

а полевые испытания показали что Max_HP_start приняло значение из 1го боя и всё, больше не хочет меняться. вот теперь как это решить?  :dots:

сделать проверку на обнуление одного из хп, а вдруг захват базы  :hmm:

Да, точно, оно ж глобальное для клиента, и между боями запоминается. Тогда надо привязаться к 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'
Изменено пользователем sirmax

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


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

а если карта 3 раза к ряду одна и таже? на разных танках с разным общим хп? не раз просто было уже

 

ЗЫ а есть ли инфа о начале боя? переменная или с того же таймера?

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

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


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

arenaUniqueID - это уникальный идентификатор боя, а не карты. Он для каждого боя будет разным.

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


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

 

 

  if g_arenaUniqueID != arenaUniqueID:     g_arenaUniqueID = arenaUniqueID:     g_maxStartHP = max(panel.teams_totalhp)
 

во 2й строчке двоеточие лишнее?)

 

ЗЫ Спасибо за подсказочку, погляжу тоже в оборот пошел код?

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


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

во 2й строчке двоеточие лишнее?)

 

да

погляжу тоже в оборот пошел код?

я просто его взял для примера

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


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

Тогда надо привязаться к arenaUniqueID:

во 2й строчке двоеточие лишнее?)

Как правильно теперь задать тип переменной при выборе команды

 

'test.py'

"format": "{{py:xvm.test.percent('0')}}""format": "{{py:xvm.test.percent('1')}}"======================================================================================================import BigWorld g_arenaUniqueID = Noneg_maxStartHP = 0@xvm.export('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

Изменено пользователем yan-polonov

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


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

"format": "{{py:xvm.test.percent(0)}}"

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


Ссылка на сообщение
Поделиться на других сайтах
"format": "{{py:xvm.test.percent(0)}}"

 

Спасибо )

 

А, нашел, позавчера, ну тогда втопку

 

А большая разница в нагрузке на расчеты между тем как раньше был прописан вывод очков прочности и сейчас через battleLabels.

И сильно ли должно нагружать систему если к примеру у меня прописано 4 поля с обновлением "ON_PLAYERS_HP_CHANGED" и два с "ON_VEHICLE_DESTROYED"

Изменено пользователем yan-polonov

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


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

 

 

4 поля с обновлением "ON_PLAYERS_HP_CHANGED" и два с "ON_VEHICLE_DESTROYED"
насколько я понимаю, то больше влияет количество ивентов, чем количество полей, если утрировать 

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


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

с возвращением :))

поделишься?

 

Так там основа не сам py макрос, а переделанеый fragcorrelationpanel.py

Спасибо )

 

 

 

А большая разница в нагрузке на расчеты между тем как раньше было прописан вывод очков прочности и сейчас через battleLabels.

И сильно ли должно нагружать систему если к примеру я меня прописано 4 поля с обновлением "ON_PLAYERS_HP_CHANGED" и два с "ON_VEHICLE_DESTROYED"

Несущественная разница по выводу тоталхп

 

По кол-ву ивентов - нагрузка пропорциональна, но существенна ли она - смотрите опытным путем

Кол-во полей тоже оказывает влияние

 

 

поделишься? 
 

Хотя есть смутные сомнения: py-макросы из папки автоматом грузятся?

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


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

Хотя есть смутные сомнения: py-макросы из папки автоматом грузятся?

Да. Кстати, можно их использовать не только для макросов, но и моды писать.

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


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

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

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

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

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

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

Войти

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

Войти сейчас


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

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

×