<commit_before>'use strict';

// The Vault
[{
  zoneRegex: /^The Vault$/,
  timelineFile: 'the_vault.txt',
  timelineTriggers: [
    {
      id: 'The Vault Heavenly Slash',
      regex: /Heavenly Slash/,
      beforeSeconds: 3.5,
      response: Responses.tankCleave(),
    },
    {
      id: 'The Vault Shining Blade',
      regex: /Shining Blade/,
      beforeSeconds: 3,
      suppressSeconds: 10,
      infoText: {
        en: 'Avoid dashes',
        de: 'Sprint ausweichen',
        fr: 'Evitez les dash',
      },
    },
    {
      id: 'The Vault Heavy Swing',
      regex: /Heavy Swing/,
      beforeSeconds: 4,
      response: Responses.tankCleave(),
    },
    {
      id: 'The Vault Altar Candle',
      regex: /Altar Candle/,
      beforeSeconds: 5,
      condition: function(data) {
        return data.role != 'dps';
      },
      response: Responses.tankBuster(),
    },
  ],
  triggers: [
    {
      id: 'The Vault Holiest of Holy',
      regex: Regexes.startsUsing({ id: '101E', source: 'Ser Adelphel', capture: false }),
      regexDe: Regexes.startsUsing({ id: '101E', source: 'Adelphel', capture: false }),
      regexFr: Regexes.startsUsing({ id: '101E', source: 'Sire Adelphel', capture: false }),
      regexJa: Regexes.startsUsing({ id: '101E', source: '聖騎士アデルフェル', capture: false }),
      regexCn: Regexes.startsUsing({ id: '101E', source: '圣骑士阿代尔斐尔', capture: false }),
      regexKo: Regexes.startsUsing({ id: '101E', source: '성기사 아델펠', capture: false }),
      condition: function(data) {
        return data.role == 'healer';
      },
      response: Responses.aoe(),
    },
    {
      id: 'The Vault Holy Shield Bash',
      regex: Regexes.startsUsing({ id: '101F', source: 'Ser Adelphel' }),
      regexDe: Regexes.startsUsing({ id: '101F', source: 'Adelphel' }),
      regexFr: Regexes.startsUsing({ id: '101F', source: 'Sire Adelphel' }),
      regexJa: Regexes.startsUsing({ id: '101F', source: '聖騎士アデルフェル' }),
      regexCn: Regexes.startsUsing({ id: '101F', source: '圣骑士阿代尔斐尔' }),
      regexKo: Regexes.startsUsing({ id: '101F', source: '성기사 아델펠' }),
      alertText: function(data, matches) {
        if (data.role == 'healer') {
          return {
            en: 'Heal + shield ' + data.ShortName(matches.target),
            de: 'Heilung + Schild ' + data.ShortName(matches.target),
            fr: 'Heal + boucliers ' + data.ShortName(matches.target),
          };
        }
      },
    },
    {
      id: 'The Vault Execution',
      regex: Regexes.headMarker({ id: '0020' }),
      response: Responses.awayFrom(),
    },
    {
      id: 'The Vault Black Nebula',
      regex: Regexes.startsUsing({ id: '1042', source: 'Face Of The Hero' }),
      regexDe: Regexes.startsUsing({ id: '1042', source: 'Gesicht Des Helden' }),
      regexFr: Regexes.startsUsing({ id: '1042', source: 'Visage Du Héros' }),
      regexJa: Regexes.startsUsing({ id: '1042', source: 'フェイス・オブ・ヒーロー' }),
      regexCn: Regexes.startsUsing({ id: '1042', source: '英雄之相' }),
      regexKo: Regexes.startsUsing({ id: '1042', source: '영웅의 형상' }),
      condition: function(data) {
        return data.CanStun();
      },
      response: Responses.stun(),
    },
    {
      id: 'The Vault Faith Unmoving',
      regex: Regexes.startsUsing({ id: '1027', source: 'Ser Grinnaux', capture: false }),
      regexDe: Regexes.startsUsing({ id: '1027', source: 'Grinnaux', capture: false }),
      regexFr: Regexes.startsUsing({ id: '1027', source: 'Sire Grinnaux', capture: false }),
      regexJa: Regexes.startsUsing({ id: '1027', source: '聖騎士グリノー', capture: false }),
      regexCn: Regexes.startsUsing({ id: '1027', source: '圣骑士格里诺', capture: false }),
      regexKo: Regexes.startsUsing({ id: '1027', source: '성기사 그리노', capture: false }),
      response: Responses.knockback(),
    },
    {
      id: 'The Vault Dimensional Torsion',
      regex: Regexes.tether({ id: '0001', source: 'Aetherial Tear' }),
      regexDe: Regexes.tether({ id: '0001', source: 'Ätherspalt' }),
      regexFr: Regexes.tether({ id: '0001', source: 'Déchirure Dimensionnelle' }),
      regexJa: Regexes.tether({ id: '0001', source: '次元の裂け目' }),
      regexCn: Regexes.tether({ id: '0001', source: '次元裂缝' }),
      regexKo: Regexes.tether({ id: '0001', source: '차원의 틈새' }),
      condition: function(data, matches) {
        return data.me == matches.target;
      },
      suppressSeconds: 5,
      alarmText: {
        en: 'Away from rifts',
        de: 'Weg von de Ätherspalten',
        fr: 'Eloignez-vous des déchirures',
      },
    },
    {
      id: 'The Vault Altar Pyre',
      regex: Regexes.startsUsing({ id: '1035', source: 'Ser Charibert', capture: false }),
      regexDe: Regexes.startsUsing({ id: '1035', source: 'Charibert', capture: false }),
      regexFr: Regexes.startsUsing({ id: '1035', source: 'Sire Charibert', capture: false }),
      regexJa: Regexes.startsUsing({ id: '1035', source: '聖騎士シャリベル', capture: false }),
      regexCn: Regexes.startsUsing({ id: '1035', source: '圣骑士沙里贝尔', capture: false }),
      regexKo: Regexes.startsUsing({ id: '1035', source: '성기사 샤리베르', capture: false }),
      condition: function(data) {
        return data.role == 'healer';
      },
      response: Responses.aoe(),
    },
    {
      id: 'The Vault Holy Chains',
      regex: Regexes.headMarker({ id: '0061' }),
      condition: function(data, matches) {
        return data.me == matches.target;
      },
      response: Responses.breakChains(),
    },
    {
      id: 'The Vault Knights March',
      regex: Regexes.addedCombatant({ name: ['Dawn Knight', 'Dusk Knight'], capture: false }),
      regexDe: Regexes.addedCombatant({ name: ['Dämmerross', 'Morgenross'], capture: false }),
      regexFr: Regexes.addedCombatant({ name: ['Cavalier De L\'Aube', 'Cavalier Du Crépuscule'], capture: false }),
      regexJa: Regexes.addedCombatant({ name: ['ドーン・オートナイト', 'ダスク・オートナイト'], capture: false }),
      regexCn: Regexes.addedCombatant({ name: ['拂晓骑士', '黄昏骑士'], capture: false }),
      regexKo: Regexes.addedCombatant({ name: ['여명의 자동기사', '황혼의 자동기사'], capture: false }),
      suppressSeconds: 4,
      infoText: {
        en: 'Evade marching knights',
        de: 'Marschierenden Rittern ausweichen',
        fr: 'Esquivez les chevaliers',<commit_msg>Raidboss: The Vault--knights should no longer trigger pre-battle (#1170)<commit_after>'use strict';

// The Vault
[{
  zoneRegex: /^The Vault$/,
  timelineFile: 'the_vault.txt',
  timelineTriggers: [
    {
      id: 'The Vault Heavenly Slash',
      regex: /Heavenly Slash/,
      beforeSeconds: 3.5,
      response: Responses.tankCleave(),
    },
    {
      id: 'The Vault Shining Blade',
      regex: /Shining Blade/,
      beforeSeconds: 3,
      suppressSeconds: 10,
      infoText: {
        en: 'Avoid dashes',
        de: 'Sprint ausweichen',
        fr: 'Evitez les dash',
      },
    },
    {
      id: 'The Vault Heavy Swing',
      regex: /Heavy Swing/,
      beforeSeconds: 4,
      response: Responses.tankCleave(),
    },
    {
      id: 'The Vault Altar Candle',
      regex: /Altar Candle/,
      beforeSeconds: 5,
      condition: function(data) {
        return data.role != 'dps';
      },
      response: Responses.tankBuster(),
    },
  ],
  triggers: [
    {
      id: 'The Vault Holiest of Holy',
      regex: Regexes.startsUsing({ id: '101E', source: 'Ser Adelphel', capture: false }),
      regexDe: Regexes.startsUsing({ id: '101E', source: 'Adelphel', capture: false }),
      regexFr: Regexes.startsUsing({ id: '101E', source: 'Sire Adelphel', capture: false }),
      regexJa: Regexes.startsUsing({ id: '101E', source: '聖騎士アデルフェル', capture: false }),
      regexCn: Regexes.startsUsing({ id: '101E', source: '圣骑士阿代尔斐尔', capture: false }),
      regexKo: Regexes.startsUsing({ id: '101E', source: '성기사 아델펠', capture: false }),
      condition: function(data) {
        return data.role == 'healer';
      },
      response: Responses.aoe(),
    },
    {
      id: 'The Vault Holy Shield Bash',
      regex: Regexes.startsUsing({ id: '101F', source: '<NAME>' }),
      regexDe: Regexes.startsUsing({ id: '101F', source: 'Adelphel' }),
      regexFr: Regexes.startsUsing({ id: '101F', source: 'Sire Adelphel' }),
      regexJa: Regexes.startsUsing({ id: '101F', source: '聖騎士アデルフェル' }),
      regexCn: Regexes.startsUsing({ id: '101F', source: '圣骑士阿代尔斐尔' }),
      regexKo: Regexes.startsUsing({ id: '101F', source: '성기사 아델펠' }),
      alertText: function(data, matches) {
        if (data.role == 'healer') {
          return {
            en: 'Heal + shield ' + data.ShortName(matches.target),
            de: 'Heilung + Schild ' + data.ShortName(matches.target),
            fr: 'Heal + boucliers ' + data.ShortName(matches.target),
          };
        }
      },
    },
    {
      id: 'The Vault Execution',
      regex: Regexes.headMarker({ id: '0020' }),
      response: Responses.awayFrom(),
    },
    {
      id: 'The Vault Black Nebula',
      regex: Regexes.startsUsing({ id: '1042', source: 'Face Of The Hero' }),
      regexDe: Regexes.startsUsing({ id: '1042', source: 'Gesicht Des Helden' }),
      regexFr: Regexes.startsUsing({ id: '1042', source: 'Visage Du Héros' }),
      regexJa: Regexes.startsUsing({ id: '1042', source: 'フェイス・オブ・ヒーロー' }),
      regexCn: Regexes.startsUsing({ id: '1042', source: '英雄之相' }),
      regexKo: Regexes.startsUsing({ id: '1042', source: '영웅의 형상' }),
      condition: function(data) {
        return data.CanStun();
      },
      response: Responses.stun(),
    },
    {
      id: 'The Vault Faith Unmoving',
      regex: Regexes.startsUsing({ id: '1027', source: 'Ser Grinnaux', capture: false }),
      regexDe: Regexes.startsUsing({ id: '1027', source: 'Grinnaux', capture: false }),
      regexFr: Regexes.startsUsing({ id: '1027', source: 'Sire Grinnaux', capture: false }),
      regexJa: Regexes.startsUsing({ id: '1027', source: '聖騎士グリノー', capture: false }),
      regexCn: Regexes.startsUsing({ id: '1027', source: '圣骑士格里诺', capture: false }),
      regexKo: Regexes.startsUsing({ id: '1027', source: '성기사 그리노', capture: false }),
      response: Responses.knockback(),
    },
    {
      id: 'The Vault Dimensional Torsion',
      regex: Regexes.tether({ id: '0001', source: 'Aetherial Tear' }),
      regexDe: Regexes.tether({ id: '0001', source: 'Ätherspalt' }),
      regexFr: Regexes.tether({ id: '0001', source: 'Déchirure Dimensionnelle' }),
      regexJa: Regexes.tether({ id: '0001', source: '次元の裂け目' }),
      regexCn: Regexes.tether({ id: '0001', source: '次元裂缝' }),
      regexKo: Regexes.tether({ id: '0001', source: '차원의 틈새' }),
      condition: function(data, matches) {
        return data.me == matches.target;
      },
      suppressSeconds: 5,
      alarmText: {
        en: 'Away from rifts',
        de: '<NAME>',
        fr: 'Eloignez-vous des déchirures',
      },
    },
    {
      id: 'The Vault Altar Pyre',
      regex: Regexes.startsUsing({ id: '1035', source: 'Ser Charibert', capture: false }),
      regexDe: Regexes.startsUsing({ id: '1035', source: 'Charibert', capture: false }),
      regexFr: Regexes.startsUsing({ id: '1035', source: 'Sire Charibert', capture: false }),
      regexJa: Regexes.startsUsing({ id: '1035', source: '聖騎士シャリベル', capture: false }),
      regexCn: Regexes.startsUsing({ id: '1035', source: '圣骑士沙里贝尔', capture: false }),
      regexKo: Regexes.startsUsing({ id: '1035', source: '성기사 샤리베르', capture: false }),
      condition: function(data) {
        return data.role == 'healer';
      },
      response: Responses.aoe(),
    },
    {
      id: 'The Vault Holy Chains',
      regex: Regexes.headMarker({ id: '0061' }),
      condition: function(data, matches) {
        return data.me == matches.target;
      },
      response: Responses.breakChains(),
    },
    {
      // This prevents out-of-combat activation for the March trigger during Charibert's spawn-in.
      id: 'The Vault Knights Activation',
      regex: Regexes.headMarker({ id: '0061', capture: false }),
      condition: function(data) {
        return !data.knightsActive;
      },
      run: function(data) {
        data.knightsActive = true;
      },
    },
    {
      id: 'The Vault Knights March',
      regex: Regexes.addedCombatant({ name: ['<NAME>', '<NAME>'], capture: false }),
      regexDe: Regexes.addedCombatant({ name: ['Dämmerross', 'Morgenross'], capture: false }),
      regexFr: Regexes.addedCombatant({ name: ['<NAME>', '<NAME>'], capture: false }),
      regexJa: Regexes.addedCombatant({ name: ['ドーン・オートナイト', 'ダスク・オートナイト'], capture: false }),
      regexCn: Regexes.addedCombatant({ name: ['拂晓骑士', '黄昏骑士'], capture: false }),
      regexKo: Regexes.addedCombatant({ name: ['여명의 자동기사', '황혼의 자동기사'], capture: false }),
      condition: function(data) {
        return data.knightsActive;
      },
      suppressSeconds: 4,
      infoText: {
        en: 'Evade marching knights',
        de: '<NAME>weichen',
        fr: 'Esquivez les chevaliers',
{'fraction_non_alphanumeric': 0.16390025476723538, 'fraction_numerical': 0.02362387091793407, 'mean_word_length': 2.8416370106761564, 'pattern_counts': {'":': 0, '<': 10, '<?xml version=': 0, '>': 10, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2356879', 'n_tokens_mistral': 4991, 'n_tokens_neox': 4899, 'n_words': 1113}