Приветствую Вас Гость | RSSГлавная | Миссия моей мечты, часть 3 - Форум | Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Миссия моей мечты, часть 3
RaseriДата: Понедельник, 04.11.2013, 16:06 | Сообщение # 1
Краб
Группа: Добрый Модератор
Награды: 18  +
Репутация:  ±
Замечания:  ±
Статус: Offline
Всем привет smile
В этой статье я покажу, как заспавнить тот самый ящик с подкреплением и как получше оформить расстановку войск перед сражением smile
Начну, пожалуй, с последнего smile

Если вы читали предыдущий урок, то вы видели, что для каждого из акторов был свой кусок кода, который задавал ему все нужные параметры.
Это работает, но выглядит очень громоздко, и если бы мне пришлось добавить, скажем, десяток солдат, то я бы просто захлебнулся в коде smile
Сейчас я покажу, как это сделать по-другому, через таблицы и цикл.

Начнём с того, что создадим переменную и присвоим ей пустую таблицу:
self.StartingTroopsPlayer = {};
Да, вот так вот просто.
В луа переменные могут создаваться в любом месте кода, их не нужно как-то специально заранее задавать или описывать их тип.
Тип переменных в луа изменяется динамически, в зависимости от того, какое значение этой переменной присвоено.

Теперь, мы поместим в таблицу несколько текстовых значений.
self.StartingTroopsPlayer = {"PosX", "PosY", "HFlipped"};
Это самая простенькая, одномерная таблица, у неё один ряд и три столбца (3 значения, 3 ячейки).

$IMAGE1$

Чтобы, например, вывести в консоли содержимое 2-й ячейки, мы должны написать:
print(self.StartingTroopsPlayer[2]);
В консоли будет красоваться - PosY.
Без кавычек.
Кавычки здесь... нужны просто для того, чтобы компьютер понимал, что перед ним текстовые значения.
Если мы будем заносить в таблицу какие-то числа или логические переменные, то кавычки нам не понадобятся.

    Важное замечание:
Цифра [2], в этих самых квадратных скобочках - это индекс, или номер позиции в таблице.
Когда мы хотим получить из таблицы какое-то значение, мы его ищем по индексу.
Передаём таблице индекс - получаем хранящееся по нему значение.
Так все крутые программисты говорят, так что запомните biggrin


Теперь мы создадим двухмерную таблицу.
Чтобы это сделать, мы напишем следующее:
self.StartingTroopsPlayer[1] = {324, 529, 440}; -- позиция X
self.StartingTroopsPlayer[2] = {}; -- позиция Y
self.StartingTroopsPlayer[3] = {true, false, false}; -- обращён направо или налево

То есть мы превратили все три значения, хранящиеся в "self.StartingTroopsPlayer", в новые таблицы, а две из них сразу заполнили значениями.
Первую - числами, третью - логическими значениями.

То, что мы натворили, соответствует такой вот картинке:

$IMAGE2$

    Важное замечание:
Только что мы сделали не более и не менее, чем заменили старые текстовые значения на новые значения, которые являются таблицами.
Текстовые значения "PosX", "PosY" и "HFlipped" пропали, в этой таблице их больше нет.
Добавил я их исключительно с целью постепенно раскрыть перед читателем суть таблиц, от простого к сложному smile


Если мы захотим вывести в консоль, например, позицию Х третьего по счёту актора, то мы должны написать:
print(self.StartingTroops[1][3]);
Первый числовой индекс указывает на таблицу со всеми записанными координатами Х, а второй индекс указывает на уже конкретное значение.

Надеюсь, это всё приблизило вас к пониманию устройства таблиц в луа и поможет вам с ними работать smile
Вот как, быстренько и кратенько, оформил таблицы я:
Код
-- задаём данные для войск игрока
          self.StartingTroopsPlayer = {};
          self.StartingTroopsPlayer[1] = {324, 529, 440, 400, 408, 384, 356, 450, 48, 72, 208, 54}; -- коорд. X
          self.StartingTroopsPlayer[2] = {804, 529, 540, 566, 651, 648, 648, 670, 876, 900, 857, 712}; -- коорд. Y
          self.StartingTroopsPlayer[3] = {true, false, false, false, true, true, false, true, false, false, true, false}; -- направление взгляда
                
          -- для вражеских войск
          self.StartingTroopsAI = {};
          self.StartingTroopsAI[1] = {761, 761, 768, 708, 718, 780, 764, 1121, 960, 1130, 712, 752, 702};
          self.StartingTroopsAI[2] = {379, 379, 379, 504, 504, 504, 308, 329, 588, 657, 704, 704, 437};
          self.StartingTroopsAI[3] = {true, true, true, true, true, true, true, false, true, false, false, true, true};


Здесь, как вы видите, есть данные и для войск игрока, и для вражеских войск.
И сейчас я займусь спавном и того, и другого smile
Код
-- спавн войск игрока
          for i = 1,12 do -- цикл выполнится 12 раз (по количеству солдат и значений в таблице)
              self.soldier = CreateAHuman("Whitebot","Techion.rte");
              self.soldier.Team = 0;
              self.soldier.Pos = Vector(self.StartingTroopsPlayer[1][i], self.StartingTroopsPlayer[2][i]);
              self.soldier.HFlipped = self.StartingTroopsPlayer[3][i];
              self.soldier:AddInventoryItem(CreateHDFirearm("Micro Pulsar","Techion.rte"));
              self.soldier.AIMode = Actor.AIMODE_SENTRY;
              MovableMan:AddActor(self.soldier);
          end
                
          -- спавн войск противника
          for i = 1,13 do
              self.soldier = CreateAHuman("Soldier Light","Coalition.rte");
              self.soldier.Team = 1;
              self.soldier.Pos = Vector(self.StartingTroopsAI[1][i], self.StartingTroopsAI[2][i]);
              self.soldier.HFlipped = self.StartingTroopsAI[3][i];
              self.soldier:AddInventoryItem(CreateHDFirearm("Compact Assault Rifle","Coalition.rte"));
              self.soldier.AIMode = Actor.AIMODE_SENTRY;
              MovableMan:AddActor(self.soldier);
          end


Если этот код вызывает затруднения с пониманием, то просто сравните его с тем, что давался в прошлой статье smile

Теперь давайте заспавним ящик с подкреплением.
Для этого мы должны:
1) Создать ящик и задать ему необходимые параметры
2) Создать актора, задать режим ИИ и команду, а также дать ему оружие
3) Добавить актора в "инвентарь" ящика
3) Заспавнить ящик

Вот как это делается:
Код
-- спавн ящика с подкреплением
          local dropcrate = CreateACRocket("Drop Crate","Dummy.rte");
          dropcrate:SetControllerMode(Controller.CIM_AI, -1); -- даём команду на "доставку" содержимого
          dropcrate.Team = 0;
          dropcrate.Pos = Vector(165, -20); -- координата Y отрицательная, для того чтобы ящик появился из-за границы экрана
          local soldier = CreateAHuman("Whitebot","Techion.rte");
          soldier:AddInventoryItem(CreateHDFirearm("CA-01 Firestorm","Browncoats.rte"));
          soldier:AddInventoryItem(CreateHDFirearm("Heavy Digger","Base.rte"));
          soldier:AddInventoryItem(CreateHDFirearm("Heavy Digger","Base.rte"));
          soldier.Team = 0;
          soldier.AIMode = Actor.AIMODE_SENTRY;
          dropcrate:AddInventoryItem(soldier); -- загружаем в ящик солдата
          MovableMan:AddActor(dropcrate); -- спавним ящик

Результат всех наших действий:

$IMAGE3$

С самого начала игры трое стоящих наверху вайтботов провоцируют шквальный огонь со стороны войск коалиции, демонстрируя, что просто так пробраться поверху не получится smile
Как же сладко они разлетаются на куски, хе-хе-хе biggrin

Думаю, в этой статье было дано достаточно много материала для изучения и освоения, так что на этом я, пожалуй, пока что ограничусь.
В прикреплении к посту вы традиционно сможете найти мод с миссией - смотрите, задавайте вопросы, вам на всё ответят и со всем помогут smile
Также, если вы хотите побольше узнать о языке программирования Луа, добро пожаловать вот в эту темку:
http://cortexcommandru.3dn.ru/forum/67-801-1
Самые основы там можно почерпнуть просто наотличненько :3

Ах да, кстати, кроме того кода, что я привёл в статье, я также дописал спавн двух турелей для коалиции и одного дрона в подвале, для защиты того, что в будущем станет командиром этого поста.
Это чтоб вы не удивлялись smile
 
  • Страница 1 из 1
  • 1
Поиск:
Статистика Форума
Последние темы Читаемые темы Последние зарегистрированные пользователи
Флудильня! [gjrfytn]

Туториал - ваш первый актор. [denys2005]

Mercury Incorporated [Dart_Veder]

Глобальные скрипты Rainstorm, Huge Heads и Drifting Souls [vendetta00790]

Incendiary Liquid [Blump]

Magic Potions and Other Alchemical Stuff [Blump]

Песенки или музыка. [puksus]

Techion Warpbot [Blump]

The Military Forces [draconix]

W.P.N. Technologies {B30} [JaKe]

[1]>Флудильня! [129]

[2]>[UNITED TERRAN FORCES] [54]

[3]>Фан-арт по Cortex Command [27]

[4]>Teinloss Terrorist Squad [19]

[5]>The Military Forces [17]

[6]>Corporation of Improbable Researches v0.7.5 [17]

[7]>Черный легион [17]

[8]>District 9 Multi-National United (MNU) [15]

[9]>Песенки или музыка. [14]

[10]>HOKMT [13]

Dimasik [24.10.2024|21:30]

space-pay [09.10.2024|00:20]

tonyrose2003 [02.07.2024|06:03]

ktota12345678 [23.06.2024|20:14]

BlackShadow7755 [11.04.2024|22:28]

ghost4559 [28.03.2024|12:29]

rostislavpoarkov55 [21.03.2024|10:44]

dawidponomaryow [08.03.2024|21:16]

nekoplay18 [31.01.2024|20:10]

Provv [19.10.2023|20:58]


Вверх
Русский Фан Сайт Cortex Command © 2024.