Mercurial > wow > wowdb-profiler
comparison Main.lua @ 435:b220bc8dd3a8
Chat-based loot variables simplified a bit. Fixed a major conditional bug preventing recording for chat-based loot.
author | MMOSimca <MMOSimca@gmail.com> |
---|---|
date | Wed, 25 Feb 2015 15:55:07 -0500 |
parents | 3f038cb19197 |
children | 05a4002dd924 |
comparison
equal
deleted
inserted
replaced
434:98e3947c180d | 435:b220bc8dd3a8 |
---|---|
168 local killed_boss_id_timer_handle | 168 local killed_boss_id_timer_handle |
169 local killed_npc_id | 169 local killed_npc_id |
170 local target_location_timer_handle | 170 local target_location_timer_handle |
171 local last_timber_spell_id | 171 local last_timber_spell_id |
172 local last_garrison_cache_object_id | 172 local last_garrison_cache_object_id |
173 local chat_loot_data | 173 local chat_loot_data = {} |
174 local chat_loot_timer_handle | 174 local chat_loot_timer_handle |
175 local current_target_id | 175 local current_target_id |
176 local current_area_id | 176 local current_area_id |
177 local current_loot | 177 local current_loot |
178 | 178 |
595 -- For item containers that open instantly with no spell cast | 595 -- For item containers that open instantly with no spell cast |
596 if (private.CONTAINER_ITEM_ID_LIST[item_id] == true) and ((not _G.GetNumLootItems()) or (_G.GetNumLootItems() == 0)) then | 596 if (private.CONTAINER_ITEM_ID_LIST[item_id] == true) and ((not _G.GetNumLootItems()) or (_G.GetNumLootItems() == 0)) then |
597 ClearChatLootData() | 597 ClearChatLootData() |
598 Debug("HandleItemUse: Beginning chat-based loot timer for item with ID %d.", item_id) | 598 Debug("HandleItemUse: Beginning chat-based loot timer for item with ID %d.", item_id) |
599 chat_loot_timer_handle = C_Timer.NewTimer(1.5, ClearChatLootData) | 599 chat_loot_timer_handle = C_Timer.NewTimer(1.5, ClearChatLootData) |
600 chat_loot_data = chat_loot_data or {} | |
601 chat_loot_data.identifier = item_id | 600 chat_loot_data.identifier = item_id |
602 chat_loot_data.sources = {} | |
603 -- For normal item containers | 601 -- For normal item containers |
604 else | 602 else |
605 table.wipe(current_action) | 603 table.wipe(current_action) |
606 current_loot = nil | 604 current_loot = nil |
607 current_action.target_type = AF.ITEM | 605 current_action.target_type = AF.ITEM |
883 end | 881 end |
884 | 882 |
885 | 883 |
886 function ClearChatLootData() | 884 function ClearChatLootData() |
887 if not chat_loot_timer_handle then | 885 if not chat_loot_timer_handle then |
886 table.wipe(chat_loot_data) | |
888 return | 887 return |
889 end | 888 end |
890 Debug("ClearChatLootData: Ending chat-based loot timer.") | 889 Debug("ClearChatLootData: Ending chat-based loot timer.") |
891 chat_loot_timer_handle:Cancel() | 890 chat_loot_timer_handle:Cancel() |
892 chat_loot_timer_handle = nil | 891 chat_loot_timer_handle = nil |
893 | 892 |
894 if chat_loot_data and chat_loot_data.identifier and (private.CONTAINER_ITEM_ID_LIST[chat_loot_data.identifier] ~= nil) and chat_loot_data.sources and (#chat_loot_data.sources > 0) then | 893 if chat_loot_data.identifier and (private.CONTAINER_ITEM_ID_LIST[chat_loot_data.identifier] ~= nil) and chat_loot_data.loot then |
895 -- A slimmed down (and more importantly, separate) version of GenericLootUpdate, specifically for AF.ITEM and chat_loot_data | 894 -- A slimmed down (and more importantly, separate) version of GenericLootUpdate, specifically for AF.ITEM and chat_loot_data |
896 local entry = DBEntry("items", chat_loot_data.identifier) | 895 local entry = DBEntry("items", chat_loot_data.identifier) |
897 | 896 |
898 if entry then | 897 if entry then |
899 local loot_table = LootTable(entry, "contains") | 898 local loot_table = LootTable(entry, "contains") |
900 entry["contains_count"] = (entry["contains_count"] or 0) + 1 | 899 entry["contains_count"] = (entry["contains_count"] or 0) + 1 |
901 | 900 |
902 for loot_token, quantity in pairs(chat_loot_data.sources[chat_loot_data.identifier]) do | 901 for loot_token, quantity in pairs(chat_loot_data.loot) do |
903 local label, currency_texture = (":"):split(loot_token) | 902 local label, currency_texture = (":"):split(loot_token) |
904 | 903 |
905 if label == "currency" and currency_texture then | 904 if label == "currency" and currency_texture then |
906 table.insert(loot_table, ("currency:%d:%s"):format(quantity, currency_texture)) | 905 table.insert(loot_table, ("currency:%d:%s"):format(quantity, currency_texture)) |
907 elseif loot_token == "money" then | 906 elseif loot_token == "money" then |
910 table.insert(loot_table, ("%d:%d"):format(loot_token, quantity)) | 909 table.insert(loot_table, ("%d:%d"):format(loot_token, quantity)) |
911 end | 910 end |
912 end | 911 end |
913 end | 912 end |
914 end | 913 end |
915 if chat_loot_data then | 914 table.wipe(chat_loot_data) |
916 table.wipe(chat_loot_data) | |
917 end | |
918 end | 915 end |
919 | 916 |
920 | 917 |
921 -- METHODS ------------------------------------------------------------ | 918 -- METHODS ------------------------------------------------------------ |
922 | 919 |
1462 current_loot = nil | 1459 current_loot = nil |
1463 container_loot_toasting = true -- Do not count further loots until timer expires or another container is opened | 1460 container_loot_toasting = true -- Do not count further loots until timer expires or another container is opened |
1464 elseif loot_source and (loot_source == LOOT_SOURCE_ID_REDUNDANT) and chat_loot_timer_handle and loot_type == "currency" then | 1461 elseif loot_source and (loot_source == LOOT_SOURCE_ID_REDUNDANT) and chat_loot_timer_handle and loot_type == "currency" then |
1465 local currency_texture = CurrencyLinkToTexture(item_link) | 1462 local currency_texture = CurrencyLinkToTexture(item_link) |
1466 if currency_texture and currency_texture ~= "" then | 1463 if currency_texture and currency_texture ~= "" then |
1467 local container_id = chat_loot_data.identifier -- For faster access, since this is going to be called 9 times in the next 3 lines | |
1468 -- Verify that we're still assigning data to the right items | 1464 -- Verify that we're still assigning data to the right items |
1469 if container_id and (private.CONTAINER_ITEM_ID_LIST[container_id] ~= nil) then | 1465 if chat_loot_data.identifier and (private.CONTAINER_ITEM_ID_LIST[chat_loot_data.identifier] ~= nil) then |
1470 local currency_token = ("currency:%s"):format(currency_texture) | 1466 local currency_token = ("currency:%s"):format(currency_texture) |
1471 Debug("%s: Captured currency for chat-based loot recording. %s X %d", event_name, currency_token, quantity) | 1467 Debug("%s: Captured currency for chat-based loot recording. %s X %d", event_name, currency_token, quantity) |
1472 chat_loot_data.sources[container_id] = chat_loot_data.sources[container_id] or {} | 1468 chat_loot_data.loot = chat_loot_data.loot or {} |
1473 chat_loot_data.sources[container_id][currency_token] = (chat_loot_data.sources[container_id][currency_token] or 0) + quantity | 1469 chat_loot_data.loot[currency_token] = (chat_loot_data.loot[currency_token] or 0) + quantity |
1474 else -- If not, cancel the timer and wipe the loot table early | 1470 else -- If not, cancel the timer and wipe the loot table early |
1475 Debug("%s: Canceled chat-based loot recording because we would have assigned the wrong loot!", event_name) | 1471 Debug("%s: Canceled chat-based loot recording because we would have assigned the wrong loot!", event_name) |
1476 ClearChatLootData() | 1472 ClearChatLootData() |
1477 end | 1473 end |
1478 else | 1474 else |
1549 } | 1545 } |
1550 | 1546 |
1551 | 1547 |
1552 local CHAT_MSG_LOOT_UPDATE_FUNCS = { | 1548 local CHAT_MSG_LOOT_UPDATE_FUNCS = { |
1553 [AF.ITEM] = function(item_id, quantity) | 1549 [AF.ITEM] = function(item_id, quantity) |
1554 local container_id = chat_loot_data.identifier -- For faster access, since this is going to be called 9 times in the next 3 lines | |
1555 -- Verify that we're still assigning data to the right items | 1550 -- Verify that we're still assigning data to the right items |
1556 if container_id and (private.CONTAINER_ITEM_ID_LIST[container_id] ~= nil) then | 1551 if chat_loot_data.identifier and (private.CONTAINER_ITEM_ID_LIST[chat_loot_data.identifier] ~= nil) then |
1557 Debug("CHAT_MSG_LOOT: AF.ITEM %d (%d)", item_id, quantity) | 1552 Debug("CHAT_MSG_LOOT: AF.ITEM %d (%d)", item_id, quantity) |
1558 chat_loot_data.sources[container_id] = chat_loot_data.sources[container_id] or {} | 1553 chat_loot_data.loot = chat_loot_data.loot or {} |
1559 chat_loot_data.sources[container_id][item_id] = (chat_loot_data.sources[container_id][item_id] or 0) + quantity | 1554 chat_loot_data.loot[item_id] = (chat_loot_data.loot[item_id] or 0) + quantity |
1560 else -- If not, cancel the timer and wipe the loot table early | 1555 else -- If not, cancel the timer and wipe the loot table early |
1561 Debug("CHAT_MSG_LOOT: We would have assigned the wrong loot!") | 1556 Debug("CHAT_MSG_LOOT: We would have assigned the wrong loot!") |
1562 ClearChatLootData() | 1557 ClearChatLootData() |
1563 end | 1558 end |
1564 end, | 1559 end, |
2861 if private.DELAYED_CONTAINER_SPELL_ID_TO_ITEM_ID_MAP[spell_id] then | 2856 if private.DELAYED_CONTAINER_SPELL_ID_TO_ITEM_ID_MAP[spell_id] then |
2862 -- Set up timer | 2857 -- Set up timer |
2863 ClearChatLootData() | 2858 ClearChatLootData() |
2864 Debug("%s: Beginning chat-based loot timer for spellID %d", event_name, spell_id) | 2859 Debug("%s: Beginning chat-based loot timer for spellID %d", event_name, spell_id) |
2865 chat_loot_timer_handle = C_Timer.NewTimer(1.5, ClearChatLootData) | 2860 chat_loot_timer_handle = C_Timer.NewTimer(1.5, ClearChatLootData) |
2866 chat_loot_data = chat_loot_data or {} | |
2867 chat_loot_data.identifier = private.DELAYED_CONTAINER_SPELL_ID_TO_ITEM_ID_MAP[spell_id] | 2861 chat_loot_data.identifier = private.DELAYED_CONTAINER_SPELL_ID_TO_ITEM_ID_MAP[spell_id] |
2868 chat_loot_data.sources = {} | |
2869 return | 2862 return |
2870 end | 2863 end |
2871 | 2864 |
2872 if anvil_spell_ids[spell_id] then | 2865 if anvil_spell_ids[spell_id] then |
2873 UpdateDBEntryLocation("objects", OBJECT_ID_ANVIL) | 2866 UpdateDBEntryLocation("objects", OBJECT_ID_ANVIL) |