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

[SA ARZ]

Известный
392
8
без луа крашов игры нет, но когда играю с луа скриптом, то редко краш игры при любой команды - из-за чего может быть?


из-за большего кол-во sampRegisterChatCommand - может крашит?
 
Последнее редактирование:
D

deleted-user-204957

Гость
при использовании двух imgui.Columns, происходит краш, с чем связано?
 

astynk

Известный
Проверенный
742
532
Что не так? Ругается на эти строки
Lua:
local HLcfg = inicfg.load({
    main = {
        m.v = not m.v,
        m2.v = not m2.v,
        txt = 'Хэй! Привет, надеюсь наше пвп пройдет отлично!',
        txt2 = 'Ты меня убил ,-0.0-, ; читераст',
    }
}, 'Helper Monser')
Вероятно, потому что точки нельзя использовать в именах ключей.
Lua:
['m.v'] = not m.v
 

Макасина

Новичок
4
0
Не робит, почему?
script_author('TABLetka')

require "lib.moonloader"

local tag = '[XXXSAMP]:'
local label = 0
local main_color = 0xB41111
local main_color_texat = "{C96464}"
local white_color = "{FFFFFF}"

function main()
if not isSampLoaded() or not isSampfuncsLoaded() then return end
while not isSampAvailable() do wait(100) end
sampRegisterChatCommand("xxxhelp", cmd_xxxhelp)
sampRegisterChatCommand("xxxsms", cmd_xxxsms)
sampAddChatMessage(tag .." Скрипт загружен!", main_color -1)
while true do
wait(0)
end
end

function cmd_xxxhelp()
sampAddChatMessage(" {FFFFFF} Список команд {C96464} XXXSAMP ", main_color)
sampAddChatMessage(" {FFFFFF} /xxxsms {A014D2} - XXX по телефону ", main_color)
end

function cmd_xxxsms()
sampAddChatMessage("{FFA500}SMS: {FFFF00}Привет, сладкий. {FFA500}| {FFFF00}Отправитель: Путана (тел. 69)", -1)
Sleep, 5000
sampAddChatMessage("{FFFF00}","{FFA500}SMS: {FFFF00}Тебе скучно и одиноко? {FFA500}| {FFFF00}Отправитель: Путана (тел. 69)")
Sleep, 5000
sampaddChatMessage("{FFFF00}","{FFA500}SMS: {FFFF00}Сейчас я это исправлю, милаха. {FFA500}| {FFFF00}Отправитель: Путана (тел. 69)")
Sleep, 5000
sampAddChatMessage("{FFFF00}","{FFA500}SMS: {FFFF00}Я медленно снимаю свою булую майку. {FFA500}| {FFFF00}Отправитель: Путана (тел. 69)")
Sleep, 5000
sampAddChatMessage("{FFFF00}","{FFA500}SMS: {FFFF00}Теперь я медленно растёгиваю сво. красную юбку. {FFA500}| {FFFF00}Отправитель: Путана (тел. 69)")
Sleep, 5000
sampAddChatMessage("{FFFF00}","{FFA500}SMS: {FFFF00}Теперь я беру твои руки и растегиваю ими ливчик {FFA500}| {FFFF00}Отправитель: Путана (тел. 69)")
Sleep, 5000
sampAddChatMessage("{FFFF00}","{FFA500}SMS: {FFFF00}Ты можешь увидеть моих подружек {FFA500}| {FFFF00}Отправитель: Путана (тел. 69)")
Sleep, 5000
sampAddChatMessage("{FFFF00}","{FFA500}SMS: {FFFF00}Они ждут твоего тёплого приятного прикосновения... {FFA500}| {FFFF00}Отправитель: Путана (тел. 69)")
Sleep, 5000
sampAddChatMessage("{FFFF00}","{FFA500}SMS: {FFFF00}Ты прикосаешься к ним, я ощущаю это удовольствие прикосновения... {FFA500}| {FFFF00}Отправитель: Путана (тел. 69)")
Sleep, 5000
sampAddChatMessage("{FFFF00}","{FFA500}SMS: {FFFF00}Я приступаю к своим розавым трусикам, беру тебя за руку.. {FFA500}| {FFFF00}Отправитель: Путана (тел. 69)")
Sleep, 5000
sampAddChatMessage("{FFFF00}","{FFA500}SMS: {FFFF00}и твоею ладонью, проведя её через всё тело, дохожу до трусиков.. {FFA500}| {FFFF00}Отправитель: Путана (тел. 69)")
Sleep, 5000
sampAddChatMessage("{FFFF00}","{FFA500}SMS: {FFFF00}Я растегиваю твои джинсы.. {FFA500}| {FFFF00}Отправитель: Путана (тел. 69)")
Sleep, 5000
sampAddChatMessage("{FFFF00}","{FFA500}SMS: {FFFF00} делаю приятные прикасновения и накланаюсь... {FFA500}| {FFFF00}Отправитель: Путана (тел. 69)")
Sleep, 10000
sampAddChatMessageEx("{FFFF00}","{FFA500}SMS: {FFFF00} Приветствую, я Капитан Котов. Вы аристованы!!! Эй 16... {FFA500}| {FFFF00}Отправитель: FBI (тел. 911)")

end
 

Musaigen

abobusnik
Проверенный
1,597
1,356
Не робит, почему?
script_author('TABLetka')

require "lib.moonloader"

local tag = '[XXXSAMP]:'
local label = 0
local main_color = 0xB41111
local main_color_texat = "{C96464}"
local white_color = "{FFFFFF}"

function main()
if not isSampLoaded() or not isSampfuncsLoaded() then return end
while not isSampAvailable() do wait(100) end
sampRegisterChatCommand("xxxhelp", cmd_xxxhelp)
sampRegisterChatCommand("xxxsms", cmd_xxxsms)
sampAddChatMessage(tag .." Скрипт загружен!", main_color -1)
while true do
wait(0)
end
end

function cmd_xxxhelp()
sampAddChatMessage(" {FFFFFF} Список команд {C96464} XXXSAMP ", main_color)
sampAddChatMessage(" {FFFFFF} /xxxsms {A014D2} - XXX по телефону ", main_color)
end

function cmd_xxxsms()
sampAddChatMessage("{FFA500}SMS: {FFFF00}Привет, сладкий. {FFA500}| {FFFF00}Отправитель: Путана (тел. 69)", -1)
Sleep, 5000
sampAddChatMessage("{FFFF00}","{FFA500}SMS: {FFFF00}Тебе скучно и одиноко? {FFA500}| {FFFF00}Отправитель: Путана (тел. 69)")
Sleep, 5000
sampaddChatMessage("{FFFF00}","{FFA500}SMS: {FFFF00}Сейчас я это исправлю, милаха. {FFA500}| {FFFF00}Отправитель: Путана (тел. 69)")
Sleep, 5000
sampAddChatMessage("{FFFF00}","{FFA500}SMS: {FFFF00}Я медленно снимаю свою булую майку. {FFA500}| {FFFF00}Отправитель: Путана (тел. 69)")
Sleep, 5000
sampAddChatMessage("{FFFF00}","{FFA500}SMS: {FFFF00}Теперь я медленно растёгиваю сво. красную юбку. {FFA500}| {FFFF00}Отправитель: Путана (тел. 69)")
Sleep, 5000
sampAddChatMessage("{FFFF00}","{FFA500}SMS: {FFFF00}Теперь я беру твои руки и растегиваю ими ливчик {FFA500}| {FFFF00}Отправитель: Путана (тел. 69)")
Sleep, 5000
sampAddChatMessage("{FFFF00}","{FFA500}SMS: {FFFF00}Ты можешь увидеть моих подружек {FFA500}| {FFFF00}Отправитель: Путана (тел. 69)")
Sleep, 5000
sampAddChatMessage("{FFFF00}","{FFA500}SMS: {FFFF00}Они ждут твоего тёплого приятного прикосновения... {FFA500}| {FFFF00}Отправитель: Путана (тел. 69)")
Sleep, 5000
sampAddChatMessage("{FFFF00}","{FFA500}SMS: {FFFF00}Ты прикосаешься к ним, я ощущаю это удовольствие прикосновения... {FFA500}| {FFFF00}Отправитель: Путана (тел. 69)")
Sleep, 5000
sampAddChatMessage("{FFFF00}","{FFA500}SMS: {FFFF00}Я приступаю к своим розавым трусикам, беру тебя за руку.. {FFA500}| {FFFF00}Отправитель: Путана (тел. 69)")
Sleep, 5000
sampAddChatMessage("{FFFF00}","{FFA500}SMS: {FFFF00}и твоею ладонью, проведя её через всё тело, дохожу до трусиков.. {FFA500}| {FFFF00}Отправитель: Путана (тел. 69)")
Sleep, 5000
sampAddChatMessage("{FFFF00}","{FFA500}SMS: {FFFF00}Я растегиваю твои джинсы.. {FFA500}| {FFFF00}Отправитель: Путана (тел. 69)")
Sleep, 5000
sampAddChatMessage("{FFFF00}","{FFA500}SMS: {FFFF00} делаю приятные прикасновения и накланаюсь... {FFA500}| {FFFF00}Отправитель: Путана (тел. 69)")
Sleep, 10000
sampAddChatMessageEx("{FFFF00}","{FFA500}SMS: {FFFF00} Приветствую, я Капитан Котов. Вы аристованы!!! Эй 16... {FFA500}| {FFFF00}Отправитель: FBI (тел. 911)")

end
1. Есть всеми известные сайты.
2. Задержка делается так wait(5000)
3. Сделать это все в потоке.
 
  • Нравится
Реакции: Макасина

v4yne1

Новичок
6
0
как сделать скрипт для чтения чата? Я хочу, чтобы он работал без остановки. если появляется "test", я хочу выполнить sampSendChat
 

Dmitriy Makarov

25.05.2021
Проверенный
2,500
1,130
как сделать скрипт для чтения чата? Я хочу, чтобы он работал без остановки. если появляется "test", я хочу выполнить sampSendChat
Lua:
local sampev = require 'lib.samp.events'

function sampev.onServerMessage(color, text)
    if text:find("test") then
    sampSendChat("Hello")
    end
end
 
  • Нравится
Реакции: v4yne1

astynk

Известный
Проверенный
742
532
большое большое спасибо, legend!!!!

но функция удаляет исходное сообщение, я могу остановить это?
Это известный баг муна. Попробуй в потоке сделать или через sampAddChatMessage добавлять его, в любом случае костыль лепить придется.