Jump to content
Korean Random
goodman

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

Recommended Posts

 

 

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

поделишься? 

Share this post


Link to post

Short link
Share on other sites

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

 

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

Share this post


Link to post

Short link
Share on other sites

 

 

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

Share this post


Link to post

Short link
Share on other sites

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

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

Share this post


Link to post

Short link
Share on other sites

 

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

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

Share this post


Link to post

Short link
Share on other sites

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

Share this post


Link to post

Short link
Share on other sites

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

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

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

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

Edited by neLeax

Share this post


Link to post

Short link
Share on other sites

 

 

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

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

  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

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

 

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

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

Share this post


Link to post

Short link
Share on other sites

а полевые испытания показали что 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'
Edited by sirmax

Share this post


Link to post

Short link
Share on other sites

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

 

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

Edited by Kupnu4

Share this post


Link to post

Short link
Share on other sites

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

Share this post


Link to post

Short link
Share on other sites

 

 

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

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

 

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

Share this post


Link to post

Short link
Share on other sites

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

 

да

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

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

Share this post


Link to post

Short link
Share on other sites

Тогда надо привязаться к 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

Edited by yan-polonov

Share this post


Link to post

Short link
Share on other sites
"format": "{{py:xvm.test.percent(0)}}"

 

Спасибо )

 

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

 

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

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

Edited by yan-polonov

Share this post


Link to post

Short link
Share on other sites

 

 

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

Share this post


Link to post

Short link
Share on other sites

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

поделишься?

 

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

Спасибо )

 

 

 

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

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

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

 

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

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

 

 

поделишься? 
 

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

Share this post


Link to post

Short link
Share on other sites

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

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

  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...