Софт RakSAMP Lite

SaraShepard

Новичок
1
0
Уважаемые знатоки! Я перерыл весь форум с утра и до следующего утра чтоб найти как сделать (или найти готовый) авторег и автолог с рандомными никами, нашел тему "Полезные сниппеты и функции", как эта тема может быть гайдом, когда код условно на питоне или языке C просто написан и не понятно где его применять в raksamp'e, это как создать гайд на ремонт смартфона в домашних условиях но не рассказать блять как его разобрать чтоб не повредить чего, на простые просьбы людей хотя бы сделать генератор ников - одни ответы: "Ну сделай", "Ну напиши че сложного то?" ну чё за хуйня то?

Поможет кто?
 
Последнее редактирование:

kyrtion

Известный
982
355
Лучше не использовать, если в скрипте ничего не используется зависимости. А также там где просто так тикают и всё - можно закомментировать если считаешь лишнее
UPD: Про задачей - прочитаешь инструкцию и для разработчиков в шапке
 

arc warden

Участник
138
21
чо делать если пишу /mm например нихуя не происходит т.е нету диалога
 

chromiusj

Известный
Модератор
5,656
3,959
чо делать если пишу /mm например нихуя не происходит т.е нету диалога
где пишешь?
1690994939879.png
 

danivjje

Новичок
5
0
если зайти на занятый никнейм/никнейм с запрещенными символами то клиент в консоль выводит Bad nickname, это отловить как-то можно?
 

whyega52

Гений, миллионер, плейбой, долбаеб
Модератор
2,799
2,661
если зайти на занятый никнейм/никнейм с запрещенными символами то клиент в консоль выводит Bad nickname, это отловить как-то можно?
Да, можно, если не через пакет, так через текст в консоли (сегодня посмотрю, если получится - скину код)

upd: Вот код, хз какой пакет приходит
Lua:
local ffi = require("ffi")


--HOOKS
local hook = {hooks = {}}
registerHandler("onUnload", function()
    for i, hook in ipairs(hook.hooks) do
        if hook.status then
            hook.stop()
        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

local originalErrorClientJoin


function errorClientJoin(...)
    print("errorClientJoin")
    return originalErrorClientJoin(...)
end


originalErrorClientJoin = hook.new(
    "void*(__cdecl*)(void*)",
    errorClientJoin, 0x459550
)
 
Последнее редактирование:

Fluffy1560

Активный
278
34
Да, можно, если не через пакет, так через текст в консоли (сегодня посмотрю, если получится - скину код)

upd: Вот код, хз какой пакет приходит
Lua:
local ffi = require("ffi")


--HOOKS
local hook = {hooks = {}}
registerHandler("onUnload", function()
    for i, hook in ipairs(hook.hooks) do
        if hook.status then
            hook.stop()
        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

local originalErrorClientJoin


function errorClientJoin(...)
    print("errorClientJoin")
    return originalErrorClientJoin(...)
end


originalErrorClientJoin = hook.new(
    "void*(__cdecl*)(void*)",
    errorClientJoin, 0x459550
)
А принтлог не проще?😹
 

sasha__1

Известный
27
12
если зайти на занятый никнейм/никнейм с запрещенными символами то клиент в консоль выводит Bad nickname, это отловить как-то можно?
Lua:
function onReceiveRPC(id, bs)
    if id == 130 then
        print('Bad nickname/online')
        exit()
    end
end
 

F0RQU1N and

Известный
1,307
497
Да, можно, если не через пакет, так через текст в консоли (сегодня посмотрю, если получится - скину код)

upd: Вот код, хз какой пакет приходит
Lua:
local ffi = require("ffi")


--HOOKS
local hook = {hooks = {}}
registerHandler("onUnload", function()
    for i, hook in ipairs(hook.hooks) do
        if hook.status then
            hook.stop()
        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

local originalErrorClientJoin


function errorClientJoin(...)
    print("errorClientJoin")
    return originalErrorClientJoin(...)
end


originalErrorClientJoin = hook.new(
    "void*(__cdecl*)(void*)",
    errorClientJoin, 0x459550
)
А нахуя? Там разве память под протекцией?
 
  • Нравится
Реакции: whyega52