Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Karazhan v2 #387

Merged
merged 8 commits into from
Jan 30, 2025
26 changes: 25 additions & 1 deletion DBM-Party-Vanilla/Classic/SOD_KarazhanCrypts/CreepingMalison.lua
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,31 @@ mod:SetZone(2875)

mod:RegisterCombat("combat")

-- The GTFO warning uses in combat events on purpose despite the fire staying around after the fight.
-- The warning is just annoying if you are looking for the Relics after the fight.
mod:RegisterEventsInCombat(
"SPELL_PERIODIC_DAMAGE 1222097",
"SPELL_PERIODIC_MISSED 1222097",
"SPELL_AURA_APPLIED 1222097"
)

-- This fight was completely free, just tank and spank. Adds might be annoying if you don't have a Shaman tank?
-- This fight was completely free, just tank and spank.
-- Without a Shaman tank you should probably burn the eggs to avoid adds, that creates some fire on the floor to watch out for.

local specWarnGTFO = mod:NewSpecialWarningGTFO(1222097, nil, nil, nil, 1, 8)

function mod:SPELL_PERIODIC_DAMAGE(_, _, _, _, destGUID, _, _, _, spellId, spellName)
if spellId == 1222097 and destGUID == UnitGUID("player") and self:AntiSpam(3.5, "gtfo") then
specWarnGTFO:Show(spellName)
specWarnGTFO:Play("watchfeet")
end
end
mod.SPELL_PERIODIC_MISSED = mod.SPELL_PERIODIC_DAMAGE

function mod:SPELL_AURA_APPLIED(args)
if args:IsSpellID(1222097) and args:IsPlayer() and self:AntiSpam(3.5, "gtfo") then
specWarnGTFO:Show(args.spellName)
specWarnGTFO:Play("watchfeet")
end
end

20 changes: 0 additions & 20 deletions DBM-Party-Vanilla/Classic/SOD_KarazhanCrypts/Criminal.lua

This file was deleted.

48 changes: 45 additions & 3 deletions DBM-Party-Vanilla/Classic/SOD_KarazhanCrypts/DarkRider.lua
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,53 @@ mod:SetZone(2875)
mod:RegisterCombat("combat")

mod:RegisterEventsInCombat(
"UNIT_HEALTH",
"SWING_DAMAGE"
)

-- My pug failed at Kharon, so I don't have logs yet for a good initial version. Might make some guesses based on warcraftlogs and videos later.
-- Grab Torch
-- Two spell IDs, 1220904 and 1220905, casts on torch bearer first then on no target. Only has UCS.
-- Trigger seems aligned with phase changes, so no warning.

-- I didn't understand the Torment's Illusion mechanic, it's some kind of mirror image that only you can see that you need to kill.
-- But it spawning doesn't really show up in the log, and nothing really happens if you just ignore it?
-- The only way to detect it seems to be getting hit by it?

-- There is likely a way to get a combat start timer, but the triggering yell seems inconsistent between first pull and later pulls.
-- And the fight doesn't really start, it's just him spawning. Might revisit.

local warnPhase2Soon = mod:NewPrePhaseAnnounce(2)

local specWarnIllusion = mod:NewSpecialWarningTargetChange(1220912, nil, nil, nil, 1, 2)

local warnedPhase1, warnedPhase2, warnedPhase3

function mod:OnCombatStart()
self:AddMsg("This DBM mod is a placeholder for new content, there are no timers or warnings yet.")
self:AddMsg("If you see this message well after the new content release consider updating the DBM Dungeon module to the latest version.")
warnedPhase1, warnedPhase2, warnedPhase3 = false, false, false
end

function mod:UNIT_HEALTH(uId)
if self:GetUnitCreatureId(uId) ~= 238055 then
return
end
local hp = UnitHealth(uId) / UnitHealthMax(uId)
if not warnedPhase1 and hp >= 0.76 and hp <= 0.80 then
warnedPhase1 = true
warnPhase2Soon:Show()
end
if not warnedPhase2 and hp >= 0.51 and hp <= 0.55 then
warnedPhase2 = true
warnPhase2Soon:Show()
end
if not warnedPhase3 and hp >= 0.26 and hp <= 0.30 then
warnedPhase2 = true
warnPhase2Soon:Show()
end
end

function mod:SWING_DAMAGE(srcGuid, _, _, _, destGuid)
if srcGuid == UnitGUID("player") and self:GetCIDFromGUID(destGuid) == 238443 and self:AntiSpam(15, "AttackGhost") then
specWarnIllusion:Show(L.Ghost)
specWarnIllusion:Play("targetchange")
end
end
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ mod:SetZone(2875)
mod:RegisterCombat("combat")

mod:RegisterEventsInCombat(
"SPELL_CAST_START 1219420"
"SPELL_CAST_START 1219420 1219387"
)

-- Pull of the damned --> run out until he casts inferno
Expand All @@ -26,6 +26,9 @@ local pullTimer = mod:NewVarTimer("v45-48.6", 1219420)

local specWarnInferno = mod:NewSpecialWarningRun(1220927, nil, nil, nil, 4, 2)

-- Flame thingy to dodge, generic "soon" announce because the actual damaging spell triggers way after the cast of this is done
local warnFlameWhirl = mod:NewSoonAnnounce(1219387)

function mod:OnCombatStart(delay)
enrageTimer:Start()
pullTimer:Start(33.5) -- TODO: validate this
Expand All @@ -36,6 +39,9 @@ function mod:SPELL_CAST_START(args)
infernoTimer:Start()
specWarnInferno:Show()
specWarnInferno:Play("justrun")
specWarnInferno:ScheduleVoice(18.1, "safenow") -- 100ms before it's actually safe, should be fine with time to play the audio
pullTimer:Start()
elseif args:IsSpell(1219387) then
warnFlameWhirl:Show()
end
end
17 changes: 12 additions & 5 deletions DBM-Party-Vanilla/Classic/SOD_KarazhanCrypts/KCTrash.lua
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,9 @@ mod.isTrashMod = true
mod.isTrashModBossFightAllowed = true

mod:RegisterEvents(
"SPELL_PERIODIC_DAMAGE 17742",
"SPELL_PERIODIC_MISSED 17742",
"SPELL_AURA_APPLIED 17742"
"SPELL_PERIODIC_DAMAGE 17742 1222939",
"SPELL_PERIODIC_MISSED 17742 1222939",
"SPELL_AURA_APPLIED 17742 1222939"
)

-- Notable Trash abilities
Expand All @@ -26,19 +26,26 @@ mod:RegisterEvents(
-- "<118.43 16:16:05> [CLEU] SPELL_AURA_APPLIED#Creature-0-5209-2875-4757-239725-00001A4631#[DNT] Disease Summon#Player-5827-0272A77A#Tandanu#17742#Cloud of Disease#DEBUFF#nil#nil#nil#nil#nil",
-- "<119.43 16:16:06> [CLEU] SPELL_PERIODIC_DAMAGE#Creature-0-5209-2875-4757-239725-00001A4631#[DNT] Disease Summon#Player-5827-0272A77A#Tandanu#17742#Cloud of Disease",

-- Fiery Remnant
-- Fire on ground, don't stand in it. It's cast by the player themselves, lol.
-- "<164.22 19:50:39> [CLEU] SPELL_AURA_APPLIED##nil#Player-5827-01CD3776#Xiga#1222939#Fiery Remnant#DEBUFF#nil#nil#nil#nil#nil",
-- "<164.22 19:50:39> [UNIT_SPELLCAST_SUCCEEDED] PLAYER_SPELL{Xiga} -Fiery Remnant- [[party2:Cast-3-5252-2875-24589-1222939-00029BC9FF:1222939]]",
-- "<164.71 19:50:40> [CLEU] SPELL_PERIODIC_DAMAGE##nil#Player-5827-01CD3776#Xiga#1222939#Fiery Remnant",


-- Can't use the "block" here because it's not yet in Core. Maybe time to merge.
local specWarnGTFO = mod:NewSpecialWarningGTFO(17742, nil, nil, nil, 1, 8)

function mod:SPELL_PERIODIC_DAMAGE(_, _, _, _, destGUID, _, _, _, spellId, spellName)
if spellId == 17742 and destGUID == UnitGUID("player") and self:AntiSpam(3.5, "gtfo") then
if (spellId == 17742 or spellId == 1222939) and destGUID == UnitGUID("player") and self:AntiSpam(3.5, "gtfo") then
specWarnGTFO:Show(spellName)
specWarnGTFO:Play("watchfeet")
end
end
mod.SPELL_PERIODIC_MISSED = mod.SPELL_PERIODIC_DAMAGE

function mod:SPELL_AURA_APPLIED(args)
if args:IsSpellID(17742) and args:IsPlayer() and self:AntiSpam(3.5, "gtfo") then
if args:IsSpellID(17742, 1222939) and args:IsPlayer() and self:AntiSpam(3.5, "gtfo") then
specWarnGTFO:Show(args.spellName)
specWarnGTFO:Play("watchfeet")
end
Expand Down
56 changes: 42 additions & 14 deletions DBM-Party-Vanilla/Classic/SOD_KarazhanCrypts/Kharon.lua
Original file line number Diff line number Diff line change
Expand Up @@ -11,16 +11,17 @@ mod:RegisterCombat("combat")

mod:RegisterEventsInCombat(
"SPELL_CAST_START 1217694",
"SPELL_AURA_APPLIED 1218038",
"SPELL_AURA_REMOVED 1218038",
"SPELL_AURA_APPLIED 1218038 1218089",
"SPELL_AURA_REMOVED 1218038 1218089",
"SPELL_AURA_APPLIED_DOSE 1217844"
)

mod:SetUsedIcons(5)
mod:SetUsedIcons(7, 8)

-- Mind Control
-- I didn't understand that mechanic, it's a 2 min debuff that can't be purged, but it somehow disappears earlier, not sure what triggers that.
-- Kill mind controlled player, 2 sec cast, but just triggering on aura applied because the cast isn't actionable
-- "Illimitable Dominion-1218089-npc:237439-00001A5C02 = pull:42.5, 86.2, 80.5, 80.9",
-- "Illimitable Dominion-1218089-npc:237439-00001BDBFD = pull:40.1, 82.5, 77.7",

-- Red Death
-- Move away from boss
Expand All @@ -41,20 +42,27 @@ mod:SetUsedIcons(5)

local warnWrap = mod:NewSpecialWarningTargetChange(1218038, nil, nil, nil, 1, 2)
local warnPlayerStacks = mod:NewStackAnnounce(1217844, 2)
local warnMc = mod:NewTargetNoFilterAnnounce(1218089)

local timerRedDeath = mod:NewNextTimer(30.7, 1217694)
local timerWrap = mod:NewVarTimer("v64.8-73.3", 1218038, nil, nil, nil, 3)
local timerNextStack = mod:NewTargetCountTimer(5, 1217844)
local timerMc = mod:NewVarTimer("v77.5-86.2", 1218089)

-- Enabled even for ranged because everyone is stacking near to the torch bearer
local specWarnRedDeath = mod:NewSpecialWarningMove(1217694, nil, nil, nil, 1, 2)
local specWarnDropTorch = mod:NewSpecialWarning("SpecWarnDropTorch", nil, nil, nil, 1, 6)
local specWarnDropTorch = mod:NewSpecialWarning("SpecWarnDropTorch", nil, nil, nil, 1, 18)

local yellWrap = mod:NewIconTargetYell(1218038)
local yellWrap = mod:NewIconTargetYell(1218038)
local yellMc = mod:NewIconTargetYell(1218089)

mod:AddSetIconOption("SetIconOnWrapTarget", 1218038, true, 0, {8})
mod:AddSetIconOption("SetIconOnMindControlTarget", 1218089, true, 0, {7})

function mod:OnCombatStart(delay)
timerRedDeath:Start(21.1 - delay) -- Consistent across 5 logs
timerWrap:Start(35.8 - delay) -- Also consistent
timerMc:Start("v42-45")
end

function mod:SPELL_CAST_START(args)
Expand All @@ -65,32 +73,52 @@ function mod:SPELL_CAST_START(args)
end
end

function mod:YellLoop(maxCount)
function mod:YellLoop(yell, icon, maxCount)
maxCount = maxCount - 1
yellWrap:Show(5)
yell:Show(icon)
if maxCount > 0 then
self:ScheduleMethod(2, "YellLoop", maxCount)
self:ScheduleMethod(3, "YellLoop", yell, icon, maxCount)
end
end

function mod:SPELL_AURA_APPLIED(args)
if args:IsSpell(1218038) then
if args:IsPlayer() then
self:YellLoop(8)
self:YellLoop(yellWrap, 7, 6)
else
warnWrap:Show(args.destName)
warnWrap:Play("targetchange")
end
timerWrap:Start()
self:SetIcon(args.destName, 5)
if self.Options.SetIconOnWrapTarget then
self:SetIcon(args.destName, 5)
end
elseif args:IsSpell(1218089) then
if args:IsPlayer() then
self:YellLoop(yellMc, 8, 6)
end
timerMc:Start()
warnMc:Show(args.destName)
if self.Options.SetIconOnMindControlTarget then
self:SetIcon(args.destName, 8)
end
end
end

function mod:SPELL_AURA_REMOVED(args)
if args:IsSpell(1218038) then
self:RemoveIcon(args.destName)
if self.Options.SetIconOnWrapTarget then
self:RemoveIcon(args.destName)
end
if args:IsPlayer() then
self:UnscheduleMethod("YellLoop", yellWrap)
end
elseif args:IsSpell(1218089) then
if self.Options.SetIconOnMindControlTarget then
self:RemoveIcon(args.destName)
end
if args:IsPlayer() then
self:UnscheduleMethod("YellLoop")
self:UnscheduleMethod("YellLoop", yellMc)
end
end
end
Expand All @@ -103,7 +131,7 @@ function mod:SPELL_AURA_APPLIED_DOSE(args)
if args:IsPlayer() then
if amount == 10 or amount == 15 or amount == 20 then -- If you have more than 20 then you better have some strategy for that, like fire res, dunno.
specWarnDropTorch:Show(amount)
specWarnDropTorch:Play("stackhigh") -- TODO: replace with "droptorch" once new Core is out
specWarnDropTorch:Play("droptorch")
end
else
if amount % 5 == 0 then
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,19 +10,50 @@ mod:SetZone(2875)
mod:RegisterCombat("combat")

mod:RegisterEvents(
"CHAT_MSG_MONSTER_YELL"
"CHAT_MSG_MONSTER_YELL",
"UNIT_SPELLCAST_SUCCEEDED"
)

-- I guess there could be different bosses, let's see
-- "<535.07 16:50:23> [CHAT_MSG_MONSTER_YELL] Our woodland creatures find themselves constantly assailed by a vicious quilboar, Trizivast! This barbaric beast will stop at nothing to rid his realm of these small wolves.\13\ (...) (wtf, there's a \r in the message...?)
-- "<545.95 16:50:34> [ENCOUNTER_START] 3144#Opera of Malediction#1#5",
-- "<545.95 16:50:34> [CLEU] SPELL_DAMAGE#Player-5827-02484403#Ðjs#Creature-0-5209-2875-4757-238428-00001A4E3B#Trizivast#29228#Flame Shock",
-- A different boss every day

-- Trizivast
-- The boss itself didn't really do anything, tank & spank, didn't even notice that that was already the boss.
-- Pull timer:
-- "<515.62 16:50:03> [CHAT_MSG_MONSTER_YELL] Good evening ladies and gentlemen! Welcome to tonights presentation!#Edgar###Onlyveins##0#0##0#4823#nil#0#false#false#false#false",
-- "<528.58 16:50:16> [CHAT_MSG_MONSTER_YELL] For your evenings entertainment, comes a brave tale of survival, loss, and conviction.#Edgar###Onlyveins##0#0##0#4833#nil#0#false#false#false#false",
-- "<535.07 16:50:23> [CHAT_MSG_MONSTER_YELL] Our woodland creatures find themselves constantly assailed by a vicious quilboar, Trizivast! This barbaric beast will stop at nothing to rid his realm of these small wolves.\13\ (\13 == \r, kek)
-- "<545.95 16:50:34> [ENCOUNTER_START] 3144#Opera of Malediction#1#5",
-- "<545.95 16:50:34> [CLEU] SPELL_DAMAGE#Player-5827-02484403#Ðjs#Creature-0-5209-2875-4757-238428-00001A4E3B#Trizivast#29228#Flame Shock",

-- Hänsel and Gretel
-- Two bosses that didn't really do anything, tank and spank.
-- "<7.72 20:22:17> [CHAT_MSG_MONSTER_YELL] Good evening ladies and gentlemen! Welcome to tonights presentation!#Edgar###Tandanu##0#0##0#2480#nil#0#false#false#false#false",
-- "<20.73 20:22:30> [CHAT_MSG_MONSTER_YELL] For your evenings entertainment, comes the lost fable of two children attempting to find their way!#Edgar###Tandanu##0#0##0#2489#nil#0#false#false#false#false",
-- "<60.10 20:23:09> [CLEU] SPELL_DAMAGE#Player-5827-01CD3776#Xiga#Creature-0-5252-2875-24589-238424-00001BD175#Grandma Finette#424919#Main Gauche",
-- This is not yet the actual boss, encounter doesn't start yet. Bring that mob down to ~20% to trigger fight.
-- "<64.21 20:23:13> [UNIT_SPELLCAST_SUCCEEDED] Grandma Finette(18.9%-0.0%){Target:Xiga} -Transformation- [[target:Cast-3-5252-2875-24589-1222280-00089BD1A0:1222280]]",
-- "<65.69 20:23:14> [CHAT_MSG_MONSTER_YELL] We're sorry grandmother. Your time has expired.#Hans###Hunterlogic##0#0##0#2519#nil#0#false#false#false#false",
-- "<65.69 20:23:14> [CHAT_MSG_MONSTER_YELL] We're sorry grandmother. Your time has expired.#Greta###Hunterlogic##0#0##0#2520#nil#0#false#false#false#false",
-- "<76.80 20:23:26> [ENCOUNTER_START] 3168#Opera of Malediction#1#5",
-- "<78.49 20:23:27> [NAME_PLATE_UNIT_ADDED] Greta#Creature-0-5252-2875-24589-238423-00001BD175",


local timerCombatStart = mod:NewCombatTimer(10)

function mod:CHAT_MSG_MONSTER_YELL(msg)
if msg:match(L.PullTrizivast) then
timerCombatStart:Start()
timerCombatStart:Start(17.37)
elseif msg:match(L.PullHanselAndGretel1) then
timerCombatStart:Start(39.37)
elseif msg:match(L.PullHanselAndGretel2) then
if not timerCombatStart:IsStarted() then
timerCombatStart:Start(12.8)
end
end
end

function mod:UNIT_SPELLCAST_SUCCEEDED(_, _, spellId)
if spellId == 1222280 then
timerCombatStart:Start(14.28)
end
end
Loading