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

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


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

mask changer.lua:
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.
 
Последнее редактирование:
Легенда форума
Статус
Оффлайн
Регистрация
16 Сен 2018
Сообщения
4,000
Реакции[?]
1,946
Поинты[?]
7K
Начинающий
Статус
Оффлайн
Регистрация
20 Апр 2021
Сообщения
2
Реакции[?]
4
Поинты[?]
0
Original author should agree with it, if you need this on market.

Пожалуйста, авторизуйтесь для просмотра ссылки.
Код:
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:
        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.
 
Последнее редактирование:
Пользователь
Статус
Оффлайн
Регистрация
28 Фев 2018
Сообщения
429
Реакции[?]
94
Поинты[?]
10K
Original author should agree with it, if you need this on market.

Пожалуйста, авторизуйтесь для просмотра ссылки.
Код:
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, про наличие бита в никсе не знаю,но система пропов там ёбнутая (лично для меня)
 
Последнее редактирование:
Nike.lua
Олдфаг
Статус
Оффлайн
Регистрация
13 Окт 2020
Сообщения
2,746
Реакции[?]
1,465
Поинты[?]
2K
Это если пастить у другого. А если говорить про одинаковые функции - пол маркета удалить надо


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