• Страница 1 из 1
  • 1
Локальные переменные
Nyll
Здравствуйте! Сегодня мы будем учиться использовать локальные переменные в тексте.

Полезные ссылки:
Инструкция по созданию toc файла - тык
Ссылка на предыдущие статью - тык
Скачать notepad++ - тык
API функции - тык

Делаем папку для аддона в ней TOC, LUA файлы. Открываем LUA файл и меняем кодировку на UTF-8.

Теперь делаем саму локальную переменную. (У нас их будет 3 т.е 1. Версия аддона 2. Название аддона 3. Автор)
Первая локальная переменная - это версия аддона:
Code
local addonversion = "1.1"

В скобочках пишем версию аддона.

Вторая переменная у нас название аддона:
Code
local addonname = "Scruffy"

В скобочках пишем название аддона.

И третья переменная у нас автор аддона:
Code
local author = "Nyll"

В скобках пишем свой ник.

Теперь я покажу, как использовать переменные в коде, а именно в тексте.
Первый пример будет только использование версии аддона.
Создаем функцию:
Code
function test_addon_version(msg)

В функции пишем:
Code
print("Аддон Scruffy "..addonversion..".")

Т.е мы вписуем локальную переменную так: "..addonversion.."
Теперь закрываем функцию:
Code
end

И делаем слеш команду для ее активации:
Code
SlashCmdList["TESTING"] = test_addon_version;
SLASH_TESTING1 = "/testv";


Теперь покажу как использовать 2 локальных переменных, а именно: Название аддона и версию аддона.
Так как и в первый раз создаем функцию:
Code
function test_addon_version(msg)

В ней пишем:
Code
print("Аддон "..addonname.." v"..addonversion..".")

Вот вы видите, что мы теперь использовали 2 локальных переменных: "..addonversion.." и "..addonname.."
Закрываем функцию:
Code
end

И делаем слеш команду:
Code
SlashCmdList["TESTINGG"] = test_addon_name;
SLASH_TESTINGG1 = "/testn"


Теперь будем использовать все 3 локальных переменных: Версию, Название аддона, Автора.
Создаем функцию:
Code
function test_addon_author(msg)

В ней пишем:
Code
print("Аддон "..addonname.." v"..addonversion.." создал: "..author..".")

Вот теперь мы использовали 3 локальных переменных: "..addonname..", "..addonversion..", "..author.."
Теперь закрываем функцию:
Code
end

И делаем слеш команду:
Code
SlashCmdList["TESTINGGG"] = test_addon_author;
SLASH_TESTINGGG1 = "/testa"


Вот как у меня выглядит код:


Вот и конец статьи, след статья будет в след пятницу. Удачи вам!
Прикрепления: 9186991.png (41.1 Kb)
Маме беркута привет!
Сообщение # 1 отредактировано Nyll - Пятница, 24.02.2012, 12:07
Smos
Скаут
Хм... Интересно)
Сообщение # 2 написано 18.02.2012 в 19:07
EnerGO
Скаут
Возможно тупйо вопрос НО что дает данный аддон ?
Сообщение # 3 написано 18.02.2012 в 22:11
Juline
!1
Quote (EnerGO)
Возможно тупйо вопрос НО что дает данный аддон ?

Вопрос действительно тупой. Посмотри на название темы.
В аддоне, обычно, используются:
1. LUA
2. XML
3. WOW API: http://api.wowjp.net/
Если знать это, то ты сможешь написать аддон. Можно даже без 2й составляющей.
Основа - это LUA, - на нем пишутся все скрипты. Посмотри в название, данный урок, в большей мере, направлен на то, чтобы показать, как создавать локальные переменные в LUA и потом использовать их. Также, показаны описания функций. LUA используется очень широко: скриптовка НПС в играх, при написании аддонов для других игр (rift etc.), подключается при работе с нескриптовыми языками программирования... К примеру, если писать адекватный калькулятор с разбором текста, для выполнения самих подсчетов можно ЛУА использовать и не составлять никаких парсеров. По сути, будет только оболочка и подключение скрипта луа, который состоит их 2х строк.
Такие вещи можно было увидеть во всех предыдущих статьях, практически, так что, кто понимал предыдущий код, нового для себя тут ничего не увидит.
Кто хочет научиться писать аддоны: учите синтаксис луа, начинайте читать статьи NYLL с первой и научитесь использовать вовапи... Надеюсь, что хоть кто-то это понимает.
Не мог сдержаться просто.

Ответ по теме: данный аддон инициализирует 3 различные слэш команды: /testv, /testn, /testa.
Сообщение # 4 написано 18.02.2012 в 23:11
EnerGO
Скаут
Понял .Спасибо.
Сообщение # 5 написано 18.02.2012 в 23:36
S[er]G
Чемпион
а мне вот интересно, как будет выглядеть функция, которая будет брать значение, которое задаст сам пользователь
[cut]
[/cut]
Сообщение # 6 написано 19.02.2012 в 15:34
Juline
!1
Quote (S|er|G)
а мне вот интересно, как будет выглядеть функция, которая будет брать значение, которое задаст сам пользователь

Не знаю, насколько понял вопрос. Существует много вариантов ввода есть.
Самый простой, на мой взгляд - через ту же слэш команду.
Прототип обработчика слэш команды имеет вид:
Code
function handler(msg, edit)

Второй параметр не всегда пишут, но, нужно.
Первый параметр msg - это то, что ты ввел в слэш команде.
Code
SLASH_TEST1 = '/testme';
local function handler(msg, editbox)
if msg == 'www' then
print('VAR1');
else
print('VAR2');
end
end
SlashCmdList["TEST"] = handler;

Теперь, если ты параметром слэш команды передашь www, то получишь сообщение от аддона VAR1, иначе - VAR2.
Code
/testme www

Ввести данные можно через эдитбоксы и т.п.
Сообщение # 7 написано 20.02.2012 в 21:21
H_A_PK
Скаут
чем локальная переменная отличается от простой переменной ?
ссылка на локальную переменную действительна только в пределах луа файла ?
насколько я знаю, локальные переменные весят в памяти и после выполнения скрипта или я не прав ?
Сообщение # 8 написано 10.01.2013 в 11:56
Nyll
Цитата (H_A_PK)
ссылка на локальную переменную действительна только в пределах луа файла ?

Только в луа файле или функции.
Маме беркута привет!
Сообщение # 9 написано 10.01.2013 в 12:26
Alecksey1308
Скаут
В чем отличие локальной переменной от глобальной и какие лучше ?
Сообщение # 10 написано 09.08.2019 в 10:09
Object_ihor
Скаут
Цитата Alecksey1308 ()
В чем отличие локальной переменной от глобальной и какие лучше ?

Глобальная переменная видна из всех файлов программы, т.е. можно получить доступ к ней свободно(тем самым непреднамеренно навредить ей). Локальные видны внутри какой-то структуры программы(класс, метод, цикл, условия, структура и т.д.). Вообще лучше использовать локальные, но если уж сильно нужно, то можна глобальные, но такие переменные в основном используются как константы(например в мат. функциях, или неизменяемые пути к БД, файлам и т.д.). В общем использовать тот или иной вид переменной зависит от задачи, но рекомендуется пользоваться локальными.
Сообщение # 11 написано 09.08.2019 в 13:22
NewSapce
Скаут
Цитата Object_ihor ()
тем самым непреднамеренно навредить ей

Хотелось бы добавить, что использование большого количества глобальных переменных в lua может повлиять на производительность (если интересно, можно почитать про _G), не думаю, что это как-то скажется в работе маленького аддона, но если проект большой и многопоточный, то может сыграть роль.
И, если судить по моему опыту, когда в lua очень нужно поюзать глобальную переменную, то лучше её поюзать, а не писать ещё тонну кода для передачи этой переменной.
p.s.: если задаетесь такими вопросами, то советую почитать Роберту Иерузалимски Программирование на lua
p.s.s.: пример со структурой и классом не очень корректный. Реализация класса на lua это либо проявление большого интереса к lua, либо крайняя степень отчаянья (прим. upvalues тоже может привести к проблемам оптимизации).
Сообщение # 12 написано 10.08.2019 в 18:30
  • Страница 1 из 1
  • 1
Поиск: