Здравствуйте. В этом уроке мы познакомимся с таким программированием, как Lua. Данный учебник будет написан на простом и понятном языке, чтобы не усложнять жизнь начинающим скриптерам. В введении в курс Lua я буду сравнивать аналогичные функции с SA-MP Pawn.
Введение в
скриптинг MTA Lua
Содержание: 1) Client’n’Server Sides (2 стороны сервера – C-Сторона и S-Сторона) – Введение 2) Иерархическое строение сервера (meta.xml) 3) Администрирование (ACL) 4) Аргументы игрока (source, thePlayer, getLocalPlayer()) 5) Вывод (Окончание учебника) 6) Дополнительный материал
Введение Наша статья прямо связана с сетевой игрой для GTA San Andreas – Multi Theft Auto. Начну с того, что в MTA Lua вам предоставлены 2 стороны – Server (связана с функциями и действиями в основном с игроками и игровым миром) и Client (связана с функциями и действиями, не связанными с игроком). На S-Стороне пишут в основном системы, которые непосредственно связаны с игроком, например система команд. На C-Стороне пишут диалоговые окна (GUI), изображения на экран (dxDraw). Про dxDraw могу сказать то, что он немного похож на TextDraw из SA-MP, но имеет функцию загрузки любого выбранного вами изображения (на примере рабочего стола в моей системе Lunix OS).
Иерархическое строение сервера (meta.xml) Сервер МТА имеет иерархическое строение, а именно один каталог принадлежит другому, а тот в свою очередь принадлежит третьему. Главным каталогом является папка или архив с названием ресурса (не имеет значения, как её назвать) в папке /MTA San Andreas Ver/server/mods/deathmatch/resources/ в котором в свою очередь обязательно должен находится файл meta.xml, где хранятся данные о ресурсе (тип, название ресурса, автор, версия, дочерние файлы (изображения, модели, текстуры, lua файлы ресурса, и другое)). В МТА присутствует функция отделения карты/ресурса от главного запущенного (им является ресурс с пометкой «Gamemode» в файле meta.xml), следовательно, можно выгружать и загружать ресурс или карту прямо на сервер, не перезагружая при этом сервер. Так-же тут присутствует возможность использовать функции из других ресурсов, например есть 2 ресурса – «admin» (система администрирования) и «TvoyRes». Вашим ресурсом является «TvoyRes». Вы можете прямо использовать функции из ресурса «admin», ничего не подгружая (кроме директории ресурса в meta.xml)
Администрирование (ACL) Поговорим об администрировании сервера MTA. В МТА администратор ресурса зовётся resourceRoot (некоторая связь с администрированием систем Linux). Главными resourceRoot’ами являются командная строка запуска сервера, и игровая консоль (вызывающаяся на символ «~» при английской раскладке, или клавишей F8). Игровая консоль от командной строки сервера отличаются тем, что в консоли можно вводить команды ресурсов (в командной строке нельзя), и входить в режим resourceRoot в консоли не нужно. Давайте сравним типы администрирования Rcon (SA-MP) и resourceRoot, или просто Root (MTA): - В SA-MP Rcon может войти любой игрок, зная определённый единственный пароль для входа. - В МТА Root могут войти только зарегистрированные на сервере пользователи, имеющие привилегии, указанные в специальном файле. Это показывает то, что в МТА по стандартным установкам сервера последних версий уже имеется система аккаунтов, нежели в SA-MP, которую, если нужно, можно написать. В МТА так же имеется система уровней администрирования: - Everyone (Default) – зарегистрированные аккаунты, они сюда после регистрации не попадают, их нужно записывать самому. - Moderator – модератор, с ограниченным набором команд. - SuperModerator – модератор, имеющий больше привилегий. - Admin – администратор, который имеет доступные привилегии модератора и супер-модератора с добавлением некоторых полномочий. - RPC – связан с доступом в интернет, имеет только функцию callRemote, которая связана с загрузкой деталей из интернета. - MapEditor – имеющий доступ к редактированию карты (если загружен скрипт редактирования (с сервера, не имеющий отношения к Map Editor в меню игры)) - raceACLGroup – многие знают, что МТА с начала существования начинала с серверов, связанных с гонками (нежели SA-MP был полон DM серверов), эта группа связана с администрированием Race ресурсов (думаю данная группа не важна). - Console – resourceRoot всего сервера, имеющий все полномочия вместе взятых групп. По сравнению с SA-MP, в МТА в сервер встроены команды для администраторов. Использование функций ACL (администрирования) в скриптинге выглядит не так просто, потому что для того, чтобы найти администратора на сервере через скрипт, нужно ввести поиск полномочий пользователя. Например, функция поиска объекта, имеющего доступ к чему-либо (только S-Сторона):
hasObjectPermissionTo
(object, what_is_to, bool)
И функция поиска объекта в ACL группах (поиск по группам администрирования) (только S-Сторона):
isObjectInACLGroup
(object, acl_group)
Рассмотрим эти функции на примере:
if hasObjectPermissionTo
(source,
“function.addBan”
, true
) then
ВАШ КОД end
Эта функция проверит, доступна ли у игрока source доступ к функции addBan (доступен администраторам и выше)
if isObjectInACLGroup
(
“user.”..
getPlayerName
(source), aclGetGroup
(
“Admin”))
then ВАШ
КОД
end
Данный код найдёт пользователя в группе Admins. Так как в файле администраторов игрок прописывается через user.name, то и поиск его тоже надо сделать через user. Функция getPlayerName покажет имя игрока, и, следовательно, исходный запрос будет выглядеть как user.name. Функция aclGetGroup ищет по группе администрирования, указанной в аргументе. Важно вводить группу такой, какая она есть (Admin, SuperModerator, Console, MapEditor), соблюдая регистр. Это конечно выглядит и понимается сложней, чем то же самое в SA-MP:
if IsPlayerAdmin
(playerid){ КОД }
return 1;
Аргументы игрока (source, thePlayer, getLocalPlayer()) Раз дело пошло о аргументе Source, расскажу о нём. В МТА есть несколько аргументов на поиск игрока. Самым основным является source – он доступен для обеих сторон (S- и C- сторон), и определяет любого «раздражителя» (например, если объект выполняет действие с source, то в выполнении source’ом является именно этот объект, но не какой-либо левый игрок). Так же присутствует аргумент thePlayer, определяющий игрока, работает в S-Стороне. Ещё присутствует функция getLocalPlayer(), определяющая игрока в пределах C-Стороны.
Вывод (Окончание учебника) На этом я заканчиваю данный урок. В заключении я добавлю, что МТА Lua является упрощённым языком, и пишется проще, чем SA-MP Pawn, но данный язык усложнён своими функциями, но именно они упрощают вид языка.
Дополнительный материал Для тех кто думает переходить с Pawn в Lua (я всеми руками за) я могу предложить переменную, которая оставит вам привычный playerid. Для S-Стороны:
playerid = source
Для C-Стороны:
playerid =
getLocalPlayer
()
Данный код можно писать в начале ресурса Как редактор ресурсов, советую вам использовать MTA Script Editor.