Типы урона Автор и публикация: НАТАХА
Редактор: Flame
Весь урон в Killing Floor наследуется от
KFMod.KFWeaponDamageType.
Вообще базовый тип урона - Engine.DamageType, его наследует UnrealGame.WeaponDamageType, после чего идет уже KFMod.KFWeaponDamageType.
Тема обширна, и мы сейчас попытаемся разобраться в основных моментах.
Так вот, существует ряд типов урона, которыми мы можем пользоваться (например,
KFProjectileWeaponDamageType) и переменные, с помощью которых мы указываем, к какому перку (по большому счету) относится данное оружие с данным типом урона (например,
bSniperWeapon).
Очень долго думала, с чего же начать, и от чего оттолкнуться. Ну нет в Killing Floor одной четкой закономерности и структуры. Всё перепутано и взаимосвязано. Поэтому решила разобрать тему по перкам.
Berserker - оружие ближнего боя
Тип урона: DamTypeMelee
Переменная принадлежности: bIsMeleeDamage (если bIsMeleeDamage=true, то это оружие ближнего боя; у нас будет прокачиваться перк Berserker)
В статистике: KFStatsAndAchievements.AddMeleeDamage
Firebug - оружие с эффектом горения
Вообще урон от огня складывается из 2х типов урона:
1 тип - первоначальный урон
2 тип - урон от дальнейшего горения (урон постепенно уменьшается и зависит от урона 1 типа)
Типы урона:Я так подозреваю, что изначально была идея сделать DamTypeBurned уроном 2 типа, но в итоге всё перемешалось
.Тут тот случай, когда проще просто перечислить все пушки, благо их немного
- Спойлер:
Формат следующий: Пушка -> Первоначальный урон(Базовый класс, если есть) + Дальнейшее горение(Базовый класс, если есть)
FlareRevolver -> DamTypeFlareRevolver(DamTypeBurned) + DamTypeFlareRevolver(DamTypeBurned)
MAC10 -> DamTypeMAC10MPInc + DamTypeMAC10MPInc
Trenchgun -> DamTypeTrenchgun + DamTypeTrenchgun
FlameThrower -> DamTypeBurned + DamTypeFlamethrower
HuskGun -> DamTypeHuskGun(DamTypeBurned) + DamTypeFlamethrower
FlameNade -> DamTypeFlamethrower + DamTypeFlamethrower
Поэтому когда будете прописывать устойчивость того или иного моба от огня - учтите оба этих типа урона.
Переменная принадлежности: bDealBurningDamage
В статистике: KFStatsAndAchievements.AddFlameThrowerDamage
Пара замечаний:DamTypeTrenchgun содержит и переменные bDealBurningDamage и bIsPowerWeapon установленные в true, то есть качает и саппа и фаера.
Типы урона DamTypeHuskGunProjectileImpact, DamTypeFlareProjectileImpact не приводят к горению, но урон от них засчитывается в кач.
Demolitions - взрывчатое оружие
Типы урона: почти у каждого оружия свой тип урона, который наследует KFWeaponDamageType
помимо урона от взрыва есть ещё и типы урона попадания снаряда в моба, они наследуют DamTypeRocketImpact,
и не качают подрыва в отличии от фаера, но зато качают снайпера, ибо DamTypeRocketImpact наследует DamTypeKFSnipe
Переменная принадлежности: bIsExplosive
В статистике: KFStatsAndAchievements.AddExplosivesDamage
Commando - автоматическое оружие
Типы урона: у каждого оружия свой тип урона, который наследует KFProjectileWeaponDamageType
Переменная принадлежности: Нет такой.
В каждом личном DamageType прописывается функция записи нанесенного урона в статистику.
В статистике: KFStatsAndAchievements.AddBullpupDamage, KFStatsAndAchievements.AwardKill (сталкеры)
Sharpshooter - снайперское оружие и пистолеты
Типы урона: в основном всё оружие снайпера так же наследует KFProjectileWeaponDamageType, но некоторые экземпляры наследуют DamTypeSPSniper, DamTypeKFSnipe, которые в свою очередь наследуют KFProjectileWeaponDamageType.
Переменная принадлежности: bSniperWeapon
В статистике: KFStatsAndAchievements.AddHeadshotKill (считает количество убийств с помощью хэдшотов)
SupportSpec - дробовики
Тип урона: в основном всё оружие саппорта так же наследует KFProjectileWeaponDamageType
Переменная принадлежности: bIsPowerWeapon
В статистике: KFStatsAndAchievements.AddShotgunDamage
FieldMedic - этот перк описывать нет смысла, так как нет кача от нанесения урона
Список некоторых важных типов урона:KFProjectileWeaponDamageType - используется для бОльшей массы оружия (автоматическое оружие, снайперское оружие, дробовики и т.п.)
- Спойлер:
Там мы видим такой код:
- Код:
-
class KFProjectileWeaponDamageType extends KFWeaponDamageType
abstract;
defaultproperties
{
PawnDamageEmitter=Class'ROEffects.ROBloodPuff'
LowGoreDamageEmitter=Class'ROEffects.ROBloodPuffNoGore'
LowDetailEmitter=Class'ROEffects.ROBloodPuffSmall'
}
т.е. просто добавление эффектов крови у мобов при попадании
Некоторые типы урона, которые наследуют KFProjectileWeaponDamageType
DamTypeFlareProjectileImpact //...и подобные, урон от попадание снаряда в моба
DamTypeKFSnipe //промежуточный класс, который использует винчестер и ракета. Важность не совсем ясна
DamTypeZEDGun //название говорит само за себя
Другие:
DamTypeFlamethrower //горение; огнемёт, поджигающая граната
DamTypeBurned //первоночальный урон от оружия поджигателя; HuskGun, FlareRevolver и т.п.
DamTypeMelee //ближний бой
DamTypeFrag //гранаты
DamTypeMeleeDecapitation //голова отлетает целиком и валяется на полу
DamTypeDecapitation //голова разлетается на куски
DamTypeProjectileDecap //голова разлетается на куски, нигде не используется (другой эмиттер по сравнению с DamTypeDecapitation)
DamTypeSealSquealExplosion //гарпун
DamTypeVomit //кислота
DamTypeUnWeld //разваривание
DamTypeWelder //заваривание
Помимо переменных, которые указывают нам на принадлежность перку, есть такие переменные:
var() float
HeadShotDamageMult; //множитель урона при попадании в голову.
Переменная с точно таким же названием есть в projectile классах (пули, стрелы и т.д.)
var() bool
bCheckForHeadShots; //если эта переменная false, то при нанесении урона мы игнорируем попадание в голову. Например применяется в гранатах, огнемете, блевалке и т.п.
Пример использования переменных принадлежности:- Спойлер:
Версия взятая из SP:
- Код:
-
static function int AddDamage(KFPlayerReplicationInfo KFPRI, KFMonster Injured, KFPawn DamageTaker, int InDamage, class<DamageType> DmgType)
{
if (
class<DamTypeFrag>(DmgType) != none
|| class<DamTypePipeBomb>(DmgType) != none
|| class<DamTypeM79Grenade>(DmgType) != none
|| class<DamTypeM32Grenade>(DmgType) != none
|| class<DamTypeM203Grenade>(DmgType) != none
|| class<DamTypeRocketImpact>(DmgType) != none
|| class<DamTypeSPGrenade>(DmgType) != none
|| class<DamTypeSealSquealExplosion>(DmgType) != none
|| class<DamTypeSeekerSixRocket>(DmgType) != none
)
{
if ( KFPRI.ClientVeteranSkillLevel == 0 )
return float(InDamage) * 1.05;
return float(InDamage) * (1.0 + (0.10 * float(KFPRI.ClientVeteranSkillLevel)));
}
return InDamage;
}
При добавлении новых пушек - надо править код
Версия с переменной принадлежности:
- Код:
-
static function int AddDamage(KFPlayerReplicationInfo KFPRI, KFMonster Injured, KFPawn DamageTaker, int InDamage, class<DamageType> DmgType)
{
if (
class<KFWeaponDamageType>(DmgType)!=none
&& class<KFWeaponDamageType>(DmgType).default.bIsExplosive
)
{
if ( KFPRI.ClientVeteranSkillLevel == 0 )
return float(InDamage) * 1.05;
return float(InDamage) * (1.0 + (0.10 * float(KFPRI.ClientVeteranSkillLevel)));
}
return InDamage;
}
При добавлении новых пушек ничего делать не надо. (Если они, конечно, прописаны как пушки подрыва)