Mercurial > wow > ouroloot
comparison core.lua @ 77:a07c9dd79f3a
Formalize the code handling unique ID collisions that turn out to not be avoidable with improv numbers. Turn on debug.comm and debug.loot with @debug@ markers.
author | Farmbuyer of US-Kilrogg <farmbuyer@gmail.com> |
---|---|
date | Mon, 11 Jun 2012 21:03:16 +0000 |
parents | 124da015c4a2 |
children | f8118aa5fbb8 |
comparison
equal
deleted
inserted
replaced
76:124da015c4a2 | 77:a07c9dd79f3a |
---|---|
141 .." welcome message will not intrude again." | 141 .." welcome message will not intrude again." |
142 local newer_warning = "A newer version has been released. You can %s to display" | 142 local newer_warning = "A newer version has been released. You can %s to display" |
143 .." a download URL for copy-and-pasting. You can %s to ping other raiders" | 143 .." a download URL for copy-and-pasting. You can %s to ping other raiders" |
144 .." for their installed versions (same as '/ouroloot ping' or clicking the" | 144 .." for their installed versions (same as '/ouroloot ping' or clicking the" |
145 .." 'Ping!' button on the options panel)." | 145 .." 'Ping!' button on the options panel)." |
146 local unique_collision = "|cffff1010%s:|r Item '%s' was carrying unique tag " | 146 local unique_collision = "|cffff1010%s:|r|nItem '%s' was carrying unique tag <%s>, but that was already in use; tried to generate a new tag and failed!|n|nRemote sender was '%s', previous cache entry was <%s/%s>.|n|nThis may require a live human to figure out; the loot in question has not been stored." |
147 .."<%s>, but that was already in use! (New sender was '%s', previous cache " | |
148 .."entry was <%s/%s>.) This may require a live human to figure out; the " | |
149 .."loot in question has not been stored." | |
150 local remote_chatty = "|cff00ff00%s|r changed %d/%s from %s%s|r to %s%s|r" | 147 local remote_chatty = "|cff00ff00%s|r changed %d/%s from %s%s|r to %s%s|r" |
151 local qualnames = { | 148 local qualnames = { |
152 ['gray'] = 0, ['grey'] = 0, ['poor'] = 0, ['trash'] = 0, | 149 ['gray'] = 0, ['grey'] = 0, ['poor'] = 0, ['trash'] = 0, |
153 ['white'] = 1, ['common'] = 1, | 150 ['white'] = 1, ['common'] = 1, |
154 ['green'] = 2, ['uncommon'] = 2, | 151 ['green'] = 2, ['uncommon'] = 2, |
193 flow = false, | 190 flow = false, |
194 notraid = false, | 191 notraid = false, |
195 cache = false, | 192 cache = false, |
196 alsolog = false, | 193 alsolog = false, |
197 } | 194 } |
195 --@debug@ | |
196 DEBUG_PRINT = true | |
197 debug.loot = true | |
198 debug.comm = true | |
199 --@end-debug@ | |
200 | |
198 -- This looks ugly, but it factors out the load-time decisions from | 201 -- This looks ugly, but it factors out the load-time decisions from |
199 -- the run-time ones. Args to [dp]print are concatenated with spaces. | 202 -- the run-time ones. Args to [dp]print are concatenated with spaces. |
200 if tekdebug then | 203 if tekdebug then |
201 function dprint (t,...) | 204 function dprint (t,...) |
202 if DEBUG_PRINT and debug[t] then | 205 if DEBUG_PRINT and debug[t] then |
335 local pprint, tabledump = addon.pprint, flib.tabledump | 338 local pprint, tabledump = addon.pprint, flib.tabledump |
336 local CopyTable, GetNumRaidMembers = _G.CopyTable, _G.GetNumRaidMembers | 339 local CopyTable, GetNumRaidMembers = _G.CopyTable, _G.GetNumRaidMembers |
337 -- En masse forward decls of symbols defined inside local blocks | 340 -- En masse forward decls of symbols defined inside local blocks |
338 local _register_bossmod, makedate, create_new_cache, _init, _log | 341 local _register_bossmod, makedate, create_new_cache, _init, _log |
339 local _history_by_loot_id, _notify_about_remote, _setup_unique_replace | 342 local _history_by_loot_id, _notify_about_remote, _setup_unique_replace |
343 local _unavoidable_collision | |
340 | 344 |
341 -- Try to extract numbers from the .toc "Version" and munge them into an | 345 -- Try to extract numbers from the .toc "Version" and munge them into an |
342 -- integral form for comparison. The result doesn't need to be meaningful as | 346 -- integral form for comparison. The result doesn't need to be meaningful as |
343 -- long as we can reliably feed two of them to "<" and get useful answers. | 347 -- long as we can reliably feed two of them to "<" and get useful answers. |
344 -- | 348 -- |
1376 self.dprint('loot', "substituting", unique, "with", replacement) | 1380 self.dprint('loot', "substituting", unique, "with", replacement) |
1377 else | 1381 else |
1378 i = g_uniques[unique] | 1382 i = g_uniques[unique] |
1379 local err = unique_collision:format (ERROR_CAPS, iname, unique, | 1383 local err = unique_collision:format (ERROR_CAPS, iname, unique, |
1380 tostring(from), tostring(i.loot), tostring(i.history)) | 1384 tostring(from), tostring(i.loot), tostring(i.history)) |
1381 self:Print(err) | 1385 _unavoidable_collision (err) |
1382 _G.PlaySoundFile ([[Interface\AddOns\Ouro_Loot\sfrr.ogg]], "master") | |
1383 -- Make sure this is logged one way or another | 1386 -- Make sure this is logged one way or another |
1384 ;(self.debug.loot and self.dprint or pprint)('loot', "COLLISION", prefix, err); | 1387 ;(self.debug.loot and self.dprint or pprint)('loot', "COLLISION", prefix, err); |
1385 ret1, ret2 = nil, err | 1388 ret1, ret2 = nil, err |
1386 break | 1389 break |
1387 end | 1390 end |
2473 g_unique_replace = gur | 2476 g_unique_replace = gur |
2474 _setup_unique_replace = nil | 2477 _setup_unique_replace = nil |
2475 end | 2478 end |
2476 end | 2479 end |
2477 | 2480 |
2481 do | |
2482 local clicky | |
2483 function _unavoidable_collision (err) | |
2484 -- This should happen so rarely that it's not worth moving into gui.lua | |
2485 if not StaticPopupDialogs["OUROL_COLLISION"] then | |
2486 StaticPopupDialogs["OUROL_COLLISION"] = flib.StaticPopup{ | |
2487 button1 = OKAY, | |
2488 } | |
2489 clicky = addon.format_hypertext( | |
2490 [[ SYSTEM FAILURE -- RELEASE RINZLER ]], "|cffff0000", | |
2491 function() StaticPopup_Show "OUROL_COLLISION" end) | |
2492 end | |
2493 StaticPopupDialogs["OUROL_COLLISION"].text = err | |
2494 _G.PlaySoundFile ([[Interface\AddOns\Ouro_Loot\sfrr.ogg]], "Master") | |
2495 addon:Print (" ") | |
2496 addon:Print (" ", clicky) | |
2497 addon:Print (" ") | |
2498 end | |
2499 end | |
2500 --function DOTEST() | |
2501 -- local err = unique_collision:format (ERROR_CAPS, | |
2502 -- "Codpiece of the Grimacing Lunatic", | |
2503 -- 'n3183021', 'Farmbuyer', '14', '78') | |
2504 -- _unavoidable_collision (err) | |
2505 -- pprint('ohfuck', "COLLISION", err) | |
2506 --end | |
2507 | |
2478 | 2508 |
2479 ------ Saved texts | 2509 ------ Saved texts |
2480 function addon:check_saved_table(silent_p) | 2510 function addon:check_saved_table(silent_p) |
2481 local s = _G.OuroLootSV_saved | 2511 local s = _G.OuroLootSV_saved |
2482 if s and (#s > 0) then return s end | 2512 if s and (#s > 0) then return s end |