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

James Hawk

Известный
919
217
How to get someone's PED by his ID?
If you want to get the player handle by player's id (not the skin id)
bool result, Ped ped = sampGetCharHandleBySampPlayerId(int id)
What do you want to do? You want to get player ID?
Насколько я понимаю, он хэндл игрока хочет получить. А ты ему дал получение айдишника по хэндлу (наоборот)
Это прям капец как помогло
Ты хэндл объекта (существующего) должен вписывать в скобках
 
Последнее редактирование:

Pu$$y

Участник
80
2
If you want to get the player handle by player's id (not the skin id)
bool result, Ped ped = sampGetCharHandleBySampPlayerId(int id)

Насколько я понимаю, он хэндл игрока хочет получить. А ты ему дал получение айдишника по хэндлу (наоборот)

Это прям капец как помогло

Ты хэндл объекта (существующего) должен вписывать в скобках
Exactly mate, Thanks
 
  • Нравится
Реакции: James Hawk

ГОХА | GoxaShow

В АРМИИ С 12.12,ЗАКАЗЫ НЕ ДЕЛАЮ,ТУПЫЕ ВОПРОСЫ-НАХУ
Проверенный
1,870
1,872
привет, подскажите, как из этого диалога !серверного! убрать ебучие новые дома дно зоны, они заебали просто уже, убрать нужно 1054 слетел и так далее
38475

кому нужен текст диалога
Код:
{FFFFFF}
1. Дом        Слетит через: {C9B931}1{FFFFFF} Payday.
2. Дом        Слетит через: {C9B931}1{FFFFFF} Payday.
3. Дом        Слетит через: {C9B931}3{FFFFFF} Payday.
4. Дом        Слетит через: {C9B931}6{FFFFFF} Payday.
5. Дом        ID: {C9B931}1054{FFFFFF}    [{A9FF14}Слетел{FFFFFF}]
6. Дом        ID: {C9B931}1055{FFFFFF}    [{A9FF14}Слетел{FFFFFF}]
7. Дом        ID: {C9B931}1056{FFFFFF}    [{A9FF14}Слетел{FFFFFF}]
8. Дом        ID: {C9B931}1057{FFFFFF}    [{A9FF14}Слетел{FFFFFF}]
9. Дом        ID: {C9B931}1058{FFFFFF}    [{A9FF14}Слетел{FFFFFF}]
10. Дом        ID: {C9B931}1059{FFFFFF}    [{A9FF14}Слетел{FFFFFF}]
11. Дом        ID: {C9B931}1060{FFFFFF}    [{A9FF14}Слетел{FFFFFF}]
12. Дом        ID: {C9B931}1061{FFFFFF}    [{A9FF14}Слетел{FFFFFF}]
13. Дом        ID: {C9B931}1062{FFFFFF}    [{A9FF14}Слетел{FFFFFF}]
14. Дом        ID: {C9B931}1063{FFFFFF}    [{A9FF14}Слетел{FFFFFF}]
15. Дом        ID: {C9B931}1064{FFFFFF}    [{A9FF14}Слетел{FFFFFF}]
16. Дом        ID: {C9B931}1065{FFFFFF}    [{A9FF14}Слетел{FFFFFF}]
17. Дом        ID: {C9B931}1066{FFFFFF}    [{A9FF14}Слетел{FFFFFF}]
18. Дом        ID: {C9B931}1067{FFFFFF}    [{A9FF14}Слетел{FFFFFF}]
19. Дом        ID: {C9B931}1068{FFFFFF}    [{A9FF14}Слетел{FFFFFF}]
Эта информация может быть {1EA3CC}ошибочной.{FFFFFF}

Используйте {1EA3CC}/findihouse ID{FFFFFF}, чтобы найти нужный вам дом. Стоимость {1EA3CC}1500$.{FFFFFF}
{FF5B14}ID{FFFFFF} дома отображается только у {FF5B14}слетевших{FFFFFF} домов!
 

Pu$$y

Участник
80
2
Lua:
require "lib.moonloader"

function main()
if not isSampLoaded() or not isSampfuncsLoaded() then return end
while not isSampAvailable() do wait(100) end
sampAddChatMessage("{FFFFFF}Troll Hacks by TriggerNigger OFC - Use /slap")
sampRegisterChatCommand('slap', function (idd)
    TargetPED = sampGetCharHandleBySampPlayerId(idd)
    positionX, positionY, positionZ = getCharCoordinates(TargetPED)
    setCharCoordinates(TargetPED, positionX, positionY, positionZ + 1000)
    sampSendChat("{F55555}The Nigger was trolled lmao")
end)
while true do
wait(0)
-- infinite loop
end
end

It keeps giving me this error

Slapper.lua: opcode '00A0' call caused an unhandled exception
stack traceback:
[C]: in function 'getCharCoordinates'
C:\GTA\GTA San Andreas\moonloader\Slapper.lua:30: in function <C:\GTA\GTA San Andreas\moonloader\Slapper.lua:28>
[ML] (error) Slapper.lua: Script died due to an error. (161DE4BC)

@James Hawk
 

James Hawk

Известный
919
217
Lua:
require "lib.moonloader"

function main()
if not isSampLoaded() or not isSampfuncsLoaded() then return end
while not isSampAvailable() do wait(100) end
sampAddChatMessage("{FFFFFF}Troll Hacks by TriggerNigger OFC - Use /slap")
sampRegisterChatCommand('slap', function (idd)
    TargetPED = sampGetCharHandleBySampPlayerId(idd)
    positionX, positionY, positionZ = getCharCoordinates(TargetPED)
    setCharCoordinates(TargetPED, positionX, positionY, positionZ + 1000)
    sampSendChat("{F55555}The Nigger was trolled lmao")
end)
while true do
wait(0)
-- infinite loop
end
end

It keeps giving me this error

Slapper.lua: opcode '00A0' call caused an unhandled exception
stack traceback:
[C]: in function 'getCharCoordinates'
C:\GTA\GTA San Andreas\moonloader\Slapper.lua:30: in function <C:\GTA\GTA San Andreas\moonloader\Slapper.lua:28>
[ML] (error) Slapper.lua: Script died due to an error. (161DE4BC)

@James Hawk
Lua:
local _, targetPed = sampGetCharHandleBySampPlayerId(int id)
-- you lost the first argument, it's necessary
 

Pu$$y

Участник
80
2
Lua:
local _, targetPed = sampGetCharHandleBySampPlayerId(int id)
-- you lost the first argument, it's necessary
So it becomes like that right?

Lua:
require "lib.moonloader"

function main()
 if not isSampLoaded() or not isSampfuncsLoaded() then return end
 while not isSampAvailable() do wait(100) end
 sampAddChatMessage("{FFFFFF}Troll Hacks by TriggerNigger OFC - Use /slap")
 sampRegisterChatCommand('slap', function (idd)
    local _, targetPed = sampGetCharHandleBySampPlayerId(idd)
    positionX, positionY, positionZ = getCharCoordinates(targetPed)
    setCharCoordinates(targetPed, positionX, positionY, positionZ + 1000)
    sampSendChat("{F55555}The Nigger was trolled lmao")
end)
 while true do
 wait(0)
 -- infinite loop
 end
end

It still gives me the same error message idk why
 

James Hawk

Известный
919
217
So it becomes like that right?

Lua:
require "lib.moonloader"

function main()
if not isSampLoaded() or not isSampfuncsLoaded() then return end
while not isSampAvailable() do wait(100) end
sampAddChatMessage("{FFFFFF}Troll Hacks by TriggerNigger OFC - Use /slap")
sampRegisterChatCommand('slap', function (idd)
    local _, targetPed = sampGetCharHandleBySampPlayerId(idd)
    positionX, positionY, positionZ = getCharCoordinates(targetPed)
    setCharCoordinates(targetPed, positionX, positionY, positionZ + 1000)
    sampSendChat("{F55555}The Nigger was trolled lmao")
end)
while true do
wait(0)
-- infinite loop
end
end

It still gives me the same error message idk why
Did you reload the script?
 

James Hawk

Известный
919
217
So it becomes like that right?

Lua:
require "lib.moonloader"

function main()
if not isSampLoaded() or not isSampfuncsLoaded() then return end
while not isSampAvailable() do wait(100) end
sampAddChatMessage("{FFFFFF}Troll Hacks by TriggerNigger OFC - Use /slap")
sampRegisterChatCommand('slap', function (idd)
    local _, targetPed = sampGetCharHandleBySampPlayerId(idd)
    positionX, positionY, positionZ = getCharCoordinates(targetPed)
    setCharCoordinates(targetPed, positionX, positionY, positionZ + 1000)
    sampSendChat("{F55555}The Nigger was trolled lmao")
end)
while true do
wait(0)
-- infinite loop
end
end

It still gives me the same error message idk why
Wait a bit, I'll check that
 

James Hawk

Известный
919
217
Подскажите исходник антиафк, или как реализовать
Lua:
script_name('AntiAFK')

function main()
    while not isSampAvailable() do wait(100) end
    
    sampRegisterChatCommand("aafk", function()
        state = not state
        local memory = require "memory"
        if state then
            sampAddChatMessage(string.format("[%s]", thisScript().name), 0x00FF00) -- on
            memory.setuint8(7634870, 1, false)
            memory.setuint8(7635034, 1, false)
            memory.fill(7623723, 144, 8, false)
            memory.fill(5499528, 144, 6, false)
        else
            sampAddChatMessage(string.format("[%s]", thisScript().name), 0xFF4040) -- off
            memory.setuint8(7634870, 0, false)
            memory.setuint8(7635034, 0, false)
            memory.hex2bin('0F 84 7B 01 00 00', 7623723, 8)
            memory.hex2bin('50 51 FF 15 00 83 85 00', 5499528, 6)
        end
    end)
    wait(-1)
end
 

shrei9

Известный
17
0
С помощью чайлдов
imgui.BeginChild("##name", imgui.ImVec2(100, 50), true, imgui.WindowsFlags.NoScrollbar)
...
imgui.EndChild
100, 50 - размер чайлда

Это использование элемента имгуи в той же строке 🤦‍♂️
сделал всё, но только остальные элементы окна появляются ПОД чайлдом, как фиксить?