Вопросы по 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
 
Последнее редактирование:

odelyaZ

Известный
270
165
Как сделать движение игрока, без эмуляции клавиш (или только так возможно?)
1. К чекпоинту (например фермер на самп-рп и эвольве)
2. Идти по определенному маршруту (напримнр оружейный завод на диамонд-ролеплей)

Есть язык программирования lua, в нем есть синтаксис, условия, циклы, потоки, параметры, функции, и.т.д. А есть moonloader, это библиотека для lua, которая предназначена для создания новых возможностей в том чем я назвал раннее, то-есть новые параметры, дополнительный синтаксис, новые функции, и все это предназначено для игры. Ты учил lua, который для кампухтеров, а тебе надо учить lua-moonloader который для игрх
Неа, как раз я смотрел школу ЛУА от криптона, где он делал всё непосредственно для сампа
 

DeniPolis

Участник
114
12
Неа, как раз я смотрел школу ЛУА от криптона, где он делал всё непосредственно для сампа
Надеюсь ты этот курс не покупал, так как мне стыдно за него.

План таков:

Знаешь английский?
Да: Идем дальше
Нет: Учи английский

Читать вики и уроки умеешь, или только слушать умеешь?
Да, умею: Иди учи уроки от FYP, и еще от полным-полно ребят.
Нет: Учись читать текст

Совет: Не знаешь какую-либо функцию, допустим как узнать сидит ли игрок в машине, включаешь свои мозги + английский и идешь к moonloader wiki
 

TheRuthArbiter

Неповторимый РПшер
Проверенный
523
306
Как вы учились писать на луа? Я много чего чекал и все серии школы луа у криптона посмотрел, но всё равно ничего просто не понимаю((((
Читай на сайтах об основах луа, позже начинать работать с муном и радуйся жизни.
 

Dendylife

Новичок
15
3
Привет! Помогите пожалуйста, как изменить код?
Есть вот что:

if id == 0 and checkstat then
frak = text:match('.+Организация%:%s+(.+)%s+Ранг')
rang = text:match('.+Ранг%:%s+(.+)%s+Работа')
print(frak)
print(rang)
checkstat =
sampSendDialogResponse(id, 1, _, _)
return false
end

Цель: при входе на сервер получать инфу из статистики (диалогового окна), затем использовать как значение для функций frak и rang.
Если неправильно выразился или грамматические ошибки в названиях допустил, то мне можно, я никогда не занимался кодами, просто решил самостоятельно методом тыка исправить некоторые скрипты для Евольве и настроить под Самп-рп
 
Последнее редактирование:

wulfandr

Известный
634
259
Привет! Помогите пожалуйста, как изменить код?
Есть вот что:

if id == 0 and checkstat then
frak = text:match('.+Организация%:%s+(.+)%s+Ранг')
rang = text:match('.+Ранг%:%s+(.+)%s+Работа')
print(frak)
print(rang)
checkstat =
sampSendDialogResponse(id, 1, _, _)
return false
end

Цель: при входе на сервер получать инфу из статистики (диалогового окна), затем использовать как значение для функций frak и rang.
Если неправильно выразился или грамматические ошибки в названиях допустил, то мне можно, я никогда не занимался кодами, просто решил самостоятельно методом тыка исправить некоторые скрипты для Евольве и настроить под Самп-рп
Используй чтение данных из диалога, а не из меню списка.
 

FYS

Потрачен
981
236
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Как сделать движение игрока, без эмуляции клавиш (или только так возможно?)
1. К чекпоинту (например фермер на самп-рп и эвольве)
2. Идти по определенному маршруту (напримнр оружейный завод на диамонд-ролеплей)

Есть язык программирования lua, в нем есть синтаксис, условия, циклы, потоки, параметры, функции, и.т.д. А есть moonloader, это библиотека для lua, которая предназначена для создания новых возможностей в том чем я назвал раннее, то-есть новые параметры, дополнительный синтаксис, новые функции, и все это предназначено для игры. Ты учил lua, который для кампухтеров, а тебе надо учить lua-moonloader который для игрх
Чекай тему Полезные снипетты и функции, там есть функция бега к координатам
 
  • Нравится
Реакции: DeniPolis

Refraktor

Известный
136
73
Как вы учились писать на луа? Я много чего чекал и все серии школы луа у криптона посмотрел, но всё равно ничего просто не понимаю((((
https://zserge.wordpress.com/2012/02/23/lua-за-60-минут/ + Google Translate + https://gist.github.com/THE-FYP/abc6f8bea87f4cb42331fc6dd7a84576 + этот форум + https://blast.hk/wiki/moonloader:functions.
 

HOG

Известный
48
16
Как просканировать строки диалога, замомнить их, и, если какая-либо строка из диалога пропала, хукнуть ее куда-то?
 

JustFedot

legends never die 🕊️
357
378
Доброй ночи.
Подскажите мне пожалуйста, как заблокировать изменение денег от сервера на lua?
Спасибо)
 

paulohardy

Известный
Всефорумный модератор
1,997
1,332
Доброй ночи.
Подскажите мне пожалуйста, как заблокировать изменение денег от сервера на lua?
Спасибо)
я посрал:
local sampev = require 'samp.events'
local resetmoney = false

---где то в мейне регаешь вот это или другой способ менять переменной значение  sampRegisterChatCommand("dmreset", function() resetmoney = not
---resetmoney end)

function sampev.onResetPlayerMoney()
 if resetmoney then
   return false
 end
end

function sampev.onGivePlayerMoney(money)
 if resetmoney then
   return false
 end
end
 

1fs1

Участник
40
0
CLEO:
samp.ApplySpecialAction()

Это функция добавления анимации, как она выглядит в луа? Знаю, вы скажите, что есть на вики, но я не нашел.
 
D

deleted-user-204957

Гость
Добрый вечер, кто сможет привести пример, как правильно использовать findAllRandomVehiclesInSphere