You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
234 lines
10 KiB
234 lines
10 KiB
local mod = DBM:NewMod("d640", "DBM-Challenges", 4, nil, function(t)
|
|
if GetLocale() == "deDE" then
|
|
return select(2, string.match(t, "(%S+): (%S+.%S+.%S+.%S+)")) -- "Feuerprobe: Tempel des Weißen Tigers QUEST nil"
|
|
else
|
|
return select(2, string.match(t, "(%S+.%S+): (%S+.%S+)")) or select(2, string.match(t, "(%S+.%S+):(%S+.%S+)"))
|
|
end
|
|
end)
|
|
local L = mod:GetLocalizedStrings()
|
|
|
|
mod:SetRevision("20211208050610")
|
|
mod.noStatistics = true
|
|
|
|
--mod:RegisterCombat("scenario", 1148)
|
|
|
|
mod:RegisterEvents(
|
|
"SCENARIO_UPDATE"
|
|
)
|
|
|
|
--Tank
|
|
----Adds spawning
|
|
local warnRipperTank = mod:NewSpellAnnounce(144084, 2, nil, false)--145408 is healer version of mob
|
|
local warnFlamecallerTank = mod:NewSpellAnnounce(144091, 2)--145401 is healer version of mob
|
|
local warnWindGuard = mod:NewSpellAnnounce(144087, 3)
|
|
local warnConquerorTank = mod:NewSpellAnnounce(144088, 3)--145409 is healer version of mob
|
|
----Other Stuff
|
|
local warnPyroBlast = mod:NewCastAnnounce(147601, 3, 3)--Tooltip says 2 but it actually has 3 sec cast
|
|
local warnEnrage = mod:NewTargetAnnounce(144404, 3)
|
|
--Damager
|
|
local warnAmberGlobule = mod:NewSpellAnnounce(142189, 4)
|
|
local warnHealIllusion = mod:NewCastAnnounce(142238, 4)
|
|
--Healer
|
|
local warnStinger = mod:NewSpellAnnounce(145198, 3)
|
|
local warnSonicBlast = mod:NewSpellAnnounce(145200, 3)
|
|
local warnAquaBomb = mod:NewTargetAnnounce(145206, 3)
|
|
local warnBurrow = mod:NewTargetAnnounce(145260, 2)
|
|
|
|
--Tank
|
|
local specWarnPyroBlast = mod:NewSpecialWarningInterrupt(147601, false, nil, nil, 1, 2)
|
|
local specWarnInvokeLava = mod:NewSpecialWarningSpell(144374, nil, nil, nil, 2, 2)
|
|
local specWarnInvokeLavaSIS = mod:NewSpecialWarningMove(144383, nil, nil, nil, 1, 2)
|
|
local specWarnWindBlast = mod:NewSpecialWarningSpell(144106, nil, nil, nil, 2, 2)
|
|
local specWarnAmbusher = mod:NewSpecialWarningSwitch(144086, nil, nil, nil, 1, 2)
|
|
local specWarnPowerfulSlam = mod:NewSpecialWarningMove(144401, nil, nil, nil, 1, 2)
|
|
--Damager
|
|
local specWarnAmberGlob = mod:NewSpecialWarningSpell(142189, nil, nil, nil, 1, 2)
|
|
local specWarnHealIllusion = mod:NewSpecialWarningInterrupt(142238, nil, nil, nil, 1, 2)
|
|
local specWarnBanshee = mod:NewSpecialWarningSwitch(142838, nil, nil, nil, 1, 2)
|
|
--Healer
|
|
local specWarnStinger = mod:NewSpecialWarningSwitch(145198, false, nil, nil, 1, 2)
|
|
local specWarnSonicBlast = mod:NewSpecialWarningInterrupt(145200, false, nil, nil, 1, 2)--have to be pretty damn fast to interrupt this, off by default and for the very skilled mainly
|
|
local specWarnAquaBomb = mod:NewSpecialWarningTarget(145206, nil, nil, nil, 1, 2)--It's cast too often to dispel them off, so it's better as a target warning.
|
|
|
|
--Tank
|
|
local timerWindBlastCD = mod:NewNextTimer(21, 144106, nil, nil, nil, 5)
|
|
local timerPowerfulSlamCD = mod:NewCDTimer(15, 144401, nil, nil, nil, 3)--15-17sec variation. Off by default do to timer spam
|
|
--Damager
|
|
local timerAmberGlobCD = mod:NewNextTimer(10.5, 142189, nil, nil, nil, 5)--Now off by default do to spam
|
|
local timerHealIllusionCD = mod:NewNextTimer(20, 142238, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)--Off by default do to timer spam
|
|
--Healer
|
|
local timerAquaBombCD = mod:NewCDTimer(12, 145206, nil, false, nil, 5)--12-22 second variation? off by default do to this
|
|
local timerSonicBlastCD = mod:NewCDTimer(6, 145200, nil, nil, nil, 2)--8-11sec variation, off by default because maybe spammy?
|
|
|
|
local started = false
|
|
|
|
function mod:SPELL_CAST_START(args)
|
|
local spellId = args.spellId
|
|
if spellId == 147601 then
|
|
if self.Options.SpecWarn147601interrupt and self:CheckInterruptFilter(args.sourceGUID, false, true) then
|
|
specWarnPyroBlast:Show(args.sourceName)
|
|
specWarnPyroBlast:Play("kickcast")
|
|
elseif self:AntiSpam(1.5, 1) then
|
|
warnPyroBlast:Show()
|
|
end
|
|
elseif spellId == 144374 and self:AntiSpam(1.5, 2) then
|
|
specWarnInvokeLava:Show()
|
|
specWarnInvokeLava:Play("watchstep")
|
|
elseif spellId == 144106 then
|
|
if self:AntiSpam(1.5, 3) then
|
|
specWarnWindBlast:Show()
|
|
specWarnWindBlast:Play("carefly")
|
|
end
|
|
timerWindBlastCD:Start(args.sourceGUID)
|
|
elseif spellId == 144401 then
|
|
if self:AntiSpam(1.5, 4) then
|
|
specWarnPowerfulSlam:Show()
|
|
specWarnPowerfulSlam:Play("shockwave")
|
|
end
|
|
timerPowerfulSlamCD:Start(args.sourceGUID)
|
|
elseif spellId == 142189 then
|
|
if self.Options.SpecWarn142189spell then
|
|
specWarnAmberGlob:Show()
|
|
specWarnAmberGlob:Play("watchstep")
|
|
elseif self:AntiSpam(1.5, 5) then
|
|
warnAmberGlobule:Show()
|
|
end
|
|
timerAmberGlobCD:Start(args.sourceGUID)
|
|
elseif spellId == 142238 then
|
|
timerHealIllusionCD:Start(args.sourceGUID)
|
|
if self.Options.SpecWarn142238interrupt and self:CheckInterruptFilter(args.sourceGUID, false, true) then
|
|
specWarnHealIllusion:Show(args.sourceName)
|
|
specWarnHealIllusion:Play("kickcast")
|
|
elseif self:AntiSpam(1.5, 6) then
|
|
warnHealIllusion:Show()
|
|
end
|
|
elseif spellId == 145200 then
|
|
if self.Options.SpecWarn145200interrupt and self:CheckInterruptFilter(args.sourceGUID, false, true) then
|
|
specWarnSonicBlast:Show(args.sourceName)
|
|
specWarnSonicBlast:Play("kickcast")
|
|
elseif self:AntiSpam(1.5, 7) then
|
|
warnSonicBlast:Show()
|
|
end
|
|
timerSonicBlastCD:Start(args.sourceGUID)
|
|
end
|
|
end
|
|
|
|
function mod:SPELL_AURA_APPLIED(args)
|
|
local spellId = args.spellId
|
|
if spellId == 144383 and args:IsPlayer() and self:AntiSpam(1.5, 1) then
|
|
specWarnInvokeLavaSIS:Show()
|
|
specWarnInvokeLavaSIS:Play("runaway")
|
|
elseif spellId == 144404 then
|
|
warnEnrage:Show(args.destName)
|
|
elseif spellId == 145206 then
|
|
if self.Options.SpecWarn145206target then
|
|
specWarnAquaBomb:CombinedShow(0.5, args.destName)
|
|
specWarnAquaBomb:ScheduleVoice(0.5, "targetchange")--Iffy, but meh
|
|
else
|
|
warnAquaBomb:CombinedShow(0.5, args.destName)
|
|
end
|
|
timerAquaBombCD:Start(args.sourceGUID)
|
|
end
|
|
end
|
|
mod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED
|
|
|
|
--[[
|
|
--new Damager adds (at this time not worth adding that i can see. They don't spawn mid round like tank ones, they all spawn at wave start)
|
|
"<41.9 18:54:22> [CLEU] SPELL_CAST_SUCCESS#false#0xF131159C00001436#Large Illusionary Amber-Weaver#2632#0##nil#-2147483648#-2147483648#142835#Illusionary Amber-Weaver#1", -- [273]
|
|
"<41.9 18:54:22> [CLEU] SPELL_CAST_SUCCESS#false#0xF13116F600001437#Large Illusionary Banana-Tosser#2632#0##nil#-2147483648#-2147483648#142839#Illusionary Banana-Tosser#1", -- [274]
|
|
"<76.9 18:54:57> [CLEU] SPELL_CAST_SUCCESS#false#0xF13115A400001499#Small Illusionary Mystic#2632#0##nil#-2147483648#-2147483648#142833#Illusionary Mystic#1", -- [569]
|
|
--New Healer Adds
|
|
"<48.7 18:00:50> [CLEU] SPELL_CAST_SUCCESS#false#0xF1311A90000005B9#Small Illusionary Ripper#2632#0##nil#-2147483648#-2147483648#145408#Illusionary Ripper#1", -- [1183]
|
|
"<3.6 18:00:05> [CLEU] SPELL_CAST_SUCCESS#false#0xF1311A960000057D#Small Illusionary Hive-Singer#2632#0##nil#-2147483648#-2147483648#145198#Illusionary Hive-Singer#1", -- [96]
|
|
"<3.6 18:00:05> [CLEU] SPELL_CAST_SUCCESS#false#0xF1311A980000057E#Small Illusionary Aqualyte#2632#0##nil#-2147483648#-2147483648#145204#Illusionary Aqualyte#1", -- [97]
|
|
"<48.7 18:00:50> [CLEU] SPELL_CAST_SUCCESS#false#0xF1311AC2000005B8#Unknown#2632#0##nil#-2147483648#-2147483648#145258#Illusionary Tunneler#1", -- [1182]
|
|
"<208.5 18:03:30> [CLEU] SPELL_CAST_SUCCESS#false#0xF1311A9400000647#Unknown#2632#0##nil#-2147483648#-2147483648#145409#Illusionary Conqueror#1", -- [5867]
|
|
"<328.4 18:05:29> [CLEU] SPELL_CAST_SUCCESS#false#0xF1311A93000006C8#Large Illusionary Flamecaller#2632#0##nil#-2147483648#-2147483648#145401#Illusionary Flamecaller#1", -- [9132]
|
|
--]]
|
|
function mod:SPELL_CAST_SUCCESS(args)
|
|
local spellId = args.spellId
|
|
if spellId == 144084 and self:AntiSpam(2, 4) then
|
|
warnRipperTank:Show()
|
|
elseif spellId == 144088 and self:AntiSpam(2, 8) then
|
|
warnConquerorTank:Show()
|
|
elseif spellId == 144086 and self:AntiSpam(2, 9) then
|
|
specWarnAmbusher:Show()
|
|
specWarnAmbusher:Play("targetchange")
|
|
elseif spellId == 144087 and self:AntiSpam(2, 10) then
|
|
warnWindGuard:Show()
|
|
elseif spellId == 145260 and self:AntiSpam(2, 11) then
|
|
warnBurrow:Show(args.destName)
|
|
elseif spellId == 142838 and self:AntiSpam(2, 12) then
|
|
specWarnBanshee:Show()
|
|
specWarnBanshee:Play("targetchange")
|
|
elseif spellId == 144091 and self:AntiSpam(2, 13) then
|
|
warnFlamecallerTank:Show()
|
|
elseif spellId == 145198 and self:AntiSpam(2, 14) then
|
|
if self.Options.SpecWarn145198switch then
|
|
specWarnStinger:Show()
|
|
specWarnStinger:Play("targetchange")
|
|
else
|
|
warnStinger:Show()
|
|
end
|
|
end
|
|
end
|
|
|
|
function mod:UNIT_DIED(args)
|
|
local cid = self:GetCIDFromGUID(args.destGUID)
|
|
if cid == 71076 or cid == 71069 then--Illusionary Mystic
|
|
timerHealIllusionCD:Cancel(args.destGUID)
|
|
elseif cid == 71077 or cid == 71068 then--Illusionary Amber-Weave
|
|
timerAmberGlobCD:Cancel(args.destGUID)
|
|
elseif cid == 71834 or cid == 71833 then--Illusionary Wind-Guard
|
|
timerWindBlastCD:Cancel(args.destGUID)
|
|
elseif cid == 71842 or cid == 71841 then--Illusionary Conqueror (Tank version of mob)
|
|
timerPowerfulSlamCD:Cancel(args.destGUID)
|
|
elseif cid == 72344 or cid == 72346 then--Illusionary Aqualyte
|
|
timerAquaBombCD:Cancel(args.destGUID)
|
|
elseif cid == 72342 or cid == 72343 then--Illusionary Hive-Singer
|
|
timerSonicBlastCD:Cancel(args.destGUID)
|
|
end
|
|
end
|
|
|
|
function mod:SCENARIO_UPDATE(newStep)
|
|
local diffID, currWave, maxWave, duration = C_Scenario.GetProvingGroundsInfo()
|
|
if diffID > 0 then
|
|
if not started then
|
|
started = true
|
|
self:RegisterShortTermEvents(
|
|
"SPELL_CAST_START 147601 144374 144106 144401 142189 142238 145200",
|
|
"SPELL_AURA_APPLIED 144383 144404 145206",
|
|
"SPELL_AURA_APPLIED_DOSE 144383",
|
|
"SPELL_CAST_SUCCESS 144084 144091 144088 144086 144087 145260 142838 145198",
|
|
"UNIT_DIED",
|
|
"CHAT_MSG_WHISPER"
|
|
)
|
|
end
|
|
elseif started then
|
|
started = false
|
|
self:UnregisterShortTermEvents()
|
|
end
|
|
end
|
|
|
|
do
|
|
local mode = {
|
|
[1] = CHALLENGE_MODE_MEDAL1,
|
|
[2] = CHALLENGE_MODE_MEDAL2,
|
|
[3] = CHALLENGE_MODE_MEDAL3,
|
|
[4] = L.Endless,
|
|
}
|
|
function mod:CHAT_MSG_WHISPER(msg, name, _, _, _, status)
|
|
if DBM.Options.AutoRespond and started then
|
|
if status ~= "GM" then--Filter GMs
|
|
name = Ambiguate(name, "none")
|
|
local diffID, currWave, maxWave, duration = C_Scenario.GetProvingGroundsInfo()
|
|
local message = L.ReplyWhisper:format(UnitName("player"), mode[diffID], currWave)
|
|
if msg == "status" then
|
|
SendChatMessage(message, "WHISPER", nil, name)
|
|
elseif self:AntiSpam(20, name) then--If not "status" then auto respond only once per 20 seconds per person.
|
|
SendChatMessage(message, "WHISPER", nil, name)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|