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|85711019png
385`271||spiski_v_c_zapusk_neskolkikh_skritov_v_gta_4|1392798730
Last updated