я пытался вынести нахуй, 3 раза реализовал, в итоге нихуя не меняло просто. хз ща попробую щеразДа можно, например в tornado lua есть маск ченджер, но там под обфой
По моему все же нельзя, ибо градиент можно только рендеритья пытался вынести нахуй, 3 раза реализовал, в итоге нихуя не меняло просто. хз ща попробую щераз
чо?По моему все же нельзя, ибо градиент можно только рендерить
яне интересно всерьез написание на нее луашек.
пока не понятно ничего, будем пытаться дальшеЧё там, как прогресс? Про рендор я о том что его можно только на экран выводить
написалСкрытое содержимое
Чё там, как прогресс? Про рендор я о том что его можно только на экран выводить
Бля, я темами ошибсяпока не понятно ничего, будем пытаться дальше
Ждём слив сурсанаписал
он пока крашит, если не в падлу будет, пофикшу и скинуЖдём слив сурса
сделал? маскченджерон пока крашит, если не в падлу будет, пофикшу и скину
краши фиксанул, сурсов уже нету, как и всех луашек, но там xor хуево работаетсделал? маскченджер
сделал? маскченджер
краши фиксанул, сурсов уже нету, как и всех луашек, но там xor хуево работает
Ждём слив сурса
local ffi = require "ffi"
local bit = require "bit"
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***", client.create_interface(_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 = client.create_interface("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, client.create_interface("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, client.create_interface("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 find_or_load_model = vtable_thunk(43, "find_or_load_model_t")
local function get_player_address(lp)
return get_client_entity(ientitylist, lp:index())
end
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 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 masks = {
"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",
}
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",
}
local list = ui.add_dropdown("Mask Changer", masks)
local last_model = 0
local model_index = -1
local enabled = false
callbacks.register("paint", function()
if not engine.in_game() then
last_model = 0
return
end
if last_model ~= list:get() then
last_model = list:get()
if last_model == 0 then
enabled = false
else
enabled = true
model_index = precache(models[last_model + 1])
end
end
end)
callbacks.register("predicted_move", function(_) -- what the fuck is "pre_prediction"???
if model_index == -1 then return precache(models[last_model + 1]) end
local local_player = entity_list.get_client_entity(engine.get_local_player())
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)
callbacks.register("pre_frame_stage", function(stage)
if stage ~= 5 then return end
local local_player = entity_list.get_client_entity(engine.get_local_player())
if local_player == nil then return end
if enabled then
if bit.band(local_player:get_prop("DT_CSPlayer", "m_iAddonBits"):get_int(), 0x10000) ~= 0x10000 then
local_player:get_prop("DT_CSPlayer", "m_iAddonBits"):set_int(0x10000 + local_player:get_prop("DT_CSPlayer", "m_iAddonBits"):get_int())
end
else
if bit.band(local_player:get_prop("DT_CSPlayer", "m_iAddonBits"):get_int(), 0x10000) == 0x10000 then
local_player:get_prop("DT_CSPlayer", "m_iAddonBits"):set_int(local_player:get_prop("DT_CSPlayer", "m_iAddonBits"):get_int() - 0x10000)
end
end
end)
уверено при свапе оружия атачментсы меняются и сетается другая маска))))Код:local ffi = require "ffi" local bit = require "bit" 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***", client.create_interface(_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 = client.create_interface("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, client.create_interface("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, client.create_interface("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 find_or_load_model = vtable_thunk(43, "find_or_load_model_t") local function get_player_address(lp) return get_client_entity(ientitylist, lp:index()) end 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 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 masks = { "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", } 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", } local list = ui.add_dropdown("Mask Changer", masks) local last_model = 0 local model_index = -1 local enabled = false callbacks.register("paint", function() if not engine.in_game() then last_model = 0 return end if last_model ~= list:get() then last_model = list:get() if last_model == 0 then enabled = false else enabled = true model_index = precache(models[last_model + 1]) end end end) callbacks.register("predicted_move", function(_) -- what the fuck is "pre_prediction"??? if model_index == -1 then return precache(models[last_model + 1]) end local local_player = entity_list.get_client_entity(engine.get_local_player()) 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) callbacks.register("pre_frame_stage", function(stage) if stage ~= 5 then return end local local_player = entity_list.get_client_entity(engine.get_local_player()) if local_player == nil then return end if enabled then if bit.band(local_player:get_prop("DT_CSPlayer", "m_iAddonBits"):get_int(), 0x10000) ~= 0x10000 then local_player:get_prop("DT_CSPlayer", "m_iAddonBits"):set_int(0x10000 + local_player:get_prop("DT_CSPlayer", "m_iAddonBits"):get_int()) end else if bit.band(local_player:get_prop("DT_CSPlayer", "m_iAddonBits"):get_int(), 0x10000) == 0x10000 then local_player:get_prop("DT_CSPlayer", "m_iAddonBits"):set_int(local_player:get_prop("DT_CSPlayer", "m_iAddonBits"):get_int() - 0x10000) end end end)
код не мой, делал не я, претензии не ко мнеуверено при свапе оружия атачментсы меняются и сетается другая маска))))
на секунду если что, а не навсегда
так не в этом дело, я просто знаю как оно работаеткод не мой, делал не я, претензии не ко мне
Короче там все нормально, НО когда перезаходишь на карту выскакивает message box cmodelloader::findmodel null name cs go , как это пофиксить?так не в этом дело, я просто знаю как оно работает
ты вроде кодер луа, чем там на фаталити делал. чо сам не подумаешьКороче там все нормально, НО когда перезаходишь на карту выскакивает message box cmodelloader::findmodel null name cs go , как это пофиксить?
Проект предоставляет различный материал, относящийся к сфере киберспорта, программирования, ПО для игр, а также позволяет его участникам общаться на многие другие темы. Почта для жалоб: admin@yougame.biz