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

neverlane

t.me/neverlane00
Друг
1,010
1,162
Возможно ли писать текст на экране шрифтом из гта? типо из fonts.txd
 

Dmitriy Makarov

25.05.2021
Проверенный
2,505
1,134
А как написать тип как кодом в lua тут в сообщения?
48734

48735

48736

Дима а как обходить анти чит?
Хз, не занимался этим
 

unnamedIMB

Участник
16
5
Подскажите как правильно добавить проверку на отсутствие данных окон:
48738
48746


Lua:
function main()
    while true do
        wait(0)
        if testCheat('arzoff') then SV() end
        if not check and not sampIsDialogActive() and not sampIsChatInputActive() and not isSampfuncsConsoleActive() and not sampTextdrawIsExists(idt) then
            ffi.C.SetCursorPos(sx/2, sy/2)
        end
    end
end
 
Последнее редактирование:

paulohardy

вы еще постите говно? тогда я иду к вам
Всефорумный модератор
1,932
1,303
Почему не работает?
Lua:
if text:find('[A] (.*) отключился((%d+) уровень) | Отыграл: (.*)') then
        nick, lvl, time = text:find('[A] (.*) отключился((%d+) уровень) | Отыграл: (.*)')
        sampAddChatMessage('{FFD700}Отключился {7FFFD4}'..nick..' {FFD700}, с уровнем {7FFFD4}['..lvl..']')
        return false
    end
nick, lvl, time = text:match('[A] (.*) отключился((%d+) уровень) | Отыграл: (.*)')
 

ishi

Известный
493
110
Йоу, чуваки, с вики убрали описание processlineofsight?
У меня стойкое ощущение, что там было описание состава таблицы colpoint, потому что я всегда на вики смотрел его!
Крч, нужен этот самый состав ,_,
 

trefa

3d print
Всефорумный модератор
2,115
1,281
Йоу, чуваки, с вики убрали описание processlineofsight?
У меня стойкое ощущение, что там было описание состава таблицы colpoint, потому что я всегда на вики смотрел его!
Крч, нужен этот самый состав ,_,
Восстановил статью в вики, чекай
 
  • Нравится
Реакции: ishi

Cod

Участник
117
15
Привет, хочу немного освоить render, но статьи из вики мало.
Мне бы примеров, вообще мне просто нужно выводить текст снизу справа, но я не знаю как сделать, чтобы он был на всех экранах в одном месте.
 

mark0005675

Участник
30
3
Привет помогите с кодом менюшка работает но вот кнопки закрыть не работают
Код:
 function checker()
    while sampIsDialogActive() do
        wait(0)
        local result, button, listitem, input = sampHasDialogRespond(228)
        if result and listitem == 0 then
            sampAddChatMessage('{00FF00}/ds ID - Посмотреть доступы FD | {1E90FF} /ods ID - Посмотреть доступы Основателя', -1)
        elseif result and listitem == 1 then
            sampAddChatMessage('{FFFFFF}/jl - Посадить в Джайл | /ps - Посадить в Присон', -1)
            sampAddChatMessage('{FFFFFF}/wrn - Выдать варн | /kk - Выгнать с сервера', -1)
            sampAddChatMessage('{FFFFFF}/mt - Выдать мут', -1)
        elseif result and listitem == 2 then
            sampAddChatMessage('{00FF00}/bn - Забанить на 1 день | /bnn - Забанить навсегда', -1)
            sampAddChatMessage('{00FF00}/bni - Забанить ип | /bno - Забанить в оффлайн', -1)
            sampAddChatMessage('{00FF00}/tbn - Забанить на время | /adw id - Выдать Админ варн', -1)
            sampAddChatMessage('{00FF00}/adwo - Снять админ варн | /mkh id - Назначить хелпером', -1)
            sampAddChatMessage('{00FF00}/mkl ID - Назначить Лидером (только себя) | /fg id - Ударить по лицу', -1)
        elseif result and listitem == 3 then
            sampAddChatMessage('{0000FF}/sk - Тихо кикнуть | /offl ID - Снять лидера в оффлайн', -1)
            sampAddChatMessage('{0000FF}/mka - Выдать админку (1-12) | /asl - Продать хату (владелец должен быть оффлайн)', -1)
            sampAddChatMessage('{0000FF}/gzc - Красить терру | /sld - Снять с Лидерки', -1)
            sampAddChatMessage('{0000FF}/dr - Забрать кмд у админа | /ow - Выдать варн Основателя', -1)
            sampAddChatMessage('{0000FF}/owo - Снять варн Основателя | /sbn - Выдать тихий бан', -1)
            sampAddChatMessage('{0000FF}/offow - Выдать варн Основателя в оффлайн | /offaw - Выдать варн Администратора в оффлайн', -1)
            sampAddChatMessage('{0000FF}/aj - Посадить в Админ тюрьму  | /acr - Создать {FFFF00}Super Car{FF0000} Admins Team', -1)
            sampAddChatMessage('{0000FF}/offaj - Посадить в Админ тюрьму в оффлайн', -1)
        elseif result and listitem == 4 then
            sampAddChatMessage('{FFFF00}/lg - Проверить Админ логи | /alg - Проверить логи выдачи', -1)
            sampAddChatMessage('{FFFF00}/plg - Проверить логи игрока | /stl - Назначить Лидером', -1)
            sampAddChatMessage('{FFFF00}/avz - Секретная Админка | /offad - Снять с Админа в оффлайн', -1)
            sampAddChatMessage('{FFFF00}/psk - Выдать Админку (0-16) | /mku - Выдать Админку (1-10)', -1)
            sampAddChatMessage('{FFFF00}/ipb - Забанить по IP | /ocr - Создать кар {FF0000}Admins Team {0000FF}» ™Создатель™ «', -1)
        elseif result and listitem == 5 then
            sampAddChatMessage('{FF0000}/vr - Отправить в виртуальный мир | /cr - крашнуть игрока', -1)
            sampAddChatMessage('{FF0000}/oc - Чат Основателя | /logk - Анти Убийство ', -1)
        elseif result and listitem == 6 then
            sampAddChatMessage('{FF69B4}/setpl - Выдать уровень промо-кода | /gn - цветное оружие ', -1)
            sampAddChatMessage('{FF69B4}/sx - Послать на звезду | /vs - Выдать аварн + оварн + аджайл + дроп ', -1)
            sampAddChatMessage('{FF69B4}/gs - Выдать сертификат | /nh - Запретить варны и баны', -1)
            sampAddChatMessage('{FF69B4}/chatc - Сменить цвет чата /a | /k - Скрыться из /adminy', -1)
            sampAddChatMessage('{FF69B4}/t - Писать кмд за другого| /amt - Выдать мут в /a', -1)
            sampAddChatMessage('{FF69B4}/amn - Амниситя (Снятие всех наказаний)', -1)
        elseif result and listitem == 7 then
             sampAddChatMessage('Об Создателе: {00FFFF}Скрипт Создан Администратором WoL RPG', -1)
             sampAddChatMessage('Об Создателе: {FFFF00}» ™Создатель™ « | John_Hamilton', -1)
             sampAddChatMessage('Об Создателе: {FF0000}ВК создателя - https://vk.com/rubrikaa', -1)
        end
    end
 end
 

paulohardy

вы еще постите говно? тогда я иду к вам
Всефорумный модератор
1,932
1,303
Тогда мой персонаж телепортируется на пикап, мне нужно что б мой чел как стоял так и стоит но серверу прошло что данный пикап взял игрок
Функция не телепортирует тебя на пикап