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

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

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

 

 

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

Вот это действительно круто.


можно и папочку переименовать в py_scripts или подобное


а конструкция импорта модуля из папки типа

import folder.subfolder_py_file

сработает?

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


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

 

 

Да. Кстати, можно их использовать не только для макросов, но и моды писать.
А есть какая-то разница с тем, что тот же .pyc кинуть в scripts\client\gui\mods? кроме того, что тут .py, а не .pyc. Или там импортить из XVM нельзя?

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


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

А есть какая-то разница с тем, что тот же .pyc кинуть в scripts\client\gui\mods? кроме того, что тут .py, а не .pyc. Или там импортить из XVM нельзя?

в целом нет разницы, только у нас отключен импорт нескольких системных модулей.

ну и перекомпиливать не надо - это основной плюс

и код открыт - это тоже плюс

можно и папочку переименовать в py_scripts или подобное

Можно рядом дополнительную сделать, чтобы макросы не мешались с модами. Если идея будет пользоваться популярностью, то наверно так и сделаем.

а конструкция импорта модуля из папки типа

import folder.subfolder_py_file

сработает?

не проверял, но по идее можно сделать, если не работает

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

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


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

 

 

в целом нет разницы, только у нас отключен импорт нескольких системных модулей.
 

а каких?

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


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

а каких?

https://bitbucket.org/XVM/xvm/commits/1b39103936a765acfa1faf60a9d21d0065a2995f

illegal_functions = ('__import__', 'eval', 'execfile')
illegal_import = ('os', 'sys', 'import_lib')
Изменено пользователем seriych

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


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

Короче ограничения по фс

Вообще байткод для того и сделан, чтобы шустрее интерпретация осуществлялась, может поддержку pyc как опцию стоит ввести?

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


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

Короче ограничения по фс

Вообще байткод для того и сделан, чтобы шустрее интерпретация осуществлялась, может поддержку pyc как опцию стоит ввести?

ну если ты сделаешь анализатор pyc в ast, то ок. :)

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


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

как в самом первом варианте py макросов

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


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

 

 

Да, точно, оно ж глобальное для клиента, и между боями запоминается.

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

 

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

 

'hp_panel.py ; battleLabelsTemplates.xc ; shot-1.png'

{{py:xvm.frag_correlation.percent_hp(0)}}
{{py:xvm.frag_correlation.percent_hp(1)}}
import BigWorld
import xvm_battle.python.fragCorrelationPanel as panel

actual_arenaUniqueID = None
hp_max_team = 0

@xvm.export('xvm.frag_correlation.current_hp', deterministic=False)
def current_hp(current_team):
    return panel.teams_totalhp[current_team]

@xvm.export('xvm.frag_correlation.percent_hp', deterministic=False)
def percent_hp(current_team):
    global actual_arenaUniqueID, hp_max_team
    arenaUniqueID = BigWorld.player().arenaUniqueID
    if actual_arenaUniqueID != arenaUniqueID and hp_max_team == 0:
      actual_arenaUniqueID = arenaUniqueID
      hp_max_team = max(panel.teams_totalhp)
    return round((100. * current_hp(current_team)) / hp_max_team, 0)

57e4af237927.png

 

 

Во втором случае расчет для одной команды производится нормально, а для другой остается постоянной переменная с максимальным начальным значением запаса прочности.

 

'hp_panel.py ; battleLabelsTemplates.xc ; shot-2.png'

{{py:xvm.frag_correlation.percent_hp(0)}}
{{py:xvm.frag_correlation.percent_hp(1)}}
import BigWorld
import xvm_battle.python.fragCorrelationPanel as panel
actual_arenaUniqueID = None
hp_max_team = 0
@xvm.export('xvm.frag_correlation.percent_hp', deterministic=False)
def percent_hp(current_team):
    global actual_arenaUniqueID, hp_max_team
    arenaUniqueID = BigWorld.player().arenaUniqueID
    if actual_arenaUniqueID != arenaUniqueID and hp_max_team == 0:
      actual_arenaUniqueID = arenaUniqueID
      hp_max_team = panel.teams_totalhp[current_team]
    return round((100. * current_hp(current_team)) / hp_max_team, 0)

650d53c2e868.png

 

Так что тут для правильного расчета нужно будет создавать две отдельных функции

 

import BigWorld
hp_max_ally = 0
hp_max_enemy = 0
actual_arenaUniqueID = None

@xvm.export('xvm.frag_correlation.percent_hp_ally', deterministic=False)
def percent_hp_ally():
    global actual_arenaUniqueID, hp_max_ally
    arenaUniqueID = BigWorld.player().arenaUniqueID
   if actual_arenaUniqueID != arenaUniqueID and hp_max_ally == 0:
      actual_arenaUniqueID = arenaUniqueID
      hp_max_ally = panel.teams_totalhp[0]
    return round((100. * current_hp(0)) / hp_max_ally, 0)

@xvm.export('xvm.frag_correlation.percent_hp_enemy', deterministic=False)
def percent_hp_enemy():
    global actual_arenaUniqueID, hp_max_enemy
    arenaUniqueID = BigWorld.player().arenaUniqueID
    if actual_arenaUniqueID != arenaUniqueID and hp_max_enemy == 0:
      actual_arenaUniqueID = arenaUniqueID
      hp_max_enemy = panel.teams_totalhp[1]
    return round((100. * current_hp(1)) / hp_max_enemy, 0)

 

Или можно как то по другому выкрутится?

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


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

Вообще байткод для того и сделан, чтобы шустрее интерпретация осуществлялась, может поддержку pyc как опцию стоит ввести?

ну если ты сделаешь анализатор pyc в ast, то ок. :)

Парни, вы только не заставляйте пользователей компилировать кастомные файлы - пусть при загрузке автоматом компилятся (а мы ничего и не заметим :))

 

 

 

вот и грусть печаль)) все кинутся компилировать и обфусцировать..
Вот-вот! Изменено пользователем Kapany3uk

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


Ссылка на сообщение
Поделиться на других сайтах
(изменено)
может поддержку pyc как опцию стоит ввести?

вот и грусть печаль)) все кинутся компилировать и обфусцировать.. как тут учиться и подражать удачным примерам?  :hmm:

 

 

ну и перекомпиливать не надо - это основной плюс и код открыт - это тоже плюс
я уж и не пойму... плюс или не будет плюса? Изменено пользователем goodman
  • Нравится 1

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


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

вот и грусть печаль)) все кинутся компилировать и обфусцировать.. как тут учиться и подражать удачным примерам?  :hmm:

я уж и не пойму... плюс или не будет плюса?

мы против обфускации, поэтому и сделали загрузку .py, а не .pyc

  • Нравится 1

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


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

Так что тут для правильного расчета нужно будет создавать две отдельных функции

Для "правильного расчета" вообще нафиг не нужно отображать процент от изначального хп команды, важно лишь соотношение между HP команд.
  • Нравится 1

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


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

Вообще байткод для того и сделан, чтобы шустрее интерпретация осуществлялась

разницы нет, он все равно при загрузке преобразуется в памяти в тот же байткод

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


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

Для "правильного расчета" вообще нафиг не нужно отображать процент от изначального хп команды, важно лишь соотношение между HP команд.

Суть не в отображении процента, а изменение размера фоновой подложки пропорционально изменению ХП.

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


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

какие проценты, какие подложки? зачем? сейчас сделано лаконично, понятно и красиво, для чего всё усложнять и прикручивать всякую ерунду?

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


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

 

 

какие проценты, какие подложки? зачем? сейчас сделано лаконично, понятно и красиво, для чего всё усложнять и прикручивать всякую ерунду?
"Воу-воу, полегче" :))

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

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


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

"Воу-воу, полегче" :))

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

 

:heh:  тоже жду интересных идей от наших светлых голов. посмотрю, а там может и у меня понимание появится и идеи в дальнейшем :)

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


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

 

 

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

 

ммм.

может сбрасывать по завершению боя 

типа

@registerEvent(score_panel._FragCorrelationPanel, 'destroy')
        def destroy_hp(*args, **kwargs):
            try:           
                hp_max_team = 0
            except Exception, ex:
                err(traceback.format_exc())

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


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

может сбрасывать по завершению боя

Так дело же немного в другом, там процент вычисляется для двух команд (в зависимости от переменой - current_team). При первом расчёте для команды "0", союзников, присваивается максимальное значение хп на начало боя в константу "hp_max_team", производится далее расчёт процента относительно текущего значения хп союзников. В тоже время нам нужно вычислить тот же процент, но уже для команды противника "1", а параметр "hp_max_team" уже имеет ненулевое значение и расчёт продолжает вестись относительно него, что неправильно в этом случае.

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


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

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

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

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

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

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

Войти

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

Войти сейчас


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

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

×