Toribash Русский Форум

Объявление

4бб переехал на toribash.ru. Все разделы 4бб закрыты на добавление сообщений.

Если вы были зарегестрированы на 4бб, в ваших личных сообщениях лежит пароль от одноименного аккаунта на toribash.ru.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Toribash Русский Форум » Энциклопедия » [Tutorial's][Lua][RuTeam]


[Tutorial's][Lua][RuTeam]

Сообщений 1 страница 8 из 8

1

Сериа Lua Туториалов 

Совсем недавно я решил делать туториалы.Досихпор у меня только 1 готовый(1 готовый на время создания оригинальной темы).И меня интересует что вы об этом думаете и что можете сказать чтобы я его улучшил.Он Направлен на начинающих.
Начинающие:
Toribash Lua Tutorial 1 - Основы <закончен>
Toribash Lua Tutorial 2 - Условия и функции  <закончен>
Toribash Lua Tutorial 3 - Хуки и откладки <закончен>
Toribash Lua Tutorial 4 - Рисование<закончен>
Toribash Lua Tutorial 5 - Больше функций! <Не начато>
Toribash Lua Tutorial 6 - Сделай свою мини-игру! (Управление мышкой и клавиатурой) <wip>

Продвинутый:
Toribash Lua Adv Tutorial 1 - Метатаблицы <Не начато>

Я не слишком уверен в том сколько времени я буду делать эти туториалы это все зависит от того как заинтересованы в этом люди.

Постепенно когда обновляеться офф темя я буду  добовлять новые туториалы

http://i45.tinypic.com/315bjvp.png

Оригинал by Blam.
Перевод сделан ApozZMaN.

Отредактировано Apozzman (05.06.2010 21:09:28)

+5

2

Toribash Lua Tutorial 1 – Основы

Этот туториал я написал про то как делать скрипты в торибашэ используя lua.В этом первом туториале я пройду через то как начать делать скрипты , строки , номера , таблицы , и "циклы"

Приступим к работе :
Тебе нужно:
Toribash (Очевидно).
Notepad++ (или другой тукстовый редактор но в этом тутореале я буду использовать Notepad++)

Привет мир:

Твоя основа будет "привет мир":

Код:
echo("hello world!")

Сохраните это в lua файле (и поместите этот файл в toribash/data/scripts/)
Теперь откройте торибаш и идете в Setup -> Scripts => выберите “helloworld.lua” и нажмите “load”.
Ты увидиш “hello world!” темно-красным цветом в чат-боксе. Это и есть функция echo. Используй “echo” Функцию если хочеш вывести темно-красный цвет в чат-боксе, это очень полезно для отладки и с помощью этого можно информировать человека об этом скрипте(также можно втулить туда свой копирайт).

Теперь об этом более продвинутей:
Вернись в свой helloworld.lua скрипт в notepad++. Теперь я хочу чтобы ты вставил туда это:

Код:
Message1 = "Hello"
Message2 = "world"
Message3 = "!"
echo(Message1 .. " " .. Message2 .. Message3)

Так что же это такое?

Код:
Message1 = "Hello"

Вот так вы объявляете переменную в Lua.Переменные хранят информацию такую как числа или текст.

Код:
Message2 = "world"
Message3 = "!"

Message1, Message2 и Messge3 сейчас содержат текст который нужен для echo "Hello world!" Но как мы сойденим это?

Код:
echo(Message1 .. " " .. Message2 .. Message3)

Знак ".." в lua означает обьединение. Конкатенация это когда ты ложиш несколько строк рядом поэтому мы положили рядом Message1 (“Hello”) с пробелом , Message2 (“world”) и Message3 (“!”) в конце мы получили “Hello world!”.
Попробуйте это!

Номера!

Цифры в Lua объявляються в точности так же, как строки. Давайте мы поменяем в предыдущем скрипте слова на номера и получим примерно вот такое

Код:
[Message1 = 45.23
Message2 = 2312.3
echo(Message1 .. "+" .. Message2 .. "=" .. (Message2 + Message1))

В игре это будет выглядеть вот так

Код:
45.23+2312.3=2357.53

Все видят что это сложно?Позвольте мне рассказать об этом поподробней
"45.23" контактирует с "+" , Message2 и скрипт выводит сумму Message2 и Message1.

Таблицы и циклы!

Код:
Message = { }
Message[1] = "Word"
Message[2] = 23.232
Message[3] = "This is a sentance."
Message[4] = ":D 2323424" .. 23.232 .. "!"
Echo = "Message: "
for i = 1,#Message do
Echo = Echo .. Message[i]
end
echo(Echo)

Давайте я обьсню вам это.

Код:
Message = { }

Это обьявляет новую таблицу.Таблицы (или Массивы) это группы из переменных.Они могут содержать какой либо тип переменных , даже функции!

Код:
Message[1] = "Word"

Это делает первую переменную в сообщении : "Word"

Код:
for i = 1,#Message do

Этот цикл будет идти от 1 (первая переменная в сообщении) до итоговой цифры переменных в Сообщении(#Таблицы получают итоговую сумму цифр переменных)

Этот цикл будет повторяться четыре раза(так как в данном случае здесь четыре переменных в сообщении) и каждый раз цифра "i" будет увиличиваться на 1.

Код:
Echo = Echo .. " " .. Message[i]

Это обьеденяет соответвствующие сообщения на конец строки "echo"
При запуске этого скрипта в игре в чат-боксе появиться следующее сообщение

Код:
Word 23.232 This is a sentance.232342423.232!

+1

3

Toribash Lua Tutorial 2 - Условные операторы и функции
В данной статье я расскажу вам про условных операторов , некоторые связанные с toribash'om функции и то как сделать свою функцию.
После прочитения этого туториала ты будеш уметь : Писать скрипт который выводит имя победителя в текущщем бою.

Условные операторы:
Условные операторы это одна из самых важных аспектов любого скрипта.Они позволяют вызывать функции когда ты хочеш этого , например :

Код:
a = 1
b = 2
if(a+b == 3) then
   echo("a + b == 3 :O")
else
   echo("a + b ~= 3")
end

Есть три основных части условного оператора это (If, then, else).В этом примере условное выражение это "a+b == 3".Если вы используете только один знак равенства, то появится ошибка, которая подумает что вы пытаетесь установить переменную поэтому нужно использовать два.
Вот операторы которые ты можеш использовать:

Код:
== Равно
~= Не равно
> Больше
< Меньше
>= Больше или равно
<= Меньше или равно

Так что если вы хотели бы видеть что было бы если была бы использована функция >= (Больше или равно) то вот пример:

Код:
a = 2
b = 2
if(a >= b) then
   echo("a is greater than or equal to b")
else
   echo("a is less than b")
end

Вот как все просто!

Функции связанные с Toribash:
Есть много функций связанных с toribash'om которые мы можем вызвать в lua.
Пример , если мы хотим увидеть у какого игрока больше очков в конце боя.Мы сравним счета двух игроков и узнаем у кого больше очков с помощью следующего скрипта:

Код:
Player1_Score = get_player_info(1).injury
Player2_Score = get_player_info(0).injury
if(Player1_Score > Player2_Score) then
   echo("Player 1 is winning!")
elseif(Player2_Score > Player1_Score) then
   echo("Player 2 is winning!")
else
   echo("Draw!")
end

Когда ты запустиш этот скрипт он будет показывать в конце каждого боя у кого больше очков . Довольно прикольно , да?
Вы можете увидеть список некоторых встроенных функций в Toribash в папке /data/scripts/SDK/

Создание своих функций :
Создание своих собственных функций это жизненно необходимая часть lua она позволяет повторно использовать код быстро и эффективно.
Например, если мы хотим создать функцию, которая будет показывать кто побеждает :

Код:
function winning()
   Player1_Score = get_player_info(1).injury
   Player2_Score = get_player_info(0).injury
   if(Player1_Score > Player2_Score) then
      return "Player 1"
   elseif(Player2_Score > Player1_Score) then
      return "Player 2"
   else
      return "Draw!"
   end
end

echo("Winning: ^06" .. winning())

Теперь каждый раз когда ты запускаеш этот скрипт он пишет "Winning : ***" и вместо *** имя победителя или "Draw!" в ^06 цвете (Lua может испольовать цветовые коды такой как ^06)

И вот это конец этого туториала!

Отредактировано Apozzman (05.06.2010 20:29:12)

+1

4

Toribash Lua Tutorial 3 – Хуки и откладки

В данной статье я буду рассказывать про хуки и отладки скриптов.
После прочтения этого туториала ты будеш уметь :
1)Делать скрипт который показывает кто из игроков лидирует по очкам и замораживает каждого игрока
2)Устранять неполадки в ваших скриптах.

Хуки :
Хук является еще одним важным аспектом lua.Он позволяют выполнять определенные функции в определенное время.
Хук выглядит примерно вот так :

Код:
add_hook("hook name","hook description", functiontocall)

Так что они могут сделать?Хуки могут позволить тебе нарисовать текст на экране или писать кто выигрывает каждые например 50 фреймов.
Ты можеш найти лист хуков в файле startup.lua (который находиться в папке data/script/) в таблице events , но сейчас мы будем использовать “enter_freeze” хук.
Давайте используем скрипт который остался с предыдущего туториала из него мы можем сделать скрипт, который будет повторять текущего лидера довольно легко.

Код:
function winning()
Player1_Score = get_player_info(1).injury
Player2_Score = get_player_info(0).injury
if(Player1_Score > Player2_Score) then
return "Player 1"
elseif(Player2_Score > Player1_Score) then
return "Player 2"
else
return "Draw!"
end
end

echo("Winning: ^06" .. winning())

Так, это наш код.Для того чтобы называть лидера каждый раз мы должны немного изменить этот код.Прежде всего мы создадим функцию которая называет его(лидера) , проще говоря echo(“Winning…  и посмотрим что получилось :

Код:
function winning()
   Player1_Score = get_player_info(1).injury
   Player2_Score = get_player_info(0).injury
   if(Player1_Score > Player2_Score) then
      return "Player 1"
   elseif(Player2_Score > Player1_Score) then
      return "Player 2"
   else
      return "Draw!"
   end
end

function enter_frame()
    echo("Winning: ^06" .. winning())
end

Далее нам нужно добавить хук чтобы наши функции работали.Сделать это можно добавив следующую строку в нижнию часть скрипта:

Код:
add_hook("enter_freeze","echowinner",enter_frame)

Это просто!
Я расскажу больше про хуки в следущих туториалах.

Отладка:
Если ты экспереметировал с скриптами и если у тебя чтото пошло неправильно и ты не мог все починить значит это все изза того что toribash думает что ты допустил ошибку в коде.Чаще всего toribash не говорит где и на какой строке все пошло не так.И здесь приходит “stderr.txt”.
Если ваш скрипт выдаёт ошибку, или работает не должным образом вам необходимо проверить файл stderr.txt, чтобы увидеть, какие ошибки есть в скрипте. Вот пример распространенной ошибки:

Код:
Lua script error in file errorscript.lua: data/script/errorscript.lua:2: attempt to index global ‘a’ (a nil value)

Давайте рассмотрим это.Прежде всего этот текст говорит нам что в lua скрипте допущена ошибка , это не важно сейчас но будет важно когда мы будем запускать несколько скриптов сразу.Далее нам говорят где находиться скрипт и ошибочная строка (в данном случае 2) допущена ошибка и говорят описание ошибки.В данном случае ошибка расшифровувоетса так- она говорит что таблица создана не должным образом,то есть нужно чтобы было "a = { }" а у тебя видимо не так (в данном случае "a=" это переменная а "{}" таблица).

Другие ошибки :

Код:
Lua script error in file errorscript.lua: data/script/errorscript.lua:3: ‘}’ expected (to close ‘(‘ at line 2) near ‘echo’

Ты закрыл не все скобки правильно.

Код:
Lua script error in file errorscript.lua: data/script/errorscript.lua:2: attempt to perform arithmetic on global ‘b’ (a nil value)

Значение 'b' было не определено. (тебе нужно a b=x)

На этом мой туториал кончился.

Если у вас возникли вопросы задавайте их в оффициальной теме.

Отредактировано Apozzman (05.06.2010 20:30:20)

+1

5

Toribash Lua Tutorial 4 – Рисование
В этом туториале я расскажу вам как рисовать в 2D и 3D
В конце этого туториала ты сможеш :
1.Рисовать текст я динамическим размером и задним фоном
2.Рисовать шарики.

Рисование в 2D
Все рисование в lua происходит благодоря хукам.Чтобы рисовать в 2d тебе нужно использовать draw2d хук и для рисования в 3d тебе нужно использовать хук draw3d .Так давайте рассматривать рисование в двух измерениях.

Код:
add_hook("draw2d","draw", draw2dfunc)

Это draw2d хук , давайте рассмотрим основные функции.

Код:
set_color(r,g,b,a)

Для рисования чего либо ты долженг выбрать цвет r=красный g=зеленый b=синий и a=альфа(прозраный).Номера должны находиться в диапазоне от 0-1. (0,0,0,1) для черного и (1,1,1,0.5) для белого цвета.

Код:
draw_quad(x,y,w,h,texture)

Теперь попробуем нарисовать прямоугольник в Lua. х = х координат, у = у-координата, W = ширина, Н = высота и опция текстуры, которую я возможно рассмотрю позже.

Код:
draw_disk(x, y, inner, outer, slices, loops, start, sweep, blend)

Это код многоугольника x-x кооддината, inner-расстояние с внутреннего радиуса, y-у координата,outer-расстояние с внешнего радиуса.slices-кол-во углов(3-треугольник 4-четырехугольник).

Код:
draw_text(text,x,y,font)

Это код рисования текста.text=текст который будет нарисован , x= координата x , y=y координата.Шрифт выбирается цифрой 0-5 пример шрифтов вы увидите ниже
http://i300.photobucket.com/albums/nn24/BlamBear93/fontsizes.png
Важныя заметка:

Координаты (0,0) обозначают что текст находится в верхнем левом углу, тем выше значение "х", правее вы рисуете, тем больше "у" значение, тем более в нижней части экрана вы рисуете. Пример: 100, 300 будет 100px справа от верхнего левого угла и 300px вниз.

Так давайте начнем рисовать наш первый прямоугольник!

Код:
function draw2dfunc()
    set_color(0,0,0,1)
    draw_quad(10,300,100,200)
end
add_hook("draw2d","draw", draw2dfunc)

Этот скрипт рисует прямоугольник с (10,300) до (110,500).
Давайте нарисуем немного более продвинутей и попродуем добавить какой-либо текст и динамическую форму прямоугольника.

Код:
text = { } -- Blank table
text[1] = "This is some text"
text[2] = "This is more text"
text[3] = "MOOOOOOOOOO"
text[4] = "Just a basic test really"
text[5] = "weeeeeeeeeeeeeeeeeee"
text[6] = "1231923823982938"
text[7] = 123.23
text[8] = "Blam is the best  "
placey = 200
function draw2dfunc()
    ScreenWidth, ScreenHeight = get_window_size()
    set_color(0,0,0,1)
    draw_quad(10,placey,ScreenWidth-20,#text*17.5)
    set_color(1,1,1,1)
    for i = 1,#text do
        draw_text(text[i],12,(i*17)-17+placey,1)
    end
end
add_hook("draw2d","draw", draw2dfunc)

Так чтот я написал много вам непонятного так что давайте все рассмотрим.

Код:
text = { }
text[1] = "This is some text"
text[2] = "This is more text"
text[3] = "MOOOOOOOOOO"
text[4] = "Just a basic test really"
text[5] = "weeeeeeeeeeeeeeeeeee"
text[6] = "1231923823982938"
text[7] = 123.23
text[8] = "Blam is the best  "

Это текст который мы выводим на дисплей.

Код:
placey = 200

Это определяет где текст будет отображаться по оси x, в данном случае 200px сверху вниз .

Код:
ScreenWidth, ScreenHeight = get_window_size()

ScreenWidth-ширина окна в котором будет отображаться текст ScreenHeight-высота окна в котором будет отображаться текст.

Код:
#text*17.5

Размер шрифта (я предпочитаю именно этот размер потомучто это самый оптимальный вариант на мой взгляд)

Код:
(i*17)-17+placey

Расположение по оси y.

Рисование в 3D
Как я уже говорил рисование в 3d нужнается в draw3d хуке

Код:
add_hook("draw3d","draw", draw3dfunc)

Для рисования сферы в 3D нужно использовать :

Код:
draw_sphere(x,y,z,radius)

Сейчас если мы хотим нарисовать сферу над головой у тори мы должны узнать позицию нашей головы , для этого мы можем использовать :

Код:
x, y, z = get_joint_pos(0, 0)

Здесь x,y, и z являються x,y, и z координатами джоинта шеи нашего тори также можно сделать так :

Код:
get_joint_pos(player, joint)

список джоинтов здесь

А теперь можно и нарисовать что-то
Я нарисовал вот так

Код:
function draw3dfunc()
	x, y, z = get_joint_pos(0, 0)
    set_color(0,0,0,1)
    draw_sphere(x,y,z,0.4)
end
add_hook("draw3d","draw", draw3dfunc)

На этом туториал  кончаеться.Спасибо за прочтение.Я расскажу вам более про 3D в следущих туториалах.

0

6

несомненно + и респект,жду продолжения,кстати отлично придумал набить посты ;D

0

7

:О не осилил прочитать , но всё же +
думаю пригодиться мне когда нибудь

0

8

Мультипост детектед Круто, все прочитал но нихера не понял. Седня сяду, изучу подробнее. Лови плюху.

0

Быстрый ответ

Напишите ваше сообщение и нажмите «Отправить»



Вы здесь » Toribash Русский Форум » Энциклопедия » [Tutorial's][Lua][RuTeam]