comparison Main.lua @ 307:c33ab3413737

Changes/fixes.
author James D. Callahan III <jcallahan@curse.com>
date Sun, 28 Jul 2013 16:53:22 -0500
parents 7feb687b1b22
children 22e2e16318e5
comparison
equal deleted inserted replaced
306:7feb687b1b22 307:c33ab3413737
133 local item_process_timer_handle 133 local item_process_timer_handle
134 local faction_standings = {} 134 local faction_standings = {}
135 local forge_spell_ids = {} 135 local forge_spell_ids = {}
136 local languages_known = {} 136 local languages_known = {}
137 local loot_toast_container_timer_handle 137 local loot_toast_container_timer_handle
138 local loot_toast_data
139 local loot_toast_data_timer_handle
138 local name_to_id_map = {} 140 local name_to_id_map = {}
139 local killed_boss_id_timer_handle 141 local killed_boss_id_timer_handle
140 local killed_npc_id 142 local killed_npc_id
141 local target_location_timer_handle 143 local target_location_timer_handle
142 local current_target_id 144 local current_target_id
306 private.loot_toast_container_id = nil 308 private.loot_toast_container_id = nil
307 loot_toast_container_timer_handle = nil 309 loot_toast_container_timer_handle = nil
308 end 310 end
309 311
310 312
313 local function ClearLootToastData()
314 -- cancel existing timer if found
315 if loot_toast_data_timer_handle then
316 WDP:CancelTimer(loot_toast_data_timer_handle)
317 end
318
319 if loot_toast_data then table.wipe(loot_toast_data) end
320 loot_toast_data_timer_handle = nil
321 end
322
323
311 local function InstanceDifficultyToken() 324 local function InstanceDifficultyToken()
312 local _, instance_type, instance_difficulty, _, _, _, is_dynamic = _G.GetInstanceInfo() 325 local _, instance_type, instance_difficulty, _, _, _, is_dynamic = _G.GetInstanceInfo()
313 326
314 if not instance_type or instance_type == "" then 327 if not instance_type or instance_type == "" then
315 instance_type = "NONE" 328 instance_type = "NONE"
666 if not entry then 679 if not entry then
667 return 680 return
668 end 681 end
669 local loot_table = LootTable(entry, loot_type, top_field) 682 local loot_table = LootTable(entry, loot_type, top_field)
670 683
671 if not source_list[current_loot.identifier] then 684 if current_loot.identifier then
672 if top_field then 685 if not source_list[current_loot.identifier] then
673 entry[top_field][loot_count] = (entry[top_field][loot_count] or 0) + 1 686 if top_field then
674 else 687 entry[top_field][loot_count] = (entry[top_field][loot_count] or 0) + 1
675 entry[loot_count] = (entry[loot_count] or 0) + 1 688 else
676 end 689 entry[loot_count] = (entry[loot_count] or 0) + 1
677 source_list[current_loot.identifier] = true 690 end
691 source_list[current_loot.identifier] = true
692 end
678 end 693 end
679 694
680 for index = 1, #current_loot.list do 695 for index = 1, #current_loot.list do
681 table.insert(loot_table, current_loot.list[index]) 696 table.insert(loot_table, current_loot.list[index])
682 end 697 end
1144 local container_id = private.loot_toast_container_id 1159 local container_id = private.loot_toast_container_id
1145 local item_id = ItemLinkToID(item_link) 1160 local item_id = ItemLinkToID(item_link)
1146 local npc = NPCEntry(private.raid_finder_boss_id or private.world_boss_id) 1161 local npc = NPCEntry(private.raid_finder_boss_id or private.world_boss_id)
1147 1162
1148 if npc then 1163 if npc then
1149 if not item_id then 1164 if loot_type == "item" and not item_id then
1150 Debug("%s: ItemID is nil, from item link %s", event_name, item_link) 1165 Debug("%s: ItemID is nil, from item link %s", event_name, item_link)
1151 return 1166 return
1152 end 1167 end
1153 local loot_label = "drops" 1168 local loot_label = "drops"
1154 local encounter_data = npc:EncounterData(InstanceDifficultyToken()) 1169 local encounter_data = npc:EncounterData(InstanceDifficultyToken())
1186 elseif loot_type == "money" then 1201 elseif loot_type == "money" then
1187 table.insert(current_loot.list, ("money:%d"):format(quantity)) 1202 table.insert(current_loot.list, ("money:%d"):format(quantity))
1188 end 1203 end
1189 GenericLootUpdate("items") 1204 GenericLootUpdate("items")
1190 current_loot = nil 1205 current_loot = nil
1191 private.container_loot_toasting = true -- do not count further loots until timer expires or another container is opened 1206 private.container_loot_toasting = true -- Do not count further loots until timer expires or another container is opened
1192 else 1207 else
1193 Debug("%s: NPC and Container are nil.", event_name) 1208 if loot_type == "item" and not item_id then
1209 Debug("%s: ItemID is nil, from item link %s", event_name, item_link)
1210 return
1211 end
1212 Debug("%s: NPC and Container are nil, storing loot toast data for 5 seconds.", event_name)
1213
1214 loot_toast_data = loot_toast_data or {}
1215 loot_toast_data[#loot_toast_data + 1] = {loot_type, item_link, quantity, item_id}
1216
1217 loot_toast_data_timer_handle = WDP:ScheduleTimer(ClearLootToastData, 5)
1194 end 1218 end
1195 end 1219 end
1196 1220
1197 1221
1198 do 1222 do
1326 end 1350 end
1327 end 1351 end
1328 end 1352 end
1329 end 1353 end
1330 1354
1331 -- do-block 1355
1332 1356 do -- do-block
1333 do
1334 local FLAGS_NPC = bit.bor(_G.COMBATLOG_OBJECT_TYPE_GUARDIAN, _G.COMBATLOG_OBJECT_CONTROL_NPC) 1357 local FLAGS_NPC = bit.bor(_G.COMBATLOG_OBJECT_TYPE_GUARDIAN, _G.COMBATLOG_OBJECT_CONTROL_NPC)
1335 local FLAGS_NPC_CONTROL = bit.bor(_G.COMBATLOG_OBJECT_AFFILIATION_OUTSIDER, _G.COMBATLOG_OBJECT_CONTROL_NPC) 1358 local FLAGS_NPC_CONTROL = bit.bor(_G.COMBATLOG_OBJECT_AFFILIATION_OUTSIDER, _G.COMBATLOG_OBJECT_CONTROL_NPC)
1336 1359
1337 local function RecordNPCSpell(sub_event, source_guid, source_name, source_flags, dest_guid, dest_name, dest_flags, spell_id, spell_name) 1360 local function RecordNPCSpell(sub_event, source_guid, source_name, source_flags, dest_guid, dest_name, dest_flags, spell_id, spell_name)
1338 if not spell_id then 1361 if not spell_id then
2264 else 2287 else
2265 Debug("%s: Spell ID %d is not a known raid or world boss 'Bonus' spell.", event_name, spell_id) 2288 Debug("%s: Spell ID %d is not a known raid or world boss 'Bonus' spell.", event_name, spell_id)
2266 return 2289 return
2267 end 2290 end
2268 2291
2269 killed_boss_id_timer_handle = WDP:ScheduleTimer(ClearKilledBossID, 1) -- we need to assign a handle here to cancel it later 2292 -- assign existing loot data to boss if it exists
2293 if loot_toast_data then
2294 local npc = NPCEntry(private.raid_finder_boss_id or private.world_boss_id)
2295
2296 if npc then
2297 -- create needed npc fields if required
2298 local loot_label = "drops"
2299 local encounter_data = npc:EncounterData(InstanceDifficultyToken())
2300 encounter_data[loot_label] = encounter_data[loot_label] or {}
2301 encounter_data.loot_counts = encounter_data.loot_counts or {}
2302 encounter_data.loot_counts[loot_label] = (encounter_data.loot_counts[loot_label] or 0) + 1
2303
2304 for index = 1, #loot_toast_data do
2305 local data = loot_toast_data[index]
2306 local loot_type = data[1]
2307 local quantity = data[3]
2308
2309 if loot_type == "item" then
2310 local item_id = data[4]
2311
2312 Debug("%s: Stored loot data - %sX%d (%d)", event_name, data[2], quantity, item_id)
2313 table.insert(encounter_data[loot_label], ("%d:%d"):format(item_id, quantity))
2314 elseif loot_type == "money" then
2315 Debug("%s: Stored loot data - money - %d", event_name, quantity)
2316 table.insert(encounter_data[loot_label], ("money:%d"):format(quantity))
2317 end
2318 end
2319 private.boss_loot_toasting = true
2320 else
2321 Debug("%s: NPC is nil, but we have stored loot data...", event_name)
2322 end
2323 end
2324
2325 ClearLootToastData()
2326
2327 killed_boss_id_timer_handle = WDP:ScheduleTimer(ClearKilledBossID, 5) -- we need to assign a handle here to cancel it later
2270 end 2328 end
2271 2329
2272 2330
2273 function WDP:UNIT_SPELLCAST_SUCCEEDED(event_name, unit_id, spell_name, spell_rank, spell_line, spell_id) 2331 function WDP:UNIT_SPELLCAST_SUCCEEDED(event_name, unit_id, spell_name, spell_rank, spell_line, spell_id)
2274 if unit_id ~= "player" then 2332 if unit_id ~= "player" then
2278 private.previous_spell_id = spell_id 2336 private.previous_spell_id = spell_id
2279 2337
2280 if private.LOOT_SPELL_ID_TO_ITEM_ID_MAP[spell_id] then 2338 if private.LOOT_SPELL_ID_TO_ITEM_ID_MAP[spell_id] then
2281 ClearKilledBossID() 2339 ClearKilledBossID()
2282 ClearLootToastContainerID() 2340 ClearLootToastContainerID()
2341 ClearLootToastData()
2283 2342
2284 private.loot_toast_container_id = private.LOOT_SPELL_ID_TO_ITEM_ID_MAP[spell_id] 2343 private.loot_toast_container_id = private.LOOT_SPELL_ID_TO_ITEM_ID_MAP[spell_id]
2285 loot_toast_container_timer_handle = WDP:ScheduleTimer(ClearLootToastContainerID, 1) -- we need to assign a handle here to cancel it later 2344 loot_toast_container_timer_handle = WDP:ScheduleTimer(ClearLootToastContainerID, 1) -- we need to assign a handle here to cancel it later
2286 end 2345 end
2287 2346