000141. Списки в c#. Запуск нескольких скритов в GTA 4

Списки в c#. Запуск нескольких скритов в GTA 4||wmysterio|wmysterio|wmysterio@yandex.ru|||Всем прива! Этот урок будет содержать в себе 2 темы. Одна тема общая как для программирования в c#, так и для скриптинга GTA 4 - это списки. Мы узнаем как создавать списки и рассмотрим некоторые примеры. Во второй части урока Вы узнаете как создать 2 скрипта для GTA 4 в одном файле. Списки очень похожи на массивы. Они могут содержать данные только одного типа данных, могут обращаться к элементам по индексу, но главное их отличие - динамическое изменение. если массивы имеют фиксированную длину, то списки более универсальны - длина может быть любой. Как уже было сказано, списки могут обращаться к данным по индексу: записывать и читать, но это возможно только в том случаи, если элемент был записан ранее. Шаблоном для объявления списка можно считать этот вариант:

List<int> MyList = new List<int>();

Мы указываем класс List, который будет содержать значения типа int, указанных в треугольных скобках. Имя списка пусть будет MyList. Далее мы пользуемся конструктором, чтобы создать объект класса. Так как списки динамичны, то и добавлять/удалять элементы можно также динамически. Чтобы добавить элемент нужно воспользоваться командой:

MyList.Add( 5 );

Внутри скобок мы указываем сущность, что будет добавлена в список. Тип этой сущности должен соответствовать типу самого списка. В данном случаи было добавлено число типа int. Чтобы удалить из списка элемент, нужно воспользоваться командой:

MyList.Remove( 5 );

Важно! Нужно указывать элемент, а не индекс! Чтобы удалить элемент по-индексу, нужно воспользоваться командой:

MyList.RemoveAt( 0 );

0 - это индекс существующего элемента. Таким образом из списка будет удалена пятёрка. Удалять также можно по диапазону. Для этого воспользуемся командой:

MyList.RemoveRange( 0, 1 );

Здесь: 0 - указываем начальную позицию(индекс); 1 - количество элементов от индекса, которых нужно удалить из списка. Чтобы удалить все элементы списка, достаточно выполнить процедуру очистки:

MyList.Clear();

Чтобы проверить количество всех элементов достаточно воспользоваться командой:

int a = MyList.Count;

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

MyList.Insert( 6, 15 );

Здесь: 6 - индекс в списке, куда нужно вставить элемент; 15 - сам элемент. Важно! Индекс всегда обязательно должен существовать. Иными словами на 6 позиции в списке уже должен существовать элемент. Исключением является индекс 0 - элементы будут помещаться в начало списка. Также есть возможность конвертировать список в массив. Для этого можно воспользоваться процедурой:

int[] IntList = MyList.ToArray();

Тип массива и тип списка должны совпадать. дальше с массивом можно делать всё что угодно. Хотел бы рассказать об одной полезной возможности, которая есть во многих стандартный классах коллекций: поиск элемента в коллекции. Чтобы найти первый элемент вхождения нужно применить команду:

int q = MyList.IndexOf( 30 );

Здесь: 30 - это элемент, который нужно найти в списке. q - в эту переменную будет возвращён ИНДЕКС первого вхождения. Если элемент не был найден, то в переменную будет возвращено число -1. Для поиска последнего вхождения элемента в список(последний индекс) нужно пользоваться:

int q = MyList.LastIndexOf( 30 );

Вторая часть урока будет ближе к СкриптХуку и здесь я объясню как сделать два скрипта в одном файле. Как известно скрипт будет считаться скриптом только в том случаи, если класс наследуется от Script. Из этого можно сделать вывод, что следующий код будет запускать сразу 2 скрипта:

namespace TestScript { public class Demo1 : Script { public Demo1() { } } public class Demo2 : Script { public Demo2() { } } }

Из этого можно провести аналогию, что namespace - это главный поток :MAIN из Sanny Builder, а Demo1 и Demo2 - созданные им потоки. Следовательно код выше можно сравнить с этим:

:MAIN thread 'MAIN' wait 0 // ... // ... // ... create_thread @Demo1 create_thread @Demo2 end_thread :Demo1 thread 'Demo1' wait 0 end_thread :Demo2 thread 'Demo2' wait 0 end_thread

Для полного сравнения напишем код для c# и Sanny Builder:

c#

** Sanny Builder**

namespace TestScript { public class Demo1 : Script { public Demo1() { Wait( 2000 ); Player.Character.Money += 10000; Game.DisplayText("Money gived"); } } public class Demo2 : Script { public Demo2() { Wait( 5000 ); Player.Character.Weapons.Uzi.Ammo = 500; Game.DisplayText( "Ammo gived" ); } } }

:MAIN thread 'MAIN' wait 0 // ... create_thread @Demo1 create_thread @Demo2 end_thread :Demo1 thread 'Demo1' wait 2000 Player.Money(0) += 10000 0ACE: show_formatted_text_box "Money gived" end_thread :Demo2 thread 'Demo2' wait 5000 01B2: give_actor $PLAYER_ACTOR weapon 28 ammo 500 0ACE: show_formatted_text_box "Ammo gived" end_thread

Внимание! С этого момента уроки по c# разбиваются на 2 русла. Первой будет идти непосредственно по СкриптХуку, второе - по программировании в c#, которое я буду вести параллельно с остальными. С Вами был wmysterio, пока!|1564|1|0|85711019png385`271||spiski_v_c_zapusk_neskolkikh_skritov_v_gta_4|1392798730

Last updated