Jump to content
Korean Random
vlad_cs_sr

Предложения по стандартному конфигу / Suggestions for default config

Recommended Posts

То есть с окрасом своего среднего урона сплошной диссонанс. По поводу среднего урона по "больнице", ИМХО, есть два пути.

1) Просить @seriych что бы он добавил эту информацию в файл xtdb.json (или другой файл).

2) Определится чему будет равен средний урон в файле xtdb.json. (за это нас Seriych, скорее всего, запинает ногами в живот). 

P.S. А в файле xte.json параметр "td" случайно не средний урон?

Edited by ktulho

Share this post


Link to post

Short link
Share on other sites
В "среднем уроне" окрашивание при превышении текущего урона в бою над средним, зашито в ру-макрос - т.е. надо залезть в total_hp и найти там соответствующую строку (объясни это demon2597, Дим, не в обиду, вспомнился твой пост про макросы в питоне :))

а чё я то?) ну мало ли чего я там не понимаю. мне например вообще xtdb не нравится, как по мне- тупая велична, сравнивающая у кого писька больше и ничего больше не говорящая (хреново кстати,  что не дали выбора окраски ср. урона в достижениях). кроме того цвет по xtdb в 99% случаев совпадает с цветом xte и мне это тоже не нравится, т.е. с таким же успехом можно красить урон и в xte.

лично мне нравится окрас урона по wn8effd, это мне куда больше чего может сказать, потому что от этого будет зависеть мой рейтинг. да, там как Серыч говорит коэффициенты из пальца высосаны: 0.8, 1, 1.2 и т.д., но меня вполне устраивает такой показатель, мне понятно, что 1- это совпадает с ожидаемым значением, а дальше чем больше- тем лучше, чем меньше- тем хуже.

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

Edited by demon2597

Share this post


Link to post

Short link
Share on other sites
В "среднем уроне" окрашивание при превышении текущего урона в бою над средним, зашито в ру-макрос - т.е. надо залезть в total_hp и найти там соответствующую строку

 

Все же легко можно вынести за пределы питона:

 

'Пример с твоей реализацией подстановок'

 

'battleLabels.xc'

{
  "labels": {
    "formats": [
      ...
      ${ "battleLabelsTemplates.xc":"def.avgDamage" },
      ${ "battleLabelsTemplates.xc":"def.mainGun" }
      ...
    ]
  }
}

'battleLabelsTemplates.xc'

"avgDamage": {
      "enabled": true,
      "updateEvent": "ON_DAMAGE_CAUSED",
      "x": -150,
      "y": 30,
      "width": 200,
      "height": 40,
      "screenHAlign": "center",
      "shadow": { "distance": 1, "angle": 90, "alpha": 80, "blur": 5, "strength": 1.5 },
      "textFormat": { "size": 15, "align": "center" },
      "format": "{{py:xvm.total_hp.avgDamage({{hitlog.dmg-total}})}}"
    },
    "mainGun": {
      "enabled": true,
      "updateEvent": "ON_DAMAGE_CAUSED, ON_DAMAGE_CAUSED_ALLY",
      "x": 150,
      "y": 30,
      "width": 200,
      "height": 40,
      "screenHAlign": "center",
      "shadow": { "distance": 1, "angle": 90, "alpha": 80, "blur": 5, "strength": 1.5 },
      "textFormat": { "size": 15, "align": "center" },
      "format": "{{py:xvm.total_hp.mainGun({{hitlog.dmg-total}})}}"
    },

'texts.xc'

    // Text for battle interface labels.
    // Текст для текстовых полей боевого интерфейса.
    "battleLabels": {
      // формат строки с отображением "среднего урона"
      "avgDamage": {
        // заголовок, вставляется перед значением "среднего урона"
        "header": "Средний урон: ",
        // окончание, вставляется после значения "среднего урона"
        "footer": "",
        // цвет значения "среднего урона"
        "colors": {
          // начальное
          "neutral": "#FFFFFF",
          // после преодоления планки
          "done": "#96FF00"
        }
      },
      // формат строки с отображением "основного калибра"
      "mainGun": {
        // заголовок, вставляется перед значением "основного калибра"
        "header": "Основной калибр: ",
        // окончание, вставляется после значения "основного калибра"
        "footer": "",
        // цвет значения "основного калибра"
        "colors": {
          // начальное
          "neutral": "#FFFFFF",
          // после преодоления планки
          "done": "#96FF00",
          // при повреждении союзника
          "teamHits": "#00EAFF"
        }
      }
    }

'xvm.py'

@xvm.export('xvm.total_hp.avgDamage', deterministic=False)
def total_hp_avgDamage(dmg_total):
    headerDmg = config.get('texts/battleLabels/avgDamage/header')
    footerDmg = config.get('texts/battleLabels/avgDamage/footer')
    return '' if total_hp.avgDamage(dmg_total) == 'null' else '%s%s%s' % (headerDmg, total_hp.avgDamage(dmg_total), footerDmg)

@xvm.export('xvm.total_hp.mainGun', deterministic=False)
def total_hp_mainGun(dmg_total):
    headerGun = config.get('texts/battleLabels/mainGun/header')
    footerGun = config.get('texts/battleLabels/mainGun/footer')
    return '' if total_hp.mainGun(dmg_total) == 'null' else '%s%s%s' % (headerGun, total_hp.mainGun(dmg_total), footerGun)

'total_hp.py'

# Addons: "avgDamage" and "mainGun"
# night_dragon_on <http://www.koreanrandom.com/forum/user/14897-night-dragon-on/>
# ktulho <http://www.koreanrandom.com/forum/user/17624-ktulho/>

import xvm_main.python.config as config
from xfw import *
import traceback
import BigWorld
from CurrentVehicle import g_currentVehicle
from gui.Scaleform.daapi.view.lobby.hangar.Hangar import Hangar
from gui.shared import g_itemsCache

playerAvgDamage = None

@registerEvent(Hangar, '_Hangar__updateParams')
def Hangar__updateParams(self):
    try:
        global playerAvgDamage
        playerAvgDamage = g_itemsCache.items.getVehicleDossier(g_currentVehicle.item.intCD).getRandomStats().getAvgDamage()
        playerAvgDamage = 0 if not playerAvgDamage else playerAvgDamage
        return playerAvgDamage
    except:
        err(traceback.format_exc())

def avgDamage(dmg_total):
    global playerAvgDamage
    battletype = BigWorld.player().arena.guiType
    if playerAvgDamage == None:
        return 'null'
    elif battletype != 1:
        return 'null'
    else:
        avgDamage = int(playerAvgDamage - dmg_total)
        colors = config.get('texts/battleLabels/avgDamage/colors', {})
        if avgDamage <= 0:
            avgDamage = '<font color="%s">+%s</font>' % (colors['done'], abs(avgDamage))
        else:
            avgDamage = '<font color="%s">%s</font>' % (colors['neutral'], avgDamage)
    return avgDamage

from Avatar import PlayerAvatar
from Vehicle import Vehicle
from constants import VEHICLE_HIT_FLAGS

actual_arenaUniqueID = None
max_hp_enemy = 0

class PlayerDamages(object):
    def __init__(self):
        self.teamHits = True

    def reset(self):
        self.teamHits = True

    def showShotResults(self, playerAvatar, results):
        arenaVehicles = playerAvatar.arena.vehicles
        VHF = VEHICLE_HIT_FLAGS
        for r in results:
            vehicleID = r & 4294967295L
            flags = r >> 32 & 4294967295L
            if playerAvatar.team == arenaVehicles[vehicleID]['team'] and playerAvatar.playerVehicleID != vehicleID:
                if flags & (VHF.IS_ANY_DAMAGE_MASK | VHF.ATTACK_IS_DIRECT_PROJECTILE):
                    self.teamHits = False

data = PlayerDamages()

@registerEvent(PlayerAvatar, 'showShotResults')
def showShotResults(self, results):
    data.showShotResults(self, results)
  
@registerEvent(PlayerAvatar, '_PlayerAvatar__destroyGUI')
def destroyGUI(self):
    data.reset()

def mainGun(dmg_total):
    global actual_arenaUniqueID, max_hp_enemy
    arenaUniqueID = BigWorld.player().arenaUniqueID
    if actual_arenaUniqueID != arenaUniqueID:
      actual_arenaUniqueID = arenaUniqueID
      max_hp_enemy = panel.teams_totalhp[1]
    battletype = BigWorld.player().arena.guiType
    if battletype != 1:
        return 'null'
    else:
        threshold = max_hp_enemy * 0.2 if max_hp_enemy > 5000 else 1000
        high_caliber = int(threshold - dmg_total)
        colors = config.get('texts/battleLabels/mainGun/colors', {})
        if data.teamHits:
            if high_caliber <= 0:
                high_caliber = '<font color="%s">+%s</font>' % (colors['done'], abs(high_caliber))
            else:
                high_caliber = '<font color="%s">%s</font>' % (colors['neutral'], high_caliber)
        else:
            if high_caliber <= 0:
                high_caliber = '<font color="%s">+%s</font>' % (colors['teamHits'], abs(high_caliber))
            else:
                high_caliber = '<font color="%s">%s</font>' % (colors['teamHits'], high_caliber)
    return high_caliber if max_hp_enemy >= 1000 else 'null'

 

 

Но как по мне для дефолта это то еще "извращение".

Edited by night_dragon_on

Share this post


Link to post

Short link
Share on other sites
Но как по мне для дефолта это то еще "извращение".

а мне как раз нравится. причем именно тем, что есть настройка, которая более-менее понятна ЦА. Кстати, с кодами цвета можно обойтись и секцией "totalHp" из colors.xc, дописав только "teamHits", который можно переопределить из "system" для ТК (имхо)...

 

но для дефолта действительно "громоздко" да и Макс не пропустит - писал про "тягание туда-обратно" настроек...

 

Как вариант: я не знаю как сделать (используя?  re.split() к примеру) и можно ли вообще так, но если бы подхватывалась такая конструкция из battleLabels

"format": "{{py:xvm.total_hp.mainGun('текст1/картинка1', '{{hitlog.dmg-total}}', 'текст2/картинка2')}}'",

с соблюдением условия, что наличие/отсутствие какого-либо элемента (аргумента!) "внутри" макроса не является препятствием для отображения, просто если нет части 1 или 2 - вывод того что есть, а если "центр" макроса написан с ошибкой - нет вывода вообще (то же при отсутствии значения, == null), то ИМХО этого будет достаточно для любой "хотелки" (со средним уроном аналогично)

весь вопрос в принципиальной возможности такого и насколько "потяжелеют" код и влияние на производительность

Edited by Kapany3uk

Share this post


Link to post

Short link
Share on other sites

@Kapany3uk, это было бы не сложно сделать, если бы {{hitlog.dmg-total}} был всегда первым или последним аргументом. 


Проще всего такое реализовать с помощью **kwargs. То есть:

"format": "{{py:xvm.total_hp.mainGun(header='текст1/картинка1', dmg='{{hitlog.dmg-total}}', end_header='текст2/картинка2')}}'",

Share this post


Link to post

Short link
Share on other sites

есть два пути.

1) Просить seriych что бы он добавил эту информацию в файл xtdb.json (или другой файл).

2) Определится чему будет равен средний урон в файле xtdb.json. (за это нас Seriych, скорее всего, запирает ногами в живот).

Запинаю в любом случае. У нас нет информации о распределении урона за ОДИН бой. Я уже много раз писал, что никакой показатель за бой нельзя связывать с какими бы то ни было показателями за много боев. Это разные вещи.

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

А по какой логике тогда мы не пишем "нет данных" для тех, кто пропал из засвета? Для них мы тоже достоверно не знаем ХП.

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

Edited by demon2597

Share this post


Link to post

Short link
Share on other sites
Единственное, я бы привёл к первоначальному варианту с header, поскольку парсер поправили, и настройка вся будет в battleLabels, и не надо доп секции писать в texts.xc, а с цветом я б тоже забил - кому надо найдут и поправят... Ну или тут на форуме им помогут :))
в натуре, лил бы уже, чё тянуть. хороший концепт

 

Оформил пулл. Если кто подберет более адекватное описание в чейнджлог то поправьте.

Edited by night_dragon_on
  • Upvote 2

Share this post


Link to post

Short link
Share on other sites

Оформил пулл. Если кто подберет более адекватное описание в чейнджлог то поправьте.

Что-то нет в пулле изменений.

P.S. появились.

А это так и не проверили?

 

 

, значит осталось проверить посинеем ли при сбивании гусли союзника без урона (или рикошет) .
 

Share this post


Link to post

Short link
Share on other sites

Оформил пулл. Если кто подберет более адекватное описание в чейнджлог то поправьте.

Замержил. Вроде даже придраться не к чему. :)

Share this post


Link to post

Short link
Share on other sites

А это так и не проверили?

 

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

Т.е. нужно стараться набить в бою нужную планку урона при этом преднамеренно повредить гусеницу (срикошетить по) союзнику.

 

Вроде даже придраться не к чему. :)

 

Вместе же проверяли перед тем как залить.

Edited by night_dragon_on

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

@night_dragon_on, а почему тень получается не такая, как в описании указана по умолчанию? или может это в описании указано не верно, что есть на самом деле, я не копался...


еще такой момент. захотел цифирьки калибра и ср. урона написать жирным, но в текущем формате это сделать- никак, поэтому пришлось накарябать так:

"format": "{{l10n:avgDamage}}:<b>{{py:xvm.total_hp.avgDamage(' ',{{hitlog.dmg-total}})}}</b>"

естественно заголовок в таком случае виден всегда, меня это в принципе устраивает, но тут возникает следующая история: если нет данных, то хотелось бы тогда выводить дефолт: {{l10n:Not available short}}- опять никак, потому что py макрос не поддается форматированию.

возникает вопрос, как присобачить дефолт, не залезая в ру (мне не охота там ничего менять)?

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

Edited by demon2597

Share this post


Link to post

Short link
Share on other sites

demon2597, можно вот так записать, при этом заголовок будет виден только в реплее(рандом):

"format": "{{battletype=regular?{{l10n:avgDamage}}: }}<b>{{py:xvm.total_hp.avgDamage('',{{hitlog.dmg-total}})}}</b>"
Edited by Hawk1983x

Share this post


Link to post

Short link
Share on other sites

 

demon2597, можно вот так записать, при этом заголовок будет виден только в реплее(рандом):

"format": "{{battletype=regular?{{l10n:avgDamage}}: }}<b>{{py:xvm.total_hp.avgDamage('',{{hitlog.dmg-total}})}}</b>"

а если в бою нет вообще не возможен калибр? или нет данных о среднем уроне (танк только купленный)? это не вполне решает проблему. хотя про тип боя, да, забыл я

Edited by demon2597

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