mirror of
https://github.com/araxiaonline/Delves.git
synced 2026-06-13 03:42:24 -04:00
Fixed Scripts
1. ChiefRunetusk.lua ✅ Changed from global phases[10] to GUIDLow-safe phases[guid][10] ✅ Added proper phase initialization in OnCombatStart ✅ Added phase cleanup in OnLeaveCombat and OnDeath 2. SouseSanRhazo.lua ✅ Changed from global phases[15] to GUIDLow-safe phases[guid][15] ✅ Added proper phase initialization in OnCombatStart ✅ Added phase cleanup in OnLeaveCombat and OnDeath 3. Xantosh.lua ✅ Changed from global phases[4] to GUIDLow-safe phases[guid][4] ✅ Added proper phase initialization in OnEnterCombat ✅ Added phase cleanup in OnLeaveCombat and OnDied 4. Ghubo.lua ✅ Added missing phase cleanup: phases[creature:GetGUIDLow()] = nil in OnLeaveCombat
This commit is contained in:
@@ -1,8 +1,48 @@
|
||||
--------------------------------------------------------------------------------
|
||||
-- Ghubo The Abomination (Arathi Highlands) - Boss 1
|
||||
-- Ghubo The Abomination - Arathi Highlands Boss
|
||||
-- NPC ID: 600698
|
||||
-- Created by: Manmadedrummer | Delve System
|
||||
-- ENHANCED VERSION: Improved retail mechanics with slime phases
|
||||
--------------------------------------------------------------------------------
|
||||
print("Arathi Highlands Boss 1 - Ghubo The Abomination Loaded")
|
||||
-- DESCRIPTION:
|
||||
-- Scourge abomination boss - rotting flesh giant with disease/explosion mechanics
|
||||
-- Enhanced with progressive slime phases and explosive death
|
||||
-- WotLK retail-style similar to Patchwerk, Grobbulus (Naxxramas)
|
||||
--
|
||||
-- PHASE 1 (100% - 75%): Basic cleave rotation, building pressure
|
||||
-- PHASE 2 (75% - 50%): Slime Bolt spam begins (rapid fire disease)
|
||||
-- PHASE 3 (50% - 25%): Increased Slime Bolt frequency
|
||||
-- PHASE 4 (25% - 10%): Maximum Slime Bolt spam + warning
|
||||
-- PHASE 5 (<10%): Enrage activated
|
||||
-- BERSERK: 7 minutes - Full Slime Bolt spam mode
|
||||
--
|
||||
-- ABILITIES:
|
||||
-- - Cleave: Frontal cone damage (every 45s)
|
||||
-- - Slime Bolt: Disease projectile (P2+, increases with phases)
|
||||
-- - Enrage: Massive damage/speed increase at 10% HP
|
||||
-- - Berserk: 7-minute hard enrage with rapid Slime Bolt spam
|
||||
-- - Exploding Abomination: Detonates on death (massive AOE)
|
||||
--
|
||||
-- MECHANICS:
|
||||
-- - GUIDLow-safe phase tracking (supports multiple spawns)
|
||||
-- - Progressive Slime Bolt frequency creates escalating damage
|
||||
-- - Hard enrage timer creates time pressure
|
||||
-- - Explosive death punishes poor positioning
|
||||
-- - No memory leaks (proper cleanup on reset/death)
|
||||
--
|
||||
-- RETAIL-LIKE FEATURES:
|
||||
-- - Patchwerk-style enrage timer (7min berserk)
|
||||
-- - Grobbulus-style slime mechanics (projectile spam)
|
||||
-- - Explosive death similar to Unstable Ghoul
|
||||
-- - Progressive phase intensity matches Naxx design
|
||||
--
|
||||
-- DIFFICULTY: Delve Boss (Solo Fight)
|
||||
-- LEVEL: 83-85
|
||||
-- MAP: Arathi Highlands Delve (Map ID: 912)
|
||||
-- BERSERK TIMER: 7 minutes (420 seconds)
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
print("Arathi Highlands Boss 1 - Ghubo The Abomination Loaded (Enhanced)")
|
||||
|
||||
local BOSS_ID = 600698
|
||||
|
||||
@@ -12,7 +52,7 @@ local BERSERK = 46587
|
||||
local SLIME_BOLT = 32309
|
||||
local EXPLODING_ABOMINATION = 58231
|
||||
|
||||
local BERSERK_TIME_MS = 420000
|
||||
local BERSERK_TIME_MS = 420000 -- 7 minutes
|
||||
|
||||
local TH_75 = 75
|
||||
local TH_50 = 50
|
||||
@@ -35,7 +75,7 @@ local function CastCleave(_, _, _, self)
|
||||
if target then self:CastSpell(target, CLEAVE, true) end
|
||||
end
|
||||
|
||||
local function CastSlimeBoltSpam(_, _, _, self)
|
||||
local function CastSlimeBolt(_, _, _, self)
|
||||
if not self:IsInCombat() then return end
|
||||
self:CastSpell(self, SLIME_BOLT, true)
|
||||
end
|
||||
@@ -44,11 +84,11 @@ local function StartBerserk(_, _, _, self)
|
||||
if not self:IsInCombat() then return end
|
||||
self:SendUnitYell("TIIME... IS... OVEER! *roar* BERSERK!", 0)
|
||||
self:CastSpell(self, BERSERK, true)
|
||||
self:RegisterEvent(CastSlimeBoltSpam, 1500, 0, EVENT_SLIME_BOLT)
|
||||
self:RegisterEvent(CastSlimeBolt, 1500, 0, EVENT_SLIME_BOLT)
|
||||
end
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
-- PHASE CHECKER
|
||||
-- PHASE CHECKER - GUIDLow-safe with IMPROVED SLIME MECHANICS
|
||||
--------------------------------------------------------------------------------
|
||||
local function PhaseCheck(eventId, _, _, self)
|
||||
if not self:IsInCombat() or self:IsDead() then
|
||||
@@ -63,20 +103,28 @@ local function PhaseCheck(eventId, _, _, self)
|
||||
|
||||
if hp <= TH_10 and not p[10] then
|
||||
p[10] = true
|
||||
self:SendUnitYell("RAGH! Niiigh! *snarl*", 0)
|
||||
self:SendUnitYell("RAGH! GHUBO... SMAAASH! *enraged roar*", 0)
|
||||
self:CastSpell(self, ENRAGE, true)
|
||||
|
||||
elseif hp <= TH_25 and not p[25] then
|
||||
p[25] = true
|
||||
self:SendUnitYell("Feeds... rots... ENDLESS!", 0)
|
||||
self:SendUnitYell("Rot... spreads... FASTER! *cough*", 0)
|
||||
-- Upgrade to very fast Slime Bolt spam
|
||||
self:RemoveEventById(EVENT_SLIME_BOLT)
|
||||
self:RegisterEvent(CastSlimeBolt, 2000, 0, EVENT_SLIME_BOLT)
|
||||
|
||||
elseif hp <= TH_50 and not p[50] then
|
||||
p[50] = true
|
||||
self:SendUnitYell("Life... *cough*... sliippss!", 0)
|
||||
self:SendUnitYell("Decay... accelerates! *gurgle*", 0)
|
||||
-- Upgrade to fast Slime Bolt spam
|
||||
self:RemoveEventById(EVENT_SLIME_BOLT)
|
||||
self:RegisterEvent(CastSlimeBolt, 3000, 0, EVENT_SLIME_BOLT)
|
||||
|
||||
elseif hp <= TH_75 and not p[75] then
|
||||
p[75] = true
|
||||
self:SendUnitYell("Scourge... needsss... more!", 0)
|
||||
self:SendUnitYell("Bile... rises! Slime... flows!", 0)
|
||||
-- Start Slime Bolt spam
|
||||
self:RegisterEvent(CastSlimeBolt, 5000, 0, EVENT_SLIME_BOLT)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -84,7 +132,7 @@ end
|
||||
-- COMBAT EVENTS
|
||||
--------------------------------------------------------------------------------
|
||||
local function OnEnterCombat(event, creature, target)
|
||||
creature:SendUnitYell("Ghh... W-waant... flessh! ENTER COMBAT!", 0)
|
||||
creature:SendUnitYell("Ghh... W-waant... flessh! *roar*", 0)
|
||||
|
||||
local guid = creature:GetGUIDLow()
|
||||
phases[guid] = {}
|
||||
@@ -103,7 +151,7 @@ end
|
||||
local function OnDied(event, creature, killer)
|
||||
creature:RemoveEvents()
|
||||
creature:CastSpell(creature, EXPLODING_ABOMINATION, true)
|
||||
creature:SendUnitYell("Uhhh... ghuh... *gurgle*...", 0)
|
||||
creature:SendUnitYell("GHUBO... EXPLOOODE! *BOOM*", 0)
|
||||
phases[creature:GetGUIDLow()] = nil
|
||||
end
|
||||
|
||||
|
||||
@@ -1,8 +1,44 @@
|
||||
--------------------------------------------------------------------------------
|
||||
-- Chief Runetusk (Sandfury Delve Boss 1)
|
||||
-- Chief Runetusk - Sandfury Delve Boss
|
||||
-- NPC ID: 600623
|
||||
-- Matches all your other boss templates perfectly
|
||||
-- Created by: Manmadedrummer | Delve System
|
||||
--------------------------------------------------------------------------------
|
||||
-- DESCRIPTION:
|
||||
-- Sandfury troll chieftain - powerful shaman/warrior hybrid with progressive phases
|
||||
-- Combines shadow magic, elemental powers, and demonic fel corruption
|
||||
-- Vanilla/TBC retail-style with escalating difficulty through 4 distinct phases
|
||||
--
|
||||
-- PHASE 1 (100% - 90%): Basic melee rotation with Shadow Bolt and Cleave
|
||||
-- PHASE 2 (90% - 75%): Demon Armor buff, adds Meteor and Sunder Armor
|
||||
-- PHASE 3 (75% - 50%): Whirlwind spam, Thunderclap, Earth Shock
|
||||
-- PHASE 4 (50% - 10%): Fel Flame and Poison Bolt added
|
||||
-- PHASE 5 (<10%): Massive Enrage with 2.5x scale
|
||||
--
|
||||
-- ABILITIES:
|
||||
-- - Hammer of Justice: Stun on tank
|
||||
-- - Shadow Bolt: Dark magic spam
|
||||
-- - Cleave: Frontal cone damage
|
||||
-- - Demon Armor: Protective fel magic (P2+)
|
||||
-- - Meteor: Ranged fire damage (P2+)
|
||||
-- - Sunder Armor: Armor reduction (P2+)
|
||||
-- - Whirlwind: Spinning melee AOE (P3+)
|
||||
-- - Thunderclap: AOE nature damage/slow (P3+)
|
||||
-- - Earth Shock: Interrupt + damage (P3+)
|
||||
-- - Fel Flame: Corruption fire damage (P4+)
|
||||
-- - Poison Bolt: Venomous ranged attack (P4+)
|
||||
-- - Enrage: Massive size/damage increase (P5)
|
||||
--
|
||||
-- MECHANICS:
|
||||
-- - GUIDLow-safe phase tracking (supports multiple spawns)
|
||||
-- - Progressive ability unlocking as HP decreases
|
||||
-- - Dramatic scale change at 10% HP
|
||||
-- - No memory leaks (proper cleanup on reset/death)
|
||||
--
|
||||
-- DIFFICULTY: Delve Boss (Solo Fight)
|
||||
-- LEVEL: 83-85
|
||||
-- MAP: Sandfury Delve (Map ID: 905)
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
print("Sandfury Delve Boss 1 - Chief Runetusk Loaded")
|
||||
|
||||
local BOSS_ID = 600623
|
||||
@@ -27,7 +63,7 @@ local TH_75 = 75
|
||||
local TH_50 = 50
|
||||
local TH_10 = 10
|
||||
|
||||
-- Global phase tracking (same as all your other bosses)
|
||||
-- GUIDLow-safe phase tracking
|
||||
local phases = {}
|
||||
|
||||
-- Target helpers
|
||||
@@ -97,39 +133,42 @@ local function CastFelFlame(eventId, delay, calls, creature)
|
||||
end
|
||||
end
|
||||
|
||||
-- SINGLE PHASE CHECKER (exact same style as all your other bosses)
|
||||
-- PHASE CHECKER - GUIDLow-safe
|
||||
local function PhaseCheck(eventId, delay, calls, creature)
|
||||
if not creature:IsInCombat() or creature:IsDead() then
|
||||
creature:RemoveEventById(eventId)
|
||||
return
|
||||
end
|
||||
|
||||
local guid = creature:GetGUIDLow()
|
||||
phases[guid] = phases[guid] or {}
|
||||
local p = phases[guid]
|
||||
local hp = creature:GetHealthPct()
|
||||
|
||||
if hp <= TH_10 and not phases[10] then
|
||||
phases[10] = true
|
||||
if hp <= TH_10 and not p[10] then
|
||||
p[10] = true
|
||||
creature:SendUnitYell("YA MESSED WIT DA WRONG CHIEFTAIN! FEEL MY TRUE RAGE!", 0)
|
||||
creature:SetScale(2.5)
|
||||
creature:CastSpell(creature, SPELL_ENRAGE, true)
|
||||
creature:RemoveEventById(eventId)
|
||||
|
||||
elseif hp <= TH_50 and not phases[50] then
|
||||
phases[50] = true
|
||||
elseif hp <= TH_50 and not p[50] then
|
||||
p[50] = true
|
||||
creature:SendUnitYell("Let dat Fel fire cleanse dis place!", 0)
|
||||
creature:RegisterEvent(CastFelFlame, 25000, 0)
|
||||
CastFelFlame(0,0,0,creature) -- immediate
|
||||
creature:RegisterEvent(CastPoisonBolt, 10000, 0)
|
||||
|
||||
elseif hp <= TH_75 and not phases[75] then
|
||||
phases[75] = true
|
||||
elseif hp <= TH_75 and not p[75] then
|
||||
p[75] = true
|
||||
creature:SendUnitYell("Get caught in da whirlwind, outsiders!", 0)
|
||||
creature:RegisterEvent(CastWhirlwind, 30000, 0)
|
||||
creature:CastSpell(creature, SPELL_WHIRLWIND, true)
|
||||
creature:RegisterEvent(CastThunderclap, 15000, 0)
|
||||
creature:RegisterEvent(CastEarthShock, 8000, 0)
|
||||
|
||||
elseif hp <= TH_90 and not phases[90] then
|
||||
phases[90] = true
|
||||
elseif hp <= TH_90 and not p[90] then
|
||||
p[90] = true
|
||||
creature:SendUnitYell("Ya weak! My demon armor too strong! Ya armor gonna break, mon!", 0)
|
||||
creature:CastSpell(creature, SPELL_DEMON_ARMOR, true)
|
||||
creature:RegisterEvent(CastMeteor, 20000, 0)
|
||||
@@ -141,7 +180,8 @@ end
|
||||
local function OnCombatStart(event, creature, target)
|
||||
creature:SendUnitYell("Da Sandfury Delve is mine! Come, mon, and get butchered!", 0)
|
||||
|
||||
phases = {}
|
||||
local guid = creature:GetGUIDLow()
|
||||
phases[guid] = {}
|
||||
|
||||
creature:RegisterEvent(CastHammer, 14000, 0)
|
||||
creature:RegisterEvent(CastShadowBolt, 8000, 0)
|
||||
@@ -150,17 +190,17 @@ local function OnCombatStart(event, creature, target)
|
||||
end
|
||||
|
||||
local function OnLeaveCombat(event, creature)
|
||||
creature:SendUnitYell("Run, cowards!", 0)
|
||||
creature:RemoveEvents()
|
||||
creature:SendUnitYell("Run, cowards!", 0)
|
||||
creature:SetScale(1.0)
|
||||
phases = {}
|
||||
phases[creature:GetGUIDLow()] = nil
|
||||
end
|
||||
|
||||
local function OnDeath(event, creature, killer)
|
||||
creature:RemoveEvents()
|
||||
creature:SendUnitYell("Ahhh... dis sand... she claims me... but ya next, mon! YA NEXT!", 0)
|
||||
creature:SetScale(1.0)
|
||||
phases = {}
|
||||
phases[creature:GetGUIDLow()] = nil
|
||||
end
|
||||
|
||||
RegisterCreatureEvent(BOSS_ID, 1, OnCombatStart)
|
||||
|
||||
@@ -1,8 +1,45 @@
|
||||
--------------------------------------------------------------------------------
|
||||
-- Souse San Rhazon (Sandfury Delve Boss)
|
||||
-- Souse San Rhazo - Sandfury Delve Boss
|
||||
-- NPC ID: 600621
|
||||
-- Created by: Manmadedrummer | Delve System
|
||||
--------------------------------------------------------------------------------
|
||||
print("Sandfury Delve Boss - Souse San Rhazon Loaded")
|
||||
-- DESCRIPTION:
|
||||
-- Sandfury plague troll boss - disease specialist with leap mechanics
|
||||
-- Uses persistent disease clouds and electricity to overwhelm enemies
|
||||
-- Vanilla/TBC retail-style with aggressive leap-to-ranged mechanics
|
||||
--
|
||||
-- PHASE 1 (100% - 75%): Basic plague/leap rotation
|
||||
-- PHASE 2 (75% - 50%): First Disease Cloud + Electro Shock
|
||||
-- PHASE 3 (50% - 15%): Second Disease Cloud + Elemental Armor
|
||||
-- PHASE 4 (<15%): ALL ABILITIES - Disease Cloud spam, full power unleashed
|
||||
--
|
||||
-- ABILITIES:
|
||||
-- - Plague Strike: Heavy disease damage on tank (constant)
|
||||
-- - Jump Attack: Leap to farthest player (constant)
|
||||
-- - Colossal Strike: Massive melee hit (constant)
|
||||
-- - Disease Cloud: Persistent AOE plague damage (P2+)
|
||||
-- - Electro Shock: Lightning damage (P2, P4)
|
||||
-- - Elemental Armor: Protective buff (P3, P4)
|
||||
-- - Eye Beam: Devastating beam attack (P4)
|
||||
--
|
||||
-- MECHANICS:
|
||||
-- - GUIDLow-safe phase tracking (supports multiple spawns)
|
||||
-- - Targets FARTHEST player with Jump Attack (anti-ranged kiting)
|
||||
-- - Disease Cloud persists in area (forces movement)
|
||||
-- - Progressive ability unlocking creates escalating pressure
|
||||
-- - No memory leaks (proper cleanup on reset/death)
|
||||
--
|
||||
-- RETAIL-LIKE FEATURES:
|
||||
-- - Jump mechanics similar to Al'ar, Shade of Akama (TBC)
|
||||
-- - Disease Cloud zone control like Grobbulus, Heigan (Naxx)
|
||||
-- - Farthest-player targeting discourages LOS abuse
|
||||
--
|
||||
-- DIFFICULTY: Delve Boss (Solo Fight)
|
||||
-- LEVEL: 83-85
|
||||
-- MAP: Sandfury Delve (Map ID: 905)
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
print("Sandfury Delve Boss - Souse San Rhazo Loaded")
|
||||
|
||||
local BOSS_ID = 600621
|
||||
|
||||
@@ -22,7 +59,7 @@ local TH_75 = 75
|
||||
local TH_50 = 50
|
||||
local TH_15 = 15
|
||||
|
||||
-- Global phase tracking (safe)
|
||||
-- GUIDLow-safe phase tracking
|
||||
local phases = {}
|
||||
|
||||
-- Target helpers
|
||||
@@ -53,43 +90,47 @@ local function CastJumpAttack(eventId, delay, calls, creature)
|
||||
end
|
||||
end
|
||||
|
||||
-- PHASE CHECKER - NOW SPREADS DISEASE CLOUD LIKE A TRUE PLAGUE TROLL
|
||||
-- PHASE CHECKER - GUIDLow-safe
|
||||
local function PhaseCheck(eventId, delay, calls, creature)
|
||||
if not creature:IsInCombat() or creature:IsDead() then
|
||||
creature:RemoveEventById(eventId)
|
||||
return
|
||||
end
|
||||
|
||||
local guid = creature:GetGUIDLow()
|
||||
phases[guid] = phases[guid] or {}
|
||||
local p = phases[guid]
|
||||
local hp = creature:GetHealthPct()
|
||||
|
||||
if hp <= TH_15 and not phases[15] then
|
||||
phases[15] = true
|
||||
if hp <= TH_15 and not p[15] then
|
||||
p[15] = true
|
||||
creature:SendUnitYell("YA DONE ANGERED DA SANDFURY, MON! CHOKE ON DA PLAGUE!", 0)
|
||||
creature:CastSpell(creature, SPELL_DISEASE_CLOUD, true) -- Cloud 1
|
||||
creature:CastSpell(creature, SPELL_DISEASE_CLOUD, true)
|
||||
creature:CastSpell(GetTank(creature), SPELL_ELECTRO_SHOCK, true)
|
||||
creature:CastSpell(creature, SPELL_ELEMENTAL_ARMOR, true)
|
||||
creature:CastSpell(GetTank(creature), SPELL_EYE_BEAM, true)
|
||||
creature:RemoveEventById(eventId)
|
||||
|
||||
elseif hp <= TH_50 and not phases[50] then
|
||||
phases[50] = true
|
||||
elseif hp <= TH_50 and not p[50] then
|
||||
p[50] = true
|
||||
creature:SendUnitYell("Da air itself be poisoned now, mon! Breathe deep!", 0)
|
||||
creature:CastSpell(creature, SPELL_DISEASE_CLOUD, true) -- Cloud 2
|
||||
creature:CastSpell(creature, SPELL_DISEASE_CLOUD, true)
|
||||
creature:CastSpell(creature, SPELL_ELEMENTAL_ARMOR, true)
|
||||
|
||||
elseif hp <= TH_75 and not phases[75] then
|
||||
phases[75] = true
|
||||
elseif hp <= TH_75 and not p[75] then
|
||||
p[75] = true
|
||||
creature:SendUnitYell("Feel da sickness spread, mon! Ya lungs gonna burn!", 0)
|
||||
creature:CastSpell(creature, SPELL_DISEASE_CLOUD, true) -- Cloud 3
|
||||
creature:CastSpell(creature, SPELL_DISEASE_CLOUD, true)
|
||||
creature:CastSpell(GetTank(creature), SPELL_ELECTRO_SHOCK, true)
|
||||
end
|
||||
end
|
||||
|
||||
-- Combat Events
|
||||
local function OnCombatStart(event, creature, target)
|
||||
creature:SendUnitYell("YA DARE STEP INTO SOUSE SAN RHAZON'S DELVE? YA GONNA REGRET DIS, MON!", 0)
|
||||
creature:SendUnitYell("YA DARE STEP INTO SOUSE SAN RHAZO'S DELVE? YA GONNA REGRET DIS, MON!", 0)
|
||||
|
||||
phases = {}
|
||||
local guid = creature:GetGUIDLow()
|
||||
phases[guid] = {}
|
||||
|
||||
creature:RegisterEvent(CastPlagueStrike, 10000, 0)
|
||||
creature:RegisterEvent(CastJumpAttack, 15000, 0)
|
||||
@@ -98,15 +139,15 @@ local function OnCombatStart(event, creature, target)
|
||||
end
|
||||
|
||||
local function OnLeaveCombat(event, creature)
|
||||
creature:SendUnitYell("Run away, little softskins! Dis troll be too much for ya!", 0)
|
||||
creature:RemoveEvents()
|
||||
phases = {}
|
||||
creature:SendUnitYell("Run away, little softskins! Dis troll be too much for ya!", 0)
|
||||
phases[creature:GetGUIDLow()] = nil
|
||||
end
|
||||
|
||||
local function OnDeath(event, creature, killer)
|
||||
creature:RemoveEvents()
|
||||
creature:SendUnitYell("Ughhh... da sand... she take me now... da plague... live on...", 0)
|
||||
phases = {}
|
||||
phases[creature:GetGUIDLow()] = nil
|
||||
end
|
||||
|
||||
RegisterCreatureEvent(BOSS_ID, 1, OnCombatStart)
|
||||
|
||||
@@ -1,7 +1,51 @@
|
||||
--------------------------------------------------------------------------------
|
||||
-- Xan'tosh (Sandfury Delve Boss 2) - DOUBLE UNDEAD SCARABS (17235 x2)
|
||||
-- Xan'tosh - Sandfury Delve Boss (Scarab Summoner)
|
||||
-- NPC ID: 600622
|
||||
-- Created by: Manmadedrummer | Delve System
|
||||
--------------------------------------------------------------------------------
|
||||
-- DESCRIPTION:
|
||||
-- Ancient Sandfury necromancer - master of undead scarabs and plague magic
|
||||
-- Summons DOUBLE scarabs at key thresholds with visual swarm effects
|
||||
-- Vanilla/AQ40 retail-style with progressive add waves and hex combos
|
||||
--
|
||||
-- PHASE 1 (100% - 90%): Basic plague/sand rotation
|
||||
-- PHASE 2 (90% - 70%): Demon Armor + Voodoo Flames + 2x Scarabs summoned
|
||||
-- PHASE 3 (70% - 30%): Blood Drain activated
|
||||
-- PHASE 4 (<30%): Sand Storm spam + 2x MORE Scarabs (4 total possible)
|
||||
--
|
||||
-- ABILITIES:
|
||||
-- - Plague Strike: Disease damage on tank (constant)
|
||||
-- - Sand Breath: Breath weapon on tank (constant)
|
||||
-- - Dark Smash: Heavy melee hit (constant)
|
||||
-- - Hex of Mending: Healing reduction curse (every 30s)
|
||||
-- - Hex of Ravenclaw: Damage increase curse (combo with Mending)
|
||||
-- - Blood Drain: Life steal from random player (P3+)
|
||||
-- - Demon Armor: Protective fel buff (P2)
|
||||
-- - Voodoo Flames: Fire damage aura (P2)
|
||||
-- - Crypt Scarabs: Visual swarm effect
|
||||
-- - Raise Undead Scarab: Summons scarab add (x2 per phase!)
|
||||
-- - Sand Storm: Massive AOE sandstorm (P4)
|
||||
--
|
||||
-- MECHANICS:
|
||||
-- - GUIDLow-safe phase tracking (supports multiple spawns)
|
||||
-- - Double scarab summons create 2 adds instantly per trigger
|
||||
-- - Hex combo applies two debuffs simultaneously
|
||||
-- - Blood Drain creates sustain pressure
|
||||
-- - Visual swarm effect accompanies scarab summons
|
||||
-- - No memory leaks (proper cleanup on reset/death)
|
||||
--
|
||||
-- RETAIL-LIKE FEATURES:
|
||||
-- - Scarab summons similar to AQ40 (C'Thun, Viscidus trash)
|
||||
-- - Hex mechanics similar to Hex Lord Malacrass (ZA)
|
||||
-- - Progressive add waves increase difficulty
|
||||
-- - Sand Storm zone control forces movement
|
||||
--
|
||||
-- DIFFICULTY: Delve Boss (Solo Fight)
|
||||
-- LEVEL: 83-85
|
||||
-- MAP: Sandfury Delve (Map ID: 905)
|
||||
-- ADDS: Up to 4x Undead Scarabs possible (NPC 17235)
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
print("Sandfury Delve Boss 2 - Xan'tosh Loaded")
|
||||
|
||||
local BOSS_ID = 600622
|
||||
@@ -25,7 +69,7 @@ local SPELL_CRYPT_SCARABS = 54313 -- Visual swarm
|
||||
local SPELL_RAISE_SCARAB = 17235 -- Raise Undead Scarab (x2!)
|
||||
local SPELL_BLOOD_DRAIN = 41238
|
||||
|
||||
-- Per-fight phase tracking
|
||||
-- GUIDLow-safe phase tracking
|
||||
local phases = {}
|
||||
|
||||
local function GetTank(creature) return creature:GetAITarget(1, true) end
|
||||
@@ -62,28 +106,31 @@ local function SummonDoubleScarabs(creature)
|
||||
creature:CastSpell(creature, SPELL_RAISE_SCARAB, true) -- 2nd scarab (instant)
|
||||
end
|
||||
|
||||
-- SINGLE PHASE CHECKER
|
||||
-- PHASE CHECKER - GUIDLow-safe
|
||||
local function PhaseCheck(eventId, delay, calls, creature)
|
||||
if not creature:IsInCombat() or creature:IsDead() then
|
||||
creature:RemoveEventById(eventId)
|
||||
return
|
||||
end
|
||||
|
||||
local guid = creature:GetGUIDLow()
|
||||
phases[guid] = phases[guid] or {}
|
||||
local p = phases[guid]
|
||||
local hp = creature:GetHealthPct()
|
||||
|
||||
if hp <= HP_PHASE_4 and not phases[4] then
|
||||
phases[4] = true
|
||||
if hp <= HP_PHASE_4 and not p[4] then
|
||||
p[4] = true
|
||||
creature:SendUnitYell("Xan'tosh's power unmatched! Ya finished, little insects!", 0)
|
||||
SummonDoubleScarabs(creature) -- 2 scarabs + swarm
|
||||
creature:RegisterEvent(CastSandStorm, 30000, 0)
|
||||
|
||||
elseif hp <= HP_PHASE_3 and not phases[3] then
|
||||
phases[3] = true
|
||||
elseif hp <= HP_PHASE_3 and not p[3] then
|
||||
p[3] = true
|
||||
creature:SendUnitYell("Ya blood feeds me now! Taste da drain!", 0)
|
||||
CastBloodDrain(0,0,0,creature)
|
||||
|
||||
elseif hp <= HP_PHASE_2 and not phases[2] then
|
||||
phases[2] = true
|
||||
elseif hp <= HP_PHASE_2 and not p[2] then
|
||||
p[2] = true
|
||||
creature:SendUnitYell("Da ancient gods stir beneath da sand... RISE, MY CHILDREN!", 0)
|
||||
creature:CastSpell(creature, SPELL_DEMON_ARMOR, true)
|
||||
creature:CastSpell(creature, SPELL_VOODOO_FLAMES, true)
|
||||
@@ -94,7 +141,9 @@ end
|
||||
-- Combat Start
|
||||
local function OnEnterCombat(event, creature, target)
|
||||
creature:SendUnitYell("Da plague an' da sand gonna swallow ya whole, mon!", 0)
|
||||
phases = {}
|
||||
|
||||
local guid = creature:GetGUIDLow()
|
||||
phases[guid] = {}
|
||||
|
||||
creature:RegisterEvent(function(_,_,_,c)
|
||||
if c:IsInCombat() then local t = GetTank(c); if t then c:CastSpell(t, SPELL_PLAGUE_STRIKE, true) end end
|
||||
@@ -114,15 +163,15 @@ local function OnEnterCombat(event, creature, target)
|
||||
end
|
||||
|
||||
local function OnLeaveCombat(event, creature)
|
||||
creature:SendUnitYell("Da rot claims another day...", 0)
|
||||
creature:RemoveEvents()
|
||||
phases = {}
|
||||
creature:SendUnitYell("Da rot claims another day...", 0)
|
||||
phases[creature:GetGUIDLow()] = nil
|
||||
end
|
||||
|
||||
local function OnDied(event, creature, killer)
|
||||
creature:RemoveEvents()
|
||||
creature:SendUnitYell("Da rot... it finally takes me... but da curse lives on...", 0)
|
||||
phases = {}
|
||||
phases[creature:GetGUIDLow()] = nil
|
||||
end
|
||||
|
||||
RegisterCreatureEvent(BOSS_ID, 1, OnEnterCombat)
|
||||
|
||||
Reference in New Issue
Block a user