rott/kf_sources/KFMod/Classes/KFVetCommando.uc
2026-07-14 20:27:09 +07:00

262 lines
9.7 KiB
Ucode

class KFVetCommando extends KFVeterancyTypes
abstract;
// Display enemy health bars
static function SpecialHUDInfo(KFPlayerReplicationInfo KFPRI, Canvas C)
{
local KFMonster KFEnemy;
local HUDKillingFloor HKF;
local float MaxDistanceSquared;
if ( KFPRI.ClientVeteranSkillLevel > 0 )
{
HKF = HUDKillingFloor(C.ViewPort.Actor.myHUD);
if ( HKF == none || C.ViewPort.Actor.Pawn == none )
{
return;
}
switch ( KFPRI.ClientVeteranSkillLevel )
{
case 1:
MaxDistanceSquared = 25600; // 20% (160 units)
break;
case 2:
MaxDistanceSquared = 102400; // 40% (320 units)
break;
case 3:
MaxDistanceSquared = 230400; // 60% (480 units)
break;
case 4:
MaxDistanceSquared = 409600; // 80% (640 units)
break;
case 5:
case 6:
MaxDistanceSquared = 640000; // 100% (800 units)
break;
}
foreach C.ViewPort.Actor.DynamicActors(class'KFMonster',KFEnemy)
{
if ( KFEnemy.Health > 0 && (!KFEnemy.Cloaked() || KFEnemy.bZapped || KFEnemy.bSpotted) && VSizeSquared(KFEnemy.Location - C.ViewPort.Actor.Pawn.Location) < MaxDistanceSquared )
{
HKF.DrawHealthBar(C, KFEnemy, KFEnemy.Health, KFEnemy.HealthMax , 50.0);
}
}
}
}
static function bool ShowStalkers(KFPlayerReplicationInfo KFPRI)
{
return true;
}
static function float GetStalkerViewDistanceMulti(KFPlayerReplicationInfo KFPRI)
{
switch ( KFPRI.ClientVeteranSkillLevel )
{
case 0:
return 0.0625; // 25%
case 1:
return 0.25; // 50%
case 2:
return 0.36; // 60%
case 3:
return 0.49; // 70%
case 4:
return 0.64; // 80%
}
return 1.0; // 100% of Standard Distance(800 units or 16 meters)
}
static function float GetMagCapacityMod(KFPlayerReplicationInfo KFPRI, KFWeapon Other)
{
if ( (Bullpup(Other) != none || AK47AssaultRifle(Other) != none ||
SCARMK17AssaultRifle(Other) != none || M4AssaultRifle(Other) != none
|| FNFAL_ACOG_AssaultRifle(Other) != none || MKb42AssaultRifle(Other) != none
|| ThompsonSMG(Other) != none || ThompsonDrumSMG(Other) != none
|| SPThompsonSMG(Other) != none) &&
KFPRI.ClientVeteranSkillLevel > 0 )
{
if ( KFPRI.ClientVeteranSkillLevel == 1 )
{
return 1.10;
}
else if ( KFPRI.ClientVeteranSkillLevel == 2 )
{
return 1.20;
}
return 1.25; // 25% increase in assault rifle ammo carry
}
return 1.0;
}
static function float GetAmmoPickupMod(KFPlayerReplicationInfo KFPRI, KFAmmunition Other)
{
if ( (BullpupAmmo(Other) != none || AK47Ammo(Other) != none ||
SCARMK17Ammo(Other) != none || M4Ammo(Other) != none
|| FNFALAmmo(Other) != none || MKb42Ammo(Other) != none
|| ThompsonAmmo(Other) != none || GoldenAK47Ammo(Other) != none
|| ThompsonDrumAmmo(Other) != none || SPThompsonAmmo(Other) != none
|| CamoM4Ammo(Other) != none || NeonAK47Ammo(Other) != none ) &&
KFPRI.ClientVeteranSkillLevel > 0 )
{
if ( KFPRI.ClientVeteranSkillLevel == 1 )
{
return 1.10;
}
else if ( KFPRI.ClientVeteranSkillLevel == 2 )
{
return 1.20;
}
return 1.25; // 25% increase in assault rifle ammo carry
}
return 1.0;
}
static function float AddExtraAmmoFor(KFPlayerReplicationInfo KFPRI, Class<Ammunition> AmmoType)
{
if ( (AmmoType == class'BullpupAmmo' || AmmoType == class'AK47Ammo' ||
AmmoType == class'SCARMK17Ammo' || AmmoType == class'M4Ammo'
|| AmmoType == class'FNFALAmmo' || AmmoType == class'MKb42Ammo'
|| AmmoType == class'ThompsonAmmo' || AmmoType == class'GoldenAK47Ammo'
|| AmmoType == class'ThompsonDrumAmmo' || AmmoType == class'SPThompsonAmmo'
|| AmmoType == class'CamoM4Ammo' || AmmoType == class'NeonAK47Ammo'
|| AmmoType == class'NeonSCARMK17Ammo' )
&& KFPRI.ClientVeteranSkillLevel > 0 )
{
if ( KFPRI.ClientVeteranSkillLevel == 1 )
{
return 1.10;
}
else if ( KFPRI.ClientVeteranSkillLevel == 2 )
{
return 1.20;
}
return 1.25; // 25% increase in assault rifle ammo carry
}
return 1.0;
}
static function int AddDamage(KFPlayerReplicationInfo KFPRI, KFMonster Injured, KFPawn Instigator, int InDamage, class<DamageType> DmgType)
{
if ( DmgType == class'DamTypeBullpup' || DmgType == class'DamTypeAK47AssaultRifle' ||
DmgType == class'DamTypeSCARMK17AssaultRifle' || DmgType == class'DamTypeM4AssaultRifle'
|| DmgType == class'DamTypeFNFALAssaultRifle' || DmgType == class'DamTypeMKb42AssaultRifle'
|| DmgType == class'DamTypeThompson' || DmgType == class'DamTypeThompsonDrum'
|| DmgType == class'DamTypeSPThompson' )
{
if ( KFPRI.ClientVeteranSkillLevel == 0 )
{
return float(InDamage) * 1.05;
}
return float(InDamage) * (1.00 + (0.10 * float(Min(KFPRI.ClientVeteranSkillLevel, 5)))); // Up to 50% increase in Damage with Bullpup
}
return InDamage;
}
static function float ModifyRecoilSpread(KFPlayerReplicationInfo KFPRI, WeaponFire Other, out float Recoil)
{
if ( Bullpup(Other.Weapon) != none || AK47AssaultRifle(Other.Weapon) != none ||
SCARMK17AssaultRifle(Other.Weapon) != none || M4AssaultRifle(Other.Weapon) != none
|| FNFAL_ACOG_AssaultRifle(Other.Weapon) != none || MKb42AssaultRifle(Other.Weapon) != none
|| ThompsonSMG(Other.Weapon) != none || ThompsonDrumSMG(Other.Weapon) != none
|| SPThompsonSMG(Other.Weapon) != none )
{
if ( KFPRI.ClientVeteranSkillLevel <= 3 )
{
Recoil = 0.95 - (0.05 * float(KFPRI.ClientVeteranSkillLevel));
}
else if ( KFPRI.ClientVeteranSkillLevel <= 5 )
{
Recoil = 0.70;
}
else
{
Recoil = 0.60; // Level 6 - 40% recoil reduction
}
return Recoil;
}
Recoil = 1.0;
return Recoil;
}
static function float GetReloadSpeedModifier(KFPlayerReplicationInfo KFPRI, KFWeapon Other)
{
return 1.05 + (0.05 * float(KFPRI.ClientVeteranSkillLevel)); // Up to 35% faster reload speed
}
// Set number times Zed Time can be extended
static function int ZedTimeExtensions(KFPlayerReplicationInfo KFPRI)
{
if ( KFPRI.ClientVeteranSkillLevel >= 3 )
{
return KFPRI.ClientVeteranSkillLevel - 2; // Up to 4 Zed Time Extensions
}
return 0;
}
// Change the cost of particular items
static function float GetCostScaling(KFPlayerReplicationInfo KFPRI, class<Pickup> Item)
{
if ( Item == class'BullpupPickup' || Item == class'AK47Pickup' ||
Item == class'SCARMK17Pickup' || Item == class'M4Pickup'
|| Item == class'FNFAL_ACOG_Pickup' || Item == class'MKb42Pickup'
|| Item == class'ThompsonPickup' || Item == class'GoldenAK47Pickup'
|| Item == class'ThompsonDrumPickup' || Item == class'SPThompsonPickup'
|| Item == class'CamoM4Pickup' || Item == class'NeonAK47Pickup'
|| Item == class'NeonSCARMK17Pickup' )
{
return 0.9 - (0.10 * float(KFPRI.ClientVeteranSkillLevel)); // Up to 70% discount on Assault Rifles
}
return 1.0;
}
// Give Extra Items as default
static function AddDefaultInventory(KFPlayerReplicationInfo KFPRI, Pawn P)
{
// If Level 5, give them Bullpup
if ( KFPRI.ClientVeteranSkillLevel == 5 )
{
KFHumanPawn(P).CreateInventoryVeterancy("KFMod.Bullpup", default.StartingWeaponSellPriceLevel5);
}
// If Level 6, give them an AK47
if ( KFPRI.ClientVeteranSkillLevel == 6 )
{
KFHumanPawn(P).CreateInventoryVeterancy("KFMod.AK47AssaultRifle", default.StartingWeaponSellPriceLevel6);
}
}
defaultproperties
{
PerkIndex=3
OnHUDIcon=Texture'KillingFloorHUD.Perks.Perk_Commando'
OnHUDGoldIcon=Texture'KillingFloor2HUD.Perk_Icons.Perk_Commando_Gold'
VeterancyName="Commando"
Requirements[0]="Kill %x stalkers with Assault/Battle Rifles"
Requirements[1]="Deal %x damage with Assault/Battle Rifles"
LevelEffects[0]="5% more damage with Assault/Battle Rifles|5% less recoil with Assault/Battle Rifles|5% faster reload with all weapons|10% discount on Assault/Battle Rifles|Can see cloaked Stalkers from 4 meters"
LevelEffects[1]="10% more damage with Assault/Battle Rifles|10% less recoil with Assault/Battle Rifles|10% larger Assault/Battle Rifles clip|10% faster reload with all weapons|20% discount on Assault/Battle Rifles|Can see cloaked Stalkers from 8m|Can see enemy health from 4m"
LevelEffects[2]="20% more damage with Assault/Battle Rifles|15% less recoil with Assault/Battle Rifles|20% larger Assault/Battle Rifles clip|15% faster reload with all weapons|30% discount on Assault/Battle Rifles|Can see cloaked Stalkers from 10m|Can see enemy health from 7m"
LevelEffects[3]="30% more damage with Assault/Battle Rifles|20% less recoil with Assault/Battle Rifles|25% larger Assault/Battle Rifles clip|20% faster reload with all weapons|40% discount on Assault/Battle Rifles|Can see cloaked Stalkers from 12m|Can see enemy health from 10m|Zed-Time can be extended by killing an enemy while in slow motion"
LevelEffects[4]="40% more damage with Assault/Battle Rifles|30% less recoil with Assault/Battle Rifles|25% larger Assault/Battle Rifles clip|25% faster reload with all weapons|50% discount on Assault/Battle Rifles|Can see cloaked Stalkers from 14m|Can see enemy health from 13m|Up to 2 Zed-Time Extensions"
LevelEffects[5]="50% more damage with Assault/Battle Rifles|30% less recoil with Assault/Battle Rifles|25% larger Assault/Battle Rifles clip|30% faster reload with all weapons|60% discount on Assault/Battle Rifles|Spawn with a Bullpup|Can see cloaked Stalkers from 16m|Can see enemy health from 16m|Up to 3 Zed-Time Extensions"
LevelEffects[6]="50% more damage with Assault/Battle Rifles|40% less recoil with Assault/Battle Rifles|25% larger Assault/Battle Rifles clip|35% faster reload with all weapons|70% discount on Assault/Battle Rifles|Spawn with an AK47|Can see cloaked Stalkers from 16m|Can see enemy health from 16m|Up to 4 Zed-Time Extensions"
}