Содержание
Вступление
Установка
Пример настройки редактора
Немного примеров кода на MoonScript
Полезные ссылки
Заключение
Вступление
MoonScript - это динамический язык сценариев, который компилируется в Lua . Это дает вам мощь одного из самых быстрых скриптовых языков в сочетании с богатым набором функций. MoonScript может быть скомпилирован в Lua и запущен позднее, поскольку он компилируется прямо в код Lua, он полностью совместим с альтернативными реализациями Lua, такими как LuaJIT , а также со всем существующим кодом Lua и библиотеками. MoonScript обеспечивает чистый синтаксис, используя отступы, что позволяет избежать шума ключевых слов (do, then, end и т.д., которые как правило, вы видели в скрипте Lua). Ниже приведен пример некоторых конструкций, найденных в языке.
Важно знать: MoonScript - это чувствительный к пробелам язык. Это означает, что вместо использования do и end(или { и }) для разделения разделов кода мы используем разрывы строк и отступы.
Установка
Установка очень проста, переместить содержимое архива в корневую директорию игры, требования: установленный moonloader
В самой библиотеке moonscript используется библиотека Lpeg, она уже включена в архив
Также в архиве
Пример настройки редактора
Я использую VS-Code, поэтому информация по настройке будет именно по этому редактору
Тут тоже ничего сложного, переходим во вкладку расширения и устанавливаем: "vgalaktionov.moonscript"
Вот оно:
Примеры кода на MoonScript
Начнем с простого, узнаем как выглядит костяк скрипта, дополнительных комментариев, кроме тех, что в коде, думаю не нужно
Подсветка синтаксиса используется Lua, т.к. на ВН пока что не завезли мунскрипт, хотя в дискорде есть
Перейдем к имгуи, пример создания окна с текстом "текст", показать/скрыть окно на F2
Следующий пример по интереснее, тут уже немного раскрыты возможности мунскрипта в плане ООП, интерполяции строк (строка #34), табличные литералы:
Все эти примеры вы так же найдете в архиве (moonloader/moonscript/)
Полезные ссылки
Официальный сайт MoonScipt
Руководство по языку Moonscript (На английском, я через гугл переводчик все понял)
Онлайн компилятор Moonscript -> Lua
Репозиторий на github
Заключение
Не забываем про отступы, примеры в архиве полностью рабочие, возникнут вопросы - задаем их в теме
В лоадере мунскриптов имеется встроенная автоматическая перезагрузка при изменении .moon файлов
Лоадер работает по принципу:
Компиляция moonscript -> lua
Сохранение полученного кода в файл
Загрузка lua скрипта в игру
По поводу модулей:
Модули можно писать на мунскрипте, и использовать их в луа, просто "require("my module")"
Вроде ничего не забыл, предложения по улучшению кода лоадера принимаются
Вступление
Установка
Пример настройки редактора
Немного примеров кода на MoonScript
Полезные ссылки
Заключение
Вступление
MoonScript - это динамический язык сценариев, который компилируется в Lua . Это дает вам мощь одного из самых быстрых скриптовых языков в сочетании с богатым набором функций. MoonScript может быть скомпилирован в Lua и запущен позднее, поскольку он компилируется прямо в код Lua, он полностью совместим с альтернативными реализациями Lua, такими как LuaJIT , а также со всем существующим кодом Lua и библиотеками. MoonScript обеспечивает чистый синтаксис, используя отступы, что позволяет избежать шума ключевых слов (do, then, end и т.д., которые как правило, вы видели в скрипте Lua). Ниже приведен пример некоторых конструкций, найденных в языке.
Важно знать: MoonScript - это чувствительный к пробелам язык. Это означает, что вместо использования do и end(или { и }) для разделения разделов кода мы используем разрывы строк и отступы.
Установка
Установка очень проста, переместить содержимое архива в корневую директорию игры, требования: установленный moonloader
В самой библиотеке moonscript используется библиотека Lpeg, она уже включена в архив
Также в архиве
Пример настройки редактора
Я использую VS-Code, поэтому информация по настройке будет именно по этому редактору
Тут тоже ничего сложного, переходим во вкладку расширения и устанавливаем: "vgalaktionov.moonscript"
Вот оно:
Примеры кода на MoonScript
Начнем с простого, узнаем как выглядит костяк скрипта, дополнительных комментариев, кроме тех, что в коде, думаю не нужно
Подсветка синтаксиса используется Lua, т.к. на ВН пока что не завезли мунскрипт, хотя в дискорде есть
Moonscript:
export main = -> -- функция мэйн, должно быть обязательно "export main", иначе функция будет local, а надо ее глобальную, чтобы мунлоадер увидел
if not isSampfuncsLoaded() or not isSampLoaded() then return
while not isSampAvailable() do wait 100
-- тут регистрируем команды и тд, всё как в луа
while true
wait(0)
-- бесконечный цикл в мэйн
Перейдем к имгуи, пример создания окна с текстом "текст", показать/скрыть окно на F2
Moonscript:
imgui = require 'imgui'
encoding = require 'encoding'
encoding.default = 'CP1251'
u8 = encoding.UTF8
wEnable = imgui.ImBool false -- булевая переменная отвечает за показ окна, можно "wEnable = imgui.ImBool(false)"
imgui.OnDrawFrame = ->
imgui.Begin(thisScript().name, wEnable)
imgui.Text(u8'Текст')
imgui.End()
export main = ->
if not isSampfuncsLoaded() or not isSampLoaded() then return
while not isSampAvailable() do wait 100
while true do
wait(0)
imgui.Process = wEnable.v
if isKeyJustPressed(0x71) -- F2
wEnable.v = not wEnable.v
Следующий пример по интереснее, тут уже немного раскрыты возможности мунскрипта в плане ООП, интерполяции строк (строка #34), табличные литералы:
Moonscript:
sampEvents = require 'samp.events'
class Log
new: (path) =>
@obj =
path: path
unless doesFileExist(@obj.path)
f = io.open(@obj.path, 'w+')
f\close!
write: (text) =>
f = io.open @obj.path, 'a'
if f != nil
f\write text
f\close!
remove: => os.remove @obj.path
class LogEx extends Log -- наследуемся от класса Log
clear: => -- добавляем метод clear
f = io.open @data.path, 'w+'
f\close!
print: => -- аналогично добавляем print для вывода лога
for line in io.lines @data.path
print line
export main = ->
if not isSampfuncsLoaded() or not isSampLoaded() then return
while not isSampAvailable() do wait 100
export chatlog = LogEx "moonloader\\chat.log" -- создаем глобальную переменную chatlog, туда будем писать наш чат
wait -1
sampEvents.onServerMessage = (color, message) ->
chatlog\write "[color: #{color}] #{message}\n"
-- пишем в лог строку, используем интерполяцию строк доступную нам в мунскрипт, анлог в луа: string.format('[color: %s] %s', color, message)
onScriptTerminate = (script, quitGame) ->
if script == thisScript!
chatlog\remove! -- удаляем наш чат лог при выгрузке скрипта
Все эти примеры вы так же найдете в архиве (moonloader/moonscript/)
Полезные ссылки
Официальный сайт MoonScipt
Руководство по языку Moonscript (На английском, я через гугл переводчик все понял)
Онлайн компилятор Moonscript -> Lua
Репозиторий на github
Заключение
Не забываем про отступы, примеры в архиве полностью рабочие, возникнут вопросы - задаем их в теме
В лоадере мунскриптов имеется встроенная автоматическая перезагрузка при изменении .moon файлов
Лоадер работает по принципу:
Компиляция moonscript -> lua
Сохранение полученного кода в файл
Загрузка lua скрипта в игру
По поводу модулей:
Модули можно писать на мунскрипте, и использовать их в луа, просто "require("my module")"
Вроде ничего не забыл, предложения по улучшению кода лоадера принимаются
Вложения
Последнее редактирование: