- 1,002
- 504
Привет. Увидел эту тему и решил сделать гайд. Разберу два метода - с использованием SAMP.Lua и без него. Кому лень читать - полный код в конце гайда.
После подключения модуля для удобства создам две переменных в которых будут храниться ID текстдравов.
Создаем функцию-событие которая будет вызываться каждый раз, когда сервер создает для нас текстдрав.
В функции проверяем координаты каждого текстдрава с нужными нам и если они совпадают - записываем их в ранее созданные переменные.
Проверка на создание текстдрава с самим пин-кодом:
Проверка на создание кнопки "OK":
После добавления проверок функция выглядит так:
Теперь создадим функцию-событие которая будет вызываться при каждом нажатии на кликабельный текстдрав
Проверим в ней ID нажатого текстдрава. Если он совпадает с ID кнопки "OK", то получаем текст текстдрава с пин-кодом (для примера отправлю пин-код в чат):
При нажатии кнопки "OK" получаем результат:
Создаем функцию-событие которая будет вызываться при получении RPC от сервера.
Проверяем ID RPC в этой функции дабы читать данные только нужного нам RPC.
Читаем данные из RPC и сравниваем координаты текстдрава с нужными нам координатами. Если координаты текстдрава подходят - записываем ID текстдрава в переменную.
Создаем еще одну функцию-событие которая будет вызываться при каждой отправке RPC нами на сервер.
Делаем проверку на ID RPC, читаем ID текстдрава и сравниваем его с ID в переменной (для примера так же отправлю пин-код в чат)
При нажатии кнопки "OK" получаем:
С использованием SAMP.Lua
Для начала подключаем сам модуль к нашему скрипту.
Lua:
local sampev = require("samp.events")
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
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
Lua:
function sampev.onSendClickTextDraw(textdrawId)
if textdrawId == l_td then
sampAddChatMessage("Pincode: "..sampTextdrawGetString(str_td), -1)
end
end
Без использования SAMP.Lua
Для удобства снова создам две переменные, в них буду записывать ID текстдравов.
Lua:
local str_td, l_td = 0, 0
Lua:
function onReceiveRpc(id, bs)
-- code
end
Lua:
function onReceiveRpc(id, bs)
if id == 134 then
-- code
end
end
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
Lua:
function onSendRpc(id, bs)
-- code
end
Lua:
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 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
Последнее редактирование: