comparison Main.lua @ 113:be3ec607e964

Roll UpdateNPCLocation into UpdateTargetLocation. Mark WIld Pet critters as wild_pet.
author James D. Callahan III <jcallahan@curse.com>
date Mon, 10 Sep 2012 14:22:16 -0500
parents 5ed405092296
children 6daf570bc198
comparison
equal deleted inserted replaced
112:5ed405092296 113:be3ec607e964
270 return unit_type 270 return unit_type
271 end 271 end
272 end -- do-block 272 end -- do-block
273 273
274 274
275 local UpdateNPCLocation
276 do
277 local COORD_MAX = 5
278
279 function UpdateNPCLocation(unit_idnum)
280 local npc = NPCEntry(unit_idnum)
281
282 if not npc then
283 return
284 end
285 local zone_name, area_id, x, y, map_level, difficulty_token = CurrentLocationData()
286 local npc_data = npc.encounter_data[difficulty_token].stats[("level_%d"):format(_G.UnitLevel("target"))]
287 local zone_token = ("%s:%d"):format(zone_name, area_id)
288 npc_data.locations = npc_data.locations or {}
289
290 local zone_data = npc_data.locations[zone_token]
291
292 if not zone_data then
293 zone_data = {}
294 npc_data.locations[zone_token] = zone_data
295 end
296
297 for location_token in pairs(zone_data) do
298 local loc_level, loc_x, loc_y = (":"):split(location_token)
299 loc_level = tonumber(loc_level)
300
301 if map_level == loc_level and math.abs(x - loc_x) <= COORD_MAX and math.abs(y - loc_y) <= COORD_MAX then
302 return
303 end
304 end
305 zone_data[("%s:%s:%s"):format(map_level, x, y)] = true
306 end
307 end -- do-block
308
309
310 local function UpdateDBEntryLocation(entry_type, identifier) 275 local function UpdateDBEntryLocation(entry_type, identifier)
311 if not identifier then 276 if not identifier then
312 return 277 return
313 end 278 end
314 local zone_name, area_id, x, y, map_level, difficulty_token = CurrentLocationData() 279 local zone_name, area_id, x, y, map_level, difficulty_token = CurrentLocationData()
609 end 574 end
610 end 575 end
611 end 576 end
612 end 577 end
613 578
614 579 do
615 function WDP:UpdateTargetLocation() 580 local COORD_MAX = 5
616 if currently_drunk or not _G.UnitExists("target") or _G.UnitPlayerControlled("target") or (_G.UnitIsTapped("target") and not _G.UnitIsDead("target")) then 581
617 return 582 function WDP:UpdateTargetLocation()
618 end 583 if currently_drunk or not _G.UnitExists("target") or _G.UnitPlayerControlled("target") or (_G.UnitIsTapped("target") and not _G.UnitIsDead("target")) then
619 584 return
620 for index = 1, 4 do 585 end
621 if not _G.CheckInteractDistance("target", index) then 586
622 return 587 for index = 1, 4 do
623 end 588 if not _G.CheckInteractDistance("target", index) then
624 end 589 return
625 local unit_type, unit_idnum = ParseGUID(_G.UnitGUID("target")) 590 end
626 591 end
627 if not unit_idnum or unit_type ~= private.UNIT_TYPES.NPC then 592 local unit_type, unit_idnum = ParseGUID(_G.UnitGUID("target"))
628 return 593
629 end 594 if not unit_idnum or unit_type ~= private.UNIT_TYPES.NPC then
630 UpdateNPCLocation(unit_idnum) 595 return
631 end 596 end
632 597 local npc = NPCEntry(unit_idnum)
598
599 if not npc then
600 return
601 end
602 local zone_name, area_id, x, y, map_level, difficulty_token = CurrentLocationData()
603 local npc_data = npc.encounter_data[difficulty_token].stats[("level_%d"):format(_G.UnitLevel("target"))]
604 local zone_token = ("%s:%d"):format(zone_name, area_id)
605 npc_data.locations = npc_data.locations or {}
606
607 local zone_data = npc_data.locations[zone_token]
608
609 if not zone_data then
610 zone_data = {}
611 npc_data.locations[zone_token] = zone_data
612 end
613
614 for location_token in pairs(zone_data) do
615 local loc_level, loc_x, loc_y = (":"):split(location_token)
616 loc_level = tonumber(loc_level)
617
618 if map_level == loc_level and math.abs(x - loc_x) <= COORD_MAX and math.abs(y - loc_y) <= COORD_MAX then
619 return
620 end
621 end
622 zone_data[("%s:%s:%s"):format(map_level, x, y)] = true
623 end
624 end -- do-block
633 625
634 ----------------------------------------------------------------------- 626 -----------------------------------------------------------------------
635 -- Event handlers. 627 -- Event handlers.
636 ----------------------------------------------------------------------- 628 -----------------------------------------------------------------------
637 function WDP:BLACK_MARKET_ITEM_UPDATE(event_name) 629 function WDP:BLACK_MARKET_ITEM_UPDATE(event_name)
1281 npc.faction = UnitFactionStanding("target") 1273 npc.faction = UnitFactionStanding("target")
1282 npc.genders = npc.genders or {} 1274 npc.genders = npc.genders or {}
1283 npc.genders[GENDER_NAMES[_G.UnitSex("target")] or "UNDEFINED"] = true 1275 npc.genders[GENDER_NAMES[_G.UnitSex("target")] or "UNDEFINED"] = true
1284 npc.is_pvp = _G.UnitIsPVP("target") and true or nil 1276 npc.is_pvp = _G.UnitIsPVP("target") and true or nil
1285 npc.reaction = ("%s:%s:%s"):format(_G.UnitLevel("player"), _G.UnitFactionGroup("player"), REACTION_NAMES[_G.UnitReaction("player", "target")]) 1277 npc.reaction = ("%s:%s:%s"):format(_G.UnitLevel("player"), _G.UnitFactionGroup("player"), REACTION_NAMES[_G.UnitReaction("player", "target")])
1278 npc.wild_pet = (_G.UnitCreatureType("target") == "Wild Pet") and true or nil
1286 1279
1287 local encounter_data = npc.encounter_data[InstanceDifficultyToken()].stats 1280 local encounter_data = npc.encounter_data[InstanceDifficultyToken()].stats
1288 local npc_level = ("level_%d"):format(_G.UnitLevel("target")) 1281 local npc_level = ("level_%d"):format(_G.UnitLevel("target"))
1289 1282
1290 if not encounter_data[npc_level] then 1283 if not encounter_data[npc_level] then