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

Фото

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


  • Чтобы отвечать, сперва войдите на форум
1331 ответов в теме

#41 Kapany3uk

Kapany3uk

    07.10.15 Родилась внучка!

  • Пользователь
  • 2 720 сообщений
  • Nick:Kapany3uk
  • WoT Server:RU (Русский)
  • Город: дер. Осеченки

Опубликовано 29 Май 2016 - 20:19

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

поделишься? 


  • 0

#42 sirmax

sirmax

    [XVM] Разработчик

  •  XVM Developer
  • 12 729 сообщений
  • Nick:sirmax2
  • WoT Server:RU (Русский)

Опубликовано 29 Май 2016 - 20:20

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

 

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

  • 0

#43 seriych

seriych

    Всем счастья

  •  XVM Developer
  • 7 360 сообщений
  • Nick:seriych
  • WoT Server:RU (Русский)
  • Город: Чайковский/Москва

Опубликовано 29 Май 2016 - 20:22

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

#44 sirmax

sirmax

    [XVM] Разработчик

  •  XVM Developer
  • 12 729 сообщений
  • Nick:sirmax2
  • WoT Server:RU (Русский)

Опубликовано 29 Май 2016 - 20:28

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

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


  • 0

#45 Kupnu4

Kupnu4
  • Пользователь
  • 10 сообщений
  • Nick:Kupnu4
  • WoT Server:RU (Русский)

Опубликовано 30 Май 2016 - 07:34

 

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

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


  • 0

#46 sirmax

sirmax

    [XVM] Разработчик

  •  XVM Developer
  • 12 729 сообщений
  • Nick:sirmax2
  • WoT Server:RU (Русский)

Опубликовано 30 Май 2016 - 09:51

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


  • 0

#47 neLeax

neLeax
  • Пользователь
  • 276 сообщений
  • Nick:neLeax
  • WoT Server:RU (Русский)

Опубликовано 30 Май 2016 - 11:05

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

Изменено: neLeax, 30 Май 2016 - 11:09

  • 0

#48 seriych

seriych

    Всем счастья

  •  XVM Developer
  • 7 360 сообщений
  • Nick:seriych
  • WoT Server:RU (Русский)
  • Город: Чайковский/Москва

Опубликовано 30 Май 2016 - 11:20

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

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


  • 1

#49 Kupnu4

Kupnu4
  • Пользователь
  • 10 сообщений
  • Nick:Kupnu4
  • WoT Server:RU (Русский)

Опубликовано 30 Май 2016 - 17:07

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

 

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

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


  • 0

#50 sirmax

sirmax

    [XVM] Разработчик

  •  XVM Developer
  • 12 729 сообщений
  • Nick:sirmax2
  • WoT Server:RU (Русский)

Опубликовано 30 Май 2016 - 17:25

а полевые испытания показали что 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, 30 Май 2016 - 17:26

  • 0

#51 Kupnu4

Kupnu4
  • Пользователь
  • 10 сообщений
  • Nick:Kupnu4
  • WoT Server:RU (Русский)

Опубликовано 30 Май 2016 - 17:36

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

 

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


Изменено: Kupnu4, 30 Май 2016 - 17:38

  • 0

#52 sirmax

sirmax

    [XVM] Разработчик

  •  XVM Developer
  • 12 729 сообщений
  • Nick:sirmax2
  • WoT Server:RU (Русский)

Опубликовано 30 Май 2016 - 17:39

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


  • 0

#53 Kupnu4

Kupnu4
  • Пользователь
  • 10 сообщений
  • Nick:Kupnu4
  • WoT Server:RU (Русский)

Опубликовано 30 Май 2016 - 17:52

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

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

 

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


  • 0

#54 sirmax

sirmax

    [XVM] Разработчик

  •  XVM Developer
  • 12 729 сообщений
  • Nick:sirmax2
  • WoT Server:RU (Русский)

Опубликовано 30 Май 2016 - 18:10

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

да

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

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

#55 yan-polonov

yan-polonov
  • Пользователь
  • 17 сообщений
  • Nick:last_light
  • WoT Server:RU (Русский), NA (American), EU (European)

Опубликовано 30 Май 2016 - 19:03

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

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

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

test.py

Изменено: yan-polonov, 02 Июнь 2016 - 16:21

  • 0

#56 sirmax

sirmax

    [XVM] Разработчик

  •  XVM Developer
  • 12 729 сообщений
  • Nick:sirmax2
  • WoT Server:RU (Русский)

Опубликовано 30 Май 2016 - 19:05

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


  • 1

#57 yan-polonov

yan-polonov
  • Пользователь
  • 17 сообщений
  • Nick:last_light
  • WoT Server:RU (Русский), NA (American), EU (European)

Опубликовано 30 Май 2016 - 19:12

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

 

Спасибо )

 

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

 

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

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


Изменено: yan-polonov, 02 Июнь 2016 - 16:23

  • 0

#58 goodman

goodman
  • Premium Member
  • 3 556 сообщений
  • Город: Саратов

Опубликовано 30 Май 2016 - 20:16

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

#59 wotunion

wotunion
  • Пользователь
  • 299 сообщений
  • Nick:Doberm4n
  • WoT Server:RU (Русский)

Опубликовано 31 Май 2016 - 15:34

с возвращением :))
поделишься?

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

Спасибо )
 

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


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

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

поделишься? 
 

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


  • 0

#60 sirmax

sirmax

    [XVM] Разработчик

  •  XVM Developer
  • 12 729 сообщений
  • Nick:sirmax2
  • WoT Server:RU (Русский)

Опубликовано 31 Май 2016 - 16:26

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

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


  • 1





1 пользователей читают эту тему

0 зарегистрированных, 0 гостей, 1 невидимых

© Mr 13