Jump to content
Korean Random
goodman

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

Recommended Posts

 

 

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

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


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


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

import folder.subfolder_py_file

сработает?

Share this post


Link to post

Short link
Share on other sites

 

 

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

Share this post


Link to post

Short link
Share on other sites

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

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

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

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

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

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

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

import folder.subfolder_py_file

сработает?

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

Edited by sirmax

Share this post


Link to post

Short link
Share on other sites

 

 

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

а каких?

Share this post


Link to post

Short link
Share on other sites

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

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

Share this post


Link to post

Short link
Share on other sites

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

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

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

Share this post


Link to post

Short link
Share on other sites

 

 

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

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

 

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

Share this post


Link to post

Short link
Share on other sites

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

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

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

 

 

 

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

Share this post


Link to post

Short link
Share on other sites
может поддержку pyc как опцию стоит ввести?

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

 

 

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

Share this post


Link to post

Short link
Share on other sites

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

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

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

  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

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

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

Share this post


Link to post

Short link
Share on other sites

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

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

Share this post


Link to post

Short link
Share on other sites

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

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

Share this post


Link to post

Short link
Share on other sites

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

Share this post


Link to post

Short link
Share on other sites

 

 

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

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

Share this post


Link to post

Short link
Share on other sites

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

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

 

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

Share this post


Link to post

Short link
Share on other sites

 

 

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

 

ммм.

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

типа

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

Share this post


Link to post

Short link
Share on other sites

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

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

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.

×