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

Фото

[0.9.20 CT] Виджет "Статистика игрока" в ангаре


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

#1 Kapany3uk

Kapany3uk

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

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

Опубликовано 10 Август 2017 - 22:44

Вывод статистики игрока непосредственно в ангаре, с помощью widgets.xc и макросов вида {{mystat.*}} 

 

Прикрепленный файл  shot_014.jpg   12,63 Кб   3 раз скачано

 

скрипт в папку xvm/py_macro/

Прикрепленный файл  hangar_stat.zip   768 байт   57 раз скачано    (необходим для расчета количества победных боев до желаемого процента побед)
код

 

файлы в папку с конфигом

Прикрепленный файл  widgets.xc   718 байт   41 раз скачано
Прикрепленный файл  widgetsTemplates.xc   4,25 Кб   51 раз скачано    (виджет часов дефолтный)

 

варианты размещение в ангаре

 

пример возможных вариантов для вывода "осталось побед до"

Прикрепленный файл  shot_015.jpg   15,85 Кб   0 раз скачано

строка выводится через макрос {{py:winrate_next(...)}}, где задается интервал (минимум одна сотая (0.01)) до желаемого процента побед;

допускаются отрицательные числа, в результате макрос выведет отрицательное число [не] побед (-поражений), которые приведут к снижению процента побед на заданный интервал, 

 

текущий список доступных макросов для виджета (см. macros-hangar_ru.txt)

 

upd: для 0.9.20 CT (в 0.9.19 макросы имеют другие имена, динамический цвет не работает, подробнее тут)


Изменено: Kapany3uk, 11 Август 2017 - 19:12

  • 13

#2 Seki

Seki
  • Пользователь
  • 9 сообщений
  • WoT Server:EU (European)

Опубликовано 11 Август 2017 - 14:30

Good idea! :ok:

 

Where can i find Python script for {{mystat. ...}}, those macros doesn't work for me.


  • 0

#3 Kapany3uk

Kapany3uk

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

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

Опубликовано 11 Август 2017 - 19:14

Where can i find Python script for {{mystat. ...}}, those macros doesn't work for me.
for 9.19 see commit - the first and last simultaneously )) 
  • 0

#4 Tornado_Odan_Rot

Tornado_Odan_Rot

    Котофан

  • Premium Member
  • 6 923 сообщений
  • Nick: Tornado_Odan_Rot
  • WoT Server:RU (Русский)
  • Skype: metallist1995
  • ICQ: ICQ http://vk.com/tornado_odan_rot
  • Город: Одесса

Опубликовано 11 Август 2017 - 20:19

Чёрт, Илья, ты гений


  • 0

#5 Seki

Seki
  • Пользователь
  • 9 сообщений
  • WoT Server:EU (European)

Опубликовано 11 Август 2017 - 20:23

Thanks Kapany3uk.


  • 0

#6 sirmax

sirmax

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

  •  XVM Team
  • 13 172 сообщений
  • Nick: sirmax2
  • WoT Server:RU (Русский)

Опубликовано 12 Август 2017 - 01:19

Давай первый вариант в дефолт.


  • 1

#7 xenus

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

Опубликовано 12 Август 2017 - 11:08

Во втором варианте, скорее всего лутше будет сделать ориентацию относительно низа.

Для себя дела так:

  "stat_hangar": {
    "enabled": true,
    "layer": "normal",
    "type": "extrafield",
    "formats": [
      { // фоновая картинка
        "x": 320,       // координата "х" равна 'width' картинки
        "y": -238,
        "height": 80,
        "scaleX": -1,   // зеркальное отражение по горизонтали
        "screenVAlign": "bottom",
        "format": "<img src='xvm://res/icons/clock/clockBg.png' width='320' height='80'>"
      },
      {
        "updateEvent": "ON_MY_STAT_LOADED",
        "x": 7,
        "y": -234,
        "width": 320,   // ширина текстового поля равна ширине фоновой картинки
        "height": 80,
        "screenVAlign": "bottom",
        "shadow": { "alpha": 80, "blur": 4, "strength": 2 },
        "textFormat": { "color": "0x959688", "size": 15 },
        "format": "<font size='13'>{{l10n:General stats}} (<font color='#F9F1BC'>{{py:xvm.formatDate('%Y-%m-%d')}}</font>)</font>\n{{l10n:WN8}}: <font color='{{mystat.c_wn8}}'>{{mystat.xwn8}} ({{mystat.wn8}})</font> {{l10n:EFF}}: <font color='{{mystat.c_eff}}'>{{mystat.xeff}} ({{mystat.eff}})</font>\n{{l10n:Avg level}}: <font color='{{mystat.c_avglvl}}'>{{mystat.avglvl%.2f}}</font>\n<font size='13'>{{l10n:Wins}}: <font color='{{mystat.c_winrate}}'>{{mystat.winrate%.2f~%}}</font>  ({{py:winrate_next(0.5)}} / {{py:winrate_next(1)}})</font>"
      }
    ]
  }

PS. Пользую минималистичискую карусель в 4 ряда.

PPS. А в целом было бы неплохо реализовать макрос, с помощью котрого можно было бы получать координаты и размеры тех или иных элиментов. Бывают моменты когда возникает необходимость разместить что либо относительно определенного элемента.


Изменено: xenus, 12 Август 2017 - 11:21

  • 1

#8 CrazyST

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

Опубликовано 12 Август 2017 - 13:50

if next == int(next):
    next = int(next)

вот уже минут эдак "много" сижу и не понимаю смысл этого if :)

 

round(winrate,2)

вот тут может быть проблема. ибо round(x,2) всё таки не математическое округление. я у себя благодаря твоему же замечанию исправил. так что странно видеть это у тебя в коде. :)

 

плюс логику можно бы подкорректировать. ибо как-то не системно получается:

winrate: 55.82    diff: 0.5   >>>    next: 56.5

winrate: 55.82    diff: 1      >>>    next: 56

winrate: 55.82    diff: -1     >>>    next: 54.82

ну и т.д.

вот и получается строка

Побед: 55.82% (871 до 56.5%/232 до 56%)

а должна была бы быть такой

Побед: 55.82% (232 до 56%/871 до 56.5%)

.

 

ну и может стоит учитывать то, что в достижениях отображается округлённый до сотых винрейт. другими словами сейчас {{py:winrate_next(х)}} показывает что нужно еще допустим 2 боя до 55% в то время как в достижениях уже светятся эти 55%


Изменено: CrazyST, 12 Август 2017 - 14:50

  • 0

#9 Kapany3uk

Kapany3uk

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

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

Опубликовано 12 Август 2017 - 19:06

вот и получается строка

...

а должна была бы быть такой

 

от "перемены мест слагаемых сумма не меняется", другими словами, при совместном использовании интервала 0.5 и 1 (что и предполагается в дефолтном исполнении) отображение привычно и знакомо, в противном случае придется писать две формулы и два макроса на отработку именно 0.5 и 1 интервалов. 

Пришлось в угоду универсальности макроса пренебречь этой "перестановкой"...

 

про округление:

повторюсь, пытался ограничить скрипт одним макросом "на все случаи", поэтому погрешностью в расчетах для кастомных интервалов (отличных от 0.5 и 1) пришлось пожертвовать ))

 

и по 

вот уже минут эдак "много" сижу и не понимаю смысл этого if :)
без этого вывод "до 53%" будет выглядеть как "до 53.0%" - вот от этого незначащего нуля после точки и избавлялся...

Есть вариант лучше - давай, мне тоже не нравится "топорность" такого "метода" ))


  • 0

#10 arom

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

Опубликовано 16 Август 2017 - 15:51

с динамическими цветами понятно, но это в лог сыплет тоже потому, что я не на 20CT ? - 

2017-08-16 17:47:14: [ERROR] Traceback (most recent call last):
  File "./res_mods/mods/packages\xvm_main\python\python_macro.py", line 157, in process_python_macro
    return (func(), deterministic)
  File "./res_mods/mods/packages\xvm_main\python\python_macro.py", line 150, in <lambda>
    return (lambda: func(*args), deterministic)
  File "res_mods/configs/xvm/py_macro\hangar_stat.py", line 20, in winrate_next
    winrate = itemsCache.items.getAccountDossier().getRandomStats().getWinsEfficiency() * 100
TypeError: unsupported operand type(s) for *: 'NoneType' and 'int'
arg='winrate_next(1)'
2017-08-16 17:47:14: [ERROR] Traceback (most recent call last):
  File "./res_mods/mods/packages\xvm_main\python\python_macro.py", line 157, in process_python_macro
    return (func(), deterministic)
  File "./res_mods/mods/packages\xvm_main\python\python_macro.py", line 150, in <lambda>
    return (lambda: func(*args), deterministic)
  File "res_mods/configs/xvm/py_macro\hangar_stat.py", line 20, in winrate_next
    winrate = itemsCache.items.getAccountDossier().getRandomStats().getWinsEfficiency() * 100
TypeError: unsupported operand type(s) for *: 'NoneType' and 'int'
arg='winrate_next(0.5)'

  • 0

#11 Devil75

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

Опубликовано 16 Август 2017 - 16:05

с динамическими цветами понятно, но это в лог сыплет тоже потому, что я не на 20CT ? - 
 

Нет,это что-то не так с обновленным  xvm-6.8.2,там еще и с полосой захвата проблемы.


  • 0

#12 ADv

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

Опубликовано 16 Август 2017 - 17:43

В последней релизной версии ошибки из лога пропали и рейтинги отображаются корректно.

Динамические цвета будут в 9.20? В теме не нашел отсылок.


Изменено: ADv, 16 Август 2017 - 17:43

  • 0

#13 arom

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

Опубликовано 16 Август 2017 - 18:39

на всякий случай сообщу, что ошибки выше - как раз на последней релизной версии (она же 7826).


Изменено: arom, 16 Август 2017 - 18:41

  • 0

#14 Kapany3uk

Kapany3uk

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

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

Опубликовано 16 Август 2017 - 22:38

на всякий случай сообщу, что ошибки выше - как раз на последней релизной версии (она же 7826).

ошибки в логе из-за вероятной проблемы на стороне ВГ:  API периодически не корректно отдает данные...

 

для текущего патча 0.9.19.1.2 все выложенное вполне работоспособно, только в widgetsTemplates.xc надо заменить пару макросов: 

вместо {{mystat.eff}} вписать {{mystat.e}} (первоначальная версия наименования)

вместо {{mystat.avglvl%.2f}} вписать {{mystat.lvl%.2f}} (также первая версия макроса)

 

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

Прикрепленный файл  widgets.xc   717 байт   20 раз скачано

Прикрепленный файл  widgetsTemplates.xc   3,83 Кб   25 раз скачано

скрин


  • 2

#15 CrazyST

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

Опубликовано 17 Август 2017 - 13:12

Kapany3uk, спасибо за исходники и примеры.

сделал так

1366x768 & 1920x1080
отображение с разными аргументами макроса (размер шага и кол-во шагов):

Прикрепленный файл  2.jpg   15,05 Кб   0 раз скачано Прикрепленный файл  3.jpg   15,01 Кб   0 раз скачано

Прикрепленный файл  4.jpg   14,87 Кб   0 раз скачано Прикрепленный файл  5.jpg   14,78 Кб   0 раз скачано

"зеленым" - число побед до %, "красным" - число сливов до %

step - размер шага кратный 0,01 и stepscount - кол-во шагов (целое) задают критерий расчета целевого процента побед. если stepscount == 0 или не указан, то расчет боёв будет вестись до процента побед ближайшего к текущему (или большего или меньшего) и кратного шагу. если stepscount == 1, то ближайшего в сторону увеличения и кратного шагу, stepscount == -1 значит ближайшего в сторону уменьшения и кратного шагу. ну и т.д.

примеры

стандартные результаты для статистики получаются из (step=0,5 stepscount=1) и (step=0,5 stepscount=2) соответственно.

макросы динамических цветов ясное дело пока не работают.

с датой только так и не смог нормально перевести timestamp из {{mystat.ts}} в нормальный вид. а текущая дата тут не очень в тему.

UPD: теперь отображается дата и время обновления статистики на сервере XVM, а не текущие

Прикрепленный файл  7.png   2,84 Кб   0 раз скачано Прикрепленный файл  8.jpg   15,79 Кб   0 раз скачано

последняя строка с процентом побед и "боёв до %" содержит актуальную информацию на текущий момент, а WN8 РЭ и средний уровень по состоянию на дату и время из верхней строки.

теперь ждём обновы чтобы уже с макросами цвета отображалось )))

но это так, побаловаться. просто играть в танки уже не так интересно как раньше. а вот конфиг ковырять еще интересно )))

для себя делал и постоянно чекаю такой вот маленький виджет  Прикрепленный файл  6.jpg   3,07 Кб   0 раз скачано

текущий % побед и сколько сливов/побед до его изменения с учётом того, что в достижениях отображается округлённое до сотых значение % побед. другими словами на виджете цифра 7 говорит о том, что нужно 7 побед чтобы % стал не менее чем 55,855 и округлился до 55,86. ну и 6 сливов до того что % станет менее 55,845 и округлится до 55,84


Изменено: CrazyST, 18 Август 2017 - 12:59

  • 2

#16 sirmax

sirmax

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

  •  XVM Team
  • 13 172 сообщений
  • Nick: sirmax2
  • WoT Server:RU (Русский)

Опубликовано 17 Август 2017 - 16:44

Дату через py_macro можно перевести, нужно макрос сделать.
  • 0

#17 CrazyST

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

Опубликовано 17 Август 2017 - 17:22

Дату через py_macro можно перевести, нужно макрос сделать.

это понятно. вот только я не смог подобрать функции :( пару часов пытался без толку... кто бы помог...  сделал. чего вчера тупил непонятно...


Изменено: CrazyST, 18 Август 2017 - 11:45

  • 0

#18 sirmax

sirmax

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

  •  XVM Team
  • 13 172 сообщений
  • Nick: sirmax2
  • WoT Server:RU (Русский)

Опубликовано 18 Август 2017 - 17:18

Можно функцию закоммитить в общий репозиторий, другим тоже пригодится.
  • 1

#19 CrazyST

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

Опубликовано 18 Август 2017 - 17:25

закоммитить

этого я не умею еще. может Kapany3uk сделает pull request.

а функция оказалась простой. долго тупил из-за того что timestamp возвращаемый макросом {{mystat.ts}} имеет 3 лишних для функции разряда (на сколько я понимаю с миллисекундами)

ну и может имеет смысл сделать 2 функции. отдельно дату и отдельно время.

вот я реально туплю в последнее время...

from datetime import datetime
import locale

_defaultlocale = locale.getdefaultlocale()[1]

@xvm.export('unnormalman.DTfromTS')
def DTfromTS(ts=0,TSFormat='%d.%m.%Y %H:%M'):
    dt = datetime.fromtimestamp(int(ts/1000)).strftime(TSFormat).decode(_defaultlocale)
    return dt

вызов такой

{{py:unnormalman.DTfromTS({{mystat.ts}})}} //по умолчанию дата и время

или можно со своим форматом

{{py:unnormalman.DTfromTS({{mystat.ts}},'%d.%m.%Y')}} //только дата

формат можно построить используя эту таблицу


Изменено: CrazyST, 18 Август 2017 - 21:39

  • 0

#20 sirmax

sirmax

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

  •  XVM Team
  • 13 172 сообщений
  • Nick: sirmax2
  • WoT Server:RU (Русский)

Опубликовано 18 Август 2017 - 20:36

deterministic убери, эта функция детерминированная.
И для локализации лучше использовать WGшные методы, так как локализация клиента может не совпадать с локализацией инюгры. Где-то в py_macro были примеры.
  • 0





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

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

© Mr 13