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

#Northn

Pears Project — уже запущен!
Всефорумный модератор
2,657
2,550
и что это? оно все авто заносит в таблицу, а мне всего лишь нужна проверка, есть ли в этой таблице определенные авто, в данном случае поиск по ид сампа(мн, число)
А перебрать ИДшники по циклу?
Lua:
for _, b in pairs(getAllVehicles()) do
   -- Code
end
 

quaq228

Новичок
12
1
вот что я нашел тут, но хз, это поиск по ид машины на сервере или из сампа(type v dl)
Lua:
for k, v in pairs(getAllVehicles()) do
     local result, id = sampGetVehicleIdByCarHandle(v)
     if result and doesVehicleExist(v) then
         if isAvailableVehicleID(id) then
            -- ...
        end
     end
end

local cID = { 1, 2, 3, 4, 5 }
function isAvailableVehicleID(id)
    for i = 1, #cID do
        if cID[i] == id then
            return true
        end
    end
    return false
end
 

#Northn

Pears Project — уже запущен!
Всефорумный модератор
2,657
2,550
вот что я нашел тут, но хз, это поиск по ид машины на сервере или из сампа(type v dl)
Lua:
for k, v in pairs(getAllVehicles()) do
     local result, id = sampGetVehicleIdByCarHandle(v)
     if result and doesVehicleExist(v) then
         if isAvailableVehicleID(id) then
            -- ...
        end
     end
end

local cID = { 1, 2, 3, 4, 5 }
function isAvailableVehicleID(id)
    for i = 1, #cID do
        if cID[i] == id then
            return true
        end
    end
    return false
end
Lua:
for _, vehHandle in pairs(getAllVehicles()) do
    if  getCarModel( vehHandle ) == 520 --[[Истребитель]] then
        print('Я нашёл истребитель')
    end
end
 

quaq228

Новичок
12
1
Lua:
for _, vehHandle in pairs(getAllVehicles()) do
    if  getCarModel( vehHandle ) == 520 --[[Истребитель]] then
        print('Я нашёл истребитель')
    end
end
так хорошо, спасибо, смотри, я хочу сделать проверку авто в зоне стрима для тп, мне в скрипте так куча строк сделать для каждого ида или както можно, просто впервые кодю для сампа на луа
 

FBenz

Активный
328
40
Как прекратить проигрывание аудиофайла, который запустил через bass lua ?
 

Greg Bomj

Новичок
14
1
Уверен, любой более-менее опытный lua'шник знает, ну давайте.
1. Возможно ли мгновенно развернуть игрока к другому персонажу или к точке? taskTurnCharToFaceChar поворачивает персонажа примерно на протяжении секунды.
2. Есть ли способ заставить персонажа двигаться к точке с определённой скоростью? Что-то не могу функцию найти.
 

#Northn

Pears Project — уже запущен!
Всефорумный модератор
2,657
2,550
так хорошо, спасибо, смотри, я хочу сделать проверку авто в зоне стрима для тп, мне в скрипте так куча строк сделать для каждого ида или както можно, просто впервые кодю для сампа на луа
Если ты только-только начинаешь кодить -- тебе ещё рано для ТП и тому подобному, начинай с простеньких скриптов по типу биндеров.
 

Greg Bomj

Новичок
14
1
1. Дабы мгновенно развернуть лицом к игроку могу предложить использовать getCharHeading(Ped ped) и setCharHeading(Ped ped, float angle).
2. Ты имеешь ввиду бег?
1. Спасибо, попробую.
2. Вот есть телепортация, персонаж резко перемещается из точки A к точке B, а нужно, чтобы он как бы плыл, без анимации, даже по вертикали.
 

Zooom

Новичок
11
0
Наверное мой последний вопрос :D.
Как сделать что бы при переключении imgui.Selectable от 3 до 8. Переключалась информация справа ( 1 ). Просто как в меню.
KmklRW077aM.jpg
 

Yuan

Участник
77
26
Наверное мой последний вопрос :D.
Как сделать что бы при переключении imgui.Selectable от 3 до 8. Переключалась информация справа ( 1 ). Просто как в меню.
KmklRW077aM.jpg
Сохраняй куда-то ид нажатого селектейбла, сделай на него проверку и выводи, что нужно для каждого из пунктов.
 
  • Нравится
Реакции: Zooom

DeMoN3D

Известный
368
77
Как с помощью ffi поменять номер на автомобиле? (номерной знак)
 

lemonager

Известный
Всефорумный модератор
810
1,721
Как изменять значок сервера в правом верхнем углу?