Code:
-- Mage of the Elements --
-- Scripted by Alvanaar --
--[[ !> Ensure you exectue my provided SQL <! ]]--
local MAGE_ENTRYID = 12345 -- Change to the mage's entry ID
-- Define the mage's health, mana, displayID, scale and faction.
-- Note: If you leave the following blank they will stay the same as
-- in the SQL I provided.
-- -- -- -- -- -- -- -- -- --
local MAGE_HEALTH = 500000 -- change to your desired mage's HEALTH. Or leave blank or 0.
local MAGE_MANA = 125000 -- change to your desired mage's MANA. Or leave blank or 0.
local MAGE_DISPLAY = 00000 -- change to your desired mage's DISPLAY ID. Or leave blank or 0.
local MAGE_SCALE = 1.2 -- change to your desired mage's SCALE. Or leave blank or 0.
local MAGE_FACTION = 14 -- change to your desired mage's FACTION. Or leave blank or 0.
-- Don't edit below here, unless you know what you're doing :) --
function Mage_OnCombat(unit, event)
if (RandSpec() == "Fire") then
unit:RegisterEvent("FireBall", math.random(7000, 9000), 0)
unit:RegisterEvent("FireBlast", math.random(10000, 12000), 0)
unit:RegisterEvent("BlastWave", math.random(13000, 15000), 0)
unit:RegisterEvent("DragonBreath", math.random(16000, 17500), 0)
end
if (RandSpec() == "Frost") then
unit:RegisterEvent("FrostBolt", math.random(10000, 12000), 0)
unit:RegisterEvent("Blizzard", math.random(13000, 14500), 0)
unit:RegisterEvent("FrostNova", math.random(7000, 9000), 0)
unit:RegisterEvent("ConeOfCold", 9000, 0)
end
if (RandSpec() == "Arcane") then
unit:RegisterEvent("ArcaneBlast", math.random(9000, 11000), 0)
unit:RegisterEvent("ArcaneMissiles", math.random(14000, 15000), 0)
unit:RegisterEvent("ArcaneExplosion", math.random(11000, 12000), 0)
unit:RegisterEvent("Polymorph", math.random(15000, 18000), 0)
end
end
function Mage_OnLeaveCombat(unit, event)
unit:RemoveEvents()
end
function Mage_OnDied(unit, event)
local chance = math.random(1, 6)
if (chance == 1) then
local tank = unit:GetMainTank()
if (tank ~= nil) then
unit:SendChatMessage(12, 0, "You got lucky, "..tank:GetName().."!")
else
unit:SendChatMessage(12, 0, "You got lucky this time!")
end
end
if (chance == 2) then
unit:SendChatMessage(12, 0, "How can this be?!")
end
if (chance == 3) then
unit:SendChatMessage(12, 0, "I... cannot... believe it!")
end
if (chance == 4) then
end
if (chance == 5) then
end
if (chance == 6) then
local tank = unit:GetMainTank()
if (tank ~= nil) then
unit:SendChatMessageToPlayer(15, 0, "You will be destroyed next time, "..tank:GetName().."!", tank)
else
unit:SendChatMessage(12, 0, "You won't last much longer!")
end
end
unit:RemoveEvents()
end
function Mage(unit, event)
if (MAGE_HEALTH ~= nil or MAGE_HEALTH ~= 0) then
unit:SetHealth(MAGE_HEALTH)
end
if (MAGE_MANA ~= nil or MAGE_MANA ~= 0) then
unit:SetMana(MAGE_MANA)
end
if (MAGE_SCALE ~= nil or MAGE_SCALE ~= 0) then
unit:SetScale(MAGE_SCALE)
end
if (MAGE_DISPLAY ~= nil or MAGE_DISPLAY ~= 0) then
unit:SetModel(MAGE_DISPLAY)
end
if (MAGE_FACTION ~= nil or MAGE_FACTION ~= 0) then
unit:SetFaction(MAGE_FACTION)
end
end
RegisterUnitEvent(MAGE_ENTRYID, 1, "Mage_OnCombat")
RegisterUnitEvent(MAGE_ENTRYID, 2, "Mage_OnLeaveCombat")
RegisterUnitEvent(MAGE_ENTRYID, 4, "Mage_OnDied")
RegisterUnitEvent(MAGE_ENTRYID, 18, "Mage")
-- Fire spells --
function FireBall(unit, event)
local tank = unit:GetMainTank()
if (tank ~= nil) then
unit:FullCastSpellOnTarget(61909, tank)
end
end
function FireBlast(unit, event)
local tank = unit:GetMainTank()
if (tank ~= nil) then
unit:FullCastSpellOnTarget(20679, tank)
end
end
function BlastWave(unit, event)
unit:FullCastSpell(38536)
end
function DragonBreath(unit, event)
unit:FullCastSpell(37289)
end
-- Frost spells --
function FrostBolt(unit, event)
local tank = unit:GetMainTank()
if (tank ~= nil) then
unit:FullCastSpellOnTarget(65807, tank)
end
end
function Blizzard(unit, event)
unit:FullCastSpell(56936)
end
function ConeOfCold(unit, event)
unit:FullCastSpell(65023)
end
function FrostNova(unit, event)
unit:FullCastSpell(43426)
end
-- Arcane spells --
function ArcaneBlast(unit, event)
local tank = unit:GetMainTank()
if (tank ~= nil) then
unit:FullCastSpellOnTarget(56969, tank)
end
end
function ArcaneExplosion(unit, event)
unit:FullCastSpell(59245)
end
function ArcaneMissiles(unit, event)
local tank = unit:GetMainTank()
if (tank ~= nil) then
unit:FullCastSpellOnTarget(42846, tank)
end
end
function Polymorph(unit, event)
local tank, polytype = unit:GetMainTank(), math.random(1, 6)
if (tank ~= nil) then
if (polytype == 1) then
unit:FullCastSpellOnTarget(12826, tank)
end
if (polytype == 2) then
unit:FullCastSpellOnTarget(28271, tank)
end
if (polytype == 3) then
unit:FullCastSpellOnTarget(61780, tank)
end
if (polytype == 4) then
unit:FullCastSpellOnTarget(28272, tank)
end
if (polytype == 5) then
unit:FullCastSpellOnTarget(61721, tank)
end
if (polytype == 6) then
unit:FullCastSpellOnTarget(61305, tank)
end
end
end
function RandSpec()
local specvar = math.random(1, 3)
if (specvar == 1) then
return "Fire"
end
if (specvar == 2) then
return "Frost"
end
if (specvar == 3) then
return "Arcane"
end
end
Here is the SQL:
Code:
insert into `creature_names` (`entry`, `name`, `subname`, `info_str`, `Flags1`, `type`, `family`, `rank`, `unk4`, `spelldataid`, `male_displayid`, `female_displayid`, `male_displayid2`, `female_displayid2`, `unknown_float1`, `unknown_float2`, `civilian`, `leader`)
values ('12345', "Mage of the Elements", "", '', '0', '10', '0', '1', '0', '0', '2561', '0', '0', '0', '1', '1', '0', '0');
insert into `creature_proto` (`entry`, `minlevel`, `maxlevel`, `faction`, `minhealth`, `maxhealth`, `mana`, `scale`, `npcflags`, `attacktime`, `attacktype`, `mindamage`, `maxdamage`, `can_ranged`, `rangedattacktime`, `rangedmindamage`, `rangedmaxdamage`, `respawntime`, `armor`, `resistance1`, `resistance2`, `resistance3`, `resistance4`, `resistance5`, `resistance6`, `combat_reach`, `bounding_radius`, `auras`, `boss`, `money`, `invisibility_type`, `death_state`, `walk_speed`, `run_speed`, `fly_speed`, `extra_a9_flags`, `spell1`, `spell2`, `spell3`, `spell4`, `spell_flags`, `modImmunities`)
values ('12345', '80', '80', '14', '400000', '400000', '100000', '1', '0', '2800', '0', '1500', '2000', '0', '0', '0', '0', '300000', '5000', '0', '0', '0', '0', '0', '0', '0', '0', "0", '0', '1750000', '0', '0', '2.50', '8.00', '14.00', '0', '0', '0', '0', '0', '0', '0');
I haven't got around to testing this yet, though it should work. Please report any bugs to me.
Bookmarks