CheatMenuSA/moonloader/lib/cheat-menu/libraries/casts.lua
2020-12-03 03:18:34 +06:00

147 lines
6.1 KiB
Lua

local module = {}
local ffi = require 'ffi'
local memory = require 'memory'
ffi.cdef
[[
typedef unsigned int CBaseModelInfo;
]]
module.CBaseModelInfo =
{
}
module.CCutsceneMgr =
{
ms_running = readMemory(0x00B5F851,1,false)
}
module.CEntity =
{
SetRwObjectAlpha = ffi.cast("int(__thiscall *)(int pentity, int alpha)",0x5332C0)
}
module.CModelInfo =
{
GetModelInfoFromModel = ffi.cast("CBaseModelInfo(*)(unsigned int model)",0x403DA0),
GetModelInfoFromName = ffi.cast("CBaseModelInfo(*)(const char *modelName, unsigned int pmodel_id_return)",0x4C5940),
IsTrainModel = ffi.cast('bool(*)(int model)',0x4C5AD0),
IsVehicleModel = ffi.cast('int(*)(int model)',0x4C5C80),
ms_modelInfoPtrs = ffi.cast("uintptr_t*",readMemory(0x403DA4 + 3,4,false)) -- FLA Compatible
}
module.CVehicle =
{
IsValidModForVehicle = ffi.cast('bool(*)(int model, int pVeh)',0x49B010)
}
function module.CModelInfo.GetNameFromModel(model)
return ffi.string(ffi.cast("char*", casts.CModelInfo.ms_modelInfoPtrs[tonumber(model)] + 0x32)) or ""
end
function module.CModelInfo.GetModelFromName(name)
local pmodel = allocateMemory(4)
casts.CModelInfo.GetModelInfoFromName(name,pmodel)
local model = readMemory(pmodel,4,false)
freeMemory(pmodel)
if model > 0 and model < 1000000 and module.CModelInfo.GetNameFromModel(model) ~= "" then
return model
else
return 0
end
end
module.CTimeCyc =
{
curr_weather = ffi.cast("short*", 0xC81320),
next_weather = ffi.cast("short*", 0xC8131C),
hours = ffi.cast("unsigned char*", 0xB70153),
mins = ffi.cast("unsigned char*", 0xB70152),
secs = ffi.cast("unsigned short*", 0xB70150),
time_scale = ffi.cast("unsigned int*", 0xB7015C),
initialise = ffi.cast("void (__cdecl*)(void)", 0x5BBAC0),
ambient_red = ffi.cast("unsigned char*", memory.getuint32(0x560C61)),
ambient_green = ffi.cast("unsigned char*", memory.getuint32(0x55F4D6)),
ambient_blue = ffi.cast("unsigned char*", memory.getuint32(0x55F4E8)),
ambient_obj_red = ffi.cast("unsigned char*", memory.getuint32(0x55F4FA)),
ambient_obj_green = ffi.cast("unsigned char*", memory.getuint32(0x55F50C)),
ambient_obj_blue = ffi.cast("unsigned char*", memory.getuint32(0x55F51E)),
sky_top_red = ffi.cast("unsigned char*", memory.getuint32(0x55F531)),
sky_top_green = ffi.cast("unsigned char*", memory.getuint32(0x55F53D)),
sky_top_blue = ffi.cast("unsigned char*", memory.getuint32(0x55F549)),
sky_bottom_red = ffi.cast("unsigned char*", memory.getuint32(0x55F555)),
sky_bottom_green = ffi.cast("unsigned char*", memory.getuint32(0x55F561)),
sky_bottom_blue = ffi.cast("unsigned char*", memory.getuint32(0x55F56D)),
sun_core_red = ffi.cast("unsigned char*", memory.getuint32(0x55F579)),
sun_core_green = ffi.cast("unsigned char*", memory.getuint32(0x55F585)),
sun_core_blue = ffi.cast("unsigned char*", memory.getuint32(0x55F591)),
sun_corona_red = ffi.cast("unsigned char*", memory.getuint32(0x55F59D)),
sun_corona_green = ffi.cast("unsigned char*", memory.getuint32(0x55F5A9)),
sun_corona_blue = ffi.cast("unsigned char*", memory.getuint32(0x55F5B5)),
sun_size = ffi.cast("unsigned char*", memory.getuint32(0x55F5C0)),
sprite_size = ffi.cast("unsigned char*", memory.getuint32(0x55F5D2)),
sprite_brightness = ffi.cast("unsigned char*", memory.getuint32(0x55F5E4)),
shadow_strength = ffi.cast("unsigned char*", memory.getuint32(0x55F5F7)),
light_shadow_strength = ffi.cast("unsigned char*", memory.getuint32(0x55F603)),
pole_shadow_strength = ffi.cast("unsigned char*", memory.getuint32(0x55F60F)),
far_clip = ffi.cast("short*", memory.getuint32(0x55F61B)),
fog_start = ffi.cast("short*", memory.getuint32(0x55F62E)),
lights_on_ground_brightness = ffi.cast("unsigned char*", memory.getuint32(0x55F640)),
low_clouds_red = ffi.cast("unsigned char*", memory.getuint32(0x55F653)),
low_clouds_green = ffi.cast("unsigned char*", memory.getuint32(0x55F65F)),
low_clouds_blue = ffi.cast("unsigned char*", memory.getuint32(0x55F66B)),
fluffy_clouds_red = ffi.cast("unsigned char*", memory.getuint32(0x55F677)),
fluffy_clouds_green = ffi.cast("unsigned char*", memory.getuint32(0x55F683)),
fluffy_clouds_blue = ffi.cast("unsigned char*", memory.getuint32(0x55F690)),
water_red = ffi.cast("unsigned char*", memory.getuint32(0x55F69C)),
water_green = ffi.cast("unsigned char*", memory.getuint32(0x55F6B0)),
water_blue = ffi.cast("unsigned char*", memory.getuint32(0x55F6C3)),
water_alpha = ffi.cast("unsigned char*", memory.getuint32(0x55F6D6)),
postfx1_red = ffi.cast("unsigned char*", memory.getuint32(0x55F6E9)),
postfx1_green = ffi.cast("unsigned char*", memory.getuint32(0x55F6FC)),
postfx1_blue = ffi.cast("unsigned char*", memory.getuint32(0x55F70F)),
postfx1_alpha = ffi.cast("unsigned char*", memory.getuint32(0x55F725)),
postfx2_red = ffi.cast("unsigned char*", memory.getuint32(0x55F73B)),
postfx2_green = ffi.cast("unsigned char*", memory.getuint32(0x55F751)),
postfx2_blue = ffi.cast("unsigned char*", memory.getuint32(0x55F767)),
postfx2_alpha = ffi.cast("unsigned char*", memory.getuint32(0x55F77D)),
cloud_alpha = ffi.cast("unsigned char*", memory.getuint32(0x55F793)),
waterfog_alpha = ffi.cast("unsigned char*", memory.getuint32(0x55F7B8)),
high_light_min_intensity = ffi.cast("unsigned char*", memory.getuint32(0x55F7A9)),
directional_mult = ffi.cast("unsigned char*", memory.getuint32(0x55F7C7)),
}
function module.CBaseModelInfo.GetModelType(model_id)
local pinfo = module.CModelInfo.GetModelInfoFromModel(model_id)
local info = readMemory(pinfo,4,false)
if info ~= 0 then
return callFunction(readMemory(info+0x10, 4,false), 1, 1, model_id)
end
end
return module