Всем привет, возможно у Вас появлялись мысли о том, как можно запускать Lua скрипты не используя SA:MP и в частности Moonloader.
Так вот, эта статья именно для Вас.
Так вот, эта статья именно для Вас.
Все ниже перечисленное я тестировал на Windows 10, поэтому я не гарантирую, что все ниже написанное будет работать на других ОС.
Первое, что нам нужно сделать, так это скачать LuaJIT компилятор.
Теперь мы можем запускать файлы с помощью файла "путь-до-папки-которую-скачали\luajit-compiler\luajit.luajit.exe".
Теперь напишем небольшой скрипт, который будет например выводить сообщения в консоль.
Lua:
print("I'm gay (I write in LUA). Don't hit, a joke, like haha, rzhaka.")
Код:
путь-до-нашей-папки-с-LuaJIT\luajit\luajit.exe путь-до-нашего-скрипта\скрипт.lua"
(например: D:\DEV\lua\luajit-compiler\luajit\luajit.exe "D:\DEV\lua\scripts\script.lua")
Берет она его из таблиц package.path (если библиотека .lua) и package.cpath (если библиотека .dll), встроенных в LuaJIT.
По стандарту package.path равна
Lua:
;.\?.lua;\luajit-compiler\luajit\lua\?.lua;\luajit-compiler\luajit\lua\?\init.lua;;C:\Program Files (x86)\Lua\5.1\lua\?.luac
\luajit-compiler\luajit\lua
А вот package.сpath равна
Lua:
.\?.dll;D:\luajit-compiler\luajit\?.dll;\luajit-compiler\luajit\loadall.dll
\luajit-compiler\luajit
Для того, чтобы добавить или изменить этот путь, нам необходимо перед подключением библиотек добавить вот такую строчку
Lua:
package.cpath = ("%s;D:/DEV/lua/luajit-compiler/luajit/lua/?.dll"):format(package.cpath) -- если хотим добавить к остальным путям еще один
package.cpath = "/DEV/lua/luajit-compiler/luajit/lua/?.dll" -- если хотим полностью переписать все пути на один единственный
Lua:
--========================================================LIBS========================================================
package.cpath = ("%s;D:/DEV/lua/luajit-compiler/luajit/lua/?.dll"):format(package.cpath)
local effil = require("effil")
local encoding = require("encoding")
--========================================================VARIABLES========================================================
encoding.default = "CP1251"
local u8 = encoding.UTF8
local telegram = {
token = "хер вам, а не мой токен"
chatId = "хер вам, а не мой chatID"
}
--========================================================TELEGRAM========================================================
function threadHandle(runner, url, args, resolve, reject)
local t = runner(url, args)
local r = t:get(0)
while not r do
r = t:get(0)
end
local status = t:status()
if status == "completed" then
local ok, result = r[1], r[2]
if ok then resolve(result) else reject(result) end
elseif err then
reject(err)
elseif status == "canceled" then
reject(status)
end
t:cancel(0)
end
function requestRunner()
return effil.thread(function(u, a)
local https = require "ssl.https"
local ok, result = pcall(https.request, u, a)
return {ok, result}
end)
end
function async_http_request(url, args, resolve, reject)
local runner = requestRunner()
if not reject then reject = function() end end
threadHandle(runner, url, args, resolve, reject)
end
function encodeUrl(str)
str = str:gsub(" ", "%+")
str = str:gsub("\n", "%%0A")
return u8:encode(str, "CP1251")
end
--================================================================================================================
function telegram:sendMessage(msg)
msg = tostring(msg)
msg = msg:gsub("{......}", "")
msg = encodeUrl(msg)
async_http_request(("https://api.telegram.org/bot%s/sendMessage?chat_id=%s&text=%s"):format(telegram.token, telegram.chatId, msg), "", function(result) end)
end
telegram:sendMessage("Скрипт успешно запустился!")
print("send!")
Для тех, кто еще не понял, запуская код вне SA:MP, мы не можем использовать функционал Moonloader и SAMPFUNCS и других библиотек и плагинов для SAMP. К этому списку также относятся такие штуки, как потоки и функция задержки
wait(time)
но что делать, если нам лень писать каждый раз команду в cmd, чтобы запустить код и мы счастливые (или нет) пользователи Visual Studio Code?
Для этого существует специальное расширение "Code Runner", который может за нас вписывать нужную команду.
Для его установки открываем Visual Studio Code, далее нажимаем комбинацию клавиш CTRL+SHIFT+X или же на панельке (по умолчанию слева) выбираем пункт "Расширения". В поиске находим расширение "Code Runner".
Далее ставим галочки у "Clear Previous", "Run In Terminal", "Save File Before Run". Как мы видим, в верхней панельке, рядом с открытыми файлами появился значок запуска скрипта (скрипт можно также запустить комбинацией клавиш CTRL+ALT+N).
Думаю на этом можно заканчить...