Forum Rules

  • No flaming or derogatory remarks, directly or through insinuation.
  • No discussion, sharing or referencing illegal software such as hacks, keygen, cracks and pirated software.
  • No offensive contents, including but not limited to, racism, gore or pornography.
  • No excessive spam/meme, i.e. copious one liners in a short period of time, typing with all caps or posting meme responses (text/image).
  • No trolling, including but not limited to, flame incitation, user provocation or false information distribution.
  • No link spamming or signature advertisements for content not specific to Dota 2.
  • No Dota 2 key requests, sell, trade etc.
  • You may not create multiple accounts for any purpose, including ban evasion, unless expressly permitted by a moderator.

  • Please search before posting. One thread per issue. Do not create another thread if there is an existing one already.
  • Before posting anything, make sure you check out all sticky threads (e.g., this). Do not create new threads about closed ones.
  • It is extremely important that you post in correct forum section.

  • Balance discussion only in Misc.
  • All art related (such as hero model) feedbacks go to Art Feedback Forum.
  • All matchmaking feedback should go here: Matchmaking Feedback
  • All report/low priority issues should go here: Commend/Report/Ban Feedback
  • No specific workshop item feedback. These should go to workshop page of that item.
  • When posting in non-bugs section (such as this), use [Bugs], [Discussion] or [Suggestion] prefix in your thread name.

In case you object some action by a moderator, please contact him directly through PM and explain your concerns politely. If you are still unable to resolve the issue, contact an administrator. Do not drag these issues in public.

All rules are meant to augment common sense, please use them when not conflicted with aforementioned policies.
See more
See less

[BUG] CanAbilityBeUpgraded()

  • Filter
  • Time
  • Show
Clear All
new posts

  • [BUG] CanAbilityBeUpgraded()

    For random ability selection in my code I iterate over ability slots 0 through 23 and check if they can be leveled to select a valid one. Code below

    function U.GetAbilities(hUnit, bCanLevelUp)
        local bCanLevelUp = bCanLevelUp or false
        local ret = {}
        -- Slots range from 0 to 23 according to Valve documentation
        for i=0,23 do
            local hAbility = hUnit:GetAbilityInSlot(i)
            if hAbility then
                if bCanLevelUp then
                    if hAbility:CanAbilityBeUpgraded() and not hAbility:IsHidden() then
                        --print("Adding ", hAbility:GetName())
                        table.insert(ret, hAbility:GetName())
                    table.insert(ret, hAbility:GetName())
        return ret
    CanAbilityBeUpgraded() works correctly with the exception of "Talents". It does correctly enable talents as possible upgrades starting at level 10 (not listed as upgradable before that) but it list all of them at 10.

    The first three errors are:
    1) At level 10, only Tier 1 talents should pass the "CanAbilityBeUpgraded()" function, not all Tiers
    2) Even after picking a Tier 1 talent, the other (unchosen) Tier 1 talent passes "CanAbilityBeUpgraded()" evaluation, it should not
    3) At level 11, even when selected a Tier 1 talent at 10, Tier 2-4 talents all pass the "CanAbilityBeUpgraded()" evaluation, none of them should pass until Level 15 when Tier 2 become available

    Another run, my bot randomly picked a Tier 3 talent at level 10 and it consumes the "skill point" but fails to obviously level ability.
    You get a `[Server] Client (account 0) tried to execute invalid order (13). Hero does not have any ability points to upgrade the ability.`
    This is also a bug, if you try to "level an ability" and the selection is invalid, it should at minimum refund the ability point back.
    Bug #4
    4) Leveling a talent that you should not be allowed to consume the Ability Point, throws an error, but does not refund the Ability Point

    Now, I realize, I can track all this and code around it locally, but I was trying really hard not to make code dependent on any custom handling of abilities.