Add new file
This commit is contained in:
commit
ba2747219f
464
raidboss.js
Normal file
464
raidboss.js
Normal file
@ -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';
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user