• This is a read only backup of the old Emudevs forum. If you want to have anything removed, please message me on Discord: KittyKaev

[SOLVED] Spell Cost no power for npc (lua)

Status
Not open for further replies.

Tok124

Respected Member
Hello, I want to know if its possible to make spells cost no power for npc. The reason why i want to know is because i wanna make a Druid Boss and before i only changed display to cat form/moonkin form but now i changed the script so it changes to the actuall forms. Because some spells is only useable in cat form and the npc cannot use the spells because even if i add mana to the creature when he goes in to cat form he lose all mana and he have no energy so he cannot go back to moonkin because he have no mana and he can't use cat form ability's because he have no energy. So i want to know if its possible to make the spells cost no power like (mana, rage, energy) or if it's possible to give the creature energy or rage with some lua command.
 

Tok124

Respected Member
Okey. Thanks for help guys ! However, The unit method did not work for me atleast.

I did add

unit:SetPower(3, 10000)

That should be setting energy to 10000 right? But for me it doesnt do it
 

slp13at420

Mad Scientist
did you define unit as the npc?

if you defined the creature as creature then it should be creature:SetPower(3, 10000)

3 for energy-power and 10000 would be how much to set it to.
 
Last edited:

Tok124

Respected Member
Thanks slp. Problem is solved now. However, The npc wont switch to boomkin form from cat form. I dont know why really
 
Last edited:

slp13at420

Mad Scientist
ok my idea I think may be right , it has to update the power AFTER it changes form:
Code:
local npcid = 1000001;
local Testboss = {};
local phase1 = 80;
local phase2 = 60;
local phase3 = 50;
local phase4 = 30;
local phase5 = 15;

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
--------------------
--Shapeshift Forms--
--------------------

function Testboss.Catform(event, delay, pCall, creature)
    CastIfCan(creature, creature, 768)
end

function Testboss.Moonkin(event, delay, pCall, creature)
    CastIfCan(creature, creature, 24858)
end

function Testboss.Treeform(event, delay, pCall, creature)
    CastIfCan(creature, creature, 65139)
end

---------------------------------------------------------------------

-------------------
--Cat Form Spells--
-------------------
function Testboss.Claw(event, delay, pCall, creature)
    creature:SendUnitYell("Time to shave my nails upon your skin", 1)
    CastIfCan(creature, creature:GetVictim(), 75159)
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, 29166)
end

--------------------------------------------------------------------

-----------------------------------------------------------------------

--------------------
--Tree Form Spells--
--------------------

function Testboss.Lifebloom(event, delay, pCall, creature)
    CastIfCan(creature, creature, 48451)
end

-----------------------------------------------------------------------------

-----------
--Phases--
-----------

function Testboss.EnterCombat(event, creature, target)
    creature:SendUnitYell("Are you serious? Are you really gonna try kill me? LEAVE NOW OR DIE !!!", 1)
	creature:RegisterEvent(Testboss.Catform, 1000, 1)
	creature:RegisterEvent(Testboss.Claw, 1000, 0)
	creature:RegisterEvent(function(...) Testboss.Phase(1, ...) end, 5000, 0)
	creature:RegisterEvent(SetPower, 2000, 1) -- it must edit the power AFTER change of form
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:SendUnitYell("Congratz, You have defeated me!", 1)
end

function Testboss.Phase(phaseid, event, delay, pCall, creature)
    if phaseid == 1 and creature:GetHealthPct() <= phase1 then
        creature:RemoveEvents()
		creature:SendUnitYell("I'm changing my form", 1)
		creature:RegisterEvent(Testboss.Moonkin, 1000, 1)
		creature:RegisterEvent(Testboss.Starfire, 4000, 1)
		creature:RegisterEvent(Testboss.Moonfire, 2000, 0)
		creature:RegisterEvent(Testboss.Innervate, 5000, 0)
		creature:RegisterEvent(Testboss.Insectswarm, 7000, 0)
		creature:RegisterEvent(function(...) Testboss.Phase(2, ...) end, 5000, 0) -- note the phase 2 here
    end
	
	if phaseid == 2 and creature:GetHealthPct() <= phase2 then
        creature:RemoveEvents()
		creature:RegisterEvent(Testboss.Catform, 1000, 1)
		creature:RegisterEvent(Testboss.Claw, 1000, 0)
		creature:RegisterEvent(function(...) Testboss.Phase(3, ...) end, 5000, 0) -- note the phase 3 here
	end
	
	if phaseid == 3 and creature:GetHealthPct() <= phase3 then
        creature:RemoveEvents()	 
		creature:RegisterEvent(Testboss.Moonkin, 1000, 1)
		creature:RegisterEvent(Testboss.Starfire, 4000, 1)
		creature:RegisterEvent(Testboss.Moonfire, 2000, 0)
		creature:RegisterEvent(Testboss.Innervate, 5000, 0)
		creature:RegisterEvent(Testboss.Insectswarm, 7000, 0)
		creature:RegisterEvent(function(...) Testboss.Phase(4, ...) end, 5000, 0) -- note the phase 4 here
	end
	
	if phaseid == 4 and creature:GetHealthPct() <= phase4 then
	    creature:RemoveEvents()
		creature:RegisterEvent(Testboss.Catform, 1000, 1)
		creature:RegisterEvent(Testboss.Claw, 1000, 0)
		creature:RegisterEvent(function(...) Testboss.Phase(5, ...) end, 5000, 0) -- note the phase 5 here
	end
	
	if phaseid == 5 and creature:GetHealthPct() <= phase5 then
        creature:RemoveEvents()	 
		creature:RegisterEvent(Testboss.Treeform, 1000, 1)
		creature:RegisterEvent(Testboss.Lifebloom, 1500, 3)
	end
end

-----------------------------------------------------------------------

RegisterCreatureEvent(npcid, 1, Testboss.EnterCombat)
RegisterCreatureEvent(npcid, 2, Testboss.LeaveCombat)
RegisterCreatureEvent(npcid, 3, Testboss.KilledTarget)
RegisterCreatureEvent(npcid, 4, Testboss.Died)

change `npcid` to your npc id
I added a function that does the updateing then just added another timed event that is delayed to the change form event in the entering combat function.
you may have to call the SetPower function after every form change.
 
Last edited:

slp13at420

Mad Scientist
the problem with changing form was within the spell id's:
Code:
[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]

updated - it changes to cat, then moonkin, then tree :D
its not perfect lol you may choose other form spells.
remember to set npcid to your npc id.
 
Last edited:
Status
Not open for further replies.
Top