vanilla-wow-addons – Blame information for rev 1
?pathlinks?
Rev | Author | Line No. | Line |
---|---|---|---|
1 | office | 1 | -- Handle tracking cycle fish |
2 | |||
3 | FishingBuddy.TrackingFrame = {}; |
||
4 | |||
5 | local GRAPH_HEIGHT = 120; |
||
6 | |||
7 | local trackingWordMap = { |
||
8 | ["WEEKLY"] = FishingBuddy.WEEKLY, |
||
9 | ["HOURLY"] = FishingBuddy.HOURLY, |
||
10 | [FishingBuddy.WEEKLY] = "WEEKLY", |
||
11 | [FishingBuddy.HOURLY] = "HOURLY", |
||
12 | }; |
||
13 | |||
14 | local byhours = { |
||
15 | [13759] = { |
||
16 | ["n"] = "Raw Nightfin Snapper", |
||
17 | ["c"] = { r = 0.5, g = 0.5, b = 1.0, a = 0.75 }, |
||
18 | }, |
||
19 | [13760] = { |
||
20 | ["n"] = "Raw Sunscale Salmon", |
||
21 | ["c"] = { r = 0.8, g = 0.8, b = 0.1, a = 0.75 }, |
||
22 | }, |
||
23 | }; |
||
24 | local byweeks = { |
||
25 | [13756] = { |
||
26 | ["n"] = "Raw Summer Bass", |
||
27 | ["c"] = { r = 1.0, g = 1.0, b = 0.0, a = 0.75 }, |
||
28 | }, |
||
29 | [13755] = { |
||
30 | ["n"] = "Winter Squid", |
||
31 | ["c"] = { r = 0.4, g = 0.1, b = 0.4, a = 0.75 }, |
||
32 | }, |
||
33 | }; |
||
34 | |||
35 | local function UntrackThis(id, name) |
||
36 | if ( not byhours[id] and not byweeks[id] ) then |
||
37 | for how in FishingBuddy_Info["FishTracking"] do |
||
38 | if ( FishingBuddy_Info["FishTracking"][how][id] ) then |
||
39 | FishingBuddy_Info["FishTracking"][how][id] = nil; |
||
40 | FishingBuddy.Print(FishingBuddy.NOTRACKMSG, name); |
||
41 | end |
||
42 | end |
||
43 | else |
||
44 | FishingBuddy.Message(FishingBuddy.NOTRACKERRMSG); |
||
45 | end |
||
46 | end |
||
47 | |||
48 | local function TrackThis(how, id, color, name) |
||
49 | if ( not FishingBuddy_Info["FishTracking"][how] ) then |
||
50 | FishingBuddy_Info["FishTracking"][how] = {}; |
||
51 | end |
||
52 | local limit = 23; |
||
53 | if ( how == "WEEKLY" ) then |
||
54 | limit = 52; |
||
55 | end |
||
56 | if ( not FishingBuddy_Info["FishTracking"][how][id] ) then |
||
57 | FishingBuddy_Info["FishTracking"][how][id] = {}; |
||
58 | FishingBuddy_Info["FishTracking"][how][id].data = {}; |
||
59 | for i=0,limit,1 do |
||
60 | FishingBuddy_Info["FishTracking"][how][id].data[i] = 0; |
||
61 | end |
||
62 | FishingBuddy_Info["FishTracking"][how][id].data.n = limit+1; |
||
63 | end |
||
64 | if ( name and not FishingBuddy_Info["FishTracking"][how][id].name ) then |
||
65 | FishingBuddy_Info["FishTracking"][how][id].name = name; |
||
66 | end |
||
67 | if ( color ) then |
||
68 | if ( type(color) == "string") then |
||
69 | local a = tonumber(string.sub(color,1,2),16); |
||
70 | local r = tonumber(string.sub(color,3,4),16); |
||
71 | local g = tonumber(string.sub(color,5,6),16); |
||
72 | local b = tonumber(string.sub(color,7,8),16); |
||
73 | color = { a = a, r = r, g = g, b = b }; |
||
74 | end |
||
75 | FishingBuddy_Info["FishTracking"][how][id].color = color; |
||
76 | end |
||
77 | end |
||
78 | |||
79 | FishingBuddy.Commands[FishingBuddy.TRACK] = {}; |
||
80 | FishingBuddy.Commands[FishingBuddy.TRACK].args = {}; |
||
81 | FishingBuddy.Commands[FishingBuddy.TRACK].args[1] = "[%w]+"; |
||
82 | FishingBuddy.Commands[FishingBuddy.TRACK].args[2] = "|c%x+|Hitem:%d+:%d+:%d+:%d+|h%[.-%]|h|r"; |
||
83 | FishingBuddy.Commands[FishingBuddy.TRACK].help = FishingBuddy.TRACKING_HELP; |
||
84 | FishingBuddy.Commands[FishingBuddy.TRACK].func = |
||
85 | function(how, fishlink) |
||
86 | if ( how and (how == FishingBuddy.HOURLY or |
||
87 | how == FishingBuddy.WEEKLY)) then |
||
88 | local c, i, n = FishingBuddy.SplitFishLink(fishlink); |
||
89 | if ( i ) then |
||
90 | TrackThis(trackingWordMap[how], i, c, n); |
||
91 | FishingBuddy.Print(FishingBuddy.TRACKINGMSG, n, how); |
||
92 | return true; |
||
93 | end |
||
94 | end |
||
95 | end; |
||
96 | FishingBuddy.Commands[FishingBuddy.NOTRACK] = {}; |
||
97 | FishingBuddy.Commands[FishingBuddy.NOTRACK].args = {}; |
||
98 | FishingBuddy.Commands[FishingBuddy.NOTRACK].args[1] = "|c%x+|Hitem:%d+:%d+:%d+:%d+|h%[.-%]|h|r"; |
||
99 | FishingBuddy.Commands[FishingBuddy.NOTRACK].help = FishingBuddy.TRACKING_HELP; |
||
100 | FishingBuddy.Commands[FishingBuddy.NOTRACK].func = |
||
101 | function(fishlink) |
||
102 | local c, i, n = FishingBuddy.SplitFishLink(fishlink); |
||
103 | if ( i ) then |
||
104 | UntrackThis(i, n); |
||
105 | return true; |
||
106 | end |
||
107 | end; |
||
108 | FishingBuddy.Commands[FishingBuddy.TRACKING] = {}; |
||
109 | FishingBuddy.Commands[FishingBuddy.TRACKING].help = FishingBuddy.TRACKING_HELP; |
||
110 | FishingBuddy.Commands[FishingBuddy.TRACKING].func = |
||
111 | function() |
||
112 | local pr = FishingBuddy.Print; |
||
113 | for jdx in FishingBuddy_Info["FishTracking"] do |
||
114 | local how = trackingWordMap[jdx]; |
||
115 | pr("Tracking "..how); |
||
116 | local ft = FishingBuddy_Info["FishTracking"]; |
||
117 | for id in ft[jdx] do |
||
118 | local name; |
||
119 | if ( ft[jdx][id].name ) then |
||
120 | name = ft[jdx][id].name; |
||
121 | else |
||
122 | name = id; |
||
123 | end |
||
124 | local line = name.."; "; |
||
125 | for k,v in ft[jdx][id].data do |
||
126 | line = line.." "..k..": "..v; |
||
127 | end |
||
128 | pr(line); |
||
129 | end |
||
130 | end |
||
131 | return true; |
||
132 | end; |
||
133 | |||
134 | FishingBuddy.InitTracking = function() |
||
135 | if ( not FishingBuddy_Info["FishTracking"] ) then |
||
136 | FishingBuddy_Info["FishTracking"] = { }; |
||
137 | end |
||
138 | for k,v in byhours do |
||
139 | TrackThis("HOURLY", k, v.c); |
||
140 | end |
||
141 | for k,v in byweeks do |
||
142 | TrackThis("WEEKLY", k, v.c); |
||
143 | end |
||
144 | end |
||
145 | |||
146 | FishingBuddy.AddTracking = function(id, name) |
||
147 | local ft = FishingBuddy_Info["FishTracking"]; |
||
148 | local index, how; |
||
149 | if ( ft["HOURLY"][id] ) then |
||
150 | how = "HOURLY"; |
||
151 | index,_ = GetGameTime(); |
||
152 | elseif ( ft["WEEKLY"][id] ) then |
||
153 | how = "WEEKLY"; |
||
154 | index = date("%W"); |
||
155 | else |
||
156 | return false; |
||
157 | end |
||
158 | if ( not FishingBuddy_Info["FishTracking"][how][id].name ) then |
||
159 | FishingBuddy_Info["FishTracking"][how][id].name = name; |
||
160 | end |
||
161 | index = tonumber(index); |
||
162 | |||
163 | local p = FishingBuddy.printable; |
||
164 | FishingBuddy_Info["FishTracking"][how][id].data[index] = |
||
165 | FishingBuddy_Info["FishTracking"][how][id].data[index] + 1; |
||
166 | return true; |
||
167 | end |
||
168 | |||
169 | local function PlotData(graph, num, bw, bs, tab, hlabels) |
||
170 | local plotem = {}; |
||
171 | local maxval = 0; |
||
172 | local width = 0; |
||
173 | local plotted = false; |
||
174 | local fdx = 1; |
||
175 | local line; |
||
176 | local mv = 0; |
||
177 | for _,info in tab do |
||
178 | plotem[fdx] = false; |
||
179 | -- our data is zero based... |
||
180 | local n = table.getn(info.data); |
||
181 | width = n * (bw+bs); |
||
182 | n = n - 1; |
||
183 | for idx=0,n do |
||
184 | if ( info.data[idx] > mv ) then |
||
185 | mv = info.data[idx]; |
||
186 | end |
||
187 | end |
||
188 | if ( mv > 0 ) then |
||
189 | if ( mv > maxval ) then |
||
190 | maxval = mv; |
||
191 | end |
||
192 | plotem[fdx] = true; |
||
193 | plotted = true; |
||
194 | end |
||
195 | fdx = fdx + 1; |
||
196 | end |
||
197 | local delta = math.mod(maxval, 5); |
||
198 | if ( delta > 0 ) then |
||
199 | maxval = maxval + (5 - delta); |
||
200 | end |
||
201 | graph.maxVal = maxval; |
||
202 | graph.barWidth = bw; |
||
203 | graph.barSpacing = bs; |
||
204 | local count = num; |
||
205 | fdx = 1; |
||
206 | for id, info in tab do |
||
207 | if ( count > 0 and plotem[fdx] ) then |
||
208 | local c = info.color or {}; |
||
209 | local item, texture, _, _, _ = FishingBuddy.GetFishie(id); |
||
210 | GraphHandler.PlotLegend(graph, num-count+1, info.name, id, |
||
211 | texture, c.r, c.g, c.b); |
||
212 | local w = GraphHandler.PlotData(graph, info.data, num-count, 1, |
||
213 | c.r, c.g, c.b); |
||
214 | if ( info.name ) then |
||
215 | if ( line ) then |
||
216 | line = line.." / "..info.name; |
||
217 | else |
||
218 | line = info.name; |
||
219 | end |
||
220 | end |
||
221 | count = count - 1; |
||
222 | end |
||
223 | fdx = fdx + 1; |
||
224 | end |
||
225 | if ( plotted ) then |
||
226 | local values = {}; |
||
227 | local delta = maxval/5; |
||
228 | for v=0,5 do |
||
229 | values[string.format("%d", v*delta)] = v; |
||
230 | end |
||
231 | GraphHandler.PlotGrid(graph, line or "", values, width, hlabels); |
||
232 | else |
||
233 | GraphHandler.PlotGrid(graph, FishingBuddy.NODATAMSG ); |
||
234 | end |
||
235 | return width, maxval, line; |
||
236 | end |
||
237 | |||
238 | FishingBuddy.TrackingFrame.OnShow = function() |
||
239 | local fi = FishingBuddy_Info["FishTracking"]; |
||
240 | local graph1 = getglobal("FishingTrackingFrameGraph1"); |
||
241 | local graph2 = getglobal("FishingTrackingFrameGraph2"); |
||
242 | |||
243 | PlotData(graph1, 2, 5, 5, fi["HOURLY"], |
||
244 | {["00:00"] = 0, ["06:00"] = 6, ["12:00"] = 12, ["18:00"] = 18, ["23:59"] = 24}); |
||
245 | PlotData(graph2, 2, 3, 2, fi["WEEKLY"], FishingBuddy.BYWEEKS_TABLE); |
||
246 | end |