WoWInterface SVN RaidWatch2

[/] [trunk/] [RaidWatch_Coliseum/] [Jaraxxus.lua] - Rev 22

Compare with Previous | Blame | View Log

local mod = RW:Boss("Lord Jaraxxus", "Crusaders Coliseum")
local L

mod.BossIcon = [[Interface\Icons\spell_shadow_shadowmend]]

local tEruptCD, tPortalCD, tNetherCD
local tFleshDur, tFlameDur
local wFlame, wKiss, wNether
local iFlame, iFlesh

local tStart

function mod:OnRegister()
        L = mod:RegisterLocale(self:GetName(), "enUS", true)
        if L then
                L.YellPull = "Grand Warlock Wilfred Fizzlebang will summon forth your next challenge. Stand by for his entry."
                
                L.start_msg = "%s active"
                L.start = "Fight start timer"
        end
        L = mod:GetLocale()
        mod.L = L
        
        mod:SetTrigger(L.YellPull, 34780)
        mod:SetWin(34780)
        mod:SetDelay(100)
        
        tEruptCD, tPortalCD, tNetherCD  = self:CDTimer(120, 67901), self:CDTimer(120, 67900), self:CDTimer(44, 66228)
        tFleshDur, tFlameDur                    = self:DurTargetTimer(12, 67049), self:DurTargetTimer(8, 68123, nil, nil, false)
        
        wFlame, wKiss, wNether                  = self:RunawayWarning(68123), self:Warning(67905), self:Warning(66228)
        
        iFlame                                                  = self:Icon("SKULL", 68123, false)
        iFlesh                                                  = self:Icon("STAR", 67049, false)
        
        tStart  = self:CustomTimer(83, L.start_msg, L.start, [[Interface\Icons\Achievement_BG_killingblow_most]], L.start)
end

function mod:OnEngage(trigger)
        self:Track("Portal", 68404, 68405, 68406, 67898, 67899, 67900, 66269)
        self:Track("Erupt", 66258, 67901, 67902, 67903)
        self:Track("Flesh", 67049, 67050, 67051, 66237)
        self:Track("Flame", 68123, 68124, 68125, 66197)
        self:Track("Nether", 67009)
        self:Track("Kiss", 67905, 67906, 67907, 66334)
        
        if trigger == L.YellPull then
                tStart:Start(RW.LBB[self:GetName()] or self:GetName())
                tPortalCD:Schedule(85, 20)
                tEruptCD:Schedule(85, 80)
        else
                tPortalCD:Start(20)
                tEruptCD:Start(80)
        end
end

local ShowShieldHP, HideShieldHP
do
        local incinerateTarget
        local incinerateTargetName
        local healed = 0
        local maxAbsorb = 0
        local function ShieldHP()
                return healed, maxAbsorb, "Flesh: "..incinerateTargetName
        end
        
        function mod:SPELL_HEAL(event, args)
                if args.dGUID == incinerateTarget then
                        healed = healed - (args.absorbed or 0)
                end
        end     
        mod.SPELL_PERIODIC_HEAL = mod.SPELL_HEAL
        
        function ShowShieldHP(targetGUID, name)
                incinerateTarget = targetGUID
                incinerateTargetName = name
                maxAbsorb = GetInstanceDifficulty() == 4 and 85000 or
                                        GetInstanceDifficulty() == 3 and 40000 or
                                        GetInstanceDifficulty() == 2 and 60000 or
                                        GetInstanceDifficulty() == 1 and 30000 or 0
                healed = maxAbsorb
                RW.Callbacks:Fire("MPBExternalHide", "JarShieldHP")
                RW.Callbacks:Fire("MPBExternal", "JarShieldHP", ShieldHP, nil, nil, select(3, GetSpellInfo(67049)))
                mod:Schedule("HideFleshFrame", 15, HideShieldHP)
        end
        
        HideShieldHP = function(name)
                RW.Callbacks:Fire("MPBExternalHide", "JarShieldHP")
        end
end

function mod:Portal(event, args)
        if event == "SPELL_CAST_SUCCESS" then
                tPortalCD:Start()
        end
end

function mod:Erupt(event, args)
        if event == "SPELL_CAST_SUCCESS" then
                tEruptCD:Start()
        end
end

function mod:Flesh(event, args)
        if event == "SPELL_AURA_APPLIED" then
                tFleshDur:Start(args.dName)
                iFlesh:Show(args.dName)
                ShowShieldHP(args.dGUID, args.dName)
        elseif event == "SPELL_AURA_REMOVED" then
                tFleshDur:Stop()
                iFlesh:Hide()
                HideShieldHP(args.dName)
        end
end

function mod:Flame(event, args)
        if event == "SPELL_AURA_APPLIED" then
                tFlameDur:Start(args.dName)
                iFlame:Show(args.dName)
                if args:IsPlayer() then
                        wFlame:Show()
                end
        elseif event == "SPELL_AURA_REMOVED" then
                iFlame:Hide(args.dName)
        end
end

function mod:Nether(event, args)
        if event == "SPELL_CAST_SUCCESS" then
                tNetherCD:Start()
                wNether:Show()
        end
end

function mod:Kiss(event, args)
        if event == "SPELL_AURA_APPLIED" then
                if args:IsPlayer() then
                        wKiss:Show()
                end
        end
end

Compare with Previous | Blame