class MoonVetCombatMedic extends ScrnVeterancyTypes
abstract;
var array<int> progressArray;
static function AddCustomStats( ClientPerkRepLink Other )
{
super.AddCustomStats(Other);
Other.AddCustomValue(Class'CombatMedicPerkProg');
}
static function int GetPerkProgressInt
( ClientPerkRepLink StatOther, out int FinalInt, byte CurLevel, byte ReqNum )
{
if (ReqNum == 0)
{
if (CurLevel < 7)
FinalInt = default.progressArrayA[curLevel];
else
FinalInt = default.progressArrayA[7]+((CurLevel-6)*100*(CurLevel)*(CurLevel);
return Min(StatOther.RBullpupDamageStat,FinalInt);
}
if (ReqNum == 1)
{
if (CurLevel < 7)
FinalInt = default.progressArrayB[curLevel];
else
FinalInt = default.progressArrayB[7]+(CurLevel*100);
return Min(StatOther.RHeadshotKillsStat,FinalInt);
}
if (ReqNum == 2)
{
if (CurLevel < 7)
FinalInt = default.progressArrayC[curLevel];
else
FinalInt = default.progressArrayC[7]+((CurLevel-2)*5000);
return Min(StatOther.RSelfHeals,FinalInt);
}
if (ReqNum == 3)
{
if (CurLevel < 1)
FinalInt = default.progressArrayD[curLevel];
else
FinalInt = default.progressArrayD[1]+(CurLevel);
return Min(StatOther.RSoleSurvivorWavesStat,FinalInt);
}
if (ReqNum == 4)
{
if (CurLevel < 7)
FinalInt = default.progressArrayE[curLevel];
else
FinalInt = default.progressArrayE[7]+((CurLevel)*10000);
return Min(StatOther.RKillsStat,FinalInt);
}
}
static function float GetSyringeChargeRate(KFPlayerReplicationInfo KFPRI)
{
if ( ClientVeteranSkillLevel(KFPRI) == 0 )
return 1.10;
else if ( ClientVeteranSkillLevel(KFPRI) <= 5 )
return 1.25 + (0.25 * float(ClientVeteranSkillLevel(KFPRI)));
return 2.7 + (0.05 * float(ClientVeteranSkillLevel(KFPRI)));
}
static function float GetHealPotency(KFPlayerReplicationInfo KFPRI)
{
if ( ClientVeteranSkillLevel(KFPRI) == 0 )
return 1.05;
else if ( ClientVeteranSkillLevel(KFPRI) <= 2 )
return 1.15;
else if ( ClientVeteranSkillLevel(KFPRI) <= 5 )
return 1.30;
else if ( ClientVeteranSkillLevel(KFPRI) >= 6 )
return 1.45 + (0.05 * float(ClientVeteranSkillLevel(KFPRI)));
return 2.45;
}
static function float GetMovementSpeedModifier(KFPlayerReplicationInfo KFPRI, KFGameReplicationInfo KFGRI)
{
if ( ClientVeteranSkillLevel(KFPRI) <=6 )
return 1.25;
else if ( ClientVeteranSkillLevel(KFPRI) >= 7 )
return 1.25 + 0.05 * float((ClientVeteranSkillLevel(KFPRI))*(0.5),5);
return 1.00;
}
static function int AddDamage(KFPlayerReplicationInfo KFPRI, KFMonster Injured, KFPawn DamageTaker, int InDamage, class<DamageType> DmgType)
{
if ( DmgType == default.DefaultDamageTypeNoBonus )
return InDamage;
if ( DmgType == default.DefaultDamageType
|| ClassIsChildOf(DmgType, class'DamTypeCrossbow')
|| ClassIsChildOf(DmgType, class'DamTypeM99SniperRifle')
|| ClassIsChildOf(DmgType, class'DamTypeWinchester')
|| ClassIsChildOf(DmgType, class'DamTypeM14EBR')
|| ClassIsChildOf(DmgType, class'DamTypeDeagle')
|| ClassIsChildOf(DmgType, class'DamTypeMK23Pistol')
|| ClassIsChildOf(DmgType, class'Magnum44Pistol')
|| ClassIsChildOf(DmgType, class'Dualies')
|| ClassIsInArray(default.PerkedDamTypes, DmgType) )
{
if ( ClientVeteranSkillLevel(KFPRI) == 0 )
return float(InDamage) * 1.02;
else if ( ClientVeteranSkillLevel(KFPRI) <= 6 )
return float(InDamage) * (0.98 + (0.05 * float(Min(ClientVeteranSkillLevel(KFPRI), 5))));
return float(InDamage) * (1.08 + (0.03 * ClientVeteranSkillLevel(KFPRI)));
}
if ( DmgType == default.DefaultDamageType
|| ClassIsChildOf(DmgType, class'DamTypeBullpup')
|| ClassIsChildOf(DmgType, class'DamTypeAK47AssaultRifle')
|| ClassIsChildOf(DmgType, class'DamTypeSCARMK17AssaultRifle')
|| ClassIsChildOf(DmgType, class'DamTypeM4AssaultRifle')
|| ClassIsChildOf(DmgType, class'DamTypeFNFALAssaultRifle')
|| ClassIsChildOf(DmgType, class'DamTypeMKb42AssaultRifle')
|| ClassIsChildOf(DmgType, class'DamTypeThompson')
|| ClassIsInArray(default.PerkedDamTypes, DmgType) )
{
if ( ClientVeteranSkillLevel(KFPRI) == 0 )
return float(InDamage) * 1.02;
else if ( ClientVeteranSkillLevel(KFPRI) <= 6 )
return float(InDamage) * (1.00 + (0.05 * float(Min(ClientVeteranSkillLevel(KFPRI), 5))));
return float(InDamage) * (1.10 + (0.03 * ClientVeteranSkillLevel(KFPRI)));
}
return InDamage;
}
static function float AddExtraAmmoFor(KFPlayerReplicationInfo KFPRI, Class<Ammunition> AmmoType)
{
if ( ClientVeteranSkillLevel(KFPRI) > 1 )
{
if ( ClassIsChildOf(AmmoType, class'CrossbowAmmo')
|| ClassIsChildOf(AmmoType, class'M99Ammo')
|| ClassIsChildOf(AmmoType, class'WinchesterAmmo')
|| ClassIsChildOf(AmmoType, class'M14EBRAmmo')
|| ClassIsChildOf(AmmoType, class'SingleAmmo')
|| ClassIsChildOf(AmmoType, class'Magnum44Ammo')
|| ClassIsChildOf(AmmoType, class'MK23Ammo')
|| ClassIsChildOf(AmmoType, class'DeagleAmmo')
|| ClassIsInArray(default.PerkedAmmo, AmmoType) )
{
if ( ClientVeteranSkillLevel(KFPRI) <= 6 )
{
return 1.02 + 0.01 * float(ClientVeteranSkillLevel(KFPRI);
}
return 1.0 + 0.08 * float(ClientVeteranSkillLevel(KFPRI)-6); // +8% per level above 6
}
if ( ClassIsChildOf(AmmoType, class'BullpupAmmo')
|| ClassIsChildOf(AmmoType, class'AK47Ammo')
|| ClassIsChildOf(AmmoType, class'SCARMK17Ammo' )
|| ClassIsChildOf(AmmoType, class'M4Ammo')
|| ClassIsChildOf(AmmoType, class'FNFALAmmo')
|| ClassIsChildOf(AmmoType, class'MKb42Ammo')
|| ClassIsChildOf(AmmoType, class'ThompsonAmmo')
|| ClassIsInArray(default.PerkedAmmo, AmmoType) )
{
if ( ClientVeteranSkillLevel(KFPRI) == 1 )
{
return 1.05;
}
else if ( ClientVeteranSkillLevel(KFPRI) == 2 )
{
return 1.10;
}
else if ( ClientVeteranSkillLevel(KFPRI) <= 6 )
{
return 1.13; // 13% increase in assault rifle ammo carry
}
else if ( ClientVeteranSkillLevel(KFPRI) >= 7 )
{
return 1.13 + 0.03 * float(ClientVeteranSkillLevel(KFPRI)-6); // +3% per level above 6
}
return 1.13 + 0.03 * float(ClientVeteranSkillLevel(KFPRI)-6);
}
return 1.0;
}
return 1.0;
}
static function float GetHeadShotDamMulti(KFPlayerReplicationInfo KFPRI, KFPawn P, class<DamageType> DmgType)
{
local float ret;
if ( DmgType == default.DefaultDamageTypeNoBonus )
{
ret = 1.0;
}
else if ( IsGunslingerEnabled() &&
(ClassIsChildOf(DmgType, class'DamTypeDual44Magnum')
|| ClassIsChildOf(DmgType, class'DamTypeDualMK23Pistol')
|| ClassIsChildOf(DmgType, class'DamTypeDualDeagle')
|| ClassIsChildOf(DmgType, class'ScrnBalanceSrv.ScrnDamTypeDualies')) )
{
ret = 1.0; // If Gunslinger perk persists, remove damage bonus from dual pistols.
}
else if ( DmgType == default.DefaultDamageType
|| ClassIsChildOf(DmgType, class'DamTypeCrossbow')
|| ClassIsChildOf(DmgType, class'DamTypeM99SniperRifle')
|| ClassIsChildOf(DmgType, class'DamTypeWinchester')
|| ClassIsChildOf(DmgType, class'DamTypeM14EBR')
|| ClassIsChildOf(DmgType, class'DamTypeDeagle') // including dual
|| ClassIsChildOf(DmgType, class'DamTypeMK23Pistol') // including dual
|| ClassIsChildOf(DmgType, class'DamTypeMagnum44Pistol') // including dual
|| ClassIsChildOf(DmgType, class'DamTypeDualies') // including single
|| ClassChildIsInArray(default.PerkedDamTypes, DmgType) )
{
if ( ClientVeteranSkillLevel(KFPRI) <= 3 )
{
ret = 1.05 + (0.02 * float(ClientVeteranSkillLevel(KFPRI)));
}
else if ( ClientVeteranSkillLevel(KFPRI) == 4 )
{
ret = 1.15;
}
else if ( ClientVeteranSkillLevel(KFPRI) == 5 )
{
ret = 1.25;
}
else if ( ClientVeteranSkillLevel(KFPRI) == 6 )
{
ret = 1.30; // 30% increase in Crossbow/Winchester/Handcannon damage
}
ret = 1.30 + (0.10 * float(ClientVeteranSkillLevel(KFPRI)-6));
}
ret *= (1.0 + (0.05 * float(Min(ClientVeteranSkillLevel(KFPRI), 5)))); // 25% increase in Headshot Damage for all weapons
//Log("Headshot multiplier for " $ String(DmgType) $ " is " $ ret);
return ret;
}
static function int ReduceDamage(KFPlayerReplicationInfo KFPRI, KFPawn Injured, KFMonster DamageTaker, int InDamage, class<DamageType> DmgType)
{
if ( DmgType == class'DamTypeVomit' )
{
if ( ClientVeteranSkillLevel(KFPRI) == 0 )
return float(InDamage) * 0.90;
else if ( ClientVeteranSkillLevel(KFPRI) == 1 )
return float(InDamage) * 0.75;
else if ( ClientVeteranSkillLevel(KFPRI) <= 4 )
return float(InDamage) * 0.50;
return float(InDamage) * 0.25;
}
return InDamage;
}
static function int AddCarryMaxWeight(KFPlayerReplicationInfo KFPRI)
{
if ( ClientVeteranSkillLevel(KFPRI) == 0 )
return 1;
else if ( ClientVeteranSkillLevel(KFPRI) <= 4 )
return 3;
else if ( ClientVeteranSkillLevel(KFPRI) == 5 )
return 5;
else if ( ClientVeteranSkillLevel(KFPRI) <= 19 )
return 2 + (ClientVeteranSkillLevel(KRPRI)*(0.35));
return 9; // 24 blocks at lvl 20
}
static function float GetCostScaling(KFPlayerReplicationInfo KFPRI, class<Pickup> Item)
{
if ( ClassIsChildOf(Item, class'DeaglePickup') || ClassIsChildOf(Item, class'DualDeaglePickup')
|| ClassIsChildOf(Item, class'MK23Pickup') || ClassIsChildOf(Item, class'DualMK23Pickup')
|| ClassIsChildOf(Item, class'Magnum44Pickup')
|| (ClassIsChildOf(Item, class'Dual44MagnumPickup') && !ClassIsChildOf(Item, class'ScrnBalanceSrv.ScrnDual44MagnumLaserPickup'))
|| ClassIsChildOf(Item, class'M14EBRPickup')
|| ClassIsChildOf(Item, class'M99Pickup')
|| (class'ScrnBalanceSrv.ScrnBalance'.default.bSpawnBalance && ClassIsChildOf(Item, class'CrossbowPickup'))
|| ClassIsChildOf(Item, class'AK47Pickup' )
|| ClassIsChildOf(Item, class'SCARMK17Pickup')
|| ClassIsChildOf(Item, class'M4Pickup')
|| ClassIsChildOf(Item, class'FNFAL_ACOG_Pickup')
|| ClassIsChildOf(Item, class'MKb42Pickup')
|| ClassIsChildOf(Item, class'ThompsonPickup')
|| ClassIsInArray(default.PerkedPickups, Item) )
{
if ( ClientVeteranSkillLevel(KFPRI) <= 6 )
return 0.94 - 0.06 * float(ClientVeteranSkillLevel(KFPRI));
return FMax(0.18, 0.58 - (0.05 * float(ClientVeteranSkillLevel(KFPRI)-6)));
}
return 1.0;
}
static function float GetReloadSpeedModifier(KFPlayerReplicationInfo KFPRI, KFWeapon Other)
{
return 1.00 + (0.03 * float(ClientVeteranSkillLevel(KFPRI)));
}
static function float ModifyRecoilSpread(KFPlayerReplicationInfo KFPRI, WeaponFire Other, out float Recoil)
{
if ( ClientVeteranSkillLevel(KFPRI) == 0 )
Recoil = 1.0;
else if ( ClientVeteranSkillLevel(KFPRI) <= 3 )
Recoil = 0.95;
else if ( ClientVeteranSkillLevel(KFPRI) >= 4 )
Recoil = 0.65;
return Recoil;
}
static function float GetBodyArmorDamageModifier(KFPlayerReplicationInfo KFPRI)
{
if ( ClientVeteranSkillLevel(KFPRI) <= 6 )
{
return 0.85 - (0.05 * float(ClientVeteranSkillLevel(KFPRI)));
}
return 0.25;
}
static function float HealthMaxMult(KFPlayerReplicationInfo KFPRI, Pawn P)
{
if ( ClientVeteranSkillLevel(KFPRI) >= 6 )
{
return 1.50;
}
else if ( ClientVeteranSkillLevel(KFPRI) >= 10 )
{
return 1.50 + fMax(0.50, 0.05 * float(ClientVeteranSkillLevel(KFPRI) - 9));
}
return 1.0;
}
static function string GetCustomLevelInfo ( byte Level )
{
local string V;
V = Default.CustomLevelInfo;
ReplaceText(V,"%v",GetPercentStr(0.05 * float(Level)));
return V;
}
static function byte PreDrawPerk( Canvas C, byte Level, out Material PerkIcon, out Material StarIcon )
{
if ( Level>25 ) {
PerkIcon = Default.OnHUDIcon;
StarIcon = Class'HUDKillingFloor'.Default.VetStarMaterial;
C.SetDrawColor(1, 1, 1, C.DrawColor.A);
Level-=25;
}
else if ( Level>20 ) {
PerkIcon = Default.OnHUDGoldIcon;
StarIcon = Class'HUDKillingFloor'.Default.VetStarGoldMaterial;
C.SetDrawColor(50, 50, 50, C.DrawColor.A);
Level-=20;
}
else if ( Level>15 ) {
PerkIcon = Default.OnHUDGoldIcon;
StarIcon = Class'HUDKillingFloor'.Default.VetStarGoldMaterial;
Level-=15;
C.SetDrawColor(100, 100, 100, C.DrawColor.A);
}
else if ( Level>10 ) {
PerkIcon = Default.OnHUDGoldIcon;
StarIcon = Class'HUDKillingFloor'.Default.VetStarGoldMaterial;
Level-=10;
C.SetDrawColor(150, 150, 150, C.DrawColor.A);
}
else if ( Level>5 ) {
PerkIcon = Default.OnHUDGoldIcon;
StarIcon = Class'HUDKillingFloor'.Default.VetStarGoldMaterial;
Level-=5;
C.SetDrawColor(200, 200, 200, C.DrawColor.A);
}
else {
PerkIcon = Default.OnHUDIcon;
StarIcon = Class'HUDKillingFloor'.Default.VetStarMaterial;
C.SetDrawColor(255, 255, 255, C.DrawColor.A);
}
return Min(Level,15);
}
defaultproperties
{
PerkIndex=13
OnHUDIcon=Texture'KillingFloorHUD.Perks.Perk_Medic'
OnHUDGoldIcon=Texture'KillingFloor2HUD.Perk_Icons.Perk_Medic_Gold'
VeterancyName="Combat Medic"
NumRequirements=5
Requirements(0)="Damage done with Assault Rifles"
Requirements(1)="BOOM! Headshot"
Requirements(2)="Self heals"
Requirements(3)="The last survivor"
Requirements(4)="Total kills"
progressArrayA(0)=1000
progressArrayA(1)=2000
progressArrayA(2)=4000
progressArrayA(3)=6666
progressArrayA(4)=7777
progressArrayA(5)=15000
progressArrayA(6)=25000
progressArrayA(7)=45100
progressArrayB(0)=1
progressArrayB(1)=10
progressArrayB(2)=25
progressArrayB(3)=50
progressArrayB(4)=100
progressArrayB(5)=250
progressArrayB(6)=400
progressArrayB(7)=1000
progressArrayC(0)=100
progressArrayC(1)=200
progressArrayC(2)=400
progressArrayC(3)=800
progressArrayC(4)=1000
progressArrayC(5)=1500
progressArrayC(6)=3000
progressArrayC(7)=5000
progressArrayD(0)=1
progressArrayD(1)=0
progressArrayE(0)=100
progressArrayE(1)=200
progressArrayE(2)=500
progressArrayE(3)=1000
progressArrayE(4)=2000
progressArrayE(5)=4000
progressArrayE(6)=8000
progressArrayE(7)=20000
CustomLevelInfo="Hi! Moneigh hasn't gotten around to this yet."
}