Jump to content
Korean Random
goodman

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

Recommended Posts

@kupsw, в файле vinfo.py в строке 25 не хватает отступов. Должно быть так:

@xvm.export('vinfo.shell_damage', deterministic=False)
def shell_damage():
    vehicle = BigWorld.player()
    shotDescr = vehicle.vehicleTypeDescriptor.shot
    if shotDescr['shell']['kind'] == 'HIGH_EXPLOSIVE':
        return "%i" % (shotDescr['shell']['damage'][0] // 2)
    else:
        return "%i" % (shotDescr['shell']['damage'][0]) 

Share this post


Link to post

Short link
Share on other sites

Спасибо! Помогло. Оказываться, что нехватка отступов тоже сильно влияет. Буду теперь знать. Век живи век учись.

Share this post


Link to post

Short link
Share on other sites

ktulho почему то не убирается уровень техники и зеркальность иконок при загрузке боя пробовал все версии XVM даже последний ночник ставил на чистый клиент ничего не меняется в соответствующих файлах (battleLoading,  battleLoadingTips, battle) изменения соответствующие  фасл на тру делал реакции ноль.? 

Edited by androdizel

Share this post


Link to post

Short link
Share on other sites

ktulho почему то не убирается уровень техники и зеркальность иконок при загрузке боя пробовал все версии XVM даже последний ночник ставил на чистый клиент ничего не меняется в соответствующих файлах (battleLoading,  battleLoadingTips, battle) изменения соответствующие  фасл на тру делал реакции ноль.? 

Загрузочный экран пока не работает.

Share this post


Link to post

Short link
Share on other sites

Возник вопрос. Был скрипт (sixthSense.py), который при засвете время отсчитывал засвета. Так он сейчас работает или тоже в запрещенных стал?

Share this post


Link to post

Short link
Share on other sites

repair for 0.9.17

We poor Chinese update to 0.9.17 yesterday :hmm:

There may be some potential mistakes. And I do not know why.

 

 

I write a python macro to show the friendly arty's aiming position.

It will display as white points in the minimap and white circle in the battle view.

from xvm import aimingposition
@ Xvm.export ( 'xvm.aimpos', deterministic = False)
def refreshAimPos ():
	aimingposition.posManager.refreshList ()
	return ''
{
   "AimPos": {
      "Enabled": true,
      "UpdateEvent": "ON_EVERY_FRAME",
      "Alpha": 0,
      "Format": "{{py: xvm.aimpos ()}}"
	}
}

 

aimingposition.zip

Edited by adri1
  • Upvote 2

Share this post


Link to post

Short link
Share on other sites

Сделал py_macros {{py:xvm.sixthSenseTimer(10)}}. Аргумент (10) - начало отсчета, можете поставить свой.

Пример использования.

В файл battleLabels.xc добавить:

${ "battleLabelsTemplates.xc":"def.sixthSenseTimer"}

В файл battleLabelsTemplates.xc добавить:

    "sixthSenseTimer": { 
      "enabled": true,
      "updateEvent": "PY(ON_SIXTH_SENSE_SHOW)",
      "x": 0,
      "y": 270,
      "width": 50,
      "height": 50,
      "screenHAlign": "center",
      "shadow": { "distance": 1, "angle": 90, "alpha": 80, "blur": 5, "strength": 1.5 },
      "textFormat": {"align": "center", "size": 36 },
      "format": "{{py:xvm.sixthSenseTimer(10)}}"
    }

Файл скопировать в \res_mods\configs\xvm\py_macro\

attachicon.gifsixthSense.rar

В XVM-6.5.1.1-RELEASE перестал работать ?

B лог полученного урона то же ((

Edited by vizhu

Share this post


Link to post

Short link
Share on other sites

@vizhu, папка py_macro на месте? 

 

ДА

 

battleLabelsTemplates.xc

/**

* Battle inteface text fields.

* Текстовые поля боевого интерфейса.

*/

{

  // Definitions.

  // Шаблоны.

  "def": {

    "hitlogHeader": {

      "enabled": true,

      "updateEvent": "ON_DAMAGE_CAUSED, ON_PANEL_MODE_CHANGED",

      "x": 500,

      "y": 30,

      "width": 500,

      "height": 1000,

      "textFormat": { "color": "0xF4EFE8", "size": 15 },

      "format": "{{hitlog-header}}"

      // Format of the full hitlog (header and body)

      // Формат полного хит-лога (шапка и тело)

      // "format": "{{hitlog-header}}\n{{hitlog-body}}"

    },

    "hitlogBody": {

      "enabled": false,

      "hotKeyCode": 56, "onHold": "true", "visibleOnHotKey": false,

      "updateEvent": "ON_DAMAGE_CAUSED, ON_PANEL_MODE_CHANGED",

      "x": "{{pp.mode=0?5|{{py:math.sum({{pp.widthLeft}},50)}}}}",

      "y": "{{pp.mode=0?85|60}}",

      "width": 500,

      "height": 1000,

      "textFormat": { "color": "0xF4EFE8", "size": 15 },

      "format": "{{hitlog-body}}"

    },

    // Total hp indicator.

    // Индикатор общего HP команд.

    "totalHP": {

      "enabled": false,

      "updateEvent": "PY(ON_UPDATE_HP)",

      "x": 0,

      "y": 30,

      "screenHAlign": "center",

      "align": "center",

      "shadow": { "distance": 1, "angle": 90, "alpha": 80, "blur": 5, "strength": 1.5 },

      "textFormat": { "font": "mono", "size": 18, "align": "center" },

      "format": "{{py:xvm.total_hp.text}}"

    },

    // Avg damage on current vehicle.

    // Средний урон на текущей технике.

    "avgDamage": {

      "enabled": false,

      "updateEvent": "PY(ON_UPDATE_HP)",

      "x": -170,

      "y": 30,

      "screenHAlign": "center",

      "align": "right",

      "shadow": { "distance": 1, "angle": 90, "alpha": 80, "blur": 5, "strength": 1.5 },

      "textFormat": { "size": 15, "align": "center" },

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

    },

    // Threshold necessary for achievements "High caliber".

    // Порог необходимый для получения достижения "Основной калибр".

    "mainGun": {

      "enabled": false,

      "updateEvent": "PY(ON_UPDATE_HP)",

      "x": 170,

      "y": 30,

      "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('{{l10n:mainGun}}: ',{{hitlog.dmg-total}})}}"

    },

    // Chance of winning.

    // Шанс на победу.

    "winChance": {

      "enabled": true,

      "updateEvent": "ON_VEHICLE_DESTROYED",

      "x": 230,

      "y": 2,

      "shadow": { "distance": 1, "angle": 90, "alpha": 80, "blur": 5, "strength": 1.5 },

      "textFormat": { "size": 15 },

      "format": "{{xvm-stat?{{l10n:Team strength}}: {{py:xvm.team_strength('{{allyStrengthLive}}','{{enemyStrengthLive}}')}}}}"

    },

    // Log of the received damage (see damageLog.xc).

    // Лог полученного урона (см. damageLog.xc).

    "damageLog": {

      "enabled": true,

      "updateEvent": "PY(ON_HIT)",

      "x": 240,

      "y": 0,

      "width": 300,

      "height": 233,

      "screenVAlign": "bottom",

      "shadow": {

        "distance": "{{py:xvm.damageLog.dLog_shadow('distance')}}",

        "angle": "{{py:xvm.damageLog.dLog_shadow('angle')}}",

        "color": "{{py:xvm.damageLog.dLog_shadow('color')}}",

        "alpha": "{{py:xvm.damageLog.dLog_shadow('alpha')}}",

        "blur": "{{py:xvm.damageLog.dLog_shadow('blur')}}",

        "strength": "{{py:xvm.damageLog.dLog_shadow('strength')}}",

        "hideObject": "{{py:xvm.damageLog.dLog_shadow('hideObject')}}",

        "inner": "{{py:xvm.damageLog.dLog_shadow('inner')}}",

        "knockout": "{{py:xvm.damageLog.dLog_shadow('knockout')}}",

        "quality": "{{py:xvm.damageLog.dLog_shadow('quality')}}"

      },

      "textFormat": { "color": "0xF4EFE8", "size": 16},

      "format": "{{py:xvm.damageLog.dLog}}",

      "mouseEvents": {

        "mouseDown": "dLog_mouseDown",

        "mouseUp": "dLog_mouseUp",

        "mouseMove": "dLog_mouseMove"

      }

    },

    // Display the last damage (hit) (see damageLog.xc).

    // Отображение последнего урона (попадания) (см. damageLog.xc).

     "lastHit": {

      "enabled": true,

      "updateEvent": "PY(ON_LAST_HIT)",

      "x": -120,

      "y": 200,

      "width": 200,

      "height": 100,

      "screenHAlign": "center",

      "screenVAlign": "center",

      "shadow": {

        "distance": "{{py:xvm.damageLog.lastHit_shadow('distance')}}",

        "angle": "{{py:xvm.damageLog.lastHit_shadow('angle')}}",

        "color": "{{py:xvm.damageLog.lastHit_shadow('color')}}",

        "alpha": "{{py:xvm.damageLog.lastHit_shadow('alpha')}}",

        "blur": "{{py:xvm.damageLog.lastHit_shadow('blur')}}",

        "strength": "{{py:xvm.damageLog.lastHit_shadow('strength')}}",

        "hideObject": "{{py:xvm.damageLog.lastHit_shadow('hideObject')}}",

        "inner": "{{py:xvm.damageLog.lastHit_shadow('inner')}}",

        "knockout": "{{py:xvm.damageLog.lastHit_shadow('knockout')}}",

        "quality": "{{py:xvm.damageLog.lastHit_shadow('quality')}}"

      },

      "textFormat": {"align": "center", "color": "0xF4EFE8", "size": 16 },

      "format": "{{py:xvm.damageLog.lastHit}}",

      "mouseEvents": {

        "mouseDown": "lastHit_mouseDown",

        "mouseUp": "lastHit_mouseUp",

        "mouseMove": "lastHit_mouseMove"

      }

    },

    "fire": {

      "enabled": true,

      "updateEvent": "PY(ON_FIRE)",

      "x": 120,

      "y": 200,

      "width": 200,

      "height": 100,

      "alpha": "{{py:xvm.damageLog.fire}}",

      "screenHAlign": "center",

      "screenVAlign": "center",

      "shadow": { "distance": 1, "angle": 90, "alpha": 80, "blur": 5, "strength": 3 },

      "textFormat": {"align": "center", "color": "0xF4EFE8", "size": 16 },

      "format": "ПОЖАР"

    },

    "totalEfficiency": {

      "enabled": true,

      "updateEvent": "PY(ON_TOTAL_EFFICIENCY)",

      "x": 240,

      "y": -2,

      "width": 300,

      "height": 22,

      "screenVAlign": "bottom",

      "shadow": { "distance": 1, "angle": 90, "alpha": 80, "blur": 5, "strength": 3 },

      "textFormat": { "color": "0xE3E3E3", "size": 16 },

      "format": "<textformat tabstops='[65,130,196]' leading='-2' ><img src='xvm://res/icons/Efficiency/damage.png'> {{py:xvm.totalDamage}}<tab><img src='xvm://res/icons/Efficiency/assist.png'> {{py:xvm.totalAssist}}<tab><img src='xvm://res/icons/Efficiency/reflect.png'> {{py:xvm.totalBlocked}}<tab><img src='xvm://res/icons/Efficiency/discover.png'> {{py:xvm.detection}}</textformat>"

},

      "sixthSenseTimer": {

      "enabled": true,

      "updateEvent": "PY(ON_SIXTH_SENSE_SHOW)",

      "x": 0,

      "y": 215,

      "width": 60,

      "height": 50,

      "screenHAlign": "center",

      "shadow": { "distance": 3, "angle": 90, "alpha": 80, "blur": 5, "strength": 3 },

      "textFormat": {"align": "center", "size": 34 },

      "format": "<font face='Verdana' color='#F4C37E'>{{py:xvm.sixthSenseTimer(10)%01.1f}}<font size='10'>{{py:xvm.sixthSenseTimer(10)?с.}}</font"

    },

      "battleClock": {

      "enabled": true,

      "updateEvent": "ON_EVERY_SECOND",

      "x": 0,

      "y": 45,

      "width": 200,

      "height": 40,

      "screenHAlign": "center",

      "shadow": { "distance": 1, "angle": 90, "alpha": 80, "blur": 5, "strength": 1.5 },

      "textFormat": {"align": "center", "size": 20 },

      "format": "{{py:xvm.formatDate('%a %b %d %H:%M:%S')}}"

    }

  }

}

Share this post


Link to post

Short link
Share on other sites

@vizhu, обратитесь в эту тему  

2016-12-21 19:40:37.653: INFO: =============================
2016-12-21 19:40:37.653: INFO: 2016-12-21 19:40:37: [ERROR] ./res_mods/mods//xfw/python\xfw\events.pyc
2016-12-21 19:40:37.653: ERROR: Traceback (most recent call last):
2016-12-21 19:40:37.653: ERROR:   File "./res_mods/mods//xfw/python\xfw\events.py", line 55, in __event_handler
2016-12-21 19:40:37.653: ERROR:     e.fire(*a, **k)
2016-12-21 19:40:37.653: ERROR:   File "./res_mods/mods//xfw/python\xfw\events.py", line 24, in fire
2016-12-21 19:40:37.653: ERROR:     handler(*args, **keywargs)
2016-12-21 19:40:37.653: ERROR:   File "res_mods/configs/xvm/py_macro\battleMessages.py", line 117, in onHealthChanged
2016-12-21 19:40:37.653: ERROR:     if battleMessagesConfig['teamDamage']['enabled']:
2016-12-21 19:40:37.653: ERROR: TypeError: string indices must be integers, not str
2016-12-21 19:40:37.653: INFO: =============================

Share this post


Link to post

Short link
Share on other sites

 

@vizhu, папку config и файл xvm.log прикрепите. 

 

В  @xvm.xc    УБЕРИ

"teamDamage": ${"teamDamage.xc":"teamDamage"}  похоже хмлку выкинул с конфига  ,а в @xvm.xc  всё ещё прописано

Edited by _bes_1

Share this post


Link to post

Short link
Share on other sites

должно работать в width, вот нормализация действительно не будет работать, но ее можно и в самом питоне сделать.

к сожалению не работатет

пробовал так

"totalHPally": {
      "enabled": true,
      "updateEvent": "PY(ON_UPDATE_HP)",
      "x": -200,
      "y": 30,
      "width": "{{py:xvm.total_hp.ally(230)}}",
      "height": 25,	  
      "screenHAlign": "center",
      "format": "<img src='cfg://Kornet_WA/img/totalHP/hp-ally-alive.png'>"
},

так

"width": "{{py:xvm.total_hp.ally:230}}",

и так

"format": "<img src='cfg://Kornet_WA/img/totalHP/hp-ally-alive.png' width='{{py:xvm.total_hp.ally:230}}' height='25'>"

ни чего не пошло.

Edited by Kornet_WA

Share this post


Link to post

Short link
Share on other sites

к сожалению не работатет

пробовал так

"totalHPally": {
      "enabled": true,
      "updateEvent": "PY(ON_UPDATE_HP)",
      "x": -200,
      "y": 30,
      "width": "{{py:xvm.total_hp.ally(230)}}",
      "height": 25,	  
      "screenHAlign": "center",
      "format": "<img src='cfg://Kornet_WA/img/totalHP/hp-ally-alive.png'>"
},

можно сделать, чтобы такая конструкция заработала

Share this post


Link to post

Short link
Share on other sites

можно сделать, чтобы такая конструкция заработала

Если есть время переделай пожалуйста скрипт totalHP. сделай немного универсальности если конечно не в ущерб производительности. Можно тему отдельную создать, а то фича есть нормально ни чего не вытащишь и темы нет.

с позволения опишу хотелки:

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

2. полоски хп с возможностью выбора символа через конфиг (прямая, наклонная черта), если сделаешь что бы вышеописанная структура работа вообще цены не будет.

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

4. вывод цифрового значения перевеса и его окрас. 

И с последующим запулением в дефолт( если макс конечно будет не против)

Share this post


Link to post

Short link
Share on other sites

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

, в каких случаях не возможно получить медаль?

 

 

4. вывод цифрового значения перевеса и его окрас.

, можно сйчас реализовать:

"format": "<font color='{{py:math.sub({{py:xvm.total_hp.ally}}, {{py:xvm.total_hp.enemy}})>0?#00FF00|#FF0000}}'>{{py:math.sub({{py:xvm.total_hp.ally}}, {{py:xvm.total_hp.enemy}})}}</font>"


"totalHPally": {
      "enabled": true,
      "updateEvent": "PY(ON_UPDATE_HP)",
      "x": -200,
      "y": 30,
      "width": "{{py:xvm.total_hp.ally(230)}}",
      "height": 25,	  
      "screenHAlign": "center",
      "format": "<img src='cfg://Kornet_WA/img/totalHP/hp-ally-alive.png'>"
},

добавил поддержку этой конструкции total_hp.rar (не проверял).

Edited by ktulho
  • Upvote 1

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