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

S-Sirius

Известный
351
21
Код:
local menu_items = { 'Aiming', 'Shooting', 'Activation', 'Misc' }

imgui.BeginMenuBar()

         for k, v in ipairs(menu_items) do
            if imgui.MenuItem(v) then
               menu_item = v
            end
         end
        
imgui.EndMenuBar()
1599419018605.png

как синхронизировать сообщения скрипта в чате у игроков?
Скорее всего понадобится какой то внешний сервер чтобы отправить запросы там и получить всё обратно (допустим с помощью ВК API, одним ботом отправляешь запрос и другим ботом получаешь то что надо)
 

Вложения

  • 1599419091636.png
    1599419091636.png
    5.8 KB · Просмотры: 68

Rei

Известный
Друг
1,612
1,670
Посмотреть вложение 68046

Скорее всего понадобится какой то внешний сервер чтобы отправить запросы там и получить всё обратно (допустим с помощью ВК API, одним ботом отправляешь запрос и другим ботом получаешь то что надо)
imgui.WindowFlags.MenuBar
 

MrBidloKoder

Известный
423
249
это можно как-то на луа получить? Если да, то можно пример с выводом gpci в консоль.
 
Последнее редактирование:

samartinell1

Участник
98
14
Сделал себе заметки на имгуи, добавил возможность добавлять новые (в 1 файлике на новой строке пишет [NAME] и текст ниже считается за отдельную заметку), смог настроить так, чтобы у каждой заметки писался свой текст при открытии, но вот когда начинаю что-то изменять, всё остальное стирается. Как сделать так, чтобы заменялся только тот текст, что мне нужен? Пробовал через таблицу, получилось кривовато и к тому же он начал флудить в текстовике.

Вот как выглядит код для редактирования заметок (в bufferinotes хранится как раз таки уникальный текст каждой заметки)
Lua:
if imgui.InputTextMultiline('##1', bufferinotes, imgui.ImVec2(285, 470)) then
          tablenotes={}
          for line in io.lines(getWorkingDirectory()..'/notes.txt') do
            local file = io.open(getWorkingDirectory()..'/notes.txt', 'w')
            file:write('['..namenotetotext..']'..u8:decode(bufferinotes.v))
            file:close()
          end

      
        end
вот так выглядит структура файла заметок, если я непонятно объяснил выше
1599461530087.png


UPD: Сделал сам
 
Последнее редактирование:

S-Sirius

Известный
351
21
Привет всем. Можно как то делать так, чтобы если включен флаг imgui.AlwaysAutoResize то окно уменьшался до какого то заданного размера? То есть делать лимит минимального размера окна
 

kin4stat

mq-team · kin4@naebalovo.team
Всефорумный модератор
2,744
4,809
Привет всем. Можно как то делать так, чтобы если включен флаг imgui.AlwaysAutoResize то окно уменьшался до какого то заданного размера? То есть делать лимит минимального размера окна
Lua:
imgui.SetNextWindowSizeConstraints(ImVec2 min, ImVec2 max)
--imgui.SetNextWindowSizeConstraints(ImVec2(228,228), ImVec2(-1, -1))
--sets minimal size to 228, 228 and maximum unlimited
 
  • Нравится
Реакции: $Mr.R1ch$

MrBidloKoder

Известный
423
249
это можно как-то на луа получить? Если да, то можно пример с выводом gpci в консоль.
up
 

pheal

Участник
70
8
Как сделать, что бы по нажатию кнопки в ини кфг писалась цифра один и окно открывается, если цифра меньше 1, окно не работало
 

Tokynogiht

Новичок
23
0
Как нажать кнопку Y или N?
Пробовал так для Y, но ничего не получилось:
setGameKeyState(11, 255) (для Y)
setGameKeyState(10, 255) (для N)
 

Gruzin Gang

Всефорумный Грузин
823
608
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
  • Bug
Реакции: Fott