- 25
- 7
- Версия MoonLoader
- .027.0-preview
Приветствую. Задача: заюзать активный надетый акс на Аризоне. То есть, кликнуть сначала по слоту с надетым аксом, а затем по текстдраву 'Использовать'. Вроде бы всё работает (можно как-то упростить?), но инвентарь видел пользователю. Хотелось бы, чтобы всё выполнялось в фоне. Это возможно? Как я могу запретить выводить текстдрав на экран (return false) если я ухожу из события onShowTextDraw в асинхронный поток для ожидания 500 мск? Будто бы никак нельзя, но ведь делают же. Например, /lavka (установка лавки в Арз маркете). Как это реализовано?
(id текстдравов слотов у Аризоны меняются в зависимости от скина и его улучшений: добавляются какие-то иконки >> увеличивается кол-во текстдравов >> id слотов сдвигаются по номерам выше)
(id текстдравов слотов у Аризоны меняются в зависимости от скина и его улучшений: добавляются какие-то иконки >> увеличивается кол-во текстдравов >> id слотов сдвигаются по номерам выше)
Lua:
local MODELID = 370
local status = false
local firstStage = false
local secondStage = false
local SLOT = -1
function main()
while not isSampAvailable() do wait(0) end
sampRegisterChatCommand('jp', function(arg)
status = true
firstStage = true
SLOT = -1
sampSendChat('/invent') - открываем инвентарь
end)
wait(-1)
end
function samp.onShowTextDraw(id, data)
if status then
-- Определяем границу по оси x перед которой искать слот с нужной моделькой.
if firstStage then
if data.text == 'GPS' then -- текстдрав в инвентаре GPS, он чуть дальше нужного слота
lua_thread.create(working, data.position.x)
end
end
-- после первой фазы, то есть после клика по слоту, ждём появления текстдрава Использовать
if secondStage then
if data.text == '…CЊO‡’€O‹AЏ’' or text == "USE" then -- 'ИСПОЛЬЗОВАТЬ'
sampSendClickTextdraw(id + 1) -- контейнер подписи вроде бы всегда id текста + 1
sampSendClickTextdraw(65535) -- закрываем
secondStage = false
status = false
return false
end
end
end
end
function working(xCoord)
wait(500)
if status and firstStage then
-- при открытом инвентаре перебираем номера текстдравов в примерном диапазоне
for i = 2100, 2150 do
if sampTextdrawIsExists(i) then
local x, _ = sampTextdrawGetPos(i)
local model = sampTextdrawGetModelRotationZoomVehColor(i)
if x < xCoord and model == MODELID then -- не далее определённой границы по оси x и нужная моделька
SLOT = i
break
end
end
end
firstStage = false
if SLOT == -1 then
sampAddChatMessage('Вы не надели аксессуар в слот!', 16776960)
sampSendClickTextdraw(65535) -- закрываем
status = false
return
end
secondStage = true
sampSendClickTextdraw(SLOT) -- клик по слоту
end
end
Последнее редактирование: