40yd status is set to 38yd for real #61


  • Defect
  • Fixed
Closed
Assigned to _ForgeUser117147
  • _ForgeUser23602 created this issue Jan 6, 2010

    I did some debugging on my out-of-range-but-healable-player issue and I discovered the following.

    GridRange.lua have the function:
    local function checkRange40(unit)
        return UnitInRange(unit)
    end

    However UnitInRange(unit) isn't really set to 40y. Instead is set to 38y. Don't ask me why, but in wow 3.3.0 is it in that way.

    The solution is straightforward:
    GridRange.lua, line 58:
    change "local function checkRange40(unit)" to "local function checkRange38(unit)" (just 'cuz I love to be consistent)

    and
    GridRange.lua, line 70:
    change "addRange(40, checkRange40)" to addRange(38, checkRange38)

    After this change the range for 40y will be correctly set by spells in your spellbook, so if a player will be grayed out it's cuz he/she is *really* out of range.

    Cheers,

    Arzach

  • _ForgeUser23602 added the tags New Defect Jan 6, 2010
  • _ForgeUser117147 posted a comment Jan 6, 2010

    This has been changed several times already (see rev269 for the latest, but rev239 is also concerned).

    The issue is mostly related to classes which do not have 40 yeard friendly targettable spells (no heal). They don't have a strict 40 yard check, only the "nearly 40 so let's say 38" yard check that is UnitInRange() as provided by Blizzard.

    UnitInRange() is the API provided for this specific purpose by Blizzard and uses 38 yards for some unexplained reason but I don't think it's unintended. Grid2 does the same here.

  • _ForgeUser23602 posted a comment Jan 6, 2010

    I agree, but for the same unexplained reason the "40yd" as it is isn't reliable.

    Let me rephrase. I'm a druid, and I've tested on a druid, tree spec. Now, I'd like to have a reliable 40y (i.e., in range of my heals) indicator. As it is right now it shows 38yd, and my "real" 40yd range spells aren't used since there is already a 40yd check in the range list.

    When GridRange scans my spellbook it will find a lot of useful 40yd range spells to use, but since it already have an hardcoded "reliable" 40yd range check, it will not update the range checks, so it will be stuck with sucky Blizzard idea of "38yd is about 40yd".

    An alternative solution is to change the logic of addRange(range, check), so instead of keeping the first range spell available, it will overwrite the range checker.

    Doing so you'll be able to classify sucky Blizz range check to "40", but for those having a true 40y spell, the latter will be used for range check.

    Cheers, Arz

    Ok, I logged my warrior and I've seen the light. Well, not the light maybe but an issue that would arise if my original proposal is used. The warrior doesn't have a 40yd range spell (ofc), so there's only the sucky Blizz one. However Grid2 doesn't have per-char settings, so everyone is looking for a 40yd range spell, but on warrior there's no 40yd range spell, so... 476 errors in 3 minutes, might be a record.

    Change reverted and switched lines 46 and 47 in GridRange.lua. Now it's:

    local function addRange(range, check)
    	-- 100 yards is the farthest possible range
    	if range > 100 then return end
    
    	if not checks[range] then
    		ranges[#ranges + 1] = range
    		table.sort(ranges)
    	end
    	checks[range] = check
    end
    

    Edited Jan 6, 2010
  • _ForgeUser117147 removed a tag New Jan 7, 2010
  • _ForgeUser117147 added a tag Fixed Jan 7, 2010
  • _ForgeUser117147 closed issue Jan 7, 2010
  • _ForgeUser117147 posted a comment Jan 7, 2010

    Fixed in rev299.

    I changed the behavior of GridRange:GetRangeCheck() so that it returns a check for a closer range if the requested distance is not available.


To post a comment, please login or register a new account.