Jump to content
Korean Random
ktulho

Прицел (без сведения) средствами XVM

Recommended Posts

- круг разлета осколков (для классического арт-прицела, для БА - не уверен) текущего фугаса

, добавил пузырь разлета осколков.

 

post-17624-0-40719600-1486307639_thumb.jpg

post-17624-0-25490200-1486307640_thumb.jpg

Edited by ktulho
  • Upvote 9

Share this post


Link to post

Short link
Share on other sites
как сделать чтобы все ограничивалось только артой ?

, надо конфиг делать. 

Кстати, если хотите изменить цвет или прозрачность "пузыря", то редактируем файл half_transparent.dds и копируем его в \res_mods\0.9.17.0.3\objects\misc\

half_transparent.rar

Edited by ktulho
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

 

 

как сделать чтобы все ограничивалось только артой ?
 

например, так:

"alpha": "{{py:sight.cameraMode=str?0|100}}",

Share this post


Link to post

Short link
Share on other sites

, это не поможет. 

напрашивается макрос определения типа техники :))

Share this post


Link to post

Short link
Share on other sites

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

{{sight.dynamic_colorRGB(color_100, color_0, percent, maximum)}}
{{sight.dynamic_colorRBG(color_100, color_0, percent, maximum)}}
{{sight.dynamic_colorGRB(color_100, color_0, percent, maximum)}}
{{sight.dynamic_colorGBR(color_100, color_0, percent, maximum)}}
{{sight.dynamic_colorBRG(color_100, color_0, percent, maximum)}}
{{sight.dynamic_colorBGR(color_100, color_0, percent, maximum)}}

color_100 - цвет, возвращаемый,  если percent == maximum;

color_0 - цвет, возвращаемый,  если percent == 0;

percent - значение от 0 до maximum;

maximum - максимально значение percent, если параметр не указан, то он равен 100.

Макросы возвращают цвет в шестнадцатеричной системе, например "FF00FF"

 

'Пример'

"healthBar": {
      "enabled": true,
      "updateEvent": "PY(ON_PLAYER_HEALTH), PY(ON_CAMERA_MODE)",
      // "scaleX": -1,
      "x": 160,
      "y": "{{py:math.sum({{py:sight.sight_y}}, 92)}}",
      "rotation": 9,
      // "borderColor": "0x000000",
      "width": 85,
      "height": 80,
      "screenHAlign": "center",
      "screenVAlign": "center",
      "alpha" : "{{py:sight.cameraMode=arc?80|0}}",
      "shadow": { "distance": 3, "angle": 315, "alpha": 70, "blur": 1.5, "strength": 4 },
      "textFormat": { "color": "0x{{py:sight.dynamic_colorGRB(0x57CAFF, 0xFF0000, {{py:sight.health(100)}})}}" },
      "format": "<font face='dynamic2' size='80'>{{py:sight.health(100)%.335a}}</font>"
    },

 

Данные макросы будут работать только с последней версией ночников XVM для клиента 0.9.17.0 (build 7139)

 

Скрипт: sight.rar

 

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

Color.rar

Edited by ktulho
  • Upvote 4

Share this post


Link to post

Short link
Share on other sites

 

 

Добавил макросы для динамического изменение цвета.
Здорово!

можно чуть расширенную версию?

если мне, к примеру, нужно будет менять цвет в заданных диапазонах процентов от 50 до 95% (и не в прицеле :)) чтобы выглядело как-то так:

{{py:sight.dynamic_colorGRB(0x00FFFF, 0xFF0000, {{macro}}, 50, 95)}}

Share this post


Link to post

Short link
Share on other sites

Здорово!

можно чуть расширенную версию?

если мне, к примеру, нужно будет менять цвет в заданных диапазонах процентов от 50 до 95% (и не в прицеле :)) чтобы выглядело как-то так:

{{py:sight.dynamic_colorGRB(0x00FFFF, 0xFF0000, {{macro}}, 50, 95)}}

 

А так не получится?

{{py:sight.dynamic_colorGRB(0x00FFFF, 0xFF0000, {{math.sub({{macro}} , 50)}}, 45)}}
Edited by ktulho

Share this post


Link to post

Short link
Share on other sites

 

А так не получится?

{{py:sight.dynamic_colorGRB(0x00FFFF, 0xFF0000, {{math.sub({{macro}} , 50)}}, 45)}}

хз. надо попробовать. 

'?'

я не понял, что с maximum, почему не 95, а 45 (50+45)?

что-то с математикой у меня не ладно в предложенном:

если {{macro}} принимает значения от 0 до 100, при которых нам надо взять диапазон от 50 до 95, то иначе как задать пороговые значения в скрипте у меня никак не выходит - ведь при math.sub мы всего лишь сдвигаем исходный диапазон 0-100 до 50-150, нет?

 

'UPD'

делал себе динамическую окраску для соотношения сил команд на базе окраски ХП из xvm_battle.python.fragCorrelationPanel по типу

# Addons: "dynamic coloring" based on "xvm.colors/totalHp"

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

maxRatio = 95
minRatio = 65

def dynColoring(ally, enemy):
    if not isfloat(ally) or not isfloat(enemy):
        return ''
    a = 100. * float(ally) + 0.01
    e = 100. * float(enemy) + 0.01
    if a < e:
        ratio = max(min((100. * a / e - minRatio) / (maxRatio - minRatio), 1), 0)
        color = panel.color_gradient(panel.hp_colors['neutral'], panel.hp_colors['bad'], ratio)
        sign = '<'
    elif a > e:
        ratio = max(min((100. * e / a - minRatio) / (maxRatio - minRatio), 1), 0)
        color = panel.color_gradient(panel.hp_colors['neutral'], panel.hp_colors['good'], ratio)
        sign = '>'
    else:
        color = panel.color_gradient(panel.hp_colors['neutral'], panel.hp_colors['neutral'], 1)
        sign = '='
    value = '<font color="#{}">{}{}{}</font>'.format(color, ally, sign, enemy)
    return value

вдруг показалось, что ты хотел добавить что-то подобное в основу хвм :)

Edited by Kapany3uk

Share this post


Link to post

Short link
Share on other sites

 

 

хз. надо попробовать. 
, при 50 и ниже какой цвет должен быть? При  95 и выше какой должен быть цвет?

Share this post


Link to post

Short link
Share on other sites

, при 50 и ниже какой цвет должен быть? При  95 и выше какой должен быть цвет?

условно говоря, меньше 50 - всегда плохо, предположим красным, выше 95 - всегда хорошо, предположим зеленый

Share this post


Link to post

Short link
Share on other sites

@Kapany3uk, покажи еще поле из battleLabelsTemplates.xc.

    "winChance": {                      // Динамический шанс на победу.
      "enabled": true,
      "updateEvent": "ON_VEHICLE_DESTROYED",
      "x": -145,
      "y": 29,
      "screenHAlign": "center",
      "textFormat": { "color": "0xF4EFE8", "size": 16, "bold": true },
      "format": "{{py:my_dynamic_coloring('{{allyStrengthLive}}','{{enemyStrengthLive}}')}}  ({{chancesLive}})"
    },

post-24956-0-77986000-1486551829.jpgpost-24956-0-53163600-1486551945.jpg

Edited by Kapany3uk

Share this post


Link to post

Short link
Share on other sites

Добавил макросы для динамического изменение цвета... 

крутяк! в шапку бы этот пост и программку, чтобы не затерялось

Share this post


Link to post

Short link
Share on other sites

@Kapany3uk, замени это:

 

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

maxRatio = 95
minRatio = 65

def dynColoring(ally, enemy):
    if not isfloat(ally) or not isfloat(enemy):
        return ''
    a = 100. * float(ally) + 0.01
    e = 100. * float(enemy) + 0.01
    if a < e:
        ratio = max(min((100. * a / e - minRatio) / (maxRatio - minRatio), 1), 0)
        color = panel.color_gradient(panel.hp_colors['neutral'], panel.hp_colors['bad'], ratio)
        sign = '<'
    elif a > e:
        ratio = max(min((100. * e / a - minRatio) / (maxRatio - minRatio), 1), 0)
        color = panel.color_gradient(panel.hp_colors['neutral'], panel.hp_colors['good'], ratio)
        sign = '>'
    else:
        color = panel.color_gradient(panel.hp_colors['neutral'], panel.hp_colors['neutral'], 1)
        sign = '='
    value = '<font color="#{}">{}{}{}</font>'.format(color, ally, sign, enemy)
    return value 

на это;

from xvm import utils

def dynColoring(ally, enemy):
    if not (isinstance(ally, float) and isinstance(enemy, float)):
        return
    sign = '>' if float(ally) > float(enemy) else '<' if float(ally) < float(enemy) else '='
    precent = float(ally) / float(ally + enemy)
    color = utils.smooth_transition_color('RGB', 0x00FF00, 0xFF0000, precent, 100)
    value = '<font color="#{}">{}{}{}</font>'.format(color, ally, sign, enemy)
    return value 

И замени файл \res_mods\configs\xvm\py_macro\xvm\utils.py на utils.rar

 

P.S. Изменил это сообщение

P.P.S. @Kapany3uk, ты не молчи). Я же могу и ошибаться (при чем часто). Поправил код.

Edited by ktulho

Share this post


Link to post

Short link
Share on other sites

Kapany3uk, замени это

так ничего не показывает.

заменил проверку ally/enemy на float() предыдущим способом - начал показывать, но цвет не меняется: красный. поменял местами color_100 и color_0 в формуле: цвет неизменно зеленый. логи чистые. 

'attach'

post-24956-0-56350500-1486558785.jpg

код

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

@xvm.export('my_dynamic_coloring', deterministic=False)
def dynColoring(ally, enemy):
    if not isfloat(ally) or not isfloat(enemy):
        return ''
    # if not (isinstance(ally, float) and isinstance(enemy, float)):
        # return ''
    sign = '>' if float(ally) > float(enemy) else '<' if float(ally) < float(enemy) else '='
    precent = float(ally) / ( float(ally) + float(enemy) )
    color = utils.smooth_transition_color('RGB', 0xFF0000, 0x00FF00, precent, 100)
    value = '<font color="#{}">{}{}{}</font>'.format(color, ally, sign, enemy)
    return value

 

P.P.S. Kapany3uk, ты не молчи)

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

 

зы. сорь, время вышло: до вечера офлайн

Edited by Kapany3uk

Share this post


Link to post

Short link
Share on other sites

так ничего не показывает. заменил проверку ally/enemy на float() предыдущим способом - начал показывать, но цвет не меняется: красный. поменял местами color_100 и color_0 в формуле: цвет неизменно зеленый. логи чистые. 

, так и знал. Сидел, молчал, всякую .... про меня думал )).

 

Попробуй с этим:

def dynColoring(ally, enemy):
    if ally.isdigit() and enemy.isdigit():
        a = int(ally)
        e = int(enemy)
    else:
        return
    sign = '>' if a > e else '<' if a < e else '='
    percent = a * 100 / float(a + e)
    color = utils.smooth_transition_color('GRB', 0x00FF00, 0xFF0000, percent, 100)
    value = '<font color="#{}">{}{}{}</font>'.format(color, ally, sign, enemy)
    return value

На этот раз проверил у себя:

post-17624-0-66029900-1486560694.jpg

post-17624-0-30778000-1486560690.jpg

 

P.S. Поправил код.

Обновил это сообщение.

 

 

крутяк! в шапку бы этот пост и программку, чтобы не затерялось

, скрипт работает только с последним ночником. На других версиях XVM он будет выдавать ошибки. Может эти макросы включить в default, раз они востребованы не только в прицеле? Если включать, то где разместить программу Color.exe?

 

 

Кстати, можно сделать макросы плавного перехода цветов для рейтингов и любых других динамических цветов их color.xc.

Edited by ktulho

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.
Note: Your post will require moderator approval before it will be visible.

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