Урок DisableWearables "1" или как убрать дотовский скин с кастомной модельки после обновления

ddd3m0s

Пользователь
25 Апр 2024
12
2
Проект
anton_box
Кому впадлу читать текст смотрите код там все понятно
Недавно я вернулся в мир моддинга и заметил что флаг "DisableWearables" "1" работает некорректно и нестабильно. Загрузил модель открыл все отлично ни скинов ни проблем, прошел час моего копания в kv и в модельдоке и все, появился уродливый плащ на рубика прям на моей модели. Почитал здесь форум, дискорд сервера, новые API и не нашел ничего дельного. Кто то предлагал через Convar отправлять в консоль команды, кто то удалять шмотки при спавне героя используя GetChildren(), но мне ничего не помогало. Несколько дней я задавал вопросы разным людям и на разных дискорд серверах и такая же история, Convar, GetChildren() и тд.
Потом я полез в исходники уже рабочих кастомок, в OverVodka я нашел как раз эту функцию с GetChildren, только вот момент, она вообще не вызывалась в коде, была прописана, но не вызывалась.
Прошерстив еще пару кастомок я дошел до наших китайских друзей с CHC и нашел вот этот занимательный блок:
Lua:
    local model = hero:GetModelName()

    hero:SetModel("models/development/invisiblebox.vmdl")
    hero:SetOriginalModel("models/development/invisiblebox.vmdl")

    Timers:CreateTimer(0.2, function()
        if hero and not hero:IsNull() then
            hero:SetModel(model)
            hero:SetOriginalModel(model)
        end
    end)
Довольно занимательная идея удаляя модельку героя вы удаляете и все скины, а после возвращаете чистую модель, я немного его доработал чтоб он не проверял каждого крипа и т.д., подключил его к слушателю и вуаля, все работает без каких-либо проблем, прикрепляю снизу актуальный вариант и !!!ВАЖНО!!! "DisableWearables" "1" в KV НЕ отключать, иначе останутся партиклы оригинального героя, всем спасибо надеюсь кому то помог.
Код:
    ListenToGameEvent("npc_spawned", Dynamic_Wrap(self, "OnNPCSpawned"), self)
Это слушатель его в addon_game_mode.lua в функцию InitGameMode
Код:
function ВАШ_ГЕЙМ_МОД:OnNPCSpawned(keys)
    local hero = EntIndexToHScript(keys.entindex)

    if not hero then
        return
    end

    if not hero:IsRealHero() then
        return
    end

    local model = hero:GetModelName()

    hero:SetModel("models/development/invisiblebox.vmdl")
    hero:SetOriginalModel("models/development/invisiblebox.vmdl")

    Timers:CreateTimer(0.2, function()
        if hero and not hero:IsNull() then
            hero:SetModel(model)
            hero:SetOriginalModel(model)
        end
    end)
end
Это сама функция, обязательно замените ВАШГЕЙММОД на нужное значение (например
COverthrowGameMode) и вставьте ее где то вначале файла
 
Реклама: