Изменение характеристик оружия

gosu
No Grade Newbie
Аватара пользователя
Сообщения: 33
Зарегистрирован: 21 фев 2009, 18:11
Откуда: Россия, Москва
Контактная информация:

16 мар 2014, 22:58

Это руководство предназначено для того, чтобы дать пользователям возможность изменять существующее оружие при минимальных знаниях в области UnrealScript. Оно написано с точки зрения изменения атрибутов стандартного оружия из однопользовательского мутатора, а именно:

Код: Выделить всё

class AlteredWeaponMut extends Mutator;
function PostBeginPlay()
{
class'Single'.default.ItemName = "Handgun";
}
defaultproperties
{
GroupName="KFAlteredWeaponMut"
FriendlyName="Altered Weapon Mutator"
Description="Пример мутатора, который демонстрирует, как изменить существующее оружие."
}

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

Семантика классов

Я хотел бы заострить внимание на том, что значат различные классы, используемые для предметов инвентаря вообще и как они относятся друг к другу:

Weapon – это класс оружия в инвентаре, который содержит общую информацию. Например, когда предмет должен появиться в инвентаре, его название и вес. Содержит соответствующие ссылки к классам WeaponPickup, WeaponAttachment и FireMode. Также этот класс отвечает за то, как оружие будет отображаться от 1-го лица. Примером данного класса является 'Single'.

WeaponPickup – Отображаемая модель оружия, когда оно (оружие) лежит где-то в игровом мире, вне инвентаря игрока (это касается и торговца). Содержит информацию о названии оружия, сколько боеприпасов (и их количество) расходуется при стрельбе и т.д. Примером этого класса является 'SinglePickup'.

WeaponAttachment – Отвечает за то, как оружие отображается от 3-го лица (и как будут видеть его другие игроки со стороны). Примером данного класса является ‘SingleAttachment’.

FireMode – Класс отвечает за то, какой режим огня имеет оружие, какой боезапас использует, какой урон наносит и тому подобные, связанные с этим вещи. Оружие может иметь два режима огня и необязательно один из них может быть наступательным (например, альт. огонь beretta 9mm (по-умолчанию это ПКМ) включает фонарик). Примером данного класса является 'SingleFire'.

Ammo - Класс отвечает за то, сколько боеприпасов оружие может иметь, сколько изначально содержит, и сколько боезапаса вы получаете, когда подбираете ящик с боеприпасами. Примером данного класса является 'SingleAmmo'.

AmmoPickup – Используется для того, чтобы указать, сколько боезапаса пополняет тот или иной вид подбираемого ящика с боеприпасами (например, 9mm патроны, лежащие на земле). Примером данного класса является 'SingleAmmoPickup'.

Projectile – Используется для указания типа используемых оружием боеприпасов (дробь, арбалетный болт, ракета и т.п.), а также описывает скорость полета снаряда, наносимые им повреждения и другую информацию. Примером данного класса является 'CrossbowArrow'.

Изменение названия оружия

Для того чтобы переименовать оружие, вам нужно изменить несколько переменных, расположенных в разных местах:

1) Отображаемое имя оружия в HUD:

Код: Выделить всё

class'Single'.default.ItemName = "9mm Tactical";

9mm Tactical будет являться именем оружия, которое отображается в HUD.

2) Панель закупки в магазине:

Код: Выделить всё

class'SinglePickup'.default.ItemName = "9mm Pistol";

9mm Pistol будет являться именем оружия, которое будет отображаться в магазине.

3) Панель инвентаря в магазине. Это должна быть короткая версия имени оружия:

Код: Выделить всё

class'SinglePickup'.default.ItemShortName = "9mm Pistol";

9mm Pistol будет являться коротким именем оружия, которое будет отображаться в инвентаре игрока (в том числе и в магазине).

Режимы стрельбы

Переключение между полуавтоматическим и автоматическим режимами стрельбы. Всё завязано на изменении переменной, отвечающей за это (true=полуавтомат,false=автомат):

Код: Выделить всё

class'SingleFire'.default.bWaitForRelease = true;

Если установлено значение true, то для стрельбы надо будет нажимать на кнопку, иначе (значение flase) - достаточно зажать кнопку для стрельбы.

Урон

Урон определяется в зависимости от того, какой тип заряда использует оружие – мгновенный выстрел (например, выстрел из любого пистолета) или снаряд (например, выстрел из арбалета):

1) Если тип заряда - мгновенный выстрел (например, в случае с пистолетами):

Код: Выделить всё

class'SingleFire'.default.DamageMax = 32;

32 – максимальный показатель урона (без учёта множителей).

2) Если тип заряда - снаряд(например, болт арбалета или ракета L.A.W)

Код: Выделить всё

class'CrossbowArrow'.default.Damage = 300;

300 – неизменный показатель урона (т.е. без учета множителей).

3) Снаряды, являющиеся производными ShotgunBullet:

Код: Выделить всё

class'BoomStickBullet'.default.HeadShotDamageMult = 1.5;

1.5 – множитель урона от попадания дроби в голову.

4) Болт арбалета использует ту же переменную, но не является производной ShotgunBullet:

Код: Выделить всё

class'CrossbowArrow'.default.HeadShotDamageMult = 6.0;

6.0 – множитель урона от попадания болта в голову.

5) Для другого оружия множитель урона в голову определяется самим классом:

Код: Выделить всё

class'DamTypeM14EBR'.default.HeadShotDamageMult = 2.0;

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

Скорость стрельбы

Состоит из двух переменных, которые вы можете изменять:

1) Темп стрельбы. Это, по сути своей, задержка между выстрелами (значение 0.5 = 2 выстрела в секунду):

Код: Выделить всё

class'SingleFire'.default.FireRate = 0.5;

2) Значение скорости для анимации стрельбы. Используется как множитель скорости анимации стрельбы по-умолчанию (0,5 - скорость в 2 раза меньше, 1 - обычная скорость, 2 - удвоенная скорость):

Код: Выделить всё

class'SingleFire'.default.FireAnimRate = 1.5;

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

Отдача

Если вы изменяете скорость стрельбы, то также уделите внимание изменению значения отдачи:

1) Частота отдачи (т.е. скорость получаемой отдачи). Значение должно быть меньше значения темпа стрельбы (см. спойлер выше, пункт 1):

Код: Выделить всё

class'SingleFire'.default.RecoilRate = 0.07;

2) Максимальное значение вертикального угла отдачи:

Код: Выделить всё

class'SingleFire'.default.MaxVerticalRecoilAngle = 300;

Чем больше значение, тем выше отдача может увести прицел вверх.

3) Максимальное значение горизонтального угла отдачи. Как правило, меньше вертикального угла отдачи:

Код: Выделить всё

class'SingleFire'.default.MaxHorizontalRecoilAngle = 50;

Чем больше значение, тем сильнее прицел будет уводить в стороны при стрельбе.

Точность

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

1) Базовая величина разброса. Значение разброса пуль при начале стрельбы:

Код: Выделить всё

class'SingleFire'.default.Spread = 0.015;

0.015 - значение разброса первой пули.

2) Максимальный разброс. Влияет на предельное значение которого может достигнуть разброс. После каждого последующего выстрела, интервалом в 0,5 секунд заданного значения, разделенное на 6 добавляется к текущему значению разброса. Другими словами, если вы сделаете 6 выстрелов и временной интервал между ними (выстрелами) будет 0.5 секунд, то вы достигнете максимального значения разброса:

Код: Выделить всё

class'SingleFire'.default.MaxSpread = 0.12;

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

Прицеливание

Прицеливаться можно из совершенно любого оружия (через мушку либо через встроенный/прикрепленный прицел). Следующие переменные влияют на интенсивность прицела (то есть эффективную возможность приближения прицела к экрану и возможность изменять кратность прицела):

1) Будет ли оружие иметь возможность увеличивать кратность прицела:

Код: Выделить всё

class 'single'.default.bHasAimingMode = true;

Если значение true, то возможность регулирования кратности прицела есть. Иначе (т.е. значение false) - такой возможности не будет.

2) Как оружие будет отображаться в руках, если не прицеливаться. Чем больше значение, тем дальше от камеры игрока будет визуально отображаться оружие в руках, а так же эта переменная является значением угла FOV (Field Of View - поле зрения) по-умолчанию:

Код: Выделить всё

class 'single'.StandardDisplayFOV = 70.0;

3) Значение интенсивности прицела (на какое расстояние можно приблизить прицел), так же определяется как угол FOV. Низкое значение этой переменной приводит к увеличению кратности прицела:

Код: Выделить всё

class 'single'.ZoomedDisplayFOV = 65.0;

4) Как оружие будет отображаться при прицеливании. И опять же, определяется как угол FOV. Это значение лучше оставить как есть, от этого вы ничего не потеряете:

Код: Выделить всё

class 'single'.PlayerIronSightFOV = 75.0;

Боезапас

Для определения боезапаса используется несколько переменных:

1) Сколько боезапаса можно переносить для оружия в одно время:

Код: Выделить всё

class 'SingleAmmo'.default.MaxAmmo = 240;

2) Начальное значение боезапаса оружия при появлении с ним/покупке в магазине (без дополнительной покупки патронов к оружию):

Код: Выделить всё

class 'SingleAmmo'.default.InitialAmount = 120;

3) Количество пополняемых патронов при поднятии коробки с боеприпасами:

Код: Выделить всё

class 'SingleAmmo'.default.AmmoPickupAmount = 30;

4) Количество пополняемых патронов при поднятии коробки с конкретным типом боеприпасов (например, ящик с ракетами или сумка с болтами):

Код: Выделить всё

class 'SingleAmmo'.default.AmmoAmount = 20;

Сообщение о подборе

Это сообщение появляется, когда вы подбираете лежащее на карте оружие:

Код: Выделить всё

class 'SingleAmmo'.default.PickupMessage = You got another 9mm Handgun.

Подбирая оружие, внизу по середине экрана будет появляться следующий текст - You got another 9mm Handgun.

Торговец

Здесь список важных переменных, используемых в магазине (меню торговца):

1) Сумма, необходимая для покупки оружия:

Код: Выделить всё

class'SinglePickup'.default.Cost = 1000;

1000 - стоимость определенного оружия.

2) Стоимость одной обоймы:

Код: Выделить всё

class'SinglePickup'.default.AmmoCost = 10;

3) Размер покупаемой обоймы:

Код: Выделить всё

class'SinglePickup'.default.BuyClipSize = 30;

Кроме того, есть три переменные, показывающие статистику оружия в магазине (максимальное значение - 100). Важно помнить, что статистика оружия может не быть точной и не соответствовать действительности:

4.1) Мощность оружия - какой урон оружие наносит:

Код: Выделить всё

class'SinglePickup'.default.PowerValue = 20;

4.2) Скорострельность - с какой частотой оружие может стрелять:

Код: Выделить всё

class'SinglePickup'.default.SpeedValue = 50;

4.3) Дальность стрельбы:

Код: Выделить всё

class'SinglePickup'.default.RangeValue = 35;

Информация об инвентаре

Пускай это далеко не самые важные переменные, но написать о них не будет лишним:

1) Отношение предмета к определенной группе:

Код: Выделить всё

class'Single'.default.InventoryGroup = 2;

Обычно в разных категориях лежат похожие по параметрам предметы:
1 - Оружие ближнего боя;
2 - Пистолеты;
3 - Основное оружие;
4 - Особое (зачастую, довольно мощное и тяжёлое);
5 - Подручные инструменты (то, что не всегда используется как оружие для уничтожения, но находит своё применение для поддержки команды);
При создании оружия, старайтесь выбрать категорию так, чтобы в процессе игры его (оружие) было удобно доставать и не вызывало у игроков путаницы в инвентаре.

2) Приоритет оружия в инвентаре. Какое оружие из определенной группы будет доставаться из инвентаря ранее остальных:

Код: Выделить всё

class'Single'.default.Priority = 3;

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

3) Общий приоритет предмета (не путать с переменной выше). Будет ли изменятся оружие в руках на подобранное. Если приоритет подбираемого предмета выше приоритета предмета в руках, то подбираемый предмет заменит тот, что был в руках на момент подбора. Например, если вы подобрали Desert Eagle, при этом держа в руках нож, то нож сменится на Desert Eagle (так как у Desert Eagle значение общего приоритета выше, чем у ножа):

Код: Выделить всё

class'Single'.default.GroupOffset = 1;

1 - Общий приоритет заданного предмета.

4) Вес. Обычно такое оружие как нож имеет нулевой вес:

Код: Выделить всё

class'Single'.default.Weight = 0;

0 указывает на то, что вес предмета равен нулю.

5) Возможность продажи/выбрасывания предмета из инвентаря. По-умолчанию, предметы стандартной экипировки (нож, пистолет, шприц и сварочный аппарат) не могут быть выброшены или проданы:

Код: Выделить всё

class'Single'.default.bKFNeverThrow = true;

Если значение = true, значит предмет нельзя выкинуть или продать. Иначе (т.е. = false) - его можно продать или выкинуть.

---

Это руководство является вольным переводом статьи от Benjamin, которому следует выразить огромное спасибо.

Автор: Kiyo

Вернуться в «Инструкции»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость