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

Julimba

Участник
108
10
Вот небольшой кусок кода. переменная id должна быть числом. пробовал tonomber(), почему-то не получилось

lua:
require('samp.events').onServerMessage = function(color, text)
    if text:match('{FF8888}%a+_%a+{FFFFFF}') and text:match('|') and text:match('packetloss') then
        name = text:match('%a+_%a+')
       id = text:match('%d+')
            if name == 'RedRock_Bot' then
                adm.name1.id = id
            end
    end
end
Lua:
if tonumber(id) then
-- code
end
 

hellaarizona

Новичок
25
8
когда запускаю рак самп иногда выбивает такое [RPC] >> Class 0 requested когда птаюсь зайти на акк, и после этого на одном акке, вылетают все остальные и сервер банит ип как пофиксить?
 

accord-

Потрачен
437
79
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Как можно сделать кд на отправку команды
Например есть команда /test и чтобы её можно было вводить 1 раз в 3 минуты
 

YarikVL

Известный
Проверенный
4,798
1,813
Как можно сделать кд на отправку команды
Например есть команда /test и чтобы её можно было вводить 1 раз в 3 минуты
Это:
?
 
  • Нравится
Реакции: accord-

accord-

Потрачен
437
79
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Это:
?
Да, спасиб
 

percheklii

Известный
725
266
я вообще ничего не трогал, оно крашить начало😐
log:
fuckpass.lua: opcode '0432' call caused an unhandled exception
stack traceback:
    [C]: in function 'getCharInCarPassengerSeat'
    C:\Games\ARIZONA GAMES\bin\Arizona\moonloader\fuckpass.lua:30: in function 'getPassengersInCurrentCar'
    C:\Games\ARIZONA GAMES\bin\Arizona\moonloader\fuckpass.lua:7: in function <C:\Games\ARIZONA GAMES\bin\Arizona\moonloader\fuckpass.lua:2>
[12:10:24.068783] (error)    fuckpass.lua: Script died due to an error. (4646C364)
Такая же проблема была, по непонятной причине код переставал работать через некоторое время.
 

Julimba

Участник
108
10
qq, вопросики по mimgui
1) Возможно ли как то сделать какую то деталь отдельным цветом?
К примеру separator, можно ли сделать, чтобы SeparatorRed выдавал красную полоску, а SeparatorWhite белую полоску?

2) Как изменить длину того же самого separator в определенном месте
заранее спасибо
 

ChromiusJ

Известный
Друг
4,898
3,184
Возможно ли как то сделать какую то деталь отдельным цветом?
 
  • Нравится
Реакции: Julimba

Carl_Henderson

Новичок
28
4
Помогите, дайте код чтобы при входе в игру писал "[HB]: Добро пожаловать" желательно с комментариями
 
  • Ха-ха
Реакции: Sadow

Sanchez.

Известный
704
187
Помогите, дайте код чтобы при входе в игру писал "[HB]: Добро пожаловать" желательно с комментариями
Lua:
require 'lib.moonloader'

function main() -- функция, которая вызывается при запуске скрипта
    while not isSampAvailable() do wait(0) end
   
    sampAddChatMessage('[HB] Добро пожаловать!', -1) -- выводим сообщение в чат (первый аргумент - сообщение, которое выведется, -1 - белый цвет)

    while true do
        wait(0)
       
    end
end
советую тебе посмотреть thechampguess, там основа есть
 

SyLvy

Активный
231
25
Есть ли способ запустить закись азота в машине игрока с помощью команды?
 

Carl_Henderson

Новичок
28
4
Lua:
require 'lib.moonloader'

function main() -- функция, которая вызывается при запуске скрипта
    while not isSampAvailable() do wait(0) end
  
    sampAddChatMessage('[HB] Добро пожаловать!', -1) -- выводим сообщение в чат (первый аргумент - сообщение, которое выведется, -1 - белый цвет)

    while true do
        wait(0)
      
    end
end
советую тебе посмотреть thechampguess, там основа есть
Спасибо огромное, а можно чтобы надпись [HB] была синей?
 

Carl_Henderson

Новичок
28
4
И можете помочь ещё кое с чем? Я не понимаю как сделать так чтобы при надписи в чат /cc выводилась какая либо надпись, помогите с кодом тоже желательно прокомментировал всё
 
  • Эм
Реакции: YarikVL