Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local Beastmaster = {
- entry = 1000330, -- Beastmaster entry.
- maxObj = 13, -- 13 = Max amt. of menu objects.
- }
- function Beastmaster.OnHello(event, player, unit)
- -- Check whether the player is actually a hunter or not.
- if(player:GetClass() == 3) then
- -- Check if player is able to tame pets.
- if(player:HasSpell(1515)) then
- Beastmaster.GenerateMenu(1, player, unit);
- else
- player:SendBroadcastMessage("[Eluna Beastmaster]: You are not able to tame pets.")
- end
- else
- player:SendBroadcastMessage("[Eluna Beastmaster]: Only Hunters can use this service!")
- end
- end
- function Beastmaster.OnSelect(event, player, unit, sender, intid, code)
- -- Intid 0 is used solely for menu pages and 1 for pet selection.
- if(intid == 0) then
- Beastmaster.GenerateMenu(sender, player, unit);
- elseif(intid == 1) then
- -- Spawn a temporary, friendly version of the selected creature and force tame it.
- local pet = PerformIngameSpawn(1, sender, unit:GetMapId(), unit:GetInstanceId(), unit:GetX(), unit:GetY(), unit:GetZ(), unit:GetO(), false, 5000)
- pet:SetFaction(35)
- player:CastSpell(pet, 2650, true)
- player:GossipComplete()
- end
- end
- function Beastmaster.GenerateMenu(id, player, unit)
- local low = ((Beastmaster.maxObj*id)-Beastmaster.maxObj+1)
- local high = Beastmaster.maxObj*id
- -- Retrieve the current page sets' gossip option information.
- for i = low, high do
- local t = Beastmaster["Cache"][i]
- -- Do not list gossip options with creatures above the players level.
- if(player:GetLevel() >= t["level"]) then
- player:GossipMenuAddItem(2, "Level: "..t["level"].." - "..t["name"], t["entry"], 1)
- end
- end
- -- If the menu is not the first menu, show Previous button.
- if(id ~= 1) then
- player:GossipMenuAddItem(4, "<-- Previous", id-1, 0)
- end
- -- If the next menu has available objects and object is within player level, show Next button.
- if(Beastmaster["Cache"][high+1]) and (player:GetLevel() >= Beastmaster["Cache"][high+1]["level"]) then
- player:GossipMenuAddItem(4, "Next -->", id+1, 0)
- end
- player:GossipSendMenu(1, unit)
- end
- function Beastmaster.LoadCache()
- Beastmaster["Cache"] = {}
- local i = 1;
- local Query;
- if(GetCoreName() == "MaNGOS") then
- Query = WorldDBQuery("SELECT Entry, Name, MaxLevel FROM creature_template WHERE CreatureType=1 AND CreatureTypeFlags&1 <> 0 AND Family!=0 ORDER BY MaxLevel ASC;")
- elseif(GetCoreName() == "TrinityCore") then
- Query = WorldDBQuery("SELECT Entry, Name, MaxLevel FROM creature_template WHERE Type=1 AND Type_Flags&1 <> 0 AND Family!=0 ORDER BY MaxLevel ASC;")
- end
- if(Query) then
- repeat
- Beastmaster["Cache"][i] = {
- entry = Query:GetUInt32(0),
- name = Query:GetString(1),
- level = Query:GetUInt32(2)
- };
- i = i+1
- until not Query:NextRow()
- print("[Eluna Beastmaster]: Cache initialized. Loaded "..Query:GetRowCount().." tameable beasts.")
- else
- print("[Eluna Beastmaster]: Cache initialized. No results found.")
- end
- end
- Beastmaster.LoadCache()
- RegisterCreatureGossipEvent(Beastmaster.entry, 1, Beastmaster.OnHello)
- RegisterCreatureGossipEvent(Beastmaster.entry, 2, Beastmaster.OnSelect)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement