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

AlexLightovich

Новичок
13
0
Как сделать Чекер на ЧС, с темы форума? Точнее как брать текст из темы на форуме и уже им распроряжаться в программе?
 

Petr_Sergeevich

Известный
Проверенный
707
298
Как сделать Чекер на ЧС, с темы форума? Точнее как брать текст из темы на форуме и уже им распроряжаться в программе?

Lua:
https = require 'ssl.https'

response = https.request("https://google.com")
print(response)

Результат парсишь
 
Последнее редактирование:
  • Нравится
Реакции: AlexLightovich

Patrickkk

Участник
162
19
Стала интересна тема работы с VK API, но вот сейчас возник вопрос. Как можно реализовать такое, например человек пишет боту в вк какой-то текст, мне нужно чтобы этот текст приходил мне в .lua скрипт и я дальше мог взаимодействовать с ним в игре?
 

imring

Ride the Lightning
Всефорумный модератор
2,366
2,556
Стала интересна тема работы с VK API, но вот сейчас возник вопрос. Как можно реализовать такое, например человек пишет боту в вк какой-то текст, мне нужно чтобы этот текст приходил мне в .lua скрипт и я дальше мог взаимодействовать с ним в игре?
gleb-kosteiko/lvk(https://github.com/gleb-kosteiko/lvk)
 
  • Нравится
Реакции: Patrickkk

ufdhbi

Известный
Проверенный
1,463
867
Поддерживают ли таблицы большие числа? 20 знаков например
 

xISRAPILx

Перепишу свою жизнь на PHP
Проверенный
247
165
Поддерживают ли таблицы большие числа? 20 знаков например
Скорее да, чем нет.
upload_2018-8-29_10-17-53.png
 

asocial demon

Потрачен
175
14
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Отыгрывает только дигл, и кулак. Как сделать чтобы всё отыгрывалось?
Lua:
require 'lib.moonloader'
require 'lib.game.weapons'

function main()
   if not isSampfuncsLoaded() or not isSampLoaded() then return end
   while not isSampAvailable() do wait(100) end
   while true do
       wait(1)
       if isCurrentCharWeapon(PLAYER_PED, 24) then
           sampSendChat('/me достал пистолет марки "Desert Eagle" из кобуры на поясе')
                     while isCurrentCharWeapon(PLAYER_PED, 24) do wait(1000) end
       if isCurrentCharWeapon(PLAYER_PED, 0) then  
           sampSendChat('/me убрал пистолет "Desert Eagle" обратно в кобуру')
                     while isCurrentCharWeapon(PLAYER_PED, 0) do wait(1000) end
       if isCurrentCharWeapon(PLAYER_PED, 31) then
           sampSendChat('/me снял карабин M4A1 со спины')
                     while isCurrentCharWeapon(PLAYER_PED, 31) do wait(1000) end
       if isCurrentCharWeapon(PLAYER_PED, 0) then  
           sampSendChat('/me повесил карабин M4A1 на спину')
                     while isCurrentCharWeapon(PLAYER_PED, 0) do wait(1000) end
       if isCurrentCharWeapon(PLAYER_PED, 23) then
           sampSendChat('/me достал электрошокер марки "Tazer X-26" из кобуры на поясе')
                     while isCurrentCharWeapon(PLAYER_PED, 23) do wait(1000) end
       if isCurrentCharWeapon(PLAYER_PED, 0) then  
           sampSendChat('/me убрал электрошокер "Tazer X-26" обратно в кобуру')
                     while isCurrentCharWeapon(PLAYER_PED, 0) do wait(1000) end                    
       end
   end
end
end
end
end
end
end
 
Последнее редактирование: