<commit_before>'use strict';

// Seiryu Extreme
[{
  zoneRegex: /^The Wreath Of Snakes \(Extreme\)$/,
  timelineFile: 'seiryu-ex.txt',
  timelineTriggers: [
    {
      id: 'SeiryuEx Split Group',
      regex: /Forbidden Arts 1/,
      beforeSeconds: 4,
      infoText: {
        en: 'stack with your group',
        de: 'mit der Gruppe stacken',
        fr: 'Packé avec votre groupe',
      },
    },
    {
      id: 'SeiryuEx Stack',
      regex: /Forbidden Arts$/,
      beforeSeconds: 1,
      suppressSeconds: 10,
      infoText: {
        en: 'line stack',
        de: 'Linien-Stack',
        fr: 'Packé en ligne',
      },
    },
    {
      id: 'SeiryuEx Tether',
      regex: /Kanabo/,
      beforeSeconds: 7,
      condition: function(data) {
        return data.role == 'tank';
      },
      alertText: {
        en: 'Grab Tether, Point Away',
        de: 'Verbindung nehmen und wegdrehen',
        fr: 'Prenez le lien, pointez vers l\'extérieur',
      },
    },
  ],
  triggers: [
    {
      id: 'SeiryuEx Aramitama Tracking',
      regex: / 14:37E4:Seiryu starts using Blazing Aramitama/,
      regexDe: / 14:37E4:Seiryu starts using Flammende Aramitama/,
      regexFr: / 14:37E4:Seiryû starts using Aramitama Incandescent/,
      regexJa: / 14:37E4:青龍 starts using 荒魂燃焼/,
      run: function(data) {
        data.blazing = true;
      },
    },
    {
      id: 'SeiryuEx Cursekeeper',
      regex: / 14:37D2:Seiryu starts using Cursekeeper on (\y{Name})/,
      regexDe: / 14:37D2:Seiryu starts using Wächter des Fluchs on (\y{Name})/,
      regexFr: / 14:37D2:Seiryû starts using Katashiro on (\y{Name})/,
      regexJa: / 14:37D2:青龍 starts using 呪怨の形代 on (\y{Name})/,
      alertText: function(data, matches) {
        if (matches[1] == data.me) {
          return {
            en: 'Tank Swap',
            de: 'Tankwechsel',
            fr: 'Tank Swap',
          };
        }
        if (data.role == 'tank') {
          return {
            en: 'Swap, then Buster',
            de: 'Tankwechsel, danach Tankbuster',
            fr: 'Swap puis tankbuster',
          };
        }
      },
    },
    {
      id: 'SeiryuEx Infirm Soul',
      regex: / 14:37D2:Seiryu starts using Cursekeeper on (\y{Name})/,
      regexDe: / 14:37D2:Seiryu starts using Wächter des Fluchs on (\y{Name})/,
      regexFr: / 14:37D2:Seiryû starts using Katashiro on (\y{Name})/,
      regexJa: / 14:37D2:青龍 starts using 呪怨の形代 on (\y{Name})/,
      condition: function(data) {
        // TODO: it'd be nice to figure out who the tanks are so this
        // could also apply to the person Cursekeeper was on.
        return data.role != 'tank';
      },
      delaySeconds: 3,
      alertText: {
        en: 'Away From Tanks',
        de: 'Weg von den Tanks',
        fr: 'Ecartez-vous des tanks',
      },
    },
    {
      id: 'SeiryuEx Ascending Tracking',
      regex: / 14:3C25:Seiryu starts using Serpent Ascending/,
      regexDe: / 14:3C25:Seiryu starts using Aufstieg der Schlange/,
      regexFr: / 14:3C25:Seiryû starts using Dragon Levant/,
      regexJa: / 14:3C25:青龍 starts using 登り龍/,
      run: function(data) {
        data.markers = [];
      },
    },
    {
      id: 'SeiryuEx Ascending Stack',
      regex: / 14:3C25:Seiryu starts using Serpent Ascending/,
      regexDe: / 14:3C25:Seiryu starts using Aufstieg der Schlange/,
      regexFr: / 14:3C25:Seiryû starts using Dragon Levant/,
      regexJa: / 14:3C25:青龍 starts using 登り龍/,
      delaySeconds: 1,
      infoText: {
        en: 'Stack for Puddle AOEs',
        de: 'Stacken (Pfützen)',
        fr: 'Packez-vous pour l\'aoe',
      },
    },
    {
      id: 'SeiryuEx Ascending Marker Tracking',
      regex: / 1B:........:(\y{Name}):....:....:00A9:0000:0000:0000:/,
      condition: function(data) {
        return data.blazing;
      },
      run: function(data, matches) {
        data.markers.push(matches[1]);
      },
    },
    {
      id: 'SeiryuEx Ascending Marker You',
      regex: / 1B:........:(\y{Name}):....:....:00A9:0000:0000:0000:/,
      condition: function(data, matches) {
        return data.blazing && matches[1] == data.me;
      },
      infoText: {
        en: 'Spread (no tower)',
        de: 'Verteilen (nicht in den Turm)',
        fr: 'Ecartez-vous (pas sur la tour)',
      },
    },
    {
      id: 'SeiryuEx Ascending Tower You',
      regex: / 1B:........:(\y{Name}):....:....:00A9:0000:0000:0000:/,
      condition: function(data, matches) {
        if (!data.blazing || data.markers.length != 4)
          return false;
        return data.markers.indexOf(data.me) == -1;
      },
      alarmText: {
        en: 'Get Tower',
        de: 'In den Turm',
        fr: 'Sur votre tour',<commit_msg>raidboss: more info in seiryu tower messages<commit_after>'use strict';

// Seiryu Extreme
[{
  zoneRegex: /^The Wreath Of Snakes \(Extreme\)$/,
  timelineFile: 'seiryu-ex.txt',
  timelineTriggers: [
    {
      id: 'SeiryuEx Split Group',
      regex: /Forbidden Arts 1/,
      beforeSeconds: 4,
      infoText: {
        en: 'stack with your group',
        de: 'mit der Gruppe stacken',
        fr: 'Packé avec votre groupe',
      },
    },
    {
      id: 'SeiryuEx Stack',
      regex: /Forbidden Arts$/,
      beforeSeconds: 1,
      suppressSeconds: 10,
      infoText: {
        en: 'line stack',
        de: 'Linien-Stack',
        fr: 'Packé en ligne',
      },
    },
    {
      id: 'SeiryuEx Tether',
      regex: /Kanabo/,
      beforeSeconds: 7,
      condition: function(data) {
        return data.role == 'tank';
      },
      alertText: {
        en: 'Grab Tether, Point Away',
        de: 'Verbindung nehmen und wegdrehen',
        fr: 'Prenez le lien, pointez vers l\'extérieur',
      },
    },
  ],
  triggers: [
    {
      id: 'SeiryuEx Aramitama Tracking',
      regex: / 14:37E4:Seiryu starts using Blazing Aramitama/,
      regexDe: / 14:37E4:Seiryu starts using Flammende Aramitama/,
      regexFr: / 14:37E4:Seiryû starts using Aramitama Incandescent/,
      regexJa: / 14:37E4:青龍 starts using 荒魂燃焼/,
      run: function(data) {
        data.blazing = true;
      },
    },
    {
      id: 'SeiryuEx Cursekeeper',
      regex: / 14:37D2:Seiryu starts using Cursekeeper on (\y{Name})/,
      regexDe: / 14:37D2:Seiryu starts using Wächter des Fluchs on (\y{Name})/,
      regexFr: / 14:37D2:Seiryû starts using Katashiro on (\y{Name})/,
      regexJa: / 14:37D2:青龍 starts using 呪怨の形代 on (\y{Name})/,
      alertText: function(data, matches) {
        if (matches[1] == data.me) {
          return {
            en: 'Tank Swap',
            de: 'Tankwechsel',
            fr: 'Tank Swap',
          };
        }
        if (data.role == 'tank') {
          return {
            en: 'Swap, then Buster',
            de: 'Tankwechsel, danach Tankbuster',
            fr: 'Swap puis tankbuster',
          };
        }
      },
    },
    {
      id: 'SeiryuEx Infirm Soul',
      regex: / 14:37D2:Seiryu starts using Cursekeeper on (\y{Name})/,
      regexDe: / 14:37D2:Seiryu starts using Wächter des Fluchs on (\y{Name})/,
      regexFr: / 14:37D2:Seiryû starts using Katashiro on (\y{Name})/,
      regexJa: / 14:37D2:青龍 starts using 呪怨の形代 on (\y{Name})/,
      condition: function(data) {
        // TODO: it'd be nice to figure out who the tanks are so this
        // could also apply to the person Cursekeeper was on.
        return data.role != 'tank';
      },
      delaySeconds: 3,
      alertText: {
        en: 'Away From Tanks',
        de: 'Weg von den Tanks',
        fr: 'Ecartez-vous des tanks',
      },
    },
    {
      id: 'SeiryuEx Ascending Tracking',
      regex: / 14:3C25:Seiryu starts using Serpent Ascending/,
      regexDe: / 14:3C25:Seiryu starts using Aufstieg der Schlange/,
      regexFr: / 14:3C25:Seiryû starts using Dragon Levant/,
      regexJa: / 14:3C25:青龍 starts using 登り龍/,
      run: function(data) {
        data.markers = [];
      },
    },
    {
      id: 'SeiryuEx Ascending Stack',
      regex: / 14:3C25:Seiryu starts using Serpent Ascending/,
      regexDe: / 14:3C25:Seiryu starts using Aufstieg der Schlange/,
      regexFr: / 14:3C25:Seiryû starts using Dragon Levant/,
      regexJa: / 14:3C25:青龍 starts using 登り龍/,
      delaySeconds: 1,
      infoText: {
        en: 'Stack for Puddle AOEs',
        de: 'Stacken (Pfützen)',
        fr: 'Packez-vous pour l\'aoe',
      },
    },
    {
      id: 'SeiryuEx Ascending Marker Tracking',
      regex: / 1B:........:(\y{Name}):....:....:00A9:0000:0000:0000:/,
      condition: function(data) {
        return data.blazing;
      },
      run: function(data, matches) {
        data.markers.push(matches[1]);
      },
    },
    {
      id: 'SeiryuEx Ascending Marker You',
      regex: / 1B:........:(\y{Name}):....:....:00A9:0000:0000:0000:/,
      condition: function(data, matches) {
        return data.blazing && matches[1] == data.me;
      },
      infoText: function(data) {
        if (data.role == 'tank' || data.role == 'healer') {
          return {
            en: 'Spread (dps get towers)',
            de: 'Verteilen (nicht in den Turm)',
            fr: 'Ecartez-vous (pas sur la tour)',
          };
        }
        return {
          en: 'Spread (tanks/healers get towers)',
          de: 'Verteilen (nicht in den Turm)',
          fr: 'Ecartez-vous (pas sur la tour)',
        };
      },
    },
    {
      id: 'SeiryuEx Ascending Tower You',
      regex: / 1B:........:(\y{Name}):....:....:00A9:0000:0000:0000:/,
      condition: function(data, matches) {
        if (!data.blazing || data.markers.length != 4)
          return false;
        return data.markers.indexOf(data.me) == -1;
      },
      alarmText: function(data) {
        if (data.role == 'tank' || data.role == 'healer') {
          return {
            en: 'Get Tower (tank/healer towers)',
            de: 'In den Turm',
            fr: 'Sur votre tour',
          };
        }
        return {
          en: 'Get Tower (dps towers)',
          de: 'In den Turm',
          fr: 'Sur votre tour',
        };
{'fraction_non_alphanumeric': 0.14702659627452933, 'fraction_numerical': 0.03207490785934854, 'mean_word_length': 1.8759667716986537, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, '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': '5511513', 'n_tokens_mistral': 3835, 'n_tokens_neox': 3576, 'n_words': 880}