Гайд Массивы и взаимодействия с ними + немножко о цикле for

|DEVIL|

Известный
Автор темы
359
273
Смотрю на некоторые скрипты и хочется плакать, смотря на то, как это реализовано. Поэтому хочу сделать простенький гайд о том, как почти полностью исключить ctrl c + ctrl v в ваших скриптах.

Массивы
Наверняка многие знают что такое массивы, но не знают сколько в них полезного. Ниже я написал, как строить массивы
Код:
-- Простой массив

local table1 = {
    var1 = 0,
    var2 = 0,
    var3 = 0 -- На последней переменной запятую можно ставить, а можно и не ставить, как вам по душе
}

-- Массив с подтаблицами

local table2 = {
    next = {
        var = 1,
        string = "hello"
    },
    next1 = {
        var = 3,
        string = "world"
    }
}

-- Помимо обычного строения массивов, можно построить его и так

local table3 = {"Здравствуй небо", "В облаках", "Здравствуй юность", "В сапогах", 12312}

-- Можем сделать такое же, но с подтаблицами

local table4 = {
    {"string", 12341},
    {"xyi", 123213}
}

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

Обращение к массивам
Вот тут уже у многих новичков возникают проблемы, потому что они не знают способы обращения к массивам​
Lua:
-- Возьмём вторую таблицу, которую я написал выше

local table2 = {
    next = {
        var = 1,
        string = "hello"
    },
    next1 = {
        var = 3,
        string = "world"
    }
}

-- Допустим мы хотим взять var у переменной next1, сделать можем так:

table2.next1.var -- Выведет 3

-- Так же ещё один способ, который используют в циклах

--  Возьмём ещё одну таблицу выше

local table4 = {
    {"string", 12341},
    {"xyi", 123213}
}

-- Допустим, мы хотим взять у первой подтаблицы первое значение. Индексация у массивов начинается с единицы.

table4[1][1] -- Первая единица - обращение к первой подтаблице, вторая берёт первое значение подтаблицы, или же string.

-- Если ничего не поняли, из этой же таблицы возьмём из второй подтаблицы текстовую переменную xyi, выглядеть будет так:

table4[2][1]
Так же можно посмотреть сколько переменных/подтаблиц в массиве, это делается так
#table4 -- Выведет 2

Цикл for
Думаю что много людей о нём знает, но всё же покажу что это.
Lua:
for i = 1, 50 do -- i - это значение кругов цикла, цифра 50 - сколько раз цикл повторится
    print("Это "..i.." круг")
end
-- Так же можно указать шаг увеличения, но в данном гайде это нам не понадобится
Пример, как можно работать с массивами
Недавно видел какой-то FastBuy, и его реализация заставила меня заплакать...
1603604720341.png


И так дохренилион раз
Давайте разберёмся, как можно в разы упростить данную задачу.
Создаём массив, туда пихаем подтаблицы, а в эти подтаблицы пихаем следующие данные:
Первое значение: Название предмета
Второе значение: По сколько вирт будем скупать
Третье значение: Страница в диалоге
Четвёртое значение: Сам номер в диалоге
Код:
local table =
{
    {"Наркотики", 500, 1, 1},
    {"Дилдо", 123000, 1, 2},
    {"Туалетная бумага", 50, 1, 3},
    {"Смазка", 999999, 1, 4}
}
Массив готов. На данный момент мне лень реализовывать там всякую подробную чепуху в гайде по типу нажатия на диалог через самп луа и т.д, поэтому я просто сделаю имгуишку, а там просто пофантазируйте что это работает.
Итак, давайте в имгуишке сделаем вот такой цикл:
Код:
function imgui.OnDrawFrame()
    imgui.Begin(" ")
        for i = 1, #table do -- От единицы до конца массива
            imgui.Text(u8(i..". "..table[i][1])) -- Сначала скрипт выводит номер предмета и название
            imgui.Text(u8"Скуп - "..table[i][2]..u8" Вирт") -- Далее по сколько вирт скупать
            imgui.Text(u8"Страница "..table[i][3]) -- Номер страницы
            imgui.Text(u8"Номер "..table[i][4]) -- Номер самого предмета
            imgui.Separator() -- Горизонтальная линия, что-бы наши строки не смешивались
        end
    imgui.End()
end
Получаем вот такой результат:
1603605690483.png


Вот и всё, конец гайда

Этот гайд уже старенький, но всё же скажу что я сделал спамер, в котором можно создавать неограниченное кол-во биндов, как раз подходит в пример для этого гайда (Можете скачать и посмотреть что и как я делал) - https://www.blast.hk/threads/74627/


Благодарности за исправление ошибок:
@iTz_Vercetti
@imring
@radeber
@KiN4StAt
 
Последнее редактирование:

|DEVIL|

Известный
Автор темы
359
273
Для полного понимания типа таблицы рекомендую прочитать книгу Роберто Иерусалимски, потому что там всё подробно рассказано, даже слишком.


У тебя, в прочем, тоже возникли проблемы. Последняя строка вернёт nil, а не 3, потому что у тебя в подтаблице next1 таблицы table2 нет поля, которое индексировано с помощью числа 1, да и вообще с помощью чисел...

Раз решил рассмотреть числовой for, а не общий, то также можно упомянуть про шаг увеличения, который по умолчанию равен 1.
Lua:
--[[
local start, stop, step = 100, 1, -1

for number = start, stop, step do
    print(number)
end
--]]
Спасибо за объяснение. Тему отредактировал
 

kin4stat

mq-team
Всефорумный модератор
2,730
4,710
Гайд про массивы, а про индексацию не рассказал, мда
 

|DEVIL|

Известный
Автор темы
359
273
В этом гайде упор больше на упрощение жизни новичкам в скриптинге, что-бы не было копипаста в скриптах. а пеирсы инпеирсы лишние в этом гайде как я считаю, я в своё время даже не знал что цикл for существует, не говоря уже о подробностях. Бошка бы точно щёлкнула