Jump to content
Korean Random
goodman

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

Recommended Posts

Нет события для обновления значений макросов по таймеру, поэтому значения не будут меняться. В принципе, можно сделать, только хз как на производительность повлияет.

Share this post


Link to post

Short link
Share on other sites

Вдохновленный видеом с первой страницы данной темы, сделал так:

'Изображение'

post-17624-0-19693100-1465816935_thumb.jpg

post-17624-0-53740300-1465816935_thumb.jpg

Конечно бомбу надо заменить на снаряд направленный в сторону команды с меньшим hp. Да и жирные точки надо поменять на что нибудь.

'Код'

import xvm_battle.python.fragCorrelationPanel as panel

def ally():
    return panel.teams_totalhp[0]

def enemy():
    return panel.teams_totalhp[1]

def color():
    return panel.total_hp_color

def sign():
    all_dot = 40
    dot_ally = int(ally() * all_dot // (ally() + enemy())) 
    def win():        
        return "<font color='#00CE00'>'" + str("D") * dot_ally + "|<font color='#CE0000'>" + str("D") * (all_dot - dot_ally) + "*</font>"
    def lost():         
        return "<font color='#00CE00'>'" + str("D") * dot_ally + "<font color='#CE0000'>|" + str("D") * (all_dot - dot_ally) + "*</font>"
    return lost() if panel.total_hp_sign == '<' else win()

def text():
    return "<font face='mono' color='#FCFCFC'>%6s</font><font face='xvm'> %s </font><font face='mono' color='#FCFCFC'>%-6s</font>" % (ally(), sign(), enemy()) 

  • Upvote 4

Share this post


Link to post

Short link
Share on other sites

Может кто нибудь и инфо панель партирует. раз такая пьянка пошла.

Share this post


Link to post

Short link
Share on other sites

 

 

Может кто нибудь и инфо панель партирует. раз такая пьянка пошла.

Насколько я знаю, пока нет поддержки события "наведение на цель" в battleLabelsTemplates.xc.

Share this post


Link to post

Short link
Share on other sites

 

 

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

Share this post


Link to post

Short link
Share on other sites

Попытаюсь оживить тему. Добавил макросы необходимые для информационной панели.

'Картинки'

post-17624-0-59254800-1466008113_thumb.jpg

post-17624-0-94750100-1466008112_thumb.jpg

'Код'

import BigWorld

def typeDescriptor():
    target = BigWorld.target()
    return target.typeDescriptor if target else BigWorld.player().getVehicleAttached().typeDescriptor

# Название теники
def nameTank():
    return typeDescriptor().type.userString

# Название файла иконки теники
def nameICOTank():
    return typeDescriptor().name.replace(':', '-')

# Время перезарядки
def reloadTimeGun():
    return "%.1f" % (typeDescriptor().gun['reloadTime'] * 0.8631)

# Обзор
def visionRadius():
    return "%i" % (typeDescriptor().turret['circularVisionRadius'])

# лобовая броня корпуса
def armorTankHullFront():
    return "%i" % (typeDescriptor().hull['primaryArmor'][0])

# боковая броня корпуса
def armorTankHullSide():
    return "%i" % (typeDescriptor().hull['primaryArmor'][1])

# кормовая броня корпуса
def armorTankHullBack():
    return "%i" % (typeDescriptor().hull['primaryArmor'][2])

# лобовая броня башни
def armorTankTurretFront():
    return "%i" % (typeDescriptor().turret['primaryArmor'][0])

# боковая броня башни
def armorTankTurretSide():
    return "%i" % (typeDescriptor().turret['primaryArmor'][1])

# кормовая броня башни
def armorTankTurretBack():
    return "%i" % (typeDescriptor().turret['primaryArmor'][2])

def gunShots():
    return typeDescriptor().gun['shots']

# урон первым типом снаряда
def damageFirstTypeShell():
    return '' if len(gunShots()) < 1 else "%i" % (gunShots()[0]['shell']['damage'][0])

# урон вторым типом снаряда
def damageSecondTypeShell():
    return '' if len(gunShots()) < 2 else "%i" % (gunShots()[1]['shell']['damage'][0])

# урон третьим типом снаряда
def damageThirdTypeShell():
    return '' if len(gunShots()) < 3 else "%i" % (gunShots()[2]['shell']['damage'][0])

# пробитие первым типом снаряда
def powerFirstTypeShell():
    return '' if len(gunShots()) < 1 else "%i" % (gunShots()[0]['piercingPower'][0])

# пробитие вторым типом снаряда
def powerSecondTypeShell():
    return '' if len(gunShots()) < 2 else "%i" % (gunShots()[1]['piercingPower'][0])

# пробитие третьим типом снаряда
def powerThirdTypeShell():
    return '' if len(gunShots()) < 3 else "%i" % (gunShots()[2]['piercingPower'][0])

typeShell = {
    'ARMOR_PIERCING': 'ББ',
    'HIGH_EXPLOSIVE': 'ОФ',
    'ARMOR_PIERCING_CR': 'БП',
    'ARMOR_PIERCING_HE': 'ХФ',
    'HOLLOW_CHARGE': 'КС',
}

# первый тип снаряда
def firstTypeShell():
    return '' if len(gunShots()) < 1 else typeShell[gunShots()[0]['shell']['kind']]

# второй тип снаряда
def secondTypeShell():
    return '' if len(gunShots()) < 2 else typeShell[gunShots()[1]['shell']['kind']]

# третий тип снаряда
def thirdTypeShell():
    return '' if len(gunShots()) < 3 else typeShell[gunShots()[2]['shell']['kind']]

 

P.S. Ждем введения события "наведение на цель." И хотелось бы введение задержки показа поля, после окончания события.

P.P.S. Поправил код. Оказывается не у всех танков по три типа снаряда )).

Edited by ktulho
  • Upvote 6

Share this post


Link to post

Short link
Share on other sites

Попытаюсь оживить тему. Добавил макросы необходимые для информационной панели.

'Картинки'

'Код'

import BigWorld
from Avatar import PlayerAvatar

def typeDescriptor():
    player = BigWorld.player()
    target = BigWorld.target()
    if target:
        return target.typeDescriptor
    else:
        return player.getVehicleAttached().typeDescriptor

# Название теники
def nameTank():
    return typeDescriptor().type.userString

# Название файла иконки теники
def nameICOTank():
    return typeDescriptor().name.replace(':', '-')

# Время перезарядки
def reloadTimeGun():
    return "%.1f" % (typeDescriptor().gun['reloadTime'] * 0.8631)

# Обзор
def visionRadius():
    return "%i" % (typeDescriptor().turret['circularVisionRadius'])

# лобовая броня корпуса
def armorTankHullFront():
    return "%i" % (typeDescriptor().hull['primaryArmor'][0])

# боковая броня корпуса
def armorTankHullSide():
    return "%i" % (typeDescriptor().hull['primaryArmor'][1])

# кормовая броня корпуса
def armorTankHullBack():
    return "%i" % (typeDescriptor().hull['primaryArmor'][2])

# лобовая броня башни
def armorTankTurretFront():
    return "%i" % (typeDescriptor().turret['primaryArmor'][0])

# боковая броня башни
def armorTankTurretSide():
    return "%i" % (typeDescriptor().turret['primaryArmor'][1])

# кормовая броня башни
def armorTankTurretBack():
    return "%i" % (typeDescriptor().turret['primaryArmor'][2])

# урон первым типом снаряда
def damageFirstTypeShell():
    return "%i" % (typeDescriptor().gun['shots'][0]['shell']['damage'][0])

# урон вторым типом снаряда
def damageSecondTypeShell():
    return "%i" % (typeDescriptor().gun['shots'][1]['shell']['damage'][0])

# урон третьим типом снаряда
def damageThirdTypeShell():
    return "%i" % (typeDescriptor().gun['shots'][2]['shell']['damage'][0])

# пробитие первым типом снаряда
def powerFirstTypeShell():
    return "%i" % (typeDescriptor().gun['shots'][0]['piercingPower'][0])

# пробитие вторым типом снаряда
def powerSecondTypeShell():
    return "%i" % (typeDescriptor().gun['shots'][1]['piercingPower'][0])

# пробитие третьим типом снаряда
def powerThirdTypeShell():
    return "%i" % (typeDescriptor().gun['shots'][2]['piercingPower'][0])

typeShell = {
    'ARMOR_PIERCING': 'ББ',
    'HIGH_EXPLOSIVE': 'ОФ',
    'ARMOR_PIERCING_CR': 'БП',
    'HOLLOW_CHARGE': 'КС',
}

# первый тип снаряда
def firstTypeShell():
    return typeShell[typeDescriptor().gun['shots'][0]['shell']['kind']]

# второй тип снаряда
def secondTypeShell():
    return typeShell[typeDescriptor().gun['shots'][1]['shell']['kind']]

# третий тип снаряда
def thirdTypeShell():
    return typeShell[typeDescriptor().gun['shots'][2]['shell']['kind']]
 

 

P.S. Ждем введения события "наведение на цель." И хотелось бы введение задержки показа поля, после окончания события.

при наведении
def New_TargetFocus(self, entity):
    Old_TargetFocus(self, entity)
    .....


Old_TargetFocus = PlayerAvatar.targetFocus
PlayerAvatar.targetFocus = New_TargetFocus

Share this post


Link to post

Short link
Share on other sites

@Ekspoint, Я так понимаю это подойдет для отдельного мода, а не для кастомизируемых текстовых полей.

Share this post


Link to post

Short link
Share on other sites

@Ekspoint, Я так понимаю это подойдет для отдельного мода, а не для кастомизируемых текстовых полей.

ну хз, для отдельного да, пойдет

могу сделать в своем стиле, в авторах укажу :ok:

Share this post


Link to post

Short link
Share on other sites

 

 

ну хз, для отдельного да, пойдет могу сделать в своем стиле, в авторах укажу
, Делай, а я закрою тему по поддержке InfoPanel от Delux. И поддержку отображения характеристик своего танка по LAlt не забудь.

Share this post


Link to post

Short link
Share on other sites

, Делай, а я закрою тему по поддержке InfoPanel от Delux. И поддержку отображения характеристик своего танка по LAlt не забудь.

ok

Share this post


Link to post

Short link
Share on other sites

Собрал параметры модулей своего танка. Все это можно вывести кастомные поля. Значения параметров относятся к танку CRUISER MK. IV.

vehicle.rar

 

  • Upvote 2

Share this post


Link to post

Short link
Share on other sites

Собрал параметры модулей своего танка. Все это можно вывести кастомные поля. Значения параметров относятся к танку CRUISER MK. IV.

attachicon.gifvehicle.rar

спс

Share this post


Link to post

Short link
Share on other sites

Попытаюсь оживить тему. Добавил макросы необходимые для информационной панели.

Собрал параметры модулей своего танка

 

Доброго времени суток, не подскажите как вытянуть из вашего примера "vehicle.typeDescriptor"

 

- Скорострельность орудия (для расчета среднего дпм-ма)

- Точность орудия

- Мощность двигателя (есть там параметр " typeDescriptor().engine['power'] " но как его перевести в нормальный вид)

- Параметры маскировки техники

 

Если они имеются как таковые для вывода.

 

И почему у вас в рассчете изначальное значение перезарядки орудия умножается на 0.8631

Ведь с досытателем нужно множить на 0.9 (или там еще что то учитывается)

 

P.S: Если не секрет как вы вытащили (прологировали) все эти параметры из клиента? Заранее спасибо за уделенное время на ответ.

Edited by yan-polonov

Share this post


Link to post

Short link
Share on other sites

@yan-polonov, И вам доброго. Отвечать буду отдельно на каждый вопрос, поэтому долго и наверно в нескольких постах.

 

 

И почему у вас в рассчете изначальное значение перезарядки орудия умножается на 0.8631 Ведь с досытателем нужно множить на 0.9 (или там еще что то учитывается)

Этот коэффициент я подогнал под показания мода InfoPanel. Кроме досылателя, есть братство и вентиляция. После вашего вопроса решил уточнить коэффициент. Взял арту с вентиляцией, досылателем и братством, коэффициент оказался равным примерно 0,8255.

 

 

- Скорострельность орудия (для расчета среднего дпм-ма)
# урон в минуту первым типом снаряда
def damPerMinFirstShell():
    k = 0.8255
    time = typeDescriptor().gun['reloadTime'] * k + typeDescriptor().gun['clip'][0] * typeDescriptor().gun['clip'][1]
    return "%i" % (typeDescriptor().gun['clip'][0] / time * 60 * typeDescriptor().gun['shots'][0]['shell']['damage'][0]) 

Результат данной функции можно сделать более точным. Так как, барабанные танки не имеют досылателя, насколько я знаю, для них можно уточнить коэффициент.

# урон в минуту первым типом снаряда
def damPerMinFirstShell():
    k = 0.8255 if typeDescriptor().gun['clip'][0] == 1 else 0.9182
    time = typeDescriptor().gun['reloadTime'] * k + typeDescriptor().gun['clip'][0] * typeDescriptor().gun['clip'][1]
    return "%i" % (typeDescriptor().gun['clip'][0] / time * 60 * typeDescriptor().gun['shots'][0]['shell']['damage'][0])

 

 

- Точность орудия

Если вы про разброс на 100м, то:

typeDescriptor().gun['shotDispersionAngle'] 

 

 

- Мощность двигателя (есть там параметр " typeDescriptor().engine['power'] " но как его перевести в нормальный вид)

Здесь мощность в ваттах. Если нужны лошадиные силы, то делите на 735,49875.

Edited by ktulho
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites
Отвечать буду отдельно на каждый вопрос, поэтому долго и наверно в нескольких постах

 

Огромное вам человеческое спасибо за все разъяснения

 

Если вы про разброс на 100м

 

Да именно о нем

 

 

Так как, барабанные танки не имеют досылателя, насколько я знаю

 

У ат-15 на сток пухе с касетами есть досыл

 

Вот теперь все что нужно есть, как боевой интерфейс перейден на AS3 infoPanel помрет, а тут у нас более кастомизируемый и удобный функционал пришел на замену.

 

Edited by yan-polonov

Share this post


Link to post

Short link
Share on other sites

Пока искал про маскировку, наткнулся на следующие параметры:

miscAttrs=[('crewChanceToHitFactor', 1.0),                      //перк Снайпер? 
           ('maxWeight', 17100.0), 
           ('antifragmentationLiningFactor', 1.0), 
           ('vehicleByChassisDamageFactor', 1.0), 
           ('engineHealthFactor', 1.0),                         //Фильтр «Циклон»
           ('crewLevelIncrease', 5),                            //перк братство или вентилятор?
           ('invisibilityFactor', 1.0),                         //Маскировочная сеть
           ('fuelTankHealthFactor', 1.0),                       //Заполнение баков CO2
           ('ammoBayHealthFactor', 1.0),                        //Мокрая боеукладка?
           ('repairSpeedFactor', 1.0),                          //Ящик с инструментами?
           ('gunAimingTimeFactor', 0.9100000262260437),         //Усиленные приводы наводки?
           ('additiveShotDispersionFactor', 1.0),               //Стабилизатор вертикальной наводки?
           ('gunReloadTimeFactor', 1.0),                        //Досылатель?
           ('circularVisionRadiusFactor', 1.100000023841858),   //Просветлённая оптика
           ('chassisHealthFactor', 1.0)]                        //Усиленные рессоры
Edited by ktulho

Share this post


Link to post

Short link
Share on other sites

Пока искал про маскировку, наткнулся на следующие параметры:

 

Если да то мы можем их получить только для игрока - BigWorld.player(), для юнита в прицеле - BigWorld.target() данные врятли нам будут доступны

Share this post


Link to post

Short link
Share on other sites

 

 

Если да то мы можем их получить только для игрока - BigWorld.player(), для юнита в прицеле - BigWorld.target() данные врятли нам будут доступны

В том то и дело, что они доступны для всех.

Share this post


Link to post

Short link
Share on other sites

Если да то мы можем их получить только для игрока - BigWorld.player(), для юнита в прицеле - BigWorld.target() данные врятли нам будут доступны

если можно для себя то можно и для target вроде как

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