comparison Main.lua @ 328:3487529df8e5

Fixed several nil errors, including at least four with zone_data, and spell detection now ignores Chi Wave.
author MMOSimca <MMOSimca@gmail.com>
date Wed, 06 Aug 2014 04:31:49 -0400
parents 66b136635f6b
children 84817627cb22
comparison
equal deleted inserted replaced
327:c191c8a521fb 328:3487529df8e5
45 local PLAYER_FACTION = _G.UnitFactionGroup("player") 45 local PLAYER_FACTION = _G.UnitFactionGroup("player")
46 local PLAYER_GUID 46 local PLAYER_GUID
47 local PLAYER_NAME = _G.UnitName("player") 47 local PLAYER_NAME = _G.UnitName("player")
48 local PLAYER_RACE = _G.select(2, _G.UnitRace("player")) 48 local PLAYER_RACE = _G.select(2, _G.UnitRace("player"))
49 49
50 local SPELL_ID_CHI_WAVE = 132464
50 local SPELL_ID_DISGUISE = 121308 51 local SPELL_ID_DISGUISE = 121308
51 52
52 local ALLOWED_LOCALES = { 53 local ALLOWED_LOCALES = {
53 enUS = true, 54 enUS = true,
54 enGB = true, 55 enGB = true,
513 function UpdateDBEntryLocation(entry_type, identifier) 514 function UpdateDBEntryLocation(entry_type, identifier)
514 if not identifier then 515 if not identifier then
515 return 516 return
516 end 517 end
517 local zone_name, area_id, x, y, map_level, difficulty_token = CurrentLocationData() 518 local zone_name, area_id, x, y, map_level, difficulty_token = CurrentLocationData()
519 if not (zone_name and area_id and x and y and map_level) then
520 Debug("UpdateDBEntryLocation: Missing current location data - %s, %d, %d, %d, %d.", zone_name, area_id, x, y, map_level)
521 return
522 end
518 local entry = DBEntry(entry_type, identifier) 523 local entry = DBEntry(entry_type, identifier)
519 entry[difficulty_token] = entry[difficulty_token] or {} 524 entry[difficulty_token] = entry[difficulty_token] or {}
520 entry[difficulty_token].locations = entry[difficulty_token].locations or {} 525 entry[difficulty_token].locations = entry[difficulty_token].locations or {}
521 526
522 local zone_token = ("%s:%d"):format(zone_name, area_id) 527 local zone_token = ("%s:%d"):format(zone_name, area_id)
666 local source_id 671 local source_id
667 672
668 if current_loot.target_type == AF.ITEM then 673 if current_loot.target_type == AF.ITEM then
669 -- Items return the player as the source, so we need to use the item's ID (disenchant, milling, etc) 674 -- Items return the player as the source, so we need to use the item's ID (disenchant, milling, etc)
670 source_id = current_loot.identifier 675 source_id = current_loot.identifier
671 elseif current_loot.target_type == AF.OBJECT then
672 source_id = ("%s:%s"):format(current_loot.spell_label, select(2, ParseGUID(source_guid)))
673 else 676 else
674 source_id = select(2, ParseGUID(source_guid)) 677 local unit_ID = select(2, ParseGUID(source_guid))
678 if unit_ID then
679 if current_loot.target_type == AF.OBJECT then
680 source_id = ("%s:%s"):format(current_loot.spell_label, unit_ID)
681 else
682 source_id = unit_ID
683 end
684 end
675 end 685 end
676 local entry = DBEntry(data_type, source_id) 686 local entry = DBEntry(data_type, source_id)
677 687
678 if entry then 688 if entry then
679 local loot_table = LootTable(entry, loot_type, top_field) 689 local loot_table = LootTable(entry, loot_type, top_field)
1112 1122
1113 if not npc then 1123 if not npc then
1114 return 1124 return
1115 end 1125 end
1116 local zone_name, area_id, x, y, map_level, difficulty_token = CurrentLocationData() 1126 local zone_name, area_id, x, y, map_level, difficulty_token = CurrentLocationData()
1127 if not (zone_name and area_id and x and y and map_level) then
1128 Debug("UpdateTargetLocation: Missing current location data - %s, %d, %d, %d, %d.", zone_name, area_id, x, y, map_level)
1129 return
1130 end
1117 local npc_data = npc:EncounterData(difficulty_token).stats[("level_%d"):format(_G.UnitLevel("target"))] 1131 local npc_data = npc:EncounterData(difficulty_token).stats[("level_%d"):format(_G.UnitLevel("target"))]
1118 local zone_token = ("%s:%d"):format(zone_name, area_id) 1132 local zone_token = ("%s:%d"):format(zone_name, area_id)
1119 npc_data.locations = npc_data.locations or {} -- TODO: Fix this. It is broken. Possibly something to do with the timed updates. 1133 npc_data.locations = npc_data.locations or {} -- TODO: Fix this. It is broken. Possibly something to do with the timed updates.
1120 1134
1121 local zone_data = npc_data.locations[zone_token] 1135 local zone_data = npc_data.locations[zone_token]
1432 do -- do-block 1446 do -- do-block
1433 local FLAGS_NPC = bit.bor(_G.COMBATLOG_OBJECT_TYPE_GUARDIAN, _G.COMBATLOG_OBJECT_CONTROL_NPC) 1447 local FLAGS_NPC = bit.bor(_G.COMBATLOG_OBJECT_TYPE_GUARDIAN, _G.COMBATLOG_OBJECT_CONTROL_NPC)
1434 local FLAGS_NPC_CONTROL = bit.bor(_G.COMBATLOG_OBJECT_AFFILIATION_OUTSIDER, _G.COMBATLOG_OBJECT_CONTROL_NPC) 1448 local FLAGS_NPC_CONTROL = bit.bor(_G.COMBATLOG_OBJECT_AFFILIATION_OUTSIDER, _G.COMBATLOG_OBJECT_CONTROL_NPC)
1435 1449
1436 local function RecordNPCSpell(sub_event, source_guid, source_name, source_flags, dest_guid, dest_name, dest_flags, spell_id, spell_name) 1450 local function RecordNPCSpell(sub_event, source_guid, source_name, source_flags, dest_guid, dest_name, dest_flags, spell_id, spell_name)
1437 if not spell_id or spell_id == SPELL_ID_DISGUISE then 1451 if not spell_id or spell_id == SPELL_ID_CHI_WAVE or spell_id == SPELL_ID_DISGUISE then
1438 return 1452 return
1439 end 1453 end
1440 local source_type, source_id = ParseGUID(source_guid) 1454 local source_type, source_id = ParseGUID(source_guid)
1441 1455
1442 if not source_id or not UnitTypeIsNPC(source_type) then 1456 if not source_id or not UnitTypeIsNPC(source_type) then
1746 end, 1760 end,
1747 [AF.OBJECT] = function() 1761 [AF.OBJECT] = function()
1748 GenericLootUpdate("objects", InstanceDifficultyToken()) 1762 GenericLootUpdate("objects", InstanceDifficultyToken())
1749 end, 1763 end,
1750 [AF.ZONE] = function() 1764 [AF.ZONE] = function()
1765 if not (current_loot.map_level and current_loot.x and current_loot.y and current_loot.zone_data) then
1766 return
1767 end
1751 local location_token = ("%d:%d:%d"):format(current_loot.map_level, current_loot.x, current_loot.y) 1768 local location_token = ("%d:%d:%d"):format(current_loot.map_level, current_loot.x, current_loot.y)
1752 1769
1753 -- This will start life as a boolean true. 1770 -- This will start life as a boolean true.
1754 if _G.type(current_loot.zone_data[location_token]) ~= "table" then 1771 if _G.type(current_loot.zone_data[location_token]) ~= "table" then
1755 current_loot.zone_data[location_token] = { 1772 current_loot.zone_data[location_token] = {
2046 DatamineTT:SetMerchantItem(item_index) 2063 DatamineTT:SetMerchantItem(item_index)
2047 2064
2048 if not item_id then 2065 if not item_id then
2049 local item_name, item_link = DatamineTT:GetItem() 2066 local item_name, item_link = DatamineTT:GetItem()
2050 item_id = ItemLinkToID(item_link) 2067 item_id = ItemLinkToID(item_link)
2051 Debug("%s: GetMerchantItemLink() still ocassionally fails, apparently. Failed item's ID - %s", event_name, item_id) 2068 if item_id then
2069 Debug("%s: GetMerchantItemLink() still ocassionally fails, apparently. Failed item's ID - %s", event_name, item_id)
2070 else
2071 Debug("%s: GetMerchantItemLink() still ocassionally fails, apparently. Failed item's ID - nil", event_name)
2072 end
2052 end 2073 end
2053 2074
2054 if item_id and item_id > 0 then 2075 if item_id and item_id > 0 then
2055 local price_string = ActualCopperCost(copper_price, merchant_standing) 2076 local price_string = ActualCopperCost(copper_price, merchant_standing)
2056 2077
2415 unit_name = target_name 2436 unit_name = target_name
2416 unit_id = "target" 2437 unit_id = "target"
2417 end 2438 end
2418 local spell_flags = private.SPELL_FLAGS_BY_LABEL[spell_label] 2439 local spell_flags = private.SPELL_FLAGS_BY_LABEL[spell_label]
2419 local zone_name, area_id, x, y, map_level, instance_token = CurrentLocationData() 2440 local zone_name, area_id, x, y, map_level, instance_token = CurrentLocationData()
2441 if not (zone_name and area_id and x and y and map_level) then
2442 Debug("%s: Missing current location data - %s, %d, %d, %d, %d.", event_name, zone_name, area_id, x, y, map_level)
2443 return
2444 end
2420 2445
2421 table.wipe(current_action) 2446 table.wipe(current_action)
2422 current_action.instance_token = instance_token 2447 current_action.instance_token = instance_token
2423 current_action.map_level = map_level 2448 current_action.map_level = map_level
2424 current_action.x = x 2449 current_action.x = x