RU/Resource:Assault

From Multi Theft Auto: Wiki

Assault - командный мод по типу "захватчик-защитник" наподобие Assault из Unreal Tournament. Когда цель одной команды - атаковать, чтобы достигнуть поставленной ей цели, другая обороняется. Когда атакующая команда достигает последней цели или истекает время, раунд кончается и стороны меняются местами. Команда, достигшая главной цели быстрее, выигрывает, если обе команды не укладываются по времени, объявляется ничья.

Вы без проблем сами можете создавать карты для Assault, расставив спавны, цели, объекты, машины и пикапы, как и на любой другой карте. Стандартные цели - обычные чекпоинты, до которых нужно добраться, но экспортированные функции позволяют скриптерам создавать все новые типы зачач. Для дополнительной информации читайте описание.

Как оно работает

  • В начале каждого раунда - ожидание игроков, либо определенный промежуток времени, либо пока не наберется определенное их количество.
    • Заход игроков за команды
  • Спавн игроков в зависимости от команды
  • team1 атакует и должна достичь одну или более целей (маркеров), когда team2 защищает эти позиции
    • если team1 достигла цели, респавны могут поменяться в зависимости от новой цели
  • если достигнута последняя цель, первый раунд оканчивается и теперь team2 должна атаковать (карта та же)
    • ограничением по времени для второй команды будет время, за которое team1 смогла достигнуть последней цели

Присуждение победы

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

Создание карты для Assault

Assault работает с mapmanager, что делает создание дополнительных карт проще. Он также вызывает события специфических картовых скриптов и предоставляет функционал для вызова специфических целей.

Если вы хотите создать простую карту без дополнительного кода или специфических целей, вы можете приступить к чтению главы #Элементы карты.

События/Функции

onAssaultObjectiveReached ( table objectiveReached, table players )

Вызывается при достижении цели (когда она краснеет).

  • objectiveReached: Таблица со всеми атрибутами, данными в файле-карте (см. #Цели)
  • players: Таблица всех игроков, которые были в маркере, когда он был активирован
onAssaultStartRound ( team attacker )

Вызывается со стартом раунда (спавном игроков), 'attacker' - атакующая команда.

  • attacker: Элемент team, играющий роль атакующей команды
onAssaultCreateObjective ( table objectiveToCreate )

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

  • objectiveToCreate: Таблица со всеми атрибутами, данными в файле-карте (см. #Цели)
onAssaultEndRound( bool conquered )

Вызывается с окончанием раунда (вышло время или последняя цель выполнена)

  • conquered: Если атакующая команда достигла все цели, true, иначе false.
bool triggerObjective( string objectiveId, [table players] )

Используется для вызова цели. Возвращает true, если она может быть вызвана, иначе false.

  • objectiveId: (требуется) id (объявленный в .map-файле) цели.
  • players: Таблица со всеми игроками, ответственными за активацию цели.

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

Основные настройки Assault

(для версии 1.1)

Эти настройки могут быть указаны в settings meta.xml Assault'а .

  • teamBalance: Отвечает за количество игроков, которое может быть в каждой из команд. Например, если установить '1', когда в Team Blue их 2, а в команде Team Red 1, новые игроки не смогут зайти за Team Blue. Если бы оно было установено на '2' в этой же ситуации, к Team Blue мог бы присоединить еще 1 игрок. (по умолчанию: 1)

Элементы карты

Для создании карты на Assault, все эти элементы обязательны.

Основные настройки карт

(для версии 1.1, в 1.0 только некоторые из них могут быть заданы в meta.xml)

Все эти настройки могут быть указаны в settings meta.xml или в элементе assaultSettings файла-карты. Настройки в meta.xml всегда перекрывают настройки файла-карты.

Чтобы указать настройки в файле meta.xml, они должны выглядеть примерно следующим образом:

<meta>
	<info author="driver2" type="map" gamemodes="assault" />
	<map src="as-area51.map" />
	<script src="as-area51.lua" />

	<settings>
		<setting name="#author" value="driver2" />
		<setting name="#timelimit" value="300" />
		<!-- more settings.. -->
	</settings>
</meta>

Чтобы указать настройки в файле-карте, включите в него assaultSettings:

<assaultSettings timelimit="(int=300)"
		 finishType="(string)" 	finishObjective="(string)"
		 time="(time=12:00)" 	weather="(int=0)"
		 author="{string=''}" 	description="{string=''}" />

Требуемые атрибуты

нет

Опциональные атрибуты

  • finishObjective: Отвечает за (id) цели, который должен быть достигнут атакующими для завершения раунда. Если оставить пустым, все цели должны будут быть достигнутыми.
  • finishType: Вы можете указать finishType вдобавок к finishObjective (в версии 1.0 это требуется)
    • "objective": когда достигнута определенная цель
    • "all": когда все цели достигнуты

Если timelimit, time, weather, author или description setting указаны в файле meta, они перекроют атрибуты в этом элементе (версия 1.0)

  • timelimit: длительность раунда в секундах (по умолчанию: 300)
  • time: время часы:минуты (по умолчанию: 12:00)
  • weather: id погоды (по умолчанию: 0)
  • author: автор карты (по умолчанию: "")
  • description: описание карты (по умолчанию: "")
  • defenderText: Текст, который будет отображен в нижней части экрана, говорящий, что делать обороняющимся. Если текст указан здесь, он будет установлен по умолчанию для этой карты, но будет иметь возможность быть перекрытым отдельными целями через указание соответствующего атрибута в ее элементе. (по умолчанию: "Prevent attackers from reaching their objectives!")
  • attackMessage: Сообщение, показываемое при спавне атакующему (по умолчанию: "Assault the base!")
  • defendMessage: Сообщение, показываемое при спавне обороняющемуся (по умолчанию: "Defend the base!")
  • conqueredMessage: Это сообщение замещает часть сообщения, показываемого при успешном достижении целей атакующими (по умолчанию: "conquered the base")
    • Это сообщение заместит часть примера, заключенную в скобки: "Red [conquered the base] in 4:39"
  • defendedMessage: Это сообщение замещает часть сообщения, показываемого при успешной защите целей (по умолчанию: "defended the base")
    • Это сообщение заместит часть примера, заключенную в скобки: "Blue [defended the base]. Blue wins."

Рекомендуется менять эти сообщения, только если они не имеют (или имеют мало) смысла для вашей карты, чтобы хранить формат сообщений более менее одинаковым для карт.

Цели

<objective name="(string)" description="(string)" successText="(string)" id="(string)" req="(string)"
		posX="(float)" posY="(float)" posZ="(float)" stay="{int=0}"
		forcedRespawn="{string=none}" markerType="{string=cylinder}" captureType="{string=foot}" />

Порядок целей в .map-файле значим. Он отвечает за порядок отображения их на hud'е, а в том числе и на GUI.

Требуемые атрибуты

  • posX, posY, posZ: (required) позиция цели

Опциональные атрибуты

  • name: имя цели, используемое для показа на экране
  • description: может использоваться во вспомогательных окнах или быть отображенным в нижней части экрана, чтобы говорить, что делать атакующим
  • successText: показан при достижение цели, используйте переменную ~team~ для имени команды атакующих
    • по умолчанию: Цель name достигнута
    • Если name и successText не указаны, при достижении цели не будет отображаться никаких сообщений
  • id: уникальный идентификатор цели
  • req: цели, необходимые для доступа к этой цели, ids разделяются запятой, напр. req="door,room1,room2"
  • type: тип задачи
    • "checkpoint": (по умолчанию) assault создает чекпоинт на локации, который должен быть активирован атакующими путем захода внутрь него
    • "custom": assault ничего не делает кроме ожидания вызова его другим скриптом (см. другие карты assault, чтобы увидеть, как это сделано)
  • forcedRespawn
    • "both": заставить всех игроков зареспавниться сразу при создании новой цели
    • допустимы другие значения
  • markerType: отвечает за тип маркера, используемый для пометки цели (см. CreateMarker для возможных значений)
  • captureType: отвечает за то, как цель может быть активирована
    • "both": и пешком, и на трансопртном средстве
    • "foot": только пешком
    • "vehicle": только внутри транспортного средства
  • stay: число секунд, которое игроку нужно находиться на цели
  • stayText: текст, показываемый над полоской прогресса, когда стоите на цели
  • defenderDescription: Этот текст показывается в нижней части экрана, чтобы сказать, что делать обороняющимся (по умолчанию: атрибут defenderText элемента #Основные настройки карт)
  • successTextForDefender: Этот атрибут может перекрыть атрибут successText для обороняющихся

Группы спавнов

<spawngroup type="(string)" req="(string)">
- добавляйте спавны сюда -
</spawngroup>

Группа спавнов - комплект из одной или нескольких местностей для спавнов. Одна из местностей для спавнов будет выбрана случайным образом при респавне. Вы можете этим воспользоваться, чтобы, например, позволить атакующим игрокам наступать с разных сторон или позволить некоторым игрокам спавниться с другим оружием. Последняя группа спавнов (по порядку в файле-карте), удолетворяющая требованиям 'req', используется для спавна игроков.

Требуемые атрибуты

  • type:
    • "attacker": группа спавнов для атакующей команды
    • "defender": группа спавнов для обороняющейся команды

Опциональные атрибуты

  • req: id цели, разделенные запятой, требуемые для работы данного чекпоинта


Места для спавна

<spawnarea posX="(float)" posY="(float)" posZ="(float)" sizeX="(int=2)" sizeY="(int=2)" skins="{int,int=0}" weapons="{int,int;int,int=''}" radius="{int=2}" shape="{string=circle}" />

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

Требуемые атрибуты

  • posX, posY, posZ: позиция

Опциональные атрибуты

  • skins: лист скинов, которые выбираются случайным образом, разделяется запятой, диапазон скинов разделяется дефисом (напр. 10,14,20-24 будут 10,14,20,21,22,23,24)
  • weapons: weapon1,ammo1;weapon2,ammo2;weapon3,ammo3..
  • shape
    • "circle": (по умолчанию) круг
    • "rectangle": прямоугольник
  • sizeX, sizeY: если shape="rectangle", то эти значения - наибольшие, которые смогут быть прибавлены к координатам по X или Y соотвественно
  • radius: если shape="circle", радиус круга

Камеры

Вам нужно объявить по одной камере каждого типа для правильной карты assault.

<camera type="(string)" posX="(float)" posY="(float)" posZ="(float)" targetX="(float)" targetY="(float)" targetZ="(float)" />

Требуемые атрибуты

  • posX, posY, posZ, targetX, targetY, targetZ: позиция и направление
  • type: отвечает за тип камеры, который зависит от ее сути
    • "spawn": после выбора команды и до спавна
    • "selectTeam": экран выбора команды
    • "finish": когда достигнута последняя цель

Опциональные аргументы

(нет)


Дополнительная информация

  • Если вы не хотите респавна определенного транспортного средства assault'ом, установите его значение Elementdata, называющееся 'noRespawn', на true скриптом или через добавление атрибута noRespawn="1" к элементу в файле-карте. Запомните, что тогда оно никогда больше автоматичсеки не зареспавнится, так что если вы захотите вернуть его на место, например, по окончанию раунда или при его взрыве, вам придется сделать это самому.