Results 1 to 3 of 3

Thread: [Bug] Wearable models are "frozen" on first load in Source 2

  1. #1
    Basic Member
    Join Date
    Aug 2014
    Posts
    17

    [Bug] Wearable models are "frozen" on first load in Source 2

    When you iterate over the child entities of a hero and try to change the dota_item_wearable models, the models remain the original ones, although GetModelName() returns the new set model.
    If you disconnect and load the map again it works. This makes all wearable modification effectively impossible outside Workshop Tools.

    Code by Noya

    Code:
    function HideWearables( hero )
     --local hero = event.caster
     --local ability = event.ability
     --local duration = ability:GetLevelSpecialValueFor( "duration", ability:GetLevel() - 1 )
     print("Hiding Wearables")
     --hero:AddNoDraw() -- Doesn't work on classname dota_item_wearable
    
     hero.wearableNames = {} -- In here we'll store the wearable names to revert the change
     hero.hiddenWearables = {} -- Keep every wearable handle in a table, as its way better to iterate than in the MovePeer system
        local model = hero:FirstMoveChild()
        while model ~= nil do
            if model:GetClassname() ~= "" and model:GetClassname() == "dota_item_wearable" then
                local modelName = model:GetModelName()
                if string.find(modelName, "invisiblebox") == nil then
                 -- Add the original model name to revert later
                 table.insert(hero.wearableNames,modelName)
                 print("Hidden "..modelName.."")
    
                 -- Set model invisible
                 model:SetModel("models/development/invisiblebox.vmdl")
                 table.insert(hero.hiddenWearables,model)
                end
            end
            model = model:NextMovePeer()
            if model ~= nil then
             print("Next Peer:" .. model:GetModelName())
            end
        end
    end
    Identical output both times, but the models only get hidden on the second run.

  2. #2
    Basic Member Noya's Avatar
    Join Date
    Dec 2011
    Location
    Uruguay
    Posts
    12,904
    Worth noting that SetOriginalModel(string model) can not be applied to a dota_item_wearable, as it can only be applied to a BaseNPC.

    This SetOriginalModel function is usually needed when changing models of heroes dynamically, so if this is exposed to CBaseEntity, this issue might be resolved this way.


    Added to the list.

  3. #3
    Basic Member Noya's Avatar
    Join Date
    Dec 2011
    Location
    Uruguay
    Posts
    12,904
    This can be solved by adding SendToServerConsole( "dota_combine_models 0" )

    Marking as "fixed"

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •