260 lines
7.7 KiB
Lua
260 lines
7.7 KiB
Lua
local mod = DBM:NewMod("Aran", "DBM-Karazhan")
|
|
local L = mod:GetLocalizedStrings()
|
|
|
|
mod:SetRevision(("$Revision: 166 $"):sub(12, -3))
|
|
mod:SetCreatureID(16524)
|
|
mod:RegisterCombat("combat")
|
|
mod:SetUsedIcons(1, 2, 3, 4, 5, 6, 7, 8)
|
|
|
|
mod:RegisterEvents(
|
|
"SPELL_CAST_START",
|
|
"SPELL_AURA_APPLIED",
|
|
"SPELL_AURA_REMOVED",
|
|
"SPELL_CAST_SUCCESS",
|
|
"SPELL_SUMMON",
|
|
"CHAT_MSG_MONSTER_YELL",
|
|
"SPELL_PERIODIC_DAMAGE",
|
|
"CHAT_MSG_MONSTER_WHISPER"
|
|
)
|
|
|
|
local warningFlameCast = mod:NewCastAnnounce(30004, 4)
|
|
local warningArcaneCast = mod:NewCastAnnounce(29973, 4)
|
|
local warningBlizzard = mod:NewSpellAnnounce(29969, 3)
|
|
local warningElementals = mod:NewSpellAnnounce(37053, 3)
|
|
local warningChains = mod:NewTargetAnnounce(29991, 2)
|
|
local warningFlameTargets = mod:NewTargetAnnounce(29946, 4)
|
|
local warningSheepTargets = mod:NewTargetAnnounce(85273, 3)
|
|
local warningPoly = mod:NewSpellAnnounce(85273, 3)
|
|
|
|
local specWarnDontMove = mod:NewSpecialWarning("DBM_ARAN_DO_NOT_MOVE")
|
|
local specWarnArcane = mod:NewSpecialWarningRun(29973)
|
|
local specWarnBlizzard = mod:NewSpecialWarningMove(29951)
|
|
local specWarnBossShield = mod:NewSpecialWarning(L.DBM_ARAN_VULNERABLE)
|
|
local specWarnPoly = mod:NewSpecialWarning(L.VolatilePoly)
|
|
local specWarnFull = mod:NewSpecialWarning(L.ArcaneSpiral)
|
|
--local specWarnDoubleCast = mod:NewSpecialWarning(L.DoubleCast);
|
|
|
|
local timerSpecial = mod:NewTimer(30, L.timerSpecial, "Interface\\Icons\\INV_Enchant_EssenceMagicLarge")
|
|
local timerFlameCast = mod:NewCastTimer(4, 30004)
|
|
local timerArcaneExplosion = mod:NewCastTimer(10, 29973)
|
|
-- local timerBlizzadCast = mod:NewCastTimer(3.7, 29969)
|
|
local timerFlame = mod:NewBuffActiveTimer(20.5, 29946)
|
|
local timerBlizzad = mod:NewBuffActiveTimer(30, 29951)
|
|
-- local timerElementals = mod:NewBuffActiveTimer(90, 37053)
|
|
local timerChains = mod:NewTargetTimer(10, 29991)
|
|
local timerShield = mod:NewBuffActiveTimer(60, 85182)
|
|
local timerPoly = mod:NewTargetTimer(30, 85273)
|
|
local timerBoom = mod:NewTimer(5, L.ArcaneSpiralTimer, "Interface\\Icons\\spell_nature_wispsplode")
|
|
|
|
local berserkTimer = mod:NewBerserkTimer(900)
|
|
|
|
mod:AddBoolOption("WreathIcons", false)
|
|
mod:AddBoolOption("ElementalIcons", false)
|
|
mod:AddBoolOption("SheepIcons", false)
|
|
mod:AddBoolOption("MarkCurrentTarget", false)
|
|
|
|
local WreathTargets = {}
|
|
local flameWreathIcon = 7
|
|
local SheepTargets = {};
|
|
local sheepIcon = 7;
|
|
local lastTarget;
|
|
local specialAbilities = {};
|
|
|
|
local function warnFlameWreathTargets()
|
|
warningFlameTargets:Show(table.concat(WreathTargets, "<, >"))
|
|
table.wipe(WreathTargets)
|
|
flameWreathIcon = 7
|
|
end
|
|
|
|
local function warnSheepTargets()
|
|
warningSheepTargets:Show(table.concat(SheepTargets, "<, >"));
|
|
table.wipe(SheepTargets);
|
|
sheepIcon = 7;
|
|
end
|
|
|
|
function mod:UpdateSpecials(spell)
|
|
if (spell == true) then
|
|
wipe(specialAbilities);
|
|
elseif spell then
|
|
for k,v in ipairs(specialAbilities) do
|
|
if v == spell then
|
|
table.remove(specialAbilities,k);
|
|
break;
|
|
end
|
|
end
|
|
end
|
|
if (#specialAbilities == 0) then
|
|
specialAbilities = {"Blizzard","Wreath","Explosion"};
|
|
if mod:IsDifficulty("heroic10","heroic25") then
|
|
table.insert(specialAbilities,"Poly");
|
|
end
|
|
end
|
|
return table.concat(specialAbilities,"/");
|
|
end
|
|
|
|
function mod:OnCombatStart(delay)
|
|
timerSpecial:Start(11-delay,self:UpdateSpecials(true));
|
|
berserkTimer:Start(-delay)
|
|
flameWreathIcon = 7
|
|
sheepIcon = 7;
|
|
lastTarget = nil;
|
|
table.wipe(WreathTargets)
|
|
table.wipe(SheepTargets);
|
|
self.vb.phase = 1
|
|
end
|
|
|
|
function mod:SPELL_CAST_START(args)
|
|
-- if args:IsSpellID(85255, 85251, 85253) then -- Arcane Missiles, Fireball, Frostbolt
|
|
-- local destName = self:GetBossTarget();
|
|
-- if destName then
|
|
-- if self.Options.MarkCurrentTarget then
|
|
-- self:SetIcon(destName, 8);
|
|
-- end
|
|
-- if lastTarget and (destName == lastTarget) then
|
|
-- specWarnDoubleCast:Show(args.spellName);
|
|
-- end
|
|
-- lastTarget = destName;
|
|
-- end
|
|
if args:IsSpellID(30004) then
|
|
warningFlameCast:Show()
|
|
timerFlameCast:Start()
|
|
timerSpecial:Start(35,self:UpdateSpecials("Wreath"))
|
|
elseif args:IsSpellID(29973, 85436) then
|
|
warningArcaneCast:Show()
|
|
timerArcaneExplosion:Start()
|
|
specWarnArcane:Show()
|
|
timerSpecial:Start(35,self:UpdateSpecials("Explosion"))
|
|
elseif args:IsSpellID(85273) then
|
|
specWarnPoly:Show()
|
|
timerSpecial:Start(35,self:UpdateSpecials("Poly"))
|
|
-- elseif args:IsSpellID(29969) then - deprecated, Ascension's Aran doesn't use CAST_START for Blizzard.
|
|
-- warningBlizzard:Show()
|
|
-- timerBlizzadCast:Show()
|
|
-- timerBlizzad:Schedule(3.7)--may need tweaking
|
|
-- timerSpecial:Start()
|
|
end
|
|
end
|
|
|
|
|
|
function mod:SPELL_AURA_APPLIED(args)
|
|
if args:IsSpellID(29991) then
|
|
warningChains:Show(args.destName)
|
|
timerChains:Start(args.destName)
|
|
elseif args:IsSpellID(29946) then
|
|
WreathTargets[#WreathTargets + 1] = args.destName
|
|
timerFlame:Start()
|
|
if args:IsPlayer() then
|
|
specWarnDontMove:Show()
|
|
end
|
|
if self.Options.WreathIcons then
|
|
self:SetIcon(args.destName, flameWreathIcon, 20)
|
|
flameWreathIcon = flameWreathIcon - 1
|
|
end
|
|
self:Unschedule(warnFlameWreathTargets)
|
|
self:Schedule(0.3, warnFlameWreathTargets)
|
|
elseif args:IsSpellID(85182) then
|
|
timerShield:Start()
|
|
specWarnBossShield:Schedule(60)
|
|
timerSpecial:Cancel()
|
|
self.vb.phase = 2
|
|
elseif args:IsSpellID(85273) then -- Volatile Polymorph
|
|
--warningPoly:Show(args.destName)
|
|
SheepTargets[#SheepTargets + 1] = args.destName;
|
|
timerPoly:Start(args.destName);
|
|
if self.Options.SheepIcons then
|
|
self:SetIcon(args.destName, sheepIcon, 12);
|
|
sheepIcon = sheepIcon - 1;
|
|
end
|
|
self:Unschedule(warnSheepTargets);
|
|
if (self:IsDifficulty("heroic10") and (#SheepTargets >= 5)) then
|
|
self:Schedule(0, warnSheepTargets);
|
|
else
|
|
self:Schedule(0.3, warnSheepTargets);
|
|
end
|
|
elseif args:IsSpellID(29963) then
|
|
if args:IsPlayer() then
|
|
local elapsed, total = timerSpecial:GetTime(self:UpdateSpecials());
|
|
timerSpecial:Update(elapsed, total+10, self:UpdateSpecials());
|
|
end
|
|
end
|
|
end
|
|
|
|
function mod:SPELL_AURA_REMOVED(args)
|
|
if args:IsSpellID(29991) then
|
|
timerChains:Cancel(args.destName)
|
|
elseif args:IsSpellID(85273) then -- Volatile Polymorph
|
|
timerPoly:Cancel(args.destName);
|
|
if self.Options.SheepIcons then
|
|
self:RemoveIcon(args.destName);
|
|
end
|
|
end
|
|
end
|
|
|
|
function mod:CHAT_MSG_MONSTER_WHISPER(msg)
|
|
if msg == L.DBM_ARAN_FULL then
|
|
specWarnFull:Show()
|
|
timerBoom:Start()
|
|
end
|
|
end
|
|
|
|
function mod:CHAT_MSG_MONSTER_YELL(msg)
|
|
if (msg == L.DBM_ARAN_BLIZZARD_1) or (msg == L.DBM_ARAN_BLIZZARD_2) then
|
|
warningBlizzard:Show()
|
|
timerBlizzad:Start()
|
|
timerSpecial:Start(35,self:UpdateSpecials("Blizzard"))
|
|
end
|
|
end
|
|
|
|
do
|
|
local elementalIcon = {}
|
|
local currentIcon = 1
|
|
local iconsSet = 0
|
|
local function resetElementalIconState()
|
|
table.wipe(elementalIcon)
|
|
currentIcon = 1
|
|
iconsSet = 0
|
|
end
|
|
|
|
local lastElemental = 0
|
|
function mod:SPELL_SUMMON(args)
|
|
if args:IsSpellID(29962, 37051, 37052, 37053) then -- Summon Water elementals
|
|
if time() - lastElemental > 5 then
|
|
warningElementals:Show()
|
|
-- timerElementals:Show()
|
|
lastElemental = time()
|
|
if self.Options.ElementalIcons then
|
|
resetElementalIconState()
|
|
end
|
|
end
|
|
if self.Options.ElementalIcons then
|
|
elementalIcon[args.destGUID] = currentIcon
|
|
currentIcon = currentIcon + 1
|
|
end
|
|
end
|
|
end
|
|
|
|
mod:RegisterOnUpdateHandler(function(self)
|
|
if self.Options.ElementalIcons and (DBM:GetRaidRank() > 0 and not iconsSet == 4) then
|
|
for i = 1, GetNumRaidMembers() do
|
|
local uId = "raid"..i.."target"
|
|
local guid = UnitGUID(uId)
|
|
if beastIcon[guid] then
|
|
SetRaidTarget(uId, elementalIcon[guid])
|
|
iconsSet = iconsSet + 1
|
|
elementalIcon[guid] = nil
|
|
end
|
|
end
|
|
end
|
|
end, 1)
|
|
end
|
|
|
|
do
|
|
local lastBlizzard = 0
|
|
function mod:SPELL_PERIODIC_DAMAGE(args)
|
|
if args:IsSpellID(29951, 85250) and args:IsPlayer() and GetTime() - lastBlizzard > 2 then
|
|
specWarnBlizzard:Show()
|
|
lastBlizzard = GetTime()
|
|
end
|
|
end
|
|
end
|