mirror of
https://github.com/ElunaLuaEngine/Scripts
synced 2026-08-22 00:32:05 -04:00
71 lines
No EOL
3.1 KiB
Lua
71 lines
No EOL
3.1 KiB
Lua
local Teleporter = {
|
|
entry = 823 -- Unit entry
|
|
}
|
|
|
|
-- Do not edit anything below this line.
|
|
|
|
function Teleporter.OnHello(event, player, unit)
|
|
for k, v in pairs(Teleporter["Options"]) do
|
|
if(player:GetTeam() == v["faction"] or v["faction"] == -1) and ( v["parent"] == 0) then
|
|
player:GossipMenuAddItem(v["icon"], v["name"], 0, k)
|
|
end
|
|
end
|
|
player:GossipSendMenu(1, unit)
|
|
end
|
|
|
|
function Teleporter.OnSelect(event, player, unit, sender, intid, code)
|
|
local t = Teleporter["Options"]
|
|
|
|
if(intid == 0) then -- Special handling for "Back" option in case parent is 0
|
|
Teleporter.OnHello(event, player, unit)
|
|
elseif(t[intid]["type"] == 1) then
|
|
-- Hacky loops, but I want the results to be sorted damnit
|
|
for i = 1, 2 do
|
|
for k, v in pairs(t) do
|
|
if(v["parent"] == intid and v["type"] == i and (player:GetTeam() == v["faction"] or v["faction"] == -1)) then
|
|
player:GossipMenuAddItem(v["icon"], v["name"], 0, k)
|
|
end
|
|
end
|
|
end
|
|
player:GossipMenuAddItem(7, "[Back]", 0, t[intid]["parent"])
|
|
player:GossipSendMenu(1, unit)
|
|
elseif(t[intid]["type"] == 2) then
|
|
player:Teleport(t[intid]["map"], t[intid]["x"], t[intid]["y"], t[intid]["z"], t[intid]["o"])
|
|
end
|
|
end
|
|
|
|
function Teleporter.LoadCache()
|
|
Teleporter["Options"] = {}
|
|
|
|
if not(WorldDBQuery("SHOW TABLES LIKE 'eluna_teleporter';")) then
|
|
print("[E-SQL Teleporter]: eluna_teleporter table missing from world database.")
|
|
print("[E-SQL Teleporter]: Inserting table structure, initializing cache.")
|
|
WorldDBQuery("CREATE TABLE `eluna_teleporter` (`id` int(5) NOT NULL AUTO_INCREMENT,`parent` int(5) NOT NULL DEFAULT '0',`type` int(1) NOT NULL DEFAULT '1',`faction` int(2) NOT NULL DEFAULT '-1',`icon` int(2) NOT NULL DEFAULT '0',`name` char(20) NOT NULL DEFAULT '',`map` int(5) DEFAULT NULL,`x` decimal(10,3) DEFAULT NULL,`y` decimal(10,3) DEFAULT NULL,`z` decimal(10,3) DEFAULT NULL,`o` decimal(10,3) DEFAULT NULL,PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=latin1;")
|
|
return Teleporter.LoadCache();
|
|
end
|
|
|
|
local Query = WorldDBQuery("SELECT * FROM eluna_teleporter;")
|
|
if(Query) then
|
|
repeat
|
|
Teleporter["Options"][Query:GetUInt32(0)] = {
|
|
parent = Query:GetUInt32(1),
|
|
type = Query:GetUInt32(2),
|
|
faction = Query:GetInt32(3),
|
|
icon = Query:GetInt32(4),
|
|
name = Query:GetString(5),
|
|
map = Query:GetUInt32(6),
|
|
x = Query:GetFloat(7),
|
|
y = Query:GetFloat(8),
|
|
z = Query:GetFloat(9),
|
|
o = Query:GetFloat(10),
|
|
};
|
|
until not Query:NextRow()
|
|
print("[E-SQL Teleporter]: Cache initialized. Loaded "..Query:GetRowCount().." results.")
|
|
else
|
|
print("[E-SQL Teleporter]: Cache initialized. No results found.")
|
|
end
|
|
end
|
|
|
|
Teleporter.LoadCache()
|
|
RegisterCreatureGossipEvent(Teleporter.entry, 1, Teleporter.OnHello)
|
|
RegisterCreatureGossipEvent(Teleporter.entry, 2, Teleporter.OnSelect) |