Mercurial > wow > ouroloot
comparison core.lua @ 6:df3e27edbd60
Much work on history tab.
author | Farmbuyer of US-Kilrogg <farmbuyer@gmail.com> |
---|---|
date | Wed, 15 Jun 2011 03:59:13 +0000 |
parents | 7adbc59de8fe |
children | 30ba1f35e164 |
comparison
equal
deleted
inserted
replaced
5:7adbc59de8fe | 6:df3e27edbd60 |
---|---|
16 user-facing code, ones with lowercase names are "one step removed", and | 16 user-facing code, ones with lowercase names are "one step removed", and |
17 names with leading underscores are strictly internal helper functions. | 17 names with leading underscores are strictly internal helper functions. |
18 ------ Saved variables | 18 ------ Saved variables |
19 ------ Constants | 19 ------ Constants |
20 ------ Addon member data | 20 ------ Addon member data |
21 ------ Locals | 21 ------ Globals |
22 ------ Expiring caches | 22 ------ Expiring caches |
23 ------ Ace3 framework stuff | 23 ------ Ace3 framework stuff |
24 ------ Event handlers | 24 ------ Event handlers |
25 ------ Slash command handler | 25 ------ Slash command handler |
26 ------ On/off | 26 ------ On/off |
82 | 82 |
83 ------ Addon member data | 83 ------ Addon member data |
84 local flib = LibStub("LibFarmbuyer") | 84 local flib = LibStub("LibFarmbuyer") |
85 addon.author_debug = flib.author_debug | 85 addon.author_debug = flib.author_debug |
86 | 86 |
87 -- Play cute games with namespaces here just to save typing. | 87 -- Play cute games with namespaces here just to save typing. WTB Lua 5.2 PST. |
88 do local _G = _G setfenv (1, addon) | 88 do local _G = _G setfenv (1, addon) |
89 | 89 |
90 revision = 15 | 90 revision = 15 |
91 ident = "OuroLoot2" | 91 ident = "OuroLoot2" |
92 identTg = "OuroLoot2Tg" | 92 identTg = "OuroLoot2Tg" |
147 | 147 |
148 addon = LibStub("AceAddon-3.0"):NewAddon(addon, "Ouro Loot", | 148 addon = LibStub("AceAddon-3.0"):NewAddon(addon, "Ouro Loot", |
149 "AceTimer-3.0", "AceComm-3.0", "AceConsole-3.0", "AceEvent-3.0") | 149 "AceTimer-3.0", "AceComm-3.0", "AceConsole-3.0", "AceEvent-3.0") |
150 | 150 |
151 | 151 |
152 ------ Locals | 152 ------ Globals |
153 local g_loot = nil | 153 local g_loot = nil |
154 local g_restore_p = nil | 154 local g_restore_p = nil |
155 local g_saved_tmp = nil -- restoring across a clear | 155 local g_saved_tmp = nil -- restoring across a clear |
156 local g_wafer_thin = nil -- for prompting for additional rebroadcasters | 156 local g_wafer_thin = nil -- for prompting for additional rebroadcasters |
157 local g_today = nil -- "today" entry in g_loot | 157 local g_today = nil -- "today" entry in g_loot |
324 if opts[opt] == nil then | 324 if opts[opt] == nil then |
325 opts[opt] = default | 325 opts[opt] = default |
326 end | 326 end |
327 end | 327 end |
328 option_defaults = nil | 328 option_defaults = nil |
329 -- transition/remove old options | 329 -- transition&remove old options |
330 opts["forum_use_itemid"] = nil | 330 opts["forum_use_itemid"] = nil |
331 if opts["forum_format"] then | 331 if opts["forum_format"] then |
332 opts.forum["Custom..."] = opts["forum_format"] | 332 opts.forum["Custom..."] = opts["forum_format"] |
333 opts["forum_format"] = nil | 333 opts["forum_format"] = nil |
334 end | 334 end |
346 | 346 |
347 self.history_all = self.history_all or OuroLootSV_hist or {} | 347 self.history_all = self.history_all or OuroLootSV_hist or {} |
348 local r = assert(GetRealmName()) | 348 local r = assert(GetRealmName()) |
349 self.history_all[r] = self:_prep_new_history_category (self.history_all[r], r) | 349 self.history_all[r] = self:_prep_new_history_category (self.history_all[r], r) |
350 self.history = self.history_all[r] | 350 self.history = self.history_all[r] |
351 OuroLootSV_hist = nil | 351 --OuroLootSV_hist = nil |
352 | 352 |
353 _init(self) | 353 _init(self) |
354 self.OnInitialize = nil | 354 self.OnInitialize = nil |
355 end | 355 end |
356 | 356 |
357 function addon:OnEnable() | 357 function addon:OnEnable() |
358 --if not OuroLootSV_hist.PLAYER_LOGOUT then print"did not safely logout?" end; OuroLootSV_hist.PLAYER_LOGOUT = nil | |
358 self:RegisterEvent "PLAYER_LOGOUT" | 359 self:RegisterEvent "PLAYER_LOGOUT" |
359 self:RegisterEvent "RAID_ROSTER_UPDATE" | 360 self:RegisterEvent "RAID_ROSTER_UPDATE" |
360 | 361 |
361 -- Cribbed from Talented. I like the way jerry thinks: the first argument | 362 -- Cribbed from Talented. I like the way jerry thinks: the first argument |
362 -- can be a format spec for the remainder of the arguments. (The new | 363 -- can be a format spec for the remainder of the arguments. (The new |
403 or (g_loot.forum and g_loot.forum ~= "") | 404 or (g_loot.forum and g_loot.forum ~= "") |
404 or (g_loot.attend and g_loot.attend ~= "") | 405 or (g_loot.attend and g_loot.attend ~= "") |
405 then | 406 then |
406 g_loot.autoshard = self.sharder | 407 g_loot.autoshard = self.sharder |
407 g_loot.threshold = self.threshold | 408 g_loot.threshold = self.threshold |
408 --OuroLootSV = g_loot | |
409 --for i,e in ipairs(OuroLootSV) do | |
410 for i,e in ipairs(g_loot) do | 409 for i,e in ipairs(g_loot) do |
411 e.cols = nil | 410 e.cols = nil |
412 end | 411 end |
413 OuroLootSV = g_loot | 412 OuroLootSV = g_loot |
414 end | 413 end |
415 self.history.kind = nil | 414 for r,t in pairs(self.history_all) do if type(t) == 'table' then |
416 self.history.st = nil | 415 t.realm = nil |
417 self.history.byname = nil | 416 t.st = nil |
417 t.byname = nil | |
418 end end | |
418 OuroLootSV_hist = self.history_all | 419 OuroLootSV_hist = self.history_all |
420 --OuroLootSV_hist.PLAYER_LOGOUT = true | |
419 end | 421 end |
420 | 422 |
421 function addon:RAID_ROSTER_UPDATE (event) | 423 function addon:RAID_ROSTER_UPDATE (event) |
422 if GetNumRaidMembers() > 0 then | 424 if GetNumRaidMembers() > 0 then |
423 local inside,whatkind = IsInInstance() | 425 local inside,whatkind = IsInInstance() |
444 -- helper for CHAT_MSG_LOOT handler | 446 -- helper for CHAT_MSG_LOOT handler |
445 do | 447 do |
446 -- Recent loot cache | 448 -- Recent loot cache |
447 addon.recent_loot = create_new_cache ('loot', comm_cleanup_ttl) | 449 addon.recent_loot = create_new_cache ('loot', comm_cleanup_ttl) |
448 | 450 |
449 local GetItemInfo = GetItemInfo | 451 local GetItemInfo, GetItemIcon = GetItemInfo, GetItemIcon |
450 | 452 |
451 -- 'from' and onwards only present if this is triggered by a broadcast | 453 -- 'from' and onwards only present if this is triggered by a broadcast |
452 function addon:_do_loot (local_override, recipient, itemid, count, from, extratext) | 454 function addon:_do_loot (local_override, recipient, itemid, count, from, extratext) |
453 local iname, ilink, iquality, _,_,_,_,_,_, itexture = GetItemInfo(itemid) | 455 local itexture = GetItemIcon(itemid) |
454 if not iname then return end -- sigh | 456 --local iname, ilink, iquality, _,_,_,_,_,_, itexture = GetItemInfo(itemid) |
457 local iname, ilink, iquality = GetItemInfo(itemid) | |
458 if (not iname) or (not itexture) then | |
459 iname, ilink, iquality, itexture = | |
460 UNKNOWN..': '..itemid, 'item:6948', ITEM_QUALITY_COMMON, [[ICONS\INV_Misc_QuestionMark]] | |
461 end | |
455 self.dprint('loot',">>_do_loot, R:", recipient, "I:", itemid, "C:", count, "frm:", from, "ex:", extratext) | 462 self.dprint('loot',">>_do_loot, R:", recipient, "I:", itemid, "C:", count, "frm:", from, "ex:", extratext) |
456 | 463 |
457 local i | 464 local i |
458 itemid = tonumber(ilink:match("item:(%d+)")) | 465 itemid = tonumber(ilink:match("item:(%d+)")) |
459 if local_override or ((iquality >= self.threshold) and not opts.itemfilter[itemid]) then | 466 if local_override or ((iquality >= self.threshold) and not opts.itemfilter[itemid]) then |
1169 -- }, ...... | 1176 -- }, ...... |
1170 -- }, | 1177 -- }, |
1171 -- ["OtherRealm"] = ...... | 1178 -- ["OtherRealm"] = ...... |
1172 -- } | 1179 -- } |
1173 do | 1180 do |
1181 local tsort = table.sort | |
1182 local comp = function(L,R) return L.when > R.when end | |
1183 | |
1174 -- Builds the map of names to array indices, using passed table or | 1184 -- Builds the map of names to array indices, using passed table or |
1175 -- self.history, and stores the result into its 'byname' field. Also | 1185 -- self.history, and stores the result into its 'byname' field. Also |
1176 -- called from the GUI code at least once. | 1186 -- called from the GUI code at least once. |
1177 function addon:_build_history_names (opt_hist) | 1187 function addon:_build_history_names (opt_hist) |
1178 local hist = opt_hist or self.history | 1188 local hist = opt_hist or self.history |
1185 | 1195 |
1186 -- Prepares and returns table to be used as self.history. | 1196 -- Prepares and returns table to be used as self.history. |
1187 function addon:_prep_new_history_category (prev_table, realmname) | 1197 function addon:_prep_new_history_category (prev_table, realmname) |
1188 local t = prev_table or { | 1198 local t = prev_table or { |
1189 --kind = 'realm', | 1199 --kind = 'realm', |
1190 realm = realmname, | 1200 --realm = realmname, |
1191 } | 1201 } |
1202 t.realm = realmname | |
1192 | 1203 |
1193 --[[ | 1204 --[[ |
1194 t.cols = setmetatable({ | 1205 t.cols = setmetatable({ |
1195 { value = realmname }, | 1206 { value = realmname }, |
1196 }, self.time_column1_used_mt) | 1207 }, self.time_column1_used_mt) |
1202 | 1213 |
1203 return t | 1214 return t |
1204 end | 1215 end |
1205 | 1216 |
1206 -- Maps a name to an array index, creating new tables if needed. Returns | 1217 -- Maps a name to an array index, creating new tables if needed. Returns |
1218 -- the index and the table at that index. | |
1207 function addon:get_loot_history (name) | 1219 function addon:get_loot_history (name) |
1208 local i | 1220 local i |
1209 i = self.history.byname[name] | 1221 i = self.history.byname[name] |
1210 if not i then | 1222 if not i then |
1211 i = #self.history + 1 | 1223 i = #self.history + 1 |
1212 self.history[i] = { name=name } | 1224 self.history[i] = { name=name } |
1213 self.history.byname[name] = i | 1225 self.history.byname[name] = i |
1214 end | 1226 end |
1215 return self.history[i] | 1227 return i, self.history[i] |
1216 end | 1228 end |
1217 | 1229 |
1218 function addon:_addHistoryEntry (lootindex) | 1230 function addon:_addHistoryEntry (lootindex) |
1219 local e = g_loot[lootindex] | 1231 local e = g_loot[lootindex] |
1220 local h = self:get_loot_history(e.person) | 1232 if e.kind ~= 'loot' then return end |
1233 | |
1234 local i,h = self:get_loot_history(e.person) | |
1221 local n = { | 1235 local n = { |
1222 id = e.id, | 1236 id = e.id, |
1223 when = self:format_timestamp (g_today, e), | 1237 when = self:format_timestamp (g_today, e), |
1224 count = e.count, | 1238 count = e.count, |
1225 } | 1239 } |
1226 h[#h+1] = n | 1240 tinsert (h, 1, n) |
1241 end | |
1242 | |
1243 function addon:rewrite_history (realmname) | |
1244 local r = assert(realmname) | |
1245 self.history_all[r] = self:_prep_new_history_category (nil, r) | |
1246 self.history = self.history_all[r] | |
1247 | |
1248 local g_today_real = g_today | |
1249 for i,e in ipairs(g_loot) do | |
1250 if e.kind == 'time' then | |
1251 g_today = e | |
1252 elseif e.kind == 'loot' then | |
1253 self:_addHistoryEntry(i) | |
1254 end | |
1255 end | |
1256 g_today = g_today_real | |
1257 self.hist_clean = nil | |
1258 | |
1259 -- safety measure: resort players' tables based on formatted timestamp | |
1260 for i,h in ipairs(self.history) do | |
1261 tsort (h, comp) | |
1262 end | |
1263 end | |
1264 | |
1265 function addon:preen_history (realmname) | |
1266 local r = assert(realmname) | |
1267 for i,h in ipairs(self.history) do | |
1268 tsort (h, comp) | |
1269 while #h > 1 do | |
1270 tremove (h) | |
1271 end | |
1272 end | |
1227 end | 1273 end |
1228 end | 1274 end |
1229 | 1275 |
1230 | 1276 |
1231 ------ Player communication | 1277 ------ Player communication |