Вопросы по 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

Известный
267
161
Как вы учились писать на луа? Я много чего чекал и все серии школы луа у криптона посмотрел, но всё равно ничего просто не понимаю((((
 

DeniPolis

Участник
114
12
Как сделать движение игрока, без эмуляции клавиш (или только так возможно?)
1. К чекпоинту (например фермер на самп-рп и эвольве)
2. Идти по определенному маршруту (напримнр оружейный завод на диамонд-ролеплей)
Как вы учились писать на луа? Я много чего чекал и все серии школы луа у криптона посмотрел, но всё равно ничего просто не понимаю((((
Есть язык программирования lua, в нем есть синтаксис, условия, циклы, потоки, параметры, функции, и.т.д. А есть moonloader, это библиотека для lua, которая предназначена для создания новых возможностей в том чем я назвал раннее, то-есть новые параметры, дополнительный синтаксис, новые функции, и все это предназначено для игры. Ты учил lua, который для кампухтеров, а тебе надо учить lua-moonloader который для игрх
 

odelyaZ

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

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

DeniPolis

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

План таков:

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

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

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

TheRuthArbiter

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

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

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

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

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

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

Refraktor

Известный
137
72
Как вы учились писать на луа? Я много чего чекал и все серии школы луа у криптона посмотрел, но всё равно ничего просто не понимаю((((
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

Известный
263
262
Доброй ночи.
Подскажите мне пожалуйста, как заблокировать изменение денег от сервера на lua?
Спасибо)
 

paulohardy

вы еще постите говно? тогда я иду к вам
Всефорумный модератор
1,887
1,246
Доброй ночи.
Подскажите мне пожалуйста, как заблокировать изменение денег от сервера на 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()

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