вступ
Цей підручник навчить вас, як використовувати Lua. Він написаний для людей, які не встречілалісь раніше з програмуванням зовсім, і тому в ньому не будуть використані складні слова, які є в інших підручниках. Краще буде, якщо ви вже будете знати як працювати з ini-кодом, перш ніж приступите до вивчення програмування.
1.0 - Початок
-> 1.1 Створення Lua файлу
-> 1.2 Прикріплення скрипта до об'єкту
3.0 - Lua stuff
-> 3.1 Етапи скрипта
-> 3.2 Функції
-> 3.3 Покажчики
4.0 - Функції і властивості в Вікі
5.0 - Приклад скрипта
-> 5.1 Міна
----- 1.0 - Початок -----
________________________
Lua дозволяє об'єктам робити те, що вони зазвичай не були б в змозі зробити або створити особливі ефекти.
- 1.1 Створення Lua файлу-
Принцип роботи скриптів Lua полягає в тому, що скрипти приєднані до об'єктів, створеним за допомогою ini. Щоб зробити файл Lua в простому блокноті в Windows, просто створіть новий текстовий файл, перейдіті в меню "Файл", "Зберегти Як.", Змініть "Тип файлу:" на "Усі файли". і змініть ".txt" в імені файлу на ".lua". Якщо немає ніякого розширення, просто додайте ".lua" в кінці імені файлу. Потім натисніть "Зберегти". Ви створили файл Lua.
Порада від перекладача: Використовуйте Notepad ++ замість стандартного блокнота, так як в ньому показується весь синтаксис Lua, і взагалі в ньому легше працювати.
- 1.2 Приєднання скрипта до об'єкта -
Щоб прикріпити Lua скрипт до об'єкта, створеного в ini файлі, просто помістіть "ScriptPath = <путь к файлу Lua>"В блоці коду об'єкта з відповідним табулювання.
----- 2.0 - Основи програмування Lua -----
________________________
Типи даних - типи даних, які використовуються для змінних і властивостей. В CC є 5 основних типів даних: числа, текст, boolean (логічна змінна), вектор, і нуль (nil). Перші 2 - зрозуміло з назви то це. boolean - логічна змінна, тобто її значення це істина (true) або брехня (false). Вектор в CC - координати (X, Y). Числові дані використовуються, друкуючи тільки числа. Текст використовується при наявності пари лапок ( "") з текстом між ними. Вектор використовується, слідуючи за словом "Vector" 2 числами розділеними коми в двох круглих дужках. Нуль - позначається як "nil" (щоб не бути переплутаним з числом нуль).
--логічна змінна
true
false
--вектори
Vector (1,1)
Vector (5,2)
Vector (-7,6)
--Нуль (ніщо)
nil
Змінні - це те в Lua, чому Ви можете дати значення. Вони використовуються для того, щоб зберігати інформацію, щоб Ви могли знову викликати це пізніше. Мінлива складається з свого імені, одного знака "=", і значення.
Щоб змінити змінну, просто надрукуйте ту ж саму змінну знову з новим значенням:
Ви можете також змусити змінну мати те ж саме значення що і інша змінна, встановлюючи її значення як ім'я іншої змінної:
В результаті X дорівнюватиме 5.
Є 2 типу змінних: глобальна змінна і локальна. Глобальні змінні можуть бути змінені скриптом будь-якого об'єкта, знову змінюють значення, і тільки одна змінна з таким ім'ям може існувати. Глобальні змінні схожі на ті вище в прикладах.
Локальні змінні - змінні, у яких можуть бути множинні копії, кожна з них прив'язана до об'єкта зі скриптом, який створив їх. Щоб створити локальну змінну, надрукуйте "local" перед ім'ям змінної, розділивши їх пропуском. Установка значення локальної змінної рівного значенню іншої локальної змінної працює подібним способом як і у глобальних змінних.
local varA = 5
local varB = varA
Ця дія зробило змінну "varB" рівний 5. Зауважте, що слово "local" не використовувалося, коли ми вибирали змінну "varA".
Інша корисна властивість змінних - те, що Ви можете використовувати змінні, щоб встановити певну властивість в об'єкт, і зберігати об'єкт в змінної. Зберігаючи об'єкт у змінній, з ним легше взаємодіяти і легше викликати покажчиком. Щоб використовувати змінні, для зміни властивості об'єкта, Ви потребуєте змінної, яка є певним дороговказом на об'єкт (ми розберемо це пізніше), що супроводжується точкою, назвою властивості, знаком "=", і значенням.
"Thing" це покажчик на об'єкт, "GetsHitByMOs" це властивість об'єкта в ini, і "false" це значення.
Зазвичай використовують покажчик, який вже визначений як "self". Покажчик завжди звертається до об'єкта, до якого приєднаний скрипт.
Принцип роботи Lua (і програмування взагалі), це перевірка операторів, щоб побачити, чи є їх значення істинним (true) і робить що-небудь якщо це так (або якщо не так). Давайте подивимося на код нижче.
if X == 1 then
<содержимое>
end
Цей код перевіряє, якщо змінна "X" дорівнює "1", то робить "вміст" ( "<содержимое>"Не фактичне дію, тільки покажчик місця заповнення для інших команд, до яких ми доберемося пізніше), якщо оператор буде істиною. Зверніть увагу на" end "внизу блоку коду, який говорить, що"<содержимое>", Частина цього оператора, закінчено. Якщо Ви не надрукуєте" end "після оператора (кінець оператора після <содержимого> теж), то Ви отримаєте помилку. Також зауважте, що є 2 знака "=" в "рядку" if "." == "потрібно для того, щоб перевірити рівність, і" = "для того, щоб встановити значення змінної / властивості. Символи умов:
-- менше або дорівнює
<=
-- більше або дорівнює
> =
Усередині операторів "if", можуть знаходиться оператори "else". Ці оператори перевіряють, чи виконується умова оператора "if", і якщо воно не істинне (не виконується), то
тоді відбуваються дії в їх вмісті.
if X == 1 then
<содержимое>
else
<содержимое>
end
Умова "Elseif" схоже на другий "if" оператор і працює також:
if X == 1 then
<содержимое>
elseif X == 2 then
<содержимое>
end
В операторі можуть бути багато умов "elseif", але тільки одне "else".
Списки (також звані як таблиці і масиви) схожі на змінні, у яких можуть бути безліч значень. Щоб створити список, надрукуйте назву списку супроводжуване знаком "=" і парою дужок <>.
Додавання значення до списку подібно присвоєння / зміни значення змінної. Ви повинні надрукувати назву списку, супроводжуване парою квадратних дужок із заданим номером в списку, знаком "=", а потім значенням.
thelist [1] = 1234
thelist [2] = 37065
Числовий символ з ім'ям списку перед цим, говорить число елементів в списку.
Той же самий список як в вищезгаданих прикладах, має значення змінної "numbercheck" рівне 2.
Щоб очистити всі значення списку, надрукуйте назву списку, знак "=" і порожню пару дужок. Щоб очистити тільки одне значення, встановіть це значення в нуль.
-- Очищення всього списку
thelist = <>
-- Очищення одного значення
thelist [1] = nil
Списки можуть бути глобальними і локальними, як змінні.
thelist = <>
local thesecondlist = <>
--- 2.6 Оператор For ---
Оскільки оператори використовуються, щоб зробити безліч повторюваних дій в одному короткому ділянці пам'яті скрипта. Формат написання оператора "For" нижче.
for <переменная> = <начальное число>, <число как много раз совершать действия> do
Приклад використання оператора "for".
for i = 1, 5 do
<содержимое>
end
Давайте розглянемо кожну частину докладно:
for
- Стартове ключове слово
i = 1
- "I" - тимчасова змінна, яка використовується оператором "for", для збереження, скільки разів він вчинив дії (включаючи 1). "I" може бути змінений на будь-яке ім'я як змінна. "1" це початкове значення для відліку.
5
- Кількість повторень "<содержимого>".
Щоб перервати оператор "for", включіть "break" в оператор "if", який перевіряє значення оператора "for" для дотримання умови.
for i = 1, 5 do
if i == 3 then
break
end
end
----- 3.0 - Cortex Command Lua stuff -----
________________________
--- 3.1 Етапи скрипта ---
Етапи скрипта - це частини скрипта, які виконуються тільки, коли об'єкт був створений, коли він існує, або коли знищений. Етапи скрипта теж вимагають "end" як і оператори умов.
-- <Содержимое> в проміжку між "function Create (self)" і "end" буде працювати, тільки коли об'єкт буде створений. (Відбувається тільки один раз)
function Create (self)
<Содержимое>
end
-- <Содержимое> в проміжку між "function Update (self) і" end "буде працювати, тільки коли цей об'єкт існує.
function Update (self)
<Содержимое>
end
-- <Содержимое> в проміжку між "function Destroy (self) і" end "буде працювати, тільки коли цей об'єкт знищується. (відбувається тільки один раз)
function Destroy (self)
<Содержимое>
end
Функції - частина Lua, які вже вбудовані в гру і взаємодіють з вмістом в Cortex Command. Формат функції - назва групи функції, двокрапка, ім'я функції, і її параметри (потрібні дані для цього, щоб це працювало) розділяються комами в круглої дужки. Більшість назв груп функції Cortex Command можуть бути замінені покажчиком чимось на те, з чим вони зможуть взаємодіяти. Приклад функції нижче:
Інформація про функції з Вікіпедії Cortex Command Lua:
AddImpulseForce
Adds impulse force (or instant momentum) to this MovableObject for the next time Update () is called.
- An Vector with the impulse force vector that will directly be added to this MovableObject's momentum next Update (). In kg * m / s.
- A Vector with the offset, in METERS, of where the impulse is being applied relative to the center of this MovableObject.
"Anactor" - покажчик на актора, "AddImpulseForce" - назва функції, і вміст круглої дужки - дані, необхідні для роботи функції. У блоці інформації про функції, "Return value", - це те, що виводить функція, коли вона виконується.
Більшість функцій в Cortex Command може бути знайдено в wiki, так що переконаєтеся перевіривши це.
Добре, ми нарешті добралися до покажчиків!
У Cortex Command покажчики - змінні, які "зберігають" об'єкт в собі. Або Ви можете уявити це, як гігантську стрілку, що вказує на об'єкт. незалежно від того, що властивості Ви встановлюєте на покажчик або використовуєте функцію на ньому, це справить враження на той об'єкт, на який він "показувала.
Є кілька способів створити покажчики. Зазвичай використовують спеціальний оператор "for", який перевіряє всі об'єкти певного типу і є оператором, який перевіряє, чи є об'єкт тим, який вам потрібен. Шматок коду скрипта нижче приєднаний до об'єкта, який шукає актора, з ім'ям "Dummy" і потім встановлює на нього покажчик, названий "local pointer".
for actor in MovableMan.Actors do
if actor.PresetName == "Dummy" then
local pointer = actor
break
end
end
Що робить вищезгаданий шматок - перевіряє всіх акторів в грі, поки він не знаходить агента з "PresetName" як "Dummy". Тоді це встановлює покажчик на цього актора як "local pointer" і зупиняє оператор "for" з "break". Термін "актор" є покажчиком на актора, і переданий "local pointer" для більш простої довідкової інформації.
Тут 2 інших рядки "for", які отримують покажчики на пристроях і частинках.
-- покажчик пристроїв
for item in MovableMan.Items do
end
-- покажчик частинок
for particle in MovableMan.Particles do
end
----- 4.0 - Функції і властивості в Cortex Command Wiki -----
________________________
----- 5.0 - Приклад скрипта -----
________________________
--- 5.1 Mine ---
Цей скрипт для простої міни, яка вибухає, коли актори знаходяться в межах певної відстані об'єкта зі скриптом.
-- Поки об'єкт існує
function Update (self)
-- Перевірка всіх акторів
for actor in MovableMan.Actors do
-- Використовує функцію і властивість вектора, щоб зберегти відстань між актором і об'єкт зі скриптом в змінної.
local distcheck = SceneMan: shortestDistance (self.Pos, actor.Pos, true) .Magnitude
-- Оператор, який перевіряє, якщо перевіряється відстань (змінна "local distcheck") менше ніж 10. Якщо так, зробите дію.
if distcheck <30 then
-- GibThis () - це функція, яка робить цілеспрямовану руйнацію об'єкта.
self: GibThis ()
-- зупинка оператора
break
-- Кінець оператора "if".
end
-- Кінець оператора "for".
end
-- Кінець "function Update (self)".
end