shadowHook = hook.new('void(__cdecl *)(unsigned char, CVector const*, float, float, float, float, short, unsigned char, unsigned char, unsigned char)', shadowHook, 0x707930)
вызывает ошибку  declaration specifier expected near 'CVector'

вот весь код

local ffi = require("ffi")
local samem = require("SAMemory")
local mad = require("MoonAdditions")

samem.require("CVehicle")
samem.require("vector3d")

--HOOKS
local hook = {hooks = {}}
addEventHandler('onScriptTerminate', function(scr)
    if scr == script.this then
        for i, hook in ipairs(hook.hooks) do
            if hook.status then
                hook.stop()
            end
        end
    end
end)
ffi.cdef [[
    int VirtualProtect(void* lpAddress, unsigned long dwSize, unsigned long flNewProtect, unsigned long* lpflOldProtect);
]]
function hook.new(cast, callback, hook_addr, size)
    jit.off(callback, true) --off jit compilation | thx FYP
    local size = size or 5
    local new_hook = {}
    local detour_addr = tonumber(ffi.cast('intptr_t', ffi.cast('void*', ffi.cast(cast, callback))))
    local void_addr = ffi.cast('void*', hook_addr)
    local old_prot = ffi.new('unsigned long[1]')
    local org_bytes = ffi.new('uint8_t[?]', size)
    ffi.copy(org_bytes, void_addr, size)
    local hook_bytes = ffi.new('uint8_t[?]', size, 0x90)
    hook_bytes[0] = 0xE9
    ffi.cast('uint32_t*', hook_bytes + 1)[0] = detour_addr - hook_addr - 5
    new_hook.call = ffi.cast(cast, hook_addr)
    new_hook.status = false
    local function set_status(bool)
        new_hook.status = bool
        ffi.C.VirtualProtect(void_addr, size, 0x40, old_prot)
        ffi.copy(void_addr, bool and hook_bytes or org_bytes, size)
        ffi.C.VirtualProtect(void_addr, size, old_prot[0], old_prot)
    end
    new_hook.stop = function() set_status(false) end
    new_hook.start = function() set_status(true) end
    new_hook.start()
    table.insert(hook.hooks, new_hook)
    return setmetatable(new_hook, {
        __call = function(self, ...)
            self.stop()
            local res = self.call(...)
            self.start()
            return res
        end
    })
end
--HOOKS










function main()
    while not isSampAvailable() do wait(80) end
	
	-- 0x707930
	-- void(__cdecl *)(unsigned char, CVector const*, float, float, float, float, short, unsigned char, unsigned char, unsigned char)
	-- void(__cdecl*)(CVehicle*, int, uintptr_t, vector3d*, float, float, float, float, unsigned char, unsigned char, unsigned char, float)
	-- dialogHook = hook.new('void(__cdecl *)(void *this, uint16_t wID, uint8_t iStyle, char *szCaption, char *szText, char *szButton1, char *szButton2, bool bSend)', dialogHook, getModuleHandle('samp.dll') + 0x6B9C0)

	
	shadowHook = hook.new('void(__cdecl *)(unsigned char, CVector const*, float, float, float, float, short, unsigned char, unsigned char, unsigned char)', shadowHook, 0x707930)
    while true do wait(0) 
		--renderShadow()
    end
end


function shadowHook(this, shadowTextureType, posn, frontX, sideX, sideY, intensity, red, green, blue)
	print(this, shadowTextureType, posn, frontX, sideX, sideY, intensity, red, green, blue)
    dialogHook(this, shadowTextureType, posn, frontX, sideX, sideY, intensity, red, green, blue)
end





вот сурсы функции // Converted from cdecl void CShadows::StoreShadowToBeRendered(uchar shadowTextureType,CVector const *posn,float frontX,float frontY,float sideX,float sideY,short intensity,uchar red,uchar green,uchar blue) 0x707930
void CShadows::StoreShadowToBeRendered(unsigned char shadowTextureType, CVector const* posn, float frontX, float frontY, float sideX, float sideY, short intensity, unsigned char red, unsigned char green, unsigned char blue) {
    ((void(__cdecl *)(unsigned char, CVector const*, float, float, float, float, short, unsigned char, unsigned char, unsigned char))0x707930)(shadowTextureType, posn, frontX, frontY, sideX, sideY, intensity, red, green, blue);
}