Мета даного уроку - дати введення в систему скриптів використовувану в Dota 2, і трохи рад і прийомів в їх розробці. Передбачається що ви знайомі з базовими поняттями ООП і Lua. Так само бажано використовувати Notepad ++ або Sublime Text
Ми будемо працювати в папці ваш_аддон / scripts / vscripts. Коли ваш аддон завантажений движком Dota 2 виконуються два файли addon_init.lua і після цього addon_game_mode.lua. Згідно з правилами ці файли не ваші головні файли, а просто файли, які необхідні. Будемо вважати що ми маємо об'єкти нашого проекту в addon_main.lua - це і є головний файл.
addon_init.lua
Цей файл виконується першим і як правило глобальні функції викликаються в ньому. Припустимо ми маємо два додаткових файлу в нашому аддоне: addon_main.lua (який містить опису об'єктів в вашому аддоні) і util.lua (що містить деякі утиліти - маленькі корисні функції).
У вашому випадку ваш addon_init.lua буде виглядати приблизно так:
addon_game_mode.lua
Цей файл виконується після addon_init.lua і відповідає за ініціалізацію аддона. Ось так виглядає приклад:
Ядро вашого доповнення
Давайте поглянемо на addon_main.lua - це ядро вашого мода. Якщо ми залишимо головний код, то побачимо це:
розширене ядро
Додамо деякі базові функції за допомогою подій (Events) і команди, які можуть бути викликані з призначеного для користувача інтерфейсу.
Події будуються в ігровому движку і можуть бути викликані, коли в грі сталося щось. Є багато подій, наприклад такі як dota_roshan_kill. dota_courier_lost і dota_player_gained_level. Більшість подій мають деякі додаткові атрибути, наприклад в подію dota_player_gained_level є PlayerID і рівень. Ви також можете налаштувати свої власні події в scripts / custom_events.txt.
Так як же використовувати ці події? Є два основних компоненти для використання скриптів в вашому моді - listener (слухач) і handler (обробник).
Listener задає подія і як тільки це відбувається, відразу ж виконується функція, задана у властивостях Listener. Ви можете задати слухача всюди, але як правило, це робиться в функції ініціалізації. Шматочок налаштувань слухача:
приклад:
Припустимо, ми хочемо дати 1000 голди героям, які досягають 6 рівня. Додамо нашого Слухача в InitGameMode () наступним чином:
Тепер ми додаємо обробник для цієї події в якості нової функції в нашому CustomGameMode об'єкті, в даному прикладі це виглядає так:
Команди схожі на події - вони також спричиняються для виконання певних функцій. Різниця в тому, що ігровий движок не викликає ніяких команд, тільки ви можете викликати їх. Це кращий спосіб для взаємодії вашого призначеного для користувача інтерфейсу (Flash UI) і Lua скриптів.
Ми реєструємо приблизно таку команду
Тепер, коли сервер отримає Command1 X в своїй консолі, наша функція Оброблювач викликається з параметром X (параметр є рядком - string).
Припустимо у нас є кнопка в нашому UI, яка дозволяє гравцеві отримати очки здатності. З нашого UI ми викликаємо команду GiveAbilityPoints з показником того, скільки очок ми хочемо дати. Наприклад виклик команди може виглядати наступним чином: "GiveAbilityPoints 3", що дає 3 очка. Реєструємо це приблизно так:
Звичайно, ми повинні також додати обробник:
Поради та підказки
Друкуємо таблицю в консоль
Ви не можете побачити всі значення в таблиці. Ви можете вивести її в консоль за допомогою цієї функції. Просто викличте PrintTable (table).
Отримання предмета з інвентарю
Деякі функції вимагають предмети в якості вхідних даних, але ви не можете отримати імена предметів з інвентарю гравця. Якщо вам потрібно зробити це, використовуйте цей приклад: