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()
10 function QuestHelper
:ReleaseTeleportInfo(info
)
11 for _
, data
in pairs(info
.node
) do
12 self
:ReleaseTable(data
)
15 self
:ReleaseTable(info
.node
)
16 self
:ReleaseTable(info
.reag
)
17 self
:ReleaseTable(info
)
20 function QuestHelper
:TeleportInfoClear(info
)
21 for node
, data
in pairs(info
.node
) do
22 self
:ReleaseTable(data
)
26 for id
in pairs(info
.reag
) do
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
43 function QuestHelper
:SetTeleportInfoReagent(info
, reagent_id
, count
)
45 info
.reag
[reagent_id
] = count
47 info
.reag
[reagent_id
] = nil
51 function QuestHelper
:TeleportInfoUseNode(info
, node
, time_delta
)
52 local data
= info
.node
[node
]
54 self
:TextOut("Used "..(node
.name
or "unnamed node").." in path.")
56 data
[1] = GetTime()+time_delta
58 local count
= info
.reag
[data
[3]]
or 0
61 info
.reag
[data
[4]]
= count
63 info
.reag
[data
[4]]
= nil
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
])
77 for key
, data
in pairs(original
.node
) do
78 local data2
= dest
.node
[key
]
80 data2
= self
:CreateTable()
81 dest
.node
[key
] = data2
83 data2
[1], data2
[2], data2
[3], data2
[4] = data
[1], data
[2], data
[3], data
[4]
86 for key
in pairs(dest
.reag
) do
87 if not original
.reag
[key
] then
92 for key
, value
in pairs(original
.reag
) do
93 dest
.reag
[key
] = value
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()