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

enotikk

Новичок
15
2
Форматирование кода
может кто сделать луа, что бы он активировался и дезактивировался, а сама суть скрипта это вывод текста как худ на экран. Пару предложений надо сделать
Пример:
ввел /helper
на экране где нибудь справа появился текст забитый в код скрипта
ввел /helper
скрипт вырубился


вот коды нашел, просто хз как их соединять
renderFontDrawText(my_font, 'Тут текст, который мне нужен', 1550, 300, 0xFFFFFFFF)

Lua:
local enabled = false

function main()
  if not isSampfuncsLoaded() or not isSampLoaded() then return end
  while not isSampAvailable() do wait(100) end
  sampRegisterChatCommand('test', function()
    enabled = not enabled
    sampAddChatMessage(enabled and '{ffffff}Активирован' or '{ffffff}Деактивирован', -1)
  end)
end
 
Последнее редактирование модератором:

#kerosin

🔥
Проверенный
241
152
может кто сделать луа, что бы он активировался и дезактивировался, а сама суть скрипта это вывод текста как худ на экран. Пару предложений надо сделать
Пример:
ввел /helper
на экране где нибудь справа появился текст забитый в код скрипта
ввел /helper
скрипт вырубился


вот коды нашел, просто хз как их соединять
renderFontDrawText(my_font, 'Тут текст, который мне нужен', 1550, 300, 0xFFFFFFFF)

local enabled = false
function main()
if not isSampfuncsLoaded() or not isSampLoaded() then return end
while not isSampAvailable() do wait(100) end
sampRegisterChatCommand('test', function()
enabled = not enabled
sampAddChatMessage(enabled and '{ffffff}Активирован' or '{ffffff}Деактивирован', -1)
end)
end
Lua:
local enabled = false
local my_font = renderCreateFont('Tahoma', 9, 9)

function main()
    if not isSampfuncsLoaded() or not isSampLoaded() then return end
    while not isSampAvailable() do wait(100) end
    sampRegisterChatCommand('helper', function()
        enabled = not enabled
        sampAddChatMessage(enabled and '{ffffff}Активирован' or '{ffffff}Деактивирован', -1)
    end)
    while true do
        wait(0)
        if enabled == true then
            renderFontDrawText(my_font, 'Тут текст, который мне нужен', 1550, 300, 0xFFFFFFFF)
        end
    end
end
 
  • Нравится
Реакции: enotikk

Мурпху

Активный
211
39
Гайс, как сделать типа чтоб в чате выводилось на русском в Sublime Text 3?
Ну допустим мне надо сделать в чате чтоб вывелось "Привет", а он выводит каракули, я читал как от этого избавится в атоме, но как это сделать в Sublime Text 3?
Поменяй кодировку на Windows1251
 

ollydbg

Известный
163
113
How could I do something like that in lua?
pass the parameter to the function call and according to the number it will be written to the file section

CLEO:
:settings
0AD3: 28@v = format "_%d" 0@
0AF1: write_int 242 to_ini_file "CLEO/INI/settings.ini" section 28@v key "1"
0AF1: write_int 321 to_ini_file "CLEO/INI/settings.ini" section 28@v key "2"
ret 0

this won't do
Lua:
function writetoini(param, param2)
    mainini._ .. param = param2
inicfg.save(mainini, "settings")
end

writetoini(1, "test")
 

#Northn

Police Helper «Reborn» — уже ШЕСТЬ лет!
Всефорумный модератор
2,634
2,483
How could I do something like that in lua?
pass the parameter to the function call and according to the number it will be written to the file section

CLEO:
:settings
0AD3: 28@v = format "_%d" 0@
0AF1: write_int 242 to_ini_file "CLEO/INI/settings.ini" section 28@v key "1"
0AF1: write_int 321 to_ini_file "CLEO/INI/settings.ini" section 28@v key "2"
ret 0

this won't do
Lua:
function writetoini(param, param2)
    mainini._ .. param = param2
inicfg.save(mainini, "settings")
end

writetoini(1, "test")
mainini[param] = param2
 
  • Нравится
Реакции: ollydbg

Morse

Потрачен
436
70
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.

|| NN - NoName ||

Известный
1,049
628
Как удалить определённую строчку в чате? Например с айди 97

А вообще, мне надо как-то хукнуть чат. Чтобы если в чате было определённое слово, то в чате не было этой строчки, где есть это слово. Мне нужен не SAMP.lua. Мне нужно именно хукнуть чат через ffi
 

Double Tap Inside

Известный
Проверенный
1,898
1,253
Как сделать вот такую табличку? дайте пример если можно... а то выравнивать через SameLine(300) как то дрочевно

sa-mp-340.png


1608579429177.png
 

Tema05

Известный
1,441
401
Как сделать вот такую табличку? дайте пример если можно... а то выравнивать через SameLine(300) как то дрочевно

Посмотреть вложение 79971

Посмотреть вложение 79972
Это imgui.Columns(количество столбцов, хз чё я пишу тупо nil, показывать ли рамки)

imgui.NextColumn() - перейти в следующий столбец
 
  • Нравится
Реакции: Double Tap Inside

_ex$tanOr_

Участник
125
19
Смотрите. Есть переменная, она в инпуте. Тобишь пользователь вводит значение и переменная принимает это значение. Как сделать так, чтобы все значения пользователя делались заглавными буквами? Даже если он пишет маленькими