From 7a40c9a78f4eaea37ff960c731364cfcd4da4258 Mon Sep 17 00:00:00 2001 From: Manmadedrummer <140130825+Manmadedrummer@users.noreply.github.com> Date: Thu, 1 Jan 2026 19:26:27 -0500 Subject: [PATCH] Added Files --- BOSS Scripts (Lua)/Mustafar/BobaFett.lua | 389 ++++++++++++++++++ .../Mustafar/NarulFlameseeker.lua | 385 +++++++++++++++++ BOSS Scripts (Lua)/Mustafar/Vader.lua | 371 +++++++++++++++++ Server SQL/creature_model_info_insert.sql | 9 + {Server => Server SQL}/game_graveyard.sql | 0 {Server => Server SQL}/game_tele.sql | 0 {Server => Server SQL}/graveyard_zone.sql | 0 {Server => Server SQL}/instance_template.sql | 0 .../reference_loot_table.sql | 0 .../Spirit Healer/Spawn.sql | 0 10 files changed, 1154 insertions(+) create mode 100644 BOSS Scripts (Lua)/Mustafar/BobaFett.lua create mode 100644 BOSS Scripts (Lua)/Mustafar/NarulFlameseeker.lua create mode 100644 BOSS Scripts (Lua)/Mustafar/Vader.lua create mode 100644 Server SQL/creature_model_info_insert.sql rename {Server => Server SQL}/game_graveyard.sql (100%) rename {Server => Server SQL}/game_tele.sql (100%) rename {Server => Server SQL}/graveyard_zone.sql (100%) rename {Server => Server SQL}/instance_template.sql (100%) rename {Server => Server SQL}/reference_loot_table.sql (100%) rename {NPC => Spirit Healer}/Spirit Healer/Spawn.sql (100%) diff --git a/BOSS Scripts (Lua)/Mustafar/BobaFett.lua b/BOSS Scripts (Lua)/Mustafar/BobaFett.lua new file mode 100644 index 0000000..acbd311 --- /dev/null +++ b/BOSS Scripts (Lua)/Mustafar/BobaFett.lua @@ -0,0 +1,389 @@ +-------------------------------------------------------------------------------- +-- Boba Fett - Bounty Hunter Supreme (10-Man Raid Boss) +-- NPC ID: 9500637 +-- Created by: Manmadedrummer | Star Wars Boss Collection +-------------------------------------------------------------------------------- +-- DESCRIPTION: +-- Legendary Mandalorian bounty hunter - 10-man raid encounter +-- Multi-phase gadget specialist with mobility and weapon variety +-- Inspired by SWTOR Bounty Hunter class and WotLK raid design +-- Solo boss - pure mechanical execution fight with mobility requirements +-- +-- PHASE 1 (100% - 60%): Hunting Protocol +-- - Ranged combat with wrist rockets and flamethrower +-- - Explosive Shot, Electrified Net, Flamethrower +-- - Ice Tomb (Carbonite Freezing) every 60s +-- - Jump Attack repositioning every 30s +-- +-- PHASE 2 (60% - 30%): Advanced Arsenal (ADDS abilities, keeps Phase 1) +-- - ADDS: Sonic Burst (stun explosion) +-- - ADDS: Focused Laser (channeled beam) +-- - ADDS: Incendiary Missile barrage +-- - All Phase 1 abilities continue +-- - Size increase to 1.15x +-- +-- PHASE 3 (30% - 10%): Heavy Ordinance (ADDS abilities, keeps P1+P2) +-- - ADDS: Throw Dynamite (explosive zones) +-- - All Phase 1 + Phase 2 abilities continue +-- - Size increase to 1.2x +-- +-- PHASE 4 (10% - 5%): Desperate Speed (ADDS Double Speed, keeps all) +-- - ADDS: Double Speed buff [ONE TIME at 10%] +-- - All Phase 1 + Phase 2 + Phase 3 abilities continue +-- - Size increase to 1.25x +-- +-- ENRAGE (<5%): Mandalorian Berserk (ADDS Berserk, keeps all) +-- - ADDS: Berserk damage buff [ONE TIME at 5%] +-- - All previous abilities continue with Double Speed active +-- - Final burn phase +-- +-- ABILITIES - PHASE 1: +-- - Explosive Shot: Heavy ranged damage (12-15s random CD) +-- - Electrified Net: Snare + damage (25-30s random CD) +-- - Flamethrower: Cone fire damage (30-35s random CD) +-- - Ice Tomb: Carbonite freeze on random player (60s CD) +-- - Jump Attack: Leap to random location (45s CD) +-- +-- ABILITIES - PHASE 2 (60% HP) - ADDS TO PHASE 1: +-- - Sonic Burst: AOE stun explosion (40s CD) [NEW] +-- - Focused Laser: Channeled beam on random player (50s CD) [NEW] +-- - Incendiary Missile: Fire missile on random area (35s CD) [NEW] +-- - All 5 Phase 1 abilities continue +-- - Total: 8 abilities +-- +-- ABILITIES - PHASE 3 (30% HP) - ADDS TO P1+P2: +-- - Throw Dynamite: Explosive zones (30s CD) [NEW] +-- - All 8 previous abilities continue +-- - Total: 9 abilities +-- +-- ABILITIES - PHASE 4 (10% HP) - ADDS TO ALL: +-- - Double Speed: 2x speed buff [NEW, ONE TIME] +-- - All 9 previous abilities continue at 2x speed +-- - Total: 9 abilities + Double Speed buff +-- +-- ENRAGE (<5% HP) - ADDS TO ALL: +-- - Berserk: Massive damage buff [NEW, ONE TIME] +-- - All 9 abilities + Double Speed + Berserk +-- - Total: 9 abilities + 2 permanent buffs +-- +-- MECHANICS: +-- - GUIDLow-safe phase tracking +-- - Jump Attack repositioning creates unpredictable movement +-- - Ice Tomb requires dispel or breaks on damage +-- - Throw Dynamite creates danger zones +-- - Double Speed increases all ability frequency +-- - Berserk makes final burn critical +-- - No adds - pure boss mechanics +-- +-- RETAIL-LIKE FEATURES: +-- - Mimiron-style jump repositioning +-- - Sindragosa-style Ice Tomb (Carbonite Freeze) +-- - XT-002-style Throw Dynamite (explosive zones) +-- - Progressive ability spam (9 abilities by Phase 3) +-- - Permanent buffs stack (Double Speed + Berserk) +-- - Mobility-based encounter (constant movement) +-- +-- DIFFICULTY: 10-Man Raid Boss +-- LEVEL: 85 +-- LOCATION: Star Wars Encounter Area +-- ESTIMATED DURATION: 8-10 minutes +-- HARD ENRAGE: Berserk at 5% HP +-------------------------------------------------------------------------------- + +print("Star Wars Raid Boss - Boba Fett Loaded") + +local BOSS_ID = 9500637 + +-------------------------------------------------------------------------------- +-- SPELLS - PHASE 1 (Hunting Protocol) +-------------------------------------------------------------------------------- +local SPELL_EXPLOSIVE_SHOT = 67985 -- Heavy ranged damage +local SPELL_ELECTRIFIED_NET = 35107 -- Snare + damage +local SPELL_FLAMETHROWER = 45467 -- Cone fire damage +local SPELL_ICE_TOMB = 16869 -- Carbonite freeze (Ice Tomb) +local SPELL_JUMP_ATTACK = 56113 -- Jump repositioning + +-------------------------------------------------------------------------------- +-- SPELLS - PHASE 2 (Advanced Arsenal) +-------------------------------------------------------------------------------- +local SPELL_SONIC_BURST = 39052 -- Stun explosion +local SPELL_FOCUSED_LASER = 64683 -- Channeled beam +local SPELL_INCENDIARY_MISSILE = 66541 -- Fire missile + +-------------------------------------------------------------------------------- +-- SPELLS - PHASE 3 (Heavy Ordinance) +-------------------------------------------------------------------------------- +local SPELL_THROW_DYNAMITE = 29579 -- Explosive zones + +-------------------------------------------------------------------------------- +-- PHASE 4 & ENRAGE +-------------------------------------------------------------------------------- +local SPELL_DOUBLE_SPEED = 59737 -- 2x speed at 10% +local SPELL_BERSERK = 26662 -- Damage buff at 5% + +-------------------------------------------------------------------------------- +-- TIMERS & COOLDOWNS (Retail 10-Man Tuned) +-------------------------------------------------------------------------------- +-- Phase 1 - Core rotation with breathing room +local EXPLOSIVE_SHOT_MIN = 12000 -- 12-15s (main filler) +local EXPLOSIVE_SHOT_MAX = 15000 +local ELECTRIFIED_NET_MIN = 25000 -- 25-30s (cc/snare) +local ELECTRIFIED_NET_MAX = 30000 +local FLAMETHROWER_MIN = 30000 -- 30-35s (cone damage) +local FLAMETHROWER_MAX = 35000 +local ICE_TOMB_CD = 60000 -- 60s (major mechanic) +local JUMP_ATTACK_CD = 45000 -- 45s (repositioning) + +-- Phase 2 - Additional complexity +local SONIC_BURST_CD = 40000 -- 40s (aoe stun) +local FOCUSED_LASER_CD = 50000 -- 50s (channeled beam) +local INCENDIARY_MISSILE_CD = 35000 -- 35s (fire damage) + +-- Phase 3 - Heavy pressure +local THROW_DYNAMITE_CD = 30000 -- 30s (explosive zones) + +-------------------------------------------------------------------------------- +-- THRESHOLDS +-------------------------------------------------------------------------------- +local TH_60 = 60 +local TH_30 = 30 +local TH_10 = 10 +local TH_05 = 5 + +-------------------------------------------------------------------------------- +-- EVENT IDs +-------------------------------------------------------------------------------- +local EVENT_EXPLOSIVE_SHOT = 101 +local EVENT_ELECTRIFIED_NET = 102 +local EVENT_FLAMETHROWER = 103 +local EVENT_ICE_TOMB = 104 +local EVENT_JUMP_ATTACK = 105 + +local EVENT_SONIC_BURST = 201 +local EVENT_FOCUSED_LASER = 202 +local EVENT_INCENDIARY_MISSILE = 203 + +local EVENT_THROW_DYNAMITE = 301 + +local EVENT_PHASE_CHECK = 999 + +-------------------------------------------------------------------------------- +-- YELLS +-------------------------------------------------------------------------------- +local YELLS = { + AGGRO = "You're worth a lot to me dead. I might even take you alive if you beg.", + ICE_TOMB = "You're no good to me frozen... Actually, yes you are.", + JUMP_ATTACK = "Death from above!", + PHASE_2 = "Let's see how you handle a REAL bounty hunter!", + PHASE_3 = "No disintegrations? Fine. I'll just use everything else!", + DOUBLE_SPEED = "Time to finish this quickly!", + BERSERK = "You've made this personal. Time to collect!", + WIPE = "As you wish.", + DEATH = "Impossible... The Fett legacy... ends here..." +} + +-------------------------------------------------------------------------------- +-- GUID-SAFE PHASE TABLE +-------------------------------------------------------------------------------- +local phases = {} + +-------------------------------------------------------------------------------- +-- TARGET HELPERS +-------------------------------------------------------------------------------- +local function GetTank(self) + return self:GetVictim() +end + +local function GetRandomPlayer(self) + return self:GetAITarget(0, true) +end + +local function GetRandomRanged(self) + local players = self:GetPlayersInRange(100) + local rangedPlayers = {} + for _, p in ipairs(players) do + if p:IsAlive() and self:GetDistance(p) > 10 then + table.insert(rangedPlayers, p) + end + end + if #rangedPlayers > 0 then + return rangedPlayers[math.random(#rangedPlayers)] + end + return GetRandomPlayer(self) +end + +-------------------------------------------------------------------------------- +-- PHASE 1 ABILITIES +-------------------------------------------------------------------------------- +local function CastExplosiveShot(_, _, _, self) + if not self:IsInCombat() then return end + local target = GetRandomPlayer(self) + if target then self:CastSpell(target, SPELL_EXPLOSIVE_SHOT, true) end + + -- Re-register with random timer + local next = math.random(EXPLOSIVE_SHOT_MIN, EXPLOSIVE_SHOT_MAX) + self:RegisterEvent(CastExplosiveShot, next, 1, EVENT_EXPLOSIVE_SHOT) +end + +local function CastElectrifiedNet(_, _, _, self) + if not self:IsInCombat() then return end + local target = GetRandomPlayer(self) + if target then self:CastSpell(target, SPELL_ELECTRIFIED_NET, true) end + + -- Re-register with random timer + local next = math.random(ELECTRIFIED_NET_MIN, ELECTRIFIED_NET_MAX) + self:RegisterEvent(CastElectrifiedNet, next, 1, EVENT_ELECTRIFIED_NET) +end + +local function CastFlamethrower(_, _, _, self) + if not self:IsInCombat() then return end + local target = GetTank(self) + if target then self:CastSpell(target, SPELL_FLAMETHROWER, true) end + + -- Re-register with random timer + local next = math.random(FLAMETHROWER_MIN, FLAMETHROWER_MAX) + self:RegisterEvent(CastFlamethrower, next, 1, EVENT_FLAMETHROWER) +end + +local function CastIceTomb(_, _, _, self) + if not self:IsInCombat() then return end + local target = GetRandomRanged(self) + if target then + self:SendUnitYell(YELLS.ICE_TOMB, 0) + self:CastSpell(target, SPELL_ICE_TOMB, true) + end +end + +local function CastJumpAttack(_, _, _, self) + if not self:IsInCombat() then return end + + -- Jump to random player location + local target = GetRandomPlayer(self) + if target then + self:SendUnitYell(YELLS.JUMP_ATTACK, 0) + self:CastSpell(target, SPELL_JUMP_ATTACK, true) + end +end + +-------------------------------------------------------------------------------- +-- PHASE 2 ABILITIES +-------------------------------------------------------------------------------- +local function CastSonicBurst(_, _, _, self) + if not self:IsInCombat() then return end + self:CastSpell(self, SPELL_SONIC_BURST, true) +end + +local function CastFocusedLaser(_, _, _, self) + if not self:IsInCombat() then return end + local target = GetRandomPlayer(self) + if target then self:CastSpell(target, SPELL_FOCUSED_LASER, true) end +end + +local function CastIncendiaryMissile(_, _, _, self) + if not self:IsInCombat() then return end + local target = GetRandomPlayer(self) + if target then self:CastSpell(target, SPELL_INCENDIARY_MISSILE, true) end +end + +-------------------------------------------------------------------------------- +-- PHASE 3 ABILITIES +-------------------------------------------------------------------------------- +local function CastThrowDynamite(_, _, _, self) + if not self:IsInCombat() then return end + local target = GetRandomPlayer(self) + if target then self:CastSpell(target, SPELL_THROW_DYNAMITE, true) end +end + +-------------------------------------------------------------------------------- +-- PHASE CHECKER - GUIDLow-safe +-------------------------------------------------------------------------------- +local function PhaseCheck(eventId, _, _, self) + if not self:IsInCombat() or self:IsDead() then + self:RemoveEventById(eventId) + return + end + + local guid = self:GetGUIDLow() + phases[guid] = phases[guid] or {} + local p = phases[guid] + local hp = self:GetHealthPct() + + if hp <= TH_05 and not p[5] then + p[5] = true + -- ENRAGE: Berserk + self:SendUnitYell(YELLS.BERSERK, 0) + + -- Add Berserk buff (keeps all abilities + Double Speed) + self:CastSpell(self, SPELL_BERSERK, true) + + -- Stop phase checking + self:RemoveEventById(eventId) + + elseif hp <= TH_10 and not p[10] then + p[10] = true + -- PHASE 4: Desperate Speed + self:SendUnitYell(YELLS.DOUBLE_SPEED, 0) + self:SetScale(1.25) -- Size increase + + -- Add Double Speed buff (keeps all 9 abilities) + self:CastSpell(self, SPELL_DOUBLE_SPEED, true) + + elseif hp <= TH_30 and not p[30] then + p[30] = true + -- PHASE 3: Heavy Ordinance + self:SendUnitYell(YELLS.PHASE_3, 0) + self:SetScale(1.2) -- Size increase + + -- ADD Phase 3 abilities (keeps all P1+P2) + self:RegisterEvent(CastThrowDynamite, THROW_DYNAMITE_CD, 0, EVENT_THROW_DYNAMITE) + + elseif hp <= TH_60 and not p[60] then + p[60] = true + -- PHASE 2: Advanced Arsenal + self:SendUnitYell(YELLS.PHASE_2, 0) + self:SetScale(1.15) -- Size increase + + -- ADD Phase 2 abilities (keeps all Phase 1) + self:RegisterEvent(CastSonicBurst, SONIC_BURST_CD, 0, EVENT_SONIC_BURST) + self:RegisterEvent(CastFocusedLaser, FOCUSED_LASER_CD, 0, EVENT_FOCUSED_LASER) + self:RegisterEvent(CastIncendiaryMissile, INCENDIARY_MISSILE_CD, 0, EVENT_INCENDIARY_MISSILE) + end +end + +-------------------------------------------------------------------------------- +-- COMBAT EVENTS +-------------------------------------------------------------------------------- +local function OnEnterCombat(event, creature, target) + creature:SendUnitYell(YELLS.AGGRO, 0) + + local guid = creature:GetGUIDLow() + phases[guid] = {} + + -- PHASE 1 - Start all basic abilities with random first timers + creature:RegisterEvent(CastExplosiveShot, math.random(EXPLOSIVE_SHOT_MIN, EXPLOSIVE_SHOT_MAX), 1, EVENT_EXPLOSIVE_SHOT) + creature:RegisterEvent(CastElectrifiedNet, math.random(ELECTRIFIED_NET_MIN, ELECTRIFIED_NET_MAX), 1, EVENT_ELECTRIFIED_NET) + creature:RegisterEvent(CastFlamethrower, math.random(FLAMETHROWER_MIN, FLAMETHROWER_MAX), 1, EVENT_FLAMETHROWER) + creature:RegisterEvent(CastIceTomb, ICE_TOMB_CD, 0, EVENT_ICE_TOMB) + creature:RegisterEvent(CastJumpAttack, JUMP_ATTACK_CD, 0, EVENT_JUMP_ATTACK) + + -- Phase checker + creature:RegisterEvent(PhaseCheck, 1000, 0, EVENT_PHASE_CHECK) +end + +local function OnLeaveCombat(event, creature) + creature:RemoveEvents() + creature:SendUnitYell(YELLS.WIPE, 0) + creature:SetScale(1.0) -- Reset size + phases[creature:GetGUIDLow()] = nil +end + +local function OnDied(event, creature, killer) + creature:RemoveEvents() + creature:SendUnitYell(YELLS.DEATH, 0) + creature:SetScale(1.0) -- Reset size + phases[creature:GetGUIDLow()] = nil +end + +RegisterCreatureEvent(BOSS_ID, 1, OnEnterCombat) +RegisterCreatureEvent(BOSS_ID, 2, OnLeaveCombat) +RegisterCreatureEvent(BOSS_ID, 4, OnDied) \ No newline at end of file diff --git a/BOSS Scripts (Lua)/Mustafar/NarulFlameseeker.lua b/BOSS Scripts (Lua)/Mustafar/NarulFlameseeker.lua new file mode 100644 index 0000000..ae0c098 --- /dev/null +++ b/BOSS Scripts (Lua)/Mustafar/NarulFlameseeker.lua @@ -0,0 +1,385 @@ +-------------------------------------------------------------------------------- +-- Narul the Flameseeker - Raid Boss +-- NPC ID: 888432 +-- Original Script: Kreegoth (OwnedCore - ArcEmu) +-- Source: https://www.ownedcore.com/forums/world-of-warcraft/world-of-warcraft-emulator-servers/wow-emu-general-releases/166352-lua-sql-narul-flameseeker.html +-- AzerothCore Port & Enhancement: Manmadedrummer +-------------------------------------------------------------------------------- +-- DESCRIPTION: +-- Multi-phase warrior boss with Dancing Sword adds +-- Progressive transformation through 4 distinct phases +-- WotLK retail-style with additive abilities and controlled add waves +-- +-- PHASE 1 (100% - 76%): Mortal Combat +-- - Basic warrior abilities and fire magic +-- - Fires aura, Smoke visual +-- - Behead, Disembowel, Dismember rotation +-- +-- PHASE 2 (76% - 49%): Worgen Transformation (ADDS abilities, keeps Phase 1) +-- - Transforms to Worgen form + Fel Form visual +-- - ADDS: Deft Slice, Harrowing Slash, Upward Thrust +-- - ADDS: 3 Dancing Sword summons [ONE TIME] +-- - Size increase to 1.1x +-- - All Phase 1 abilities continue +-- +-- PHASE 3 (49% - 20%): Shadow Ascension (ADDS abilities, keeps P1+P2) +-- - Shadow transformation visual +-- - ADDS: Shadow spell, Quake, Flame Blade, Quick Strike, Phalanx +-- - ADDS: 3 more Dancing Sword summons [ONE TIME] +-- - Size increase to 1.2x +-- - All Phase 1 + Phase 2 abilities continue +-- +-- PHASE 4 (<20%): Final Awakening (ADDS abilities, keeps all) +-- - Final phase transformation +-- - ADDS: 3 final Dancing Sword summons [ONE TIME] +-- - Size increase to 1.3x +-- - ALL 13 abilities active simultaneously +-- +-- ABILITIES - PHASE 1: +-- - Fires: Fire aura (constant) +-- - Smoke: Smoke visual (constant) +-- - Behead: Random player attack (8s CD) +-- - Disembowel: Self buff (6s CD) +-- - Dismember: Tank attack (5s CD) +-- +-- ABILITIES - PHASE 2 (76% HP) - ADDS TO PHASE 1: +-- - Worgen Form: Transform visual [ONE TIME] +-- - Fel Form: Fel visual [ONE TIME] +-- - Deft Slice: Tank attack (11s CD) [NEW] +-- - Harrowing Slash: Tank attack (2s CD) [NEW] +-- - Upward Thrust: AOE knockup (7s CD) [NEW] +-- - Summon 3 Dancing Swords [ONE TIME] +-- +-- ABILITIES - PHASE 3 (49% HP) - ADDS TO P1+P2: +-- - Shadow: Shadow visual [ONE TIME] +-- - Quake: AOE damage (6s CD) [NEW] +-- - Flame Blade: Tank fire attack (7s CD) [NEW] +-- - Quick Strike: Tank rapid attack (3s CD) [NEW] +-- - Phalanx: Defensive buff (7s CD) [NEW] +-- - Summon 3 Dancing Swords [ONE TIME] +-- +-- ABILITIES - PHASE 4 (20% HP) - ADDS TO ALL: +-- - Final Phase: Transformation visual [ONE TIME] +-- - Summon 3 Dancing Swords [ONE TIME] +-- - All 13 abilities continue +-- +-- ADDS: +-- - Dancing Sword (NPC 21093) +-- - Summoned in waves of 3 per phase +-- - Total possible: 9 swords (3 per phase at 76%, 49%, 20%) +-- - 60-second auto-despawn timer +-- +-- MECHANICS: +-- - GUIDLow-safe phase tracking (one-time triggers only) +-- - Retail-style additive phases (abilities stack, not replace) +-- - Controlled add waves (3 swords per phase transition) +-- - Progressive size increase (1.0x → 1.1x → 1.2x → 1.3x) +-- - Progressive difficulty increase through ability spam +-- - No memory leaks (proper cleanup) +-- +-- FIXES FROM ORIGINAL: +-- - Fixed infinite sword spawning bug (was spawning every 1s) +-- - Added GUIDLow-safe phase tracking +-- - Converted to additive phases (retail-style) +-- - Added explicit event IDs for safe removal +-- - Added proper memory cleanup +-- - Added size progression for visual feedback +-- +-- RETAIL-LIKE FEATURES: +-- - Additive phase design (like Lich King, Sindragosa) +-- - Add management (Dancing Swords) +-- - Progressive transformation visuals +-- - Size scaling with phases +-- - Multiple simultaneous abilities by Phase 4 +-- +-- DIFFICULTY: Raid Boss +-- LEVEL: 80+ +-- ESTIMATED DURATION: 6-8 minutes +-------------------------------------------------------------------------------- + +print("Raid Boss - Narul the Flameseeker Loaded") + +local BOSS_ID = 888432 +local SWORD_ID = 21093 + +-------------------------------------------------------------------------------- +-- SPELLS - PHASE 1 (Mortal Combat) +-------------------------------------------------------------------------------- +local SPELL_FIRES = 42971 +local SPELL_SMOKE = 42355 +local SPELL_BEHEAD = 25814 +local SPELL_DISEMBOWEL = 22924 +local SPELL_DISMEMBER = 34073 + +-------------------------------------------------------------------------------- +-- SPELLS - PHASE 2 (Worgen Transformation) +-------------------------------------------------------------------------------- +local SPELL_FFORM = 36114 +local SPELL_WORGEN = 32819 +local SPELL_DEFTSLICE = 44533 +local SPELL_HARROWINGSLASH = 36110 +local SPELL_UPWARD_THRUST = 43547 + +-------------------------------------------------------------------------------- +-- SPELLS - PHASE 3 (Shadow Ascension) +-------------------------------------------------------------------------------- +local SPELL_SHADOW = 39490 +local SPELL_QUAKE = 17742 +local SPELL_FLAMEBLADE = 38917 +local SPELL_PHALYNX = 41629 +local SPELL_QUICKSTRIKE = 5271 + +-------------------------------------------------------------------------------- +-- SPELLS - PHASE 4 (Final Awakening) +-------------------------------------------------------------------------------- +local SPELL_FINAL_PHASE = 36876 + +-------------------------------------------------------------------------------- +-- THRESHOLDS +-------------------------------------------------------------------------------- +local TH_76 = 76 -- Phase 2: Worgen +local TH_49 = 49 -- Phase 3: Shadow +local TH_20 = 20 -- Phase 4: Final + +-------------------------------------------------------------------------------- +-- EVENT IDs +-------------------------------------------------------------------------------- +local EVENT_FIRES = 101 +local EVENT_SMOKE = 102 +local EVENT_BEHEAD = 103 +local EVENT_DISEMBOWEL = 104 +local EVENT_DISMEMBER = 105 + +local EVENT_DEFTSLICE = 201 +local EVENT_HARROWINGSLASH = 202 +local EVENT_UPWARD_THRUST = 203 + +local EVENT_QUAKE = 301 +local EVENT_FLAMEBLADE = 302 +local EVENT_QUICKSTRIKE = 303 +local EVENT_PHALYNX = 304 + +local EVENT_PHASE_CHECK = 999 + +-------------------------------------------------------------------------------- +-- YELLS +-------------------------------------------------------------------------------- +local YELLS = { + AGGRO = "In the face of death, Fear strikes the heart of even the strongest!", + PHASE_2 = "I was trained, No. I was Bred for this...You will not Defeat me!", + PHASE_3 = "Your hour of Doom Fast Approaches! Behold the true Vision that is Narul!", + PHASE_4 = "It is an insult that one such as you even challenged me...", + DEATH = "How...No..No...It cannot be" +} + +-------------------------------------------------------------------------------- +-- GUID-SAFE PHASE TABLE +-------------------------------------------------------------------------------- +local phases = {} + +-------------------------------------------------------------------------------- +-- TARGET HELPERS +-------------------------------------------------------------------------------- +local function GetTank(self) + return self:GetVictim() +end + +local function GetRandomPlayer(self) + return self:GetAITarget(0, true) +end + +local function SpawnSwords(self) + local x, y, z = self:GetLocation() + for i = 1, 3 do + -- Spawn in triangular formation + local angle = (i - 1) * (math.pi * 2 / 3) + local dist = 8 + local spawnX = x + math.cos(angle) * dist + local spawnY = y + math.sin(angle) * dist + self:SpawnCreature(SWORD_ID, spawnX, spawnY, z, 0, 3, 60000) + end +end + +-------------------------------------------------------------------------------- +-- PHASE 1 ABILITIES +-------------------------------------------------------------------------------- +local function CastFires(_, _, _, self) + if not self:IsInCombat() then return end + self:CastSpell(self, SPELL_FIRES, true) +end + +local function CastSmoke(_, _, _, self) + if not self:IsInCombat() then return end + self:CastSpell(self, SPELL_SMOKE, true) +end + +local function CastBehead(_, _, _, self) + if not self:IsInCombat() then return end + local target = GetRandomPlayer(self) + if target then self:CastSpell(target, SPELL_BEHEAD, true) end +end + +local function CastDisembowel(_, _, _, self) + if not self:IsInCombat() then return end + self:CastSpell(self, SPELL_DISEMBOWEL, true) +end + +local function CastDismember(_, _, _, self) + if not self:IsInCombat() then return end + local tank = GetTank(self) + if tank then self:CastSpell(tank, SPELL_DISMEMBER, true) end +end + +-------------------------------------------------------------------------------- +-- PHASE 2 ABILITIES +-------------------------------------------------------------------------------- +local function CastDeftslice(_, _, _, self) + if not self:IsInCombat() then return end + local tank = GetTank(self) + if tank then self:CastSpell(tank, SPELL_DEFTSLICE, true) end +end + +local function CastHarrowingslash(_, _, _, self) + if not self:IsInCombat() then return end + local tank = GetTank(self) + if tank then self:CastSpell(tank, SPELL_HARROWINGSLASH, true) end +end + +local function CastUpwardThrust(_, _, _, self) + if not self:IsInCombat() then return end + self:CastSpell(self, SPELL_UPWARD_THRUST, true) +end + +-------------------------------------------------------------------------------- +-- PHASE 3 ABILITIES +-------------------------------------------------------------------------------- +local function CastShadow(_, _, _, self) + if not self:IsInCombat() then return end + self:CastSpell(self, SPELL_SHADOW, true) +end + +local function CastQuake(_, _, _, self) + if not self:IsInCombat() then return end + self:CastSpell(self, SPELL_QUAKE, true) +end + +local function CastFlameblade(_, _, _, self) + if not self:IsInCombat() then return end + local tank = GetTank(self) + if tank then self:CastSpell(tank, SPELL_FLAMEBLADE, true) end +end + +local function CastPhalynx(_, _, _, self) + if not self:IsInCombat() then return end + self:CastSpell(self, SPELL_PHALYNX, true) +end + +local function CastQuickstrike(_, _, _, self) + if not self:IsInCombat() then return end + local target = GetTank(self) + if target then self:CastSpell(target, SPELL_QUICKSTRIKE, true) end +end + +-------------------------------------------------------------------------------- +-- PHASE CHECKER - GUIDLow-safe +-------------------------------------------------------------------------------- +local function PhaseCheck(eventId, _, _, self) + if not self:IsInCombat() or self:IsDead() then + self:RemoveEventById(eventId) + return + end + + local guid = self:GetGUIDLow() + phases[guid] = phases[guid] or {} + local p = phases[guid] + local hp = self:GetHealthPct() + + if hp <= TH_20 and not p[20] then + p[20] = true + -- PHASE 4: Final Awakening + self:SendUnitYell(YELLS.PHASE_4, 0) + self:SetScale(1.3) -- Final size increase + + -- Final transformation + self:CastSpell(self, SPELL_FINAL_PHASE, true) + + -- Spawn 3 final swords (ONE TIME) + SpawnSwords(self) + + -- Stop phase checking - all abilities continue + self:RemoveEventById(eventId) + + elseif hp <= TH_49 and not p[49] then + p[49] = true + -- PHASE 3: Shadow Ascension + self:SendUnitYell(YELLS.PHASE_3, 0) + self:SetScale(1.2) -- Size increase + + -- Shadow transformation + self:CastSpell(self, SPELL_SHADOW, true) + + -- ADD Phase 3 abilities (keeps all previous) + self:RegisterEvent(CastQuake, 6000, 0, EVENT_QUAKE) + self:RegisterEvent(CastFlameblade, 7000, 0, EVENT_FLAMEBLADE) + self:RegisterEvent(CastQuickstrike, 3000, 0, EVENT_QUICKSTRIKE) + self:RegisterEvent(CastPhalynx, 7000, 0, EVENT_PHALYNX) + + -- Spawn 3 swords (ONE TIME) + SpawnSwords(self) + + elseif hp <= TH_76 and not p[76] then + p[76] = true + -- PHASE 2: Worgen Transformation + self:SendUnitYell(YELLS.PHASE_2, 0) + self:SetScale(1.1) -- Size increase + + -- Transform to Worgen + Fel Form + self:CastSpell(self, SPELL_WORGEN, true) + self:CastSpell(self, SPELL_FFORM, true) + + -- ADD Phase 2 abilities (keeps all Phase 1) + self:RegisterEvent(CastDeftslice, 11000, 0, EVENT_DEFTSLICE) + self:RegisterEvent(CastHarrowingslash, 2000, 0, EVENT_HARROWINGSLASH) + self:RegisterEvent(CastUpwardThrust, 7000, 0, EVENT_UPWARD_THRUST) + + -- Spawn 3 swords (ONE TIME) + SpawnSwords(self) + end +end + +-------------------------------------------------------------------------------- +-- COMBAT EVENTS +-------------------------------------------------------------------------------- +local function OnEnterCombat(event, creature, target) + creature:SendUnitYell(YELLS.AGGRO, 0) + + local guid = creature:GetGUIDLow() + phases[guid] = {} + + -- PHASE 1 - Start initial abilities + creature:RegisterEvent(CastFires, 12000, 0, EVENT_FIRES) + creature:RegisterEvent(CastSmoke, 3000, 0, EVENT_SMOKE) + creature:RegisterEvent(CastBehead, 8000, 0, EVENT_BEHEAD) + creature:RegisterEvent(CastDisembowel, 6000, 0, EVENT_DISEMBOWEL) + creature:RegisterEvent(CastDismember, 5000, 0, EVENT_DISMEMBER) + + -- Phase checker + creature:RegisterEvent(PhaseCheck, 1000, 0, EVENT_PHASE_CHECK) +end + +local function OnLeaveCombat(event, creature) + creature:RemoveEvents() + creature:SetScale(1.0) -- Reset size + phases[creature:GetGUIDLow()] = nil +end + +local function OnDied(event, creature, killer) + creature:RemoveEvents() + creature:SendUnitYell(YELLS.DEATH, 0) + creature:SetScale(1.0) -- Reset size + phases[creature:GetGUIDLow()] = nil +end + +RegisterCreatureEvent(BOSS_ID, 1, OnEnterCombat) +RegisterCreatureEvent(BOSS_ID, 2, OnLeaveCombat) +RegisterCreatureEvent(BOSS_ID, 4, OnDied) \ No newline at end of file diff --git a/BOSS Scripts (Lua)/Mustafar/Vader.lua b/BOSS Scripts (Lua)/Mustafar/Vader.lua new file mode 100644 index 0000000..fa07a4c --- /dev/null +++ b/BOSS Scripts (Lua)/Mustafar/Vader.lua @@ -0,0 +1,371 @@ +-------------------------------------------------------------------------------- +-- Darth Vader - Star Destroyer Bridge (10-Man Raid Boss) +-- NPC ID: 9500644 +-- Created by: Manmadedrummer | Star Wars Boss Collection +-------------------------------------------------------------------------------- +-- DESCRIPTION: +-- Dark Lord of the Sith - 10-man raid encounter inspired by WotLK design philosophy +-- Multi-phase Dark Side channeler with Force abilities and lightsaber combat +-- Combines elements of Arthas, Sindragosa, and Blood Queen Lana'thel encounter design +-- SOLO BOSS - No adds or summons, pure mechanical execution fight +-- +-- PHASE 1 (100% - 50%): Lightsaber Combat & Basic Force Powers +-- - Cleave spam, Chain Lightning, periodic Thunderstorm +-- - Force Choke every 60s (Death Grip on FARTHEST player) +-- - Random Shadow Fury fear zones +-- +-- PHASE 2 (50% - 25%): Dark Side Unleashed (ADDS abilities, keeps all Phase 1) +-- - Increased size/intensity +-- - ADDS Force Blast (knockback mechanic every 30s) +-- - ADDS Force Lightning Storm (raid-wide damage every 50s) +-- - All Phase 1 abilities continue +-- +-- PHASE 3 (25% - 5%): Imperial Fury (ADDS abilities, keeps all previous) +-- - Final stand with maximum aggression +-- - ADDS Death Grip on random players (25s CD) +-- - ADDS Drain Life channels (60s CD - healing Vader while damaging target) +-- - All Phase 1 + Phase 2 abilities continue +-- +-- ENRAGE (<5%): Permanent Frenzy until death (keeps ALL abilities) +-- +-- ABILITIES - PHASE 1: +-- - Cleave: Frontal cone damage (30-60s random) +-- - Chain Lightning: Chain damage on current target (45s CD) +-- - Thunderstorm: AOE nature damage (30-60s random) +-- - Shadow Fury: Fear zone on tank position (15-60s random) +-- - Force Choke: Death Grip on farthest player (60s CD) +-- +-- ABILITIES - PHASE 2 (50% HP) - ADDS TO PHASE 1: +-- - Force Blast: Knockback all nearby players (30s CD) [NEW] +-- - Force Lightning Storm: Raid-wide shadow damage over 6s (50s CD) [NEW] +-- - Size increase to 1.15x +-- - All Phase 1 abilities continue at same frequency +-- +-- ABILITIES - PHASE 3 (25% HP) - ADDS TO PHASE 1+2: +-- - Death Grip: Pulls random ranged player to melee (25s CD) [NEW] +-- - Drain Life: Channels healing on Vader while damaging target (60s CD) [NEW] +-- - Size increase to 1.3x +-- - All Phase 1 + Phase 2 abilities continue +-- +-- ENRAGE (<5% HP) - ADDS TO ALL: +-- - Permanent Frenzy buff (massive damage increase) [NEW] +-- - Does NOT fade until Vader dies +-- - All previous abilities continue during Frenzy +-- - Final burn phase +-- +-- MECHANICS: +-- - GUIDLow-safe phase tracking (supports multiple spawns in testing) +-- - Force Choke (Death Grip) targets FARTHEST player +-- - Death Grip disrupts ranged safety +-- - Drain Life creates healing pressure windows +-- - Permanent Frenzy creates final burn phase +-- - Pure execution fight - no add management +-- +-- RETAIL-LIKE FEATURES: +-- - Sindragosa-style Force Choke (grip farthest player) +-- - Blood Queen-style size increases +-- - Arthas-style phase transitions +-- - Permanent enrage mechanic (like Brutallus) +-- - Proper tank-and-spank with periodic raid damage +-- - Movement mechanics (Force Blast, Death Grip) +-- - No add management - pure boss mechanics +-- +-- DIFFICULTY: 10-Man Raid Boss +-- LEVEL: 83 +-- HARD ENRAGE: Permanent Frenzy at 5% HP +-------------------------------------------------------------------------------- + +print("Star Wars Raid Boss - Darth Vader Loaded") + +local BOSS_ID = 9500644 + +-------------------------------------------------------------------------------- +-- SPELLS - PHASE 1 (Lightsaber Combat) +-------------------------------------------------------------------------------- +local CLEAVE = 30014 -- Frontal cone +local SHADOWFURY = 45270 -- Fear zone +local THUNDERSTORM = 59154 -- AOE nature damage +local CHAIN_LIGHTNING = 28167 -- Chain spell +local DEATH_GRIP = 61094 -- Force Choke = Death Grip + +-------------------------------------------------------------------------------- +-- SPELLS - PHASE 2 (Dark Side Unleashed) +-------------------------------------------------------------------------------- +local FORCE_BLAST = 39039 -- Knockback (was Force Push) +local LIGHTNING_STORM = 43648 -- Raid-wide damage over time + +-------------------------------------------------------------------------------- +-- SPELLS - PHASE 3 (Imperial Fury) +-------------------------------------------------------------------------------- +local DRAIN_LIFE = 64159 -- Healing channel +local FRENZY = 24318 -- Permanent enrage at 5% + +-------------------------------------------------------------------------------- +-- TIMERS & COOLDOWNS +-------------------------------------------------------------------------------- +-- Phase 1 +local CLEAVE_MIN = 30000 +local CLEAVE_MAX = 60000 +local SHADOWFURY_MIN = 15000 +local SHADOWFURY_MAX = 60000 +local THUNDER_MIN = 30000 +local THUNDER_MAX = 60000 +local CHAIN_LIGHT_CD = 45000 +local FORCE_CHOKE_CD_P1 = 60000 + +-- Phase 2 +local FORCE_BLAST_CD = 30000 +local LIGHTNING_STORM_CD = 50000 + +-- Phase 3 +local DEATH_GRIP_CD = 25000 +local DRAIN_LIFE_CD = 60000 + +-------------------------------------------------------------------------------- +-- THRESHOLDS +-------------------------------------------------------------------------------- +local TH_75 = 75 +local TH_50 = 50 +local TH_25 = 25 +local TH_05 = 5 + +-------------------------------------------------------------------------------- +-- EVENT IDs +-------------------------------------------------------------------------------- +local EVENT_CLEAVE = 101 +local EVENT_SHADOWFURY = 102 +local EVENT_THUNDERSTORM = 103 +local EVENT_CHAIN_LIGHT = 104 +local EVENT_FORCE_CHOKE = 105 + +local EVENT_FORCE_BLAST = 201 +local EVENT_LIGHTNING_STORM = 202 + +local EVENT_DEATH_GRIP = 301 +local EVENT_DRAIN_LIFE = 302 + +local EVENT_PHASE_CHECK = 999 + +-------------------------------------------------------------------------------- +-- YELLS +-------------------------------------------------------------------------------- +local YELLS = { + AGGRO = "I find your lack of faith disturbing!", + FORCE_CHOKE = "Your feeble skills are no match for the power of the Dark Side!", + PHASE_2 = "You have failed me for the last time! NOW YOU WILL KNOW THE POWER OF THE DARK SIDE!", + PHASE_3 = "The circle is now complete. Your destruction is inevitable!", + FORCE_BLAST = "The Force is strong with me!", + LIGHTNING_STORM = "Unlimited POWER!", + DEATH_GRIP_PULL = "Come to me!", + DRAIN_LIFE = "I will drain your very essence!", + FRENZY = "NOW YOU WILL EXPERIENCE THE FULL POWER OF THE DARK SIDE!", + PHASE_75 = "Your resistance is impressive... but futile!", + PHASE_10 = "You cannot win. The Dark Side is too strong!", + WIPE = "All too easy...", + DEATH = "You have won... nothing. The Empire will endure... always..." +} + +-------------------------------------------------------------------------------- +-- GUID-SAFE PHASE TABLE +-------------------------------------------------------------------------------- +local phases = {} + +-------------------------------------------------------------------------------- +-- TARGET HELPERS +-------------------------------------------------------------------------------- +local function GetTank(self) + return self:GetVictim() +end + +local function GetFarthestPlayer(self) + return self:GetAITarget(4, true) or self:GetAITarget(0, true) +end + +local function GetRandomRanged(self) + -- Get a random player not in melee range + local players = self:GetPlayersInRange(100) + local rangedPlayers = {} + for _, p in ipairs(players) do + if p:IsAlive() and self:GetDistance(p) > 10 then + table.insert(rangedPlayers, p) + end + end + if #rangedPlayers > 0 then + return rangedPlayers[math.random(#rangedPlayers)] + end + return self:GetAITarget(0, true) +end + +-------------------------------------------------------------------------------- +-- PHASE 1 ABILITIES +-------------------------------------------------------------------------------- +local function CastCleave(_, _, _, self) + if not self:IsInCombat() then return end + local t = GetTank(self) + if t then self:CastSpell(t, CLEAVE, true) end + + -- Re-register with random timer + local next = math.random(CLEAVE_MIN, CLEAVE_MAX) + self:RegisterEvent(CastCleave, next, 1, EVENT_CLEAVE) +end + +local function CastShadowfury(_, _, _, self) + if not self:IsInCombat() then return end + local t = GetTank(self) + if t then self:CastSpell(t, SHADOWFURY, true) end + + -- Re-register with random timer + local next = math.random(SHADOWFURY_MIN, SHADOWFURY_MAX) + self:RegisterEvent(CastShadowfury, next, 1, EVENT_SHADOWFURY) +end + +local function CastThunderstorm(_, _, _, self) + if not self:IsInCombat() then return end + self:CastSpell(self, THUNDERSTORM, true) + + -- Re-register with random timer + local next = math.random(THUNDER_MIN, THUNDER_MAX) + self:RegisterEvent(CastThunderstorm, next, 1, EVENT_THUNDERSTORM) +end + +local function CastChainLightning(_, _, _, self) + if not self:IsInCombat() then return end + local t = GetTank(self) + if t then self:CastSpell(t, CHAIN_LIGHTNING, true) end +end + +-- FORCE CHOKE - Death Grip on farthest player +local function CastForceChoke(_, _, _, self) + if not self:IsInCombat() then return end + + local target = GetFarthestPlayer(self) + if target and target:IsAlive() then + self:SendUnitYell(YELLS.FORCE_CHOKE, 0) + self:CastSpell(target, DEATH_GRIP, true) + end +end + +-------------------------------------------------------------------------------- +-- PHASE 2 ABILITIES (50% HP) +-------------------------------------------------------------------------------- +local function CastForceBlast(_, _, _, self) + if not self:IsInCombat() then return end + self:SendUnitYell(YELLS.FORCE_BLAST, 0) + self:CastSpell(self, FORCE_BLAST, true) -- AOE knockback +end + +local function CastLightningStorm(_, _, _, self) + if not self:IsInCombat() then return end + self:SendUnitYell(YELLS.LIGHTNING_STORM, 0) + self:CastSpell(self, LIGHTNING_STORM, true) -- Raid-wide DOT +end + +-------------------------------------------------------------------------------- +-- PHASE 3 ABILITIES (25% HP) +-------------------------------------------------------------------------------- +local function CastDeathGrip(_, _, _, self) + if not self:IsInCombat() then return end + + local target = GetRandomRanged(self) + if target then + self:SendUnitYell(YELLS.DEATH_GRIP_PULL, 0) + self:CastSpell(target, DEATH_GRIP, true) + end +end + +local function CastDrainLife(_, _, _, self) + if not self:IsInCombat() then return end + self:SendUnitYell(YELLS.DRAIN_LIFE, 0) + + -- Cast Drain Life on random player (heals Vader, damages target) + local target = self:GetAITarget(0, true) + if target then + self:CastSpell(target, DRAIN_LIFE, true) + end +end + +-------------------------------------------------------------------------------- +-- PHASE CHECKER - GUIDLow-safe +-------------------------------------------------------------------------------- +local function PhaseCheck(eventId, _, _, self) + if not self:IsInCombat() or self:IsDead() then + self:RemoveEventById(eventId) + return + end + + local guid = self:GetGUIDLow() + phases[guid] = phases[guid] or {} + local p = phases[guid] + local hp = self:GetHealthPct() + + if hp <= TH_05 and not p[5] then + p[5] = true + -- PERMANENT FRENZY - does not fade until death + self:SendUnitYell(YELLS.FRENZY, 0) + self:CastSpell(self, FRENZY, true) + self:CastSpell(self, THUNDERSTORM, true) -- Immediate storm + self:RemoveEventById(eventId) -- Stop phase checking + + elseif hp <= TH_25 and not p[25] then + p[25] = true + -- PHASE 3: Imperial Fury + self:SendUnitYell(YELLS.PHASE_3, 0) + self:SetScale(1.3) -- Increase size + + -- Start Phase 3 abilities + self:RegisterEvent(CastDeathGrip, DEATH_GRIP_CD, 0, EVENT_DEATH_GRIP) + self:RegisterEvent(CastDrainLife, DRAIN_LIFE_CD, 0, EVENT_DRAIN_LIFE) + + elseif hp <= TH_50 and not p[50] then + p[50] = true + -- PHASE 2: Dark Side Unleashed + self:SendUnitYell(YELLS.PHASE_2, 0) + self:SetScale(1.15) -- Slightly larger + + -- ADD Phase 2 abilities (keeps all Phase 1 abilities) + self:RegisterEvent(CastForceBlast, FORCE_BLAST_CD, 0, EVENT_FORCE_BLAST) + self:RegisterEvent(CastLightningStorm, LIGHTNING_STORM_CD, 0, EVENT_LIGHTNING_STORM) + + elseif hp <= TH_75 and not p[75] then + p[75] = true + self:SendUnitYell(YELLS.PHASE_75, 0) + end +end + +-------------------------------------------------------------------------------- +-- COMBAT EVENTS +-------------------------------------------------------------------------------- +local function OnEnterCombat(event, creature, target) + creature:SendUnitYell(YELLS.AGGRO, 0) + + local guid = creature:GetGUIDLow() + phases[guid] = {} + + -- PHASE 1 - Start all basic abilities with random first timers + creature:RegisterEvent(CastCleave, math.random(CLEAVE_MIN, CLEAVE_MAX), 1, EVENT_CLEAVE) + creature:RegisterEvent(CastShadowfury, math.random(SHADOWFURY_MIN, SHADOWFURY_MAX), 1, EVENT_SHADOWFURY) + creature:RegisterEvent(CastThunderstorm, math.random(THUNDER_MIN, THUNDER_MAX), 1, EVENT_THUNDERSTORM) + creature:RegisterEvent(CastChainLightning, CHAIN_LIGHT_CD, 0, EVENT_CHAIN_LIGHT) + creature:RegisterEvent(CastForceChoke, FORCE_CHOKE_CD_P1, 0, EVENT_FORCE_CHOKE) + + -- Phase checker + creature:RegisterEvent(PhaseCheck, 1000, 0, EVENT_PHASE_CHECK) +end + +local function OnLeaveCombat(event, creature) + creature:RemoveEvents() + creature:SendUnitYell(YELLS.WIPE, 0) + creature:SetScale(1.0) -- Reset size + phases[creature:GetGUIDLow()] = nil +end + +local function OnDied(event, creature, killer) + creature:RemoveEvents() + creature:SendUnitYell(YELLS.DEATH, 0) + creature:SetScale(1.0) -- Reset size + phases[creature:GetGUIDLow()] = nil +end + +RegisterCreatureEvent(BOSS_ID, 1, OnEnterCombat) +RegisterCreatureEvent(BOSS_ID, 2, OnLeaveCombat) +RegisterCreatureEvent(BOSS_ID, 4, OnDied) \ No newline at end of file diff --git a/Server SQL/creature_model_info_insert.sql b/Server SQL/creature_model_info_insert.sql new file mode 100644 index 0000000..153eb8d --- /dev/null +++ b/Server SQL/creature_model_info_insert.sql @@ -0,0 +1,9 @@ +INSERT INTO `creature_model_info` (`DisplayID`, `BoundingRadius`, `CombatReach`, `Gender`, `DisplayID_Other_Gender`) VALUES (34076, 1, 1, 2, 0); +INSERT INTO `creature_model_info` (`DisplayID`, `BoundingRadius`, `CombatReach`, `Gender`, `DisplayID_Other_Gender`) VALUES (34077, 1, 1, 2, 0); +INSERT INTO `creature_model_info` (`DisplayID`, `BoundingRadius`, `CombatReach`, `Gender`, `DisplayID_Other_Gender`) VALUES (34078, 1, 1, 2, 0); +INSERT INTO `creature_model_info` (`DisplayID`, `BoundingRadius`, `CombatReach`, `Gender`, `DisplayID_Other_Gender`) VALUES (34079, 1, 1, 2, 0); +INSERT INTO `creature_model_info` (`DisplayID`, `BoundingRadius`, `CombatReach`, `Gender`, `DisplayID_Other_Gender`) VALUES (34080, 1, 1, 2, 0); +INSERT INTO `creature_model_info` (`DisplayID`, `BoundingRadius`, `CombatReach`, `Gender`, `DisplayID_Other_Gender`) VALUES (34081, 1, 1, 2, 0); +INSERT INTO `creature_model_info` (`DisplayID`, `BoundingRadius`, `CombatReach`, `Gender`, `DisplayID_Other_Gender`) VALUES (34082, 1, 1, 2, 0); +INSERT INTO `creature_model_info` (`DisplayID`, `BoundingRadius`, `CombatReach`, `Gender`, `DisplayID_Other_Gender`) VALUES (34083, 1, 1, 2, 0); +INSERT INTO `creature_model_info` (`DisplayID`, `BoundingRadius`, `CombatReach`, `Gender`, `DisplayID_Other_Gender`) VALUES (34084, 1, 1, 2, 0); \ No newline at end of file diff --git a/Server/game_graveyard.sql b/Server SQL/game_graveyard.sql similarity index 100% rename from Server/game_graveyard.sql rename to Server SQL/game_graveyard.sql diff --git a/Server/game_tele.sql b/Server SQL/game_tele.sql similarity index 100% rename from Server/game_tele.sql rename to Server SQL/game_tele.sql diff --git a/Server/graveyard_zone.sql b/Server SQL/graveyard_zone.sql similarity index 100% rename from Server/graveyard_zone.sql rename to Server SQL/graveyard_zone.sql diff --git a/Server/instance_template.sql b/Server SQL/instance_template.sql similarity index 100% rename from Server/instance_template.sql rename to Server SQL/instance_template.sql diff --git a/Server/reference_loot_table.sql b/Server SQL/reference_loot_table.sql similarity index 100% rename from Server/reference_loot_table.sql rename to Server SQL/reference_loot_table.sql diff --git a/NPC/Spirit Healer/Spawn.sql b/Spirit Healer/Spirit Healer/Spawn.sql similarity index 100% rename from NPC/Spirit Healer/Spawn.sql rename to Spirit Healer/Spirit Healer/Spawn.sql