From ba2747219fcf071b9c8137ebf32b7cb8cd1ce839 Mon Sep 17 00:00:00 2001 From: Patrick Engel Date: Tue, 8 Oct 2019 16:58:36 +0000 Subject: [PATCH] Add new file --- raidboss.js | 464 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 464 insertions(+) create mode 100644 raidboss.js diff --git a/raidboss.js b/raidboss.js new file mode 100644 index 0000000..8f095e7 --- /dev/null +++ b/raidboss.js @@ -0,0 +1,464 @@ +'use strict'; + +// Rename this file to `raidboss.js` and edit it to change the raidboss ui. +// This file is Javascript. Anything after "//" on a line is a comment. +// If you edit this file, remember to reload ACT or click the "Reload overlay" +// button on the raidboss CactbotOverlay. +// If there are errors in this file, they will appear in the OverlayPlugin.dll +// log window in ACT. + + +// If false, no timeline of upcoming events will be displayed during fights. +Options.TimelineEnabled = true; + +// If false, triggers and timelines will not show or speak text, nor play +// sounds. +Options.AlertsEnabled = true; + +// If false, then visual text alerts are not shown for triggers. +Options.TextAlertsEnabled = true; + +// If false, then sound alerts are not played. +Options.SoundAlertsEnabled = true; + +// If true, then text-to-speech alerts are read aloud. Text-to-speech takes +// priority over custom sounds and text noises. If a trigger does not have +// a tts entry then it will fall back on text and sound (if turned on). +Options.SpokenAlertsEnabled = true; + +// Will override the singular TTS alerts if a group alert is set for a specific trigger +// Change phrasing to make sense in a group setting +Options.GroupSpokenAlertsEnabled = true; + + +// Show timer bars for events that will happen in this many seconds or less. +Options.ShowTimerBarsAtSeconds = 30; + +// Once a timer bar reaches 0, keep it around this long after. +Options.KeepExpiredTimerBarsForSeconds = 0.7; + +// Change the bar color to highlight it is coming up when this many seconds +// are left on it. +Options.BarExpiresSoonSeconds = 8; + +// Number of bars to show in the space given to the UI by css. +Options.MaxNumberOfTimerBars = 8; + + +// Path to sound played for info-priority text popups, or when "Info" is +// specified as the sound name. +Options.InfoSound = '../../resources/sounds/freesound/percussion_hit.ogg'; + +// Path to sound played for alert-priority text popups, or when "Alert" is +// specified as the sound name. +Options.AlertSound = '../../resources/sounds/BigWigs/Alert.ogg'; + +// Path to sound played for alarm-priority text popups, or when "Alarm" is +// specified as the sound name. +Options.AlarmSound = '../../resources/sounds/BigWigs/Alarm.ogg'; + +// Path to sound played when "Long" is specified as the sound name. +Options.LongSound = '../../resources/sounds/BigWigs/Long.ogg'; + +// Volume between 0 and 1 to play the InfoSound at. +Options.InfoSoundVolume = 1; + +// Volume between 0 and 1 to play the AlertSound at. +Options.AlertSoundVolume = 2; + +// Volume between 0 and 1 to play the AlarmSound at. +Options.AlarmSoundVolume = 1; + +// Volume between 0 and 1 to play the LongSound at. +Options.LongSoundVolume = 1; + +// A set of nicknames to use for players, when trying to shorten names. +Options.PlayerNicks = { + 'Darkest Edgelord': 'Mary', + 'Captain Jimmy': 'Jimmy', + 'Pipira Pira': '🐟', +}; + +// A set of triggers to be ignored. The key is the 'id' of the trigger, and +// the value should be true if the trigger is to be ignored, whereas false +// will have no effect. The trigger ids can be found in the trigger files for +// each fight in the files inside of this directory: +// https://github.com/quisquous/cactbot/tree/master/ui/raidboss/data/triggers +Options.DisabledTriggers = { + // Disable the /psych trigger from `test.js` in Summerford Farms. + 'Test Psych': true, + // Disable the "eye lasers" trigger from `drowned_city_of_skalla.js`. + 'Hrodric Words': true, +}; + + +// An array of user-defined triggers, in the format defined in the readme: +// https://github.com/quisquous/cactbot/tree/master/ui/raidboss/data/triggers +Options.Triggers = [ + + // (1) Simple example trigger: show text on screen when you die. + { + // Match every zone. + zoneRegex: /.*/, + triggers: [ + { + regex: /:You are defeated by/, + alarmText: 'YOU DIED', + }, + { + regex: /:\y{Name}:\y{AbilityCode}:Chain Stratagem:/, + infoText: 'Chain Stratagem', + }, + { + regex: /:\y{Name}:\y{AbilityCode}:Trick Attack:/, + infoText: 'Trick Attack', + }, + { + regex: /:\y{Name}:\y{AbilityCode}:Devilment:/, + infoText: 'Devilment', + }, + ], + }, + + // You can add other triggers for other zones too. Here's more examples: + // + // (2) Maybe you want a silly kissy noise whenever you a blow a kiss in + // a housing zone! + { + zoneRegex: /^(Mist|The Goblet|The Lavender Beds|Shirogane)$/, + triggers: [ + { + regex: /You blow a kiss/, + alertText: 'In or Out', + }, + ], + }, + + // (3) Maybe you want to modify some existing timeline and triggers: + // + // Add some extra triggers to the test timeline. To use it, see: + // https://github.com/quisquous/cactbot/blob/master/ui/raidboss/data/timelines/test.txt + { + // The zone this should apply to. + // This should match the zoneRegex in the triggers file. + zoneRegex: /^Middle La Noscea$/, + + // Add some additional timeline events to the test timeline. + timeline: ` + + # Note: Hash marks are comments inside of a timeline file. + # This format is the same as ACT timeline. + + # Add a new personal event to the test timeline. + 2 "(test)" + 3 "(test2)" + 4 "(test4)" + + # Remind yourself to shield the tank 5 seconds before final sting. + infotext "Final Sting" before 5 "shield the tank" + + # Events you don't like, you can hide. This gets rid of "Long Castbar". + hideall "Long Castbar" + `, + + // Add some additional triggers that will go off in Summerford Farms. + triggers: [ + // If you provoke the striking dummy (or anything), this will trigger. + { + id: 'User Example Provoke', + regex: /You use Sprint/, + alarmText: function(data) { + return data.job + 'DU BIST EIN RETURN'; + }, + infoText: 'Sprint!', + tts: 'provoke', + }, + + // A more complicated regen trigger. + { + id: 'User Example Regen', + // This will match log lines from ACT that look like this: + // "Nacho Queen gains the effect of Regen from Taco Cat for 21.00 Seconds." + regex: /gains the effect of Regen from \y{Name} for (\y{Float}) Seconds/, + delaySeconds: function(data, matches) { + // Wait the amount of seconds regen lasts before reminding you to + // reapply it. This is not smart enough to figure out if you + // cast it twice, and is left as an exercise for the reader to + // figure out how to do so via storing variables on `data`. + return data.ParseLocaleFloat(matches[1]); + }, + + alertText: 'Regen Reminder', + tts: 'regen', + }, + ], + }, + // EDEN SAVAGE FIGHTS + // E1S + { + zoneRegex: /^Eden's Gate: Resurrection \(Savage\)$/, + timeline: ` + + # dnc cooldowns + 88 "Shield Samba0" + 629.6 "Shield Samba1" + + # smn cooldowns + 105.8 "Addle0" + 700.8 "Addle1" + + # mnk cooldowns + 11.8 "Mantra0" + 105.8 "Mantra1" + 194.6 "Mantra2" + 629.6 "Mantra3" + + # gnb cooldowns + # invul + 576.0 "Superbolide0" + + # Repraisal & HoL + 11.8 "Repraisal & HoL0" + 143.0 "Repraisal & HoL1" + 589.0 "Repraisal & HoL2" + 726.3 "Repraisal & HoL3" + + # sch cooldowns + 11.8 "recit and indom" + 153.6 "Seraph 0" + 528.6 "Fairy Stuff" + 577.6 "recit and excog" + 589.1 "Seraph 1" + + # whm cooldowns + 59.4 "Benediction0" + 88 "Indulgence0" + 568.6 "Regens" + 629.6 "Temperance" + 678.1 "Benediction1" + 726.3 "Indulgence1" + + # choose what you want to hide! (add # at the beginning to "hideall" / remove # to show) + # DANCER + hideall "Shield Samba\d" + + # SUMMONER / BLACKMAGE / REDMAGE + hideall "Addle\d" + + # MONK + hideall "Mantra\d" + + # GUNBREAKER + hideall "Superbolide\d" + hideall "Repraisal & HoL\d" + + # SCHOLAR + # hideall "Seraph\d" + # hideall "recit and indom" + # hideall "Fairy Stuff" + # hideall "recitand excog" + + # WHITEMAGE + hideall "Benediction\d" + hideall "Indulgence\d" + hideall "Regens" + hideall "Temperance" + + + `, + timelineTriggers: [ + // DANCER + { + regex: /Shield Samba\d/, + condition: function(data) { + return data.job == 'DNC'; + }, + beforeSeconds: 4, + alarmText: 'USE RAIDCOOLDOWN', + tts: 'Shield Samba', + }, + // SUMMONER + { + regex: /Addle\d/, + condition: function(data) { + return data.job == 'SMN' || data.job == 'BLM'; + }, + beforeSeconds: 4, + alarmText: 'USE RAIDCOOLDOWN', + tts: 'Use Addle', + }, + // MONK + { + regex: /Mantra\d/, + condition: function(data) { + return data.job == 'MNK'; + }, + beforeSeconds: 2, + alarmText: 'USE RAIDCOOLDOWN', + tts: 'Use Mantra', + }, + // GUNBREAKER INVULS + { + regex: /Superbolide0\d/, + condition: function(data) { + return data.job == 'GNB'; + }, + beforeSeconds: 6, + alarmText: 'USE INVUL', + tts: 'Invul next Tankbuster', + }, + // GUNBREAKER REPRAISEL AND HEART OF LIGHT + { + regex: /Repraisal & HoL\d/, + condition: function(data) { + return data.job == 'GNB'; + }, + beforeSeconds: 4, + alarmText: 'USE RAIDCOOLDOWN', + tts: 'Reprisal and Heart of Light', + }, + // SCHOLAR -- LOTS OF SCHOLAR + { + regex: /recit and indom/, + condition: function(data) { + return data.job == 'SCH'; + }, + beforeSeconds: 4, + alarmText: 'RECIT + INDOM', + tts: 'Recitation and Indom', + }, + { + regex: /Seraph0/, + condition: function(data) { + return data.job == 'SCH'; + }, + beforeSeconds: 4, + alarmText: 'SERAPH', + tts: 'SERAPH', + }, + { + regex: /Fairy Stuff/, + condition: function(data) { + return data.job == 'SCH'; + }, + beforeSeconds: 4, + alarmText: 'FAIRY INC', + tts: 'use fairy', + }, + { + regex: /recit and excog/, + condition: function(data) { + return data.job == 'SCH'; + }, + beforeSeconds: 4, + alarmText: 'RECIT + EXCOG', + tts: 'RECIT + EXCOG second hit', + }, + { + regex: /Seraph1/, + condition: function(data) { + return data.job == 'SCH'; + }, + beforeSeconds: 4, + alarmText: 'SERAPH', + tts: 'SERAPH', + }, + // Whitemage + { + regex: /Benediction\d/, + condition: function(data) { + return data.job == 'WHM'; + }, + beforeSeconds: 2, + alarmText: 'BENEDICTION AFTER TANKBUSTER', + tts: 'Benediction after Tankbuster', + }, + { + regex: /Indulgence\d/, + condition: function(data) { + return data.job == 'WHM'; + }, + beforeSeconds: 2, + alarmText: 'USE INDULGENCE AFTER DELTA', + tts: 'INDULGENCE AFTER DELTA', + }, + { + regex: /Regens/, + condition: function(data) { + return data.job == 'WHM'; + }, + beforeSeconds: 2, + alarmText: 'USE REGEN FOR DPS MARKS', + tts: 'Regen for DPS marks', + }, + { + regex: /Temperance/, + condition: function(data) { + return data.job == 'WHM'; + }, + beforeSeconds: 3, + alarmText: 'USE TEMPERANCE', + tts: 'use temperance for aoe', + }, + ], + }, +]; + +// Per trigger options. By default, each trigger uses the global options +// of TextAlertsEnabled, SoundAlertsEnabled, and SpokenAlertsEnabled. +// These global options are set up top in this file. +// +// If a per trigger entry is present (regardless if true/false), it will +// override whatever the global option is set to. +// +// SoundOverride (if present) behaves like 'sound' on an individual trigger, in +// that it will take the place of the info/alert/alarm noise if no sound has +// been specified. SoundAlert (or SoundAlertsEnabled) must still be true for +// that override to be played. +// +// Here's some example per trigger options that modify the test triggers +// in Summerford Farms: +// https://github.com/quisquous/cactbot/blob/master/ui/raidboss/data/triggers/test.js + +Options.PerTriggerOptions = { + // Just like Options.DisabledTriggers, this is the trigger id to apply to. + // This overrides the settings for the "/laugh" trigger from the test + // triggers. You can try this out by teleporting to Summerford Farms + // and /laugh at a striking dummy. It will use these settings and moo. + 'Test Laugh': { + // Play the text to speech. + SpeechAlert: false, + // Play the sound alert. + SoundAlert: true, + // Show the info/alert/alarm text on screen. + TextAlert: false, + // Play this sound (replacing any sound from the original). + SoundOverride: '../../resources/sounds/WeakAuras/CowMooing.ogg', + // Play the sound (if any) at this volume. + VolumeOverride: 0.3, + }, + // This makes /poke-ing a striking dummy in Summerford Farms only + // use text to speech with no visual text indicator or other sound. + 'Test Poke': { + SpeechAlert: true, + SoundAlert: false, + TextAlert: false, + // Override the tts output as well. + TTSText: function(data) { + return 'Custom Poke (' + data.pokes + ')'; + }, + }, + // This makes /clap-ing a striking dummy override the default + // behavior to use the group TTS + 'Test Clap': { + GroupSpeechAlert: true, + SpeechAlert: true, + SoundAlert: false, + TextAlert: false, + // Override the tts output as well. + GroupTTSText: function(data) { + return 'Custom CLAP'; + }, + }, +}; +