Mercurial > wow > ouroloot
comparison core.lua @ 55:ac57a4342812
More people going to be looking at g_loot entries, so start cleaning up older fields a bit, and handle loading older data.
author | Farmbuyer of US-Kilrogg <farmbuyer@gmail.com> |
---|---|
date | Sat, 07 Apr 2012 05:40:20 +0000 |
parents | 6d5fcbdc0590 |
children | fcc0d0ff5832 |
comparison
equal
deleted
inserted
replaced
54:6d5fcbdc0590 | 55:ac57a4342812 |
---|---|
16 | 16 |
17 Time specific g_loot indices: | 17 Time specific g_loot indices: |
18 - startday table with month/day/year/text fields from makedate() | 18 - startday table with month/day/year/text fields from makedate() |
19 | 19 |
20 Boss specific g_loot indices: | 20 Boss specific g_loot indices: |
21 - bosskill name of boss/encounter; not necessarily a kill; | 21 - bossname name of boss/encounter; |
22 - may be changed if "snarky boss names" option is enabled | 22 - may be changed if "snarky boss names" option is enabled |
23 - reason wipe/kill ("pull" does not generate an entry) | 23 - reason wipe/kill ("pull" does not generate an entry) |
24 - instance name of instance, including size and difficulty | 24 - instance name of instance, including size and difficulty |
25 - duration in seconds; may be missing | 25 - duration in seconds; may be missing |
26 - raiderlist "Able, Baker, Charlie"; may be missing | 26 - raiderlist "Able, Baker, Charlie"; may be missing |
86 OuroLootSV_log = {} | 86 OuroLootSV_log = {} |
87 | 87 |
88 | 88 |
89 ------ Constants | 89 ------ Constants |
90 local option_defaults = { | 90 local option_defaults = { |
91 ['datarev'] = 15, -- cheating, this isn't actually an option | |
91 ['popup_on_join'] = true, | 92 ['popup_on_join'] = true, |
92 ['register_slashloot'] = true, | 93 ['register_slashloot'] = true, |
93 ['scroll_to_bottom'] = true, | 94 ['scroll_to_bottom'] = true, |
94 ['chatty_on_kill'] = false, | 95 ['chatty_on_kill'] = false, |
95 ['no_tracking_wipes'] = false, | 96 ['no_tracking_wipes'] = false, |
439 s:Print(virgin, s.format_hypertext('help',"click here",ITEM_QUALITY_UNCOMMON)) | 440 s:Print(virgin, s.format_hypertext('help',"click here",ITEM_QUALITY_UNCOMMON)) |
440 virgin = nil | 441 virgin = nil |
441 end,10,self) | 442 end,10,self) |
442 end | 443 end |
443 opts = OuroLootSV_opts | 444 opts = OuroLootSV_opts |
445 local stored_datarev = opts.datarev | |
444 for opt,default in pairs(option_defaults) do | 446 for opt,default in pairs(option_defaults) do |
445 if opts[opt] == nil then | 447 if opts[opt] == nil then |
446 opts[opt] = default | 448 opts[opt] = default |
447 end | 449 end |
448 end | 450 end |
505 end | 507 end |
506 end | 508 end |
507 end | 509 end |
508 self.history_all.HISTFORMAT = nil -- don't keep this in live data | 510 self.history_all.HISTFORMAT = nil -- don't keep this in live data |
509 --OuroLootSV_hist = nil | 511 --OuroLootSV_hist = nil |
512 | |
513 -- Handle changes to the stored data format, in stages from oldest to | |
514 -- newest. This won't look coherent until multiple stages are happening. | |
515 if stored_datarev == nil then | |
516 self:Print("Transitioning saved data format to 15...") | |
517 for i,e in ipairs(OuroLootSV) do | |
518 if e.bosskill then | |
519 e.bossname, e.bosskill = e.bosskill, nil | |
520 end | |
521 end | |
522 stored_datarev = 15 | |
523 end | |
524 --if stored_datarev == 15 then.... | |
510 | 525 |
511 _init(self) | 526 _init(self) |
512 self.dprint('flow', "version strings:", revision_large, self.status_text) | 527 self.dprint('flow', "version strings:", revision_large, self.status_text) |
513 self.OnInitialize = nil | 528 self.OnInitialize = nil |
514 end | 529 end |
799 -- this is set on various boss interactions, so we've got a kill/wipe | 814 -- this is set on various boss interactions, so we've got a kill/wipe |
800 -- entry already | 815 -- entry already |
801 if addon.latest_instance then return end | 816 if addon.latest_instance then return end |
802 addon.latest_instance = instance_tag() | 817 addon.latest_instance = instance_tag() |
803 addon:_mark_boss_kill (addon._addLootEntry{ | 818 addon:_mark_boss_kill (addon._addLootEntry{ |
804 kind='boss',reason='kill',bosskill=[[trash]],instance=addon.latest_instance,duration=0 | 819 kind='boss',reason='kill',bossname=[[trash]],instance=addon.latest_instance,duration=0 |
805 }) | 820 }) |
806 end | 821 end |
807 | 822 |
808 -- Recent loot cache | 823 -- Recent loot cache |
809 local candidates = {} | 824 local candidates = {} |
1001 return self:BuildMainDisplay() | 1016 return self:BuildMainDisplay() |
1002 end | 1017 end |
1003 | 1018 |
1004 elseif cmd == "fake" then -- maybe comment this out for real users | 1019 elseif cmd == "fake" then -- maybe comment this out for real users |
1005 self:_mark_boss_kill (self._addLootEntry{ | 1020 self:_mark_boss_kill (self._addLootEntry{ |
1006 kind='boss',reason='kill',bosskill="Baron Steamroller",instance=instance_tag(),duration=0 | 1021 kind='boss',reason='kill',bossname="Baron Steamroller",instance=instance_tag(),duration=0 |
1007 }) | 1022 }) |
1008 self:CHAT_MSG_LOOT ('manual', my_name, 54797) | 1023 self:CHAT_MSG_LOOT ('manual', my_name, 54797) |
1009 if self.display then | 1024 if self.display then |
1010 self:redisplay() | 1025 self:redisplay() |
1011 end | 1026 end |
1393 addon.latest_instance = boss.instance | 1408 addon.latest_instance = boss.instance |
1394 addon.dprint('loot', "added boss entry", bossi) | 1409 addon.dprint('loot', "added boss entry", bossi) |
1395 if boss.reason == 'kill' then | 1410 if boss.reason == 'kill' then |
1396 addon:_mark_boss_kill (bossi) | 1411 addon:_mark_boss_kill (bossi) |
1397 if opts.chatty_on_kill then | 1412 if opts.chatty_on_kill then |
1398 addon:Print("Registered kill for '%s' in %s!", boss.bosskill, boss.instance) | 1413 addon:Print("Registered kill for '%s' in %s!", boss.bossname, boss.instance) |
1399 end | 1414 end |
1400 end | 1415 end |
1401 wipe(candidates) | 1416 wipe(candidates) |
1402 end | 1417 end |
1403 addon.recent_boss = create_new_cache ('boss', 10, fixup_durations) | 1418 addon.recent_boss = create_new_cache ('boss', 10, fixup_durations) |
1427 -- by the cache, (3) we happen to get some non-local events before doing | 1442 -- by the cache, (3) we happen to get some non-local events before doing |
1428 -- our local event (not because of network weirdness but because our local | 1443 -- our local event (not because of network weirdness but because our local |
1429 -- DBM might not trigger for a while). | 1444 -- DBM might not trigger for a while). |
1430 local c = { | 1445 local c = { |
1431 kind = 'boss', | 1446 kind = 'boss', |
1432 bosskill = bossname, -- minor misnomer, might not actually be a kill | 1447 bossname = bossname, |
1433 reason = reason, | 1448 reason = reason, |
1434 instance = intag, | 1449 instance = intag, |
1435 duration = duration, -- these two deliberately may be nil | 1450 duration = duration, -- these two deliberately may be nil |
1436 raiderlist = raiders and table.concat(raiders, ", ") | 1451 raiderlist = raiders and table.concat(raiders, ", ") |
1437 } | 1452 } |
1448 local e = g_loot[index] | 1463 local e = g_loot[index] |
1449 if not e then | 1464 if not e then |
1450 self:Print("Something horribly wrong;", index, "is not a valid entry!") | 1465 self:Print("Something horribly wrong;", index, "is not a valid entry!") |
1451 return | 1466 return |
1452 end | 1467 end |
1453 if not e.bosskill then | 1468 if not e.bossname then |
1454 self:Print("Something horribly wrong;", index, "is not a boss entry!") | 1469 self:Print("Something horribly wrong;", index, "is not a boss entry!") |
1455 return | 1470 return |
1456 end | 1471 end |
1457 if e.reason ~= 'wipe' then | 1472 if e.reason ~= 'wipe' then |
1458 -- enh, bail | 1473 -- enh, bail |
1461 local attempts = 1 | 1476 local attempts = 1 |
1462 local first | 1477 local first |
1463 | 1478 |
1464 local i,d = 1,g_loot[1] | 1479 local i,d = 1,g_loot[1] |
1465 while d ~= e do | 1480 while d ~= e do |
1466 if d.bosskill and | 1481 if d.bossname and |
1467 d.bosskill == e.bosskill and | 1482 d.bossname == e.bossname and |
1468 d.instance == e.instance and | 1483 d.instance == e.instance and |
1469 d.reason == 'wipe' | 1484 d.reason == 'wipe' |
1470 then | 1485 then |
1471 first = first or i | 1486 first = first or i |
1472 attempts = attempts + 1 | 1487 attempts = attempts + 1 |
1646 end | 1661 end |
1647 end | 1662 end |
1648 | 1663 |
1649 assert(g_loot[is].kind == 'boss') | 1664 assert(g_loot[is].kind == 'boss') |
1650 local boss = tremove (g_loot, is) | 1665 local boss = tremove (g_loot, is) |
1651 --pprint('loot', "MOVING", boss.bosskill) | 1666 --pprint('loot', "MOVING", boss.bossname) |
1652 tinsert (g_loot, should_be, boss) | 1667 tinsert (g_loot, should_be, boss) |
1653 return should_be | 1668 return should_be |
1654 end | 1669 end |
1655 end | 1670 end |
1656 | 1671 |