vanilla-wow-addons – Blame information for rev 1

Subversion Repositories:
Rev:
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