Apply dirty patch (messed up line endings)

This commit is contained in:
Anton Tarasenko 2020-04-18 18:22:54 +07:00
parent 12d95e387e
commit 51bb9add5b
30 changed files with 1354 additions and 714 deletions

View File

@ -11,10 +11,14 @@ function InitComponent(GUIController MyController, GUIComponent MyOwner)
function bool SkillChange(GUIComponent Sender){
local byte newSkillChoice;
local NicePlayerController skillOwner;
if(isAltSkill) newSkillChoice = 1;
else newSkillChoice = 0;
if(isAltSkill)
newSkillChoice = 1;
else
newSkillChoice = 0;
skillOwner = NicePlayerController(PlayerOwner());
if(skillOwner != none){ skillOwner.ServerSetSkill(skillPerkIndex, skillIndex, newSkillChoice); skillOwner.SaveConfig();
if(skillOwner != none){
skillOwner.ServerSetSkill(skillPerkIndex, skillIndex, newSkillChoice);
skillOwner.SaveConfig();
}
return true;
}
@ -33,38 +37,110 @@ function bool DrawSkillButton(Canvas cnvs){
// Get skill parameters
skillOwner = NicePlayerController(PlayerOwner());
bAvailable = class'NiceVeterancyTypes'.static.CanUseSkill(skillOwner, associatedSkill);
if(bAvailable) bSelected = class'NiceVeterancyTypes'.static.HasSkill(skillOwner, associatedSkill);
if(bAvailable)
bSelected = class'NiceVeterancyTypes'.static.HasSkill(skillOwner, associatedSkill);
bPending = class'NiceVeterancyTypes'.static.IsSkillPending(skillOwner, associatedSkill);
if(skillOwner == none || associatedSkill == none) return true;
if(skillOwner == none || associatedSkill == none)
return true;
// Text offset parameters that seem to give a good result
horizontalOffset = 10;
verticalOffset = 5;
smVerticalOffset = 2;
if (ActualWidth() > 400)
{
horizontalOffset = 10;
}
else if (ActualWidth() > 320)
{
horizontalOffset = 5;
}
// Backup old font values and set the new ones
oldFont = cnvs.Font;
oldFontScaleX = cnvs.FontScaleX;
oldFontScaleY = cnvs.FontScaleY;
cnvs.Font = class'ROHUD'.Static.LoadSmallFontStatic(3);
cnvs.FontScaleX = 1.0;
cnvs.FontScaleY = 1.0;
if (ActualWidth() > 700)
{
cnvs.Font = class'ROHUD'.Static.LoadSmallFontStatic(3);
}
else if (ActualWidth() > 500)
{
cnvs.Font = class'ROHUD'.Static.LoadSmallFontStatic(5);
}
else if (ActualWidth() > 400)
{
cnvs.Font = class'ROHUD'.Static.LoadSmallFontStatic(6);
}
else if (ActualWidth() > 320)
{
cnvs.Font = class'ROHUD'.Static.LoadSmallFontStatic(7);
}
else if (ActualWidth() > 250)
{
cnvs.Font = class'ROHUD'.Static.LoadSmallFontStatic(8);
}
else
{
cnvs.Font = class'ROHUD'.Static.LoadSmallFontStatic(8);
cnvs.FontScaleX = 0.9;
cnvs.FontScaleY = 0.9;
}
// Draw text
// - Name
cnvs.SetPos(ActualLeft() + horizontalOffset, ActualTop() + verticalOffset);
if(!bAvailable) cnvs.SetDrawColor(0, 0, 0);
else if(bSelected) cnvs.SetDrawColor(255, 255, 255);
else cnvs.SetDrawColor(128, 128, 128);
if(!bAvailable)
cnvs.SetDrawColor(0, 0, 0);
else if(bSelected)
cnvs.SetDrawColor(255, 255, 255);
else
cnvs.SetDrawColor(128, 128, 128);
//cnvs.DrawText(string(ActualWidth()));
cnvs.DrawText(associatedSkill.default.skillName);
cnvs.TextSize(associatedSkill.default.skillName, textWidth, nameHeight);
// - Description
cnvs.Font = class'ROHUD'.Static.LoadSmallFontStatic(5);
if(!bAvailable) cnvs.SetDrawColor(0, 0, 0);
else if(bSelected) cnvs.SetDrawColor(220, 220, 220);//180
else cnvs.SetDrawColor(140, 140, 140);//100
if (ActualWidth() > 700)
{
cnvs.Font = class'ROHUD'.Static.LoadSmallFontStatic(5);
}
else if (ActualWidth() > 500)
{
cnvs.Font = class'ROHUD'.Static.LoadSmallFontStatic(6);
}
else if (ActualWidth() > 400)
{
cnvs.Font = class'ROHUD'.Static.LoadSmallFontStatic(7);
}
else
{
cnvs.Font = class'ROHUD'.Static.LoadSmallFontStatic(8);
}
if(!bAvailable)
cnvs.SetDrawColor(0, 0, 0);
else if(bSelected)
cnvs.SetDrawColor(220, 220, 220);//180
else
cnvs.SetDrawColor(140, 140, 140);//100
skillEffects = associatedSkill.default.skillEffects;
while(Len(skillEffects) > 0){ cnvs.WrapText(skillEffects, line, ActualWidth() - horizontalOffset * 2, cnvs.Font, cnvs.FontScaleX); cnvs.SetPos(ActualLeft() + horizontalOffset, ActualTop() + verticalOffset + nameHeight + smVerticalOffset + descLineOffset); cnvs.DrawText(line); cnvs.TextSize(line, textWidth, textHeight); descLineOffset += textHeight;
while(Len(skillEffects) > 0){
cnvs.WrapText(skillEffects, line, ActualWidth() - horizontalOffset * 2, cnvs.Font, cnvs.FontScaleX);
cnvs.SetPos(ActualLeft() + horizontalOffset, ActualTop() + verticalOffset + nameHeight + smVerticalOffset + descLineOffset);
cnvs.DrawText(line);
cnvs.TextSize(line, textWidth, textHeight);
descLineOffset += textHeight;
}
// Draw border
if(bAvailable && bSelected || bPending){ if(bAvailable && bSelected) cnvs.SetDrawColor(255, 255, 255); else cnvs.SetDrawColor(64, 64, 64); cnvs.SetPos(ActualLeft(), ActualTop()); cnvs.DrawLine(3, ActualWidth()); cnvs.DrawLine(1, ActualHeight()); cnvs.SetPos(ActualLeft() + ActualWidth() + 2, ActualTop() + ActualHeight()); cnvs.DrawLine(2, ActualWidth() + 2); cnvs.SetPos(ActualLeft() + ActualWidth(), ActualTop() + ActualHeight() + 2); cnvs.DrawLine(0, ActualHeight() + 2);
if(bAvailable && bSelected || bPending){
if(bAvailable && bSelected)
cnvs.SetDrawColor(255, 255, 255);
else
cnvs.SetDrawColor(64, 64, 64);
cnvs.SetPos(ActualLeft(), ActualTop());
cnvs.DrawLine(3, ActualWidth());
cnvs.DrawLine(1, ActualHeight());
cnvs.SetPos(ActualLeft() + ActualWidth() + 2, ActualTop() + ActualHeight());
cnvs.DrawLine(2, ActualWidth() + 2);
cnvs.SetPos(ActualLeft() + ActualWidth(), ActualTop() + ActualHeight() + 2);
cnvs.DrawLine(0, ActualHeight() + 2);
}
cnvs.Font = oldFont;
cnvs.FontScaleX = oldFontScaleX;

View File

@ -71,12 +71,14 @@ function ReplaceRequiredEquipment(){
simulated function int CalculateCalibrationScore(){
local float accuracy;
accuracy = (float(calibrationHits)) / (float(calibrationTotalShots));
if(calibrationTotalShots <= 0)
return 3;
// Very low accuracy (<60%) or not enough shots (<2) - 1 star
if(calibrationTotalShots < 2 || accuracy < 0.6)
if(accuracy < 0.6)
return 1;
// Here we definitely have at least 60% accuracy and 2 shots.
// Low accuracy (<80%) or not enough shots (<5) - 2 stars.
if(calibrationTotalShots < 5 || accuracy < 0.8)
if(accuracy < 0.8)
return 2;
// Here we definitely have at least 80% accuracy and 5 shots.
// If amount of shots is below 7 - it's 3 stars at most.

View File

@ -175,7 +175,7 @@ simulated function PostBeginPlay(){
super.PostBeginPlay();
class'NicePack'.default.Mut = self;
// Gun skins
/*class'NicePack.NiceMaulerPickup'.default.VariantClasses[class'NicePack.NiceMaulerPickup'.default.VariantClasses.length] = class'ScrnBalanceSrv.ScrnSPSniperPickup';
class'NicePack.NiceMaulerPickup'.default.VariantClasses[class'NicePack.NiceMaulerPickup'.default.VariantClasses.length] = class'ScrnBalanceSrv.ScrnSPSniperPickup';
class'NicePack.NiceDeaglePickup'.default.VariantClasses[class'NicePack.NiceDeaglePickup'.default.VariantClasses.length] = class'NicePack.SkinExecutionerPickup';
class'NicePack.NiceDualDeaglePickup'.default.VariantClasses[class'NicePack.NiceDualDeaglePickup'.default.VariantClasses.length] = class'NicePack.SkinDualExecutionerPickup';
class'NicePack.NiceMagnumPickup'.default.VariantClasses[class'NicePack.NiceMagnumPickup'.default.VariantClasses.length] = class'NicePack.SkinCowboyMagnumPickup';
@ -183,7 +183,7 @@ simulated function PostBeginPlay(){
class'NicePack.NiceWinchesterPickup'.default.VariantClasses[class'NicePack.NiceWinchesterPickup'.default.VariantClasses.length] = class'NicePack.SkinRetroLARPickup';
class'NicePack.NiceM14EBRPickup'.default.VariantClasses[class'NicePack.NiceM14EBRPickup'.default.VariantClasses.length] = class'NicePack.SkinM14EBR2ProPickup';
class'ScrnBalanceSrv.ScrnKrissMPickup'.default.VariantClasses[class'ScrnBalanceSrv.ScrnKrissMPickup'.default.VariantClasses.length] = class'NicePack.SkinGoldenKrissPickup';
class'NicePack.NiceSCARMK17Pickup'.default.VariantClasses[class'NicePack.NiceSCARMK17Pickup'.default.VariantClasses.length] = class'NicePack.SkinCamoSCARMK17Pickup';*/
class'NicePack.NiceSCARMK17Pickup'.default.VariantClasses[class'NicePack.NiceSCARMK17Pickup'.default.VariantClasses.length] = class'NicePack.SkinCamoSCARMK17Pickup';
// Abilities
class'NiceAbilityManager'.default.events.static.AddAdapter(class'NiceSharpshooterAbilitiesAdapter', level);
SetTimer(0.25, true);

View File

@ -14,7 +14,8 @@ static function int AddDamage(KFPlayerReplicationInfo KFPRI, KFMonster Injured,
local class<NiceWeaponPickup> pickupClass;
pickupClass = GetPickupFromDamageType(DmgType);
perkDamage = float(InDamage);
if(IsPerkedPickup(pickupClass)) perkDamage *= 2;
if(IsPerkedPickup(pickupClass))
perkDamage *= 2;
return perkDamage;
}
static function float GetFireSpeedModStatic(KFPlayerReplicationInfo KFPRI, class<Weapon> other){
@ -25,11 +26,16 @@ static function float GetFireSpeedModStatic(KFPlayerReplicationInfo KFPRI, class
pickupClass = GetPickupFromWeapon(other);
bonus = 1.0;
nicePlayer = NicePlayerController(KFPRI.Owner);
if(IsPerkedPickup(pickupClass)) bonus *= 1.25;
if(IsPerkedPickup(pickupClass))
bonus *= 1.25;
nicePawn = NiceHumanPawn(nicePlayer.Pawn);
if(nicePlayer != none && nicePawn != none && HasSkill(nicePlayer, class'NiceSkillZerkFury') && IsPerkedPickup(pickupClass)){ if(nicePawn != none && nicePawn.invincibilityTimer > 0.0) bonus *= class'NiceSkillZerkFury'.default.attackSpeedBonus;
if(nicePlayer != none && nicePawn != none && HasSkill(nicePlayer, class'NiceSkillZerkFury') && IsPerkedPickup(pickupClass)){
if(nicePawn != none && nicePawn.invincibilityTimer > 0.0)
bonus *= class'NiceSkillZerkFury'.default.attackSpeedBonus;
}
if(nicePlayer != none && nicePawn != none && nicePlayer.IsZedTimeActive() && IsPerkedPickup(pickupClass) && HasSkill(nicePlayer, class'NiceSkillZerkZEDAccelerate')) bonus /= (nicePawn.Level.TimeDilation / 1.1);
if(nicePlayer != none && nicePawn != none && nicePlayer.IsZedTimeActive() && IsPerkedPickup(pickupClass)
&& HasSkill(nicePlayer, class'NiceSkillZerkZEDAccelerate'))
bonus /= (nicePawn.Level.TimeDilation / 1.1);
return bonus;
}
static function float GetMeleeMovementSpeedModifier(KFPlayerReplicationInfo KFPRI){
@ -39,7 +45,9 @@ static function float GetMovementSpeedModifier(KFPlayerReplicationInfo KFPRI, KF
{
local NicePlayerController nicePlayer;
nicePlayer = NicePlayerController(KFPRI.Owner);
if(nicePlayer != none && nicePlayer.IsZedTimeActive() && HasSkill(nicePlayer, class'NiceSkillZerkZEDAccelerate')) return 1.0 / fmin(1.0, (KFGRI.Level.TimeDilation / 1.1));
if(nicePlayer != none && nicePlayer.IsZedTimeActive()
&& HasSkill(nicePlayer, class'NiceSkillZerkZEDAccelerate'))
return 1.0 / fmin(1.0, (KFGRI.Level.TimeDilation / 1.1));
return 1.0;
}
static function float GetWeaponMovementSpeedBonus(KFPlayerReplicationInfo KFPRI, Weapon Weap){
@ -48,8 +56,11 @@ static function float GetWeaponMovementSpeedBonus(KFPlayerReplicationInfo KFPRI,
local NiceHumanPawn nicePawn;
bonus = 0.0;
nicePlayer = NicePlayerController(KFPRI.Owner);
if(nicePlayer != none) nicePawn = NiceHumanPawn(nicePlayer.Pawn);
if(nicePlayer != none && nicePawn != none && HasSkill(nicePlayer, class'NiceSkillZerkWhirlwind')){ if(nicePawn != none && nicePawn.invincibilityTimer > 0.0) bonus = 1.0;
if(nicePlayer != none)
nicePawn = NiceHumanPawn(nicePlayer.Pawn);
if(nicePlayer != none && nicePawn != none && HasSkill(nicePlayer, class'NiceSkillZerkWhirlwind')){
if(nicePawn != none && nicePawn.invincibilityTimer > 0.0)
bonus = 1.0;
}
return bonus;
}
@ -60,23 +71,24 @@ static function bool CanBeGrabbed(KFPlayerReplicationInfo KFPRI, KFMonster Other
static function int ZedTimeExtensions(KFPlayerReplicationInfo KFPRI){
return 4;
}
static function float SlowingModifier(KFPlayerReplicationInfo KFPRI){
return 1.2;
}
static function int GetInvincibilityExtentions(KFPlayerReplicationInfo KFPRI){
return 3;
}
static function int GetInvincibilityDuration(KFPlayerReplicationInfo KFPRI){
local NicePlayerController nicePlayer;
nicePlayer = NicePlayerController(KFPRI.Owner);
if( nicePlayer != none && HasSkill(nicePlayer, class'NiceSkillZerkColossus')){ return 3.0 + class'NiceSkillZerkColossus'.default.timeBonus;
if( nicePlayer != none
&& HasSkill(nicePlayer, class'NiceSkillZerkColossus')){
return 3.0 + class'NiceSkillZerkColossus'.default.timeBonus;
}
return 3.0;
}
static function int GetInvincibilitySafeMisses(KFPlayerReplicationInfo KFPRI){
local NicePlayerController nicePlayer;
nicePlayer = NicePlayerController(KFPRI.Owner);
if( nicePlayer != none && HasSkill(nicePlayer, class'NiceSkillZerkUndead')){ return 1 + class'NiceSkillZerkUndead'.default.addedSafeMisses;
if( nicePlayer != none
&& HasSkill(nicePlayer, class'NiceSkillZerkUndead')){
return 1 + class'NiceSkillZerkUndead'.default.addedSafeMisses;
}
return 1;
}
@ -84,5 +96,36 @@ static function string GetCustomLevelInfo(byte Level){
return default.CustomLevelInfo;
}
defaultproperties
{ bNewTypePerk=True SkillGroupA(0)=Class'NicePack.NiceSkillZerkWindCutter' SkillGroupA(1)=Class'NicePack.NiceSkillZerkWhirlwind' SkillGroupA(2)=Class'NicePack.NiceSkillZerkColossus' SkillGroupA(3)=Class'NicePack.NiceSkillZerkUndead' SkillGroupA(4)=Class'NicePack.NiceSkillZerkZEDAccelerate' SkillGroupB(0)=Class'NicePack.NiceSkillZerkCleave' SkillGroupB(1)=Class'NicePack.NiceSkillZerkFury' SkillGroupB(2)=Class'NicePack.NiceSkillZerkGunzerker' SkillGroupB(3)=Class'NicePack.NiceSkillZerkVorpalBlade' SkillGroupB(4)=Class'NicePack.NiceSkillZerkZEDUnbreakable' progressArray0(0)=100 progressArray0(1)=1000 progressArray0(2)=3000 progressArray0(3)=10000 progressArray0(4)=30000 progressArray0(5)=100000 progressArray0(6)=200000 DefaultDamageType=Class'NicePack.NiceDamageTypeVetBerserker' OnHUDIcons(0)=(PerkIcon=Texture'KillingFloorHUD.Perks.Perk_Berserker',StarIcon=Texture'KillingFloorHUD.HUD.Hud_Perk_Star',DrawColor=(B=255,G=255,R=255,A=255)) OnHUDIcons(1)=(PerkIcon=Texture'KillingFloor2HUD.Perk_Icons.Perk_Berserker_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_Berserker_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_Berserker_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_Berserker_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_Berserker_Orange',StarIcon=Texture'ScrnTex.Perks.Hud_Perk_Star_Orange',DrawColor=(B=255,G=255,R=255,A=255)) CustomLevelInfo="Level up by doing damage with perked weapons|100% extra melee damage|25% faster melee attacks|20% faster melee movement|Melee invincibility lasts 3 seconds|Melee invincibility doesn't reset on your first miss|Up to 4 Zed-Time Extensions|Can't be grabbed by clots|Can activate melee-invincibility with non-decapitating head-shots up to 3 times" PerkIndex=4 OnHUDIcon=Texture'KillingFloorHUD.Perks.Perk_Berserker' OnHUDGoldIcon=Texture'KillingFloor2HUD.Perk_Icons.Perk_Berserker_Gold' VeterancyName="Berserker" Requirements(0)="Required experience for the next level: %x"
{
bNewTypePerk=True
SkillGroupA(0)=Class'NicePack.NiceSkillZerkWindCutter'
SkillGroupA(1)=Class'NicePack.NiceSkillZerkWhirlwind'
SkillGroupA(2)=Class'NicePack.NiceSkillZerkColossus'
SkillGroupA(3)=Class'NicePack.NiceSkillZerkUndead'
SkillGroupA(4)=Class'NicePack.NiceSkillZerkZEDAccelerate'
SkillGroupB(0)=Class'NicePack.NiceSkillZerkCleave'
SkillGroupB(1)=Class'NicePack.NiceSkillZerkFury'
SkillGroupB(2)=Class'NicePack.NiceSkillZerkGunzerker'
SkillGroupB(3)=Class'NicePack.NiceSkillZerkVorpalBlade'
SkillGroupB(4)=Class'NicePack.NiceSkillZerkZEDUnbreakable'
progressArray0(0)=100
progressArray0(1)=1000
progressArray0(2)=3000
progressArray0(3)=10000
progressArray0(4)=30000
progressArray0(5)=100000
progressArray0(6)=200000
DefaultDamageType=Class'NicePack.NiceDamageTypeVetBerserker'
OnHUDIcons(0)=(PerkIcon=Texture'KillingFloorHUD.Perks.Perk_Berserker',StarIcon=Texture'KillingFloorHUD.HUD.Hud_Perk_Star',DrawColor=(B=255,G=255,R=255,A=255))
OnHUDIcons(1)=(PerkIcon=Texture'KillingFloor2HUD.Perk_Icons.Perk_Berserker_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_Berserker_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_Berserker_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_Berserker_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_Berserker_Orange',StarIcon=Texture'ScrnTex.Perks.Hud_Perk_Star_Orange',DrawColor=(B=255,G=255,R=255,A=255))
CustomLevelInfo="Level up by doing damage with perked weapons|100% extra melee damage|25% faster melee attacks|20% faster melee movement|Melee invincibility lasts 3 seconds|Melee invincibility doesn't reset on your first miss|Up to 4 Zed-Time Extensions|Can't be grabbed by clots|Can activate melee-invincibility with non-decapitating head-shots up to 3 times"
PerkIndex=4
OnHUDIcon=Texture'KillingFloorHUD.Perks.Perk_Berserker'
OnHUDGoldIcon=Texture'KillingFloor2HUD.Perk_Icons.Perk_Berserker_Gold'
VeterancyName="Berserker"
Requirements(0)="Required experience for the next level: %x"
}

View File

@ -10,29 +10,64 @@ static function array<int> GetProgressArray(byte ReqNum, optional out int Double
return default.progressArray0;
}
static function float GetHealthBarsDistanceMulti(KFPlayerReplicationInfo KFPRI){
if(KFPRI != none && SomeoneHasSkill(NicePlayerController(KFPRI.Owner), class'NiceSkillCommandoStrategist')) return class'NiceSkillCommandoStrategist'.default.visionRadius;
if(KFPRI != none && SomeoneHasSkill(NicePlayerController(KFPRI.Owner), class'NiceSkillCommandoStrategist'))
return class'NiceSkillCommandoStrategist'.default.visionRadius;
return 0.0;
}
static function float GetStalkerViewDistanceMulti(KFPlayerReplicationInfo KFPRI){
if(KFPRI != none && SomeoneHasSkill(NicePlayerController(KFPRI.Owner), class'NiceSkillCommandoStrategist')) return class'NiceSkillCommandoStrategist'.default.visionRadius;
if(KFPRI != none && SomeoneHasSkill(NicePlayerController(KFPRI.Owner), class'NiceSkillCommandoStrategist'))
return class'NiceSkillCommandoStrategist'.default.visionRadius;
return 0.0;
}
static function float GetMagCapacityMod(KFPlayerReplicationInfo KFPRI, KFWeapon Other){
local class<NiceWeaponPickup> pickupClass;
pickupClass = GetPickupFromWeapon(other.class);
if(IsPerkedPickup(pickupClass) && HasSkill(NicePlayerController(KFPRI.Owner), class'NiceSkillCommandoLargerMags')) return class'NiceSkillCommandoLargerMags'.default.sizeBonus;
if(IsPerkedPickup(pickupClass) && HasSkill(NicePlayerController(KFPRI.Owner), class'NiceSkillCommandoLargerMags'))
return class'NiceSkillCommandoLargerMags'.default.sizeBonus;
return 1.0;
}
static function float GetReloadSpeedModifierStatic(KFPlayerReplicationInfo KFPRI, class<KFWeapon> Other){
return 1.3;
}
static function int ZedTimeExtensions(KFPlayerReplicationInfo KFPRI){
if(HasSkill(NicePlayerController(KFPRI.Owner), class'NiceSkillCommandoTactitian')) return class'NiceSkillCommandoTactitian'.default.bonusExt + 3;
if(HasSkill(NicePlayerController(KFPRI.Owner), class'NiceSkillCommandoTactitian'))
return class'NiceSkillCommandoTactitian'.default.bonusExt + 3;
return 3;
}
static function string GetCustomLevelInfo(byte Level){
return default.CustomLevelInfo;
}
defaultproperties
{ bNewTypePerk=True SkillGroupA(0)=Class'NicePack.NiceSkillCommandoTactitian' SkillGroupA(1)=Class'NicePack.NiceSkillCommandoCriticalFocus' SkillGroupA(2)=Class'NicePack.NiceSkillCommandoLargerMags' SkillGroupA(3)=Class'NicePack.NiceSkillCommandoPerfectExecution' SkillGroupA(4)=Class'NicePack.NiceSkillCommandoZEDProfessional' SkillGroupB(0)=Class'NicePack.NiceSkillCommandoStrategist' SkillGroupB(1)=Class'NicePack.NiceSkillCommandoTrashCleaner' SkillGroupB(2)=Class'NicePack.NiceSkillCommandoExplosivePower' SkillGroupB(3)=Class'NicePack.NiceSkillCommandoThinOut' SkillGroupB(4)=Class'NicePack.NiceSkillCommandoZEDEvisceration' progressArray0(0)=100 progressArray0(1)=1000 progressArray0(2)=3000 progressArray0(3)=10000 progressArray0(4)=30000 progressArray0(5)=100000 progressArray0(6)=200000 DefaultDamageType=Class'NicePack.NiceDamageTypeVetCommando' OnHUDIcons(0)=(PerkIcon=Texture'KillingFloorHUD.Perks.Perk_Commando',StarIcon=Texture'KillingFloorHUD.HUD.Hud_Perk_Star',DrawColor=(B=255,G=255,R=255,A=255)) OnHUDIcons(1)=(PerkIcon=Texture'KillingFloor2HUD.Perk_Icons.Perk_Commando_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_Commando_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_Commando_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_Commando_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_Commando_Orange',StarIcon=Texture'ScrnTex.Perks.Hud_Perk_Star_Orange',DrawColor=(B=255,G=255,R=255,A=255)) CustomLevelInfo="Level up by doing damage with perked weapons|30% faster reload with all weapons|You get three additional Zed-Time Extensions" PerkIndex=3 OnHUDIcon=Texture'KillingFloorHUD.Perks.Perk_Commando' OnHUDGoldIcon=Texture'KillingFloor2HUD.Perk_Icons.Perk_Commando_Gold' VeterancyName="Commando" Requirements(0)="Required experience for the next level: %x"
{
bNewTypePerk=True
SkillGroupA(0)=Class'NicePack.NiceSkillCommandoTactitian'
SkillGroupA(1)=Class'NicePack.NiceSkillCommandoCriticalFocus'
SkillGroupA(2)=Class'NicePack.NiceSkillCommandoLargerMags'
SkillGroupA(3)=Class'NicePack.NiceSkillCommandoPerfectExecution'
SkillGroupA(4)=Class'NicePack.NiceSkillCommandoZEDProfessional'
SkillGroupB(0)=Class'NicePack.NiceSkillCommandoStrategist'
SkillGroupB(1)=Class'NicePack.NiceSkillCommandoTrashCleaner'
SkillGroupB(2)=Class'NicePack.NiceSkillCommandoExplosivePower'
SkillGroupB(3)=Class'NicePack.NiceSkillCommandoGiantSlayer'
SkillGroupB(4)=Class'NicePack.NiceSkillCommandoZEDEvisceration'
progressArray0(0)=100
progressArray0(1)=1000
progressArray0(2)=3000
progressArray0(3)=10000
progressArray0(4)=30000
progressArray0(5)=100000
progressArray0(6)=200000
DefaultDamageType=Class'NicePack.NiceDamageTypeVetCommando'
OnHUDIcons(0)=(PerkIcon=Texture'KillingFloorHUD.Perks.Perk_Commando',StarIcon=Texture'KillingFloorHUD.HUD.Hud_Perk_Star',DrawColor=(B=255,G=255,R=255,A=255))
OnHUDIcons(1)=(PerkIcon=Texture'KillingFloor2HUD.Perk_Icons.Perk_Commando_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_Commando_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_Commando_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_Commando_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_Commando_Orange',StarIcon=Texture'ScrnTex.Perks.Hud_Perk_Star_Orange',DrawColor=(B=255,G=255,R=255,A=255))
CustomLevelInfo="Level up by doing damage with perked weapons|30% faster reload with all weapons|You get three additional Zed-Time Extensions"
PerkIndex=3
OnHUDIcon=Texture'KillingFloorHUD.Perks.Perk_Commando'
OnHUDGoldIcon=Texture'KillingFloor2HUD.Perk_Icons.Perk_Commando_Gold'
VeterancyName="Commando"
Requirements(0)="Required experience for the next level: %x"
}

View File

@ -6,23 +6,31 @@ 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;
if(niceMutator == none || niceMutator.Role == Role_AUTHORITY)
return;
niceMutator.AddCounter("npCommandoCriticalFocus", Texture'NicePackT.HudCounter.commandoCounter', 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;
if(niceMutator == none || niceMutator.Role == Role_AUTHORITY)
return;
niceMutator.RemoveCounter("npCommandoCriticalFocus");
}
function static int UpdateCounterValue(string counterName, NicePlayerController nicePlayer){
local NiceHumanPawn nicePawn;
if(nicePlayer == none || counterName != "npCommandoCriticalFocus") return 0;
if(nicePlayer == none || counterName != "npCommandoCriticalFocus")
return 0;
nicePawn = NiceHumanPawn(nicePlayer.pawn);
if(nicePawn == none) return 0;
if(nicePawn == none)
return 0;
return Ceil(nicePawn.forcedZedTimeCountDown);
}
defaultproperties
{ cooldown=30.000000 healthBoundary=50.000000 SkillName="Critical focus"
{
cooldown=30.000000
healthBoundary=50.000000
SkillName="Critical focus"
SkillEffects="Activates zed time once you fall below 50% health. Has a cooldown of 30 seconds."
}

View File

@ -0,0 +1,11 @@
class NiceSkillCommandoGiantSlayer extends NiceSkill
abstract;
var float bonusDamageMult;
var float healthStep;
defaultproperties
{
healthStep=1000.000000
bonusDamageMult=0.05000
SkillName="Giant slayer"
SkillEffects="For every 1000 of health zed currently has, you deal additional 5% damage."
}

View File

@ -1,7 +0,0 @@
class NiceSkillCommandoThinOut extends NiceSkill
abstract;
var float damageMult;
var float maxDistance;
defaultproperties
{ damageMult=2.000000 MaxDistance=800.000000 SkillName="Thin out" SkillEffects="Deal double damage against non-trash zeds, when there's either a huge zed or another zed of the same type within 16 meters of you."
}

View File

@ -2,5 +2,8 @@ class NiceSkillCommandoTrashCleaner extends NiceSkill
abstract;
var float decapitationMultiLimit;
defaultproperties
{ decapitationMultiLimit=0.600000 SkillName="Trash cleaner" SkillEffects="Get finisher property on your shots against low-health zeds, but your weapons leave more decapitated zeds behind."
{
decapitationMultiLimit=0.45
SkillName="Trash cleaner"
SkillEffects="Get finisher property on your shots against low-health zeds, but your weapons leave more decapitated zeds behind."
}

View File

@ -1,5 +1,7 @@
class NiceSkillCommandoZEDEvisceration extends NiceSkill
abstract;
defaultproperties
{ SkillName="Evisceration" SkillEffects="During zed-time both 'Trash cleaner' and 'Thin out' skills are active."
{
SkillName="Evisceration"
SkillEffects="Does nothing."
}

View File

@ -11,10 +11,14 @@ static function array<int> GetProgressArray(byte ReqNum, optional out int Double
}
static function int ReduceDamage(KFPlayerReplicationInfo KFPRI, KFPawn Injured, Pawn Instigator, int InDamage, class<DamageType> DmgType){
local NicePlayerController nicePlayer;
if(class<NiceDamTypeDemoSafeExplosion>(DmgType) != none) return 0;
if(class<NiceDamTypeDemoSafeExplosion>(DmgType) != none)
return 0;
nicePlayer = NicePlayerController(KFPRI.Owner);
if(nicePlayer != none && Instigator == nicePlayer.pawn && nicePlayer.IsZedTimeActive() && HasSkill(nicePlayer, class'NiceSkillDemoZEDDuckAndCover')) return 0.0;
if((class<KFWeaponDamageType>(DmgType) != none && class<KFWeaponDamageType>(DmgType).default.bIsExplosive)) return float(InDamage) * 0.5;
if(nicePlayer != none && Instigator == nicePlayer.pawn && nicePlayer.IsZedTimeActive()
&& HasSkill(nicePlayer, class'NiceSkillDemoZEDDuckAndCover'))
return 0.0;
if((class<KFWeaponDamageType>(DmgType) != none && class<KFWeaponDamageType>(DmgType).default.bIsExplosive))
return float(InDamage) * 0.5;
return InDamage;
}
static function float AddExtraAmmoFor(KFPlayerReplicationInfo KFPRI, Class<Ammunition> AmmoType){
@ -22,8 +26,10 @@ static function float AddExtraAmmoFor(KFPlayerReplicationInfo KFPRI, Class<Ammun
// Default bonus
bonusNades = 5;
bonusPipes = 6;
if(AmmoType == class'FragAmmo') return 1.0 + 0.2 * bonusNades;
if(ClassIsChildOf(AmmoType, class'PipeBombAmmo')) return 1.0 + 0.5 * bonusPipes;
if(AmmoType == class'FragAmmo')
return 1.0 + 0.2 * bonusNades;
if(ClassIsChildOf(AmmoType, class'PipeBombAmmo'))
return 1.0 + 0.5 * bonusPipes;
return 1.0;
}
static function int AddDamage(KFPlayerReplicationInfo KFPRI, KFMonster Injured, KFPawn DamageTaker, int InDamage, class<DamageType> DmgType){
@ -31,25 +37,36 @@ static function int AddDamage(KFPlayerReplicationInfo KFPRI, KFMonster Injured,
local class<NiceWeaponPickup> pickupClass;
pickupClass = GetPickupFromDamageType(DmgType);
perkDamage = float(InDamage);
if(DmgType == class'NicePack.NiceDamTypeDemoExplosion') return 1.6 * perkDamage;
if(IsPerkedPickup(pickupClass)) perkDamage *= 1.25;
else if( pickupClass != none && pickupClass.default.weight <= class'NiceSkillDemoOffperk'.default.weightBound && HasSkill(NicePlayerController(KFPRI.Owner), class'NiceSkillDemoOffperk') ) perkDamage *= class'NiceSkillDemoOffperk'.default.damageBonus;
if( KFPRI != none && class<NiceDamTypeDemoBlunt>(DmgType) != none && SomeoneHasSkill(NicePlayerController(KFPRI.Owner), class'NiceSkillDemoOnperk') ) perkDamage *= class'NiceSkillDemoOnperk'.default.damageBonus;
if(DmgType == class'NicePack.NiceDamTypeDemoExplosion')
return 1.6 * perkDamage;
if(IsPerkedPickup(pickupClass))
perkDamage *= 1.25;
else if( pickupClass != none && pickupClass.default.weight <= class'NiceSkillDemoOffperk'.default.weightBound
&& HasSkill(NicePlayerController(KFPRI.Owner), class'NiceSkillDemoOffperk') )
perkDamage *= class'NiceSkillDemoOffperk'.default.damageBonus;
if( KFPRI != none && class<NiceDamTypeDemoBlunt>(DmgType) != none
&& SomeoneHasSkill(NicePlayerController(KFPRI.Owner), class'NiceSkillDemoOnperk') )
perkDamage *= class'NiceSkillDemoOnperk'.default.damageBonus;
return perkDamage;
}
static function float GetReloadSpeedModifierStatic(KFPlayerReplicationInfo KFPRI, class<KFWeapon> other){
local NiceHumanPawn nicePawn;
local class<NiceWeaponPickup> pickupClass;
// Pistols reload
if( other != none && other.default.weight <= class'NiceSkillDemoOffperk'.default.weightBound && HasSkill(NicePlayerController(KFPRI.Owner), class'NiceSkillDemoOffperk') ) return class'NiceSkillDemoOffperk'.default.reloadBonus;
if( other != none && other.default.weight <= class'NiceSkillDemoOffperk'.default.weightBound
&& HasSkill(NicePlayerController(KFPRI.Owner), class'NiceSkillDemoOffperk') )
return class'NiceSkillDemoOffperk'.default.reloadBonus;
// Maniac reload
pickupClass = GetPickupFromWeapon(other);
if(KFPRI != none && PlayerController(KFPRI.Owner) != none) nicePawn = NiceHumanPawn(PlayerController(KFPRI.Owner).Pawn);
if(nicePawn != none && nicePawn.maniacTimeout >= 0.0 && IsPerkedPickup(pickupClass)) return class'NiceSkillDemoManiac'.default.reloadSpeedup;
if(KFPRI != none && PlayerController(KFPRI.Owner) != none)
nicePawn = NiceHumanPawn(PlayerController(KFPRI.Owner).Pawn);
if(nicePawn != none && nicePawn.maniacTimeout >= 0.0 && IsPerkedPickup(pickupClass))
return class'NiceSkillDemoManiac'.default.reloadSpeedup;
return 1.0;
}
static function float stunDurationMult(KFPlayerReplicationInfo KFPRI, KFMonster Injured, KFPawn DamageTaker, class<NiceWeaponDamageType> DmgType){
if(HasSkill(NicePlayerController(KFPRI.Owner), class'NiceSkillDemoConcussion')) return class'NiceSkillDemoConcussion'.default.durationMult;
if(HasSkill(NicePlayerController(KFPRI.Owner), class'NiceSkillDemoConcussion'))
return class'NiceSkillDemoConcussion'.default.durationMult;
return 1.0;
}
static function int AddStunScore(KFPlayerReplicationInfo KFPRI, KFMonster Injured, KFPawn DamageTaker, int InStunScore, class<NiceWeaponDamageType> DmgType){
@ -62,5 +79,36 @@ static function string GetCustomLevelInfo(byte Level){
return default.CustomLevelInfo;
}
defaultproperties
{ bNewTypePerk=True SkillGroupA(0)=Class'NicePack.NiceSkillDemoOnperk' SkillGroupA(1)=Class'NicePack.NiceSkillDemoDirectApproach' SkillGroupA(2)=Class'NicePack.NiceSkillDemoConcussion' SkillGroupA(3)=Class'NicePack.NiceSkillDemoAPShot' SkillGroupA(4)=Class'NicePack.NiceSkillDemoZEDDuckAndCover' SkillGroupB(0)=Class'NicePack.NiceSkillDemoOffperk' SkillGroupB(1)=Class'NicePack.NiceSkillDemoVolatile' SkillGroupB(2)=Class'NicePack.NiceSkillDemoReactiveArmor' SkillGroupB(3)=Class'NicePack.NiceSkillDemoManiac' SkillGroupB(4)=Class'NicePack.NiceSkillDemoZEDFullBlast' progressArray0(0)=100 progressArray0(1)=1000 progressArray0(2)=3000 progressArray0(3)=10000 progressArray0(4)=30000 progressArray0(5)=100000 progressArray0(6)=200000 DefaultDamageType=Class'NicePack.NiceDamageTypeVetDemolitions' OnHUDIcons(0)=(PerkIcon=Texture'KillingFloor2HUD.Perk_Icons.Perk_Demolition',StarIcon=Texture'KillingFloorHUD.HUD.Hud_Perk_Star',DrawColor=(B=255,G=255,R=255,A=255)) OnHUDIcons(1)=(PerkIcon=Texture'KillingFloor2HUD.Perk_Icons.Perk_Demolition_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_Demolition_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_Demolition_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_Demolition_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_Demolition_Orange',StarIcon=Texture'ScrnTex.Perks.Hud_Perk_Star_Orange',DrawColor=(B=255,G=255,R=255,A=255)) CustomLevelInfo="Level up by doing damage with perked weapons|25% extra explosives damage|50% better stun and flinch ability for all weapons|50% resistance to explosives|+5 grenades|+6 pipe bombs" PerkIndex=6 OnHUDIcon=Texture'KillingFloor2HUD.Perk_Icons.Perk_Demolition' OnHUDGoldIcon=Texture'KillingFloor2HUD.Perk_Icons.Perk_Demolition_Gold' VeterancyName="Demolitions" Requirements(0)="Required experience for the next level: %x"
{
bNewTypePerk=True
SkillGroupA(0)=Class'NicePack.NiceSkillDemoOnperk'
SkillGroupA(1)=Class'NicePack.NiceSkillDemoDirectApproach'
SkillGroupA(2)=Class'NicePack.NiceSkillDemoConcussion'
SkillGroupA(3)=Class'NicePack.NiceSkillDemoAPShot'
SkillGroupA(4)=Class'NicePack.NiceSkillDemoZEDDuckAndCover'
SkillGroupB(0)=Class'NicePack.NiceSkillDemoOffperk'
SkillGroupB(1)=Class'NicePack.NiceSkillDemoVolatile'
SkillGroupB(2)=Class'NicePack.NiceSkillDemoReactiveArmor'
SkillGroupB(3)=Class'NicePack.NiceSkillDemoManiac'
SkillGroupB(4)=Class'NicePack.NiceSkillDemoZEDFullBlast'
progressArray0(0)=100
progressArray0(1)=1000
progressArray0(2)=3000
progressArray0(3)=10000
progressArray0(4)=30000
progressArray0(5)=100000
progressArray0(6)=200000
DefaultDamageType=Class'NicePack.NiceDamageTypeVetDemolitions'
OnHUDIcons(0)=(PerkIcon=Texture'KillingFloor2HUD.Perk_Icons.Perk_Demolition',StarIcon=Texture'KillingFloorHUD.HUD.Hud_Perk_Star',DrawColor=(B=255,G=255,R=255,A=255))
OnHUDIcons(1)=(PerkIcon=Texture'KillingFloor2HUD.Perk_Icons.Perk_Demolition_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_Demolition_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_Demolition_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_Demolition_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_Demolition_Orange',StarIcon=Texture'ScrnTex.Perks.Hud_Perk_Star_Orange',DrawColor=(B=255,G=255,R=255,A=255))
CustomLevelInfo="Level up by doing damage with perked weapons|25% extra explosives damage|50% better stun and flinch ability for all weapons|50% resistance to explosives|+5 grenades|+6 pipe bombs"
PerkIndex=6
OnHUDIcon=Texture'KillingFloor2HUD.Perk_Icons.Perk_Demolition'
OnHUDGoldIcon=Texture'KillingFloor2HUD.Perk_Icons.Perk_Demolition_Gold'
VeterancyName="Demolitions"
Requirements(0)="Required experience for the next level: %x"
}

View File

@ -21,7 +21,8 @@ static function float GetPenetrationDamageMulti(KFPlayerReplicationInfo KFPRI, f
bonusReduction = 0.0;
if(class<NiceDamageTypeVetEnforcerBullets>(fireIntance) != none)
return DefaultPenDamageReduction;
if(HasSkill(NicePlayerController(KFPRI.Owner), class'NiceSkillSupportStubbornness')) bonusReduction = class'NiceSkillSupportStubbornness'.default.penLossRed;
if(HasSkill(NicePlayerController(KFPRI.Owner), class'NiceSkillSupportStubbornness'))
bonusReduction = class'NiceSkillSupportStubbornness'.default.penLossRed;
PenDamageInverse = (1.0 - FMax(0, DefaultPenDamageReduction));
return DefaultPenDamageReduction + PenDamageInverse * (0.6 + 0.4 * bonusReduction); // 60% better penetrations + bonus
}
@ -29,16 +30,27 @@ static function float GetPenetrationDamageMulti(KFPlayerReplicationInfo KFPRI, f
static function int AddStunScore(KFPlayerReplicationInfo KFPRI, KFMonster Injured, KFPawn DamageTaker, int InStunScore, class<NiceWeaponDamageType> DmgType){
local class<NiceWeaponPickup> pickupClass;
pickupClass = GetPickupFromDamageType(DmgType);
if(KFPRI != none && IsPerkedPickup(pickupClass) && HasSkill(NicePlayerController(KFPRI.Owner), class'NiceSkillEnforcerBombard')) return InStunScore * class'NiceSkillEnforcerBombard'.default.stunMult;
if(KFPRI != none && IsPerkedPickup(pickupClass) && HasSkill(NicePlayerController(KFPRI.Owner), class'NiceSkillEnforcerBombard'))
return InStunScore * class'NiceSkillEnforcerBombard'.default.stunMult;
return InStunScore;
}
static function class<Grenade> GetNadeType(KFPlayerReplicationInfo KFPRI){
/*if(HasSkill(NicePlayerController(KFPRI.Owner), class'NiceSkillSupportCautious')) return class'NicePack.NiceDelayedNade';
/*if(HasSkill(NicePlayerController(KFPRI.Owner), class'NiceSkillSupportCautious'))
return class'NicePack.NiceDelayedNade';
return class'NicePack.NiceNailNade';*/
return class'NicePack.NiceCryoNade';
}
static function float AddExtraAmmoFor(KFPlayerReplicationInfo KFPRI, Class<Ammunition> AmmoType){
local float bonusNades;
// Default bonus
bonusNades = 2;
if(AmmoType == class'NicePack.NiceCryoNade' || AmmoType == class'NicePack.NiceNailNade')
return 1.0 + 0.2 * bonusNades;
return 1.0;
}
static function int ReduceDamage(KFPlayerReplicationInfo KFPRI, KFPawn Injured, Pawn Instigator, int InDamage, class<DamageType> DmgType){
if(HasSkill(NicePlayerController(KFPRI.Owner), class'NiceSkillEnforcerDetermination') && Injured.Health < class'NiceSkillEnforcerDetermination'.default.healthBound)
InDamage *= (1 - class'NiceSkillEnforcerDetermination'.default.addedResist);
@ -112,7 +124,34 @@ static function string GetCustomLevelInfo(byte Level){
return default.CustomLevelInfo;
}
defaultproperties
{ bNewTypePerk=True
SkillGroupA(0)=Class'NicePack.NiceSkillEnforcerUnstoppable' SkillGroupA(1)=Class'NicePack.NiceSkillEnforcerBombard' SkillGroupA(2)=Class'NicePack.NiceSkillEnforcerFullCounter' SkillGroupA(4)=Class'NicePack.NiceSkillEnforcerZEDBarrage'
SkillGroupB(0)=Class'NicePack.NiceSkillEnforcerUnshakable' SkillGroupB(1)=Class'NicePack.NiceSkillEnforcerMultitasker' SkillGroupB(2)=Class'NicePack.NiceSkillEnforcerDetermination' SkillGroupB(4)=Class'NicePack.NiceSkillEnforcerZEDJuggernaut' progressArray0(0)=100 progressArray0(1)=1000 progressArray0(2)=3000 progressArray0(3)=10000 progressArray0(4)=30000 progressArray0(5)=100000 progressArray0(6)=200000 DefaultDamageType=Class'NicePack.NiceDamageTypeVetEnforcer' OnHUDIcons(0)=(PerkIcon=Texture'KillingFloorHUD.Perks.Perk_Support',StarIcon=Texture'KillingFloorHUD.HUD.Hud_Perk_Star',DrawColor=(B=255,G=255,R=255,A=255)) OnHUDIcons(1)=(PerkIcon=Texture'KillingFloor2HUD.Perk_Icons.Perk_Support_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_Support_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_Support_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_Support_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_Support_Orange',StarIcon=Texture'ScrnTex.Perks.Hud_Perk_Star_Orange',DrawColor=(B=255,G=255,R=255,A=255)) CustomLevelInfo="Level up by doing damage with perked weapons|60% better penetration with all weapons" PerkIndex=1 OnHUDIcon=Texture'KillingFloorHUD.Perks.Perk_Support' OnHUDGoldIcon=Texture'KillingFloor2HUD.Perk_Icons.Perk_Support_Gold' VeterancyName="Enforcer" Requirements(0)="Required experience for the next level: %x"
{
bNewTypePerk=True
SkillGroupA(0)=Class'NicePack.NiceSkillEnforcerUnstoppable'
SkillGroupA(1)=Class'NicePack.NiceSkillEnforcerBombard'
SkillGroupA(2)=Class'NicePack.NiceSkillEnforcerFullCounter'
SkillGroupA(4)=Class'NicePack.NiceSkillEnforcerZEDBarrage'
SkillGroupB(0)=Class'NicePack.NiceSkillEnforcerUnshakable'
SkillGroupB(1)=Class'NicePack.NiceSkillEnforcerMultitasker'
SkillGroupB(2)=Class'NicePack.NiceSkillEnforcerDetermination'
SkillGroupB(4)=Class'NicePack.NiceSkillEnforcerZEDJuggernaut'
progressArray0(0)=100
progressArray0(1)=1000
progressArray0(2)=3000
progressArray0(3)=10000
progressArray0(4)=30000
progressArray0(5)=100000
progressArray0(6)=200000
DefaultDamageType=Class'NicePack.NiceDamageTypeVetEnforcer'
OnHUDIcons(0)=(PerkIcon=Texture'KillingFloorHUD.Perks.Perk_Support',StarIcon=Texture'KillingFloorHUD.HUD.Hud_Perk_Star',DrawColor=(B=255,G=255,R=255,A=255))
OnHUDIcons(1)=(PerkIcon=Texture'KillingFloor2HUD.Perk_Icons.Perk_Support_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_Support_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_Support_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_Support_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_Support_Orange',StarIcon=Texture'ScrnTex.Perks.Hud_Perk_Star_Orange',DrawColor=(B=255,G=255,R=255,A=255))
CustomLevelInfo="Level up by doing damage with perked weapons|60% better penetration with all weapons|+2 grenades"
PerkIndex=1
OnHUDIcon=Texture'KillingFloorHUD.Perks.Perk_Support'
OnHUDGoldIcon=Texture'KillingFloor2HUD.Perk_Icons.Perk_Support_Gold'
VeterancyName="Enforcer"
Requirements(0)="Required experience for the next level: %x"
}

View File

@ -11,16 +11,20 @@ static function array<int> GetProgressArray(byte ReqNum, optional out int Double
}
// Allows to increase head-shot check scale for some weapons.
static function float GetHeadshotCheckMultiplier(KFPlayerReplicationInfo KFPRI, class<DamageType> DmgType){
if(KFPRI != none && class'NiceVetFieldMedic'.static.hasSkill(NicePlayerController(KFPRI.Owner), class'NiceSkillMedicAimAssistance')) return class'NiceSkillMedicAimAssistance'.default.headIncrease;
if(KFPRI != none && class'NiceVetFieldMedic'.static.hasSkill(NicePlayerController(KFPRI.Owner), class'NiceSkillMedicAimAssistance'))
return class'NiceSkillMedicAimAssistance'.default.headIncrease;
return 1.0;
}
// Give Medic normal hand nades again - he should buy medic nade lauchers for healing nades
static function class<Grenade> GetNadeType(KFPlayerReplicationInfo KFPRI){
if(KFPRI != none && class'NiceVetFieldMedic'.static.hasSkill(NicePlayerController(KFPRI.Owner), class'NiceSkillMedicArmament')) return class'NicePack.NiceMedicNade';
if(KFPRI != none && class'NiceVetFieldMedic'.static.hasSkill(NicePlayerController(KFPRI.Owner), class'NiceSkillMedicArmament'))
return class'NicePack.NiceMedicNade';
return class'NiceMedicNadePoison';
}
static function float GetAmmoPickupMod(KFPlayerReplicationInfo KFPRI, KFAmmunition Other){
if(other != none && other.class == class'FragAmmo' && KFPRI != none && class'NiceVetFieldMedic'.static.hasSkill(NicePlayerController(KFPRI.Owner), class'NiceSkillMedicArmament')) return 0.0;
if(other != none && other.class == class'FragAmmo'
&& KFPRI != none && class'NiceVetFieldMedic'.static.hasSkill(NicePlayerController(KFPRI.Owner), class'NiceSkillMedicArmament'))
return 0.0;
return 1.0;
}
//can't cook medic nades
@ -34,29 +38,58 @@ static function float GetHealPotency(KFPlayerReplicationInfo KFPRI){
local float potency, debuff;
potency = 2.0;
debuff = 0.0;
if(KFPRI != none && class'NiceVetFieldMedic'.static.hasSkill(NicePlayerController(KFPRI.Owner), class'NiceSkillMedicTranquilizer')) debuff += class'NiceSkillMedicTranquilizer'.default.healingDebuff;
if(KFPRI != none && class'NiceVetFieldMedic'.static.hasSkill(NicePlayerController(KFPRI.Owner), class'NiceSkillMedicTranquilizer'))
debuff += class'NiceSkillMedicTranquilizer'.default.healingDebuff;
potency *= (1.0 - debuff);
return potency;
}
static function float GetFireSpeedModStatic(KFPlayerReplicationInfo KFPRI, class<Weapon> Other){
if(ClassIsChildOf(Other, class'Syringe')) return 1.6;
if(ClassIsChildOf(Other, class'Syringe'))
return 1.6;
return 1.0;
}
static function float GetMovementSpeedModifier(KFPlayerReplicationInfo KFPRI, KFGameReplicationInfo KFGRI){
return 1.2;
}
static function float SlowingModifier(KFPlayerReplicationInfo KFPRI){
return 1.5;
}
static function float GetCostScaling(KFPlayerReplicationInfo KFPRI, class<Pickup> Item){
local class<NiceWeaponPickup> pickupClass;
pickupClass = class<NiceWeaponPickup>(Item);
if(IsPerkedPickup(class<NiceWeaponPickup>(Item))) return 0.5;
if(IsPerkedPickup(class<NiceWeaponPickup>(Item)))
return 0.5;
return 1.0;
}
static function string GetCustomLevelInfo(byte Level){
return default.CustomLevelInfo;
}
defaultproperties
{ SkillGroupA(0)=Class'NicePack.NiceSkillMedicSymbioticHealth' SkillGroupA(1)=Class'NicePack.NiceSkillMedicArmament' SkillGroupA(2)=Class'NicePack.NiceSkillMedicAdrenalineShot' SkillGroupA(3)=Class'NicePack.NiceSkillMedicInjection' SkillGroupA(4)=Class'NicePack.NiceSkillMedicZEDHeavenCanceller' SkillGroupB(0)=Class'NicePack.NiceSkillMedicAimAssistance' SkillGroupB(1)=Class'NicePack.NiceSkillMedicPesticide' SkillGroupB(2)=Class'NicePack.NiceSkillMedicRegeneration' SkillGroupB(3)=Class'NicePack.NiceSkillMedicTranquilizer' SkillGroupB(4)=Class'NicePack.NiceSkillMedicZEDFrenzy' progressArray0(0)=100 progressArray0(1)=1000 progressArray0(2)=3000 progressArray0(3)=10000 progressArray0(4)=30000 progressArray0(5)=100000 progressArray0(6)=200000 OnHUDIcons(0)=(PerkIcon=Texture'KillingFloorHUD.Perks.Perk_Medic',StarIcon=Texture'KillingFloorHUD.HUD.Hud_Perk_Star',DrawColor=(B=255,G=255,R=255,A=255)) OnHUDIcons(1)=(PerkIcon=Texture'KillingFloor2HUD.Perk_Icons.Perk_Medic_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_Medic_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_Medic_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_Medic_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_Medic_Orange',StarIcon=Texture'ScrnTex.Perks.Hud_Perk_Star_Orange',DrawColor=(B=255,G=255,R=255,A=255)) CustomLevelInfo="Level up by doing damage with perked weapons|50% discount on everything|100% more potent medical injections|20% faster movement speed|Better Syringe handling" PerkIndex=0 OnHUDIcon=Texture'KillingFloorHUD.Perks.Perk_Medic' OnHUDGoldIcon=Texture'KillingFloor2HUD.Perk_Icons.Perk_Medic_Gold' VeterancyName="Field Medic" Requirements(0)="Required experience for the next level: %x"
{
SkillGroupA(0)=Class'NicePack.NiceSkillMedicSymbioticHealth'
SkillGroupA(1)=Class'NicePack.NiceSkillMedicArmament'
SkillGroupA(2)=Class'NicePack.NiceSkillMedicAdrenalineShot'
SkillGroupA(3)=Class'NicePack.NiceSkillMedicInjection'
SkillGroupA(4)=Class'NicePack.NiceSkillMedicZEDHeavenCanceller'
SkillGroupB(0)=Class'NicePack.NiceSkillMedicAimAssistance'
SkillGroupB(1)=Class'NicePack.NiceSkillMedicPesticide'
SkillGroupB(2)=Class'NicePack.NiceSkillMedicRegeneration'
SkillGroupB(3)=Class'NicePack.NiceSkillMedicTranquilizer'
SkillGroupB(4)=Class'NicePack.NiceSkillMedicZEDFrenzy'
progressArray0(0)=100
progressArray0(1)=1000
progressArray0(2)=3000
progressArray0(3)=10000
progressArray0(4)=30000
progressArray0(5)=100000
progressArray0(6)=200000
OnHUDIcons(0)=(PerkIcon=Texture'KillingFloorHUD.Perks.Perk_Medic',StarIcon=Texture'KillingFloorHUD.HUD.Hud_Perk_Star',DrawColor=(B=255,G=255,R=255,A=255))
OnHUDIcons(1)=(PerkIcon=Texture'KillingFloor2HUD.Perk_Icons.Perk_Medic_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_Medic_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_Medic_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_Medic_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_Medic_Orange',StarIcon=Texture'ScrnTex.Perks.Hud_Perk_Star_Orange',DrawColor=(B=255,G=255,R=255,A=255))
CustomLevelInfo="Level up by doing damage with perked weapons|50% discount on everything|100% more potent medical injections|20% faster movement speed|Better Syringe handling"
PerkIndex=0
OnHUDIcon=Texture'KillingFloorHUD.Perks.Perk_Medic'
OnHUDGoldIcon=Texture'KillingFloor2HUD.Perk_Icons.Perk_Medic_Gold'
VeterancyName="Field Medic"
Requirements(0)="Required experience for the next level: %x"
}

View File

@ -10,42 +10,77 @@
// E-mail: dkanus@gmail.com
//==============================================================================
class NiceSharpshooterAbilitiesAdapter extends NiceAbilitiesAdapter;
static function AbilityActivated( string abilityID, NicePlayerController relatedPlayer){
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(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;
if(abilityID == class'NiceSkillSharpshooterGunslingerA'.default.abilityID){
nicePawn.gunslingerTimer =
class'NiceSkillSharpshooterGunslingerA'.default.duration;
}
}
static function AbilityAdded( string abilityID, NicePlayerController relatedPlayer){
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;
if(nicePawn == none)
return;
if(abilityID == "Calibration"){
nicePawn.currentCalibrationState = CALSTATE_FINISHED;
nicePawn.calibrationScore = 3;
}
}
static function AbilityRemoved( string abilityID, NicePlayerController relatedPlayer){
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;
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){
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;
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;
if(nicePawn.calibrationScore > 3)
nicePawn.calibrationScore -= 1;
}
defaultproperties
{

View File

@ -1,5 +1,16 @@
class NiceDamTypeFNFALAssaultRifle extends NiceDamageTypeVetCommando
abstract;
defaultproperties
{ MaxPenetrations=3 HeadShotDamageMult=2.250000 WeaponClass=Class'NicePack.NiceFNFAL_ACOG_AssaultRifle' DeathString="%k killed %o (FNFAL ACOG)." FemaleSuicide="%o shot herself in the foot." MaleSuicide="%o shot himself in the foot." bRagdollBullet=True KDamageImpulse=6500.000000 KDeathVel=175.000000 KDeathUpKick=20.000000
{
MaxPenetrations=3
flinchMultiplier=0.800000
HeadShotDamageMult=2.250000
WeaponClass=Class'NicePack.NiceFNFAL_ACOG_AssaultRifle'
DeathString="%k killed %o (FNFAL ACOG)."
FemaleSuicide="%o shot herself in the foot."
MaleSuicide="%o shot himself in the foot."
bRagdollBullet=True
KDamageImpulse=6500.000000
KDeathVel=175.000000
KDeathUpKick=20.000000
}

View File

@ -1,5 +1,17 @@
class NiceDamTypeSCARMK17AssaultRifle extends NiceDamageTypeVetCommando
abstract;
defaultproperties
{ bPenetrationHSOnly=True MaxPenetrations=1 HeadShotDamageMult=2.000000 WeaponClass=Class'NicePack.NiceSCARMK17AssaultRifle' DeathString="%k killed %o (SCAR MK17)." FemaleSuicide="%o shot herself in the foot." MaleSuicide="%o shot himself in the foot." bRagdollBullet=True KDamageImpulse=6500.000000 KDeathVel=175.000000 KDeathUpKick=20.000000
{
bPenetrationHSOnly=True
MaxPenetrations=1
flinchMultiplier=0.800000
HeadShotDamageMult=2.000000
WeaponClass=Class'NicePack.NiceSCARMK17AssaultRifle'
DeathString="%k killed %o (SCAR MK17)."
FemaleSuicide="%o shot herself in the foot."
MaleSuicide="%o shot himself in the foot."
bRagdollBullet=True
KDamageImpulse=6500.000000
KDeathVel=175.000000
KDeathUpKick=20.000000
}

View File

@ -2,5 +2,18 @@ class NiceDamTypeDeagle extends NiceDamageTypeVetSharpshooter
abstract;
defaultproperties
{
goodDecapMod=0.750000 MaxPenetrations=4 WeaponClass=Class'NicePack.NiceDeagle' DeathString="%k killed %o (Deagle)." FemaleSuicide="%o shot herself in the foot." MaleSuicide="%o shot himself in the foot." bRagdollBullet=True bBulletHit=True FlashFog=(X=600.000000) KDamageImpulse=6500.000000 KDeathVel=400.000000 KDeathUpKick=80.000000 VehicleDamageScaling=0.800000
goodDecapMod=0.750000
MaxPenetrations=4
HeadShotDamageMult=1.35
WeaponClass=Class'NicePack.NiceDeagle'
DeathString="%k killed %o (Deagle)."
FemaleSuicide="%o shot herself in the foot."
MaleSuicide="%o shot himself in the foot."
bRagdollBullet=True
bBulletHit=True
FlashFog=(X=600.000000)
KDamageImpulse=6500.000000
KDeathVel=400.000000
KDeathUpKick=80.000000
VehicleDamageScaling=0.800000
}

View File

@ -1,4 +1,29 @@
class NiceDeagleFire extends NiceSingleFire;
defaultproperties
{ ProjectileSpeed=23500.000000 FireAimedAnim="Iron_Fire" maxVerticalRecoilAngle=600 maxHorizontalRecoilAngle=300 ShellEjectClass=Class'ROEffects.KFShellEjectHandCannon' FireSoundRef="KF_HandcannonSnd.50AE_Fire" StereoFireSoundRef="KF_HandcannonSnd.50AE_FireST" NoAmmoSoundRef="KF_HandcannonSnd.50AE_DryFire" DamageType=Class'NicePack.NiceDamTypeDeagle' DamageMin=105 DamageMax=105 Momentum=20000.000000 FireLoopAnim= FireEndAnim= FireAnimRate=1.000000 FireRate=0.500000 AmmoClass=Class'NicePack.NiceDeagleAmmo' ShakeRotMag=(Z=400.000000) ShakeRotRate=(X=12500.000000,Y=12500.000000) ShakeRotTime=3.500000 ShakeOffsetMag=(Y=1.000000,Z=8.000000) ShakeOffsetTime=2.500000 BotRefireRate=0.650000 FlashEmitterClass=Class'ROEffects.MuzzleFlash1stKar' aimerror=40.000000
{
ProjectileSpeed=23500.000000
FireAimedAnim="Iron_Fire"
maxVerticalRecoilAngle=600
maxHorizontalRecoilAngle=300
ShellEjectClass=Class'ROEffects.KFShellEjectHandCannon'
FireSoundRef="KF_HandcannonSnd.50AE_Fire"
StereoFireSoundRef="KF_HandcannonSnd.50AE_FireST"
NoAmmoSoundRef="KF_HandcannonSnd.50AE_DryFire"
DamageType=Class'NicePack.NiceDamTypeDeagle'
DamageMin=120
DamageMax=120
Momentum=20000.000000
FireLoopAnim=
FireEndAnim=
FireAnimRate=1.000000
FireRate=0.500000
AmmoClass=Class'NicePack.NiceDeagleAmmo'
ShakeRotMag=(Z=400.000000)
ShakeRotRate=(X=12500.000000,Y=12500.000000)
ShakeRotTime=3.500000
ShakeOffsetMag=(Y=1.000000,Z=8.000000)
ShakeOffsetTime=2.500000
BotRefireRate=0.650000
FlashEmitterClass=Class'ROEffects.MuzzleFlash1stKar'
aimerror=40.000000
}

View File

@ -1,4 +1,24 @@
class NiceDualDeagleFire extends NiceDualiesFire;
defaultproperties
{ ProjectileSpeed=23500.000000 maxVerticalRecoilAngle=600 maxHorizontalRecoilAngle=300 ShellEjectClass=Class'ROEffects.KFShellEjectHandCannon' FireSoundRef="KF_HandcannonSnd.50AE_Fire" StereoFireSoundRef="KF_HandcannonSnd.50AE_FireST" NoAmmoSoundRef="KF_HandcannonSnd.50AE_DryFire" DamageType=Class'NicePack.NiceDamTypeDeagle' DamageMin=120 DamageMax=120 Momentum=20000.000000 FireRate=0.250000 AmmoClass=Class'NicePack.NiceDualDeagleAmmo' ShakeRotMag=(Z=400.000000) ShakeRotRate=(X=12500.000000,Y=12500.000000) ShakeRotTime=3.500000 ShakeOffsetMag=(Y=1.000000,Z=8.000000) ShakeOffsetTime=2.500000 FlashEmitterClass=Class'ROEffects.MuzzleFlash1stKar' aimerror=40.000000
{
ProjectileSpeed=23500.000000
maxVerticalRecoilAngle=600
maxHorizontalRecoilAngle=300
ShellEjectClass=Class'ROEffects.KFShellEjectHandCannon'
FireSoundRef="KF_HandcannonSnd.50AE_Fire"
StereoFireSoundRef="KF_HandcannonSnd.50AE_FireST"
NoAmmoSoundRef="KF_HandcannonSnd.50AE_DryFire"
DamageType=Class'NicePack.NiceDamTypeDeagle'
DamageMin=120
DamageMax=120
Momentum=20000.000000
FireRate=0.250000
AmmoClass=Class'NicePack.NiceDualDeagleAmmo'
ShakeRotMag=(Z=400.000000)
ShakeRotRate=(X=12500.000000,Y=12500.000000)
ShakeRotTime=3.500000
ShakeOffsetMag=(Y=1.000000,Z=8.000000)
ShakeOffsetTime=2.500000
FlashEmitterClass=Class'ROEffects.MuzzleFlash1stKar'
aimerror=40.000000
}

View File

@ -1,6 +1,20 @@
class NiceDamTypeMK23Pistol extends NiceDamageTypeVetSharpshooter
abstract;
defaultproperties
{ decapType=DB_DROP badDecapMod=0.900000
flinchMultiplier=2 HeadShotDamageMult=1.5//2.250000 WeaponClass=Class'NicePack.NiceMK23Pistol' DeathString="%k killed %o with MK23." FemaleSuicide="%o shot herself in the foot." MaleSuicide="%o shot himself in the foot." bRagdollBullet=True bBulletHit=True FlashFog=(X=600.000000) KDamageImpulse=1850.000000 KDeathVel=150.000000 KDeathUpKick=5.000000 VehicleDamageScaling=0.800000
{
decapType=DB_DROP
badDecapMod=0.900000
flinchMultiplier=2
HeadShotDamageMult=2.0//2.250000
WeaponClass=Class'NicePack.NiceMK23Pistol'
DeathString="%k killed %o with MK23."
FemaleSuicide="%o shot herself in the foot."
MaleSuicide="%o shot himself in the foot."
bRagdollBullet=True
bBulletHit=True
FlashFog=(X=600.000000)
KDamageImpulse=1850.000000
KDeathVel=150.000000
KDeathUpKick=5.000000
VehicleDamageScaling=0.800000
}

View File

@ -1,4 +1,25 @@
class NiceDualMK23Fire extends NiceDualiesFire;
defaultproperties
{ ProjectileSpeed=13000.000000 maxVerticalRecoilAngle=400 maxHorizontalRecoilAngle=200 ShellEjectClass=Class'KFMod.MK23Shell' FireSoundRef="KF_MK23Snd.MK23_Fire_M" StereoFireSoundRef="KF_MK23Snd.MK23_Fire_S" NoAmmoSoundRef="KF_HandcannonSnd.50AE_DryFire" DamageType=Class'NicePack.NiceDamTypeMK23Pistol' DamageMin=55 DamageMax=55 Momentum=18000.000000 NoAmmoSound=None FireRate=0.175000 AmmoClass=Class'NicePack.NiceDualMK23Ammo' ShakeRotMag=(Z=290.000000) ShakeRotRate=(X=10080.000000,Y=10080.000000) ShakeRotTime=3.500000 ShakeOffsetMag=(Y=1.000000,Z=8.000000) ShakeOffsetTime=2.500000 FlashEmitterClass=Class'KFMod.MuzzleFlashMK' aimerror=40.000000
{
ProjectileSpeed=13000.000000
maxVerticalRecoilAngle=400
maxHorizontalRecoilAngle=200
ShellEjectClass=Class'KFMod.MK23Shell'
FireSoundRef="KF_MK23Snd.MK23_Fire_M"
StereoFireSoundRef="KF_MK23Snd.MK23_Fire_S"
NoAmmoSoundRef="KF_HandcannonSnd.50AE_DryFire"
DamageType=Class'NicePack.NiceDamTypeMK23Pistol'
DamageMin=55
DamageMax=55
Momentum=18000.000000
NoAmmoSound=None
FireRate=0.175000
AmmoClass=Class'NicePack.NiceDualMK23Ammo'
ShakeRotMag=(Z=290.000000)
ShakeRotRate=(X=10080.000000,Y=10080.000000)
ShakeRotTime=3.500000
ShakeOffsetMag=(Y=1.000000,Z=8.000000)
ShakeOffsetTime=2.500000
FlashEmitterClass=Class'KFMod.MuzzleFlashMK'
aimerror=40.000000
}

View File

@ -1,4 +1,25 @@
class NiceMK23Fire extends NiceSingleFire;
defaultproperties
{ ProjectileSpeed=13000.000000 maxVerticalRecoilAngle=400 maxHorizontalRecoilAngle=200 FireSoundRef="KF_MK23Snd.MK23_Fire_M" StereoFireSoundRef="KF_MK23Snd.MK23_Fire_S" NoAmmoSoundRef="KF_HandcannonSnd.50AE_DryFire" DamageType=Class'NicePack.NiceDamTypeMK23Pistol' DamageMin=55 DamageMax=55 Momentum=18000.000000 FireLoopAnim= FireEndAnim= FireRate=0.350000 AmmoClass=Class'NicePack.NiceMK23Ammo' ShakeRotMag=(Z=290.000000) ShakeRotRate=(X=10080.000000,Y=10080.000000) ShakeRotTime=3.500000 ShakeOffsetMag=(Y=1.000000,Z=8.000000) ShakeOffsetTime=2.500000 BotRefireRate=0.650000 FlashEmitterClass=Class'KFMod.MuzzleFlashMK'
{
ProjectileSpeed=13000.000000
maxVerticalRecoilAngle=400
maxHorizontalRecoilAngle=200
FireSoundRef="KF_MK23Snd.MK23_Fire_M"
StereoFireSoundRef="KF_MK23Snd.MK23_Fire_S"
NoAmmoSoundRef="KF_HandcannonSnd.50AE_DryFire"
DamageType=Class'NicePack.NiceDamTypeMK23Pistol'
DamageMin=55
DamageMax=55
Momentum=18000.000000
FireLoopAnim=
FireEndAnim=
FireRate=0.350000
AmmoClass=Class'NicePack.NiceMK23Ammo'
ShakeRotMag=(Z=290.000000)
ShakeRotRate=(X=10080.000000,Y=10080.000000)
ShakeRotTime=3.500000
ShakeOffsetMag=(Y=1.000000,Z=8.000000)
ShakeOffsetTime=2.500000
BotRefireRate=0.650000
FlashEmitterClass=Class'KFMod.MuzzleFlashMK'
}

View File

@ -1,4 +1,13 @@
class NiceDamTypeMagnumPistol extends NiceDamageTypeVetSharpshooter;
defaultproperties
{ flinchMultiplier=2.5 stunMultiplier=6.0 MaxPenetrations=2 PenDmgReduction=0.990000 HeadShotDamageMult=1.1 WeaponClass=Class'NicePack.NiceMagnumPistol' KDamageImpulse=3250.000000 KDeathVel=200.000000 KDeathUpKick=40.000000
{
flinchMultiplier=2.5
stunMultiplier=6.0
MaxPenetrations=2
PenDmgReduction=0.990000
HeadShotDamageMult=1.35
WeaponClass=Class'NicePack.NiceMagnumPistol'
KDamageImpulse=3250.000000
KDeathVel=200.000000
KDeathUpKick=40.000000
}

View File

@ -1,5 +1,37 @@
class NiceDualMagnum extends NiceDualies;
defaultproperties
{ SingleClass=Class'NicePack.NiceMagnumPistol' leftEject=0.660000 rightEject=0.115000 leftInsert=0.800000 rightInsert=0.375000 MagCapacity=12
Weight=2.000000 ReloadRate=2.23125//3.570000 ReloadAnimRate=2//1.250000 WeaponReloadAnim="Reload_DualRevolver" StandardDisplayFOV=60.000000 TraderInfoTexture=Texture'KillingFloor2HUD.Trader_Weapon_Icons.Trader_DualRevolver' bIsTier2Weapon=True MeshRef="KF_Wep_DualRevolver.DualRevolver_Trip" SkinRefs(0)="KF_Weapons4_Trip_T.Weapons.Revolver_cmb" SelectSoundRef="KF_RevolverSnd.WEP_Revolver_Foley_Select" HudImageRef="KillingFloor2HUD.WeaponSelect.DualRevolver_unselected" SelectedHudImageRef="KillingFloor2HUD.WeaponSelect.DualRevolver" ZoomedDisplayFOV=50.000000 FireModeClass(0)=Class'NicePack.NiceDualMagnumFire' AIRating=0.450000 CurrentRating=0.450000 Description="Dual 44 Magnum Pistols. Make my day!" DisplayFOV=60.000000 Priority=120 GroupOffset=8 PickupClass=Class'NicePack.NiceDualMagnumPickup' PlayerViewOffset=(X=25.000000) BobDamping=6.000000 AttachmentClass=Class'NicePack.NiceDualMagnumAttachment' IconCoords=(X1=250,Y1=110,X2=330,Y2=145) ItemName="Dual 44 Magnums" DrawScale=1.000000
{
SingleClass=Class'NicePack.NiceMagnumPistol'
leftEject=0.660000
rightEject=0.115000
leftInsert=0.800000
rightInsert=0.375000
MagCapacity=12
Weight=2.000000
ReloadRate=2.23125//3.570000
ReloadAnimRate=2//1.250000
WeaponReloadAnim="Reload_DualRevolver"
StandardDisplayFOV=60.000000
TraderInfoTexture=Texture'KillingFloor2HUD.Trader_Weapon_Icons.Trader_DualRevolver'
bIsTier2Weapon=True
MeshRef="KF_Wep_DualRevolver.DualRevolver_Trip"
SkinRefs(0)="KF_Weapons4_Trip_T.Weapons.Revolver_cmb"
SelectSoundRef="KF_RevolverSnd.WEP_Revolver_Foley_Select"
HudImageRef="KillingFloor2HUD.WeaponSelect.DualRevolver_unselected"
SelectedHudImageRef="KillingFloor2HUD.WeaponSelect.DualRevolver"
ZoomedDisplayFOV=50.000000
FireModeClass(0)=Class'NicePack.NiceDualMagnumFire'
AIRating=0.450000
CurrentRating=0.450000
Description="Dual 44 Magnum Pistols. Make my day!"
DisplayFOV=60.000000
Priority=120
GroupOffset=8
PickupClass=Class'NicePack.NiceDualMagnumPickup'
PlayerViewOffset=(X=25.000000)
BobDamping=6.000000
AttachmentClass=Class'NicePack.NiceDualMagnumAttachment'
IconCoords=(X1=250,Y1=110,X2=330,Y2=145)
ItemName="Dual 44 Magnums"
DrawScale=1.000000
}

View File

@ -1,4 +1,29 @@
class NiceMagnumFire extends NiceSingleFire;
defaultproperties
{ ProjectileSpeed=22500.000000 FireAimedAnim="Iron_Fire" maxHorizontalRecoilAngle=150 ShellEjectClass=None FireSoundRef="KF_RevolverSnd.Revolver_Fire_M" StereoFireSoundRef="KF_RevolverSnd.Revolver_Fire_S" NoAmmoSoundRef="KF_HandcannonSnd.50AE_DryFire" DamageType=Class'NicePack.NiceDamTypeMagnumPistol' DamageMin=61 DamageMax=61 Momentum=15000.000000 bPawnRapidFireAnim=False FireLoopAnim= FireEndAnim= FireAnimRate=1.000000 FireRate=0.250000//0.3 AmmoClass=Class'NicePack.NiceMagnumAmmo' ShakeRotMag=(Z=400.000000) ShakeRotRate=(X=12500.000000,Y=12500.000000) ShakeRotTime=3.500000 ShakeOffsetMag=(Y=1.000000,Z=8.000000) ShakeOffsetTime=2.500000 BotRefireRate=0.650000 FlashEmitterClass=Class'ROEffects.MuzzleFlash1stKar' aimerror=40.000000
{
ProjectileSpeed=22500.000000
FireAimedAnim="Iron_Fire"
maxHorizontalRecoilAngle=150
ShellEjectClass=None
FireSoundRef="KF_RevolverSnd.Revolver_Fire_M"
StereoFireSoundRef="KF_RevolverSnd.Revolver_Fire_S"
NoAmmoSoundRef="KF_HandcannonSnd.50AE_DryFire"
DamageType=Class'NicePack.NiceDamTypeMagnumPistol'
DamageMin=61
DamageMax=61
Momentum=15000.000000
bPawnRapidFireAnim=False
FireLoopAnim=
FireEndAnim=
FireAnimRate=1.000000
FireRate=0.250000//0.3
AmmoClass=Class'NicePack.NiceMagnumAmmo'
ShakeRotMag=(Z=400.000000)
ShakeRotRate=(X=12500.000000,Y=12500.000000)
ShakeRotTime=3.500000
ShakeOffsetMag=(Y=1.000000,Z=8.000000)
ShakeOffsetTime=2.500000
BotRefireRate=0.650000
FlashEmitterClass=Class'ROEffects.MuzzleFlash1stKar'
aimerror=40.000000
}

View File

@ -34,9 +34,12 @@ simulated function PostBeginPlay(){
super.PostBeginPlay();
}
simulated function ReloadEvent(string eventName){
if(eventName ~= jumpStr && GetMagazineAmmo() > 0) SetAnimFrame(glueTiming);
if(eventName ~= firstShellStr) MagAmmoRemainingClient = Min(1, AmmoAmount(0));
else if(eventName ~= secondShellStr) MagAmmoRemainingClient = Min(2, AmmoAmount(0));
if(eventName ~= jumpStr && GetMagazineAmmo() > 0)
SetAnimFrame(glueTiming);
if(eventName ~= firstShellStr)
MagAmmoRemainingClient = Min(1, AmmoAmount(0));
else if(eventName ~= secondShellStr)
MagAmmoRemainingClient = Min(2, AmmoAmount(0));
ServerSetMagSize(MagAmmoRemainingClient, bRoundInChamber, Level.TimeSeconds);
}
simulated function AddAutoReloadedAmmo(){
@ -47,6 +50,54 @@ simulated function bool AltFireCanForceInterruptReload(){
return (GetMagazineAmmo() > 0);
}
defaultproperties
{ glueTiming=0.633330 firstShellTiming=0.555550 secondShellTiming=0.733330 jumpTiming=0.388880 firstShellStr="firstShell" secondShellStr="secondShellStr" jumpStr="jumpStr" bChangeClipIcon=True hudClipTexture=Texture'KillingFloorHUD.HUD.Hud_Single_Bullet' reloadType=RTYPE_AUTO ForceZoomOutOnFireTime=0.010000 ForceZoomOutOnAltFireTime=0.010000 MagCapacity=2
Weight=6.000000 ReloadRate=2.250000 ReloadAnim="Reload" ReloadAnimRate=1.100000 bHoldToReload=True WeaponReloadAnim="Reload_HuntingShotgun" bHasAimingMode=True IdleAimAnim="Idle_Iron" StandardDisplayFOV=55.000000 TraderInfoTexture=Texture'KillingFloorHUD.Trader_Weapon_Images.Trader_Hunting_Shotgun' bIsTier2Weapon=True MeshRef="KF_Weapons_Trip.BoomStick_Trip" SkinRefs(0)="KF_Weapons_Trip_T.Shotguns.boomstick_cmb" SelectSoundRef="KF_DoubleSGSnd.2Barrel_Select" HudImageRef="KillingFloorHUD.WeaponSelect.BoomStic_unselected" SelectedHudImageRef="KillingFloorHUD.WeaponSelect.BoomStick" PlayerIronSightFOV=70.000000 ZoomedDisplayFOV=40.000000 FireModeClass(0)=Class'NicePack.NiceBoomStickAltFire' FireModeClass(1)=Class'NicePack.NiceBoomStickFire' PutDownAnim="PutDown" AIRating=0.900000 CurrentRating=0.900000 bSniping=False Description="A double barreled shotgun used by big game hunters. It fires two slugs simultaneously and can bring down even the largest targets, quickly." DisplayFOV=55.000000 Priority=160 InventoryGroup=4 GroupOffset=2 PickupClass=Class'NicePack.NiceBoomStickPickup' PlayerViewOffset=(X=8.000000,Y=14.000000,Z=-8.000000) BobDamping=6.000000 AttachmentClass=Class'NicePack.NiceBoomStickAttachment' ItemName="Hunting Shotgun" bUseDynamicLights=True TransientSoundVolume=1.000000
{
glueTiming=0.633330
firstShellTiming=0.555550
secondShellTiming=0.733330
jumpTiming=0.388880
firstShellStr="firstShell"
secondShellStr="secondShellStr"
jumpStr="jumpStr"
bChangeClipIcon=True
hudClipTexture=Texture'KillingFloorHUD.HUD.Hud_Single_Bullet'
reloadType=RTYPE_AUTO
ForceZoomOutOnFireTime=0.010000
ForceZoomOutOnAltFireTime=0.010000
MagCapacity=2
Weight=5.000000
ReloadRate=2.250000
ReloadAnim="Reload"
ReloadAnimRate=1.100000
bHoldToReload=True
WeaponReloadAnim="Reload_HuntingShotgun"
bHasAimingMode=True
IdleAimAnim="Idle_Iron"
StandardDisplayFOV=55.000000
TraderInfoTexture=Texture'KillingFloorHUD.Trader_Weapon_Images.Trader_Hunting_Shotgun'
bIsTier2Weapon=True
MeshRef="KF_Weapons_Trip.BoomStick_Trip"
SkinRefs(0)="KF_Weapons_Trip_T.Shotguns.boomstick_cmb"
SelectSoundRef="KF_DoubleSGSnd.2Barrel_Select"
HudImageRef="KillingFloorHUD.WeaponSelect.BoomStic_unselected"
SelectedHudImageRef="KillingFloorHUD.WeaponSelect.BoomStick"
PlayerIronSightFOV=70.000000
ZoomedDisplayFOV=40.000000
FireModeClass(0)=Class'NicePack.NiceBoomStickAltFire'
FireModeClass(1)=Class'NicePack.NiceBoomStickFire'
PutDownAnim="PutDown"
AIRating=0.900000
CurrentRating=0.900000
bSniping=False
Description="A double barreled shotgun used by big game hunters. It fires two slugs simultaneously and can bring down even the largest targets, quickly."
DisplayFOV=55.000000
Priority=160
InventoryGroup=4
GroupOffset=2
PickupClass=Class'NicePack.NiceBoomStickPickup'
PlayerViewOffset=(X=8.000000,Y=14.000000,Z=-8.000000)
BobDamping=6.000000
AttachmentClass=Class'NicePack.NiceBoomStickAttachment'
ItemName="Hunting Shotgun"
bUseDynamicLights=True
TransientSoundVolume=1.000000
}

View File

@ -1,5 +1,23 @@
class NiceBoomStickPickup extends NiceWeaponPickup;
var int SingleShotCount;
defaultproperties
{ cost=500 BuyClipSize=2 PowerValue=90 SpeedValue=30 RangeValue=12 Description="A double barreled shotgun used by big game hunters." ItemName="Hunting Shotgun" ItemShortName="Hunting Shotgun" AmmoItemName="12-gauge Hunting shells" CorrespondingPerkIndex=1 EquipmentCategoryID=3 InventoryType=Class'NicePack.NiceBoomStick' PickupMessage="You got the Hunting Shotgun" PickupSound=Sound'KF_DoubleSGSnd.2Barrel_Pickup' PickupForce="AssaultRiflePickup" StaticMesh=StaticMesh'KF_pickups_Trip.Shotgun.boomstick_pickup' CollisionRadius=35.000000 CollisionHeight=5.000000
{
cost=500
BuyClipSize=2
PowerValue=90
SpeedValue=30
RangeValue=12
Description="A double barreled shotgun used by big game hunters."
ItemName="Hunting Shotgun"
ItemShortName="Hunting Shotgun"
AmmoItemName="12-gauge Hunting shells"
CorrespondingPerkIndex=1
EquipmentCategoryID=3
InventoryType=Class'NicePack.NiceBoomStick'
PickupMessage="You got the Hunting Shotgun"
PickupSound=Sound'KF_DoubleSGSnd.2Barrel_Pickup'
PickupForce="AssaultRiflePickup"
StaticMesh=StaticMesh'KF_pickups_Trip.Shotgun.boomstick_pickup'
CollisionRadius=35.000000
CollisionHeight=5.000000
}

View File

@ -6,5 +6,43 @@ simulated function fillSubReloadStages(){
}
defaultproperties
{ bChangeClipIcon=True hudClipTexture=Texture'KillingFloorHUD.HUD.Hud_Single_Bullet' reloadType=RTYPE_SINGLE ForceZoomOutOnFireTime=0.010000 MagCapacity=5 ReloadRate=0.666667 ReloadAnim="Reload" ReloadAnimRate=1.000000 bHoldToReload=True Weight=8.000000 bHasAimingMode=True IdleAimAnim="Idle_Iron" StandardDisplayFOV=65.000000 TraderInfoTexture=Texture'ScrnWeaponPack_T.Spas.Spas_Unselected' MeshRef="ScrnWeaponPack_A.spas12_1st" SkinRefs(0)="ScrnWeaponPack_T.SPAS.shotgun_cmb" SelectSoundRef="KF_PumpSGSnd.SG_Select" HudImageRef="ScrnWeaponPack_T.SPAS.Spas_Unselected" SelectedHudImageRef="ScrnWeaponPack_T.SPAS.Spas_Selected" PlayerIronSightFOV=70.000000 ZoomedDisplayFOV=40.000000 FireModeClass(0)=Class'NicePack.NiceSpasFire' FireModeClass(1)=Class'NicePack.NiceSpasAltFire' PutDownAnim="PutDown" AIRating=0.600000 CurrentRating=0.600000 Description="The SPAS12 is a dual-mode shotgun, that can also be used for firing slugs." DisplayFOV=65.000000 Priority=135 InventoryGroup=3 GroupOffset=2 PickupClass=Class'NicePack.NiceSpasPickup' PlayerViewOffset=(X=20.000000,Y=18.750000,Z=-7.500000) BobDamping=7.000000 AttachmentClass=Class'NicePack.NiceSpasAttachment' IconCoords=(X1=169,Y1=172,X2=245,Y2=208) ItemName="SPAS-12" TransientSoundVolume=1.000000
{
bChangeClipIcon=True
hudClipTexture=Texture'KillingFloorHUD.HUD.Hud_Single_Bullet'
reloadType=RTYPE_SINGLE
ForceZoomOutOnFireTime=0.010000
MagCapacity=5
ReloadRate=0.666667
ReloadAnim="Reload"
ReloadAnimRate=1.000000
bHoldToReload=True
Weight=6.000000
bHasAimingMode=True
IdleAimAnim="Idle_Iron"
StandardDisplayFOV=65.000000
TraderInfoTexture=Texture'ScrnWeaponPack_T.Spas.Spas_Unselected'
MeshRef="ScrnWeaponPack_A.spas12_1st"
SkinRefs(0)="ScrnWeaponPack_T.SPAS.shotgun_cmb"
SelectSoundRef="KF_PumpSGSnd.SG_Select"
HudImageRef="ScrnWeaponPack_T.SPAS.Spas_Unselected"
SelectedHudImageRef="ScrnWeaponPack_T.SPAS.Spas_Selected"
PlayerIronSightFOV=70.000000
ZoomedDisplayFOV=40.000000
FireModeClass(0)=Class'NicePack.NiceSpasFire'
FireModeClass(1)=Class'NicePack.NiceSpasAltFire'
PutDownAnim="PutDown"
AIRating=0.600000
CurrentRating=0.600000
Description="The SPAS12 is a dual-mode shotgun, that can also be used for firing slugs."
DisplayFOV=65.000000
Priority=135
InventoryGroup=3
GroupOffset=2
PickupClass=Class'NicePack.NiceSpasPickup'
PlayerViewOffset=(X=20.000000,Y=18.750000,Z=-7.500000)
BobDamping=7.000000
AttachmentClass=Class'NicePack.NiceSpasAttachment'
IconCoords=(X1=169,Y1=172,X2=245,Y2=208)
ItemName="SPAS-12"
TransientSoundVolume=1.000000
}

View File

@ -1,18 +1,24 @@
class MeanPoisonInventory extends Inventory;
var float poisonStartTime, maxSpeedPenaltyTime, poisonSpeedDown;
simulated function Tick(float DeltaTime) {
if(Level.TimeSeconds - poisonStartTime > maxSpeedPenaltyTime) Destroy();
if(Level.TimeSeconds - poisonStartTime > maxSpeedPenaltyTime)
Destroy();
}
simulated function float GetMovementModifierFor(Pawn InPawn){
local float actualSpeedDown;
local class<NiceVeterancyTypes> niceVet;
niceVet = class'NiceVeterancyTypes'.static.GetVeterancy(InPawn.PlayerReplicationInfo);
if(niceVet != none){ actualSpeedDown = 1.0 - (1.0 - poisonSpeedDown) * niceVet.static.SlowingModifier(KFPlayerReplicationInfo(InPawn.PlayerReplicationInfo)); actualSpeedDown = FMax(0.0, FMin(1.0, actualSpeedDown)); return actualSpeedDown;
if(niceVet != none){
actualSpeedDown = 1.0 - (1.0 - poisonSpeedDown) * niceVet.static.SlowingModifier(KFPlayerReplicationInfo(InPawn.PlayerReplicationInfo));
actualSpeedDown = FMax(0.0, FMin(1.0, actualSpeedDown));
return actualSpeedDown;
}
// If something went wrong - ignore slowdown altogether
return 1.0;
}
defaultproperties
{ maxSpeedPenaltyTime=5.000000 poisonSpeedDown=0.600000
{
maxSpeedPenaltyTime=5.000000
poisonSpeedDown=0.800000
}

View File

@ -668,36 +668,28 @@ function ModDamage( out int damage,
float headshotLevel,
KFPlayerReplicationInfo KFPRI,
optional float lockonTime){
local NicePlayerController nicePlayer;
local NiceMonster niceZed;
local bool hasThinOut;
local bool isRelated;
local float maxDistance;
if(KFPRI == none || KFPRI.ClientVeteranSkill == none) return;
// Add perked damage
damage = KFPRI.ClientVeteranSkill.Static.AddDamage( KFPRI, self,
KFPawn(instigatedBy),
damage, damageType);
// Skill bonuses
if(nicePlayer == none || instigatedBy == none)
return;
hasThinOut = class'NiceVeterancyTypes'.static.hasSkill(nicePlayer,
class'NiceSkillCommandoThinOut');
if(!hasThinOut)
return;
maxDistance = class'NiceSkillCommandoThinOut'.default.maxDistance;
foreach instigatedBy.RadiusActors(class'NiceMonster', niceZed, maxDistance){
if(!nicePlayer.CanSee(niceZed)) continue;
if(niceZed == none || niceZed == self) continue;
if(niceZed.health <= 0) continue;
if(default.health < 500) continue;
isRelated = ClassIsChildOf(niceZed.class, class)
|| ClassIsChildOf(class, niceZed.class);
if(niceZed.default.health >= 1000 || isRelated){
damage *= class'NiceSkillCommandoThinOut'.default.damageMult;
break;
}
}
local NicePlayerController nicePlayer;
local bool hasGiantSlayer;
local int bonusDamageStacks;
if(KFPRI == none || KFPRI.ClientVeteranSkill == none) return;
// Add perked damage
damage = KFPRI.ClientVeteranSkill.Static.AddDamage( KFPRI, self,
KFPawn(instigatedBy),
damage, damageType);
// Skill bonuses
if(instigatedBy == none)
return;
nicePlayer = NicePlayerController(instigatedBy.controller);
if(nicePlayer == none)
return;
hasGiantSlayer = class'NiceVeterancyTypes'.static.hasSkill(nicePlayer,
class'NiceSkillCommandoGiantSlayer');
if(!hasGiantSlayer)
return;
bonusDamageStacks =
int(health / class'NiceSkillCommandoGiantSlayer'.default.healthStep);
damage *= 1.0f + bonusDamageStacks *
class'NiceSkillCommandoGiantSlayer'.default.bonusDamageMult;
}
function ModRegularDamage( out int damage,
Pawn instigatedBy,
@ -945,8 +937,10 @@ function DealDecapDamage( int damage,
damageType, headshotLevel, KFPRI, lockonTime);
}
else
decapDmg = HealthMax * GetDecapDamageModifier( damageType, nicePlayer,
KFPRI);
{
decapDmg = Ceil(HealthMax * GetDecapDamageModifier( damageType,
nicePlayer, KFPRI));
}
DealBodyDamage( decapDmg, instigatedBy, hitLocation, momentum, damageType,
headshotLevel, KFPRI, lockonTime);
if(class'NiceVeterancyTypes'.static.
@ -1057,7 +1051,9 @@ function DealBodyDamage(int damage,
// Reduce health
Health -= actualDamage;
if(IsFinisher(damage, damageType, nicePlayer))
{
Health -= actualDamage;
}
// Update location
if(hitLocation == vect(0,0,0))
hitLocation = Location;
@ -1771,7 +1767,7 @@ simulated function RemoveHead(){
// No more raspy breathin'...cuz he has no throat or mouth :S
AmbientSound = MiscSound;
if(Health > 0)
BleedOutTime = Level.TimeSeconds + BleedOutDuration;
BleedOutTime = Level.TimeSeconds + BleedOutDuration;
if(MeleeAnims[1] == 'Claw3')
MeleeAnims[1] = 'Claw1';
if(MeleeAnims[2] == 'Claw3')