class NiceVetSharpshooter extends NiceVeterancyTypes dependson(NiceAbilityManager) abstract; static function AddCustomStats(ClientPerkRepLink Other){ Other.AddCustomValue(Class'NiceVetSharpshooterExp'); } static function int GetStatValueInt(ClientPerkRepLink StatOther, byte ReqNum){ return StatOther.GetCustomValueInt(Class'NiceVetSharpshooterExp'); } static function array GetProgressArray(byte ReqNum, optional out int DoubleScalingBase){ return default.progressArray0; } static function float GetNiceHeadShotDamMulti(KFPlayerReplicationInfo KFPRI, NiceMonster zed, class DmgType){ local float ret; local NicePlayerController nicePlayer; local NiceHumanPawn nicePawn; local float calibratedTalentBonus; local class pickupClass; if(class(DmgType) != none || class(DmgType) != none) return 1.0; ret = 1.0; if(KFPRI != none) nicePlayer = NicePlayerController(KFPRI.Owner); pickupClass = GetPickupFromDamageType(DmgType); if(nicePlayer != none) nicePawn = NiceHumanPawn(nicePlayer.pawn); //if(IsPerkedPickup(pickupClass)){ ret += 0.25; if(nicePawn != none && class'NiceVetSharpshooter'.static.hasSkill(nicePlayer, class'NiceSkillSharpshooterDamage')){ calibratedTalentBonus = 0.1f * Min(nicePawn.calibrationScore, 3); ret *= (1.0 + calibratedTalentBonus); } //} return ret; } static function int AddStunScore(KFPlayerReplicationInfo KFPRI, KFMonster Injured, KFPawn DamageTaker, int inStunScore, class DmgType) { local NicePlayerController nicePlayer; if (KFPRI != none) { nicePlayer = NicePlayerController(KFPRI.Owner); } if(nicePlayer != none && class'NiceVetSharpshooter'.static.HasSkill(nicePlayer, class'NiceSkillSharpshooterControl')) { return int(float(inStunScore) * class'NiceSkillSharpshooterControl'.default.stunMultiplier); } return inStunScore; } static function float GetReloadSpeedModifierStatic(KFPlayerReplicationInfo KFPRI, class Other){ local float reloadMult; //local float reloadScale; local NicePlayerController nicePlayer; local NiceHumanPawn nicePawn; local float calibratedReloadBonus; local class pickupClass; pickupClass = GetPickupFromWeapon(Other); if(KFPRI != none) nicePlayer = NicePlayerController(KFPRI.Owner); reloadMult = 1.0; if(nicePlayer != none) nicePawn = NiceHumanPawn(nicePlayer.pawn); if(nicePlayer != none && nicePawn != none && class'NiceVetSharpshooter'.static.hasSkill(nicePlayer, class'NiceSkillSharpshooterControl')){ //reloadScale = VSize(nicePlayer.pawn.velocity) / nicePlayer.pawn.groundSpeed; //reloadScale = 1.0 - reloadScale; if(nicePawn.calibrationScore >= 3) calibratedReloadBonus = class'NiceSkillSharpshooterControl'.default.reloadBonus; else if(nicePawn.calibrationScore == 2) calibratedReloadBonus = 0.5f * class'NiceSkillSharpshooterControl'.default.reloadBonus; else calibratedReloadBonus = 0.25f * class'NiceSkillSharpshooterControl'.default.reloadBonus; reloadMult *= 1.0 + calibratedReloadBonus; } if( nicePlayer != none && nicePlayer.abilityManager != none && nicePlayer.abilityManager.IsAbilityActive(class'NiceSkillSharpshooterGunslingerA'.default.abilityID)){ reloadMult *= class'NiceSkillSharpshooterGunslingerA'.default.reloadMult; } return reloadMult; } static function float GetFireSpeedModStatic(KFPlayerReplicationInfo KFPRI, class other){ local float fireRateMult; local NicePlayerController nicePlayer; local NiceHumanPawn nicePawn; local float calibratedFireSpeedBonus; if(KFPRI != none) nicePlayer = NicePlayerController(KFPRI.Owner); fireRateMult = 1.0; if(nicePlayer != none) nicePawn = NiceHumanPawn(nicePlayer.pawn); if(nicePawn != none && class'NiceVetSharpshooter'.static.hasSkill(NicePlayerController(KFPRI.Owner), class'NiceSkillSharpshooterControl')){ if(nicePawn.calibrationScore >= 3) calibratedFireSpeedBonus = class'NiceSkillSharpshooterControl'.default.fireRateBonus; else if(nicePawn.calibrationScore == 2) calibratedFireSpeedBonus = (2.0f/3.0f) * class'NiceSkillSharpshooterControl'.default.fireRateBonus; else calibratedFireSpeedBonus = (1.0f/3.0f) * class'NiceSkillSharpshooterControl'.default.fireRateBonus; fireRateMult *= 1.0f + calibratedFireSpeedBonus; } if( nicePlayer != none && nicePlayer.abilityManager != none && nicePlayer.abilityManager.IsAbilityActive(class'NiceSkillSharpshooterGunslingerA'.default.abilityID)){ fireRateMult *= class'NiceSkillSharpshooterGunslingerA'.default.fireRateMult; } return fireRateMult; } static function float ModifyRecoilSpread(KFPlayerReplicationInfo KFPRI, WeaponFire Other, out float Recoil){ local NicePlayerController nicePlayer; if(KFPRI != none) nicePlayer = NicePlayerController(KFPRI.Owner); Recoil = 1.0; if(HasSkill(NicePlayerController(KFPRI.Owner), class'NiceSkillSharpshooterControl')) Recoil = class'NiceSkillSharpshooterControl'.default.recoilMult; if( nicePlayer != none && nicePlayer.abilityManager != none && nicePlayer.abilityManager.IsAbilityActive(class'NiceSkillSharpshooterGunslingerA'.default.abilityID)) Recoil = 0; return Recoil; } static function float GetMovementSpeedModifier(KFPlayerReplicationInfo KFPRI, KFGameReplicationInfo KFGRI) { local NicePlayerController nicePlayer; if(KFPRI != none) nicePlayer = NicePlayerController(KFPRI.Owner); if( nicePlayer != none && nicePlayer.abilityManager != none && nicePlayer.abilityManager.IsAbilityActive(class'NiceSkillSharpshooterGunslingerA'.default.abilityID)) return class'NiceSkillSharpshooterGunslingerA'.default.movementMult; return 1.0; } static function string GetCustomLevelInfo(byte Level){ return default.CustomLevelInfo; } static function SetupAbilities(KFPlayerReplicationInfo KFPRI){ local NicePlayerController nicePlayer; local NiceAbilityManager.NiceAbilityDescription calibration; if(KFPRI != none) nicePlayer = NicePlayerController(KFPRI.Owner); if(nicePlayer == none || nicePlayer.abilityManager == none) return; calibration.ID = "Calibration"; //gigaSlayer.icon = Texture'NicePackT.HudCounter.t4th'; calibration.icon = Texture'NicePackT.HudCounter.zedHeadStreak'; calibration.cooldownLength = 30.0; calibration.canBeCancelled = false; nicePlayer.abilityManager.AddAbility(calibration); } defaultproperties { bNewTypePerk=True SkillGroupA(0)=class'NiceSkillSharpshooterKillConfirmed' SkillGroupA(1)=class'NiceSkillSharpshooterDamage' SkillGroupA(2)=class'NiceSkillSharpshooterDieAlready' SkillGroupA(3)=class'NiceSkillSharpshooterReaperA' SkillGroupA(4)=class'NiceSkillSharpshooterZEDAdrenaline' SkillGroupB(0)=class'NiceSkillSharpshooterSurgical' SkillGroupB(1)=class'NiceSkillSharpshooterControl' SkillGroupB(2)=class'NiceSkillSharpshooterArdour' SkillGroupB(3)=class'NiceSkillSharpshooterGunslingerA' SkillGroupB(4)=class'NiceSkillSharpshooterZEDHundredGauntlets' progressArray0(0)=100 progressArray0(1)=1000 progressArray0(2)=3000 progressArray0(3)=10000 progressArray0(4)=30000 progressArray0(5)=100000 progressArray0(6)=200000 DefaultDamageType=class'NiceDamageTypeVetSharpshooter' OnHUDIcons(0)=(PerkIcon=Texture'KillingFloorHUD.Perks.Perk_SharpShooter',StarIcon=Texture'KillingFloorHUD.HUD.Hud_Perk_Star',DrawColor=(B=255,G=255,R=255,A=255)) OnHUDIcons(1)=(PerkIcon=Texture'KillingFloor2HUD.Perk_Icons.Perk_SharpShooter_Gold',StarIcon=Texture'KillingFloor2HUD.Perk_Icons.Hud_Perk_Star_Gold',DrawColor=(B=255,G=255,R=255,A=255)) OnHUDIcons(2)=(PerkIcon=Texture'ScrnTex.Perks.Perk_SharpShooter_Green',StarIcon=Texture'ScrnTex.Perks.Hud_Perk_Star_Green',DrawColor=(B=255,G=255,R=255,A=255)) OnHUDIcons(3)=(PerkIcon=Texture'ScrnTex.Perks.Perk_SharpShooter_Blue',StarIcon=Texture'ScrnTex.Perks.Hud_Perk_Star_Blue',DrawColor=(B=255,G=255,R=255,A=255)) OnHUDIcons(4)=(PerkIcon=Texture'ScrnTex.Perks.Perk_SharpShooter_Purple',StarIcon=Texture'ScrnTex.Perks.Hud_Perk_Star_Purple',DrawColor=(B=255,G=255,R=255,A=255)) OnHUDIcons(5)=(PerkIcon=Texture'ScrnTex.Perks.Perk_SharpShooter_Orange',StarIcon=Texture'ScrnTex.Perks.Hud_Perk_Star_Orange',DrawColor=(B=255,G=255,R=255,A=255)) CustomLevelInfo="Level up by doing headshots with perked weapons|+25% headshot damage" PerkIndex=2 OnHUDIcon=Texture'KillingFloorHUD.Perks.Perk_SharpShooter' OnHUDGoldIcon=Texture'KillingFloor2HUD.Perk_Icons.Perk_SharpShooter_Gold' VeterancyName="Sharpshooter" Requirements(0)="Required experience for the next level: %x" }