Jump to content
Korean Random
goodman

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

Recommended Posts

, да ты даже не заметишь разницы), Если сделаешь макросы статистики, то я добавлю макрос "резкого" перехода.)

искуситель ))

Share this post


Link to post

Short link
Share on other sites

@ktulho, Это возможно сделать? А то нормально-работающего нет. То запрещенный , то из модпака со всякой фигней в анаре. 

Share this post


Link to post

Short link
Share on other sites

@ktulho, Это возможно сделать? А то нормально-работающего нет. То запрещенный , то из модпака со всякой фигней в анаре. 

Сделать можно, но как показывает практика, такое лучше через флэш делать.

Share this post


Link to post

Short link
Share on other sites

Сделать можно, но как показывает практика, такое лучше через флэш делать.

Свои флешки можно подключать через ру-?

Share this post


Link to post

Short link
Share on other sites

 

 

Свои флешки можно подключать через ру-?
, имел ввиду, что через py_macro не очень будет выглядеть. Лучше делать отдельным модом с использованием флэш. 

Share this post


Link to post

Short link
Share on other sites

, имел ввиду, что через py_macro не очень будет выглядеть. Лучше делать отдельным модом с использованием флэш. 

я понял. я имею ввиду вообще можно флеш запускать? анимацию какую нибудь например.

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

Почему нет? Чем от протанки (отдельный от модпака) не устраивает?

без модпака он нормально не работает. и ещё куча всякой ср..ни лишней.

Share this post


Link to post

Short link
Share on other sites

@Kornet_WA, речь об отдельном моде, который можно скачать с их сайта. Он не имеет привязки к модпаку и не использует GUI-настройки в ангаре.

Share this post


Link to post

Short link
Share on other sites

@sirmax, а может добавишь возможность использовать эти макросы и их окраску (отметил ** на скрине) для вывода такого виджета статистики игрока прямо в ангаре?

 

attachicon.gifshot_051.jpg

 

как вариант - пополнить список глобальных макросов {{my-***}} и добавить их работоспособность в ангаре...

 

 

ссылка? 

Давай я сделаю макросы статистики, а ты виджет со статой в дефолтный конфиг? :)

UPD: У меня готово, добавил макросы {{mystat.*}} со статистикой текущего игрока. В виджетах нужно использовать событие обновления ON_MY_STAT_LOADED, так как данные грузятся асинхронно.

@sirmax, можно как-нибудь подсмотреть формулу, по которой рассчитывается количество побед для достижения следующего процента побед в ангаре во вкладке "Достижения/Техника"

в общем-то не критично, но у меня получается разница (в 1 победу  :heh: )

https://bitbucket.org/XVM/xvm/src/b9e983af816bf2b9199a50fed930363dcb604d8d/src/xvm/xvm_lobbyprofile_ui/com/xvm/lobby/ui/profile/components/TechniqueStatisticTab.as?at=default&fileviewer=file-view-default#TechniqueStatisticTab.as-232

  • Upvote 4

Share this post


Link to post

Short link
Share on other sites
у меня получается разница (в 1 победу :heh: )

на сколько я понимаю, в строке

value = round( ( 100 * w - p * b ) / ( p - 100 ) )

нужно заменить round на math.ceil и всё будет правильно.

так как округлять нужно только вверх для получения правильного кол-ва побед.

 

а вообще я хотел попросить поделиться готовым py-файлом

ато я питон не знаю и что там нужно импортить и т.д. не в курсе :(

Edited by CrazyST

Share this post


Link to post

Short link
Share on other sites

 

 

нужно заменить round на math.ceil и всё будет правильно.
я пробовал, почему-то не взлетело... остановился на 
value = int( ( 100 * w - p * b ) / ( p - 100 ) ) + 1 

Давай я сделаю макросы статистики, а ты виджет со статой в дефолтный конфиг? :)

ок, сделаю.

 

вопрос: как-нибудь можно привязаться по "у" к верхней границе карусели? просто с местоположением виджета пока не определился, как вариант слева внизу, под экипажем и над каруселью, но тут встает проблема, что карусели у всех разные (1/2/3/4 строки, нормал/смолл) и надо как-то это все синхронизировать...

'как-то так'

post-24956-0-00427000-1501795477_thumb.jpg

 

ps. не смог покрасить цифры, макросы вида {{c:mystat.*}} не работают... будет?

 

pps. пару раз "споткнулся" об макросы {{mystat.e}} и {{mystat.xeff}} (рейтинг вроде один, а имена макросов нет )), до макросов {{mystat.b}} и {{mystat.w}} еще не дошел, но думаю не раз "спотыкнуся"в будущем :))

 

надеюсь, что имена макросов - это пока рабочий вариант...

Share this post


Link to post

Short link
Share on other sites

 

 

У меня готово, добавил макросы {{mystat.*}} со статистикой текущего игрока.
на сколько я понял это данные с сервера XVM, а значит многие из них не актуальны. особенно {{mystat.b}} {{mystat.w}} и т.д. а значит на их основании нельзя посчитать корректное значение "осталось побед до". можно в ангаре как-то получить текущее количество боёв и побед? {{battles}} и {{wins}} в ангаре не работают :(

Share this post


Link to post

Short link
Share on other sites

мда. неправильно я сформулировал вопрос :).

читал я этот пост. вот только ничего у меня не получилось.

теперь бы поменять {{mystat.*}} на данные из ангара.

Edited by CrazyST

Share this post


Link to post

Short link
Share on other sites

Сделаю позже

жду с нетерпением...

 

вопрос правда пока снят

from helpers import dependency
from skeletons.gui.shared import IItemsCache
import math
@xvm.export('unnormalman.winsneeded', deterministic=False)
def winsneeded(t):
        itemsCache = dependency.instance(IItemsCache)
        w=itemsCache.items.getAccountDossier().getRandomStats().getWinsCount()
        b=itemsCache.items.getAccountDossier().getRandomStats().getBattlesCount()
        wr=itemsCache.items.getAccountDossier().getRandomStats().getWinsEfficiency() * 100
        wrn = round(wr,2) + 0.005
        wn = math.ceil( ( 100 * w - wrn * b ) / ( wrn - 100 ) )
        return '{}{}{:0.2f}%'.format(int(wn),t,round(wrn,2))

огромное спасибо @night_dragon_on, но от замены на встроенные макросы я не откажусь

Edited by CrazyST

Share this post


Link to post

Short link
Share on other sites

огромное спасибо @night_dragon_on

 

Можно еще свое событие на обновление данных сделать, чтобы не обновлять поле каждую секунду эвентом "ON_EVERY_SECOND"

 

'hangar.py'

#####################################################################
# imports

from gui.Scaleform.daapi.view.lobby.hangar.Hangar import Hangar
from helpers import dependency
from skeletons.gui.game_control import IBootcampController
from skeletons.gui.shared import IItemsCache
import math
from xfw import *

#####################################################################
# handlers

@registerEvent(Hangar, '_Hangar__updateParams')
def Hangar__updateParams(self):
    if dependency.instance(IBootcampController).isInBootcamp():
        return
    as_event('ON_HANGAR_UPDATE_PARAMS')

@xvm.export('battlesToWins', deterministic=False)
def battlesToWins(header):
    itemsCache = dependency.instance(IItemsCache)
    winsCount = itemsCache.items.getAccountDossier().getRandomStats().getWinsCount()
    battlesCount = itemsCache.items.getAccountDossier().getRandomStats().getBattlesCount()
    winsEfficiency = itemsCache.items.getAccountDossier().getRandomStats().getWinsEfficiency() * 100
    wrn = (round(winsEfficiency * 100) + 0.5) / 100
    wn = math.ceil((100 * winsCount - wrn * battlesCount) / (wrn - 100))
    return '( {}{}{:0.2f}% )'.format(int(wn),header,(round(wrn * 100)) / 100)

'widgetsTemplates.xc'

  "battlesToWins": {
    "enabled": true,
    "layer": "top",
    "type": "extrafield",
    "formats": [
      {
        "updateEvent": "PY(ON_HANGAR_UPDATE_PARAMS)",
        "x": -415,
        "y": 10,
        "width": 150,
        "height": 53,
        "screenHAlign": "center",
        "screenVAlign": "top",
        "shadow": { "enabled": true, "distance": 0, "angle": 90, "color": "0x000000", "alpha": 100, "blur": 4, "strength": 2 },
        "textFormat": { "font": "$FieldFont", "size": 19, "color": "0xBCBCBC", "align": "center", "valign": "top" },
        "format": "{{py:battlesToWins('{{l10n:toWithSpaces}}')}}"
      }
    ]
  }

Edited by night_dragon_on
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

Можно еще свое событие на обновление данных сделать, чтобы не обновлять поле каждую секунду эвентом "ON_EVERY_SECOND"

до этого я точно еще не дорос ))) но и ON_EVERY_SECOND не использую.

обновляю по PY(ON_STATISTICS) из модуля от @ktulho

это событие мне более чем подходит

 

UPD: спасибо за hangar.py. перехожу на него ))

Edited by CrazyST

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...