Mercurial > wow > wowdb-profiler
comparison Main.lua @ 29:5802628b2bf0
Cleanup for code dealing with NPC entries.
| author | James D. Callahan III <jcallahan@curse.com> |
|---|---|
| date | Tue, 22 May 2012 12:38:35 -0500 |
| parents | 11afd2cc0b83 |
| children | bdb3d8a2c3a7 |
comparison
equal
deleted
inserted
replaced
| 28:11afd2cc0b83 | 29:5802628b2bf0 |
|---|---|
| 75 | 75 |
| 76 | 76 |
| 77 ----------------------------------------------------------------------- | 77 ----------------------------------------------------------------------- |
| 78 -- Helper Functions. | 78 -- Helper Functions. |
| 79 ----------------------------------------------------------------------- | 79 ----------------------------------------------------------------------- |
| 80 local function DBEntry(data_type, unit_id) | |
| 81 if not data_type or not unit_id then | |
| 82 return | |
| 83 end | |
| 84 local unit = db[data_type][unit_id] | |
| 85 | |
| 86 if not unit then | |
| 87 db[data_type][unit_id] = {} | |
| 88 unit = db[data_type][unit_id] | |
| 89 end | |
| 90 return unit | |
| 91 end | |
| 92 | |
| 93 | |
| 94 local function InstanceDifficultyToken() | 80 local function InstanceDifficultyToken() |
| 95 local _, instance_type, instance_difficulty, difficulty_name, _, _, is_dynamic = _G.GetInstanceInfo() | 81 local _, instance_type, instance_difficulty, difficulty_name, _, _, is_dynamic = _G.GetInstanceInfo() |
| 96 if difficulty_name == "" then | 82 if difficulty_name == "" then |
| 97 difficulty_name = "NONE" | 83 difficulty_name = "NONE" |
| 98 end | 84 end |
| 99 return ("%s:%s:%s"):format(instance_type:upper(), difficulty_name:upper():gsub(" ", "_"), _G.tostring(is_dynamic)) | 85 return ("%s:%s:%s"):format(instance_type:upper(), difficulty_name:upper():gsub(" ", "_"), _G.tostring(is_dynamic)) |
| 86 end | |
| 87 | |
| 88 | |
| 89 local function DBEntry(data_type, unit_id) | |
| 90 if not data_type or not unit_id then | |
| 91 return | |
| 92 end | |
| 93 local unit = db[data_type][unit_id] | |
| 94 | |
| 95 if not unit then | |
| 96 db[data_type][unit_id] = {} | |
| 97 unit = db[data_type][unit_id] | |
| 98 end | |
| 99 return unit | |
| 100 end | |
| 101 | |
| 102 | |
| 103 local function NPCEntry(identifier) | |
| 104 local npc = DBEntry("npcs", identifier) | |
| 105 | |
| 106 if not npc then | |
| 107 return | |
| 108 end | |
| 109 local instance_token = InstanceDifficultyToken() | |
| 110 npc.encounter_data = npc.encounter_data or {} | |
| 111 npc.encounter_data[instance_token] = npc.encounter_data[instance_token] or {} | |
| 112 return npc | |
| 100 end | 113 end |
| 101 | 114 |
| 102 | 115 |
| 103 local function CurrentLocationData() | 116 local function CurrentLocationData() |
| 104 local map_level = _G.GetCurrentMapDungeonLevel() or 0 | 117 local map_level = _G.GetCurrentMapDungeonLevel() or 0 |
| 341 | 354 |
| 342 if unit_type ~= private.UNIT_TYPES.NPC or not unit_idnum then | 355 if unit_type ~= private.UNIT_TYPES.NPC or not unit_idnum then |
| 343 return | 356 return |
| 344 end | 357 end |
| 345 local zone_name, area_id, x, y, map_level, instance_token = CurrentLocationData() | 358 local zone_name, area_id, x, y, map_level, instance_token = CurrentLocationData() |
| 346 local npc_data = DBEntry("npcs", unit_idnum).encounter_data[instance_token][("level_%d"):format(_G.UnitLevel("target"))] | 359 local npc_data = NPCEntry(unit_idnum).encounter_data[instance_token][("level_%d"):format(_G.UnitLevel("target"))] |
| 360 local location_token = ("%s:%d"):format(zone_name, area_id) | |
| 347 npc_data.locations = npc_data.locations or {} | 361 npc_data.locations = npc_data.locations or {} |
| 348 | 362 npc_data.locations[location_token] = npc_data.locations[location_token] or {} |
| 349 local location_token = ("%s:%d"):format(zone_name, area_id) | |
| 350 | |
| 351 if not npc_data.locations[location_token] then | |
| 352 npc_data.locations[location_token] = {} | |
| 353 end | |
| 354 | 363 |
| 355 -- Only record corpse location if there is no entry for this GUID. | 364 -- Only record corpse location if there is no entry for this GUID. |
| 356 if is_dead and npc_data.locations[location_token][target_guid] then | 365 if is_dead and npc_data.locations[location_token][target_guid] then |
| 357 return | 366 return |
| 358 end | 367 end |
| 378 if not source_id or source_type ~= private.UNIT_TYPES.NPC then | 387 if not source_id or source_type ~= private.UNIT_TYPES.NPC then |
| 379 return | 388 return |
| 380 end | 389 end |
| 381 | 390 |
| 382 if bit.band(FLAGS_NPC_CONTROL, source_flags) == FLAGS_NPC_CONTROL and bit.band(FLAGS_NPC, source_flags) ~= 0 then | 391 if bit.band(FLAGS_NPC_CONTROL, source_flags) == FLAGS_NPC_CONTROL and bit.band(FLAGS_NPC, source_flags) ~= 0 then |
| 383 local npc = DBEntry("npcs", source_id) | 392 local encounter_data = NPCEntry(source_id).encounter_data[InstanceDifficultyToken()] |
| 384 local instance_token = InstanceDifficultyToken() | |
| 385 npc.encounter_data = npc.encounter_data or {} | |
| 386 | |
| 387 if not npc.encounter_data[instance_token] then | |
| 388 npc.encounter_data[instance_token] = {} | |
| 389 end | |
| 390 local encounter_data = npc.encounter_data[instance_token] | |
| 391 | |
| 392 encounter_data.spells = encounter_data.spells or {} | 393 encounter_data.spells = encounter_data.spells or {} |
| 393 encounter_data.spells[spell_id] = (encounter_data.spells[spell_id] or 0) + 1 | 394 encounter_data.spells[spell_id] = (encounter_data.spells[spell_id] or 0) + 1 |
| 394 end | 395 end |
| 395 end | 396 end |
| 396 | 397 |
| 415 end | 416 end |
| 416 end -- do-block | 417 end -- do-block |
| 417 | 418 |
| 418 | 419 |
| 419 function WDP:COMBAT_TEXT_UPDATE(event, message_type, faction_name, amount) | 420 function WDP:COMBAT_TEXT_UPDATE(event, message_type, faction_name, amount) |
| 420 local npc = DBEntry("npcs", action_data.identifier) | 421 local npc = NPCEntry(action_data.identifier) |
| 421 | 422 |
| 422 if not npc then | 423 if not npc then |
| 423 return | 424 return |
| 424 end | 425 end |
| 425 local instance_token = InstanceDifficultyToken() | 426 local encounter_data = npc.encounter_data[InstanceDifficultyToken()] |
| 426 | 427 encounter_data[action_data.npc_level].reputations = encounter_data[action_data.npc_level].reputations or {} |
| 427 if not npc.encounter_data[instance_token][action_data.npc_level].reputations then | 428 encounter_data[action_data.npc_level].reputations[faction_name] = amount |
| 428 npc.encounter_data[instance_token][action_data.npc_level].reputations = {} | |
| 429 end | |
| 430 npc.encounter_data[instance_token][action_data.npc_level].reputations[faction_name] = amount | |
| 431 end | 429 end |
| 432 | 430 |
| 433 | 431 |
| 434 do | 432 do |
| 435 local re_gold = _G.GOLD_AMOUNT:gsub("%%d", "(%%d+)") | 433 local re_gold = _G.GOLD_AMOUNT:gsub("%%d", "(%%d+)") |
| 515 local LOOT_UPDATE_FUNCS = { | 513 local LOOT_UPDATE_FUNCS = { |
| 516 [AF.ITEM] = function() | 514 [AF.ITEM] = function() |
| 517 GenericLootUpdate("items") | 515 GenericLootUpdate("items") |
| 518 end, | 516 end, |
| 519 [AF.NPC] = function() | 517 [AF.NPC] = function() |
| 520 local npc = DBEntry("npcs", action_data.identifier) | 518 local npc = NPCEntry(action_data.identifier) |
| 521 | 519 |
| 522 if not npc then | 520 if not npc then |
| 523 return | 521 return |
| 524 end | 522 end |
| 525 local instance_token = InstanceDifficultyToken() | 523 local encounter_data = npc.encounter_data[InstanceDifficultyToken()] |
| 526 | |
| 527 if not npc.encounter_data[instance_token] then | |
| 528 npc.encounter_data[instance_token] = {} | |
| 529 end | |
| 530 local loot_type = action_data.label or "drops" | 524 local loot_type = action_data.label or "drops" |
| 531 npc.encounter_data[instance_token][loot_type] = npc.encounter_data[instance_token][loot_type] or {} | 525 encounter_data[loot_type] = encounter_data[loot_type] or {} |
| 532 | |
| 533 local loot_data = npc.encounter_data[instance_token][loot_type] | |
| 534 | 526 |
| 535 for index = 1, #action_data.loot_list do | 527 for index = 1, #action_data.loot_list do |
| 536 table.insert(loot_data, action_data.loot_list[index]) | 528 table.insert(encounter_data[loot_type], action_data.loot_list[index]) |
| 537 end | 529 end |
| 538 end, | 530 end, |
| 539 [AF.OBJECT] = function() | 531 [AF.OBJECT] = function() |
| 540 GenericLootUpdate("objects", InstanceDifficultyToken()) | 532 GenericLootUpdate("objects", InstanceDifficultyToken()) |
| 541 end, | 533 end, |
| 542 [AF.ZONE] = function() | 534 [AF.ZONE] = function() |
| 543 local loot_type = action_data.label or "drops" | 535 local loot_type = action_data.label or "drops" |
| 544 local zone = DBEntry("zones", action_data.zone) | 536 local zone = DBEntry("zones", action_data.zone) |
| 545 zone[action_data.instance_token] = zone[action_data.instance_token] or {} | 537 zone[action_data.instance_token] = zone[action_data.instance_token] or {} |
| 546 zone[action_data.instance_token][loot_type] = zone[loot_type][action_data.instance_token] or {} | 538 zone[action_data.instance_token][loot_type] = zone[action_data.instance_token][loot_type] or {} |
| 547 | 539 |
| 548 local location_data = ("%s:%s:%s"):format(action_data.map_level, action_data.x, action_data.y) | 540 local location_data = ("%s:%s:%s"):format(action_data.map_level, action_data.x, action_data.y) |
| 549 local loot_data = zone[action_data.instance_token][loot_type][location_data] | 541 local loot_data = zone[action_data.instance_token][loot_type][location_data] |
| 550 | 542 |
| 551 if not loot_data then | 543 if not loot_data then |
| 634 local unit_type, unit_idnum = self:ParseGUID(_G.UnitGUID("target")) | 626 local unit_type, unit_idnum = self:ParseGUID(_G.UnitGUID("target")) |
| 635 | 627 |
| 636 if unit_type ~= private.UNIT_TYPES.NPC or not unit_idnum then | 628 if unit_type ~= private.UNIT_TYPES.NPC or not unit_idnum then |
| 637 return | 629 return |
| 638 end | 630 end |
| 639 local merchant = DBEntry("npcs", unit_idnum) | 631 local merchant = NPCEntry(unit_idnum) |
| 640 merchant.sells = merchant.sells or {} | 632 merchant.sells = merchant.sells or {} |
| 641 | 633 |
| 642 for item_index = 1, _G.GetMerchantNumItems() do | 634 for item_index = 1, _G.GetMerchantNumItems() do |
| 643 local _, _, copper_price, stack_size, num_available, _, extended_cost = _G.GetMerchantItemInfo(item_index) | 635 local _, _, copper_price, stack_size, num_available, _, extended_cost = _G.GetMerchantItemInfo(item_index) |
| 644 local item_id = ItemLinkToID(_G.GetMerchantItemLink(item_index)) | 636 local item_id = ItemLinkToID(_G.GetMerchantItemLink(item_index)) |
| 714 local unit_type, unit_idnum = self:ParseGUID(_G.UnitGUID("pet")) | 706 local unit_type, unit_idnum = self:ParseGUID(_G.UnitGUID("pet")) |
| 715 | 707 |
| 716 if unit_type ~= private.UNIT_TYPES.NPC or not unit_idnum then | 708 if unit_type ~= private.UNIT_TYPES.NPC or not unit_idnum then |
| 717 return | 709 return |
| 718 end | 710 end |
| 719 DBEntry("npcs", unit_idnum).mind_control = true | 711 NPCEntry(unit_idnum).mind_control = true |
| 720 table.wipe(action_data) | 712 table.wipe(action_data) |
| 721 end | 713 end |
| 722 | 714 |
| 723 | 715 |
| 724 do | 716 do |
| 757 local unit_type, unit_idnum = self:ParseGUID(_G.UnitGUID("target")) | 749 local unit_type, unit_idnum = self:ParseGUID(_G.UnitGUID("target")) |
| 758 | 750 |
| 759 if unit_type ~= private.UNIT_TYPES.NPC or not unit_idnum then | 751 if unit_type ~= private.UNIT_TYPES.NPC or not unit_idnum then |
| 760 return | 752 return |
| 761 end | 753 end |
| 762 local npc = DBEntry("npcs", unit_idnum) | 754 local npc = NPCEntry(unit_idnum) |
| 763 local _, class_token = _G.UnitClass("target") | 755 local _, class_token = _G.UnitClass("target") |
| 764 npc.class = class_token | 756 npc.class = class_token |
| 765 | 757 |
| 766 UpdateFactionNames() | 758 UpdateFactionNames() |
| 767 DatamineTT:ClearLines() | 759 DatamineTT:ClearLines() |
| 782 end | 774 end |
| 783 npc.genders = npc.genders or {} | 775 npc.genders = npc.genders or {} |
| 784 npc.genders[GENDER_NAMES[_G.UnitSex("target")] or "UNDEFINED"] = true | 776 npc.genders[GENDER_NAMES[_G.UnitSex("target")] or "UNDEFINED"] = true |
| 785 npc.is_pvp = _G.UnitIsPVP("target") and true or nil | 777 npc.is_pvp = _G.UnitIsPVP("target") and true or nil |
| 786 npc.reaction = ("%s:%s:%s"):format(_G.UnitLevel("player"), _G.UnitFactionGroup("player"), REACTION_NAMES[_G.UnitReaction("player", "target")]) | 778 npc.reaction = ("%s:%s:%s"):format(_G.UnitLevel("player"), _G.UnitFactionGroup("player"), REACTION_NAMES[_G.UnitReaction("player", "target")]) |
| 787 npc.encounter_data = npc.encounter_data or {} | 779 |
| 788 | 780 local encounter_data = npc.encounter_data[InstanceDifficultyToken()] |
| 789 local instance_token = InstanceDifficultyToken() | |
| 790 | |
| 791 if not npc.encounter_data[instance_token] then | |
| 792 npc.encounter_data[instance_token] = {} | |
| 793 end | |
| 794 local encounter_data = npc.encounter_data[instance_token] | |
| 795 local npc_level = ("level_%d"):format(_G.UnitLevel("target")) | 781 local npc_level = ("level_%d"):format(_G.UnitLevel("target")) |
| 796 | 782 |
| 797 if not encounter_data[npc_level] then | 783 if not encounter_data[npc_level] then |
| 798 encounter_data[npc_level] = { | 784 encounter_data[npc_level] = { |
| 799 max_health = _G.UnitHealthMax("target"), | 785 max_health = _G.UnitHealthMax("target"), |
| 867 function WDP:TRAINER_SHOW() | 853 function WDP:TRAINER_SHOW() |
| 868 if not _G.IsTradeskillTrainer() then | 854 if not _G.IsTradeskillTrainer() then |
| 869 return | 855 return |
| 870 end | 856 end |
| 871 local unit_type, unit_idnum = self:ParseGUID(_G.UnitGUID("target")) | 857 local unit_type, unit_idnum = self:ParseGUID(_G.UnitGUID("target")) |
| 872 local npc = DBEntry("npcs", unit_idnum) | 858 local npc = NPCEntry(unit_idnum) |
| 873 npc.teaches = npc.teaches or {} | 859 npc.teaches = npc.teaches or {} |
| 874 | 860 |
| 875 -- Get the initial trainer filters | 861 -- Get the initial trainer filters |
| 876 local available = _G.GetTrainerServiceTypeFilter("available") | 862 local available = _G.GetTrainerServiceTypeFilter("available") |
| 877 local unavailable = _G.GetTrainerServiceTypeFilter("unavailable") | 863 local unavailable = _G.GetTrainerServiceTypeFilter("unavailable") |
