[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Форум » ARMA3 » УГОЛОК КАРТОДЕЛА » Руководства » К.ОЗ.Л.И.К. (Руководство по редактору миссий для начинающих)
К.ОЗ.Л.И.К.
Chief Дата: Вторник, 21.10.2014, 13:38 | Сообщение # 1
Администраторы
АВТОР РУКОВОДСТВА DKennedy

Условия распространения
Данный текст является литературным произведением и охраняемым объектом авторского права. Использование данного текста (в том числе, его локальной версии) на других интернет-ресурсах, в том числе, в переводе на другие языки - [color=rgb(40,40,40);font-family:helvetica, arial, sans-serif;]разрешено при условии указания автора[/color], а так же - указания настоящих Условий в неизменном виде. В этом случае, согласия автора не требуется. Иное тиражирование данного произведения допустимо только с согласия автора.


Версия 1.0

Вашему вниманию представляется руководство по редактору АрмА 3 для начинающих или, иными словами, "Краткий ОЗнакомительный Ликбез Игрового Конструирования". Немного позднее, будет добавлена оффлайновая версия данного руководства и файл с примером миссии.

О чем это руководство?

Данный туториал рассчитан на первое знакомство с редактором ArmA 3, но, в отличие от большинства подобных руководств, мы начнем не с изучения интерфейса или написания «Hello, world!» на местном скриптовом языке. В этом Ликбезе мы будем работать непосредственно над созданием нашей первой собственной миссии, и в результате обязательно получим законченный готовый сюжет для одиночной игры (а с небольшими доработками - для кооперативной игры в компании). Мы на практике изучим все основные аспекты редактора — расстановку юнитов, раздачу им указаний к действию, обработчики игровых событий (триггеры) и создание простейших задач в брифинге.

На момент написания первой главы данного Ликбеза, с момента релиза ArmA 3 Alpha прошел всего один день, и данная версия игры поддерживает всего один язык — английский. Поэтому, будем ориентироваться на то, что видим в английской версии редактора, а в скобочках будут указаны приблизительные русские эквиваленты (из редактора ArmA 2).

Часть 1. Дислокация.

Откроем, наконец, редактор, щелкнув на кнопке EDITOR в главном меню игры и выбрав остров Stratis! Со времен предыдущих игр серии, редактор миссий претерпел небольшие косметические изменения — старые добрые текстовые меню заменены на зеленые пиктограммки. На момент Альфы, данные пиктограммки не имеют четкого текстового пояснения — поэтому, чтобы не путаться, предлагаю сразу переключиться в более классический вид. Для этого, нажмем кнопку Shoose editor's layout (крайняя правая в верхнем ряду), выберем Traditional и нажмем RESTART NOW, чтобы перезапустить интерфейс.

Итак, справа мы имеем выбор инструментов, сверху — стандартное меню сохранения-загрузки. Нажав на кнопку ADVANCED INTEL, мы сможем заняться настройкой погоды, но пока нас это не интересует. Навигация по карте происходит с зажатой правой клавишей мыши, масштаб изменяется колесиком.

Действия нашей первой миссии развернутся на Северо-Восточной оконечности острова — вблизи бухты Камино (Kamino bay), квадрат 065-049. Как видим, в бухте стоит небольшая постройка, а от нее к Северу в сторону маяка ведет грунтовая дорога. Здесь мы и расположим наш отряд!

Конечно, можно выставить всех бойцов по одному и потом объединить в группу, но иногда проще поставить сразу целое отделение. Выберите правом меню Groups (Группы) или просто нажмите F2. Затем, кликните два раза на пустом месте там, где начинается дорога, и вы увидите интерфейс создания групп -

В появившемся окне выберем SIDE – OPFOR (Сторона — Красные), FACTION – Red (Фракция — Красные), CLASS – Infantry (Класс — пехота) и UNIT – Infantry squad (Подразделение — Стрелковое отделение). А затем, нажмем ОК. Суть понятна — мы выбрали среди заранее заготовленных групп стрелковое отделение иранцев и поставили его на карту. Сейчас у нас не выбран игрок, и редактор нам об этом напомнит.

Скажем ему «CLOSE» (Закрыть) и сделаем двойной клик по третьему справа бойцу, именуемому Grenadier (Стрелок с ГП) перед нами откроется меню редактирования отдельного юнита. В нем нас интересует, прежде всего, пункт CONTROL (Контроль) в панели слева. Он имеет три опции — None (нет, бойцом будет управлять AI), Player (Этим юнитом будет управлять игрок) и Playable («Играет» Этим юнитом игрок может управлять. Все слоты в сетевой игре представляют собой юнитов с параметром Playable, а в одиночной — игрок имеет возможность переключаться в таких юнитов через меню выбора). Еще одно важное поле, которое мы заполним — это поле NAME (Имя). Это не то имя, которое отображается в игре, а условное имя, по которому к этому юниту смогут обращаться триггеры и скрипты. Зададим нашему протагонисту имя aP.

После этого, откроем аналогичным образом командира нашей группы и зададим ему имя Com. И прежде, чем нажать ОК, давайте окинем взором меню редактирования юнита.

SIDE (Сторона) — тут все очевидно. Может представлять собой BLUFOR (синие), они же НАТО, REDFOR (Красные), в их роли Иран. Independence (Независимые) — благородные греки, отважно отсутствующие в альфа-версии, Civilian (Гражданские) и Ambient life (Животные). На этом, список играбельных сторон закончен, а дальше идут Game Logic (о них - в свое время) и Empty (Пусто). Последняя сторона позволяет ставить на карту пустую технику, боеприпасы и прочие объекты.

CLASS – это класс юнита. Пехотинцы, бронетехника, авиация и так далее собраны по разным классам, а UNIT (Юнит) — это, собственно, тип самого персонажа или машины.

SPECIAL (Особенности) — здесь можно выбрать, появится юнит на карте в строю (In Formation) или будет стоять свободно (None). Для воздушных юнитов можно выбрать Flying (В полете), и тогда они появятся прямо в воздухе. А если в группе есть грузовой транспорт — можно выбрать In Cargo (В грузовом отсеке), тогда боец появится прямо в машине.

Назначение поля CONTROL мы уже поняли — здесь мы выбираем, кто будет игроком, а VEHICLE LOCK (Доступ) нужен для техники — позволяет поставить ее на карту закрытой. RANK – это Звание юнита. Юнит с более высоким званием автоматически становится командиром группы. AZIMUTH и ELEVATION – это направление и высота, на которой юнит появится. Справа есть колесо азимута, а в главном меню редактора можно крутить объекты, зажимая Shift.

В правом меню мы видим знакомое поле NAME, а ниже его INITIALIZATION – это очень важное поле, в него пишутся скриптовые команды. Если нам надо поменять юниту оружие, задать какие-то параметры, а то — и просто установить здоровье в ноль, чтобы создать на карте заведомый труп — все это обычно пишется в ините. SKILL (Уровень) — это уровень интеллекта AI, чем выше — тем умнее. PROBABILITY OF PRESENCE (вероятность присутствия) по умолчанию выставлена на 100%, но если мы захотим внести в миссию элемент случайности — можно его уменьшить.

А теперь, закроем меню игрока и укажем нашему отряду путь!

Одиночным щелчком по любому члену отряда, сделаем его активным, а затем — в правом меню выберем Waypoints (Вейпоинты) или просто нажмем F4. К северу от места нашей высадки расположен маяк — туда и назначим первую точку, два раза щелкнув.

В появившемся окне мы можем гибко редактировать поведение группы в движении. Оставим все поля по умолчанию кроме поля FORMATION (Построение) — там выберем Column (compact), в колонне нашему отряду будет проще подниматься в горку. Ах, да! Не лишним будет также поставить скорость движения на полную (SPEED – Full), чтобы маневр был более решительным.

Поле ON ACT. (По активации) позволяет нам выполнить разные скриптовые команды, когда группа достигнет этой точки. Пусть в нашем случае командир отряда (которого мы назвали Com, помните?) доложит на базу о занятии позиции для атаки. Впишем в это поле com sideChat "Base, this is Viper-1. We have reached the lighthouse! Over."; Поскольку в Альфа-версии игры поддержки русского языка и кирилицы нет — мы не сможем написать ничего по-русски, поэтому, давайте пока условимся на простых английских фразах. В данном случае, все должно быть понятно. Com – это мы обращаемся к соответствующему юниту, SideChat – это команда, заставляющая юнита сказать в синий чат фразу в кавычках «База, это Гадюка-1. Мы достигли маяка! Прием.»

Ну что же, если хотите — можно закрыть окно вейпоинта, нажать PREVIEW (Предпросмотр) и убедиться, что группа иранцев побежала в горку плотным строем, а по прибытии на место командир об этом доложил.

Давайте прямо сейчас сохраним нашу миссию, нажав в верхней панели Save (Сохранить) или просто Ctrl+S, если вы еще этого не сделали. Зададим ей имя, скажем — dk_tutor.
Прикрепления: 2761521.jpg (91.0 Kb) · 7227806.jpg (88.4 Kb) · 3696454.jpg (38.4 Kb) · 6894477.jpg (67.8 Kb) · 2301246.jpg (53.6 Kb) · 3254305.jpg (56.7 Kb) · 2235069.jpg (89.7 Kb) · 7709580.jpg (63.8 Kb)
 
Chief Дата: Вторник, 21.10.2014, 14:20 | Сообщение # 2
Администраторы
Часть 2. Противник.

Следующая маршрутная точка будет указывать на Kamino firing range, что под горой к Северу. В отличие от первого вейпоинта, тип этой точки будет SEEK AND DESTROY (Найти и уничтожить), а построение установим в Line (Цепь), чтобы наше отделение развернулось для атаки.

Установим на базе первую группу противников. Для начала, войдем в меню Units (F1), кликнем дважды неподалеку от центра базы. Юнит будет иметь сторону BLUFOR (Синие), Class – Men, юнит — Riffleman (Light). Звание (Rank) установим в Sergeant, чтобы он автоматически стал командиром группы. Рядом с ним разместим еще двоих-троих аналогичных бойцов, но в звании рядового (Private). Если эти бойцы помещены достаточно близко от сержанта — они автоматически свяжутся с ним голубыми линиями. Этой группе мы поставим вейпоинт прямо рядом, практически под ноги. Но тип (SELECT TYPE) выберем не MOVE (Перемещение), а SENTRY (Защищать). Это «умный» вейпоинт — с ним группа будет не просто стоять в указанной точке, а станет атаковать любого противника, замеченного союзниками, даже если сама его еще не видела.

Вокруг базы мы пустим патрули! Создадим пару синих бойцов слева от базы и добавим им вейпоинт MOVE (Перемещение) с параметрами SPEED – Limited (Скорость — ограничено), BEHAVIOUR – Safe (Поведение — Безопасно). Примерно в трех сотнях метров. Еще два аналогичных вейпоинта создадим в другой точке патрулирования и в начальной точке, образовав, таким образом, треугольник. А потом, недалеко от самого первого вейпоинта добавим точку с типом CYCLE (Зациклить). Обратите внимание, как она автоматически свяжется с первым вейпоинтом, если расположена достаточно близко.

Таким образом, патруль будет ходить по трем точкам по кругу. Скопируйте патруль вместе со всеми вейпоинтами клавишей Ctrl+C и клавишей Ctrl+V разместите на противоположной стороне базы. Так у нас будет выглядеть оборона базы в конечном итоге.

Итак, задача на бой у нас сформулирована, теперь надо как-то определить его результаты, чтобы миссия могла закончиться или идти дальше. Поэтому, теперь мы познакомимся с триггерами!

Триггер — это обработчик игровых событий, который при наступлении определенного условия запускает какое-то действие. Чтобы установить, что база захвачена, нам надо, чтобы выполнились два условия -


  • В зоне базы нет вражеских юнитов.


  • Территория базы занята своими войсками.

    Каждое из этих условий включит по одному триггеру, которые сделают истинными две соответствующих переменных. В третьем триггере мы будем ожидать, пока истинными станут обе переменные — тогда мы и определим, что база зачищена. Сложно? Нет, ни капли.

    Создадим первый триггер (кнопка F3, меню Triggers) в центре атакуемого военного лагеря. Размеры зоны задаются параметрами Axis X и Axis Y – установим их по 150 метров. Имя триггера установим как BAZA_BLUE и для удобства введем то же самое в поле TEXT, чтобы легко опознавать его на карте. Условием активации данного триггера будет отсутствие в его зоне солдат Синих. Поэтому, в поле ACTIVATION (Активация) выберем сторону BLUFOR (Синие), а ниже выберем Not present (Отсутствуют). Теперь определим, что произойдет, когда он активируется — нам нужно, чтобы истинной стала одна из переменных, назовем ее BaseIsClear. В поле ON ACT. (По активации) так и напишем BaseIsClear=true;

    Второй триггер сработает, когда в зону войдет кто-нибудь из Красных. Создадим триггер такого же размера, назовем его BAZA_RED, в поле ACTIVATION (Активация) выберем OPFOR (Красные) и на этот раз — Present. В поле ON ACT. напишем WeAreHere=true; Ну, то-есть, «мы здесь».

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

    Разместим его где-нибудь рядом и назовем BAZA_CLEAR. Радиус ему можно поставить нулевой — реагировать он будет не на юнитов, а на условия, написанные в строке CONDITION. Туда вписываем BaseIsClear and WeAreHere . А в поле ON ACT. Напишем следующее Leader aP sideChat "Ok! Now we must defend this place."; То-есть «Ок! Теперь нам необходимо защищать это место.» Почему в этот раз мы пишем «Leader aP», а не просто Com? Элементарно, в бою первоначального командира по имени Comмогли убить, а выражение Leader aP находит текущего командира игрока, и кто бы ни был в данный момент лидером — именно он и скажет эту фразу.

    Наверное, самое время запустить превью и посмотреть, все ли работает.

    Прикрепления: 5070040.jpg (93.4 Kb) · 1250099.jpg (62.8 Kb) · 6502975.jpg (73.2 Kb) · 6632660.jpg (90.2 Kb) · 6426036.jpg (82.1 Kb) · 4979956.jpg (91.2 Kb) · 5344018.jpg (88.1 Kb) · 8290482.jpg (57.0 Kb) · 6382037.jpg (86.3 Kb) · 1997134.jpg (58.5 Kb)
  •  
    Chief Дата: Вторник, 21.10.2014, 14:27 | Сообщение # 3
    Администраторы
    Часть 3. Подкрепление.

    Ну что же, нам удалось сделать выполнимой первую задачу, но давайте разовьем ход миссии дальше. Противник успел доложить о нападении, и теперь к базе выдвинулось подкрепление на броневике!

    Западнее атакуемой нами базы в квадрате 055-047 расположена постройка, а от нее ведет дорога к самому лагерю. Здесь и расположим группу подкрепления и ее машину. Установим здесь четверых бойцов команды Синих — на этот раз не раздетых стрелков с карабинами, а кого-нибудь посерьезнее, вроде пулеметчиков или солдат с ГП. Мы сформируем эту группу аналогично предыдущей — один из юнитов будет сержантом, а все поставленные возле него рядовые автоматически соединятся с ним линией. Если вы поставили солдата слишком далеко — не беда, вы можете нажать F2 (Группы) и провести тонкую голубую линию между ними вручную.

    Рядом мы поставим пустой автомобиль, в который они по тревоге заберутся. Сделав двойной клик на дороге в режиме F1, выберем SIDE - Empty (Сторона — пусто), Class – Cars (Класс — автомобили), Unit – Hunter (blue) (Юнит — Охотник (Синие)).

    Теперь нам надо сделать, чтобы группа начала движение не сразу, а только тогда, когда база будет нами захвачена. Поставим стандартный вейпоинт движения (MOVE) со скоростью «Полная» (Speed – Full) «под ноги» новой группе. Тепь выберем в меню (F5) Syncronization (Синхронизация), щелкнем на этом вейпоинте и протянем темно-синюю линию к недавно созданному триггеру BAZA_CLEAR.

    Как уже, наверное, понятно — группа не двинется дальше этого вейпоинта, пока не сработает связанный с ним триггер. Вейпоинты полезно временно блокировать, и делать это можно не только с помощью триггера, можно синхронизировать вейпоинты нескольких групп друг с другом — например, чтобы они подходили на позиции с разных сторон, но атаковали одновременно.

    Продолжим устанавливать маршрутные точки группе подкрепления! Следующий вейпоинт поставим непосредственно на машину, а тип его установим GET IN (Войти). Заметьте, что точка поставилась поверх машины, и если нам впоследствии понадобится «залезть под» путевую линию и открыть меню самого броневика — надо удерживать Shift.

    Итак, когда триггер сработает — группа сядет в броневик. В дальнейшем, нам достаточно только указать точку высадки неподалеку от базы, а как туда добраться, боты решат самостоятельно. Поставим вейпоинт GET OUT (Выйти) на дороге неподалеку от базы, а следующую точку для подкрепления поставим уже на самой базе и зададим ей тип SEEK AND DESTROY (Найти и уничтожить), чтобы бойцы попытались атаковать нашу группу. Поведение на последней точке (Behaviour) логичным будет поставить «В бою» (Combat), так как по нашей задумке, подкрепление уже знает, что их ждет контакт с противником.

    Кстати, в триггеры и вейпоинты мы можем добавлять эффекты, в частности — можно включить музыку в момент высадки подкрепления. Для этого, надо войти в соответствующий вейпоинт, нажать EFFECTS (Эффекты) внизу и выбрать трек. Кроме того, можно добавить кое-какого текста. Давайте сделаем это!

    Окей! Теперь добавим условие, которое окончит миссию, когда подкрепление будет уничтожено, а контратака — отбита. Для этого мы поставим триггер, который сработает, когда число юнитов в группе подкрепления будет равно нулю.
    Прикрепления: 3378591.jpg (68.1 Kb) · 1396462.jpg (57.3 Kb) · 8603267.jpg (51.3 Kb) · 7981921.jpg (105.9 Kb) · 3892943.jpg (100.3 Kb) · 2396878.jpg (87.7 Kb) · 3576291.jpg (49.3 Kb)
     
    Chief Дата: Вторник, 21.10.2014, 14:30 | Сообщение # 4
    Администраторы
    Часть 4. Победа.

    Вернемся к лидеру группы подкрепления и откроем его меню. В строке инициализации (INITIALIZATION) дадим название группе этого персонажа. Podkrep = Group this;А триггер, который будет считать количество юнитов, расположим рядом и назовем его END1. Условие активации (CONDITION) (count units Podkrep) == 0 . Но самое главное — это тип (TYPE) триггера! Тут мы выбираем End #1 (Конец # 1).

    Таким образом, когда количество юнитов группы Podkrep будет равно нулю — триггер сработает, и наступит финал миссии.

    Ну что ж, мы задумали сюжет миссии, создали ее логику и последовательность событий, поставили обрабатывающие эти события триггеры и создали финальный триггер — который завершает миссию.
    Прикрепления: 9516043.jpg (58.3 Kb) · 6515976.jpg (53.5 Kb)
     
    Chief Дата: Вторник, 21.10.2014, 14:42 | Сообщение # 5
    Администраторы
    Часть 5. Боевой приказ.

    Наша группа выходит на позицию, атакует лагерь противника, отражает контратаку — понятно. Но это нам понятно, а для игрока необходимо поставить условие, ведь сюжет он будет воспринимать из поставленных задач и заметок в дневнике!

    Редактор ArmA 3позволяет создавать брифинги относительно легко и непринужденно. Относительно предыдущих игр серии, конечно — там для этого необходимо было осваивать html и скриптовый язык. Теперь — нет, для создания обычного задания это не обязательно. Теперь нам помогают в этом Модули! Они доступны по горячей клавише F7.

    Модули устанавливаются на карте точно так же, двойным кликом. Некоторые из них можно и нужно синхронизировать клавишей F5с юнитами и другими модулями, как правило, эта логика интуитивно понятна.

    В целях создания брифинга, нас интересует несколько модулей, все они находятся в категории Intel (Разведка, сведения).


  • Create Task (Создать задачу) – создает саму задачу. Ей нужно задать название, внутриигровое имя и описание.


  • Set Task Destination (Установить точку назначения) – будучи синхронизирован с предыдущим, отмечает задачу на карте в месте своего нахождения (опция Module position). Либо его можно синхронизировать еще и с объектом — тогда на карте задача будет помечена там (опция Synchronized object).


  • Set Task State (Установить статус задачи) – устанавливает изначальный статус задания. По умолчанию, все имеющиеся задания имеют статус Created (создано), и в начале миссии имеет смысл сделать активным одно из них. Перечень статусов таков - Created (создано), Assigned (Назначено, задача отмечена галочкой), Succeeded (Выполнено успешно, отмечается зеленой галочкой), Failed (Провалено), Canceled (Отменено).

    Поместим на карту модуль Create Task рядом со стартовой точкой, и заполним его так. Task ID (ID задачи) — Zadacha1, это имя задачи, которое мы будем обрабатывать командами. Title (Название) - Reach the lighthouse («Достигнуть маяка»), Description – Take position («Занять позицию» - это краткое описание). Apply to – Synchronized object only (Применить к — только к синхронизированному объекту). Заполнив поля таким образом, синхронизируем этот модуль с игроком. Рядом поставим модуль Set Task State (Установить статус задачи) и синхронизируем его кнопкой F5 с предыдущим модулем. State (Статус) выберем Assigned (Назначено), поскольку это первое задание, и оно должно быть активно с самого начала. Дадим ему имя (NAME) – ASSIGNED, чтобы было наглядно.

    Рядом поставим такой же модуль, но со статусом Succeeded (Выполнено успешно) и так же свяжем его с модулем первой задачи. «Вторым концом» мы в последствии свяжем этот модуль с триггером, который будет отслеживать, что игрок забрался на маяк. Этому модулю тоже желательно дать имя, чтобы его было видно на карте.

    Как мы помним, о том, что отряд забрался на гору, нам сигнализирует команда в вейпоинте группы. К сожалению, синхронизировать модуль Succeeded с вейпоинтом нельзя, поэтому, создадим небольшой триггер диаметром 20 и с условием активации на присутствие Красных, а затем, свяжем его с нашим модулем.

    Изображение Изображение
    Должно быть понятно — по умолчанию у нас включится статус Assigned, а статус Succeeded связан с триггером и включится только тогда, когда и он.

    Вторая задача у нас состоит в том, чтобы зачистить базу от противника. Создадим еще один модуль Create Task, дадим ему имя и Task ID – Zadacha2. А в задании так и напишем — Attack base and kill em all. Эту задачу мы так же соединим с игроком и создадим для нее три модуля Set Task State (Установить статус задачи), синхронизировав их все, как и в прошлый раз, с основным.


  • Первый модуль будет задавать статус Created (Создано), ведь активной в начале миссии должна быть только первая задача.


  • Второй модуль будет задавать статус Assigned (Назначено), и привязан он будет к триггеру на маяке — ведь когда группа дойдет до точки, первое задание отметится выполненным, а второе нужно сделать текущим.


  • Третий модуль со статусом Succeeded (Выполнено успешно) свяжем с триггером BAZA_CLEAR. Помните, это тот, который включается при полностью зачищенной базе и запускает подкрепление?


    Наконец, третье задание — отразить контратаку.

    Создаем третий модуль Create Task, дадим ему имя и Task ID – Zadacha3. В названии и описании задачи так и напишем - Defend base, то-есть, «защитить базу». К нему так же три статуса.

  • Created (Создано)


  • Assigned (Назначено) – синхронизируем на триггер BAZA_CLEAR, ведь третье задание становится активным тогда, когда выполняется второе.


  • Succeeded (Выполнено успешно) — на триггер END1.


    Само собой, надо еще разок пробежать всю миссию и посмотреть, все ли срабатывает. Должно быть следующее.

    Начало миссии — активна первая задача, остальные неактивны.

    Группа достигла маяка — первая задача выполнена, вторая активна.

    База захвачена, готовимся к обороне.
    На этом, можно сказать, что наша первая миссия практически готова — теперь не только мы сами знаем, что в ней надо делать, а любой, кто способен прочитать пару строчек немудреного текста в нашем брифинге.
    Прикрепления: 5332098.jpg (54.1 Kb) · 3536604.jpg (80.1 Kb) · 8208622.jpg (58.3 Kb) · 9668747.jpg (95.5 Kb) · 4629098.jpg (59.4 Kb) · 6539132.jpg (97.9 Kb) · 1052291.jpg (64.4 Kb) · 5466785.jpg (110.6 Kb) · 4269928.jpg (95.5 Kb) · 9168034.jpg (95.5 Kb)
  •  
    Форум » ARMA3 » УГОЛОК КАРТОДЕЛА » Руководства » К.ОЗ.Л.И.К. (Руководство по редактору миссий для начинающих)
    • Страница 1 из 2
    • 1
    • 2
    • »
    Поиск: