First commit

This commit is contained in:
Anton Tarasenko 2020-02-16 19:53:59 +07:00
commit 5b48414900
263 changed files with 24830 additions and 0 deletions

View file

@ -0,0 +1,9 @@
class NiceDamageTypeVetSharpshooter extends NiceWeaponDamageType
abstract;
static function ScoredNiceHeadshot(KFSteamStatsAndAchievements KFStatsAndAchievements, class<KFMonster> monsterClass, int HL){
if(SRStatsBase(KFStatsAndAchievements) != none && SRStatsBase(KFStatsAndAchievements).Rep != none) SRStatsBase(KFStatsAndAchievements).Rep.ProgressCustomValue(Class'NiceVetSharpshooterExp', Int(class'NicePack'.default.vetSharpHeadshotExpCost * getScale(HL)));
super.ScoredNiceHeadshot(KFStatsAndAchievements, monsterClass, HL);
}
defaultproperties
{
}

View file

@ -0,0 +1,52 @@
//==============================================================================
// NicePack / NiceSharpshooterAbilitiesAdapter
//==============================================================================
// Temporary stand-in for future functionality.
// Use this class to catch events from sharpshooter players' abilities.
//==============================================================================
// 'Nice pack' source
// Do whatever the fuck you want with it
// Author: dkanus
// E-mail: dkanus@gmail.com
//==============================================================================
class NiceSharpshooterAbilitiesAdapter extends NiceAbilitiesAdapter;
static function AbilityActivated( string abilityID, NicePlayerController relatedPlayer){
local NiceHumanPawn nicePawn;
if(relatedPlayer == none) return;
nicePawn = NiceHumanPawn(relatedPlayer.pawn);
if(nicePawn == none) return;
if(abilityID == "Calibration"){ nicePawn.currentCalibrationState = CALSTATE_ACTIVE; nicePawn.calibrateUsedZeds.length = 0; nicePawn.calibrationScore = 1; nicePawn.calibrationRemainingTime = 7.0; nicePawn.calibrationHits = 0; nicePawn.calibrationTotalShots = 0;
}
if(abilityID == class'NiceSkillSharpshooterGunslingerA'.default.abilityID){ nicePawn.gunslingerTimer = class'NiceSkillSharpshooterGunslingerA'.default.duration;
}
}
static function AbilityAdded( string abilityID, NicePlayerController relatedPlayer){
local NiceHumanPawn nicePawn;
if(relatedPlayer == none) return;
nicePawn = NiceHumanPawn(relatedPlayer.pawn);
if(nicePawn == none) return;
if(abilityID == "Calibration"){ nicePawn.currentCalibrationState = CALSTATE_FINISHED; nicePawn.calibrationScore = 1;
}
}
static function AbilityRemoved( string abilityID, NicePlayerController relatedPlayer){
local NiceHumanPawn nicePawn;
if(relatedPlayer == none) return;
nicePawn = NiceHumanPawn(relatedPlayer.pawn);
if(nicePawn == none) return;
if(abilityID == "Calibration") nicePawn.currentCalibrationState = CALSTATE_NOABILITY;
if(abilityID == class'NiceSkillSharpshooterGunslingerA'.default.abilityID){ nicePawn.gunslingerTimer = 0.0;
}
}
static function ModAbilityCooldown( string abilityID, NicePlayerController relatedPlayer, out float cooldown){
local NiceHumanPawn nicePawn;
if(relatedPlayer == none) return;
nicePawn = NiceHumanPawn(relatedPlayer.pawn);
if( abilityID != class'NiceSkillSharpshooterGunslingerA'.default.abilityID && abilityID != class'NiceSkillSharpshooterReaperA'.default.abilityID) return;
switch(nicePawn.calibrationScore){ case 2: cooldown *= 0.85; break; case 3: cooldown *= 0.7; break; case 4: cooldown *= 0.5; break; case 5: cooldown *= 0.25; break;
}
// Reduce calibration score
if(nicePawn.calibrationScore > 1) nicePawn.calibrationScore -= 1;
}
defaultproperties
{
}

View file

@ -0,0 +1,163 @@
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<int> GetProgressArray(byte ReqNum, optional out int DoubleScalingBase){
return default.progressArray0;
}
static function float GetNiceHeadShotDamMulti(KFPlayerReplicationInfo KFPRI, NiceMonster zed, class<DamageType> DmgType){
local float ret;
local NicePlayerController nicePlayer;
local NiceHumanPawn nicePawn;
local float calibratedTalentBonus;
local class<NiceWeaponPickup> pickupClass;
if(class<DamTypeMelee>(DmgType) != none || class<NiceDamageTypeVetBerserker>(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'NiceSkillSharpshooterTalent')){
calibratedTalentBonus = 0.1f * Min(nicePawn.calibrationScore, 3);
ret *= (1.0 + calibratedTalentBonus);
}
//}
return ret;
}
static function float GetReloadSpeedModifierStatic(KFPlayerReplicationInfo KFPRI, class<KFWeapon> Other){
local float reloadMult;
//local float reloadScale;
local NicePlayerController nicePlayer;
local NiceHumanPawn nicePawn;
local float calibratedReloadBonus;
local class<NiceWeaponPickup> 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'NiceSkillSharpshooterHardWork')){
//reloadScale = VSize(nicePlayer.pawn.velocity) / nicePlayer.pawn.groundSpeed;
//reloadScale = 1.0 - reloadScale;
if(nicePawn.calibrationScore >= 3)
calibratedReloadBonus = class'NiceSkillSharpshooterHardWork'.default.reloadBonus;
else if(nicePawn.calibrationScore == 2)
calibratedReloadBonus = 0.5f * class'NiceSkillSharpshooterHardWork'.default.reloadBonus;
else
calibratedReloadBonus = 0.25f * class'NiceSkillSharpshooterHardWork'.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<Weapon> 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'NiceSkillSharpshooterHardWork')){
if(nicePawn.calibrationScore >= 3)
calibratedFireSpeedBonus = class'NiceSkillSharpshooterHardWork'.default.fireRateBonus;
else if(nicePawn.calibrationScore == 2)
calibratedFireSpeedBonus = (2.0f/3.0f) * class'NiceSkillSharpshooterHardWork'.default.fireRateBonus;
else
calibratedFireSpeedBonus = (1.0f/3.0f) * class'NiceSkillSharpshooterHardWork'.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'NiceSkillSharpshooterHardWork'))
Recoil = class'NiceSkillSharpshooterHardWork'.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'NicePack.NiceSkillSharpshooterKillConfirmed'
SkillGroupA(1)=Class'NicePack.NiceSkillSharpshooterTalent'
SkillGroupA(2)=Class'NicePack.NiceSkillSharpshooterDieAlready'
SkillGroupA(3)=Class'NicePack.NiceSkillSharpshooterReaperA'
SkillGroupA(4)=Class'NicePack.NiceSkillSharpshooterZEDAdrenaline'
SkillGroupB(0)=Class'NicePack.NiceSkillSharpshooterSurgical'
SkillGroupB(1)=Class'NicePack.NiceSkillSharpshooterHardWork'
SkillGroupB(2)=Class'NicePack.NiceSkillSharpshooterArdour'
SkillGroupB(3)=Class'NicePack.NiceSkillSharpshooterGunslingerA'
SkillGroupB(4)=Class'NicePack.NiceSkillSharpshooterZEDHundredGauntlets'
progressArray0(0)=100
progressArray0(1)=1000
progressArray0(2)=3000
progressArray0(3)=10000
progressArray0(4)=30000
progressArray0(5)=100000
progressArray0(6)=200000
DefaultDamageType=Class'NicePack.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"
}

View file

@ -0,0 +1,4 @@
class NiceVetSharpshooterExp extends SRCustomProgressInt;
defaultproperties
{ ProgressName="Sharpshooter exp."
}

View file

@ -0,0 +1,17 @@
class NiceSkillSharpshooterArdour extends NiceSkill
abstract;
var float headshotKillReduction[5];
var float justHeadshotReduction;
defaultproperties
{
justHeadshotReduction=0.250000
headshotKillReduction(0)=0.5f
headshotKillReduction(1)=1.0f
headshotKillReduction(2)=1.25f
headshotKillReduction(3)=1.5f
headshotKillReduction(4)=2.0f
SkillName="Ardour"
SkillEffects="Head-shotting enemies reduces your cooldowns."
}

View file

@ -0,0 +1,13 @@
class NiceSkillSharpshooterDieAlready extends NiceSkill
abstract;
var float bleedOutTime[5];
defaultproperties
{
BleedOutTime(0)=2.0f
BleedOutTime(1)=1.5f
BleedOutTime(2)=1.25f
BleedOutTime(3)=1.0f
BleedOutTime(4)=0.25f
SkillName="Die already"
SkillEffects="All zeds decapitated by you drop faster."
}

View file

@ -0,0 +1,31 @@
class NiceSkillSharpshooterGunslingerA extends NiceSkillAbility
abstract;
var string abilityID;
var float cooldown, duration;
var float reloadMult, movementMult, fireRateMult;
function static SkillSelected(NicePlayerController nicePlayer){
local NiceAbilityManager.NiceAbilityDescription reaper;
if(nicePlayer == none) return;
if(nicePlayer.abilityManager == none) return;
reaper.ID = default.abilityID;
reaper.icon = Texture'NicePackT.HudCounter.playful';
reaper.cooldownLength = default.cooldown;
reaper.canBeCancelled = false;
nicePlayer.abilityManager.AddAbility(reaper);
}
function static SkillDeSelected(NicePlayerController nicePlayer){
if(nicePlayer == none) return;
if(nicePlayer.abilityManager == none) return;
nicePlayer.abilityManager.RemoveAbility(default.abilityID);
}
defaultproperties
{
abilityID="Gunslinger"
cooldown=80.000000
Duration=15.000000
reloadMult=1.500000
movementMult=1.2500000
fireRateMult=1.300000
SkillName="Gunslinger"
SkillEffects="Reload, fire and move faster. All with no recoil."
}

View file

@ -0,0 +1,17 @@
class NiceSkillSharpshooterHardWork extends NiceSkill
abstract;
var float zoomBonus;
var float zoomSpeedBonus;
var float reloadBonus;
var float fireRateBonus;
var float recoilMult;
defaultproperties
{
zoomBonus=0.750000
zoomSpeedBonus=0.500000
ReloadBonus=0.500000
fireRateBonus=0.300000
recoilMult=0.500000
SkillName="Hard work"
SkillEffects="Reload up to 50% faster, shoot up to 30% faster and recoil only for half as much. Additionally, you can switch to/from iron sights twice as fast and zoom 25% further while crouched."
}

View file

@ -0,0 +1,50 @@
class NiceSkillSharpshooterKillConfirmed extends NiceSkill
abstract;
var float damageBonus;
var float stackDelay;
var int maxStacks;
function static SkillSelected(NicePlayerController nicePlayer){
local NicePack niceMutator;
super.SkillSelected(nicePlayer);
niceMutator = class'NicePack'.static.Myself(nicePlayer.Level);
if(niceMutator == none || niceMutator.Role == Role_AUTHORITY)
return;
niceMutator.AddCounter("npSharpConfirmed", Texture'NicePackT.HudCounter.zedHeadStreak', false, default.class);
}
function static SkillDeSelected(NicePlayerController nicePlayer){
local NicePack niceMutator;
super.SkillDeSelected(nicePlayer);
niceMutator = class'NicePack'.static.Myself(nicePlayer.Level);
if(niceMutator == none || niceMutator.Role == Role_AUTHORITY)
return;
niceMutator.RemoveCounter("npSharpConfirmed");
}
function static int UpdateCounterValue(string counterName, NicePlayerController nicePlayer){
local NiceHumanPawn nicePawn;
local NiceWeapon niceWeap;
local NiceFire niceF;
local float lockOnTickRate;
local int lockonTicks;
if(nicePlayer == none || counterName != "npSharpConfirmed")
return 0;
nicePawn = NiceHumanPawn(nicePlayer.pawn);
if(nicePawn != none)
niceWeap = NiceWeapon(nicePawn.weapon);
if(niceWeap != none)
niceF = niceWeap.GetMainFire();
if(niceF == none)
return 0;
lockOnTickRate = class'NiceSkillSharpshooterKillConfirmed'.default.stackDelay;
lockonTicks = Ceil(niceF.fireState.lockon.time / lockOnTickRate) - 1;
lockonTicks = Min(class'NiceSkillSharpshooterKillConfirmed'.default.maxStacks, lockonTicks);
lockonTicks = Max(lockonTicks, 0);
return lockonTicks;
}
defaultproperties
{
damageBonus=1.000000
stackDelay=1.000000
maxStacks=1
SkillName="Kill confirmed"
SkillEffects="Aiming at zed's head for a second doubles the damage of the shot."
}

View file

@ -0,0 +1,26 @@
class NiceSkillSharpshooterReaperA extends NiceSkill
abstract;
var string abilityID;
var float cooldown;
function static SkillSelected(NicePlayerController nicePlayer){
local NiceAbilityManager.NiceAbilityDescription reaper;
if(nicePlayer == none) return;
if(nicePlayer.abilityManager == none) return;
reaper.ID = default.abilityID;
reaper.icon = Texture'NicePackT.HudCounter.t4th';
reaper.cooldownLength = default.cooldown;
reaper.canBeCancelled = true;
nicePlayer.abilityManager.AddAbility(reaper);
}
function static SkillDeSelected(NicePlayerController nicePlayer){
if(nicePlayer == none) return;
if(nicePlayer.abilityManager == none) return;
nicePlayer.abilityManager.RemoveAbility(default.abilityID);
}
defaultproperties
{
abilityID="Reaper"
cooldown=24.000000
SkillName="Reaper"
SkillEffects="If it would take 2 head-shot to kill the zed, - it'll die from one."
}

View file

@ -0,0 +1,5 @@
class NiceSkillSharpshooterStability extends NiceSkill
abstract;
defaultproperties
{ SkillName="Stability" SkillEffects="Have zero recoil while shooting in ironsights with perked weapons."
}

View file

@ -0,0 +1,9 @@
class NiceSkillSharpshooterSurgical extends NiceSkill
abstract;
var float penDmgReduction;
defaultproperties
{
PenDmgReduction=0.900000
SkillName="Surgical precision"
SkillEffects="While you're aiming down sights your bullets and projectiles gain additional head penetration with only 10% damage loss."
}

View file

@ -0,0 +1,7 @@
class NiceSkillSharpshooterTalent extends NiceSkill
abstract;
defaultproperties
{
SkillName="Talent"
SkillEffects="You gain additional up to 30% headshot damage bonus."
}

View file

@ -0,0 +1,27 @@
class NiceSkillSharpshooterZEDAdrenaline extends NiceSkill
abstract;
function static SkillSelected(NicePlayerController nicePlayer){
local NicePack niceMutator;
super.SkillSelected(nicePlayer);
niceMutator = class'NicePack'.static.Myself(nicePlayer.Level);
if(niceMutator == none || niceMutator.Role == Role_AUTHORITY) return;
niceMutator.AddCounter("npGunsAdrenaline", Texture'NicePackT.HudCounter.variant', false, default.class);
}
function static SkillDeSelected(NicePlayerController nicePlayer){
local NicePack niceMutator;
super.SkillDeSelected(nicePlayer);
niceMutator = class'NicePack'.static.Myself(nicePlayer.Level);
if(niceMutator == none || niceMutator.Role == Role_AUTHORITY) return;
niceMutator.RemoveCounter("npGunsAdrenaline");
}
function static int UpdateCounterValue(string counterName, NicePlayerController nicePlayer){
local NicePack niceMutator;
if(nicePlayer == none || counterName != "npGunsAdrenaline" || !nicePlayer.IsZedTimeActive()) return 0;
if(nicePlayer.bJunkieExtFailed) return 0;
if(nicePlayer.Pawn != none) niceMutator = class'NicePack'.static.Myself(nicePlayer.Pawn.Level);
if(niceMutator == none) return 0;
return niceMutator.junkieNextGoal - niceMutator.junkieDoneHeadshots;
}
defaultproperties
{ SkillName="Adrenaline junkie" SkillEffects="Prolong zed-time by making head-shots. Each consecutive extension requires 1 more head-shot than a previous one. Body-shotting removes your ability to prolong zed-time."
}

View file

@ -0,0 +1,5 @@
class NiceSkillSharpshooterZEDHundredGauntlets extends NiceSkill
abstract;
defaultproperties
{ SkillName="Hundred Gauntlets" SkillEffects="You don't waste ammo during zed-time."
}

View file

@ -0,0 +1,6 @@
class NiceSkillSharpshooterZEDOverkill extends NiceSkill
abstract;
var float damageBonus;
defaultproperties
{ damageBonus=2.250000 SkillName="Overkill" SkillEffects="Deal 225% head-shot damage during zed-time."
}

View file

@ -0,0 +1,5 @@
class NiceSkillSharpshooterZEDRailgun extends NiceSkill
abstract;
defaultproperties
{ SkillName="Railgun" SkillEffects="Your bullets pass through everything without losing damage during zed-time."
}