Таблицы. Что это такое и с чем его едят. Часть 1. — различия между версиями — S.T.A.L.K.E.R. Inside Wiki

Таблицы. Что это такое и с чем его едят. Часть 1. — различия между версиями

Материал из S.T.A.L.K.E.R. Inside Wiki

Перейти к: навигация, поиск
Строка 2: Строка 2:
  
 
Итак. Большинство модеров которые начинают осваивать скриптинг сталкера сталкиваются с таким понятием как таблицы.
 
Итак. Большинство модеров которые начинают осваивать скриптинг сталкера сталкиваются с таким понятием как таблицы.
 +
==Определение==
 
Таблица - это ассоциативный массив (набор пар ключ-значение).
 
Таблица - это ассоциативный массив (набор пар ключ-значение).
Ключём (индексом) и значением может быть любой тип данных (за исключением '''nil''' при индексировании ключей).
+
Ключём (индексом) и значением может быть любой тип данных (за исключением '''nil''').
  
К примеру:
+
==Конструктор таблицы==
 +
Конструктор используется для создания таблиц и представляет собой список полей в фигурных скобках. Поля отделяются друг от друга запятыми (',') или точками с запятой (';'). При этом допускается наличие разделителя после последнего поля.
  
 +
Таблица может быть проинициализирована при создании (стандартный конструктор таблицы) :
 +
 +
t1 = {}                      -- пустая таблица
 +
t2 = { 1, 5, 7, 'abc' }      -- обычный массив
 +
t3 = { x = 7, y = "6" }      -- таблица с именованными полями '''x''' и '''y'''
 +
t4 = { 1, 'string', x = 77 } -- смешанная таблица
 +
t5 = { 1, xxx = 17, }        -- разделитель в конце допустим
 +
 +
Или заполнена позже, инициализируя каждую пару ключ-значение :
 +
 +
t4      = {}
 +
t4[1]  = 1        -- Определяет число 1 на место, индексируемое номером 1
 +
t4[2]  = 'string' -- Определяет строку 'string' на место, индексируемое номером 2
 +
t4['x'] = 77      -- Определяет число 77 на место, индексируемое строкой 'x'
 +
 +
Для удобства работы можно вместо индексирования таблицы по имени (строке) использовать это имя как имя поля структуры :
 +
 +
t4['x'] = 77
 +
t4.x    = 77
 +
 +
Эти две формы обращения полностью эквивалентны.
 +
 +
==Массив==
 +
 +
Чтобы получить обычный массив (таблица t2) просто задаются значения элементов. Ключи будут установлены автоматически.
 +
В Lua обычные массивы индексируются целыми, последовательно-нарастающими числами начиная с единицы.
 +
Примеры ниже эквивалентны.
 +
 +
t2 = { 1, 5, 7, 'abc' }
 +
 +
t2 = { [1]=1, [2]=5, [3]=7, [4]='abc' }
 +
 +
t2    = {}
 +
t2[1] = 1
 +
t2[2] = 5
 +
t2[3] = 7
 +
t2[4] = 'abc'
 +
 +
==Размер массива==
 +
Получение размера массива выполняется оператором #:
 +
 +
local count = #t2
 +
 +
Оператор # возвращает целое число n, такое, что t[n] не nil, и t[n + 1] равно nil. Другими словами оператор #, возвращает  максимальный индекс непрерывной последовательности ключей от начала массива. Соответственно, для таблицы:
 +
 +
t = {1, [100] = 2}
 +
 +
длина будет равна 1, поскольку t[1] не nil, а t[1 + 1] равно nil.
 +
Для обычного массива, оператор # вернет количество элементов в массиве.
 +
 +
''to be continue ...''
 +
 +
 +
 +
---------------------------------------------------------------------------------------------------------------------------------
 +
 +
К примеру:
  
 
  local variables = {1, 2}
 
  local variables = {1, 2}

Версия 18:11, 31 марта 2011

Таблицы.

Итак. Большинство модеров которые начинают осваивать скриптинг сталкера сталкиваются с таким понятием как таблицы.

Определение

Таблица - это ассоциативный массив (набор пар ключ-значение). Ключём (индексом) и значением может быть любой тип данных (за исключением nil).

Конструктор таблицы

Конструктор используется для создания таблиц и представляет собой список полей в фигурных скобках. Поля отделяются друг от друга запятыми (',') или точками с запятой (';'). При этом допускается наличие разделителя после последнего поля.

Таблица может быть проинициализирована при создании (стандартный конструктор таблицы) :

t1 = {}                      -- пустая таблица
t2 = { 1, 5, 7, 'abc' }      -- обычный массив
t3 = { x = 7, y = "6" }      -- таблица с именованными полями x и y
t4 = { 1, 'string', x = 77 } -- смешанная таблица
t5 = { 1, xxx = 17, }        -- разделитель в конце допустим

Или заполнена позже, инициализируя каждую пару ключ-значение :

t4      = {}
t4[1]   = 1        -- Определяет число 1 на место, индексируемое номером 1
t4[2]   = 'string' -- Определяет строку 'string' на место, индексируемое номером 2
t4['x'] = 77       -- Определяет число 77 на место, индексируемое строкой 'x'

Для удобства работы можно вместо индексирования таблицы по имени (строке) использовать это имя как имя поля структуры :

t4['x'] = 77
t4.x    = 77

Эти две формы обращения полностью эквивалентны.

Массив

Чтобы получить обычный массив (таблица t2) просто задаются значения элементов. Ключи будут установлены автоматически. В Lua обычные массивы индексируются целыми, последовательно-нарастающими числами начиная с единицы. Примеры ниже эквивалентны.

t2 = { 1, 5, 7, 'abc' }
t2 = { [1]=1, [2]=5, [3]=7, [4]='abc' }
t2    = {}
t2[1] = 1
t2[2] = 5
t2[3] = 7
t2[4] = 'abc'

Размер массива

Получение размера массива выполняется оператором #:

local count = #t2

Оператор # возвращает целое число n, такое, что t[n] не nil, и t[n + 1] равно nil. Другими словами оператор #, возвращает максимальный индекс непрерывной последовательности ключей от начала массива. Соответственно, для таблицы:

t = {1, [100] = 2}

длина будет равна 1, поскольку t[1] не nil, а t[1 + 1] равно nil. Для обычного массива, оператор # вернет количество элементов в массиве.

to be continue ...



К примеру:

local variables = {1, 2}

Примечание: таблицы можно использовать как за функцией, так и внутри неё. В нашем случае таблица содержит набор чисел 1 и 2. Что же с ними можно сделать?

function table()
local variables= {1, 2} --наша таблица
rezultat = variables[math.random(table.getn(variables))] --rezultat локальная переменная.
if rezultat == 1 then
news_manager.send_tip(db.actor,lose_text, nil, nil, 10000) and db.actor:give_info_portion("lose") end
 if rezultat == 2 then
news_manager.send_tip(db.actor,win_text, nil, nil, 10000) and db.actor:give_info_portion("win") end end

Поясню: variables[math.random(table.getn(variables))] этот оператор позволяет взять рандомное значение из данной таблицы. Тобишь случайно взять либо число 1, либо число 2.

 if rezultat == 1 then
news_manager.send_tip(db.actor,lose_text, nil, nil, 10000) and db.actor:give_info_portion("lose") end
 if rezultat == 2 then
news_manager.send_tip(db.actor,win_text, nil, nil, 10000) and db.actor:give_info_portion("win") end

Определяет значение взятое из таблицы, и в зависимости от результата присылает нам то или иное сообщение (news_manager.send_tip(db.actor,***, nil, nil, 10000)) и даёт тот или иной инфопоршень (db.actor:give_info_portion("***") end).


==

Это оператор сравнения. В нашем случае это "равно". Так же есть операторы:

> - больше.

< - меньше.

>= - больше или равно.

<= - меньше или равно.

~= - не равно.


Сравнивать можно только числа или локальные переменные с присвоенными к ним числами.

На этом примере вы можете создать простейшую функцию спауна:

local stalker_types  = {"bread", "kolbasa", "conserva", "vodka"}
function spawn_item() 
alife():create(stalker_types[math.random(4)],vector():set(-0.112,0.477,-215.563),174943,265)
end

Как видите таблица используется вне функции, но можно и в самой функции. В данном примере в определённой точке с координатами (-0.112,0.477,-215.563),174943,265) заспаунится определённый предмет из списка. В эту таблицу можно внести как сталкеров, так и мутантов.

Позже продолжу. iDreD aka кровоSTALKER.

Другие места
LANGUAGE