Язык программирования lua используется во многих играх, в том числе: GTA SA, Garry's mod и до.
Мы уже давно знаем что скрипты состоят из функций, а функции представляют из себя взаимосвязь величин, содержащих локальные, глобальные переменные, действия и условия.
Функция - взаимосвязь между величинами, имеющее действие над переменной.
: Первым шагом в изучении Lua-скриптинга должен быть выбор Lua-редактора. Это намного упрощает скриптинг. Я рекомендую Notepad++ или LuaEdit. Также имеется неофициальный MTA Script Editor (на стадии разработки), который вы можете испытать. Но лично использую Sublime text, так как он удобный.
Попробуем составить простейший код, потому что лучше всего в изучении языка программирования - это практика.
Давайте сделаем так, чтобы при вводе команды /givem (player) (amount) игроку player выдаётся amount денег на счёт.
Создаём файл server.lua либо s.lua
function givem (thePlayer, _, player, amount)
Givem - название функции, thePlayer - игрок, который вызывает функцию.
После аргумента идёт _ или command - это сама команда, обязательно для работы скрипта это должно быть после вызывающего. Следующие два аргумента это то, что должен ввести игрок.
If not player or amount then return end
Создаём условие if (если отсутствует игрок или количество в команде то выход) Следовательно, если какой-либо аргумент отсутствует, то функция на этом заканчивается.
else
givePlayerMoney (player, tonumber(amount))
outPutChatBox("Вы перечислили "..amount.." игроку " ..getPlayerName(player), thePlayer, 255,216,200,true)
end
end
else - иначе, тоесть, если имеется аргумент и сумма.
givePlayerMoney - серверная функция , которая вызывается для выдачи player, tonumber(amount) денег. Для того чтобы никаких проблем не было, мы извлекаем из amount именно количество, для правильной работы функции.
Далее выводим в чат сообщение, что передали денег игроку. Вставлять переменную среди текста нельзя, поэтому нам нужно сделать отступление, закрыв кавычки. После этого пишем "..getPlayerName(player).."
getPlayerName - функция, которая извлекает имя игрока, которому передаём деньги. Потому что player берет самого игрока, а не только его имя.
Если нам требуется продолжить текст, то после окончания функции мы снова ставим .. и открываем кавычки. Извлекая последнюю переменную amount мы уже не ставим .. в конце, так как текста далее нет. thePlayer после запятой говорит о том, что текст будет виден только тому, кто вызвал команду. Если сообщение должно быть видно всем то пишем root
Три аргумента далее - RGB цвет текста. True - значение boolean (true или false) сообщает можно ли изменять цвет текста внутри самого текста.
Ну а под конец завершаем функцию end end. Это нужно обязательно, чтобы скрипт правильно работал, иначе он может не запуститься!
В самом конце добавляем обработчик команд
addCommandHandler("givem", givem)
В кавычках название команды, далее идёт название функции.
Мы не ставим в названии команды слеш ( / ), так как он изначально требуется по стандарту.
Соберём то что у нас получилось.
function givem (thePlayer, _, player, amount)
If not player or amount then return end
else
givePlayerMoney (player, tonumber(amount))
outPutChatBox("Вы перечислили "..amount.." игроку " ..getPlayerName(player), thePlayer, 255,216,200,true)
end
end
addCommandHandler("givem", givem)
Для того чтобы найти нужную мне функцию, (getElementData, setPlayerHealth, getPedOccuppied и т.п.) я использую сайт https://wiki.multitheftauto.com
Он отлично поможет вам в любой ситуации!
Ну вот, наш скрипт готов. Осталось добавить meta.xml файл, о котором мы поговорим в следующем гайде.
Начинающим скриптерам я хочу дать три совета.
1. Постоянно развивайтесь, читайте разные советы, и очень много практикуйте.
2. После условия делайте отступ, чтобы после понимать, где нужно поставить else, end и т.п
3. local переменные работают в пределах функции (одной). Чтобы эту переменную вытащить в другой функции, в ее матери(изначальной функции) нужно прописать setElementData(...,"...",...), А в другой функции getElementData. Но подробнее о них мы узнаем чуть позже.
Надеюсь Вам понравилось и я ясно доложил всю информацию. Делитесь в комментариях своими наработками кода, указывайте мои ошибки.
Если же вы довольно гайдом, то поставьте лайк и подпишитесь на меня пожалуйста) Так я пойму что следует делать продолжение!