Kapany3uk Posted August 16, 2016 Share Posted August 16, 2016 (edited) Можно короче: Спасибо большое! все отлично! Осталась пара вопросов: Как впихнуть закрывающую скобку в ру-макрос? мне надо сделать так: (Ср. урон: 1111) - в скобках и чтобы эти скобки в реплее (раз уж не отдается) пропадали вместе с цифрами.я пытался впихнуть через footer, но при такой записи {{py:xvm_avgDamage('(Ср. урон: ', '{{hitlog.dmg-total}}', ')')}} начинает ругаться на некорректный литерал ... ')' ) пытался так '\)' ) - то же самое, попробовал и так '")"' ) (кавычки в кавычках) - не проходит, вообще на дефолт сбрасывает... Как туда же засунуть картинку? Вот в этой конструкции {{py:xvm_mainGun('Основной калибр ', '{{hitlog.dmg-total}}')}} мне надо вместо текста вставить картинку из клиента <img src='img://gui/maps/icons/achievement/32x32/mainGun.png' vspace='-12'>, чтобы она пряталась вместе с цифрами, но простой заменой не работает, поэтому сейчас я картинку просто вписал в "формат" перед ру-макросом, но тогда она не прячется :(( Edited August 16, 2016 by Kapany3uk @ Quote Link to comment Short link Share on other sites More sharing options...
ktulho Posted August 16, 2016 Share Posted August 16, 2016 (edited) Как впихнуть закрывающую скобку в ру-макрос? можно так попробовать: @xvm.export('xvm_mainGun', deterministic=False) def mainGun(header, dmg_total, end_header = ''): . . . . return '%s%s%s' % (header, high_caliber, end_header) if threshold <= int(max_hp_enemy) else '' Как туда же засунуть картинку? , покажи как прописываешь в battleLabelsTemplates.xc И повторю вопрос, а то может затерялся он: А есть реплей с тимдамагом? Все нашел. Edited August 16, 2016 by ktulho @ Quote Link to comment Short link Share on other sites More sharing options...
Kapany3uk Posted August 16, 2016 Share Posted August 16, 2016 (edited) Все нашел. а я блин раскопал акк, зашел в бой, популял по своим, получил "100 якорей в горбатую спину" и был в итоге замочен союзниками... И все ради того, чтобы прочитать "все нашел" 20160816_1948_ussr-R10_AT-1_08_ruinberg.wotreplay Edited August 16, 2016 by Kapany3uk 2 @ Quote Link to comment Short link Share on other sites More sharing options...
ktulho Posted August 16, 2016 Share Posted August 16, 2016 а я блин раскопал акк, зашел в бой, популял по своим, получил "100 якорей в горбатую спину" и был в итоге замочен союзниками... И все ради того, чтобы прочитать "все нашел" , а я на wotreplays просмотрел 227 результатов реплеев и нашел.)) @ Quote Link to comment Short link Share on other sites More sharing options...
Kapany3uk Posted August 16, 2016 Share Posted August 16, 2016 зато у меня не надо ждать - прямо после отсчета с вертухана залепил :)) , покажи как прописываешь в battleLabelsTemplates.xc сейчас так (картинка и скобки не убираются) "format": "<img src='img://gui/maps/icons/achievement/32x32/mainGun.png' vspace='-12'>{{py:xvm_mainGun(' ', '{{hitlog.dmg-total}}')}} ({{py:xvm_avgDamage('Ср. урон: ', '{{hitlog.dmg-total}}')}})" хочу так: "format": "{{py:xvm_mainGun('<img src='img://gui/maps/icons/achievement/32x32/mainGun.png' vspace='-12'> ', '{{hitlog.dmg-total}}')}} {{py:xvm_avgDamage('(Ср. урон: ', '{{hitlog.dmg-total}}', ')')}}" и закрывающая ')' все ломает... @ Quote Link to comment Short link Share on other sites More sharing options...
ktulho Posted August 16, 2016 Share Posted August 16, 2016 @Kapany3uk, в avdDamage: @xvm.export('xvm_avgDamage', deterministic=False) def avgDamage(header, dmg_total, end_header = ''): global avgDmg if avgDmg == None: return else: avgDamage = int(avgDmg) - int(dmg_total) if avgDamage <= 0: avgDamage = '+%s' % (abs(avgDamage)) return '%s%s%s' % (header, avgDamage, end_header) 1 @ Quote Link to comment Short link Share on other sites More sharing options...
night_dragon_on Posted August 16, 2016 Share Posted August 16, 2016 (edited) убирать вообще (и тут становится сильно актуален мой предыдущий вопрос про картинку в 'header') Как раз поэтому то и шапка (заголовок) внесен непосредственно внутрь питон кода, для чего, а все просто. Если у нас по текущей логике нельзя получить основной калибр, либо в реплее недоступен подсчет среднего урона панель будет полностью пуста. и все "форматирование" вывода вынести за пределы ру-макроса в любимый и привычный "format"? Если же мы пропишем заголовок отдельно в поле то при отсутствие данных у нас будет выводится пустая шапка без данных что не особо то будет смотреться. Edited August 16, 2016 by night_dragon_on @ Quote Link to comment Short link Share on other sites More sharing options...
ktulho Posted August 16, 2016 Share Posted August 16, 2016 хочу так: попробуй так: "format": "{{py:xvm_mainGun('<img src=\'img://gui/maps/icons/achievement/32x32/mainGun.png\' vspace=\'-12\'> ', '{{hitlog.dmg-total}}')}} {{py:xvm_avgDamage('(Ср. урон: ', '{{hitlog.dmg-total}}', ')')}}" @ Quote Link to comment Short link Share on other sites More sharing options...
Ekspoint Posted August 16, 2016 Share Posted August 16, 2016 вы тут забыли сделать еще проверку на режим боя, вроде player = BigWorld.player() if player.arena.guiType == 1: тут уже все и счичать else: return "<img src='img://gui/maps/icons/library/errorIcon.png' width='22' height='22' vspace='-4'>" @ Quote Link to comment Short link Share on other sites More sharing options...
night_dragon_on Posted August 16, 2016 Share Posted August 16, 2016 (edited) вы тут забыли сделать еще проверку на режим боя, вроде Везде же есть проверка: 'code' battletype = BigWorld.player().arena.guiType if battletype != 1: return Отображаются данные только для рандомного боя ( медальку можно получить только в этом режиме, да и данные по среднему урону берутся только из рандомной статистики "getRandomStats()" ). Edited August 16, 2016 by night_dragon_on 1 @ Quote Link to comment Short link Share on other sites More sharing options...
Kapany3uk Posted August 16, 2016 Share Posted August 16, 2016 Kapany3uk, в avdDamage: я же так пробовал (end_header --> footer) - не работает...и с картинкой никак :)) попробуй так: 'лог' 2016-08-16 20:31:31: [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 141, in get_function ValueError: Function syntax error: xvm_mainGun(' arg='xvm_mainGun('' 2016-08-16 20:31:31: [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 142, in get_function File "scripts/common/Lib/ast.py", line 49, in literal_eval File "scripts/common/Lib/ast.py", line 37, in parse File "<unknown>", line 1 ('(Ср. урон: ', '0', ') ^ SyntaxError: EOL while scanning string literal arg='xvm_avgDamage('(Ср. урон: ', '0', ')')' @ Quote Link to comment Short link Share on other sites More sharing options...
ktulho Posted August 16, 2016 Share Posted August 16, 2016 и с картинкой никак :)) , проверь пока без картинки, только скобку. @ Quote Link to comment Short link Share on other sites More sharing options...
Kapany3uk Posted August 16, 2016 Share Posted August 16, 2016 (edited) , проверь пока без картинки, только скобку. к сожалению, ожидаемый лог (реплей) 2016-08-16 21:14:06: [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 142, in get_function File "scripts/common/Lib/ast.py", line 49, in literal_eval File "scripts/common/Lib/ast.py", line 37, in parse File "<unknown>", line 1 ( '(Ср. урон: ', '0', ') ^ SyntaxError: EOL while scanning string literal arg='xvm_avgDamage( '(Ср. урон: ', '0', ')')' если вместо ')' вписать пробел ' ' или любую букву, то лог чистый. Предположу, что вся загвоздка в экранировании этой закрывающей скобки... Попробовал вставить \u0029 - так же ошибка... upd ')' в лог ошибку не выдал, пойду в бой проверить УРА-А!! заработало... выскочил из боя написать :)) Edited August 16, 2016 by Kapany3uk @ Quote Link to comment Short link Share on other sites More sharing options...
ktulho Posted August 16, 2016 Share Posted August 16, 2016 сли вместо ')' вписать пробел ' ' или любую букву, то лог чистый. Предположу, что вся загвоздка в экранировании этой закрывающей скобки... Попробовал вставить \u0029 - так же ошибка... , да, я уже тоже всяко разно пытаюсь. Похоже парсер XVM пытается это прочитать, и у него не получается. УРА-А!! заработало... выскочил из боя написать :)) , здесь наверно предется несколько символов менять: <img src='img://gui/maps/icons/achievement/32x32/mainGun.png' vspace='-12'> УРА-А!! заработало... выскочил из боя написать :)) , а на реплее не работает? @ Quote Link to comment Short link Share on other sites More sharing options...
Kapany3uk Posted August 16, 2016 Share Posted August 16, 2016 (edited) , а на реплее не работает? я скобку проверял (только запись Hex-ом рабочая получается), сейчас буду картинку вымучивать :)) что получается: если записать код картинки с апострофом {{py:xvm_mainGun('<img src='img://gui/maps/icons/achievement/32x32/mainGun.png' vspace='-10'> ', '{{hitlog.dmg-total}}')}} то ошибку выдает питон, а если записать с двойными кавычками {{py:xvm_mainGun('<img src="img://gui/maps/icons/achievement/32x32/mainGun.png" vspace="-10"> ', '{{hitlog.dmg-total}}')}} ошибку выдает парсер json и грузит дефолтный конфиг, при этом питоновской ошибки нет (то ли не доходит до нее, то ли ее уже нет в такой записи) Экранирование \" или \' не помогает - ошибка в питоне Замкнутый круг какой-то. Может дело в чтении ру-макросов в хвм, @sirmax, поможешь? Edited August 16, 2016 by Kapany3uk @ Quote Link to comment Short link Share on other sites More sharing options...
night_dragon_on Posted August 17, 2016 Share Posted August 17, 2016 (edited) Замкнутый круг какой-то. Накатал вариант тестовый в котором заголовок не помещен в код питона, но при этом сохраняется отсутствие вывода поля при недоступности данных (в реплее, при невозможности получить основной калибр, в режиме боя отличном от рандома). Edited August 17, 2016 by night_dragon_on @ Quote Link to comment Short link Share on other sites More sharing options...
ktulho Posted August 17, 2016 Share Posted August 17, 2016 (edited) Накатал вариант тестовый в котором заголовок не помещен в код питона, но при этом сохраняется отсутствие вывода поля при недоступности данных (в реплее, при невозможности получить основной калибр, в режиме боя отличном от рандома). Пробуем: avgDamage_mainGun_test.zip При отсутствие данных размер для шрифта будет равен нулю и само поле не будет висеть на экране. "mainGun": { "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": "<font size='{{py:xvm.total_hp.mainGunTxt('{{hitlog.dmg-total}}')}}'>Основной калибр: {{py:xvm.total_hp.mainGun('{{hitlog.dmg-total}}')}}</font>" }, "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": "<font size='{{py:xvm.total_hp.avgDamageTxt('{{hitlog.dmg-total}}')}}'>Средний урон: {{py:xvm.total_hp.avgDamage('{{hitlog.dmg-total}}')}}</font>" }, Надо добавить ON_DAMAGE_CAUSED_ALLY в mainGun. Edited August 17, 2016 by ktulho @ Quote Link to comment Short link Share on other sites More sharing options...
TornadoCat Posted August 17, 2016 Share Posted August 17, 2016 ALLI//_< @ Quote Link to comment Short link Share on other sites More sharing options...
ktulho Posted August 17, 2016 Share Posted August 17, 2016 //_< Исправил. Не бейте меня сильно.)) Надо добавить ON_DAMAGE_CAUSED_ALLY в mainGun. И ещё, может удобнее (в плане читаемости) "alpha" менять, а не размер? 1 @ Quote Link to comment Short link Share on other sites More sharing options...
night_dragon_on Posted August 17, 2016 Share Posted August 17, 2016 (edited) И ещё, может удобнее (в плане читаемости) "alpha" менять, а не размер? Да тоже кажется так лучше смотреться будет. Upd v4: avgDamage_mainGun.zip Edited August 17, 2016 by night_dragon_on 1 @ Quote Link to comment Short link Share on other sites More sharing options...
Recommended Posts
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.