Софт RakSAMP Lite

FlouZip

Участник
64
5
Lua:
local sampev = require("samp.events")
require("Tasking")
require("addon")


local nickname = getNick()


function onLoad()
    print("loaded")
    print(nickname)
end


function onUpdate()
    Tasking.tick()
end



function sampev.onShowDialog(id, style, title, btn1, btn2, text)
    local function sendDialogResponse(button, list, input)
        local bs = bitStream.new()
        bs:writeUInt16(id)
        bs:writeUInt8(button)
        bs:writeInt16(list)
        bs:writeUInt8(input:len())
        bs:writeString(input)
        bs:sendRPC(62)
    end

    if title: find("1/4") then
        sendDialogResponse(1, -1, "ТВОЙ ПАРОЛЬ")
        return
    end

    if title: find("2/4") then
        sendDialogResponse(1, 1, "")
        return
    end

    if title: find("3/4") then
        sendDialogResponse(1, 1, "")
        return
    end

    if title: find("4/4") then
        sendDialogResponse(1, 1, "")
        return
    end
end


function sampev.onShowTextDraw(id, data)
    if data.position.x == 233 then
        sendClickTextdraw(id)
    end
end
hui.png

А де либу эту скачать
 

SaraShepard

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

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

kyrtion

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

arc warden

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

danivjje

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

хуега)

РП игрок
Модератор
2,568
2,270
если зайти на занятый никнейм/никнейм с запрещенными символами то клиент в консоль выводит 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

Активный
280
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