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

trefa

Известный
Всефорумный модератор
2,097
1,230
Как узнать инфу об своих трасерах, хук onBulletSync не помогает
 

factor_cheater

Участник
62
2
Что я тут не так сделал?

function main()
while not isSampLoaded() do wait(100) end
sampRegisterChatCommand('dmg',cmd)
while true do wait(-1) end
end

function cmd(param)
local num = tonumber(param)
sampAddChatMessage('ID: '..num, 0xFFFFFFFF)
result, ped = sampGetCharHandleBySampPlayerId(num)
if result then
sampSendGiveDamageDamage(num, 10.0, 38, 3)
sampAddChatMessage('Handle: '..ped, 0xFFFFFFFF)
end
end
 

ShuffleBoy

Известный
Друг
754
429
Что я тут не так сделал?

function main()
while not isSampLoaded() do wait(100) end
sampRegisterChatCommand('dmg',cmd)
while true do wait(-1) end
end

function cmd(param)
local num = tonumber(param)
sampAddChatMessage('ID: '..num, 0xFFFFFFFF)
result, ped = sampGetCharHandleBySampPlayerId(num)
if result then
sampSendGiveDamageDamage(num, 10.0, 38, 3)
sampAddChatMessage('Handle: '..ped, 0xFFFFFFFF)
end
end
Что в логе?
 

factor_cheater

Участник
62
2
[22:10:41.973414] (system) Session started.
[22:10:41.973916] (debug) Module handle: 0F440000
MoonLoader v.026.4-beta loaded.
Developers: FYP, hnnssy, EvgeN 1137
Copyright (c) 2016, BlastHack Team
Избранное - Lua - ASI - MoonLoader(https://www.blast.hk/moonloader/)
[22:10:41.974419] (info) Working directory: C:\!topsborka\moonloader
[22:10:41.974419] (debug) FP Control: 0009001F
[22:10:41.974419] (debug) Game: GTA SA 1.0.0.0 US
[22:10:41.974419] (system) Installing pre-game hooks...
[22:10:41.979942] (system) Hooks installed.
[22:10:43.546143] (debug) Initializing opcode handler table
[22:10:43.546143] (debug) package.path = C:\!topsborka\moonloader\lib\?.lua;C:\!topsborka\moonloader\lib\?\init.lua;C:\!topsborka\moonloader\?.lua;C:\!topsborka\moonloader\?\init.lua;.\?.lua;C:\!topsborka\moonloader\lib\?.luac;C:\!topsborka\moonloader\lib\?\init.luac;C:\!topsborka\moonloader\?.luac;C:\!topsborka\moonloader\?\init.luac;.\?.luac
[22:10:43.546143] (debug) package.cpath = C:\!topsborka\moonloader\lib\?.dll;
[22:10:43.549652] (system) Loading script 'C:\!topsborka\moonloader\123.lua'...
[22:10:43.549652] (debug) New script: 0EB7EE4C
[22:10:43.551658] (system) 123.lua: Loaded successfully.
[22:10:43.551658] (system) Loading script 'C:\!topsborka\moonloader\AutoReboot.lua'...
[22:10:43.551658] (debug) New script: 03C0F7F4
[22:10:43.563187] (system) ML-AutoReboot: Loaded successfully.
[22:10:43.563187] (system) Loading script 'C:\!topsborka\moonloader\Binder.lua'...
[22:10:43.563187] (debug) New script: 03C0F97C
[22:10:43.564190] (system) Binder.lua: Loaded successfully.
[22:10:43.564190] (system) Loading script 'C:\!topsborka\moonloader\check-moonloader-updates.lua'...
[22:10:43.564190] (debug) New script: 03C0FB04
[22:10:43.591262] (system) Check MoonLoader Updates: Loaded successfully.
[22:10:43.591262] (system) Loading script 'C:\!topsborka\moonloader\reload_all.lua'...
[22:10:43.591262] (debug) New script: 03C0FC8C
[22:10:43.592267] (system) ML-ReloadAll: Loaded successfully.
[22:10:43.592768] (system) Loading script 'C:\!topsborka\moonloader\SF Integration.lua'...
[22:10:43.592768] (debug) New script: 03C0FE14
[22:10:43.599786] (system) SF Integration: Loaded successfully.
[22:10:43.599786] (system) Loading script 'C:\!topsborka\moonloader\Новый текстовый документ.lua'...
[22:10:43.599786] (debug) New script: 1217E404
[22:10:43.600788] (system) Новый текстовый документ.lua: Loaded successfully.
[22:10:43.601290] (system) Binder.lua: Script terminated. (03C0F97C)
[22:10:55.811762] (system) Installing post-load hooks...
[22:10:55.812263] (system) Hooks installed.
[22:11:20.378659] (error) Новый текстовый документ.lua: C:\!topsborka\moonloader\Новый текстовый документ.lua:12: attempt to call global 'sampSendGiveDamageDamage' (a nil value)
stack traceback:
C:\!topsborka\moonloader\Новый текстовый документ.lua:12: in function <C:\!topsborka\moonloader\Новый текстовый документ.lua:7>
[22:11:20.379161] (error) Новый текстовый документ.lua: Script died due to an error. (1217E404)
[22:11:49.936809] (system) Unloading...
[22:11:49.936809] (system) 123.lua: Script terminated. (0EB7EE4C)
[22:11:49.937310] (system) ML-AutoReboot: Script terminated. (03C0F7F4)
[22:11:49.937811] (system) Check MoonLoader Updates: Script terminated. (03C0FB04)
[22:11:49.937811] (system) ML-ReloadAll: Script terminated. (03C0FC8C)
[22:11:49.938312] (system) SF Integration: Script terminated. (03C0FE14)
[22:11:49.941822] (system) Session terminated.
 

trefa

Известный
Всефорумный модератор
2,097
1,230
Как в такой фигне сделать чтобы всё было ровно
Lua:
huynya = [[
{0768FA}№ {FF00FF}Команда - {00CCFF}Описание.
{0768FA}1. {FF00FF}привет - {00CCFF}Приветствует вас.
{0768FA}2. {FF00FF}просканируй человека  - {00CCFF}Выводит информацию о ближайшем игроке.
{0768FA}3. {FF00FF}позвони на номер numb - {00CCFF}Звонит на номер Numb ]]
Так, чтобы номера были под номерами, команды под командами, описания под описаниями
\t вроде (Если это в диалоге юзается)
 

brackets

Новичок
12
4
Как в такой фигне сделать чтобы всё было ровно
Lua:
huynya = [[
{0768FA}№ {FF00FF}Команда - {00CCFF}Описание.
{0768FA}1. {FF00FF}привет - {00CCFF}Приветствует вас.
{0768FA}2. {FF00FF}просканируй человека  - {00CCFF}Выводит информацию о ближайшем игроке.
{0768FA}3. {FF00FF}позвони на номер numb - {00CCFF}Звонит на номер Numb ]]
Так, чтобы номера были под номерами, команды под командами, описания под описаниями
юзать \t
 
1,417
1,029
Как в такой фигне сделать чтобы всё было ровно
Lua:
huynya = [[
{0768FA}№ {FF00FF}Команда - {00CCFF}Описание.
{0768FA}1. {FF00FF}привет - {00CCFF}Приветствует вас.
{0768FA}2. {FF00FF}просканируй человека  - {00CCFF}Выводит информацию о ближайшем игроке.
{0768FA}3. {FF00FF}позвони на номер numb - {00CCFF}Звонит на номер Numb ]]
Так, чтобы номера были под номерами, команды под командами, описания под описаниями
Lua:
huynya = [[
{0768FA}№\t{FF00FF}Команда\t{00CCFF}Описание.
{0768FA}1.\t{FF00FF}привет \t {00CCFF}Приветствует вас.
{0768FA}2.\t{FF00FF}просканируй человека  \t {00CCFF}Выводит информацию о ближайшем игроке.
{0768FA}3.\t{FF00FF}позвони на номер numb \t {00CCFF}Звонит на номер Numb ]]

[22:10:41.973414] (system) Session started.
[22:10:41.973916] (debug) Module handle: 0F440000
MoonLoader v.026.4-beta loaded.
Developers: FYP, hnnssy, EvgeN 1137
Copyright (c) 2016, BlastHack Team
Избранное - Lua - ASI - MoonLoader(https://www.blast.hk/moonloader/)
[22:10:41.974419] (info) Working directory: C:\!topsborka\moonloader
[22:10:41.974419] (debug) FP Control: 0009001F
[22:10:41.974419] (debug) Game: GTA SA 1.0.0.0 US
[22:10:41.974419] (system) Installing pre-game hooks...
[22:10:41.979942] (system) Hooks installed.
[22:10:43.546143] (debug) Initializing opcode handler table
[22:10:43.546143] (debug) package.path = C:\!topsborka\moonloader\lib\?.lua;C:\!topsborka\moonloader\lib\?\init.lua;C:\!topsborka\moonloader\?.lua;C:\!topsborka\moonloader\?\init.lua;.\?.lua;C:\!topsborka\moonloader\lib\?.luac;C:\!topsborka\moonloader\lib\?\init.luac;C:\!topsborka\moonloader\?.luac;C:\!topsborka\moonloader\?\init.luac;.\?.luac
[22:10:43.546143] (debug) package.cpath = C:\!topsborka\moonloader\lib\?.dll;
[22:10:43.549652] (system) Loading script 'C:\!topsborka\moonloader\123.lua'...
[22:10:43.549652] (debug) New script: 0EB7EE4C
[22:10:43.551658] (system) 123.lua: Loaded successfully.
[22:10:43.551658] (system) Loading script 'C:\!topsborka\moonloader\AutoReboot.lua'...
[22:10:43.551658] (debug) New script: 03C0F7F4
[22:10:43.563187] (system) ML-AutoReboot: Loaded successfully.
[22:10:43.563187] (system) Loading script 'C:\!topsborka\moonloader\Binder.lua'...
[22:10:43.563187] (debug) New script: 03C0F97C
[22:10:43.564190] (system) Binder.lua: Loaded successfully.
[22:10:43.564190] (system) Loading script 'C:\!topsborka\moonloader\check-moonloader-updates.lua'...
[22:10:43.564190] (debug) New script: 03C0FB04
[22:10:43.591262] (system) Check MoonLoader Updates: Loaded successfully.
[22:10:43.591262] (system) Loading script 'C:\!topsborka\moonloader\reload_all.lua'...
[22:10:43.591262] (debug) New script: 03C0FC8C
[22:10:43.592267] (system) ML-ReloadAll: Loaded successfully.
[22:10:43.592768] (system) Loading script 'C:\!topsborka\moonloader\SF Integration.lua'...
[22:10:43.592768] (debug) New script: 03C0FE14
[22:10:43.599786] (system) SF Integration: Loaded successfully.
[22:10:43.599786] (system) Loading script 'C:\!topsborka\moonloader\Новый текстовый документ.lua'...
[22:10:43.599786] (debug) New script: 1217E404
[22:10:43.600788] (system) Новый текстовый документ.lua: Loaded successfully.
[22:10:43.601290] (system) Binder.lua: Script terminated. (03C0F97C)
[22:10:55.811762] (system) Installing post-load hooks...
[22:10:55.812263] (system) Hooks installed.
[22:11:20.378659] (error) Новый текстовый документ.lua: C:\!topsborka\moonloader\Новый текстовый документ.lua:12: attempt to call global 'sampSendGiveDamageDamage' (a nil value)
stack traceback:
C:\!topsborka\moonloader\Новый текстовый документ.lua:12: in function <C:\!topsborka\moonloader\Новый текстовый документ.lua:7>
[22:11:20.379161] (error) Новый текстовый документ.lua: Script died due to an error. (1217E404)
[22:11:49.936809] (system) Unloading...
[22:11:49.936809] (system) 123.lua: Script terminated. (0EB7EE4C)
[22:11:49.937310] (system) ML-AutoReboot: Script terminated. (03C0F7F4)
[22:11:49.937811] (system) Check MoonLoader Updates: Script terminated. (03C0FB04)
[22:11:49.937811] (system) ML-ReloadAll: Script terminated. (03C0FC8C)
[22:11:49.938312] (system) SF Integration: Script terminated. (03C0FE14)
[22:11:49.941822] (system) Session terminated.
sampSendGiveDamageDamage замени на sampSendGiveDamage
 
  • Нравится
Реакции: factor_cheater

ShuffleBoy

Известный
Друг
754
429
[22:10:41.973414] (system) Session started.
[22:10:41.973916] (debug) Module handle: 0F440000
MoonLoader v.026.4-beta loaded.
Developers: FYP, hnnssy, EvgeN 1137
Copyright (c) 2016, BlastHack Team
Избранное - Lua - ASI - MoonLoader(https://www.blast.hk/moonloader/)
[22:10:41.974419] (info) Working directory: C:\!topsborka\moonloader
[22:10:41.974419] (debug) FP Control: 0009001F
[22:10:41.974419] (debug) Game: GTA SA 1.0.0.0 US
[22:10:41.974419] (system) Installing pre-game hooks...
[22:10:41.979942] (system) Hooks installed.
[22:10:43.546143] (debug) Initializing opcode handler table
[22:10:43.546143] (debug) package.path = C:\!topsborka\moonloader\lib\?.lua;C:\!topsborka\moonloader\lib\?\init.lua;C:\!topsborka\moonloader\?.lua;C:\!topsborka\moonloader\?\init.lua;.\?.lua;C:\!topsborka\moonloader\lib\?.luac;C:\!topsborka\moonloader\lib\?\init.luac;C:\!topsborka\moonloader\?.luac;C:\!topsborka\moonloader\?\init.luac;.\?.luac
[22:10:43.546143] (debug) package.cpath = C:\!topsborka\moonloader\lib\?.dll;
[22:10:43.549652] (system) Loading script 'C:\!topsborka\moonloader\123.lua'...
[22:10:43.549652] (debug) New script: 0EB7EE4C
[22:10:43.551658] (system) 123.lua: Loaded successfully.
[22:10:43.551658] (system) Loading script 'C:\!topsborka\moonloader\AutoReboot.lua'...
[22:10:43.551658] (debug) New script: 03C0F7F4
[22:10:43.563187] (system) ML-AutoReboot: Loaded successfully.
[22:10:43.563187] (system) Loading script 'C:\!topsborka\moonloader\Binder.lua'...
[22:10:43.563187] (debug) New script: 03C0F97C
[22:10:43.564190] (system) Binder.lua: Loaded successfully.
[22:10:43.564190] (system) Loading script 'C:\!topsborka\moonloader\check-moonloader-updates.lua'...
[22:10:43.564190] (debug) New script: 03C0FB04
[22:10:43.591262] (system) Check MoonLoader Updates: Loaded successfully.
[22:10:43.591262] (system) Loading script 'C:\!topsborka\moonloader\reload_all.lua'...
[22:10:43.591262] (debug) New script: 03C0FC8C
[22:10:43.592267] (system) ML-ReloadAll: Loaded successfully.
[22:10:43.592768] (system) Loading script 'C:\!topsborka\moonloader\SF Integration.lua'...
[22:10:43.592768] (debug) New script: 03C0FE14
[22:10:43.599786] (system) SF Integration: Loaded successfully.
[22:10:43.599786] (system) Loading script 'C:\!topsborka\moonloader\Новый текстовый документ.lua'...
[22:10:43.599786] (debug) New script: 1217E404
[22:10:43.600788] (system) Новый текстовый документ.lua: Loaded successfully.
[22:10:43.601290] (system) Binder.lua: Script terminated. (03C0F97C)
[22:10:55.811762] (system) Installing post-load hooks...
[22:10:55.812263] (system) Hooks installed.
[22:11:20.378659] (error) Новый текстовый документ.lua: C:\!topsborka\moonloader\Новый текстовый документ.lua:12: attempt to call global 'sampSendGiveDamageDamage' (a nil value)
stack traceback:
C:\!topsborka\moonloader\Новый текстовый документ.lua:12: in function <C:\!topsborka\moonloader\Новый текстовый документ.lua:7>
[22:11:20.379161] (error) Новый текстовый документ.lua: Script died due to an error. (1217E404)
[22:11:49.936809] (system) Unloading...
[22:11:49.936809] (system) 123.lua: Script terminated. (0EB7EE4C)
[22:11:49.937310] (system) ML-AutoReboot: Script terminated. (03C0F7F4)
[22:11:49.937811] (system) Check MoonLoader Updates: Script terminated. (03C0FB04)
[22:11:49.937811] (system) ML-ReloadAll: Script terminated. (03C0FC8C)
[22:11:49.938312] (system) SF Integration: Script terminated. (03C0FE14)
[22:11:49.941822] (system) Session terminated.
Lua:
function main()
    while not isSampLoaded() do wait(100) end
    sampRegisterChatCommand('dmg',cmd)
    wait(-1)
end

function cmd(param)
    param = param:match('(%d+)')
    sampAddChatMessage('ID: '..param, 0xFFFFFF)
    sampSendGiveDamage(tonumber(param), 10.0, 38, 3)
end
 

ShuffleBoy

Известный
Друг
754
429
В том то и дело, что не хочет, хотел так сделать, а оно только в string работает. В [[ ]] не хочет работать
Lua:
MyDickIsBIG = '{0768FA}№\t{FF00FF}Команда\t{00CCFF}Описание.\n{0768FA}1.\t{FF00FF}привет \t {00CCFF}Приветствует вас.\n{0768FA}2.\t{FF00FF}просканируй человека  \t {00CCFF}Выводит информацию о ближайшем игроке.\n{0768FA}3.\t{FF00FF}позвони на номер numb \t {00CCFF}Звонит на номер Numb'
 
У

Удалённый пользователь 147808

Гость
Lua:
local encoding = require 'encoding'
u8 = encoding.UTF8 -- get the UTF-8 converter

local dlstatus = require('moonloader').download_status

function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end

    local line = '1234567890-=TeStТеСт{}!@#$%^*()~./\\\'\"'
    local encodedLine = urlencode(u8:encode(line, 'CP1251'))

    downloadUrlToFile('http://localhost/logger.php?line='..encodedLine, '!!remove_after.log', function(id, status)
        if status == dlstatus.STATUS_ENDDOWNLOADDATA then
            script.this:unload()
        end
    end)

    wait(-1)
end

function urlencode(str)
   if (str) then
      str = string.gsub (str, "\n", "\r\n")
      str = string.gsub (str, "([^%w ])",
         function (c) return string.format ("%%%02X", string.byte(c)) end)
      str = string.gsub (str, " ", "+")
   end
   return str
end

PHP:
<?php

$line = filter_input(INPUT_GET, 'line'); // $_GET['line']
if ($line)
{
  $file = fopen("logs.log", "a");
  if ($file)
  {
    fwrite($file, $line.PHP_EOL);
    fclose($file);
  }
 
  echo file_get_contents("logs.log");
}
Спасибо