update changes
[QuestHelper.git] / teleport.lua
blobb9d45c52aa8a1d10b38f6c499c4bfce5de06b3ee
1 QuestHelper_File["teleport.lua"] = "Development Version"
3 function QuestHelper:CreateTeleportInfo()
4 local info = self:CreateTable()
5 info.node = self:CreateTable()
6 info.reag = self:CreateTable()
7 return info
8 end
10 function QuestHelper:ReleaseTeleportInfo(info)
11 for _, data in pairs(info.node) do
12 self:ReleaseTable(data)
13 end
15 self:ReleaseTable(info.node)
16 self:ReleaseTable(info.reag)
17 self:ReleaseTable(info)
18 end
20 function QuestHelper:TeleportInfoClear(info)
21 for node, data in pairs(info.node) do
22 self:ReleaseTable(data)
23 info.node[node] = nil
24 end
26 for id in pairs(info.reag) do
27 info.reag[id] = nil
28 end
29 end
31 function QuestHelper:SetTeleportInfoTarget(info,
32 node, -- The world graph node this will take us to.
33 start, -- The last time this spell was used.
34 duration, -- How long the spell cooldown is.
35 cast, -- How long does the spell take to cast.
36 reagent_id) -- What reagent is consumed by using the spell (can be nil)
37 local data = info.node[node]
38 if not data then data = self:CreateTable() info.node[node] = data end
40 data[1], data[2], data[3], data[4] = start, duration, cast, reagent_id
41 end
43 function QuestHelper:SetTeleportInfoReagent(info, reagent_id, count)
44 if count > 0 then
45 info.reag[reagent_id] = count
46 else
47 info.reag[reagent_id] = nil
48 end
49 end
51 function QuestHelper:TeleportInfoUseNode(info, node, time_delta)
52 local data = info.node[node]
53 if data then
54 self:TextOut("Used "..(node.name or "unnamed node").." in path.")
56 data[1] = GetTime()+time_delta
57 if data[3] then
58 local count = info.reag[data[3]] or 0
59 count = count - 1
60 if count > 1 then
61 info.reag[data[4]] = count
62 else
63 info.reag[data[4]] = nil
64 end
65 end
66 end
67 end
69 function QuestHelper:TeleportInfoTransfer(original, dest)
70 for key in pairs(dest.node) do
71 if not original.node[key] then
72 self:ReleaseTable(dest.node[key])
73 dest.node[key] = nil
74 end
75 end
77 for key, data in pairs(original.node) do
78 local data2 = dest.node[key]
79 if not data2 then
80 data2 = self:CreateTable()
81 dest.node[key] = data2
82 end
83 data2[1], data2[2], data2[3], data2[4] = data[1], data[2], data[3], data[4]
84 end
86 for key in pairs(dest.reag) do
87 if not original.reag[key] then
88 dest.reag[key] = nil
89 end
90 end
92 for key, value in pairs(original.reag) do
93 dest.reag[key] = value
94 end
95 end
97 function QuestHelper:TeleportInfoAddGraphPoints(info, graph, end_list, time_delta)
98 for node, data in pairs(info.node) do
99 if data[1]+data[2] >= time_delta+GetTime() and (not data[4] or (data[4] and info.reag[data[4]])) then
100 self:TextOut("Considering "..(node.name or "unnamed node").." for use in pathing.")
101 graph:AddStartNode(node, data[3], end_list)
106 QuestHelper.teleport_info = QuestHelper:CreateTeleportInfo()