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

tlwsn

Известный
537
85
как сделать так, что бы значение hfps
local hfps = math.floor(memory.getfloat(0xB7CB50, 4, false))
обновлялось раз в секунду?
 

#Northn

Police Helper «Reborn» — уже ШЕСТЬ лет!
Всефорумный модератор
2,634
2,482
как сделать так, что бы значение hfps
local hfps = math.floor(memory.getfloat(0xB7CB50, 4, false))
обновлялось раз в секунду?
Lua:
while true do
   local hfps = math.floor(memory.getfloat(0xB7CB50, 4, false))
   wait(1000)
end

еще если можно, напишите как сделать, чтобы писалось в чат, что авто с определенным идом(самповским, вроде type в dl) находиться в зоне стрима?
спасибо) но айдишников машин много)
Lua:
table vehicles = getAllVehicles()
 

#Northn

Police Helper «Reborn» — уже ШЕСТЬ лет!
Всефорумный модератор
2,634
2,482
и что это? оно все авто заносит в таблицу, а мне всего лишь нужна проверка, есть ли в этой таблице определенные авто, в данном случае поиск по ид сампа(мн, число)
А перебрать ИДшники по циклу?
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

Police Helper «Reborn» — уже ШЕСТЬ лет!
Всефорумный модератор
2,634
2,482
вот что я нашел тут, но хз, это поиск по ид машины на сервере или из сампа(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

Police Helper «Reborn» — уже ШЕСТЬ лет!
Всефорумный модератор
2,634
2,482
так хорошо, спасибо, смотри, я хочу сделать проверку авто в зоне стрима для тп, мне в скрипте так куча строк сделать для каждого ида или както можно, просто впервые кодю для сампа на луа
Если ты только-только начинаешь кодить -- тебе ещё рано для ТП и тому подобному, начинай с простеньких скриптов по типу биндеров.
 

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