Вопросы по Lua скриптингу

Общая тема для вопросов по разработке скриптов на языке программирования Lua, в частности под MoonLoader.
  • Задавая вопрос, убедитесь, что его нет в списке частых вопросов и что на него ещё не отвечали (воспользуйтесь поиском).
  • Поищите ответ в теме посвященной разработке Lua скриптов в MoonLoader
  • Отвечая, убедитесь, что ваш ответ корректен.
  • Старайтесь как можно точнее выразить мысль, а если проблема связана с кодом, то обязательно прикрепите его к сообщению, используя блок [code=lua]здесь мог бы быть ваш код[/code].
  • Если вопрос связан с MoonLoader-ом первым делом желательно поискать решение на wiki.

Частые вопросы

Как научиться писать скрипты? С чего начать?
Информация - Гайд - Всё о Lua скриптинге для MoonLoader(https://blast.hk/threads/22707/)
Как вывести текст на русском? Вместо русского текста у меня какие-то каракули.
Изменить кодировку файла скрипта на Windows-1251. В Atom: комбинация клавиш Ctrl+Shift+U, в Notepad++: меню Кодировки -> Кодировки -> Кириллица -> Windows-1251.
Как получить транспорт, в котором сидит игрок?
Lua:
local veh = storeCarCharIsInNoSave(PLAYER_PED)
Как получить свой id или id другого игрока?
Lua:
local _, id = sampGetPlayerIdByCharHandle(PLAYER_PED) -- получить свой ид
local _, id = sampGetPlayerIdByCharHandle(ped) -- получить ид другого игрока. ped - это хендл персонажа
Как проверить, что строка содержит какой-то текст?
Lua:
if string.find(str, 'текст', 1, true) then
-- строка str содержит "текст"
end
Как эмулировать нажатие игровой клавиши?
Lua:
local game_keys = require 'game.keys' -- где-нибудь в начале скрипта вне функции main

setGameKeyState(game_keys.player.FIREWEAPON, -1) -- будет сэмулировано нажатие клавиши атаки
Все иды клавиш находятся в файле moonloader/lib/game/keys.lua.
Подробнее о функции setGameKeyState здесь: lua - setgamekeystate | BlastHack — DEV_WIKI(https://www.blast.hk/wiki/lua:setgamekeystate)
Как получить id другого игрока, в которого целюсь я?
Lua:
local valid, ped = getCharPlayerIsTargeting(PLAYER_HANDLE) -- получить хендл персонажа, в которого целится игрок
if valid and doesCharExist(ped) then -- если цель есть и персонаж существует
  local result, id = sampGetPlayerIdByCharHandle(ped) -- получить samp-ид игрока по хендлу персонажа
  if result then -- проверить, прошло ли получение ида успешно
    -- здесь любые действия с полученным идом игрока
  end
end
Как зарегистрировать команду чата SAMP?
Lua:
-- До бесконечного цикла/задержки
sampRegisterChatCommand("mycommand", function (param)
     -- param будет содержать весь текст введенный после команды, чтобы разделить его на аргументы используйте string.match()
    sampAddChatMessage("MyCMD", -1)
end)
Крашит игру при вызове sampSendChat. Как это исправить?
Это происходит из-за бага в SAMPFUNCS, когда производится попытка отправки пакета определенными функциями изнутри события исходящих RPC и пакетов. Исправления для этого бага нет, но есть способ не провоцировать его. Вызов sampSendChat изнутри обработчика исходящих RPC/пакетов нужно обернуть в скриптовый поток с нулевой задержкой:
Lua:
function onSendRpc(id)
  -- крашит:
  -- sampSendChat('Send RPC: ' .. id)

  -- норм:
  lua_thread.create(function()
    wait(0)
    sampSendChat('Send RPC: ' .. id)
  end)
end
 
Последнее редактирование:

ШPEK

Известный
1,476
525
Lua:
mem.setint8(0x747FB6, 1)
mem.setint8(0x74805A, 1)
mem.fill(0x53EA88, 0x90, 6)
Вот тебе весь анти-афк.


float distance = getDistanceBetweenCoords3d(float x1, float y1, float z1, float x2, float y2, float z2) // сравниваешь дистанцию
Для определения обьекта проще всего использовать событие onCreateObject.
Это не работает
 

Fomikus

Известный
Проверенный
474
342
Допустим, рандомится число в переменную,
Lua:
    math.randomseed(os.time())
    local clicks = math.random(0, 2)
строка повтора
{
clickTextDraw(2057)
}
clickTextDraw(2054)
Нужно чтобы рандомное кол-во раз тыкнул на текстдрав(Некст скин бича(Переписываю авторег для ракбота)), и после тыкнул на другой текстдрав уже 1 раз.
 

atizoff

приобретаю кашель за деньги
Проверенный
1,295
1,178
Допустим, рандомится число в переменную,
Lua:
    math.randomseed(os.time())
    local clicks = math.random(0, 2)
строка повтора
{
clickTextDraw(2057)
}
clickTextDraw(2054)
Нужно чтобы рандомное кол-во раз тыкнул на текстдрав(Некст скин бича(Переписываю авторег для ракбота)), и после тыкнул на другой текстдрав уже 1 раз.
 

Вложения

  • autoreg-drp.lua
    1.2 KB · Просмотры: 9

tlwsn

Известный
537
85
как правильно всунуть в свой скрипт библиотеку что бы юзер не скачивал овер дохера либ а просто скачал сам скрипт и все
 

Musaigen

abobusnik
Проверенный
1,585
1,309
как правильно всунуть в свой скрипт библиотеку что бы юзер не скачивал овер дохера либ а просто скачал сам скрипт и все
Есть два варианта, всунуть всю либу в скрипт и переделать(гемор), либо же если у юзера нет либы, то скачать её.
 

Fomikus

Известный
Проверенный
474
342
Lua:
function onPrintLog(msg)
    if (string.match(msg, 'Выбрать скин')) then
        runCommand('!press S')
    end
end
Там уже явно другая надпись в чате + !press S не пашет.
UPD:if (string.match(msg, 'Выберите своего начального')) then
 

atizoff

приобретаю кашель за деньги
Проверенный
1,295
1,178
Он не выбирает скин и не спавнится, если ты считаешь это за работу, то тут ты прав.
Он выбирает и скин и спавнится.

В первый раз нужно самому всё показать. Во-второй вот, что он делает.

[13:28:36] [RAKBOT] Отправлен ответ диалогу с ID 9 (кнопка: 1, список: 0; текст: gold123)
[13:28:36] [RAKBOT] Получен диалог 629 с заголовком "Повтор пароля"
[13:28:40] [RAKBOT] Отправлен ответ диалогу с ID 629 (кнопка: 1, список: 0; текст: gold123)
[13:28:40] [RAKBOT] Получен диалог 10 с заголовком "Регистрация"
[13:28:46] [RAKBOT] Отправлен ответ диалогу с ID 10 (кнопка: 1, список: 0; текст: weifwefwefweifjwefji@mail.ru)
[13:28:46] [RAKBOT] Получен диалог 14 с заголовком "Регистрация"
[13:28:47] [RAKBOT] Отправлен ответ диалогу с ID 14 (кнопка: 1, список: 0; текст: )
[13:28:47] [RAKBOT] Получен диалог 15 с заголовком "Регистрация"
[13:28:49] [RAKBOT] Отправлен ответ диалогу с ID 15 (кнопка: 0, список: 0; текст: )
[13:28:49] [RAKBOT] Получен диалог 16 с заголовком "Регистрация"
[13:28:51] [RAKBOT] Отправлен ответ диалогу с ID 16 (кнопка: 1, список: 1; текст: Американец)
[13:28:51] [RAKBOT] Получен диалог 17 с заголовком "Регистрация"
[13:28:55] [RAKBOT] Отправлен ответ диалогу с ID 17 (кнопка: 1, список: 0; текст: 20)
[13:28:55] [RAKBOT] Получен диалог 18 с заголовком "Регистрация"
[13:28:59] [RAKBOT] Отправлен ответ диалогу с ID 18 (кнопка: 1, список: 0; текст: 12345)
[13:28:59] [СЕРВЕР] • [Подсказка] Вы получили бонус: удвоенное EXP в течении 5 дней и удвоенная зарплата на начальных работах в течении 2 дней
[13:28:59] [СЕРВЕР] • [Успешно] Аккаунт зарегистрирован
[13:28:59] [СЕРВЕР] • [Подсказка] Чтобы открыть меню игрока введите /menu (/mn)
[13:28:59] [СЕРВЕР] • [Подсказка] Первые 5 дней Вам доступны бесплатные мопеды, после этого Вам придется пользоваться такси или купить машину
[13:28:59] [RAKBOT] Режим наблюдения отключен сервером
[13:28:59] [RAKBOT] Сервер запросил спавн
[13:28:59] [RAKBOT] Спавн бота...
[13:28:59] [RAKBOT] Бот перемещен в интерьер 0
[13:28:59] [LUA] Старая позиция 0, 0, 0 | Новая: 633.37921142578, -1772.8900146484, 18.962900161743
[13:28:59] [RAKBOT] Ваша позиция изменена на: (633,38; -1772,89; 18,96)
[13:28:59] [RAKBOT] Показан текстдрав с ID 2062 (X: 232,00; Y: 360,00; текст: _)
[13:28:59] [RAKBOT] Показан текстдрав с ID 2063 (X: 232,00; Y: 407,00; текст: _)
[13:28:59] [RAKBOT] Показан текстдрав с ID 2064 (X: 316,00; Y: 406,00; текст: PLAY)
[13:28:59] [RAKBOT] Показан текстдрав с ID 2065 (X: 232,00; Y: 407,00; текст: _)
[13:28:59] [RAKBOT] Показан текстдрав с ID 2066 (X: 225,00; Y: 360,00; текст: 19132)
[13:28:59] [RAKBOT] Показан текстдрав с ID 2067 (X: 359,00; Y: 360,00; текст: 19132)
[13:28:59] [RAKBOT] Показан текстдрав с ID 2068 (X: 316,00; Y: 364,00; текст: Select~n~Character)
[13:28:59] [RAKBOT] Установлен скин 78
[13:28:59] [СЕРВЕР] • [Подсказка] Выберите своего начального персонажа и нажмите PLAY
[13:28:59] [RAKBOT] Бот заспавнен
[13:28:59] [RAKBOT] Бот заспавнен
 

Fomikus

Известный
Проверенный
474
342
Он выбирает и скин и спавнится.
В первый раз нужно самому всё показать. Во-второй вот, что он делает.
[/SPOILER]
Если он заспавнится, будет инфа
[16:14:21] [RAKBOT] Показана 3D метка с ID 2030 (X: 1148,86; Y: -1772,80; Z: 16,60; текст: Нажмите
Alt)
[16:14:21] [RAKBOT] Показана 3D метка с ID 1074 (X: 1141,89; Y: -1755,96; Z: 13,60; текст: Помощь по игре)
[16:14:21] [RAKBOT] Показана 3D метка с ID 1736 (X: 0,00; Y: 0,00; Z: 3,00; текст: ЖДЛС - Лесопилка
Лично я для себя пофиксил
[16:15:01] [RAKBOT] Подключение к 5.254.105.203:7777...
[16:15:01] [RAKBOT] Подключено. Вход в игру...
[16:15:02] [RAKBOT] Подключено к Diamond Role Play | Amber
[16:15:02] [LUA] [RAKBOT] Включена собственная авторегистрация
[16:15:02] [RAKBOT] Запрошен класс с ID 0
[16:15:02] [RAKBOT] Конечный класс получен
[16:15:02] [RAKBOT] Установлена позиция спавна: (0,00; 0,00; 0,00)
[16:15:02] [RAKBOT] Режим наблюдения включен сервером
[16:15:03] [RAKBOT] Ваша позиция изменена на: (629,38; -1766,92; 30,06)
[16:15:03] [RAKBOT] Показан текстдрав с ID 125 (X: 606,00; Y: 6,00; текст: iamon)
[16:15:03] [RAKBOT] Показан текстдрав с ID 126 (X: 577,00; Y: 23,00; текст: LD_BEAT:Chit)
[16:15:03] [RAKBOT] Показан текстдрав с ID 127 (X: 566,00; Y: 7,00; текст: LD_BEAT:Chit)
[16:15:03] [RAKBOT] Показан текстдрав с ID 128 (X: 629,00; Y: 3,00; текст: D)
[16:15:03] [RAKBOT] Показан текстдрав с ID 129 (X: 584,00; Y: 3,00; текст: D)
[16:15:03] [RAKBOT] Показан текстдрав с ID 130 (X: 605,00; Y: 17,00; текст: amber)
[16:15:03] [LUA] [RAKBOT] Получен диалог 1
[16:15:03] [RAKBOT] Ввод пароля...
[16:15:03] [RAKBOT] Ваша позиция изменена на: (629,38; -1766,92; 30,06)
[16:15:04] [RAKBOT] Отправлен ответ диалогу с ID 1 (кнопка: 1, список: 0; текст: password)
[16:15:04] [СЕРВЕР] Добро пожаловать на Diamond Role Play!
[16:15:04] [RAKBOT] Сервер запросил спавн
[16:15:04] [RAKBOT] Режим наблюдения отключен сервером
[16:15:04] [RAKBOT] Спавн бота...
[16:15:04] [RAKBOT] Ваш уровень здоровья изменен на 100
[16:15:04] [RAKBOT] Ваш уровень здоровья изменен на 100
[16:15:04] [RAKBOT] Установлен скин 136
[16:15:04] [RAKBOT] Бот перемещен в интерьер 0
[16:15:04] [RAKBOT] Ваша позиция изменена на: (1765,24; -1895,81; 13,56)
[16:15:04] [RAKBOT] Бот заспавнен
[16:15:04] [RAKBOT] Сон отключен
[16:15:04] [RAKBOT] Телепорт на сохраненные координаты отключен
[16:15:04] [RAKBOT] Бот телепортирован на координаты (1758,00; -1917,00; 14,00)
[16:15:04] [RAKBOT] Показана 3D метка с ID 1042 (X: 1758,36; Y: -1906,08; Z: 13,57; текст: Помощь по игре)
[16:15:04] [RAKBOT] Показана 3D метка с ID 1543 (X: 1768,16; Y: -1906,91; Z: 13,29; текст: Нажмите
Alt)
[16:15:04] [RAKBOT] Показана 3D метка с ID 2020 (X: 1848,23; Y: -1871,67; Z: 14,58; текст: Railway Shop 24/7
Владелец: Galileo_Wilson
Стоимость: $1900000
Контроль: Колумбия)
[16:15:04] [RAKBOT] Показана 3D метка с ID 1728 (X: 1833,60; Y: -1842,59; Z: 14,58; текст: Los-Santos Product Shop
Владелец: Oliver_Kahn
Стоимость: $2300000
Контроль: Мексиканцы
Цена за вход: 300)
[16:15:04] [RAKBOT] Показана 3D метка с ID 1810 (X: 1567,93; Y: -1897,58; Z: 14,56; текст: Italian Courtyard
Владелец: Sancho_Sambrero
Стоимость: $888000
Контроль: Мексиканцы
Цена за вход: 150)
[16:15:05] [RAKBOT] Бот заспавнен
[16:15:05] [RAKBOT] Сон включен
[16:15:05] [RAKBOT] Координаты (1758,00; -1917,00; 14,00) сохранены
[16:15:05] [RAKBOT] После переподключения бот автоматически вернется на данные координаты
[16:15:05] [RAKBOT] Бот телепортирован на координаты (1758,00; -1917,00; 14,00)
[16:15:05] [RAKBOT] Телепорт на сохраненные координаты
[16:15:13] [СЕРВЕР] Lite FM | Продам автомобиль марки "Elegy" [FPT] по цене: 700.000$ Отправитель: Techniqo_Homicide (тел. 155955)
[16:15:13] [СЕРВЕР] Объявление проверил: Репортер Connor_Winzero (127)
[16:15:23] [RAKBOT] Показана 3D метка с ID 2020 (X: 1848,23; Y: -1871,67; Z: 14,58; текст: Railway Shop 24/7
Владелец: Galileo_Wilson
Стоимость: $1900000
Контроль: Колумбия)
[16:15:37] [СЕРВЕР] [Гос.Новости] Fernando_Honrado [370]: [CH-LS] Напоминаю, что проходит собеседование в мэрию штата Los-Santos
[16:15:50] [СЕРВЕР] Lite FM | Куплю дом "Любого класса" в любой точке Республики. Цена: договорная. Отправитель: Suzuki_Saito (тел. 639065)
[16:15:50] [СЕРВЕР] Объявление проверил: Репортер Connor_Winzero (127)
[16:15:53] [СЕРВЕР] Автобус по маршруту ЖДЛС - Лесопилка отправляется через 10 секунд. Следующая остановка: Мэрия ЛС
[16:16:11] [СЕРВЕР] Автобус по маршруту ЖДЛС - Лесопилка отправляется через 10 секунд. Следующая остановка: Мэрия ЛС
[16:16:26] [СЕРВЕР] Kiss FM l Куплю дом "Среднего Класа". Бюджет: Свободный. Отправитель: Martin_Fernandez (тел. 222904)
[16:16:26] [СЕРВЕР] Объявление проверил: Светотехник Maximilliano_Franco (225)
[16:16:43] [СЕРВЕР] Администратор Stefano_Venterdo: МП | Едем к Мэрии города Los-Santos.
[16:17:02] [СЕРВЕР] Kiss FM l Куплю Дом "Среднего Класа". Бюджет: Свободный. Отправитель: Sean_Meloni (тел. 330733)
[16:17:02] [СЕРВЕР] Объявление проверил: Светотехник Maximilliano_Franco (225)
[16:17:38] [СЕРВЕР] Kiss FM l Продам магазин одежды "Clothin Store Binco". Мы в Навигаторе: 8-80. Цена:40.000.000$ Отправитель: Enrique_DoSantos (тел. 312222)
[16:17:38] [СЕРВЕР] Объявление проверил: Светотехник Maximilliano_Franco (225)
Сам сон включит, тпнится и поставит автотп при релоге.
Наглядно, пропиши !instream
 

rraggerr

проверенный какой-то
1,626
847
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.

rraggerr

проверенный какой-то
1,626
847
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
А зачем он там нужен? Никаких проверок на клавиши нет, загрузки файла из инета тоже нет, рендера тоже нет, зачем он там?
Требования: SA:MP, SAMPFUNCS.
И тебе станет хуже от того что ты не подключишь мун?