212 lines
6.4 KiB
Lua
212 lines
6.4 KiB
Lua
local mod = DBM:NewMod("Moroes", "DBM-Karazhan")
|
|
local L = mod:GetLocalizedStrings()
|
|
|
|
mod:SetRevision(("$Revision: 183 $"):sub(12, -3))
|
|
mod:SetCreatureID(15687)--Moroes
|
|
--19875, 19874, 19872, 17007, 19876, 19873--all the adds, for future use
|
|
mod:RegisterCombat("yell", L.DBM_MOROES_YELL_START)
|
|
--mod:RegisterCombat("combat", 15687)
|
|
|
|
mod:RegisterEvents(
|
|
"SPELL_CAST_START",
|
|
"SPELL_AURA_APPLIED",
|
|
"SPELL_AURA_REMOVED",
|
|
"SPELL_AURA_APPLIED_DOSE",
|
|
"UNIT_HEALTH",
|
|
"CHAT_MSG_MONSTER_YELL"
|
|
)
|
|
|
|
local warnPhase2Soon = mod:NewAnnounce("WarnPhase2Soon")
|
|
local warningVanishSoon = mod:NewSoonAnnounce(29448, 2)
|
|
local warningVanish = mod:NewSpellAnnounce(29448, 3)
|
|
local warningGarrote = mod:NewAnnounce(L.DBM_MOROES_GARROTE, 3, 37066)
|
|
-- local warningGouge = mod:NewTargetAnnounce(29425, 4)
|
|
local warningBlind = mod:NewTargetAnnounce(34694, 3)
|
|
local warningMortalStrike = mod:NewTargetAnnounce(29572, 2)
|
|
local warningManaBurn = mod:NewCastAnnounce(29405, 3, nil, false)
|
|
local warningGreaterHeal = mod:NewCastAnnounce(35096, 3, nil, false)
|
|
local warningHolyLight = mod:NewCastAnnounce(29562, 3, nil, false)
|
|
local warningPWS = mod:NewTargetAnnounce(85217, 3)
|
|
local warningPain = mod:NewTargetAnnounce(85174, 3)
|
|
local warningWall = mod:NewTargetAnnounce(29390, 3)
|
|
local warningDispel = mod:NewTargetAnnounce(15090, 3)
|
|
local warningHFire = mod:NewTargetAnnounce(29563, 3)
|
|
local warningHoJ = mod:NewTargetAnnounce(13005, 3)
|
|
local warningDShield = mod:NewTargetAnnounce(29382, 3)
|
|
|
|
local specWarnDinner = mod:NewSpecialWarning(L.DinnerServed)
|
|
|
|
local timerVanish = mod:NewNextTimer(30, 29448)
|
|
-- local timerGouge = mod:NewTargetTimer(6, 29425)
|
|
local timerBlind = mod:NewTargetTimer(10, 34694)
|
|
local timerMortalStrike = mod:NewTargetTimer(5, 29572)
|
|
local timerHoJ = mod:NewCDTimer(50, 13005)
|
|
local timerDinner = mod:NewCDTimer(24, 85090)
|
|
local timerDinner25m = mod:NewCDTimer(36, 85090)
|
|
local timerMoroesEnrage = mod:NewTimer(720, "Frenzy", 351007)
|
|
|
|
-- local lastVanish = 0
|
|
|
|
--Ascension Specific
|
|
local warningDinner = mod:NewSpellAnnounce(85090, 3)
|
|
--local warningFood = mod:NewTargetTimer(30, 85090, "%s");
|
|
|
|
local timerDance = mod:NewTimer(27, L.DBM_MOROES_SOULBURST, 85089);
|
|
local danceType = {[0] = "Circle", [1] = "Star", [2] = "Line"};
|
|
local danceCount = 0;
|
|
|
|
mod:AddBoolOption(L.FoodYell, false)
|
|
mod.vb.warned_preP2 = false
|
|
|
|
function mod:OnCombatStart(delay)
|
|
timerMoroesEnrage:Start(-delay)
|
|
self.vb.warned_preP2 = false
|
|
timerVanish:Start(-delay)
|
|
warningVanishSoon:Schedule(20-delay)
|
|
-- lastVanish = 0
|
|
-- lastDinner = GetTime()
|
|
danceCount = 0;
|
|
mod:DanceTimer(22-delay,true);
|
|
self.vb.phase = 1
|
|
end
|
|
|
|
function mod:DanceTimer(t,noInc)
|
|
danceCount = danceCount + (noInc and 0 or 1);
|
|
timerDance:Start(t,danceType[(danceCount % 3)]);
|
|
self:ScheduleMethod(t,"DanceTimer",28);
|
|
end
|
|
|
|
function mod:SPELL_CAST_START(args)
|
|
if args:IsSpellID(29405) then
|
|
warningManaBurn:Show()
|
|
elseif args:IsSpellID(35096) then
|
|
warningGreaterHeal:Show()
|
|
elseif args:IsSpellID(29562) then
|
|
warningHolyLight:Show()
|
|
elseif args:IsSpellID(29563) then
|
|
warningHFire:Show(args.destName)
|
|
end
|
|
end
|
|
|
|
function mod:SPELL_CAST_SUCCESS(args)
|
|
if args:IsSpellID(15090) then
|
|
warningDispel:Show(args.destName)
|
|
elseif args:IsSpellID(85174) then
|
|
warningPain:Show(args.destName)
|
|
end
|
|
end
|
|
|
|
|
|
local foodData = {
|
|
[85090] = {name = "Apple", yell = "YellApple"}, -- Sweet / Apple
|
|
[85091] = {name = "Wine", yell = "YellWine"}, -- Thirst / Wine
|
|
[85092] = {name = "Oranges", yell = "YellFruit"}, -- Tart / Oranges
|
|
[85093] = {name = "Boar", yell = "YellBoar"}, -- Savory / Boar
|
|
[85094] = {name = "Fish", yell = "YellFish"}, -- Fishy / Fish
|
|
};
|
|
|
|
function mod:YellFood()
|
|
if self.food then
|
|
SendChatMessage(L[self.food.name], "YELL");
|
|
self:ScheduleMethod(2,"YellFood");
|
|
end
|
|
end
|
|
|
|
function mod:SPELL_AURA_APPLIED(args)
|
|
if args:IsSpellID(29448) then
|
|
warningVanish:Show()
|
|
-- lastVanish = GetTime()
|
|
-- elseif args:IsSpellID(29425) then
|
|
-- warningGouge:Show(args.destName)
|
|
-- timerGouge:Show(args.destName)
|
|
elseif args:IsSpellID(34694) then
|
|
warningBlind:Show(args.destName)
|
|
timerBlind:Show(args.destName)
|
|
elseif args:IsSpellID(29382) then
|
|
warningDShield:Show(args.destName)
|
|
elseif args:IsSpellID(13005) then
|
|
warningHoJ:Show(args.destName)
|
|
elseif args:IsSpellID(29390) then
|
|
warningWall:Show(args.destName)
|
|
elseif args:IsSpellID(29572) then
|
|
warningMortalStrike:Show(args.destName)
|
|
timerMortalStrike:Show(args.destName)
|
|
elseif args:IsSpellID(85217) then
|
|
warningPWS:Show(args.destName)
|
|
elseif args:IsSpellID(37066, 85223, 85224) then -- Garrote has 3 different IDs for 3 difficulties. Why Ascension?
|
|
warningGarrote:Show(args.spellName, args.destName, args.amount or 1)
|
|
-- if (GetTime() - lastVanish) < 20 then
|
|
timerVanish:Start()
|
|
-- warningVanishSoon:Schedule(23)
|
|
-- end
|
|
elseif args:IsSpellID(85089) then -- Soul Burst Debuff
|
|
local elapsed, total = timerDance:GetTime(danceType[(danceCount % 3)]);
|
|
if elapsed > 10 then
|
|
self:UnscheduleMethod("DanceTimer");
|
|
self:DanceTimer(27-2,true);
|
|
end
|
|
elseif foodData[args.spellId] then
|
|
if args.destName and args:IsPlayer() then
|
|
local food = foodData[args.spellId];
|
|
--warningFood:Show(args.destName);
|
|
self.food = food;
|
|
if self.Options.FoodYell then
|
|
self:ScheduleMethod(2,"YellFood");
|
|
end
|
|
if mod:IsDifficulty("heroic25") then
|
|
timerDinner25m:Start()
|
|
else
|
|
timerDinner:Start()
|
|
end
|
|
warningDinner:Show()
|
|
self.vb.phase = 2
|
|
end
|
|
end
|
|
end
|
|
|
|
function mod:SPELL_AURA_APPLIED_DOSE(args)
|
|
if args:IsSpellID(37066, 85223, 85224) then
|
|
warningGarrote:Show(args.spellName, args.destName, args.amount or 1)
|
|
-- if (GetTime() - lastVanish) < 20 then
|
|
timerVanish:Start()
|
|
-- end
|
|
end
|
|
end
|
|
|
|
function mod:CHAT_MSG_MONSTER_YELL(msg)
|
|
if msg == L.DBM_MOROES_DINNER then
|
|
if mod:IsDifficulty("heroic25") then
|
|
timerDinner25m:Start()
|
|
else
|
|
timerDinner:Start()
|
|
end
|
|
specWarnDinner:Show()
|
|
end
|
|
end
|
|
|
|
|
|
function mod:SPELL_AURA_REMOVED(args)
|
|
if args:IsSpellID(34694) then
|
|
timerBlind:Cancel(args.destName)
|
|
elseif foodData[args.spellId] then
|
|
if args.destName and args:IsPlayer() then
|
|
local food = foodData[args.spellId];
|
|
--warningFood:Cancel(args.destName);
|
|
self.food = nil;
|
|
self:UnscheduleMethod("YellFood");
|
|
end
|
|
end
|
|
end
|
|
|
|
function mod:UNIT_HEALTH(uId)
|
|
if not self.vb.warned_preP2 and self:GetUnitCreatureId(uId) == 15687 and UnitHealth(uId) / UnitHealthMax(uId) <= 0.80 then
|
|
self.vb.warned_preP2 = true
|
|
warnPhase2Soon:Show()
|
|
end
|
|
end
|
|
|
|
-----DBM GLOBAL FUNCTIONS-----
|
|
function mod:OnCombatEnd(wipe)
|
|
self.food = nil;
|
|
self:Stop();
|
|
end |