Сейчас я расскажу немного про массивы на скриптах Storm 2.x
Для примера создадим свой объект и создадим массив.
Код
int iLesson = 100; //количество элементов в массиве
object Lesson[iLesson]; //массив объектов
void InitTestArray()
{
for(int i = 0; i < iLesson; i++)
{
Lesson[i].index = i; //индекс элемента в массиве
Lesson[i].id = "Lesson_" + i; //индификатор элемента в массиве
}
}
Это пример стандартной конструкции массивов объектов.
У каждого из них есть свой индекс (
index) и индификатор (
id)
Далее рассмотрим способы нахождения одного из нужных нам элементов массива.
Если массив состоит из 4-6 объектов, то найти нужный элемент достаточно просто – подставляем в квадратные скобки нужный нам номер элемента и работает с этим элементом.
Но когда у нас этих элементов 100 штук, то искать их намного сложнее. Для этого пишем функции по нахождению этих элементов. Тут нам поможет тип
ref.
Код
ref rFindLesson(string array_id) //получаем наш элемент в массиве
{
for(int i = 0; i < iLesson; i++) //проверяем все наши элементы массива
{
if(Lesson[i].id == array_id) //если находим нужный нам элемент...
{
return &Lesson[i]; //...то возвращаем этот элемент
}
}
}
int iFindLesson(string array_id) //находим индекс элемента в массиве
{
for(int i = 0; i < iLesson; i++) //проверяем все наши элементы массива
{
if(Lesson[i].id == array_id) //если находим нужный нам элемент...
{
return i; //...то возвращаем его индекс
}
}
}
Это стандартный поиск для всех объектов в скриптах. Они все имеют свой индекс и индификатор.
Теперь рассмотрим поиск определенного уникального элемента. Пусть это будет 58 элемент нашего массива.
Код
Lesson[58].uniq = true; //присвоили какой-то уникальный атрибут (например, по квесту)
Код
ref rFindUniqLesson() //ищем уникальный элемент массива
{
for(int i = 0; i < iLesson; i++) //проверяем все наши элементы массива
{
if(CheckAttribute(&Lesson[i], "uniq") && Lesson[i].uniq == true) //находим нужный нам элемент
{
return &Lesson[i]; //возвращаем этот элемент
}
}
}
Можно присваивать любой уникальный атрибут, и используя подобную конструкцию найти нужный элемент массива.
Немного о функции
Код
CheckAttribute(ref obj, string attr);
Она проверяет наличие определенного атрибута у объекта.