PDA

View Full Version : [Lua] Mage of the Elements



Alvanaar
27-08-09, 02:55 AM
Hai thar!
This is just a quick script that I put together which I quite like. It is a Lua script of a mage that, when it enters combat, has a random chance of being a fire, ice, or arcane mage.
One feature I like about it is that, if it gets "specced" arcane, then it has the spell Polymorph. However, the Polymorph spell has a random chance to be either a, cat, serpent, turkey, sheep, turtle, or a rabbit polymorph.
I have included an SQL query. Execute it to your database, but...
In this script you can define the creatures health, mana, faction, scale and display ID. If you leave them to 0 or blank then the value remains as in the SQL for the creature.
Note: You must execute an SQL for the creature either way.
In the SQL I've provided, its entry ID is 12345

Here is the Lua:

-- 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:

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. :)

Enjoy,
Alvanaar

Apple
27-08-09, 02:55 AM
hmm , nice one +rep

Alvanaar
27-08-09, 03:03 AM
Thanks. :)

Bump.