Mercurial > wow > wowdb-profiler
comparison Main.lua @ 17:632623625cd1
Minor clarification. Added support for recording fishing drops.
| author | James D. Callahan III <jcallahan@curse.com> |
|---|---|
| date | Thu, 03 May 2012 16:48:50 -0500 |
| parents | 9f314ea42267 |
| children | 86f02232a9e5 |
comparison
equal
deleted
inserted
replaced
| 16:9f314ea42267 | 17:632623625cd1 |
|---|---|
| 30 global = { | 30 global = { |
| 31 items = {}, | 31 items = {}, |
| 32 npcs = {}, | 32 npcs = {}, |
| 33 objects = {}, | 33 objects = {}, |
| 34 quests = {}, | 34 quests = {}, |
| 35 zones = {}, | |
| 35 } | 36 } |
| 36 } | 37 } |
| 37 | 38 |
| 38 | 39 |
| 39 local EVENT_MAPPING = { | 40 local EVENT_MAPPING = { |
| 294 end | 295 end |
| 295 action_data.item_id = locked_item_id | 296 action_data.item_id = locked_item_id |
| 296 return true | 297 return true |
| 297 end, | 298 end, |
| 298 [AF.NPC] = function() | 299 [AF.NPC] = function() |
| 299 if _G.IsFishingLoot() or not _G.UnitExists("target") or _G.UnitIsFriend("player", "target") or _G.UnitIsPlayer("target") or _G.UnitPlayerControlled("target") then | 300 if not _G.UnitExists("target") or _G.UnitIsFriend("player", "target") or _G.UnitIsPlayer("target") or _G.UnitPlayerControlled("target") then |
| 300 return false | 301 return false |
| 301 end | 302 end |
| 302 local unit_type, id_num = WDP:ParseGUID(_G.UnitGUID("target")) | 303 local unit_type, id_num = WDP:ParseGUID(_G.UnitGUID("target")) |
| 303 action_data.id_num = id_num | 304 action_data.id_num = id_num |
| 304 return true | 305 return true |
| 305 end, | 306 end, |
| 306 [AF.OBJECT] = true, | 307 [AF.OBJECT] = true, |
| 308 [AF.ZONE] = function() | |
| 309 return action_data.loot_type and _G.IsFishingLoot() | |
| 310 end, | |
| 307 } | 311 } |
| 308 | 312 |
| 309 | 313 |
| 310 local LOOT_UPDATE_FUNCS = { | 314 local LOOT_UPDATE_FUNCS = { |
| 311 [AF.ITEM] = function() | 315 [AF.ITEM] = function() |
| 312 local item = UnitEntry("items", action_data.item_id) | 316 local item = UnitEntry("items", action_data.item_id) |
| 313 local loot_type = action_data.loot_type or "drops" | 317 local loot_type = action_data.loot_type |
| 314 item[loot_type] = item[loot_type] or {} | 318 item[loot_type] = item[loot_type] or {} |
| 315 | 319 |
| 316 for index = 1, #action_data.drops do | 320 for index = 1, #action_data.loot_list do |
| 317 table.insert(item[loot_type], action_data.drops[index]) | 321 table.insert(item[loot_type], action_data.loot_list[index]) |
| 318 end | 322 end |
| 319 end, | 323 end, |
| 320 [AF.NPC] = function() | 324 [AF.NPC] = function() |
| 321 local npc = UnitEntry("npcs", action_data.id_num) | 325 local npc = UnitEntry("npcs", action_data.id_num) |
| 322 | 326 |
| 324 return | 328 return |
| 325 end | 329 end |
| 326 local loot_type = action_data.loot_type or "drops" | 330 local loot_type = action_data.loot_type or "drops" |
| 327 npc[loot_type] = npc[loot_type] or {} | 331 npc[loot_type] = npc[loot_type] or {} |
| 328 | 332 |
| 329 for index = 1, #action_data.drops do | 333 for index = 1, #action_data.loot_list do |
| 330 table.insert(npc[loot_type], action_data.drops[index]) | 334 table.insert(npc[loot_type], action_data.loot_list[index]) |
| 331 end | 335 end |
| 332 end, | 336 end, |
| 333 [AF.OBJECT] = function() | 337 [AF.OBJECT] = function() |
| 334 local object = UnitEntry("objects", action_data.identifier) | 338 local object = UnitEntry("objects", action_data.identifier) |
| 335 object.drops = object.drops or {} | 339 object.drops = object.drops or {} |
| 336 | 340 |
| 337 for index = 1, #action_data.drops do | 341 for index = 1, #action_data.loot_list do |
| 338 table.insert(object.drops, action_data.drops[index]) | 342 table.insert(object.drops, action_data.loot_list[index]) |
| 343 end | |
| 344 end, | |
| 345 [AF.ZONE] = function() | |
| 346 local loot_type = action_data.loot_type or "drops" | |
| 347 local zone = UnitEntry("zones", action_data.zone) | |
| 348 zone[loot_type] = zone[loot_type] or {} | |
| 349 | |
| 350 local location_data = ("%s:%s:%s:%s"):format(action_data.instance_type, action_data.map_level, action_data.x, action_data.y) | |
| 351 local loot_data = zone[loot_type][location_data] | |
| 352 | |
| 353 if not loot_data then | |
| 354 zone[loot_type][location_data] = {} | |
| 355 loot_data = zone[loot_type][location_data] | |
| 356 end | |
| 357 | |
| 358 for index = 1, #action_data.loot_list do | |
| 359 table.insert(loot_data, action_data.loot_list[index]) | |
| 339 end | 360 end |
| 340 end, | 361 end, |
| 341 } | 362 } |
| 342 | 363 |
| 343 | 364 |
| 344 function WDP:LOOT_OPENED() | 365 function WDP:LOOT_OPENED() |
| 345 if not action_data.type then | 366 if not action_data.type then |
| 346 action_data.type = AF.NPC | 367 action_data.type = AF.NPC |
| 347 end | 368 end |
| 369 | |
| 348 local verify_func = LOOT_VERIFY_FUNCS[action_data.type] | 370 local verify_func = LOOT_VERIFY_FUNCS[action_data.type] |
| 349 local update_func = LOOT_UPDATE_FUNCS[action_data.type] | 371 local update_func = LOOT_UPDATE_FUNCS[action_data.type] |
| 350 | 372 |
| 351 if not verify_func or not update_func then | 373 if not verify_func or not update_func then |
| 352 return | 374 return |
| 354 | 376 |
| 355 if _G.type(verify_func) == "function" and not verify_func() then | 377 if _G.type(verify_func) == "function" and not verify_func() then |
| 356 return | 378 return |
| 357 end | 379 end |
| 358 local loot_registry = {} | 380 local loot_registry = {} |
| 359 action_data.drops = {} | 381 action_data.loot_list = {} |
| 360 | 382 |
| 361 for loot_slot = 1, _G.GetNumLootItems() do | 383 for loot_slot = 1, _G.GetNumLootItems() do |
| 362 local icon_texture, item_text, quantity, quality, locked = _G.GetLootSlotInfo(loot_slot) | 384 local icon_texture, item_text, quantity, quality, locked = _G.GetLootSlotInfo(loot_slot) |
| 363 | 385 |
| 364 if _G.LootSlotIsItem(loot_slot) then | 386 if _G.LootSlotIsItem(loot_slot) then |
| 365 local item_id = ItemLinkToID(_G.GetLootSlotLink(loot_slot)) | 387 local item_id = ItemLinkToID(_G.GetLootSlotLink(loot_slot)) |
| 366 loot_registry[item_id] = (loot_registry[item_id]) or 0 + quantity | 388 loot_registry[item_id] = (loot_registry[item_id]) or 0 + quantity |
| 367 elseif _G.LootSlotIsCoin(loot_slot) then | 389 elseif _G.LootSlotIsCoin(loot_slot) then |
| 368 table.insert(action_data.drops, ("money:%d"):format(_toCopper(item_text))) | 390 table.insert(action_data.loot_list, ("money:%d"):format(_toCopper(item_text))) |
| 369 elseif _G.LootSlotIsCurrency(loot_slot) then | 391 elseif _G.LootSlotIsCurrency(loot_slot) then |
| 370 table.insert(action_data.drops, ("currency:%d:%s"):format(quantity, icon_texture:match("[^\\]+$"):lower())) | 392 table.insert(action_data.loot_list, ("currency:%d:%s"):format(quantity, icon_texture:match("[^\\]+$"):lower())) |
| 371 end | 393 end |
| 372 end | 394 end |
| 373 | 395 |
| 374 for item_id, quantity in pairs(loot_registry) do | 396 for item_id, quantity in pairs(loot_registry) do |
| 375 table.insert(action_data.drops, ("%d:%d"):format(item_id, quantity)) | 397 table.insert(action_data.loot_list, ("%d:%d"):format(item_id, quantity)) |
| 376 end | 398 end |
| 377 update_func() | 399 update_func() |
| 378 end | 400 end |
| 379 end -- do-block | 401 end -- do-block |
| 380 | 402 |
| 610 elseif target_name and target_name ~= "" then | 632 elseif target_name and target_name ~= "" then |
| 611 local _, target_item_link = _G.GetItemInfo(target_name) | 633 local _, target_item_link = _G.GetItemInfo(target_name) |
| 612 action_data.item_id = ItemLinkToID(target_item_link) | 634 action_data.item_id = ItemLinkToID(target_item_link) |
| 613 end | 635 end |
| 614 elseif not tt_item_name and not tt_unit_name then | 636 elseif not tt_item_name and not tt_unit_name then |
| 615 if target_name == "" then | |
| 616 return | |
| 617 end | |
| 618 | |
| 619 local zone_name, x, y, map_level, instance_type = CurrentLocationData() | 637 local zone_name, x, y, map_level, instance_type = CurrentLocationData() |
| 620 | 638 |
| 639 action_data.instance_type = instance_type | |
| 640 action_data.map_level = map_level | |
| 641 action_data.name = target_name | |
| 642 action_data.x = x | |
| 643 action_data.y = y | |
| 644 action_data.zone = zone_name | |
| 645 | |
| 621 if bit.band(spell_flags, AF.OBJECT) == AF.OBJECT then | 646 if bit.band(spell_flags, AF.OBJECT) == AF.OBJECT then |
| 647 if target_name == "" then | |
| 648 return | |
| 649 end | |
| 622 local identifier = ("%s:%s"):format(spell_label, target_name) | 650 local identifier = ("%s:%s"):format(spell_label, target_name) |
| 623 UpdateObjectLocation(identifier) | 651 UpdateObjectLocation(identifier) |
| 624 | 652 |
| 625 action_data.instance_type = instance_type | |
| 626 action_data.map_level = map_level | |
| 627 action_data.name = target_name | |
| 628 action_data.type = AF.OBJECT | 653 action_data.type = AF.OBJECT |
| 629 action_data.x = x | |
| 630 action_data.y = y | |
| 631 action_data.zone = zone_name | |
| 632 action_data.identifier = identifier | 654 action_data.identifier = identifier |
| 633 elseif bit.band(spell_flags, AF.ZONE) == AF.ZONE then | 655 elseif bit.band(spell_flags, AF.ZONE) == AF.ZONE then |
| 634 print("Found spell flagged for ZONE") | 656 action_data.type = AF.ZONE |
| 635 end | 657 action_data.loot_type = spell_label:lower() |
| 636 else | 658 end |
| 637 print(("%s: We have an issue with types and flags."), event_name) | 659 end |
| 638 end | 660 |
| 639 | 661 -- print(("%s: '%s', '%s', '%s', '%s', '%s'"):format(event_name, unit_id, spell_name, spell_rank, target_name, spell_line)) |
| 640 print(("%s: '%s', '%s', '%s', '%s', '%s'"):format(event_name, unit_id, spell_name, spell_rank, target_name, spell_line)) | |
| 641 private.tracked_line = spell_line | 662 private.tracked_line = spell_line |
| 642 end | 663 end |
| 643 | 664 |
| 644 | 665 |
| 645 function WDP:UNIT_SPELLCAST_SUCCEEDED(event_name, unit_id, spell_name, spell_rank, spell_line, spell_id) | 666 function WDP:UNIT_SPELLCAST_SUCCEEDED(event_name, unit_id, spell_name, spell_rank, spell_line, spell_id) |
| 646 if unit_id ~= "player" then | 667 if unit_id ~= "player" then |
| 647 return | 668 return |
| 648 end | 669 end |
| 649 | 670 |
| 650 if private.SPELL_LABELS_BY_NAME[spell_name] then | 671 -- if private.SPELL_LABELS_BY_NAME[spell_name] then |
| 651 print(("%s: '%s', '%s', '%s', '%s', '%s'"):format(event_name, unit_id, spell_name, spell_rank, spell_line, spell_id)) | 672 -- print(("%s: '%s', '%s', '%s', '%s', '%s'"):format(event_name, unit_id, spell_name, spell_rank, spell_line, spell_id)) |
| 652 end | 673 -- end |
| 653 private.tracked_line = nil | 674 private.tracked_line = nil |
| 654 end | 675 end |
| 655 | 676 |
| 656 function WDP:HandleSpellFailure(event_name, unit_id, spell_name, spell_rank, spell_line, spell_id) | 677 function WDP:HandleSpellFailure(event_name, unit_id, spell_name, spell_rank, spell_line, spell_id) |
| 657 if unit_id ~= "player" then | 678 if unit_id ~= "player" then |
