Jump to content
Korean Random
goodman

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

Recommended Posts

Только подкорректируй размер шрифта и тень на свой вкус в файле battleLabelsTemplates.xc.

attachicon.gifTeamHPv2_tank.zip

Вот спасибо,ты лучший))))

П.С:прогнал на репе,чуть уменьшил,все работает отлично(правда репа была без приемущества врагов).Но есть одна просьба,не сочти за наглость,можно дула наоборот развернуть,чтоб смотрело в сторону приемущества,сейчас во

внутрь смотрит,на врага,что как то не логично))Просто коды поменять местами.

Edited by Slava7572

Share this post


Link to post

Short link
Share on other sites

Но есть одна просьба,не сочти за наглость,можно дула наоборот развернуть,чтоб смотрело в сторону приемущества,сейчас во

внутрь смотрит,на врага,что как то не логично))Просто коды поменять местами.

Так в *.py файле в текстовом редакторе поменяй символы местами. Это же не *.pyc файл, его не нужно декомпилировать.

138 строка:

    indicator = "'"
    if en > al:
        indicator = "*"

Замени на:

    indicator = "*"
    if en > al:
        indicator = "'"
Edited by neLeax
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

 

 

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

Кроме параметра 'level', есть еще параметр 'unlocks'. Если он пустой значит это последний модуль в ветке, если не пустой значит что-то есть. Сравнивая этот параметр, можно уточнить результат сравнения по уровню. Например ПТ "WAFFENTRÄGER AUF PZ. IV" имеет 4 орудия десятого уровня, но 'unlocks' будет пустой скорее всего только у одного. У второго топового орудия значение параметра 'unlocks' ,ИМХО, будет равно [1]. Я думаю, 1 означает следующий танк, а другое значение - следующий модуль.

Share this post


Link to post

Short link
Share on other sites

 

Так в *.py файле в текстовом редакторе поменяй символы местами. Это же не *.pyc файл, его не нужно декомпилировать.

138 строка:

    indicator = "'"
    if en > al:
        indicator = "*"

Замени на:

    indicator = "*"
    if en > al:
        indicator = "'"

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

 

________________________________

 

Теперь как хотел,я бы сказал идеально,на мой вкус само собой.

 

post-4302-0-39660800-1466677865_thumb.jpg

Edited by Slava7572

Share this post


Link to post

Short link
Share on other sites

Только подкорректируй размер шрифта и тень на свой вкус в файле battleLabelsTemplates.xc.

attachicon.gifTeamHPv2_tank.zip

 

Хочу использовать только основной калибр (py:nelx.mainGun()). Но, насколько понимаю, без использования totalHPally и totalHPenemy не происходит инициализация max_hp[1]. Где бы и как это проинициализировать?

Share this post


Link to post

Short link
Share on other sites

Кроме параметра 'level', есть еще параметр 'unlocks'. Если он пустой значит это последний модуль в ветке, если не пустой значит что-то есть. Сравнивая этот параметр, можно уточнить результат сравнения по уровню. Например ПТ "WAFFENTRÄGER AUF PZ. IV" имеет 4 орудия десятого уровня, но 'unlocks' будет пустой скорее всего только у одного. У второго топового орудия значение параметра 'unlocks' ,ИМХО, будет равно [1]. Я думаю, 1 означает следующий танк, а другое значение - следующий модуль.

Проверил на реплее. unlocks что-то другое показывает. К примеру у стокового ИСа пусто, у топовой Т-43 - 6, у топового Т29 - пусто, у топовой СУ-100 - 7. У одного танка вообще два значения - 5 и 6.

Share this post


Link to post

Short link
Share on other sites

unlock чего? Модулей? Два значения это по идее два модуля (танка) идут дальше.

Share this post


Link to post

Short link
Share on other sites

Хочу использовать только основной калибр (py:nelx.mainGun()). Но, насколько понимаю, без использования totalHPally и totalHPenemy не происходит инициализация max_hp[1]. Где бы и как это проинициализировать?

По идее нужно эту часть скопировать в def mainGun().

    global actual_arenaUniqueID, max_hp
    arenaUniqueID = BigWorld.player().arenaUniqueID
    if actual_arenaUniqueID != arenaUniqueID:
        actual_arenaUniqueID = arenaUniqueID
        max_hp[0] = panel.teams_totalhp[0]
        max_hp[1] = panel.teams_totalhp[1]

Тоесть должно получиться так:

# Расчет урона до получения медали "Основной Калибр".
@xvm.export('nelx.mainGun', deterministic=False)
def mainGun():
    global actual_arenaUniqueID, max_hp
    arenaUniqueID = BigWorld.player().arenaUniqueID
    if actual_arenaUniqueID != arenaUniqueID:
        actual_arenaUniqueID = arenaUniqueID
        max_hp[0] = panel.teams_totalhp[0]
        max_hp[1] = panel.teams_totalhp[1]
    myDamage = damage()
    battletype = BigWorld.player().arena.guiType
    if battletype != 1:
        return
    else:
        result = int(max(round(max_hp[1] * 0.2), 1000)) - myDamage
        if result <= 0:
            result = "<font face='xvm' color='#96FF00' size='21'>x</font>"
    return "<img src='img://gui/maps/icons/achievement/32x32/mainGun.png' width='32' height='32' align='middle' vspace='-9'>%s" % (result)

unlock чего? Модулей? Два значения это по идее два модуля (танка) идут дальше.

Я вот так написал: typeDescriptor.gun['unlocks']

Share this post


Link to post

Short link
Share on other sites

@neLeax, надо проверять, если для орудия, так:

typeDescriptor().gun['unlock']

Аа, только для своих танков проверяли?


 

 

стокового ИСа пусто
, а пушка у него какая стоит? 

 

 

у топового Т29 - пусто
, потому что, после этого орудия нет других модулей и танков.

 

 

у топовой Т-43 - 6,  у топовой СУ-100 - 7
, после топовых орудий идут танки, значит с 1 я не угадал. Надо будет еще подумать, что означают эти цифры. Edited by ktulho

Share this post


Link to post

Short link
Share on other sites

@neLeax

а пушка у него какая стоит?

85 мм Д-5Т-85БМ она последняя в своей ветке. Тогда все правильно, что пусто. Может тогда нужно комбинировано на level и unlocks проверять

 

Аа, только для своих танков проверяли?

Да, у своих смотрю.

 

Если у Т-54 стоит 100 мм Д-10Т2С, которая идет последней (там две пушки 9 лвл) то выдает - 6

За сегодня устал, что-то не могу сообразить, что эти числа значат.

 

По основной массе танков если unlocks пусто, то пушка топовая.

Edited by neLeax

Share this post


Link to post

Short link
Share on other sites
Если у Т-54 стоит 100 мм Д-10Т2С, которая идет последней (там две пушки 9 лвл) то выдает - 6

, за ней же Об.140 идет.

 

 

У одного танка вообще два значения - 5 и 6.

, интересно, а что шло за этим орудием.

Edited by ktulho

Share this post


Link to post

Short link
Share on other sites

, за ней же Об.140 идет.

Точно. Что-то туплю.

 

, интересно, а что шло за этим орудием.

Это Pz.Kpfw. IV Ausf. H с пушкой 7,5 cm Kw.K. 40 L/48. Все верно, за ней еще 2 модуля.

Share this post


Link to post

Short link
Share on other sites

Может 6 - СТ, 7 - ПТ, 1 - ЛТ, 5 - башня, 8 - орудие?

Edited by ktulho

Share this post


Link to post

Short link
Share on other sites

Может 6 - СТ, 7 - ПТ, 1 - ЛТ, 5 - башня, 8 - орудие?

Да, получается так:)

5 - арта

 

На Т21 с пушкой 76 mm Gun M1A2 почему-то выдает 7

Edited by neLeax

Share this post


Link to post

Short link
Share on other sites

 

 

Да, получается так:) 5 - арта

Что-то не сходится:

 

 

Это Pz.Kpfw. IV Ausf. H с пушкой 7,5 cm Kw.K. 40 L/48. Все верно, за ней еще 2 модуля.
 

 

 

У одного танка вообще два значения - 5 и 6.
 

Share this post


Link to post

Short link
Share on other sites

И на Chi-Ri с пушкой 7.5 cm Autoloading Tank Gun Type 5 тоже 7 выдает, хотя за ним СТ идет

 

Да, действительно что-то не сходится. На КВ-3 с 107 мм ЗиС-6 выдает 8, 9. После орудия идет башня и ТТ

 

На тигре с топовым стволом тоже 7 выдает, за ним ТТ идет.

 

На КВ-3 с 122 мм Д-2-5Т вообще 10 пишет

Edited by neLeax

Share this post


Link to post

Short link
Share on other sites

 

 

И на Chi-Ri с пушкой 7.5 cm Autoloading Tank Gun Type 5 тоже 7 выдает, хотя за ним СТ идет Да, действительно что-то не сходится. На КВ-3 с 107 мм ЗиС-6 выдает 8, 9. После орудия идет башня и ТТ
. Эти цифры показывают количество чего-то. Определить что идет за модулем можно, завтра попробую набросать функцию.
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

По идее нужно эту часть скопировать в def mainGun().

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

попробовал код из поста @Ekspoint - так там мало того, что считает весь свой урон, там еще и учитывается весь урон команды союзников :))

'пруф'

два скрина: до выстрела (уничтожения) и после.

post-24956-0-51579000-1466640052_thumb.jpg

post-24956-0-37401200-1466640055_thumb.jpg  - в хитлоге появилась запись (+720 хп), в "основном калибре" нет

 

скрины с того же реплея, но с кодом @Ekspoint

post-24956-0-18921600-1466640058_thumb.jpg  - как видно, еще до этого момента цифра основного калибра сильно ниже правильной

post-24956-0-44199600-1466640059_thumb.jpg  - здесь 720 хп засчитано и в хитлоге и в расчете основного калибра (еще бы союзников не считал бы)

 

Может допилите "основной калибр" для ру-макросов, чтобы считало как надо?!

Share this post


Link to post

Short link
Share on other sites

а так

from xvm_battle.python import fragCorrelationPanel as panel
import BigWorld
from Avatar import PlayerAvatar
from Vehicle import Vehicle
from gui.Scaleform.Battle import Battle
from xfw import *   

class Battle_Info(object):
    
    def __init__(self):
        self.damage = 0
        self.section = 20   
        self.enemy_hp = {}    
        self.max_hp = [0, 0]                 
        self.textBar = ["c", "b"]  
        self.actual_arenaUniqueID = None


battle_info = Battle_Info()

@registerEvent(Battle, 'beforeDelete')
def beforeDelete(self):
    battle_info.damage = 0
    battle_info.enemy_hp.clear()
    battle_info.max_hp = [0, 0]
    battle_info.actual_arenaUniqueID = None
    

def IsLive(vehicleID):
    player = BigWorld.player()
    vehicles = player.arena.vehicles
    return vehicles[vehicleID]['isAlive'] if player is not None else None


def IsFriendly(vehicleID):
    player = BigWorld.player()
    vehicles = player.arena.vehicles
    return vehicles[player.playerVehicleID]['team'] == vehicles[vehicleID]['team'] if player is not None else None

def getVehicleHealth():
    for vehicleID in BigWorld.entities.values():
        if type(vehicleID) is Vehicle:
            if IsLive(vehicleID.id) and not IsFriendly(vehicleID.id):
                battle_info.enemy_hp[vehicleID.id] = vehicleID.health
        
        
def New_onEnterWorld(self, vehicle):
    Old_onEnterWorld(self, vehicle)
    getVehicleHealth()


Old_onEnterWorld = PlayerAvatar.vehicle_onEnterWorld
PlayerAvatar.vehicle_onEnterWorld = New_onEnterWorld

@registerEvent(Vehicle, 'onHealthChanged')        
def onHealthChanged(self, newHealth, attackerID, attackReasonID):
    if self.id in battle_info.enemy_hp.keys():
        if attackerID == BigWorld.player().playerVehicleID:
            battle_info.damage += battle_info.enemy_hp[self.id] - newHealth
        battle_info.enemy_hp[self.id] = newHealth
    getVehicleHealth()
    return battle_info.damage   


@xvm.export('nelx.total_hp', deterministic=False)
def total_hp(team):     
    arenaUniqueID = BigWorld.player().arenaUniqueID
    if battle_info.actual_arenaUniqueID != arenaUniqueID:
        battle_info.actual_arenaUniqueID = arenaUniqueID
        battle_info.max_hp[0] = panel.teams_totalhp[0]
        battle_info.max_hp[1] = panel.teams_totalhp[1]
    return panel.teams_totalhp[team]


@xvm.export('nelx.total_hp.color', deterministic=False)
def color():
    return panel.total_hp_color


@xvm.export('nelx.total_hp.sign', deterministic=False)
def sign():
    return '<' if panel.total_hp_sign == '<' else '>' if panel.total_hp_sign == '>' else panel.total_hp_sign


@xvm.export('nelx.total_hp.healthBar', deterministic=False)
def healthBar(team):
    bar = int(round( (panel.teams_totalhp[team] * battle_info.section) / float(max(battle_info.max_hp)) ))
    return '<font face="xvm"><b>' + battle_info.textBar[team] * bar + '</b></font>'


@xvm.export('nelx.total_hp.healthBar_background', deterministic=True)
def healthBar_background(team):
    return '<font face="xvm"><b>' + battle_info.textBar[team] * battle_info.section + '</b></font>'


@xvm.export('nelx.total_hp.superiority', deterministic=False)
def superiority():
    al = panel.teams_totalhp[0]
    en = panel.teams_totalhp[1]
    max_hp_now = float( max(panel.teams_totalhp) )
    superiority = int(round( abs((al - en) / max_hp_now) * 500. , 2 ))
    fill = '<font size="4" alpha="#00">' + (' ' * superiority ) + '</font>'
    indicator = '<b>^</b>'
    if en > al:
        indicator, fill = fill, indicator
    return indicator + fill


@xvm.export('nelx.total_hp.superiority_text', deterministic=False)
def superiority_text():
    al = panel.teams_totalhp[0]
    en = panel.teams_totalhp[1]
    max_hp_now = float( max(panel.teams_totalhp) )
    result = round( ((al - en) / max_hp_now) * 100. , 2)
    return "<font color='#%s'>%s%</font>" % (color(), result)


@xvm.export('nelx.mainGun', deterministic=False)
def mainGun():
    battletype = BigWorld.player().arena.guiType
    if battletype != 1:
        return 
    else:
        result = int(max(round(battle_info.max_hp[1] * 0.2), 1000)) - battle_info.damage
        if result <= 0:
            result = "<font face='xvm' color='#96FF00' size='21'>x</font>"
    return "<img src='img://gui/maps/icons/achievement/32x32/mainGun.png' width='32' height='32' align='middle' vspace='-9'>%s" % (result)


@xvm.export('nelx.damagePercent', deterministic=False)
def damagePercent():
    if battle_info.damage == 0:
        result = 0
    else:
        result = round (100. / battle_info.max_hp[1] * battle_info.damage , 1)
    return "%s% <img src='img://gui/maps/icons/vehParams/damageAvgPerMinute.png' width='24' height='24' align='middle' vspace='-4'>" % (result)

Edited by Ekspoint
  • Upvote 3

Share this post


Link to post

Short link
Share on other sites
Можно попробовать вытянуть {{dmg-total}} из хитлога. 

, это работает, хотя надо по тестировать, лучше на пулеметах.

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