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

Oleg1337228

Участник
254
13
if text:find(%[Информация%] {.-}Транспорт снят с продажи, из%-за того что вы или транспорт покинули место!") then
Вот с этим кодом ошибка, и с теми что после скинул тоже.
moonloader.log: [14:10:38.329767] (system) Loading script 'C:\Games\GTA\Arizona Games Launcher\bin\arizona\moonloader\[Snyat s prod ts.lua'...
[14:10:38.329767] (debug) New script: 8403588C
[14:10:38.330767] (error) [Snyat s prod ts.lua: ...mes Launcher\bin\arizona\moonloader\[Snyat s prod ts.lua:58: unexpected symbol near '%'
[14:10:38.330767] (error) [Snyat s prod ts.lua: Script died due to an error. (8403588C)
 

Oleg1337228

Участник
254
13
Может кто фиксануть сообщения над головой? это для мута игроков
 

Вложения

  • pmute.lua
    2.8 KB · Просмотры: 2
  • Эм
Реакции: MrDorlik

хромиус)

спокойно, это всего лишь слива
Друг
4,960
3,231
Может кто фиксануть сообщения над головой? это для мута игроков
Друг,существует эта прекрасная тема
"Может","Дайте","Сделайте",- все это относится к вышестоящей теме.
Тут помогают с кодом,и для приличия хотя бы стоило сказать что не работает,и показать часть кода,где это прописано
 
  • Нравится
Реакции: MrDorlik

zewslamer

Новичок
14
0
Как сделать так чтобы сервак не убирал оружие из рук? Хочу реализовать через lib.samp.events
 

Kolson

Участник
7
0
Как встроить lua (например на gta sa mobile знаю что уже есть это для примера) можете подсказать или может быть есть у кого урок
 

zewslamer

Новичок
14
0
Lua:
local samp = require('samp.events')

function samp.onResetPlayerWeapons()
    return false
end
Увы, оно всё-равно убирается
Lua:
local sampev = require('samp.events.lua')
require("lib.moonloader")
function sampev.onResetPlayerWeapons()
    return false
end
function main()
    repeat wait(100) until isSampAvailable()
    while true do
        wait(0)
    end
end

другие(Допустим, onSendChat) работают :/
 

zewslamer

Новичок
14
0
Попробуй
Lua:
function sampev.onSetPlayerArmedWeapon(weaponId)
    if weaponId == 0 then return false end
end
К сожалению тоже нет :/
Попробовал так-же засунуть функцию в функцию
перепробовал почти все методы, но увы - всё так-же.
Через rmd отключал onSetPlayerArmedWeapon - Всё работало. Но, мне нужно это в отдельный скрипт..
 

Dmitriy Makarov

25.05.2021
Проверенный
2,481
1,113
Можно ли убрать ограничение на кол-во нажатых клавиш за раз?

К примеру, если скрипт будет каждую секунду нажимать цифру 2 и в это время я сам зажму клавишу W, то скрипт не будет нажимать цифру 2, пока я не отожму W.
Ограничение действует и с синхрой и с setVirtualKeyDown.
(setGameKeyState флудит хаотично, поэтому с ним не тестировал)
 

sssilvian

Активный
230
25
отменять урон - рпс отменяй просто, название не помню к сожалению
Lua:
require 'lib.moonloader'
addEventHandler('onWindowMessage', function(msg, key)
    if msg == 0x0100 then
        if key == VK_LBUTTON then
            consumeWindowMessage(true, true)
        end
    end
end)
Это не работает. Для других людей: мне нужен скрипт, который блокирует нажатие левой кнопки мыши.
 

sssilvian

Активный
230
25
Работает. Для чего ты хочешь заблокировать эту кнопку?
У меня есть мод агентства киллеров, который в настоящее время запрещает использование снайперской винтовки, когда цель находится на расстоянии менее 160 метров, вот почему. По крайней мере, для меня это не блокирует левую кнопку мыши.
 

painw

Известный
117
64
Как считать слова на месте (%w+), если их может быть как один, так и несколько
Lua:
if text:find('передал (%w+) за') then
    arg = text:match('передал (%w+) за')
    sampSendChat(arg)
end