[COLOR="#808080"]
local npcid = 1000001;
local Testboss = {};
local phase1 = 80; -- moonkin
local phase2 = 60; -- cat
local phase3 = 50; -- moonkin
local phase4 = 30; -- cat
local phase5 = 15; -- tree
------------------------------------------------------------------
local function CastIfCan(caster, target, spell)
if (caster and target) and not caster:GetCurrentSpell(1) then --
caster:CastSpell(target, spell);
return true
end
return false
end
local function SetPower(event, duration, cycles, creature)
creature:SetMaxPower(3, 10000);
creature:SetPower(3, 10000);
end
------------------------------------------------------------------
-------------------
--Cat Form Spells--
-------------------
function Testboss.Claw(event, delay, pCall, creature)
CastIfCan(creature, creature:GetVictim(), 75159)
creature:RegisterEvent(Testboss.Claw, 1000, 1);
end
-----------------------------------------------------------------------
-----------------------
--Moonkin Form Spells--
-----------------------
function Testboss.Starfire(event, delay, pCall, creature)
creature:SendUnitYell("Feel the nature power", 1)
CastIfCan(creature, creature:GetVictim(), 65854)
end
function Testboss.Moonfire(event, delay, pCall, creature)
CastIfCan(creature, creature:GetVictim(), 48463)
end
function Testboss.Insectswarm(event, delay, pCall, creature)
CastIfCan(creature, creature:GetVictim(), 48468)
end
function Testboss.Innervate(event, delay, pCall, creature)
CastIfCan(creature, creature, 67943)
end
local function MoonkinSpells(event, duration, cycles, creature)
creature:RegisterEvent(Testboss.Starfire, 4000, 0);
creature:RegisterEvent(Testboss.Moonfire, 2000, 0);
creature:RegisterEvent(Testboss.Insectswarm, 7000, 0);
creature:RegisterEvent(Testboss.Innervate, 5000, 0);
creature:RegisterEvent(MoonkinSpells, 1000, 1)
end
--------------------------------------------------------------------
--------------------
--Tree Form Spells--
--------------------
function Testboss.Lifebloom(event, delay, pCall, creature)
CastIfCan(creature, creature, 67959) -- 48451)
end
local function TreeSpells(event, duration, cycles, creature)
creature:RegisterEvent(Testboss.Lifebloom, 1500, 3) -- the stacking of the spell
creature:RegisterEvent(TreeSpells, 30000, 1); -- the delay between stacked spell
end
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
--------------------
--Shapeshift Forms--
--------------------
function Testboss.Catform(event, delay, pCall, creature)
creature:SendUnitYell("Time to shave my nails upon your skin", 1)
CastIfCan(creature, creature, 32356)
creature:RegisterEvent(Testboss.Claw, 1000, 1)
end
function Testboss.Moonkin(event, delay, pCall, creature)
CastIfCan(creature, creature, 62795)
creature:RegisterEvent(MoonkinSpells, 1000, 1)
end
function Testboss.Treeform(event, delay, pCall, creature)
CastIfCan(creature, creature, 53691)
creature:RegisterEvent(TreeSpells, 1000, 1)
end
---------------------------------------------------------------------
-----------------------------------------------------------------------
-----------
--Phases--
-----------
function Testboss.EnterCombat(event, creature, target)
creature:SendUnitYell("Are you serious? Are you really gonna try to kill me? LEAVE NOW OR DIE !!!", 1)
creature:RegisterEvent(Testboss.Catform, 1000, 1); -- Catform
creature:RegisterEvent(SetPower, 2000, 1) -- it must edit the power AFTER change of form
creature:RegisterEvent(Testboss.Claw, 1000, 1);
creature:RegisterEvent(function(...) Testboss.Phase(1, ...) end, 5000, 0)
end
function Testboss.KilledTarget(event, creature, victim)
creature:SendUnitYell("Feels good to be back alive", 1)
end
function Testboss.LeaveCombat(event, creature)
creature:RemoveEvents();
creature:DeMorph();
end
function Testboss.Died(event, creature, killer)
creature:RemoveEvents();
creature:SendUnitYell("Congratz, You have defeated me!", 1)
end
function Testboss.Phase(phaseid, event, delay, pCall, creature)
local pct = math.ceil(creature:GetHealthPct());
if (phaseid <= 1) and (pct <= phase1) then -- 80%
creature:RemoveEvents();
creature:RegisterEvent(SetPower, 2000, 1) -- it must edit the power AFTER change of form
creature:RegisterEvent(Testboss.Moonkin, 1000, 1)
creature:RegisterEvent(function(...) Testboss.Phase(2, ...) end, 5000, 0) -- note the phase 2 here
end
if (phaseid <= 2) and (pct <= phase2) then -- 60%
creature:RemoveEvents();
creature:RegisterEvent(SetPower, 2000, 1) -- it must edit the power AFTER change of form
creature:RegisterEvent(Testboss.Catform, 1000, 1);
creature:RegisterEvent(function(...) Testboss.Phase(3, ...) end, 5000, 0) -- note the phase 3 here
end
if (phaseid <= 3) and (pct <= phase3) then -- 50%
creature:RemoveEvents();
creature:RegisterEvent(SetPower, 2000, 1) -- it must edit the power AFTER change of form
creature:RegisterEvent(Testboss.Moonkin, 1000, 1)
creature:RegisterEvent(function(...) Testboss.Phase(4, ...) end, 5000, 0) -- note the phase 4 here
end
if (phaseid <= 4) and (pct <= phase4) then -- 30%
creature:RemoveEvents();
creature:RegisterEvent(SetPower, 2000, 1) -- it must edit the power AFTER change of form
creature:RegisterEvent(Testboss.Catform, 1000, 1)
creature:RegisterEvent(function(...) Testboss.Phase(5, ...) end, 5000, 0) -- note the phase 5 here
end
if (phaseid <= 5) and (pct <= phase5) then -- 15%
creature:RemoveEvents();
creature:RegisterEvent(SetPower, 2000, 1) -- it must edit the power AFTER change of form
creature:RegisterEvent(Testboss.Treeform, 1000, 1)
end
end
-----------------------------------------------------------------------
RegisterCreatureEvent(npcid, 1, Testboss.EnterCombat)
RegisterCreatureEvent(npcid, 2, Testboss.LeaveCombat)
RegisterCreatureEvent(npcid, 3, Testboss.KilledTarget)
RegisterCreatureEvent(npcid, 4, Testboss.Died)
[/COLOR]