Вопрос Обноление C_CSPlayer::UpdateClientSideAnimation

Начинающий
Статус
Оффлайн
Регистрация
7 Окт 2024
Сообщения
8
Реакции[?]
0
Поинты[?]
0
Как мне самим апдейтить клиент сайд анимки через луа? (C_CSPlayer::UpdateClientSideAnimation). Я понимаю, что через ffi, но не могу сделать.
 
Пользователь
Статус
Оффлайн
Регистрация
21 Мар 2020
Сообщения
110
Реакции[?]
49
Поинты[?]
1K
Начинающий
Статус
Оффлайн
Регистрация
7 Окт 2024
Сообщения
8
Реакции[?]
0
Поинты[?]
0
оно тебе не надо
Я хочу анимки как в ските сделать. Насколько я понял нужно самим апдейтить клиент сайд анимки, а то они по дефолту обновляются только когда чокед команды равны нулю
 
Пользователь
Статус
Оффлайн
Регистрация
2 Май 2022
Сообщения
357
Реакции[?]
46
Поинты[?]
24K
Код:
local main do
    ffi.cdef [[
        typedef struct {
            char  pad_0000[20];
            int m_nOrder;
            int m_nSequence;
            float m_flPrevCycle;
            float m_flWeight;
            float m_flWeightDeltaRate;
            float m_flPlaybackRate;
            float m_flCycle;
            void *m_pOwner;
            char  pad_0038[4];
        } c_anim_layer;
    ]]

    local function get_anim_layer(entity, i)
        return ffi.cast("c_anim_layer*", ffi.cast("uintptr_t", entity[0]) + 0x2990)[0][i]
    end

    local function on_update(player)
        local me = entity.get_local_player()

        if me == nil then
            return
        end

        if player == nil then
            return
        end

        local anim_layer = get_anim_layer(player, 12)

        if me == player then
            anim_layer.m_flWeight = 1
        end
    end

    events.post_update_clientside_animation(on_update)
end
 
Начинающий
Статус
Оффлайн
Регистрация
7 Окт 2024
Сообщения
8
Реакции[?]
0
Поинты[?]
0
Код:
local main do
    ffi.cdef [[
        typedef struct {
            char  pad_0000[20];
            int m_nOrder;
            int m_nSequence;
            float m_flPrevCycle;
            float m_flWeight;
            float m_flWeightDeltaRate;
            float m_flPlaybackRate;
            float m_flCycle;
            void *m_pOwner;
            char  pad_0038[4];
        } c_anim_layer;
    ]]

    local function get_anim_layer(entity, i)
        return ffi.cast("c_anim_layer*", ffi.cast("uintptr_t", entity[0]) + 0x2990)[0][i]
    end

    local function on_update(player)
        local me = entity.get_local_player()

        if me == nil then
            return
        end

        if player == nil then
            return
        end

        local anim_layer = get_anim_layer(player, 12)

        if me == player then
            anim_layer.m_flWeight = 1
        end
    end

    events.post_update_clientside_animation(on_update)
end
Зайка, мне нужно самим апдейтить клиент сайд анимейшн, а как сделать анимбрикеры я сам знаю
 
Пользователь
Статус
Оффлайн
Регистрация
2 Май 2022
Сообщения
357
Реакции[?]
46
Поинты[?]
24K
Зайка, мне нужно самим апдейтить клиент сайд анимейшн, а как сделать анимбрикеры я сам знаю
для чего тебе его апдейтить? ты случаем раздел с созданием читов не перепутал?
 
Модератор раздела "Создание скриптов для читов"
Модератор
Статус
Оффлайн
Регистрация
1 Фев 2020
Сообщения
1,197
Реакции[?]
390
Поинты[?]
45K
Начинающий
Статус
Оффлайн
Регистрация
7 Окт 2024
Сообщения
8
Реакции[?]
0
Поинты[?]
0
для чего тебе его апдейтить? ты случаем раздел с созданием читов не перепутал?
в нле клиентсайд анимки обновляются, только если чокед командс равно нулю, а я хочу сделать анимки как в ските(там клиентсайд анимки апдейтятся всегда)
 
Пользователь
Статус
Оффлайн
Регистрация
2 Май 2022
Сообщения
357
Реакции[?]
46
Поинты[?]
24K
мне твой ответ ничего не дал, ибо нет смысла апдейтить эвент этот..

ну вот тебе чуть кода, надеюсь разберешься

Код:
local original = ffi.cast("uintptr_t", utils.opcode_scan("client.dll", "8B F1 80 BE ? ? ? ? ? 74 36", - 5))

local function update_clientside(ecx, edx)
    -- your shit
    
    original(ecx, edx)
end
 
Начинающий
Статус
Оффлайн
Регистрация
7 Окт 2024
Сообщения
8
Реакции[?]
0
Поинты[?]
0
мне твой ответ ничего не дал, ибо нет смысла апдейтить эвент этот..

ну вот тебе чуть кода, надеюсь разберешься

Код:
local original = ffi.cast("uintptr_t", utils.opcode_scan("client.dll", "8B F1 80 BE ? ? ? ? ? 74 36", - 5))

local function update_clientside(ecx, edx)
    -- your shit
   
    original(ecx, edx)
end
Спасибо <3
 
Начинающий
Статус
Оффлайн
Регистрация
7 Окт 2024
Сообщения
8
Реакции[?]
0
Поинты[?]
0
Код:
ffi.cdef[[
    typedef void*(__thiscall* get_client_entity_t)(void*, int);
]]

local uintptr_t = ffi.typeof("uintptr_t**")

local this_call = function(call_function, parameters)
    return function(...)
        return call_function(parameters, ...)
    end
end

local entity_list_003 = ffi.cast(uintptr_t, utils.create_interface("client.dll", "VClientEntityList003"))
local get_entity_address = this_call(ffi.cast("get_client_entity_t", entity_list_003[0][3]), entity_list_003)

local original = ffi.cast("uintptr_t", utils.opcode_scan("client.dll", "8B F1 80 BE ? ? ? ? ? 74 36", - 5))

local original_func = ffi.cast("void(__thiscall*)(void*, void*)", original)

local function update_clientside(ecx, edx)   
    original_func(ecx, edx)
end

events.createmove_run:set(function()
    local self = entity.get_local_player()
    if not self or not self:is_alive() then
        return
    end

    local self_index = self:get_index()
    local self_address = get_entity_address(self_index)
    update_clientside(self_address, nil)
end)

Ваще понять не могу, какой второй параметр нужно передавать. Помогите, пожалуйста <3
 
Пользователь
Статус
Оффлайн
Регистрация
2 Май 2022
Сообщения
357
Реакции[?]
46
Поинты[?]
24K
Код:
ffi.cdef[[
    typedef void*(__thiscall* get_client_entity_t)(void*, int);
]]

local uintptr_t = ffi.typeof("uintptr_t**")

local this_call = function(call_function, parameters)
    return function(...)
        return call_function(parameters, ...)
    end
end

local entity_list_003 = ffi.cast(uintptr_t, utils.create_interface("client.dll", "VClientEntityList003"))
local get_entity_address = this_call(ffi.cast("get_client_entity_t", entity_list_003[0][3]), entity_list_003)

local original = ffi.cast("uintptr_t", utils.opcode_scan("client.dll", "8B F1 80 BE ? ? ? ? ? 74 36", - 5))

local original_func = ffi.cast("void(__thiscall*)(void*, void*)", original)

local function update_clientside(ecx, edx)  
    original_func(ecx, edx)
end

events.createmove_run:set(function()
    local self = entity.get_local_player()
    if not self or not self:is_alive() then
        return
    end

    local self_index = self:get_index()
    local self_address = get_entity_address(self_index)
    update_clientside(self_address, nil)
end)

Ваще понять не могу, какой второй параметр нужно передавать. Помогите, пожалуйста <3
на рандом потыкай, поищи в сурсах игры
 
Пользователь
Статус
Оффлайн
Регистрация
2 Май 2022
Сообщения
357
Реакции[?]
46
Поинты[?]
24K
Код:
--- @region: example: updateCSA
local vmt_hook = require("neverlose/vmt_hook")


ffi.cdef[[
    typedef void*(__thiscall* get_client_entity_t)(void*, int);
]]

local uintptr_t = ffi.typeof("uintptr_t**")
local this_call = function(call_function, parameters)
    return function(...)
        return call_function(parameters, ...)
    end
end

local entity_list_003 = ffi.cast(uintptr_t, utils.create_interface("client.dll", "VClientEntityList003"))
local get_entity_address = this_call(ffi.cast("get_client_entity_t", entity_list_003[0][3]), entity_list_003)

local hooked_function = nil
local cmd_struct = nil
local inside_updateCSA = function(thisptr, edx)
    hooked_function(thisptr, edx)
end

local update_hook = function(cmd)
    local self = entity.get_local_player()
    if not self or not self:is_alive() then
        return
    end

    local self_index = self:get_index()
    local self_address = get_entity_address(self_index)

    cmd_struct = cmd

    if not self_address or hooked_function then
        return
    end

    local new_point = vmt_hook.new(self_address)
    hooked_function = new_point.hook("void(__fastcall*)(void*, void*)", inside_updateCSA, 224)

end

events.createmove_run:set(update_hook)
делай че хочешь с кодом, если чет получится закинь сюда, потестим всем форумом
 
Начинающий
Статус
Оффлайн
Регистрация
6 Мар 2021
Сообщения
116
Реакции[?]
22
Поинты[?]
18K
Код:
--- @region: example: updateCSA
local vmt_hook = require("neverlose/vmt_hook")


ffi.cdef[[
    typedef void*(__thiscall* get_client_entity_t)(void*, int);
]]

local uintptr_t = ffi.typeof("uintptr_t**")
local this_call = function(call_function, parameters)
    return function(...)
        return call_function(parameters, ...)
    end
end

local entity_list_003 = ffi.cast(uintptr_t, utils.create_interface("client.dll", "VClientEntityList003"))
local get_entity_address = this_call(ffi.cast("get_client_entity_t", entity_list_003[0][3]), entity_list_003)

local hooked_function = nil
local cmd_struct = nil
local inside_updateCSA = function(thisptr, edx)
    hooked_function(thisptr, edx)
end

local update_hook = function(cmd)
    local self = entity.get_local_player()
    if not self or not self:is_alive() then
        return
    end

    local self_index = self:get_index()
    local self_address = get_entity_address(self_index)

    cmd_struct = cmd

    if not self_address or hooked_function then
        return
    end

    local new_point = vmt_hook.new(self_address)
    hooked_function = new_point.hook("void(__fastcall*)(void*, void*)", inside_updateCSA, 224)

end

events.createmove_run:set(update_hook)
делай че хочешь с кодом, если чет получится закинь сюда, потестим всем форумом
Сделать не через костыли - :stupid:
СДЕЛАТЬ ЧЕРЕЗ КОСТЫЛИ - :negr::negr::negr::goplol:✅
 
Пользователь
Статус
Оффлайн
Регистрация
2 Май 2022
Сообщения
357
Реакции[?]
46
Поинты[?]
24K
Сделать не через костыли - :stupid:
СДЕЛАТЬ ЧЕРЕЗ КОСТЫЛИ - :negr::negr::negr::goplol:✅
какая разница? в нле если хукать CSA, ничего меняться не будет, ибо ИЗНАЧАЛЬНО В ЧИТЕ обновляется он если chokedcommands == 0
 
Сверху Снизу