108 lignes
3,1 Kio
Lua
108 lignes
3,1 Kio
Lua
local GetTime = debugprofilestop
|
|
QuestHelper_File["teleport.lua"] = "4.0.1.$svnversion$"
|
|
QuestHelper_Loadtime["teleport.lua"] = GetTime()
|
|
|
|
function QuestHelper:CreateTeleportInfo()
|
|
local info = self:CreateTable()
|
|
info.node = self:CreateTable()
|
|
info.reag = self:CreateTable()
|
|
return info
|
|
end
|
|
|
|
function QuestHelper:ReleaseTeleportInfo(info)
|
|
for _, data in pairs(info.node) do
|
|
self:ReleaseTable(data)
|
|
end
|
|
|
|
self:ReleaseTable(info.node)
|
|
self:ReleaseTable(info.reag)
|
|
self:ReleaseTable(info)
|
|
end
|
|
|
|
function QuestHelper:TeleportInfoClear(info)
|
|
for node, data in pairs(info.node) do
|
|
self:ReleaseTable(data)
|
|
info.node[node] = nil
|
|
end
|
|
|
|
for id in pairs(info.reag) do
|
|
info.reag[id] = nil
|
|
end
|
|
end
|
|
|
|
function QuestHelper:SetTeleportInfoTarget(info,
|
|
node, -- The world graph node this will take us to.
|
|
start, -- The last time this spell was used.
|
|
duration, -- How long the spell cooldown is.
|
|
cast, -- How long does the spell take to cast.
|
|
reagent_id) -- What reagent is consumed by using the spell (can be nil)
|
|
local data = info.node[node]
|
|
if not data then data = self:CreateTable() info.node[node] = data end
|
|
|
|
data[1], data[2], data[3], data[4] = start, duration, cast, reagent_id
|
|
end
|
|
|
|
function QuestHelper:SetTeleportInfoReagent(info, reagent_id, count)
|
|
if count > 0 then
|
|
info.reag[reagent_id] = count
|
|
else
|
|
info.reag[reagent_id] = nil
|
|
end
|
|
end
|
|
|
|
function QuestHelper:TeleportInfoUseNode(info, node, time_delta)
|
|
local data = info.node[node]
|
|
if data then
|
|
self:TextOut("Used "..(node.name or "unnamed node").." in path.")
|
|
|
|
data[1] = time()+time_delta
|
|
if data[3] then
|
|
local count = info.reag[data[3]] or 0
|
|
count = count - 1
|
|
if count > 1 then
|
|
info.reag[data[4]] = count
|
|
else
|
|
info.reag[data[4]] = nil
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function QuestHelper:TeleportInfoTransfer(original, dest)
|
|
for key in pairs(dest.node) do
|
|
if not original.node[key] then
|
|
self:ReleaseTable(dest.node[key])
|
|
dest.node[key] = nil
|
|
end
|
|
end
|
|
|
|
for key, data in pairs(original.node) do
|
|
local data2 = dest.node[key]
|
|
if not data2 then
|
|
data2 = self:CreateTable()
|
|
dest.node[key] = data2
|
|
end
|
|
data2[1], data2[2], data2[3], data2[4] = data[1], data[2], data[3], data[4]
|
|
end
|
|
|
|
for key in pairs(dest.reag) do
|
|
if not original.reag[key] then
|
|
dest.reag[key] = nil
|
|
end
|
|
end
|
|
|
|
for key, value in pairs(original.reag) do
|
|
dest.reag[key] = value
|
|
end
|
|
end
|
|
|
|
function QuestHelper:TeleportInfoAddGraphPoints(info, graph, end_list, time_delta)
|
|
for node, data in pairs(info.node) do
|
|
if data[1]+data[2] >= time_delta+time() and (not data[4] or (data[4] and info.reag[data[4]])) then
|
|
self:TextOut("Considering "..(node.name or "unnamed node").." for use in pathing.")
|
|
graph:AddStartNode(node, data[3], end_list)
|
|
end
|
|
end
|
|
end
|
|
|
|
QuestHelper.teleport_info = QuestHelper:CreateTeleportInfo()
|