Jump to content
Korean Random
Kotyarko_O

infoPanel средствами XVM.

Recommended Posts

 

 

ошибка у автора в шапке в архиве
Действительно. Исправил, спасибо.
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

@Kotyarko_O, было бы неплохо, помимо сравнения масс, добавить сравнение КД и сравнение обзора. Причем градиентная окраска теперь "зашита" в xvm/utils.py, осталось только "залить" макросы сравнения :)

Share this post


Link to post

Short link
Share on other sites

 

 

было бы неплохо, помимо сравнения масс, добавить сравнение КД и сравнение обзора.
Да. Попробую заняться в ближайшее время.
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

Обновлено.

  • Обновлены коэффициенты для расчёта перезарядки орудия и ДПМа (с учётом экипажа и оборудования).
  • Добавлена возможность сравнивать некоторые характеристики. Топорненько, правда.
    Для любого сравнения нужно отдельно получать информацию о технике в прицеле и о собственном танке, поэтому для сравнения показателей нужно оформлять дополнительные макросы, которые обрабатывают только танк игрока. Эти макросы я буду вводить по запросам (ввести сразу все будет бессмысленно).

    Для начала доступны такие:
    '{{pl_vehicle_weight}}', '{{pl_gun_reload}}', '{{pl_gun_reload_equip}}', '{{pl_dmg_per_min}}', '{{pl_dmg_per_min_equip}}', '{{pl_vision_radius}}'
    
    Ещё добавлены макросы:
    {{py:isTarget}}           - возвращает 'trg', если в прицеле находится какой-либо танк, пусто - в ином случае.
    {{py:compareDelim(X, Y)}} - символ сравнения относительно двух характеристик X и Y.
    {{py:compareColor(X, Y)}} - цвет сравнения относительно двух характеристик X и Y.
    
    Последние два макроса берут значения из новой секции в конфиге:

     // Values for {{py:compareDelim(X, Y)}} and {{py:compareColor(X, T)}} macros
     // Значения для макросов {{py:compareDelim(X, Y)}} и {{py:compareColor(X, T)}}
     "compareValues": {
       "moreThan": {
         "delim": ">", // '<'
         "color": "#FF0000"
       },
       "equal": {
         "delim": "=",
         "color": "#FFFFFF"
       },
       "lessThan": {
         "delim": "<", // '>'
         "color": "#00FF00"
       }
     }


    Пример.
    Сравнение масс танка в прицеле и собственного:
    {{py:isTarget=trg?<font color='{{py:compareColor({{vehicle_weight}}, {{pl_vehicle_weight}})}}'>{{vehicle_weight}}т. {{py:compareDelim({{vehicle_weight}}, {{pl_vehicle_weight}})}} {{pl_vehicle_weight}}т.</font>|{{pl_vehicle_weight}}т.}}
    

    Длинно, да. Но я выше предупреждал, что топорненько =)

 

Отвечу на вопросы, если что-то непонятно. И удивлюсь, если с моего объяснения всё оказалось понятным...

Edited by Kotyarko_O
  • Upvote 6

Share this post


Link to post

Short link
Share on other sites

Длинно, да. Но я выше предупреждал, что топорненько =)

Дим, а там по-другому никак :))

 

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

post-24956-0-41782400-1489524283.jpg

'py'

##########################################

def isfloat(value):
    try:
        float(value)
        return True
    except ValueError:
        return False

# вывод "больше/меньше/равно" при сравнении двух значений

@xvm.export('my_compare', deterministic=False)
def compare(first,second,more,less,equal):
    if not isfloat(first) or not isfloat(second):
        return ''
    f = float(first)
    s = float(second)
    if f > s:
        value = more
    elif f < s:
        value = less
    else:
        value = equal
    return value


#####################################################################
# Информационная панель - дополнение данными игрока для сравнения

from BigWorld import player

@xvm.export('own_vehicle_weight', deterministic=False)
def own_vehicle_weight():
    return "%i" % (round(player().getVehicleAttached().typeDescriptor.physics['weight'] / 1000, 1))

@xvm.export('own_gun_reload', deterministic=False)
def own_gun_reload():
    return "%.1f" % (player().getVehicleAttached().typeDescriptor.gun['reloadTime'])

@xvm.export('own_vision_radius', deterministic=False)
def own_vision_radius():
    return "%i" % (player().getVehicleAttached().typeDescriptor.turret['circularVisionRadius'])

'xc'

        //  Информационная панель при наведении на танк.
        "infoPanel": {
            "delay": 5,
            "altKey": 56,
            "formats": [
                "<textformat tabstops='[75]'>\n<font color='{{py:my_compare('{{py:own_gun_reload}}', '{{gun_reload_equip}}', '#F50800', '#80d580', '#F4EFE8')}}'>КД:</font>\t<font color='{{py:my_compare('{{py:own_gun_reload}}', '{{gun_reload_equip}}', '#80d580', '#F50800', '#F4EFE8')}}'>{{gun_reload_equip}}с</font>\n<font color='{{py:my_compare('{{py:own_vision_radius}}', '{{vision_radius}}', '#80d580', '#F50800', '#F4EFE8')}}'>Обзор:\t{{vision_radius}}м</font>\n<font color='{{py:my_compare('{{py:own_vehicle_weight}}', '{{vehicle_weight}}', '#80d580', '#F50800', '#F4EFE8')}}'>Масса:\t{{vehicle_weight}}т</font>",
                "{{icon_system_name}}",
                "{{vehicle_name}}"
            ]
        },

 

 

'{{pl_gun_reload}}', '{{pl_gun_reload_equip}}'
а разве эти два значения для игрока не одинаковы? предполагал, что клиент "для себя" отдает только актуальное время с учетом всех плюшек...  Edited by Kapany3uk

Share this post


Link to post

Short link
Share on other sites

Обновлено.

[*]Обновлены коэффициенты для расчёта перезарядки орудия и ДПМа (с учётом экипажа и оборудования).

Правка на уровне скрипта ? Конфиг правок не требует ?
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

 

 

Конфиг правок не требует ?
По процитированному изменению - нет.

 

похоже не хватает "enabled": true, в infoPanel.xc

Спасибо, поправил.

  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

а {{dmg_per_min_equip}} и {{pl_dmg_per_min_equip}} вообще работают? У меня выдают время КД. XVM последний релиз, скрипт свежий.

  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

 

 

а {{dmg_per_min_equip}} и {{pl_dmg_per_min_equip}} вообще работают? У меня выдают время КД.
Действительно. Исправил, спасибо.
  • Upvote 2

Share this post


Link to post

Short link
Share on other sites

@Kotyarko_O, [for CT 0.9.18, release 0.9.18]

{{py:stun_radius}}           - Радиус оглушения снаряда (для АРТ-САУ), м
{{py:stun_duration_min}}     - Минимальное время оглушения (для АРТ-САУ), сек
{{py:stun_duration_max}}     - Максимальное время оглушения (для АРТ-САУ), сек

Code: bitbucket

Edited by night_dragon_on
  • Upvote 2

Share this post


Link to post

Short link
Share on other sites

Kotyarko_O

Можно как-то сделать плавное исчезновение?

Типа динамической альфы по событию с заданым временем.Например event > a100 > 3s. > a0.

Share this post


Link to post

Short link
Share on other sites

Kotyarko_O

Можно как-то сделать плавное исчезновение?

Типа динамической альфы по событию с заданым временем.Например event > a100 > 3s. > a0.

Да и хорошо бы отображение хар-к собственной техники привязать к таймеру "delay".

Share this post


Link to post

Short link
Share on other sites

Можно как-то сделать плавное исчезновение?

Типа динамической альфы по событию с заданым временем.Например event > a100 > 3s. > a0.

Да и хорошо бы отображение хар-к собственной техники привязать к таймеру "delay".

Можно. Но в ближайшее время заняться чем-либо "танковым" возможности нет.

Share this post


Link to post

Short link
Share on other sites

Можно. Но в ближайшее время заняться чем-либо "танковым" возможности нет.

Ничего страшного. Мы же не настаиваем, просто идейки подкидываем)

Share this post


Link to post

Short link
Share on other sites

 

Дим, а там по-другому никак :))

 

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

attachicon.gifshot_002.jpg

'py'

##########################################

def isfloat(value):
    try:
        float(value)
        return True
    except ValueError:
        return False

# вывод "больше/меньше/равно" при сравнении двух значений

@xvm.export('my_compare', deterministic=False)
def compare(first,second,more,less,equal):
    if not isfloat(first) or not isfloat(second):
        return ''
    f = float(first)
    s = float(second)
    if f > s:
        value = more
    elif f < s:
        value = less
    else:
        value = equal
    return value


#####################################################################
# Информационная панель - дополнение данными игрока для сравнения

from BigWorld import player

@xvm.export('own_vehicle_weight', deterministic=False)
def own_vehicle_weight():
    return "%i" % (round(player().getVehicleAttached().typeDescriptor.physics['weight'] / 1000, 1))

@xvm.export('own_gun_reload', deterministic=False)
def own_gun_reload():
    return "%.1f" % (player().getVehicleAttached().typeDescriptor.gun['reloadTime'])

@xvm.export('own_vision_radius', deterministic=False)
def own_vision_radius():
    return "%i" % (player().getVehicleAttached().typeDescriptor.turret['circularVisionRadius'])

'xc'

        //  Информационная панель при наведении на танк.
        "infoPanel": {
            "delay": 5,
            "altKey": 56,
            "formats": [
                "<textformat tabstops='[75]'>\n<font color='{{py:my_compare('{{py:own_gun_reload}}', '{{gun_reload_equip}}', '#F50800', '#80d580', '#F4EFE8')}}'>КД:</font>\t<font color='{{py:my_compare('{{py:own_gun_reload}}', '{{gun_reload_equip}}', '#80d580', '#F50800', '#F4EFE8')}}'>{{gun_reload_equip}}с</font>\n<font color='{{py:my_compare('{{py:own_vision_radius}}', '{{vision_radius}}', '#80d580', '#F50800', '#F4EFE8')}}'>Обзор:\t{{vision_radius}}м</font>\n<font color='{{py:my_compare('{{py:own_vehicle_weight}}', '{{vehicle_weight}}', '#80d580', '#F50800', '#F4EFE8')}}'>Масса:\t{{vehicle_weight}}т</font>",
                "{{icon_system_name}}",
                "{{vehicle_name}}"
            ]
        },

 

 

а разве эти два значения для игрока не одинаковы? предполагал, что клиент "для себя" отдает только актуальное время с учетом всех плюшек... 

 

 

 

Дим, а там по-другому никак :))

 

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

attachicon.gifshot_002.jpg

'py'

##########################################

def isfloat(value):
    try:
        float(value)
        return True
    except ValueError:
        return False

# вывод "больше/меньше/равно" при сравнении двух значений

@xvm.export('my_compare', deterministic=False)
def compare(first,second,more,less,equal):
    if not isfloat(first) or not isfloat(second):
        return ''
    f = float(first)
    s = float(second)
    if f > s:
        value = more
    elif f < s:
        value = less
    else:
        value = equal
    return value


#####################################################################
# Информационная панель - дополнение данными игрока для сравнения

from BigWorld import player

@xvm.export('own_vehicle_weight', deterministic=False)
def own_vehicle_weight():
    return "%i" % (round(player().getVehicleAttached().typeDescriptor.physics['weight'] / 1000, 1))

@xvm.export('own_gun_reload', deterministic=False)
def own_gun_reload():
    return "%.1f" % (player().getVehicleAttached().typeDescriptor.gun['reloadTime'])

@xvm.export('own_vision_radius', deterministic=False)
def own_vision_radius():
    return "%i" % (player().getVehicleAttached().typeDescriptor.turret['circularVisionRadius'])

'xc'

        //  Информационная панель при наведении на танк.
        "infoPanel": {
            "delay": 5,
            "altKey": 56,
            "formats": [
                "<textformat tabstops='[75]'>\n<font color='{{py:my_compare('{{py:own_gun_reload}}', '{{gun_reload_equip}}', '#F50800', '#80d580', '#F4EFE8')}}'>КД:</font>\t<font color='{{py:my_compare('{{py:own_gun_reload}}', '{{gun_reload_equip}}', '#80d580', '#F50800', '#F4EFE8')}}'>{{gun_reload_equip}}с</font>\n<font color='{{py:my_compare('{{py:own_vision_radius}}', '{{vision_radius}}', '#80d580', '#F50800', '#F4EFE8')}}'>Обзор:\t{{vision_radius}}м</font>\n<font color='{{py:my_compare('{{py:own_vehicle_weight}}', '{{vehicle_weight}}', '#80d580', '#F50800', '#F4EFE8')}}'>Масса:\t{{vehicle_weight}}т</font>",
                "{{icon_system_name}}",
                "{{vehicle_name}}"
            ]
        },

 

 

а разве эти два значения для игрока не одинаковы? предполагал, что клиент "для себя" отдает только актуальное время с учетом всех плюшек... 

 

Не мог бы ты скинуть архив со своими настройками, хорошо смотрится

Share this post


Link to post

Short link
Share on other sites

@Kotyarko_O, попробовал использовать 'compareColor' и получается, что код сравнивает значения как строковые, не преобразовывая их в числовые: выдает, к примеру, что 38 больше 160...

'возможный fix'

info_panel.py (начиная со строки 131 заменить код)
def isfloat(value):
    try:
        float(value)
        return True
    except ValueError:
        return False

@xvm.export('compareDelim', deterministic=False)
def compareDelim(value1, value2):
    if not isfloat(value1) or not isfloat(value2):
        return ''
    value1 = float(value1)
    value2 = float(value2)
    if value1 > value2:
        return infoPanelConfig['compareValues']['moreThan']['delim']
    elif value1 < value2:
        return infoPanelConfig['compareValues']['lessThan']['delim']
    else:
        return infoPanelConfig['compareValues']['equal']['delim']

@xvm.export('compareColor', deterministic=False)
def compareColor(value1, value2):
    if not isfloat(value1) or not isfloat(value2):
        return ''
    value1 = float(value1)
    value2 = float(value2)
    if value1 > value2:
        return infoPanelConfig['compareValues']['moreThan']['color']
    elif value1 < value2:
        return infoPanelConfig['compareValues']['lessThan']['color']
    else:
        return infoPanelConfig['compareValues']['equal']['color']

 

архив со своими настройками

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

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

'battleLabelsTemplates.xc'

    "infoPanel": {
      "enabled": true,
      "updateEvent": "PY(ON_INFO_PANEL)",
      "x": 250,
      "y": "{{py:sight.cameraMode=arc?80|{{py:sight.cameraMode=sn?150|150}}}}",
      "width": 250,
      "height": 250,
      "align": "center",
      "valign": "center",
      "screenHAlign": "center",
      "screenVAlign": "center",
      "shadow": { "blur": 5, "strength": 4 },
      "textFormat": { "font": "$FieldFont", "color": "0xF4EFE8", "size": 14, "align": "left" },
      "format": "{{py:infoPanelFormat(0)}}"
    },
    "infoPanelVehicleName": {
      "$ref": { "path":"def.infoPanel" },
      "x": 175,
      "y": "{{py:sight.cameraMode=arc?77|{{py:sight.cameraMode=sn?147|147}}}}",
      "textFormat": { "font": "$FieldFont", "color": "0xF4EFE8", "size": 16, "align": "center" },
      "format": "<b>{{py:infoPanelFormat(1)}}</b>"
    },

'battleLabels.xc'

      ${ "battleLabelsTemplates.xc":"def.infoPanelVehicleName" },
      ${ "battleLabelsTemplates.xc":"def.infoPanel" },

'infoPanel.xc'

    ...
    "formats": [
      "<textformat tabstops='[75]'>\n<font color='{{py:compareColor('{{gun_reload_equip}}', '{{pl_gun_reload_equip}}')}}'>КД:\t{{gun_reload_equip}}с</font>\n<font color='{{py:compareColor('{{pl_vision_radius}}', '{{vision_radius}}')}}'>Обзор:\t{{vision_radius}}м</font>\n<font color='{{py:compareColor('{{pl_vehicle_weight}}', '{{vehicle_weight}}')}}'>Масса:\t{{vehicle_weight}}т</font>",
      "{{vehicle_name}}"
    ]
    ...

 

важно! для соответствия красок в панели основной идее конфига нужно внести изменения в info_panel.py (см. начало поста)

 

Share this post


Link to post

Short link
Share on other sites

попробовал использовать 'compareColor' и получается, что код сравнивает значения как строковые, не преобразовывая их в числовые: выдает, к примеру, что 38 больше 160...

Не могу сейчас проверить. Попробуй с этим скриптом: infoPanel.rar

  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

@Kotyarko_O, попробовал использовать 'compareColor' и получается, что код сравнивает значения как строковые, не преобразовывая их в числовые: выдает, к примеру, что 38 больше 160...

'возможный fix'

info_panel.py (начиная со строки 131 заменить код)
def isfloat(value):
    try:
        float(value)
        return True
    except ValueError:
        return False

@xvm.export('compareDelim', deterministic=False)
def compareDelim(value1, value2):
    if not isfloat(value1) or not isfloat(value2):
        return ''
    value1 = float(value1)
    value2 = float(value2)
    if value1 > value2:
        return infoPanelConfig['compareValues']['moreThan']['delim']
    elif value1 < value2:
        return infoPanelConfig['compareValues']['lessThan']['delim']
    else:
        return infoPanelConfig['compareValues']['equal']['delim']

@xvm.export('compareColor', deterministic=False)
def compareColor(value1, value2):
    if not isfloat(value1) or not isfloat(value2):
        return ''
    value1 = float(value1)
    value2 = float(value2)
    if value1 > value2:
        return infoPanelConfig['compareValues']['moreThan']['color']
    elif value1 < value2:
        return infoPanelConfig['compareValues']['lessThan']['color']
    else:
        return infoPanelConfig['compareValues']['equal']['color']

 

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

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

'battleLabelsTemplates.xc'

    "infoPanel": {
      "enabled": true,
      "updateEvent": "PY(ON_INFO_PANEL)",
      "x": 250,
      "y": "{{py:sight.cameraMode=arc?80|{{py:sight.cameraMode=sn?150|150}}}}",
      "width": 250,
      "height": 250,
      "align": "center",
      "valign": "center",
      "screenHAlign": "center",
      "screenVAlign": "center",
      "shadow": { "blur": 5, "strength": 4 },
      "textFormat": { "font": "$FieldFont", "color": "0xF4EFE8", "size": 14, "align": "left" },
      "format": "{{py:infoPanelFormat(0)}}"
    },
    "infoPanelVehicleName": {
      "$ref": { "path":"def.infoPanel" },
      "x": 175,
      "y": "{{py:sight.cameraMode=arc?77|{{py:sight.cameraMode=sn?147|147}}}}",
      "textFormat": { "font": "$FieldFont", "color": "0xF4EFE8", "size": 16, "align": "center" },
      "format": "<b>{{py:infoPanelFormat(1)}}</b>"
    },

'battleLabels.xc'

      ${ "battleLabelsTemplates.xc":"def.infoPanelVehicleName" },
      ${ "battleLabelsTemplates.xc":"def.infoPanel" },

'infoPanel.xc'

    ...
    "formats": [
      "<textformat tabstops='[75]'>\n<font color='{{py:compareColor('{{gun_reload_equip}}', '{{pl_gun_reload_equip}}')}}'>КД:\t{{gun_reload_equip}}с</font>\n<font color='{{py:compareColor('{{pl_vision_radius}}', '{{vision_radius}}')}}'>Обзор:\t{{vision_radius}}м</font>\n<font color='{{py:compareColor('{{pl_vehicle_weight}}', '{{vehicle_weight}}')}}'>Масса:\t{{vehicle_weight}}т</font>",
      "{{vehicle_name}}"
    ]
    ...

 

важно! для соответствия красок в панели основной идее конфига нужно внести изменения в info_panel.py (см. начало поста)

А уже есть чтоли реализация сравнений масс танк изменением цвета .

 Классно былоб 

Edited by _bes_1

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