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

Quasper

Известный
834
354
В чем трабл, не работает

Lua:
 while true do
wait(0)
if not isKeyDown(VK_LBUTTON) and not isCharInAnyCar(PLAYER_PED) then
    local car = storeCarCharIsInNoSave(PLAYER_PED)
    giveNonPlayerCarNitro(car)
    end
    end
end
Lua:
while true do
wait(0)
if not isKeyDown(VK_LBUTTON) and isCharInAnyCar(PLAYER_PED) then
    local car = storeCarCharIsInNoSave(PLAYER_PED)
    giveNonPlayerCarNitro(car)
    end
    end
end

Актуальный вопрос.
сменить номер customPlateForNextCar(Model modelId, string numberplate)
 

Lucifer Melton

Активный
164
57
помогите плез, как сделать такую веш? Я пишу в чат /de 1000 и lua сам пишет /makegun 2 200, /makegun 2 200, /makegun 2 200 и т.д., а если напишу /de 350 и он сперва пишет /makegun 200 потом /makegun 2 150
 

ufdhbi

Известный
Проверенный
1,455
861
помогите плез, как сделать такую веш? Я пишу в чат /de 1000 и lua сам пишет /makegun 2 200, /makegun 2 200, /makegun 2 200 и т.д., а если напишу /de 350 и он сперва пишет /makegun 200 потом /makegun 2 150
математика (остаток от деления, деление без остатка) + цикл
 

Dugger

Потрачен
30
1
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Помогите пожалуйста, при использовании цикла с бегом игрока (функции из бота написанным SF_BotMaker) перестаёт работать активация/деактивация скрипта, при закрытии окна на крестик крашит игру с вот текстом
qqb5HNt.png

moonloader.log никаких ошибок не показывает

Вот сама функция:
Lua:
function BeginToPoint(x, y, z, radius, move_code, isSprint)
    repeat
        local posX, posY, posZ = GetCoordinates()
        SetAngle(x, y, z)
        MovePlayer(move_code, isSprint)
        local dist = getDistanceBetweenCoords3d(x, y, z, posX, posY, z)
        wait(0)
    until not enabled or dist < radius
end
 

DarkTX

Известный
96
15
Кто знает эффективные способы защиты кода? Может быть обфускация?
Компилирую, но после декомпиляции слишком уж всё хорошо подлежит восстановлению. В идеале чтобы не декомпилировался вовсе, или каша была полная.
Скрипт на 600 строк кода.
 

Azller Lollison

я узбек
Друг
1,343
2,271
Кто знает эффективные способы защиты кода? Может быть обфускация?
Компилирую, но после декомпиляции слишком уж всё хорошо подлежит восстановлению. В идеале чтобы не декомпилировался вовсе, или каша была полная.
Скрипт на 600 строк кода.
главное не пытайся юзать xfuscator для защиты, говнина полная.
 

uryukhai

Активный
196
104
Кто знает эффективные способы защиты кода? Может быть обфускация?
Компилирую, но после декомпиляции слишком уж всё хорошо подлежит восстановлению. В идеале чтобы не декомпилировался вовсе, или каша была полная.
Скрипт на 600 строк кода.
код в одну строку (обновление будет затруднительным), мусорные функции, можешь ещё непривычно для себя раскидать функции в разные места main() например в самый конец кода
 

TheRuthArbiter

Неповторимый РПшер
Проверенный
523
305
Кто знает эффективные способы защиты кода? Может быть обфускация?
Компилирую, но после декомпиляции слишком уж всё хорошо подлежит восстановлению. В идеале чтобы не декомпилировался вовсе, или каша была полная.
Скрипт на 600 строк кода.
Написать Азллеру и заплатить шейкель за защиту кода.
 
  • Нравится
Реакции: #Northn