Jump to content
Korean Random
goodman

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

Recommended Posts

это всё конечно хорошо, но такой вопрос при очередном обновлении игры все py_macro отвалятся? и что будет с XVM если засунуть не рабочий скрипт? И кто будет обновлять если вдруг скрипты упадут? ведь в дефолт его всё равно макс не пустит.

те функции которые я дал картошка мало вероятно будет менять (это те что связаны с дамагом), а если есть баг так просто удали ру файл и все

а в дефолт код не пойдет, для макса он дерьмо

@neLeax, а зачем ты убрал инфу о максимальном уроне противника? ведь если противник набил больше тебя то калибр ты уже не получишь, так что добавь если хочешь что бы инфа о калибре была более точной

Edited by Ekspoint
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

@neLeax, а зачем ты убрал инфу о максимальном уроне противника? ведь если противник набил больше тебя то калибр ты уже не получишь, так что добавь если хочешь что бы инфа о калибре была более точной

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

Share this post


Link to post

Short link
Share on other sites

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

и нужно заняться оптимизацией: падение фпс примерно на 30-35 ед.

Share this post


Link to post

Short link
Share on other sites

и нужно заняться оптимизацией: падение фпс примерно на 30-35 ед.

Ого, вот это реальная проблема. Я сейчас не играю, а на реплее не обращал внимания.

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

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

 

Или же можно не извращаться и просто в строку хит-лога вывести это значение, как ты и предлагал, минуя все эти сложные расчеты. Просто взяв готовое значение своего урона из хитлога.

Edited by neLeax

Share this post


Link to post

Short link
Share on other sites

Ого, вот это реальная проблема. Я сейчас не играю, а на реплее не обращал внимания.

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

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

 

Или же можно не извращаться и просто в строку хит-лога вывести это значение, как ты и предлагал, минуя все эти сложные расчеты. Просто взяв готовое значение своего урона из хитлога.

возьми код с этого поста http://www.koreanrandom.com/forum/topic/31856-динамические-макросы-в-python/?p=330764

вот так как то

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.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.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(vehicleId):
    player = BigWorld.player()
    if hasattr(BigWorld.entity(vehicleId), 'health'):
        return BigWorld.entity(vehicleId).health
    else:
        vehicle = player.arena.vehicles.get(vehicleId)
        if player is not None:
            return vehicle['vehicleType'].maxHealth


@registerEvent(Vehicle, 'onEnterWorld')                    
def vehicle_onEnterWorld(self, prereqs):
    self.healthOld = getVehicleHealth(self.id)

 
def show_damage_shot(self, newHealth):
    damage = self.healthOld - newHealth
    self.healthOld = newHealth
    return damage


@registerEvent(Vehicle, 'onHealthChanged')        
def onHealthChanged(self, newHealth, attackerID, attackReasonID):
    for vehicleID in BigWorld.entities.values():
        if type(vehicleID) is Vehicle:
            if IsLive(vehicleID.id) and not IsFriendly(vehicleID.id):
                 delts_helth = show_damage_shot(self, newHealth)
                 battle_info.damage += delts_helth
    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)

  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

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

При чем здесь механика игры? Речь шла о XMQP.  Та и не думаю, что картоха это читом обзовёт.

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

@sirmax,призываю тебя Всемогущий! :)  

почитай наши мучения с дебаг панелью и подскажи всё таки как получить заветные данные ..

оченно надо... 

и до кучи, таймер боя тоже расковырять бы и отконфигурировать досмерти)) 

Консолидируйте в одном письме описание задачи и текущее состояние, я посмотрю.

это всё конечно хорошо, но такой вопрос при очередном обновлении игры все py_macro отвалятся? и что будет с XVM если засунуть не рабочий скрипт? И кто будет обновлять если вдруг скрипты упадут? ведь в дефолт его всё равно макс не пустит.

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

а в дефолт код не пойдет, для макса он дерьмо

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

  • Upvote 3

Share this post


Link to post

Short link
Share on other sites

@sirmax, я правильно понимаю, что без импорта вида

from xvm import total_hp 

(директория/файл) ру-файлы из кастомных подпапок работать не будут?

и зачем импортировать все функции "исходника", когда для вывода отображения достаточно 'total_hp.text' (или не достаточно)?

Share this post


Link to post

Short link
Share on other sites

@sirmax, я правильно понимаю, что без импорта вида

from xvm import total_hp 

(директория/файл) ру-файлы из кастомных подпапок работать не будут?

и зачем импортировать все функции "исходника", когда для вывода отображения достаточно 'total_hp.text' (или не достаточно)?

Да, не будут.

Достаточно только text, но вдруг кто-то у себя захочет по частям это вывести.

Share this post


Link to post

Short link
Share on other sites
вдруг кто-то у себя захочет по частям это вывести

при импорте из кастомных папок (5761)

 

'не работает, ошибка: Non-ASCII character...'

если в импортируемом файле есть # комментарии на русском:

# ХП команд

и/или присутствует символ  ≠

 

выдает ошибку:

2016-06-09 18:19:27: [ERROR] Traceback (most recent call last):
  File "xvm_main/python_macro.py", line 128, in load_macros_lib
  File "xvm_main/python_macro.py", line 112, in execute
ExecutionException: SyntaxError at file 'res_mods/configs/xvm/py_macro\custom.py' line 15: Non-ASCII character '\xd0' in file C:\Games\World_of_Tanks\res_mods\mods/../configs/xvm/py_macro\Kapany3uk\totalHP.py on line 5, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details

и не работает

 

после удаления кириллицы и "расширенных" символов из комментариев все работает...

 

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

2016-06-09 18:29:10: [ERROR] Traceback (most recent call last):
  File "xvm_main/python_macro.py", line 154, in process_python_macro
  File "xvm_main/python_macro.py", line 145, in get_function
TypeError: 'NoneType' object is not iterable

работающий вариант, без кириллицы xvm.log

Edited by Kapany3uk

Share this post


Link to post

Short link
Share on other sites

Добрый день!
Не подскажете как поменять цвет в показателе результативности (Отметки на орудии) т.е. при повышении процента зеленый при понижении красный.
Сейчас стоит : font color='{{v.c_damageRating}}'
При повышении процента цвет зеленый при понижении цвет красный (процент перед боем сравниваеться с процентом после боя и т.д.).
Спасибо!

Share this post


Link to post

Short link
Share on other sites

кодировка файла какая?

любопытно: до вопроса была такая же, как и у дефолтных ру-файлов: UTF-8

пересохранил в UTF-8 + BOM и ошибка non-ASCII "ушла", отображение заработало.

другие ошибки остались xvm.log, сейчас попробую на свежем билде (пока все на 5761)

 

upd

ошибки - мой косяк: оставил в конфиге макрос {{py:mainGun}}, хотя из ру-файлов все касательно этого макроса удалил... увидел благодаря fix (+ "arg='{}'".format(arg)) в 5762

Edited by Kapany3uk

Share this post


Link to post

Short link
Share on other sites

увидел благодаря fix (+ "arg='{}'".format(arg)) в 5762

да, для этого я его и добавил

  • Upvote 1

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 Ekspoint

Share this post


Link to post

Short link
Share on other sites

а че нет то

Я же говорил что эти функции картошка не меняет

Ну я просто в скриптах ноль,а смотрю многое добавили,вот и решил узнать.Спасибо.

Share this post


Link to post

Short link
Share on other sites

 

 

Консолидируйте в одном письме описание задачи и текущее состояние, я посмотрю.
 я не понимаю, что нужно импортировать что бы получить fps ping lag из debug panel

если бы ты набросал тестовый код..
текущее состояние = 0

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