Code:
--*****************************************
--*UniversalTeleNPC script by Oxin v1.2 *
--* AspireDev.org *
--*Made for UniversalWoW(www.universal-wow.com) *
--*Everyone is free to distribute and modify to their *
--*needs but please leave the original credits *
--*****************************************
local npcid = 200000
local menunum = 33310
local menuicon = 4
local teleicon = 2
local menu =
{
{"Alliance Cities",
{
{"Azshara Crater", 37, 1155.63, 190.085, 362.316},
{"Darnassus", 1, 9943.809570, 2275.350098, 1341.390015},
{"Exodar", 530, -3792.557861, -11691.3, -105.241},
{"Ironforge", 0, -4977.095215, -888.452942, 501.621216},
{"Stormwind", 0, -8967.320313, 566.548889, 93.855125},
{"Shattrath ", 530, -1852.87, 5428.84, -10.4639},
}
},
{"Places of Interest",
{
{"Southshore", 0, -940.062, -574.630, 0.262463},
{"Hyjal", 0, 4618.64, -3847.98, 943.955},
{"The Crypt", 0, -11034.2, -1528.67, 33.2137},
}
},
{"New Entry",
{
{"another area", map, x, y, z},
{"another area", map, x, y, z},
{"another area", map, x, y, z},
}
},
}
function TeleNPC_MainMenu(Unit, Player)
local i = 0
Unit:GossipCreateMenu(menunum, Player, 0)
for k,v in pairs(menu) do
i = i + 1
if type(v[2]) == "table" then
Unit:GossipMenuAddItem(menuicon, v[1], i, 0)
i = i + #(v[2])
else
Unit:GossipMenuAddItem(teleicon, v[1], i, 0)
end
end
Unit:GossipSendMenu(Player)
end
function TeleNPC_SubMenu(Unit, Player, i, Submenu)
Unit:GossipCreateMenu(menunum-i, Player, 0)
Unit:GossipMenuAddItem(7, "<--Back", 0, 0)
for k,v in pairs(Submenu) do
i = i + 1
Unit:GossipMenuAddItem(teleicon, v[1], i, 0)
end
Unit:GossipSendMenu(Player)
end
function TeleNPC_OnGossipTalk(Unit, Event, Player)
TeleNPC_MainMenu(Unit, Player)
end
function TeleNPC_OnGossipSelect(Unit, Event, Player, MenuId, Id, Code)
local i = 0
if(Id == 0) then
TeleNPC_MainMenu(Unit,Player)
else
for k,v in pairs(menu) do
i = i + 1
if (Id == i) then
if type(v[2]) == "table" then
TeleNPC_SubMenu(Unit, Player, i, v[2])
else
if Player:IsInCombat() then
Unit:SendChatMessage(12, 0, "You can't teleport while in combat!")
else
Player:Teleport(v[2], v[3], v[4], v[5])
end
Unit:GossipComplete(Player)
end
return
elseif (type(v[2]) == "table") then
for j,w in pairs(v[2]) do
i = i + 1
if (Id == i) then
if Player:IsInCombat() then
Unit:SendChatMessage(12, 0, "You can't teleport while in combat!")
else
Player:Teleport(w[2], w[3], w[4], w[5])
end
Unit:GossipComplete(Player)
return
end
end
end
end
end
end
RegisterUnitGossipEvent(55557, 1, "TeleNPC_OnGossipTalk")
RegisterUnitGossipEvent(55557, 2, "TeleNPC_OnGossipSelect")
This is my altered version, first one I've found to work as an lua on the latest repack with 2.4.3 patch.