┌─────────────────────────────┬───────────────────────────────┬────────────────────────────────────────────┬───────────────────────────────────────────────────────────────────────────────────────────────────
│         Имя файла           │ Название события по которому  │            Название py_macro               │                                             Описание
│                             │      обновляется макрос       │                                            │
├─────────────────────────────┼───────────────────────────────┼────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────
│ damage_Log.py (damageLog.py)│ PY(ON_HIT)                    │ {{py:xvm.damageLog.log}}                   │ значение "formatHistory" из секции "log" файла damageLog.xc
│                             │ ---//---                      │ {{py:xvm.damageLog.log.bg}}                │ значение "formatHistory" из секции "logBackground" файла damageLog.xc
│                             │ ---//---                      │ {{py:xvm.damageLog.log.x}}                 │ значение "x" из секции "log" файла damageLog.xc или сохраненное значение координаты х в бою
│                             │ ---//---                      │ {{py:xvm.damageLog.log.y}}                 │ значение "y" из секции "log" файла damageLog.xc или сохраненное значение координаты y в бою
│                             │ ---//---                      │ {{py:xvm.damageLog.log.shadow('XXX')}}     │ значение "XXX" из секции "log\shadow" файла damageLog.xc
│                             │ PY(ON_LAST_HIT)               │ {{py:xvm.damageLog.lastHit}}               │ значение "formatLastHit" из секции "lastHit" файла damageLog.xc
│                             │ ---//---                      │ {{py:xvm.damageLog.lastHit.bg}}            │ значение "formatLastHit" из секции "lastHitBackground" файла damageLog.xc
│                             │ ---//---                      │ {{py:xvm.damageLog.lastHit.x}}             │ значение "x" из секции "lastHit" файла damageLog.xc или сохраненное значение координаты х в бою
│                             │ ---//---                      │ {{py:xvm.damageLog.lastHit.y}}             │ значение "y" из секции "lastHit" файла damageLog.xc или сохраненное значение координаты y в бою
│                             │ ---//---                      │ {{py:xvm.damageLog.lastHit.shadow('XXX')}} │ значение "XXX" из секции "lastHit\shadow" файла damageLog.xc
│                             │ PY(ON_FIRE)                   │ {{py:xvm.damageLog.fire}}                  │ если танк горит равен 100, иначе 0
│                             │ PY(ON_IMPACT)                 │ {{py:xvm.isImpact}}                        │ возвращает 'Impact' если было воздействие на технику игрока, иначе - пусто (оглушение экипажа не
│                             │                               │                                            │ учитывается).
├─────────────────────────────┼───────────────────────────────┼────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────
│ hangar_stat.py              │                               │ {{py:winrate_next(percent)}}               │ расчет количества побед до нужного процента
│                             │                               │ {{py:stat_update('value')}}                │ дата/время последнего обновления статистики игрока
│                             │                               │                                            │ где 'value' может принимать следующие значения:
│                             │                               │                                            │ %c  - Дата и время
│                             │                               │                                            │ %d  - День месяца [01,31]
│                             │                               │                                            │ %H  - Час (24-часовой формат) [00,23]
│                             │                               │                                            │ %I  - Час (12-часовой формат) [01,12]
│                             │                               │                                            │ %m  - Номер месяца [01,12]
│                             │                               │                                            │ %M  - Число минут [00,59]
│                             │                               │                                            │ %S  - Число секунд [00,61]
│                             │                               │                                            │ %y  - Год без века [00,99]
│                             │                               │                                            │ %Y  - Год с веком
├─────────────────────────────┼───────────────────────────────┼────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────
│ hit_log.py (hitLog.py)      │ PY(ON_HIT_LOG)                │ {{py:xvm.hitLog.log}}                      │ значение "formatHistory" из секции "log" файла hitLog.xc
│                             │ ---//---                      │ {{py:xvm.hitLog.log.bg}}                   │ значение "formatHistory" из секции "logBackground" файла hitLog.xc
│                             │ ---//---                      │ {{py:xvm.hitLog.log.x}}                    │ значение "x" из секции "log" файла hitLog.xc или сохраненное значение координаты х в бою
│                             │ ---//---                      │ {{py:xvm.hitLog.log.y}}                    │ значение "y" из секции "log" файла hitLog.xc или сохраненное значение координаты y в бою
├─────────────────────────────┼───────────────────────────────┼────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────
│ math.py                     │                               │ {{py:sum(x1,x2[,...])}}                    │ принимает список чисел, возвращает их сумму
│                             │                               │ {{py:sub(a, b)}}                           │ разность чисел (a - b)
│                             │                               │ {{py:mul(x1,x2[,...])}}                    │ принимает список чисел, возвращает их произведение
│                             │                               │ {{py:div(a, b)}}                           │ результат деления a на b (a / b)
│                             │                               │ {{py:mod(a, b)}}                           │ деление a по модулю b (a % b)
│                             │                               │ {{py:pow(a, n)}}                           │ возводит в степень n число a (a ^ n)
│                             │                               │ {{py:abs(a)}}                              │ возвращает абсолютную величину числа а
│                             │                               │ {{py:random.randint(a, b)}}                │ случайное целое число в диапазоне от a до b. Если a и b не заданы, то возвращает 0 или 1
│(calculator.py)              │                               │ {{py:calc(expression [, ...])}}            │ высчитывает математическое выражение 'expression'. Подробнее: https://kr.cm/f/t/60040/
├─────────────────────────────┼───────────────────────────────┼────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────
│ score_panel.py              │                               │ {{py:sp.allyFrags}}                        │ количество убитых противников
│                             │                               │ {{py:sp.enemyFrags}}                       │ количество убитых союзников
│                             │                               │ {{py:sp.allyVeh}}                          │ общее количество союзников
│                             │                               │ {{py:sp.enemyVeh}}                         │ общее количество противников
│                             │                               │ {{py:sp.allyAlive}}                        │ количество живых союзников
│                             │                               │ {{py:sp.enemyAlive}}                       │ количество живых противников
│                             │                               │ {{py:sp.signScore}}                        │ возвращает '<', '>' или '=' в зависимости от отношения фрагов союзников и противников
├─────────────────────────────┼───────────────────────────────┼────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────
│ str.py                      │                               │ {{py:replace('str', 'old', 'new', max)}}   │ заменяет в строке 'str' подстроку 'old' на 'new'. Параметр max указывает сколько раз будет заменена
│                             │                               │                                            │ подстрока 'old' на 'new'. Если параметр max не задан, то заменяются все найденные 'old' на 'new'.
│                             │                               │ {{py:upper('str')}}                        │ преобразование строки к верхнему регистру.
│                             │                               │ {{py:lower('str')}}                        │ преобразование строки к нижнему регистру.
│                             │                               │ {{py:capitalize('str')}}                   │ переводит первый символ строки в верхний регистр, а все остальные в нижний.
│                             │                               │ {{py:title('str')}}                        │ переводит в верхний регистр первую букву каждого слова, а все остальные в нижний.
│                             │                               │ {{py:strip('string', 'chars')}}            │ удаляет в начале и в конце string символы chars. Если chars не задан, то удаляются пробелы
│                             │                               │ {{py:lstrip('string', 'chars')}}           │ удаляет в начале string символы chars. Если chars не задан, то удаляются пробелы
│                             │                               │ {{py:rstrip('string', 'chars')}}           │ удаляет в конце string символы chars. Если chars не задан, то удаляются пробелы
├─────────────────────────────┼───────────────────────────────┼────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────
│ totalEfficiency.py          │ PY(ON_TOTAL_EFFICIENCY)       │ {{py:xvm.totalDamage(norm)}}               │ если norm не задан, то возвращает общий нанесенный урон игроком, иначе нормализует значение отно-
│                             │                               │                                            │ сительно общего суммарного HP противников
│                             │ ---//---                      │ {{py:xvm.totalAssist(norm)}}               │ если norm не задан, то возвращает общий урон нанесенный с помощью игрока, иначе нормализует значе-
│                             │                               │                                            │ ние относительно общего суммарного HP противников
│                             │ ---//---                      │ {{py:xvm.totalBlocked}}                    │ общий заблокированный урон игроком
│                             │ ---//---                      │ {{py:xvm.damageReceived}}                  │ общий полученный урон игроком
│                             │ ---//---                      │ {{py:xvm.totalDamagesBlocked}}             │ сумма {{py:xvm.totalDamage}} и {{py:xvm.totalBlocked}}
│                             │ ---//---                      │ {{py:xvm.totalDamagesAssist}}              │ сумма {{py:xvm.totalDamage}} и {{py:xvm.totalAssist}}
│                             │ ---//---                      │ {{py:xvm.totalDamagesBlockedAssist}}       │ сумма {{py:xvm.totalDamage}}, {{py:xvm.totalAssist}} и {{py:xvm.totalBlocked}}
│                             │ ---//---                      │ {{py:xvm.totalDamagesBlockedReceived}}     │ сумма {{py:xvm.totalDamage}}, {{py:xvm.totalBlocked}} и {{py:xvm.damageReceived}}
│                             │ ---//---                      │ {{py:xvm.totalBlockedReceived}}            │ сумма {{py:xvm.totalBlocked}} и {{py:xvm.damageReceived}}
│                             │ ---//---                      │ {{py:xvm.damagesSquad(norm)}}              │ если norm не задан, то возвращает нанесенный урон взводом (урон нанесенный игроком не учитывается),
│                             │                               │                                            │ иначе нормализует значение относительно общего суммарного HP противников
│                             │ ---//---                      │ {{py:xvm.totalDamagesSquad(norm)}}         │ если norm не задан, то возвращает общий нанесенный урон взводом, иначе нормализует значение относи-
│                             │                               │                                            │ тельно общего суммарного HP противников
│                             │ ---//---                      │ {{py:xvm.detection}}                       │ количество обнаруженных противников
│                             │ ---//---                      │ {{py:xvm.frags}}                           │ количество фрагов
│                             │ ---//---                      │ {{py:xvm.assistTrack}}                     │ урон нанесенный технике, обездвиженной игроком (сбитая гусеница)
│                             │ ---//---                      │ {{py:xvm.assistSpot}}                      │ урон нанесенный по засвету игрока
│                             │ ---//---                      │ {{py:xvm.crits}}                           │ количество нанесенных критических попаданий
│                             │ ---//---                      │ {{py:xvm.numberHitsBlocked}}               │ количество заблокированных попаданий
│                             │ ---//---                      │ {{py:xvm.numberHitsDealt}}                 │ количество выстрелов с уроном
│                             │ ---//---                      │ {{py:xvm.dmg}}                             │ последний нанесенный урон
│                             │ ---//---                      │ {{py:xvm.numberShotsDealt}}                │ количество произведенных выстрелов
│                             │ ---//---                      │ {{py:xvm.numberShotsReceived}}             │ количество полученных попаданий
│                             │ ---//---                      │ {{py:xvm.numberHitsReceived}}              │ количество полученных попаданий с уроном
│                             │ ---//---                      │ {{py:xvm.numberDamagesDealt}}              │ количество нанесенных повреждений
│                             │ ---//---                      │ {{py:xvm.numberHits}}                      │ количество попаданий
│                             │ ---//---                      │ {{py:xvm.fragsSquad}}                      │ количество фрагов взвода (фраги игрока не учитываются)
│                             │ ---//---                      │ {{py:xvm.totalFragsSquad}}                 │ общее количество фрагов взвода
│                             │ ---//---                      │ {{py:xvm.isPlayerInSquad}}                 │ возвращает 'sq' если игрок во взводе, иначе - пусто
│                             │ ---//---                      │ {{py:xvm.totalDamageColor}}                │ динамический цвет по общему нанесённому урону
│                             │ ---//---                      │ {{py:xvm.totalStun}}                       │ общий урон, нанесенный по оглушенной вами технике
│                             │ ---//---                      │ {{py:xvm.isStuns}}                         │ возвращает 'st' если техника игрока может оглушать, иначе - пусто
│                             │ ---//---                      │ {{py:xvm.numberStuns}}                     │ общее количество оглушений
│                             │ ---//---                      │ {{py:xvm.numberDamagedVehicles}}           │ количество поврежденной техники
│                             │ ---//---                      │ {{py:xvm.hitAlly}}                         │ возвращает 'hitAlly', если было хотя бы одно попадание по союзнику, иначе - пусто
│                             │ ---//---                      │ {{py:xvm.dmgAlly}}                         │ возвращает 'dmgAlly', если был нанесен хотя бы один раз урон союзнику, иначе - пусто
│                             │ ---//---                      │ {{py:xvm.numberAssistSpot}}                │ количество попаданий по технике по вашему засвету
│                             │ ---//---                      │ {{py:xvm.numberAssistTrack}}               │ количество попаданий по технике со сбитой вами гусеницой
│                             │ ---//---                      │ {{py:xvm.numberAssistStun}}                │ количество попаданий по оглушенной вами технике
│                             │ ---//---                      │ {{py:xvm.numberAssistAndStuns}}            │ сумма {{py:xvm.numberAssistSpot}}, {{py:xvm.numberAssistTrack}} и {{py:xvm.numberStuns}}
│                             │ ---//---                      │ {{py:xvm.totalAssistAndStuns}}             │ сумма {{py:xvm.totalAssist}} и {{py:xvm.totalStun}}
│                             │ ---//---                      │ {{py:xvm.dmgKindColor}}                    │ цвет по виду последнего нанесенного урона (задается в colors.xc/"dmg_kind")
│                             │ ---//---                      │ {{py:xvm.dmgKindKey}}                      │ название ключа по виду последнего нанесенного урона (shot, fire, ramming, ...).
│                             │ ---//---                      │ {{py:xvm.toAvgDmg(norm)}}                  │ если norm не задан, то возвращает урон, который необходимо нанести для достижения среднего урона
│                             │                               │                                            │ на текущей технике, иначе нормализует значение относительно среднего урона на текущей технике.
│                             │                               │                                            │ Не работает на реплеях, работает только в случайных боях.
│                             │ ---//---                      │ {{py:xvm.toMainGun(norm)}}                 │ если norm не задан, то возвращает урон, который необходимо нанести для получения медали "Основной 
│                             │                               │                                            │ калибр", иначе нормализует значение относительно изначально необходимого урона для медали.
│                             │                               │                                            │ Не учитывает попадания по союзникам и урон других игроков.
│                             │ ---//---                      │ {{py:xvm.avgDmg}}                          │ средний урон на текущей технике. Не работает на реплеях, работает только в случайных боях.
├─────────────────────────────┼───────────────────────────────┼────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────
│ vinfo.py                    │                               │ {{py:vinfo.name}}                          │ название своей техники или название техники цели
│                             │                               │ {{py:vinfo.gun_reload}}                    │ время перезарядки своей техники или время перезарядки цели
│                             │                               │ {{py:vinfo.vision_radius}}                 │ радиус обзора своей техники или радиус обзора цели
├─────────────────────────────┼───────────────────────────────┼────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────
│ xvm.py                      │                               │ {{py:xvm.screenWidth}}                     │ ширина экрана в пикселях
│                             │                               │ {{py:xvm.screenHeight}}                    │ высота экрана в пикселях
│                             │                               │ {{py:xvm.screenVCenter}}                   │ середина экрана по высоте в пикселях
│                             │                               │ {{py:xvm.screenHCenter}}                   │ середина экрана по ширине в пикселях
│                             │                               │ {{py:xvm.XFromRight(x)}}                   │ координата x от правого края экрана в пикселях, по умолчанию x=0
│                             │                               │ {{py:xvm.YFromBottom(y)}}                  │ координата y от нижнего края экрана в пикселях, по умолчанию y=0
│                             │                               │ {{py:xvm.formatDate('value')}}             │ где 'value' может принимать следующие значения:
│                             │                               │                                            │ %a  - Сокращенное название дня недели (первая буква в верхнем регистре)
│                             │                               │                                            │ %au - Сокращенное название дня недели (в верхнем регистре)
│                             │                               │                                            │ %al - Сокращенное название дня недели (в нижнем регистре)
│                             │                               │                                            │ %A  - Полное название дня недели (первая буква в верхнем регистре)
│                             │                               │                                            │ %Au - Полное название дня недели (в верхнем регистре)
│                             │                               │                                            │ %Al - Полное название дня недели (в нижнем регистре)
│                             │                               │                                            │ %b  - Сокращенное название месяца (первая буква в верхнем регистре)
│                             │                               │                                            │ %bu - Сокращенное название месяца (в верхнем регистре)
│                             │                               │                                            │ %bl - Сокращенное название месяца (в нижнем регистре)
│                             │                               │                                            │ %B  - Полное название месяца (первая буква в верхнем регистре)
│                             │                               │                                            │ %Bu - Полное название месяца (в верхнем регистре)
│                             │                               │                                            │ %Bl - Полное название месяца (в нижнем регистре)
│                             │                               │                                            │ %c  - Дата и время
│                             │                               │                                            │ %d  - День месяца [01,31]
│                             │                               │                                            │ %H  - Час (24-часовой формат) [00,23]
│                             │                               │                                            │ %I  - Час (12-часовой формат) [01,12]
│                             │                               │                                            │ %j  - День года [001,366]
│                             │                               │                                            │ %m  - Номер месяца [01,12]
│                             │                               │                                            │ %M  - Число минут [00,59]
│                             │                               │                                            │ %p  - До полудня (AM) или после (PM) (при 12-часовом формате)
│                             │                               │                                            │ %S  - Число секунд [00,61]
│                             │                               │                                            │ %U  - Номер недели в году (нулевая неделя начинается с воскресенья) [00,53]
│                             │                               │                                            │ %w  - Номер дня недели [0(Sunday),6]
│                             │                               │                                            │ %W  - Номер недели в году (нулевая неделя начинается с понедельника) [00,53]
│                             │                               │                                            │ %x  - Дата согласно региональным настройкам
│                             │                               │                                            │ %X  - Время согласно региональным настройкам
│                             │                               │                                            │ %y  - Год без века [00,99]
│                             │                               │                                            │ %Y  - Год с веком
│                             │                               │                                            │ %Z  - Временная зона
│                             │                               │                                            │ %%  - Знак '%'
│                             │                               │                                            │ Подробнее об данном макросе: https://koreanrandom.com/forum/topic/35339-
├─────────────────────────────┼───────────────────────────────┼────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────
│ xvm.py (total_hp.py)        │ PY(ON_UPDATE_HP)              │ {{py:xvm.total_hp.ally(norm)}}             │ если norm не задан, то возвращает общее количество очков прочности союзников, иначе возвращает чис-
│                             │                               │                                            │ ло от 0 до norm
│                             │ ---//---                      │ {{py:xvm.total_hp.enemy(norm)}}            │ если norm не задан, то возвращает общее количество очков прочности противников, иначе возвращает
│                             │                               │                                            │ число от 0 до norm
│                             │ ---//---                      │ {{py:xvm.total_hp.color}}                  │ цвет, зависящий от отношения очков прочности союзников и противников
│                             │ ---//---                      │ {{py:xvm.total_hp.sign}}                   │ возвращает '<', '>' или '=', в зависимости от отношения очков прочности союзников и противников
│                             │ ---//---                      │ {{py:xvm.total_hp.text}}                   │ возвращает строку соотношения очков прочности команд вида XXXX = YYYY.
│                             │                               │ {{py:xvm.total_hp.avgDamage(h, d)}}        │ расчет урона до достижения среднего урона по текущей технике. h - текст, отображаемый перед уроном
│                             │                               │                                            │ d - текущий урон в бою
│                             │                               │ {{py:xvm.total_hp.mainGun(h, d)}}          │ расчет урона для получения медали "Основной калибр". h - текст, отображаемый перед уроном
│                             │                               │                                            │ d - текущий урон в бою
│                             │                               │ {{py:xvm.total_hp.getAvgDamage(a, b, d)}}  │ возвращает a, если вы в случайном бою и средний урон на текущей технике возможно рассчитать,
│                             │                               │                                            │ иначе возвращает b. d - текущий урон в бою
│                             │                               │ {{py:xvm.total_hp.getMainGun(a, b, d)}}    │ возвращает a, если вы в случайном бою и сумма очков прочности техники противника больше 999,
│                             │                               │                                            │ иначе возвращает b. d - текущий урон в бою
├─────────────────────────────┼───────────────────────────────┼────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────
│ xvm.py (utils.py)           │                               │ {{py:xvm.dynamic_color_rating(r, v)}}      │ макрос плавного перехода цвета между границами цветов из файла color.xc, r - название секции из
│                             │                               │                                            │ файла color.xc, v - значение. Пример: {{py:xvm.dynamic_color_rating('x', {{xwn8}})}}
│                             │                               │ {{py:xvm.color_rating(r, v)}}              │ возвращает цвет из файла color.xc, r - название секции из файла color.xc, v - значение.
│                             │                               │                                            │ Пример: {{py:xvm.color_rating('x', {{xwn8}})}}
│                             │                               │ {{py:xvm.arabic_to_roman(number)}}         │ преобразует число number из арабских цифр в число с римскими цифрами. Число может быть от 1 до 3999
│                             │                               │                                            │ Пример: {{py:xvm.arabic_to_roman({{level}})}}
├─────────────────────────────┼───────────────────────────────┼────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────
│ xvm.py (xvm2sup.py)         │                               │ {{py:xvm.xvm2sup(x)}}                      │ переводит число x из шкалы XVM в процент превосходства (SUP%)
└─────────────────────────────┴───────────────────────────────┴────────────────────────────────────────────┴───────────────────────────────────────────────────────────────────────────────────────────────────
