LUA скрипт [NL] Mask Changer (FREE)

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
20 Апр 2021
Сообщения
2
Реакции
4
I put it on the neverlose market as open source, but the staff removed it so they could sell their paid mask changer luas.
lmjloFhW.png


So here you go, I'm releasing it here on yougame.
Credits : dhdj

mask changer.lua:
Expand Collapse Copy
local __thiscall = function(func, this)
    return function(...) return func(this, ...) end
end
local interface_ptr = ffi.typeof("void***")
local vtable_bind = function(module, interface, index, typedef)
    local addr = ffi.cast("void***", Utils.CreateInterface(module, interface)) or error(interface .. " was not found")
    return __thiscall(ffi.cast(typedef, addr[0][index]), addr)
end
local vtable_entry = function(instance, i, ct)
    return ffi.cast(ct, ffi.cast(interface_ptr, instance)[0][i])
end
local vtable_thunk = function(i, ct)
    local t = ffi.typeof(ct)
    return function(instance, ...)
        return vtable_entry(instance, i, t)(instance, ...)
    end
end

local get_class_name = vtable_thunk(143, "const char*(__thiscall*)(void*)")
local set_model_index = vtable_thunk(75, "void(__thiscall*)(void*,int)")

local get_client_entity_from_handle = vtable_bind("client.dll", "VClientEntityList003", 4, "void*(__thiscall*)(void*,void*)")
local get_model_index = vtable_bind("engine.dll", "VModelInfoClient004", 2, "int(__thiscall*)(void*, const char*)")

local rawientitylist = Utils.CreateInterface('client.dll', 'VClientEntityList003') or error('VClientEntityList003 was not found', 2)

local ientitylist = ffi.cast(interface_ptr, rawientitylist) or error('rawientitylist is nil', 2)
local get_client_entity = ffi.cast('void*(__thiscall*)(void*, int)', ientitylist[0][3]) or error('get_client_entity was not found', 2)

local client_string_table_container = ffi.cast(interface_ptr, Utils.CreateInterface('engine.dll', 'VEngineClientStringTable001')) or error('VEngineClientStringTable001 was not found', 2)
local find_table = vtable_thunk(3, 'void*(__thiscall*)(void*, const char*)')

local model_info = ffi.cast(interface_ptr, Utils.CreateInterface('engine.dll', 'VModelInfoClient004')) or error('VModelInfoClient004 wasnt found', 2)

ffi.cdef [[
    typedef void(__thiscall* find_or_load_model_t)(void*, const char*);
]]

local add_string = vtable_thunk(8, "int*(__thiscall*)(void*, bool, const char*, int length, const void* userdata)")
local find_or_load_model = ffi.cast("find_or_load_model_t", model_info[0][43]) -- vtable thunk crashes (?)

local function _precache(szModelName)
    if szModelName == "" then return end -- don't precache empty strings (crash)
    if szModelName == nil then return end
    szModelName = string.gsub(szModelName, [[\]], [[/]])

    local m_pModelPrecacheTable = find_table(client_string_table_container, "modelprecache")
    if m_pModelPrecacheTable ~= nil then
        find_or_load_model(model_info, szModelName)
        add_string(m_pModelPrecacheTable, false, szModelName, -1, nil)
    end
end

local list_names =
{
    'None',
    'Dallas',
    'Battle Mask',
    'Evil Clown',
    'Anaglyph',
    'Boar',
    'Bunny',
    'Bunny Gold',
    'Chains',
    'Chicken',
    'Devil Plastic',
    'Hoxton',
    'Pumpkin',
    'Samurai',
    'Sheep Bloody',
    'Sheep Gold',
    'Sheep Model',
    'Skull',
    'Template',
    'Wolf',
    'Doll',
    'Hitler'
}

local masks = Menu.Combo("Mask Changer", "Mask Changer", list_names, 0)

local models = {
    '',
    'models/player/holiday/facemasks/facemask_dallas.mdl',
    'models/player/holiday/facemasks/facemask_battlemask.mdl',
    'models/player/holiday/facemasks/evil_clown.mdl',
    'models/player/holiday/facemasks/facemask_anaglyph.mdl',
    'models/player/holiday/facemasks/facemask_boar.mdl',
    'models/player/holiday/facemasks/facemask_bunny.mdl',
    'models/player/holiday/facemasks/facemask_bunny_gold.mdl',
    'models/player/holiday/facemasks/facemask_chains.mdl',
    'models/player/holiday/facemasks/facemask_chicken.mdl',
    'models/player/holiday/facemasks/facemask_devil_plastic.mdl',
    'models/player/holiday/facemasks/facemask_hoxton.mdl',
    'models/player/holiday/facemasks/facemask_pumpkin.mdl',
    'models/player/holiday/facemasks/facemask_samurai.mdl',
    'models/player/holiday/facemasks/facemask_sheep_bloody.mdl',
    'models/player/holiday/facemasks/facemask_sheep_gold.mdl',
    'models/player/holiday/facemasks/facemask_sheep_model.mdl',
    'models/player/holiday/facemasks/facemask_skull.mdl',
    'models/player/holiday/facemasks/facemask_template.mdl',
    'models/player/holiday/facemasks/facemask_wolf.mdl',
    'models/player/holiday/facemasks/porcelain_doll.mdl',
    'models/player/custom_player/kuristaja/hitler/hitler.mdl',
}

local last_model = 0

local model_index = -1
local enabled = false

local function precache(modelPath)
    if modelPath == "" then return -1 end -- don't crash.
    local local_model_index = get_model_index(modelPath)
    if local_model_index == -1 then
        _precache(modelPath)
    end
    return get_model_index(modelPath)
end

local function on_paint()
    if not EngineClient.IsInGame() then
        last_model = 0
        return
    end
    if last_model ~= masks:Get() then
        last_model = masks:Get()
        if last_model == 0 then
            enabled = false
        else
            enabled = true
            model_index = precache(models[last_model + 1])
        end
    end
end

Cheat.RegisterCallback("draw", on_paint)

local function get_player_address(lp)
    return get_client_entity(ientitylist, lp:EntIndex())
end

local function on_setup_command(cmd)
    if model_index == -1 then return precache(models[last_model + 1]) end

    local local_player = EntityList.GetLocalPlayer()
    if enabled then
        local lp_addr = ffi.cast("intptr_t*", get_player_address(local_player))
        local m_AddonModelsHead = ffi.cast("intptr_t*", lp_addr + 0x462F) -- E8 ? ? ? ? A1 ? ? ? ? 8B CE 8B 40 10
        local i, next_model = m_AddonModelsHead[0], -1

        while i ~= -1 do
            next_model = ffi.cast("intptr_t*", lp_addr + 0x462C)[0] + 0x18 * i -- this is the pModel (CAddonModel) afaik
            i = ffi.cast("intptr_t*", next_model + 0x14)[0]
            local m_pEnt = ffi.cast("intptr_t**", next_model)[0] -- CHandle<C_BaseAnimating> m_hEnt -> Get()
            local m_iAddon = ffi.cast("intptr_t*", next_model + 0x4)[0]
            if tonumber(m_iAddon) == 16 then -- face mask addon bits knife = 10
                local entity = get_client_entity_from_handle(m_pEnt)
                set_model_index(entity, model_index)
            end
        end
    end
end

Cheat.RegisterCallback("pre_prediction", on_setup_command)

Cheat.RegisterCallback("frame_stage", function(stage)
    if stage ~= 5 then return end
    local local_player = EntityList.GetLocalPlayer()
    if local_player == nil then return end
    if enabled then
        if bit.band(local_player:GetProp("m_iAddonBits"), 0x10000) ~= 0x10000 then
            local_player:SetProp("m_iAddonBits", 0x10000 + local_player:GetProp("m_iAddonBits"))
        end
    else
        if bit.band(local_player:GetProp("m_iAddonBits"), 0x10000) == 0x10000 then
            local_player:SetProp("m_iAddonBits", local_player:GetProp("m_iAddonBits") - 0x10000)
        end
    end
end)

Don't buy their shit pasted crashing luas.
 
Последнее редактирование:
Лят, хотел на никсвар сделать, но столкнулся с пропами
 
, but the staff removed it so they could sell their paid mask changer luas.
Original author should agree with it, if you need this on market.

Пожалуйста, авторизуйтесь для просмотра ссылки.
Код:
Expand Collapse Copy
Configs/Scripts should be unique and shouldn’t be based on other people’s paid configs. You can use other people work if they’re fine with it.
 
Original author should agree with it, if you need this on market.

Пожалуйста, авторизуйтесь для просмотра ссылки.
Код:
Expand Collapse Copy
Configs/Scripts should be unique and shouldn’t be based on other people’s paid configs. You can use other people work if they’re fine with it.
i wrote the lua.
dhdj wrote this

code_language.lua:
Expand Collapse Copy
        local m_AddonModelsHead = ffi.cast("intptr_t*", lp_addr + 0x462F) -- E8 ? ? ? ? A1 ? ? ? ? 8B CE 8B 40 10
        local i, next_model = m_AddonModelsHead[0], -1

        while i ~= -1 do
            next_model = ffi.cast("intptr_t*", lp_addr + 0x462C)[0] + 0x18 * i -- this is the pModel (CAddonModel) afaik
            i = ffi.cast("intptr_t*", next_model + 0x14)[0]
            local m_pEnt = ffi.cast("intptr_t**", next_model)[0] -- CHandle<C_BaseAnimating> m_hEnt -> Get()
            local m_iAddon = ffi.cast("intptr_t*", next_model + 0x4)[0]
            if tonumber(m_iAddon) == 16 then -- face mask addon bits knife = 10
                local entity = get_client_entity_from_handle(m_pEnt)
                set_model_index(entity, model_index)
            end
        end
+ i have permission to use that small part.
 
Последнее редактирование:
1111
 
Последнее редактирование:
Original author should agree with it, if you need this on market.

Пожалуйста, авторизуйтесь для просмотра ссылки.
Код:
Expand Collapse Copy
Configs/Scripts should be unique and shouldn’t be based on other people’s paid configs. You can use other people work if they’re fine with it.
Это если пастить у другого. А если говорить про одинаковые функции - пол маркета удалить надо

так там же ffi есть, не?
Да там в коде бит используется и Get/Set Prop, про наличие бита в никсе не знаю,но система пропов там ёбнутая (лично для меня)
 
Последнее редактирование:
Это если пастить у другого. А если говорить про одинаковые функции - пол маркета удалить надо


Да там в коде бит используется и Get/Set Prop, про наличие бита в никсе не знаю,но система пропов там ёбнутая (лично для меня)
ну так епт, берешь базу - локального игрока, ищешь на каком нибудь uc оффсет и кастишь свой проп, делов то
 
Назад
Сверху Снизу