Created
November 19, 2024 00:03
-
-
Save alexcrichton/f68cecc966a6328e08932e6a63d5d793 to your computer and use it in GitHub Desktop.
top triggers
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Installation: | |
// | |
// 1. Place this file in a folder "$somewhere/raidboss/top.js". | |
// a. example: C:/Users/alex/Downloads/tmp/raidboss/top.js | |
// 2. ACT > Plugins > OverlayPlugin.dll > Cactbot Config | |
// 3. Set "Cactbot user directory" to "$somewhere" from above. | |
// a. example: C:/Users/alex/Downloads/tmp | |
// 4. Reload the overlay | |
// 5. In "Cactbot Config" under "Raidboss" at the bottom you should see a path to "top.js" | |
// 6. Under "top.js" you should see "The Omega Protocol (Ultimate)" | |
// 7. Under this you should see the custom triggers. | |
function groupAndPrioMap(data) { | |
let g1key = `g1${data.phase}`; | |
let g2key = `g2${data.phase}`; | |
const g1 = data.triggerSetConfig[g1key]; | |
const g2 = data.triggerSetConfig[g2key]; | |
const group = {}; | |
const prio = {}; | |
let i = 0; | |
for (let name of g1.split(',')) { | |
group[name.trim()] = 0; | |
prio[name.trim()] = i++; | |
} | |
i = 0; | |
for (let name of g2.split(',')) { | |
group[name.trim()] = 1; | |
prio[name.trim()] = i++; | |
} | |
return [group, prio]; | |
} | |
Options.Triggers.push({ | |
id: 'tinys-top-triggers', | |
zoneId: ZoneId.TheOmegaProtocolUltimate, | |
config: [ | |
{ | |
id: 'g1p1', | |
name: { | |
en: 'Group 1 in Phase 1 (first never swaps)', | |
}, | |
type: 'string', | |
default: 'Tiny,Andy,Caspian,Scloral', | |
}, | |
{ | |
id: 'g2p1', | |
name: { | |
en: 'Group 2 in Phase 1 (first never swaps)', | |
}, | |
type: 'string', | |
default: 'Karasu,Ruu,Shino,Vaults', | |
}, | |
], | |
triggers: [ | |
{ | |
id: 'TOP In Line Debuff', | |
type: 'GainsEffect', | |
netRegex: { effectId: ['BBC', 'BBD', 'BBE', 'D7B'], capture: false }, | |
condition: (data) => data.phase === 'p1', | |
delaySeconds: 0.5, | |
durationSeconds: 5, | |
suppressSeconds: 1, | |
infoText: (data, _matches, output) => { | |
const myNum = data.inLine[data.me]; | |
if (myNum === undefined) | |
return; | |
let partner = output.unknown(); | |
for (const [name, num] of Object.entries(data.inLine)) { | |
if (num === myNum && name !== data.me) { | |
partner = name; | |
break; | |
} | |
} | |
const [groups, prio] = groupAndPrioMap(data); | |
let swapstr = output.noswap(); | |
// DEBUGGING vvvv | |
if (groups[data.me] === undefined) { | |
swapstr = `!me not in group: ${data.me}!`; | |
} else if (groups[partner] === undefined) { | |
swapstr = `!partner not in group: ${partner}!`; | |
} else if (prio[data.me] === undefined) { | |
swapstr = `!me not in prio: ${data.me}!`; | |
} else if (prio[partner] === undefined) { | |
swapstr = `!partner not in prio: ${partner}!`; | |
// DEBUGGING ^^^^^ | |
} else if (groups[data.me] == groups[partner] && prio[data.me] > prio[partner]) { | |
swapstr = output.swap(); | |
} | |
return output.text({ | |
num: myNum, | |
player: data.party.member(partner), | |
swapstr, | |
}); | |
}, | |
outputStrings: { | |
text: { | |
en: '${num} (with ${player} ${swapstr})', | |
}, | |
swap: 'and YOU SWAP', | |
noswap: '', | |
unknown: Outputs.unknown, | |
}, | |
}, | |
], | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment