Введення в скриптинг MTA Lua

Здравствуйте. У цьому уроці ми ознайомимося з таким програмуванням, як 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-Сторони:
Для C-Сторони:
playerid = getLocalPlayer()
Даний код можна писати на початку ресурсу
Як редактор ресурсів, раджу вам використовувати MTA Script Editor.