Apply dirty patch (messed up line endings)
This commit is contained in:
parent
12d95e387e
commit
51bb9add5b
@ -1,76 +1,152 @@
|
|||||||
class NiceGUIPerkButton extends GUIButton;
|
class NiceGUIPerkButton extends GUIButton;
|
||||||
var bool isAltSkill;
|
var bool isAltSkill;
|
||||||
var int skillPerkIndex, skillIndex;
|
var int skillPerkIndex, skillIndex;
|
||||||
var class<NiceSkill> associatedSkill;
|
var class<NiceSkill> associatedSkill;
|
||||||
function InitComponent(GUIController MyController, GUIComponent MyOwner)
|
function InitComponent(GUIController MyController, GUIComponent MyOwner)
|
||||||
{
|
{
|
||||||
OnDraw = DrawSkillButton;
|
OnDraw = DrawSkillButton;
|
||||||
OnClick = SkillChange;
|
OnClick = SkillChange;
|
||||||
Super.InitComponent(MyController, MyOwner);
|
Super.InitComponent(MyController, MyOwner);
|
||||||
}
|
}
|
||||||
function bool SkillChange(GUIComponent Sender){
|
function bool SkillChange(GUIComponent Sender){
|
||||||
local byte newSkillChoice;
|
local byte newSkillChoice;
|
||||||
local NicePlayerController skillOwner;
|
local NicePlayerController skillOwner;
|
||||||
if(isAltSkill)
newSkillChoice = 1;
|
if(isAltSkill)
|
||||||
else
newSkillChoice = 0;
|
newSkillChoice = 1;
|
||||||
skillOwner = NicePlayerController(PlayerOwner());
|
else
|
||||||
if(skillOwner != none){
skillOwner.ServerSetSkill(skillPerkIndex, skillIndex, newSkillChoice);
skillOwner.SaveConfig();
|
newSkillChoice = 0;
|
||||||
}
|
skillOwner = NicePlayerController(PlayerOwner());
|
||||||
return true;
|
if(skillOwner != none){
|
||||||
}
|
skillOwner.ServerSetSkill(skillPerkIndex, skillIndex, newSkillChoice);
|
||||||
function bool DrawSkillButton(Canvas cnvs){
|
skillOwner.SaveConfig();
|
||||||
// Variables that contain information about this button's skill
|
}
|
||||||
local NicePlayerController skillOwner;
|
return true;
|
||||||
local bool bAvailable, bSelected, bPending;
|
}
|
||||||
// Variables needed for text drawing
|
function bool DrawSkillButton(Canvas cnvs){
|
||||||
local int descLineOffset; // How much vertical space description took so far
|
// Variables that contain information about this button's skill
|
||||||
local string skillEffects, line; // 'line' is next line from description to be drawn, 'skillEffects' is a not-yet drawn part of skill's effect description
|
local NicePlayerController skillOwner;
|
||||||
local float textWidth, textHeight, nameHeight; // Variables for storing amount of space text uses
|
local bool bAvailable, bSelected, bPending;
|
||||||
local int horizontalOffset, verticalOffset, smVerticalOffset; // Spaces between text and borders ('smVerticalOffset' is space between skill's name and description)
|
// Variables needed for text drawing
|
||||||
// Old values for font and it's scale
|
local int descLineOffset; // How much vertical space description took so far
|
||||||
local Font oldFont;
|
local string skillEffects, line; // 'line' is next line from description to be drawn, 'skillEffects' is a not-yet drawn part of skill's effect description
|
||||||
local float oldFontScaleX, oldFontScaleY;
|
local float textWidth, textHeight, nameHeight; // Variables for storing amount of space text uses
|
||||||
// Get skill parameters
|
local int horizontalOffset, verticalOffset, smVerticalOffset; // Spaces between text and borders ('smVerticalOffset' is space between skill's name and description)
|
||||||
skillOwner = NicePlayerController(PlayerOwner());
|
// Old values for font and it's scale
|
||||||
bAvailable = class'NiceVeterancyTypes'.static.CanUseSkill(skillOwner, associatedSkill);
|
local Font oldFont;
|
||||||
if(bAvailable)
bSelected = class'NiceVeterancyTypes'.static.HasSkill(skillOwner, associatedSkill);
|
local float oldFontScaleX, oldFontScaleY;
|
||||||
bPending = class'NiceVeterancyTypes'.static.IsSkillPending(skillOwner, associatedSkill);
|
// Get skill parameters
|
||||||
if(skillOwner == none || associatedSkill == none)
return true;
|
skillOwner = NicePlayerController(PlayerOwner());
|
||||||
// Text offset parameters that seem to give a good result
|
bAvailable = class'NiceVeterancyTypes'.static.CanUseSkill(skillOwner, associatedSkill);
|
||||||
horizontalOffset = 10;
|
if(bAvailable)
|
||||||
verticalOffset = 5;
|
bSelected = class'NiceVeterancyTypes'.static.HasSkill(skillOwner, associatedSkill);
|
||||||
smVerticalOffset = 2;
|
bPending = class'NiceVeterancyTypes'.static.IsSkillPending(skillOwner, associatedSkill);
|
||||||
// Backup old font values and set the new ones
|
if(skillOwner == none || associatedSkill == none)
|
||||||
oldFont = cnvs.Font;
|
return true;
|
||||||
oldFontScaleX = cnvs.FontScaleX;
|
// Text offset parameters that seem to give a good result
|
||||||
oldFontScaleY = cnvs.FontScaleY;
|
verticalOffset = 5;
|
||||||
cnvs.Font = class'ROHUD'.Static.LoadSmallFontStatic(3);
|
smVerticalOffset = 2;
|
||||||
cnvs.FontScaleX = 1.0;
|
if (ActualWidth() > 400)
|
||||||
cnvs.FontScaleY = 1.0;
|
{
|
||||||
// Draw text
|
horizontalOffset = 10;
|
||||||
// - Name
|
}
|
||||||
cnvs.SetPos(ActualLeft() + horizontalOffset, ActualTop() + verticalOffset);
|
else if (ActualWidth() > 320)
|
||||||
if(!bAvailable)
cnvs.SetDrawColor(0, 0, 0);
|
{
|
||||||
else if(bSelected)
cnvs.SetDrawColor(255, 255, 255);
|
horizontalOffset = 5;
|
||||||
else
cnvs.SetDrawColor(128, 128, 128);
|
}
|
||||||
cnvs.DrawText(associatedSkill.default.skillName);
|
// Backup old font values and set the new ones
|
||||||
cnvs.TextSize(associatedSkill.default.skillName, textWidth, nameHeight);
|
oldFont = cnvs.Font;
|
||||||
// - Description
|
oldFontScaleX = cnvs.FontScaleX;
|
||||||
cnvs.Font = class'ROHUD'.Static.LoadSmallFontStatic(5);
|
oldFontScaleY = cnvs.FontScaleY;
|
||||||
if(!bAvailable)
cnvs.SetDrawColor(0, 0, 0);
|
cnvs.FontScaleX = 1.0;
|
||||||
else if(bSelected)
cnvs.SetDrawColor(220, 220, 220);//180
|
cnvs.FontScaleY = 1.0;
|
||||||
else
cnvs.SetDrawColor(140, 140, 140);//100
|
if (ActualWidth() > 700)
|
||||||
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;
|
cnvs.Font = class'ROHUD'.Static.LoadSmallFontStatic(3);
|
||||||
}
|
}
|
||||||
// Draw border
|
else if (ActualWidth() > 500)
|
||||||
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 = class'ROHUD'.Static.LoadSmallFontStatic(5);
|
||||||
cnvs.Font = oldFont;
|
}
|
||||||
cnvs.FontScaleX = oldFontScaleX;
|
else if (ActualWidth() > 400)
|
||||||
cnvs.FontScaleY = oldFontScaleY;
|
{
|
||||||
return true;
|
cnvs.Font = class'ROHUD'.Static.LoadSmallFontStatic(6);
|
||||||
}
|
}
|
||||||
defaultproperties
|
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);
|
||||||
|
//cnvs.DrawText(string(ActualWidth()));
|
||||||
|
cnvs.DrawText(associatedSkill.default.skillName);
|
||||||
|
cnvs.TextSize(associatedSkill.default.skillName, textWidth, nameHeight);
|
||||||
|
// - Description
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
// 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);
|
||||||
|
}
|
||||||
|
cnvs.Font = oldFont;
|
||||||
|
cnvs.FontScaleX = oldFontScaleX;
|
||||||
|
cnvs.FontScaleY = oldFontScaleY;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
defaultproperties
|
||||||
|
{
|
||||||
}
|
}
|
@ -71,12 +71,14 @@ function ReplaceRequiredEquipment(){
|
|||||||
simulated function int CalculateCalibrationScore(){
|
simulated function int CalculateCalibrationScore(){
|
||||||
local float accuracy;
|
local float accuracy;
|
||||||
accuracy = (float(calibrationHits)) / (float(calibrationTotalShots));
|
accuracy = (float(calibrationHits)) / (float(calibrationTotalShots));
|
||||||
|
if(calibrationTotalShots <= 0)
|
||||||
|
return 3;
|
||||||
// Very low accuracy (<60%) or not enough shots (<2) - 1 star
|
// Very low accuracy (<60%) or not enough shots (<2) - 1 star
|
||||||
if(calibrationTotalShots < 2 || accuracy < 0.6)
|
if(accuracy < 0.6)
|
||||||
return 1;
|
return 1;
|
||||||
// Here we definitely have at least 60% accuracy and 2 shots.
|
// Here we definitely have at least 60% accuracy and 2 shots.
|
||||||
// Low accuracy (<80%) or not enough shots (<5) - 2 stars.
|
// Low accuracy (<80%) or not enough shots (<5) - 2 stars.
|
||||||
if(calibrationTotalShots < 5 || accuracy < 0.8)
|
if(accuracy < 0.8)
|
||||||
return 2;
|
return 2;
|
||||||
// Here we definitely have at least 80% accuracy and 5 shots.
|
// Here we definitely have at least 80% accuracy and 5 shots.
|
||||||
// If amount of shots is below 7 - it's 3 stars at most.
|
// If amount of shots is below 7 - it's 3 stars at most.
|
||||||
|
@ -175,7 +175,7 @@ simulated function PostBeginPlay(){
|
|||||||
super.PostBeginPlay();
|
super.PostBeginPlay();
|
||||||
class'NicePack'.default.Mut = self;
|
class'NicePack'.default.Mut = self;
|
||||||
// Gun skins
|
// 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.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.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';
|
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.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'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'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
|
// Abilities
|
||||||
class'NiceAbilityManager'.default.events.static.AddAdapter(class'NiceSharpshooterAbilitiesAdapter', level);
|
class'NiceAbilityManager'.default.events.static.AddAdapter(class'NiceSharpshooterAbilitiesAdapter', level);
|
||||||
SetTimer(0.25, true);
|
SetTimer(0.25, true);
|
||||||
|
@ -1,88 +1,131 @@
|
|||||||
class NiceVetBerserker extends NiceVeterancyTypes
|
class NiceVetBerserker extends NiceVeterancyTypes
|
||||||
abstract;
|
abstract;
|
||||||
static function AddCustomStats(ClientPerkRepLink Other){
|
static function AddCustomStats(ClientPerkRepLink Other){
|
||||||
other.AddCustomValue(Class'NiceVetBerserkerExp');
|
other.AddCustomValue(Class'NiceVetBerserkerExp');
|
||||||
}
|
}
|
||||||
static function int GetStatValueInt(ClientPerkRepLink StatOther, byte ReqNum){
|
static function int GetStatValueInt(ClientPerkRepLink StatOther, byte ReqNum){
|
||||||
return StatOther.GetCustomValueInt(Class'NiceVetBerserkerExp');
|
return StatOther.GetCustomValueInt(Class'NiceVetBerserkerExp');
|
||||||
}
|
}
|
||||||
static function array<int> GetProgressArray(byte ReqNum, optional out int DoubleScalingBase){
|
static function array<int> GetProgressArray(byte ReqNum, optional out int DoubleScalingBase){
|
||||||
return default.progressArray0;
|
return default.progressArray0;
|
||||||
}
|
}
|
||||||
static function int AddDamage(KFPlayerReplicationInfo KFPRI, KFMonster Injured, KFPawn DamageTaker, int InDamage, class<DamageType> DmgType){
|
static function int AddDamage(KFPlayerReplicationInfo KFPRI, KFMonster Injured, KFPawn DamageTaker, int InDamage, class<DamageType> DmgType){
|
||||||
local float perkDamage;
|
local float perkDamage;
|
||||||
local class<NiceWeaponPickup> pickupClass;
|
local class<NiceWeaponPickup> pickupClass;
|
||||||
pickupClass = GetPickupFromDamageType(DmgType);
|
pickupClass = GetPickupFromDamageType(DmgType);
|
||||||
perkDamage = float(InDamage);
|
perkDamage = float(InDamage);
|
||||||
if(IsPerkedPickup(pickupClass))
perkDamage *= 2;
|
if(IsPerkedPickup(pickupClass))
|
||||||
return perkDamage;
|
perkDamage *= 2;
|
||||||
}
|
return perkDamage;
|
||||||
static function float GetFireSpeedModStatic(KFPlayerReplicationInfo KFPRI, class<Weapon> other){
|
}
|
||||||
local float bonus;
|
static function float GetFireSpeedModStatic(KFPlayerReplicationInfo KFPRI, class<Weapon> other){
|
||||||
local class<NiceWeaponPickup> pickupClass;
|
local float bonus;
|
||||||
local NiceHumanPawn nicePawn;
|
local class<NiceWeaponPickup> pickupClass;
|
||||||
local NicePlayerController nicePlayer;
|
local NiceHumanPawn nicePawn;
|
||||||
pickupClass = GetPickupFromWeapon(other);
|
local NicePlayerController nicePlayer;
|
||||||
bonus = 1.0;
|
pickupClass = GetPickupFromWeapon(other);
|
||||||
nicePlayer = NicePlayerController(KFPRI.Owner);
|
bonus = 1.0;
|
||||||
if(IsPerkedPickup(pickupClass))
bonus *= 1.25;
|
nicePlayer = NicePlayerController(KFPRI.Owner);
|
||||||
nicePawn = NiceHumanPawn(nicePlayer.Pawn);
|
if(IsPerkedPickup(pickupClass))
|
||||||
if(nicePlayer != none && nicePawn != none && HasSkill(nicePlayer, class'NiceSkillZerkFury') && IsPerkedPickup(pickupClass)){
if(nicePawn != none && nicePawn.invincibilityTimer > 0.0)
bonus *= class'NiceSkillZerkFury'.default.attackSpeedBonus;
|
bonus *= 1.25;
|
||||||
}
|
nicePawn = NiceHumanPawn(nicePlayer.Pawn);
|
||||||
if(nicePlayer != none && nicePawn != none && nicePlayer.IsZedTimeActive() && IsPerkedPickup(pickupClass)
&& HasSkill(nicePlayer, class'NiceSkillZerkZEDAccelerate'))
bonus /= (nicePawn.Level.TimeDilation / 1.1);
|
if(nicePlayer != none && nicePawn != none && HasSkill(nicePlayer, class'NiceSkillZerkFury') && IsPerkedPickup(pickupClass)){
|
||||||
return bonus;
|
if(nicePawn != none && nicePawn.invincibilityTimer > 0.0)
|
||||||
}
|
bonus *= class'NiceSkillZerkFury'.default.attackSpeedBonus;
|
||||||
static function float GetMeleeMovementSpeedModifier(KFPlayerReplicationInfo KFPRI){
|
}
|
||||||
return 0.2;
|
if(nicePlayer != none && nicePawn != none && nicePlayer.IsZedTimeActive() && IsPerkedPickup(pickupClass)
|
||||||
}
|
&& HasSkill(nicePlayer, class'NiceSkillZerkZEDAccelerate'))
|
||||||
static function float GetMovementSpeedModifier(KFPlayerReplicationInfo KFPRI, KFGameReplicationInfo KFGRI)
|
bonus /= (nicePawn.Level.TimeDilation / 1.1);
|
||||||
{
|
return bonus;
|
||||||
local NicePlayerController nicePlayer;
|
}
|
||||||
nicePlayer = NicePlayerController(KFPRI.Owner);
|
static function float GetMeleeMovementSpeedModifier(KFPlayerReplicationInfo KFPRI){
|
||||||
if(nicePlayer != none && nicePlayer.IsZedTimeActive()
&& HasSkill(nicePlayer, class'NiceSkillZerkZEDAccelerate'))
return 1.0 / fmin(1.0, (KFGRI.Level.TimeDilation / 1.1));
|
return 0.2;
|
||||||
return 1.0;
|
}
|
||||||
}
|
static function float GetMovementSpeedModifier(KFPlayerReplicationInfo KFPRI, KFGameReplicationInfo KFGRI)
|
||||||
static function float GetWeaponMovementSpeedBonus(KFPlayerReplicationInfo KFPRI, Weapon Weap){
|
{
|
||||||
local float bonus;
|
local NicePlayerController nicePlayer;
|
||||||
local NicePlayerController nicePlayer;
|
nicePlayer = NicePlayerController(KFPRI.Owner);
|
||||||
local NiceHumanPawn nicePawn;
|
if(nicePlayer != none && nicePlayer.IsZedTimeActive()
|
||||||
bonus = 0.0;
|
&& HasSkill(nicePlayer, class'NiceSkillZerkZEDAccelerate'))
|
||||||
nicePlayer = NicePlayerController(KFPRI.Owner);
|
return 1.0 / fmin(1.0, (KFGRI.Level.TimeDilation / 1.1));
|
||||||
if(nicePlayer != none)
nicePawn = NiceHumanPawn(nicePlayer.Pawn);
|
return 1.0;
|
||||||
if(nicePlayer != none && nicePawn != none && HasSkill(nicePlayer, class'NiceSkillZerkWhirlwind')){
if(nicePawn != none && nicePawn.invincibilityTimer > 0.0)
bonus = 1.0;
|
}
|
||||||
}
|
static function float GetWeaponMovementSpeedBonus(KFPlayerReplicationInfo KFPRI, Weapon Weap){
|
||||||
return bonus;
|
local float bonus;
|
||||||
}
|
local NicePlayerController nicePlayer;
|
||||||
static function bool CanBeGrabbed(KFPlayerReplicationInfo KFPRI, KFMonster Other){
|
local NiceHumanPawn nicePawn;
|
||||||
return false;
|
bonus = 0.0;
|
||||||
}
|
nicePlayer = NicePlayerController(KFPRI.Owner);
|
||||||
// Set number times Zed Time can be extended
|
if(nicePlayer != none)
|
||||||
static function int ZedTimeExtensions(KFPlayerReplicationInfo KFPRI){
|
nicePawn = NiceHumanPawn(nicePlayer.Pawn);
|
||||||
return 4;
|
if(nicePlayer != none && nicePawn != none && HasSkill(nicePlayer, class'NiceSkillZerkWhirlwind')){
|
||||||
}
|
if(nicePawn != none && nicePawn.invincibilityTimer > 0.0)
|
||||||
static function float SlowingModifier(KFPlayerReplicationInfo KFPRI){
|
bonus = 1.0;
|
||||||
return 1.2;
|
}
|
||||||
}
|
return bonus;
|
||||||
static function int GetInvincibilityExtentions(KFPlayerReplicationInfo KFPRI){
|
}
|
||||||
return 3;
|
static function bool CanBeGrabbed(KFPlayerReplicationInfo KFPRI, KFMonster Other){
|
||||||
}
|
return false;
|
||||||
static function int GetInvincibilityDuration(KFPlayerReplicationInfo KFPRI){
|
}
|
||||||
local NicePlayerController nicePlayer;
|
// Set number times Zed Time can be extended
|
||||||
nicePlayer = NicePlayerController(KFPRI.Owner);
|
static function int ZedTimeExtensions(KFPlayerReplicationInfo KFPRI){
|
||||||
if( nicePlayer != none
&& HasSkill(nicePlayer, class'NiceSkillZerkColossus')){
return 3.0 + class'NiceSkillZerkColossus'.default.timeBonus;
|
return 4;
|
||||||
}
|
}
|
||||||
return 3.0;
|
static function int GetInvincibilityExtentions(KFPlayerReplicationInfo KFPRI){
|
||||||
}
|
return 3;
|
||||||
static function int GetInvincibilitySafeMisses(KFPlayerReplicationInfo KFPRI){
|
}
|
||||||
local NicePlayerController nicePlayer;
|
static function int GetInvincibilityDuration(KFPlayerReplicationInfo KFPRI){
|
||||||
nicePlayer = NicePlayerController(KFPRI.Owner);
|
local NicePlayerController nicePlayer;
|
||||||
if( nicePlayer != none
&& HasSkill(nicePlayer, class'NiceSkillZerkUndead')){
return 1 + class'NiceSkillZerkUndead'.default.addedSafeMisses;
|
nicePlayer = NicePlayerController(KFPRI.Owner);
|
||||||
}
|
if( nicePlayer != none
|
||||||
return 1;
|
&& HasSkill(nicePlayer, class'NiceSkillZerkColossus')){
|
||||||
}
|
return 3.0 + class'NiceSkillZerkColossus'.default.timeBonus;
|
||||||
static function string GetCustomLevelInfo(byte Level){
|
}
|
||||||
return default.CustomLevelInfo;
|
return 3.0;
|
||||||
}
|
}
|
||||||
defaultproperties
|
static function int GetInvincibilitySafeMisses(KFPlayerReplicationInfo KFPRI){
|
||||||
{
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"
|
local NicePlayerController nicePlayer;
|
||||||
}
|
nicePlayer = NicePlayerController(KFPRI.Owner);
|
||||||
|
if( nicePlayer != none
|
||||||
|
&& HasSkill(nicePlayer, class'NiceSkillZerkUndead')){
|
||||||
|
return 1 + class'NiceSkillZerkUndead'.default.addedSafeMisses;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
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"
|
||||||
|
}
|
||||||
|
@ -1,38 +1,73 @@
|
|||||||
class NiceVetCommando extends NiceVeterancyTypes
|
class NiceVetCommando extends NiceVeterancyTypes
|
||||||
abstract;
|
abstract;
|
||||||
static function AddCustomStats(ClientPerkRepLink Other){
|
static function AddCustomStats(ClientPerkRepLink Other){
|
||||||
other.AddCustomValue(Class'NiceVetCommandoExp');
|
other.AddCustomValue(Class'NiceVetCommandoExp');
|
||||||
}
|
}
|
||||||
static function int GetStatValueInt(ClientPerkRepLink StatOther, byte ReqNum){
|
static function int GetStatValueInt(ClientPerkRepLink StatOther, byte ReqNum){
|
||||||
return StatOther.GetCustomValueInt(Class'NiceVetCommandoExp');
|
return StatOther.GetCustomValueInt(Class'NiceVetCommandoExp');
|
||||||
}
|
}
|
||||||
static function array<int> GetProgressArray(byte ReqNum, optional out int DoubleScalingBase){
|
static function array<int> GetProgressArray(byte ReqNum, optional out int DoubleScalingBase){
|
||||||
return default.progressArray0;
|
return default.progressArray0;
|
||||||
}
|
}
|
||||||
static function float GetHealthBarsDistanceMulti(KFPlayerReplicationInfo KFPRI){
|
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 0.0;
|
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;
|
static function float GetStalkerViewDistanceMulti(KFPlayerReplicationInfo KFPRI){
|
||||||
return 0.0;
|
if(KFPRI != none && SomeoneHasSkill(NicePlayerController(KFPRI.Owner), class'NiceSkillCommandoStrategist'))
|
||||||
}
|
return class'NiceSkillCommandoStrategist'.default.visionRadius;
|
||||||
static function float GetMagCapacityMod(KFPlayerReplicationInfo KFPRI, KFWeapon Other){
|
return 0.0;
|
||||||
local class<NiceWeaponPickup> pickupClass;
|
}
|
||||||
pickupClass = GetPickupFromWeapon(other.class);
|
static function float GetMagCapacityMod(KFPlayerReplicationInfo KFPRI, KFWeapon Other){
|
||||||
if(IsPerkedPickup(pickupClass) && HasSkill(NicePlayerController(KFPRI.Owner), class'NiceSkillCommandoLargerMags'))
return class'NiceSkillCommandoLargerMags'.default.sizeBonus;
|
local class<NiceWeaponPickup> pickupClass;
|
||||||
return 1.0;
|
pickupClass = GetPickupFromWeapon(other.class);
|
||||||
}
|
if(IsPerkedPickup(pickupClass) && HasSkill(NicePlayerController(KFPRI.Owner), class'NiceSkillCommandoLargerMags'))
|
||||||
static function float GetReloadSpeedModifierStatic(KFPlayerReplicationInfo KFPRI, class<KFWeapon> Other){
|
return class'NiceSkillCommandoLargerMags'.default.sizeBonus;
|
||||||
return 1.3;
|
return 1.0;
|
||||||
}
|
}
|
||||||
static function int ZedTimeExtensions(KFPlayerReplicationInfo KFPRI){
|
static function float GetReloadSpeedModifierStatic(KFPlayerReplicationInfo KFPRI, class<KFWeapon> Other){
|
||||||
if(HasSkill(NicePlayerController(KFPRI.Owner), class'NiceSkillCommandoTactitian'))
return class'NiceSkillCommandoTactitian'.default.bonusExt + 3;
|
return 1.3;
|
||||||
return 3;
|
}
|
||||||
}
|
static function int ZedTimeExtensions(KFPlayerReplicationInfo KFPRI){
|
||||||
static function string GetCustomLevelInfo(byte Level){
|
if(HasSkill(NicePlayerController(KFPRI.Owner), class'NiceSkillCommandoTactitian'))
|
||||||
return default.CustomLevelInfo;
|
return class'NiceSkillCommandoTactitian'.default.bonusExt + 3;
|
||||||
}
|
return 3;
|
||||||
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"
|
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.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"
|
||||||
|
}
|
||||||
|
@ -1,28 +1,36 @@
|
|||||||
class NiceSkillCommandoCriticalFocus extends NiceSkill
|
class NiceSkillCommandoCriticalFocus extends NiceSkill
|
||||||
abstract;
|
abstract;
|
||||||
var float cooldown;
|
var float cooldown;
|
||||||
var float healthBoundary;
|
var float healthBoundary;
|
||||||
function static SkillSelected(NicePlayerController nicePlayer){
|
function static SkillSelected(NicePlayerController nicePlayer){
|
||||||
local NicePack niceMutator;
|
local NicePack niceMutator;
|
||||||
super.SkillSelected(nicePlayer);
|
super.SkillSelected(nicePlayer);
|
||||||
niceMutator = class'NicePack'.static.Myself(nicePlayer.Level);
|
niceMutator = class'NicePack'.static.Myself(nicePlayer.Level);
|
||||||
if(niceMutator == none || niceMutator.Role == Role_AUTHORITY)
return;
|
if(niceMutator == none || niceMutator.Role == Role_AUTHORITY)
|
||||||
niceMutator.AddCounter("npCommandoCriticalFocus", Texture'NicePackT.HudCounter.commandoCounter', false, default.class);
|
return;
|
||||||
}
|
niceMutator.AddCounter("npCommandoCriticalFocus", Texture'NicePackT.HudCounter.commandoCounter', false, default.class);
|
||||||
function static SkillDeSelected(NicePlayerController nicePlayer){
|
}
|
||||||
local NicePack niceMutator;
|
function static SkillDeSelected(NicePlayerController nicePlayer){
|
||||||
super.SkillDeSelected(nicePlayer);
|
local NicePack niceMutator;
|
||||||
niceMutator = class'NicePack'.static.Myself(nicePlayer.Level);
|
super.SkillDeSelected(nicePlayer);
|
||||||
if(niceMutator == none || niceMutator.Role == Role_AUTHORITY)
return;
|
niceMutator = class'NicePack'.static.Myself(nicePlayer.Level);
|
||||||
niceMutator.RemoveCounter("npCommandoCriticalFocus");
|
if(niceMutator == none || niceMutator.Role == Role_AUTHORITY)
|
||||||
}
|
return;
|
||||||
function static int UpdateCounterValue(string counterName, NicePlayerController nicePlayer){
|
niceMutator.RemoveCounter("npCommandoCriticalFocus");
|
||||||
local NiceHumanPawn nicePawn;
|
}
|
||||||
if(nicePlayer == none || counterName != "npCommandoCriticalFocus")
return 0;
|
function static int UpdateCounterValue(string counterName, NicePlayerController nicePlayer){
|
||||||
nicePawn = NiceHumanPawn(nicePlayer.pawn);
|
local NiceHumanPawn nicePawn;
|
||||||
if(nicePawn == none)
return 0;
|
if(nicePlayer == none || counterName != "npCommandoCriticalFocus")
|
||||||
return Ceil(nicePawn.forcedZedTimeCountDown);
|
return 0;
|
||||||
}
|
nicePawn = NiceHumanPawn(nicePlayer.pawn);
|
||||||
defaultproperties
|
if(nicePawn == none)
|
||||||
{
cooldown=30.000000
healthBoundary=50.000000
SkillName="Critical focus"
|
return 0;
|
||||||
}
|
return Ceil(nicePawn.forcedZedTimeCountDown);
|
||||||
|
}
|
||||||
|
defaultproperties
|
||||||
|
{
|
||||||
|
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."
|
||||||
|
}
|
||||||
|
@ -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."
|
||||||
|
}
|
@ -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."
|
|
||||||
}
|
|
@ -1,6 +1,9 @@
|
|||||||
class NiceSkillCommandoTrashCleaner extends NiceSkill
|
class NiceSkillCommandoTrashCleaner extends NiceSkill
|
||||||
abstract;
|
abstract;
|
||||||
var float decapitationMultiLimit;
|
var float decapitationMultiLimit;
|
||||||
defaultproperties
|
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."
|
||||||
|
}
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
class NiceSkillCommandoZEDEvisceration extends NiceSkill
|
class NiceSkillCommandoZEDEvisceration extends NiceSkill
|
||||||
abstract;
|
abstract;
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
SkillName="Evisceration"
SkillEffects="During zed-time both 'Trash cleaner' and 'Thin out' skills are active."
|
{
|
||||||
}
|
SkillName="Evisceration"
|
||||||
|
SkillEffects="Does nothing."
|
||||||
|
}
|
||||||
|
@ -1,66 +1,114 @@
|
|||||||
class NiceVetDemolitions extends NiceVeterancyTypes
|
class NiceVetDemolitions extends NiceVeterancyTypes
|
||||||
abstract;
|
abstract;
|
||||||
static function AddCustomStats(ClientPerkRepLink Other){
|
static function AddCustomStats(ClientPerkRepLink Other){
|
||||||
other.AddCustomValue(Class'NiceVetDemolitionsExp');
|
other.AddCustomValue(Class'NiceVetDemolitionsExp');
|
||||||
}
|
}
|
||||||
static function int GetStatValueInt(ClientPerkRepLink StatOther, byte ReqNum){
|
static function int GetStatValueInt(ClientPerkRepLink StatOther, byte ReqNum){
|
||||||
return StatOther.GetCustomValueInt(Class'NiceVetDemolitionsExp');
|
return StatOther.GetCustomValueInt(Class'NiceVetDemolitionsExp');
|
||||||
}
|
}
|
||||||
static function array<int> GetProgressArray(byte ReqNum, optional out int DoubleScalingBase){
|
static function array<int> GetProgressArray(byte ReqNum, optional out int DoubleScalingBase){
|
||||||
return default.progressArray0;
|
return default.progressArray0;
|
||||||
}
|
}
|
||||||
static function int ReduceDamage(KFPlayerReplicationInfo KFPRI, KFPawn Injured, Pawn Instigator, int InDamage, class<DamageType> DmgType){
|
static function int ReduceDamage(KFPlayerReplicationInfo KFPRI, KFPawn Injured, Pawn Instigator, int InDamage, class<DamageType> DmgType){
|
||||||
local NicePlayerController nicePlayer;
|
local NicePlayerController nicePlayer;
|
||||||
if(class<NiceDamTypeDemoSafeExplosion>(DmgType) != none)
return 0;
|
if(class<NiceDamTypeDemoSafeExplosion>(DmgType) != none)
|
||||||
nicePlayer = NicePlayerController(KFPRI.Owner);
|
return 0;
|
||||||
if(nicePlayer != none && Instigator == nicePlayer.pawn && nicePlayer.IsZedTimeActive()
&& HasSkill(nicePlayer, class'NiceSkillDemoZEDDuckAndCover'))
return 0.0;
|
nicePlayer = NicePlayerController(KFPRI.Owner);
|
||||||
if((class<KFWeaponDamageType>(DmgType) != none && class<KFWeaponDamageType>(DmgType).default.bIsExplosive))
return float(InDamage) * 0.5;
|
if(nicePlayer != none && Instigator == nicePlayer.pawn && nicePlayer.IsZedTimeActive()
|
||||||
return InDamage;
|
&& HasSkill(nicePlayer, class'NiceSkillDemoZEDDuckAndCover'))
|
||||||
}
|
return 0.0;
|
||||||
static function float AddExtraAmmoFor(KFPlayerReplicationInfo KFPRI, Class<Ammunition> AmmoType){
|
if((class<KFWeaponDamageType>(DmgType) != none && class<KFWeaponDamageType>(DmgType).default.bIsExplosive))
|
||||||
local float bonusNades, bonusPipes;
|
return float(InDamage) * 0.5;
|
||||||
// Default bonus
|
return InDamage;
|
||||||
bonusNades = 5;
|
}
|
||||||
bonusPipes = 6;
|
static function float AddExtraAmmoFor(KFPlayerReplicationInfo KFPRI, Class<Ammunition> AmmoType){
|
||||||
if(AmmoType == class'FragAmmo')
return 1.0 + 0.2 * bonusNades;
|
local float bonusNades, bonusPipes;
|
||||||
if(ClassIsChildOf(AmmoType, class'PipeBombAmmo'))
return 1.0 + 0.5 * bonusPipes;
|
// Default bonus
|
||||||
return 1.0;
|
bonusNades = 5;
|
||||||
}
|
bonusPipes = 6;
|
||||||
static function int AddDamage(KFPlayerReplicationInfo KFPRI, KFMonster Injured, KFPawn DamageTaker, int InDamage, class<DamageType> DmgType){
|
if(AmmoType == class'FragAmmo')
|
||||||
local float perkDamage;
|
return 1.0 + 0.2 * bonusNades;
|
||||||
local class<NiceWeaponPickup> pickupClass;
|
if(ClassIsChildOf(AmmoType, class'PipeBombAmmo'))
|
||||||
pickupClass = GetPickupFromDamageType(DmgType);
|
return 1.0 + 0.5 * bonusPipes;
|
||||||
perkDamage = float(InDamage);
|
return 1.0;
|
||||||
if(DmgType == class'NicePack.NiceDamTypeDemoExplosion')
return 1.6 * perkDamage;
|
}
|
||||||
if(IsPerkedPickup(pickupClass))
perkDamage *= 1.25;
|
static function int AddDamage(KFPlayerReplicationInfo KFPRI, KFMonster Injured, KFPawn DamageTaker, int InDamage, class<DamageType> DmgType){
|
||||||
else if( pickupClass != none && pickupClass.default.weight <= class'NiceSkillDemoOffperk'.default.weightBound
&& HasSkill(NicePlayerController(KFPRI.Owner), class'NiceSkillDemoOffperk') )
perkDamage *= class'NiceSkillDemoOffperk'.default.damageBonus;
|
local float perkDamage;
|
||||||
if( KFPRI != none && class<NiceDamTypeDemoBlunt>(DmgType) != none
&& SomeoneHasSkill(NicePlayerController(KFPRI.Owner), class'NiceSkillDemoOnperk') )
perkDamage *= class'NiceSkillDemoOnperk'.default.damageBonus;
|
local class<NiceWeaponPickup> pickupClass;
|
||||||
return perkDamage;
|
pickupClass = GetPickupFromDamageType(DmgType);
|
||||||
}
|
perkDamage = float(InDamage);
|
||||||
static function float GetReloadSpeedModifierStatic(KFPlayerReplicationInfo KFPRI, class<KFWeapon> other){
|
if(DmgType == class'NicePack.NiceDamTypeDemoExplosion')
|
||||||
local NiceHumanPawn nicePawn;
|
return 1.6 * perkDamage;
|
||||||
local class<NiceWeaponPickup> pickupClass;
|
if(IsPerkedPickup(pickupClass))
|
||||||
// Pistols reload
|
perkDamage *= 1.25;
|
||||||
if( other != none && other.default.weight <= class'NiceSkillDemoOffperk'.default.weightBound
&& HasSkill(NicePlayerController(KFPRI.Owner), class'NiceSkillDemoOffperk') )
return class'NiceSkillDemoOffperk'.default.reloadBonus;
|
else if( pickupClass != none && pickupClass.default.weight <= class'NiceSkillDemoOffperk'.default.weightBound
|
||||||
// Maniac reload
|
&& HasSkill(NicePlayerController(KFPRI.Owner), class'NiceSkillDemoOffperk') )
|
||||||
pickupClass = GetPickupFromWeapon(other);
|
perkDamage *= class'NiceSkillDemoOffperk'.default.damageBonus;
|
||||||
if(KFPRI != none && PlayerController(KFPRI.Owner) != none)
nicePawn = NiceHumanPawn(PlayerController(KFPRI.Owner).Pawn);
|
if( KFPRI != none && class<NiceDamTypeDemoBlunt>(DmgType) != none
|
||||||
if(nicePawn != none && nicePawn.maniacTimeout >= 0.0 && IsPerkedPickup(pickupClass))
return class'NiceSkillDemoManiac'.default.reloadSpeedup;
|
&& SomeoneHasSkill(NicePlayerController(KFPRI.Owner), class'NiceSkillDemoOnperk') )
|
||||||
return 1.0;
|
perkDamage *= class'NiceSkillDemoOnperk'.default.damageBonus;
|
||||||
}
|
return perkDamage;
|
||||||
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;
|
static function float GetReloadSpeedModifierStatic(KFPlayerReplicationInfo KFPRI, class<KFWeapon> other){
|
||||||
return 1.0;
|
local NiceHumanPawn nicePawn;
|
||||||
}
|
local class<NiceWeaponPickup> pickupClass;
|
||||||
static function int AddStunScore(KFPlayerReplicationInfo KFPRI, KFMonster Injured, KFPawn DamageTaker, int InStunScore, class<NiceWeaponDamageType> DmgType){
|
// Pistols reload
|
||||||
return int(float(InStunScore) * 1.5);
|
if( other != none && other.default.weight <= class'NiceSkillDemoOffperk'.default.weightBound
|
||||||
}
|
&& HasSkill(NicePlayerController(KFPRI.Owner), class'NiceSkillDemoOffperk') )
|
||||||
static function int AddFlinchScore(KFPlayerReplicationInfo KFPRI, KFMonster Injured, KFPawn DamageTaker, int InFlinchScore, class<NiceWeaponDamageType> DmgType){
|
return class'NiceSkillDemoOffperk'.default.reloadBonus;
|
||||||
return int(float(InFlinchScore) * 1.5);
|
// Maniac reload
|
||||||
}
|
pickupClass = GetPickupFromWeapon(other);
|
||||||
static function string GetCustomLevelInfo(byte Level){
|
if(KFPRI != none && PlayerController(KFPRI.Owner) != none)
|
||||||
return default.CustomLevelInfo;
|
nicePawn = NiceHumanPawn(PlayerController(KFPRI.Owner).Pawn);
|
||||||
}
|
if(nicePawn != none && nicePawn.maniacTimeout >= 0.0 && IsPerkedPickup(pickupClass))
|
||||||
defaultproperties
|
return class'NiceSkillDemoManiac'.default.reloadSpeedup;
|
||||||
{
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"
|
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;
|
||||||
|
return 1.0;
|
||||||
|
}
|
||||||
|
static function int AddStunScore(KFPlayerReplicationInfo KFPRI, KFMonster Injured, KFPawn DamageTaker, int InStunScore, class<NiceWeaponDamageType> DmgType){
|
||||||
|
return int(float(InStunScore) * 1.5);
|
||||||
|
}
|
||||||
|
static function int AddFlinchScore(KFPlayerReplicationInfo KFPRI, KFMonster Injured, KFPawn DamageTaker, int InFlinchScore, class<NiceWeaponDamageType> DmgType){
|
||||||
|
return int(float(InFlinchScore) * 1.5);
|
||||||
|
}
|
||||||
|
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"
|
||||||
|
}
|
||||||
|
@ -1,118 +1,157 @@
|
|||||||
class NiceVetEnforcer extends NiceVeterancyTypes
|
class NiceVetEnforcer extends NiceVeterancyTypes
|
||||||
abstract;
|
abstract;
|
||||||
|
|
||||||
static function AddCustomStats(ClientPerkRepLink Other){
|
static function AddCustomStats(ClientPerkRepLink Other){
|
||||||
Other.AddCustomValue(Class'NiceVetSupportExp');
|
Other.AddCustomValue(Class'NiceVetSupportExp');
|
||||||
}
|
}
|
||||||
|
|
||||||
static function int GetStatValueInt(ClientPerkRepLink StatOther, byte ReqNum){
|
static function int GetStatValueInt(ClientPerkRepLink StatOther, byte ReqNum){
|
||||||
return StatOther.GetCustomValueInt(Class'NiceVetSupportExp');
|
return StatOther.GetCustomValueInt(Class'NiceVetSupportExp');
|
||||||
}
|
}
|
||||||
|
|
||||||
static function array<int> GetProgressArray(byte ReqNum, optional out int DoubleScalingBase){
|
static function array<int> GetProgressArray(byte ReqNum, optional out int DoubleScalingBase){
|
||||||
return default.progressArray0;
|
return default.progressArray0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Other bonuses
|
// Other bonuses
|
||||||
|
|
||||||
static function float GetPenetrationDamageMulti(KFPlayerReplicationInfo KFPRI, float DefaultPenDamageReduction, class<NiceWeaponDamageType> fireIntance){
|
static function float GetPenetrationDamageMulti(KFPlayerReplicationInfo KFPRI, float DefaultPenDamageReduction, class<NiceWeaponDamageType> fireIntance){
|
||||||
local float bonusReduction;
|
local float bonusReduction;
|
||||||
local float PenDamageInverse;
|
local float PenDamageInverse;
|
||||||
bonusReduction = 0.0;
|
bonusReduction = 0.0;
|
||||||
if(class<NiceDamageTypeVetEnforcerBullets>(fireIntance) != none)
|
if(class<NiceDamageTypeVetEnforcerBullets>(fireIntance) != none)
|
||||||
return DefaultPenDamageReduction;
|
return DefaultPenDamageReduction;
|
||||||
if(HasSkill(NicePlayerController(KFPRI.Owner), class'NiceSkillSupportStubbornness'))
bonusReduction = class'NiceSkillSupportStubbornness'.default.penLossRed;
|
if(HasSkill(NicePlayerController(KFPRI.Owner), class'NiceSkillSupportStubbornness'))
|
||||||
PenDamageInverse = (1.0 - FMax(0, DefaultPenDamageReduction));
|
bonusReduction = class'NiceSkillSupportStubbornness'.default.penLossRed;
|
||||||
return DefaultPenDamageReduction + PenDamageInverse * (0.6 + 0.4 * bonusReduction); // 60% better penetrations + bonus
|
PenDamageInverse = (1.0 - FMax(0, DefaultPenDamageReduction));
|
||||||
}
|
return DefaultPenDamageReduction + PenDamageInverse * (0.6 + 0.4 * bonusReduction); // 60% better penetrations + bonus
|
||||||
|
}
|
||||||
static function int AddStunScore(KFPlayerReplicationInfo KFPRI, KFMonster Injured, KFPawn DamageTaker, int InStunScore, class<NiceWeaponDamageType> DmgType){
|
|
||||||
local class<NiceWeaponPickup> pickupClass;
|
static function int AddStunScore(KFPlayerReplicationInfo KFPRI, KFMonster Injured, KFPawn DamageTaker, int InStunScore, class<NiceWeaponDamageType> DmgType){
|
||||||
pickupClass = GetPickupFromDamageType(DmgType);
|
local class<NiceWeaponPickup> pickupClass;
|
||||||
if(KFPRI != none && IsPerkedPickup(pickupClass) && HasSkill(NicePlayerController(KFPRI.Owner), class'NiceSkillEnforcerBombard'))
return InStunScore * class'NiceSkillEnforcerBombard'.default.stunMult;
|
pickupClass = GetPickupFromDamageType(DmgType);
|
||||||
return InStunScore;
|
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';
|
|
||||||
return class'NicePack.NiceNailNade';*/
|
static function class<Grenade> GetNadeType(KFPlayerReplicationInfo KFPRI){
|
||||||
return class'NicePack.NiceCryoNade';
|
/*if(HasSkill(NicePlayerController(KFPRI.Owner), class'NiceSkillSupportCautious'))
|
||||||
}
|
return class'NicePack.NiceDelayedNade';
|
||||||
|
return class'NicePack.NiceNailNade';*/
|
||||||
static function int ReduceDamage(KFPlayerReplicationInfo KFPRI, KFPawn Injured, Pawn Instigator, int InDamage, class<DamageType> DmgType){
|
return class'NicePack.NiceCryoNade';
|
||||||
if(HasSkill(NicePlayerController(KFPRI.Owner), class'NiceSkillEnforcerDetermination') && Injured.Health < class'NiceSkillEnforcerDetermination'.default.healthBound)
|
}
|
||||||
InDamage *= (1 - class'NiceSkillEnforcerDetermination'.default.addedResist);
|
|
||||||
if(HasSkill(NicePlayerController(KFPRI.Owner), class'NiceSkillEnforcerUnshakable'))
|
static function float AddExtraAmmoFor(KFPlayerReplicationInfo KFPRI, Class<Ammunition> AmmoType){
|
||||||
InDamage *= (1 - class'NiceSkillEnforcerUnshakable'.default.skillResist);
|
local float bonusNades;
|
||||||
if(HasSkill(NicePlayerController(KFPRI.Owner), class'NiceSkillHeavyCoating') && Injured.ShieldStrength > 0){
|
// Default bonus
|
||||||
if( class<KFWeaponDamageType>(DmgType) != none
|
bonusNades = 2;
|
||||||
&& ((class<KFWeaponDamageType>(DmgType).default.bDealBurningDamage && KFMonster(Instigator) != none)
|
if(AmmoType == class'NicePack.NiceCryoNade' || AmmoType == class'NicePack.NiceNailNade')
|
||||||
|| DmgType == class'NiceZombieTeslaHusk'.default.MyDamageType) )
|
return 1.0 + 0.2 * bonusNades;
|
||||||
InDamage *= (1 - class'NiceSkillHeavyCoating'.default.huskResist);
|
return 1.0;
|
||||||
}
|
}
|
||||||
return InDamage;
|
|
||||||
}
|
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)
|
||||||
static function float GetFireSpeedModStatic(KFPlayerReplicationInfo KFPRI, class<Weapon> other){
|
InDamage *= (1 - class'NiceSkillEnforcerDetermination'.default.addedResist);
|
||||||
local float fireSpeed;
|
if(HasSkill(NicePlayerController(KFPRI.Owner), class'NiceSkillEnforcerUnshakable'))
|
||||||
local NicePlayerController nicePlayer;
|
InDamage *= (1 - class'NiceSkillEnforcerUnshakable'.default.skillResist);
|
||||||
local class<NiceWeaponPickup> pickupClass;
|
if(HasSkill(NicePlayerController(KFPRI.Owner), class'NiceSkillHeavyCoating') && Injured.ShieldStrength > 0){
|
||||||
pickupClass = GetPickupFromWeapon(other);
|
if( class<KFWeaponDamageType>(DmgType) != none
|
||||||
if(KFPRI.Owner == none)
|
&& ((class<KFWeaponDamageType>(DmgType).default.bDealBurningDamage && KFMonster(Instigator) != none)
|
||||||
return 1.0;
|
|| DmgType == class'NiceZombieTeslaHusk'.default.MyDamageType) )
|
||||||
if(IsPerkedPickup(pickupClass) && HasSkill(NicePlayerController(KFPRI.Owner), class'NiceSkillHeavyOverclocking'))
|
InDamage *= (1 - class'NiceSkillHeavyCoating'.default.huskResist);
|
||||||
fireSpeed = class'NiceSkillHeavyOverclocking'.default.fireSpeedMult;
|
}
|
||||||
else
|
return InDamage;
|
||||||
fireSpeed = 1.0;
|
}
|
||||||
nicePlayer = NicePlayerController(KFPRI.Owner);
|
|
||||||
/*if(nicePlayer != none && HasSkill(nicePlayer, class'NiceSkillEnforcerZEDBarrage'))
|
static function float GetFireSpeedModStatic(KFPlayerReplicationInfo KFPRI, class<Weapon> other){
|
||||||
fireSpeed /= (KFPRI.Owner.Level.TimeDilation / 1.1);*/
|
local float fireSpeed;
|
||||||
return fireSpeed;
|
local NicePlayerController nicePlayer;
|
||||||
}
|
local class<NiceWeaponPickup> pickupClass;
|
||||||
|
pickupClass = GetPickupFromWeapon(other);
|
||||||
static function float ModifyRecoilSpread(KFPlayerReplicationInfo KFPRI, WeaponFire other, out float Recoil){
|
if(KFPRI.Owner == none)
|
||||||
local class<NiceWeaponPickup> pickupClass;
|
return 1.0;
|
||||||
pickupClass = GetPickupFromWeaponFire(other);
|
if(IsPerkedPickup(pickupClass) && HasSkill(NicePlayerController(KFPRI.Owner), class'NiceSkillHeavyOverclocking'))
|
||||||
if(IsPerkedPickup(pickupClass) && HasSkill(NicePlayerController(KFPRI.Owner), class'NiceSkillHeavyOverclocking'))
|
fireSpeed = class'NiceSkillHeavyOverclocking'.default.fireSpeedMult;
|
||||||
Recoil = class'NiceSkillHeavyOverclocking'.default.fireSpeedMult;
|
else
|
||||||
else
|
fireSpeed = 1.0;
|
||||||
Recoil = 1.0;
|
nicePlayer = NicePlayerController(KFPRI.Owner);
|
||||||
return Recoil;
|
/*if(nicePlayer != none && HasSkill(nicePlayer, class'NiceSkillEnforcerZEDBarrage'))
|
||||||
}
|
fireSpeed /= (KFPRI.Owner.Level.TimeDilation / 1.1);*/
|
||||||
|
return fireSpeed;
|
||||||
/*static function float GetMagCapacityModStatic(KFPlayerReplicationInfo KFPRI, class<KFWeapon> other){
|
}
|
||||||
local class<NiceWeapon> niceWeap;
|
|
||||||
niceWeap = class<NiceWeapon>(other);
|
static function float ModifyRecoilSpread(KFPlayerReplicationInfo KFPRI, WeaponFire other, out float Recoil){
|
||||||
if(niceWeap != none && niceWeap.default.reloadType == RTYPE_MAG)
|
local class<NiceWeaponPickup> pickupClass;
|
||||||
return 1.5;
|
pickupClass = GetPickupFromWeaponFire(other);
|
||||||
if(other == class'NicePack.NiceM41AAssaultRifle' || other == class'NicePack.NiceChainGun' || other == class'NicePack.NiceStinger' )
|
if(IsPerkedPickup(pickupClass) && HasSkill(NicePlayerController(KFPRI.Owner), class'NiceSkillHeavyOverclocking'))
|
||||||
return 1.5;
|
Recoil = class'NiceSkillHeavyOverclocking'.default.fireSpeedMult;
|
||||||
return 1.0;
|
else
|
||||||
}*/
|
Recoil = 1.0;
|
||||||
|
return Recoil;
|
||||||
static function float GetMovementSpeedModifier(KFPlayerReplicationInfo KFPRI, KFGameReplicationInfo KFGRI){
|
}
|
||||||
if(HasSkill(NicePlayerController(KFPRI.Owner), class'NiceSkillEnforcerUnstoppable'))
|
|
||||||
return class'NiceSkillEnforcerUnstoppable'.default.speedMult;
|
/*static function float GetMagCapacityModStatic(KFPlayerReplicationInfo KFPRI, class<KFWeapon> other){
|
||||||
return 1.0;
|
local class<NiceWeapon> niceWeap;
|
||||||
}
|
niceWeap = class<NiceWeapon>(other);
|
||||||
|
if(niceWeap != none && niceWeap.default.reloadType == RTYPE_MAG)
|
||||||
static function bool CanBePulled(KFPlayerReplicationInfo KFPRI){
|
return 1.5;
|
||||||
if(HasSkill(NicePlayerController(KFPRI.Owner), class'NiceSkillEnforcerUnstoppable'))
|
if(other == class'NicePack.NiceM41AAssaultRifle' || other == class'NicePack.NiceChainGun' || other == class'NicePack.NiceStinger' )
|
||||||
return false;
|
return 1.5;
|
||||||
return super.CanBePulled(KFPRI);
|
return 1.0;
|
||||||
}
|
}*/
|
||||||
|
|
||||||
static function float SlowingModifier(KFPlayerReplicationInfo KFPRI){
|
static function float GetMovementSpeedModifier(KFPlayerReplicationInfo KFPRI, KFGameReplicationInfo KFGRI){
|
||||||
if(HasSkill(NicePlayerController(KFPRI.Owner), class'NiceSkillEnforcerUnstoppable'))
|
if(HasSkill(NicePlayerController(KFPRI.Owner), class'NiceSkillEnforcerUnstoppable'))
|
||||||
return 0.0;
|
return class'NiceSkillEnforcerUnstoppable'.default.speedMult;
|
||||||
return 1.0;
|
return 1.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static function string GetCustomLevelInfo(byte Level){
|
static function bool CanBePulled(KFPlayerReplicationInfo KFPRI){
|
||||||
return default.CustomLevelInfo;
|
if(HasSkill(NicePlayerController(KFPRI.Owner), class'NiceSkillEnforcerUnstoppable'))
|
||||||
}
|
return false;
|
||||||
defaultproperties
|
return super.CanBePulled(KFPRI);
|
||||||
{
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"
|
static function float SlowingModifier(KFPlayerReplicationInfo KFPRI){
|
||||||
|
if(HasSkill(NicePlayerController(KFPRI.Owner), class'NiceSkillEnforcerUnstoppable'))
|
||||||
|
return 0.0;
|
||||||
|
return 1.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
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|+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"
|
||||||
}
|
}
|
@ -1,62 +1,95 @@
|
|||||||
class NiceVetFieldMedic extends NiceVeterancyTypes
|
class NiceVetFieldMedic extends NiceVeterancyTypes
|
||||||
abstract;
|
abstract;
|
||||||
static function AddCustomStats(ClientPerkRepLink Other){
|
static function AddCustomStats(ClientPerkRepLink Other){
|
||||||
Other.AddCustomValue(Class'NiceVetFieldMedicExp');
|
Other.AddCustomValue(Class'NiceVetFieldMedicExp');
|
||||||
}
|
}
|
||||||
static function int GetStatValueInt(ClientPerkRepLink StatOther, byte ReqNum){
|
static function int GetStatValueInt(ClientPerkRepLink StatOther, byte ReqNum){
|
||||||
return StatOther.GetCustomValueInt(Class'NiceVetFieldMedicExp');
|
return StatOther.GetCustomValueInt(Class'NiceVetFieldMedicExp');
|
||||||
}
|
}
|
||||||
static function array<int> GetProgressArray(byte ReqNum, optional out int DoubleScalingBase){
|
static function array<int> GetProgressArray(byte ReqNum, optional out int DoubleScalingBase){
|
||||||
return default.progressArray0;
|
return default.progressArray0;
|
||||||
}
|
}
|
||||||
// Allows to increase head-shot check scale for some weapons.
|
// Allows to increase head-shot check scale for some weapons.
|
||||||
static function float GetHeadshotCheckMultiplier(KFPlayerReplicationInfo KFPRI, class<DamageType> DmgType){
|
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 1.0;
|
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){
|
// Give Medic normal hand nades again - he should buy medic nade lauchers for healing nades
|
||||||
if(KFPRI != none && class'NiceVetFieldMedic'.static.hasSkill(NicePlayerController(KFPRI.Owner), class'NiceSkillMedicArmament'))
return class'NicePack.NiceMedicNade';
|
static function class<Grenade> GetNadeType(KFPlayerReplicationInfo KFPRI){
|
||||||
return class'NiceMedicNadePoison';
|
if(KFPRI != none && class'NiceVetFieldMedic'.static.hasSkill(NicePlayerController(KFPRI.Owner), class'NiceSkillMedicArmament'))
|
||||||
}
|
return class'NicePack.NiceMedicNade';
|
||||||
static function float GetAmmoPickupMod(KFPlayerReplicationInfo KFPRI, KFAmmunition Other){
|
return class'NiceMedicNadePoison';
|
||||||
if(other != none && other.class == class'FragAmmo'
&& KFPRI != none && class'NiceVetFieldMedic'.static.hasSkill(NicePlayerController(KFPRI.Owner), class'NiceSkillMedicArmament'))
return 0.0;
|
}
|
||||||
return 1.0;
|
static function float GetAmmoPickupMod(KFPlayerReplicationInfo KFPRI, KFAmmunition Other){
|
||||||
}
|
if(other != none && other.class == class'FragAmmo'
|
||||||
//can't cook medic nades
|
&& KFPRI != none && class'NiceVetFieldMedic'.static.hasSkill(NicePlayerController(KFPRI.Owner), class'NiceSkillMedicArmament'))
|
||||||
static function bool CanCookNade(KFPlayerReplicationInfo KFPRI, Weapon Weap){
|
return 0.0;
|
||||||
return GetNadeType(KFPRI) != class'NicePack.NiceMedicNade';
|
return 1.0;
|
||||||
}
|
}
|
||||||
static function float GetSyringeChargeRate(KFPlayerReplicationInfo KFPRI){
|
//can't cook medic nades
|
||||||
return 3.0;
|
static function bool CanCookNade(KFPlayerReplicationInfo KFPRI, Weapon Weap){
|
||||||
}
|
return GetNadeType(KFPRI) != class'NicePack.NiceMedicNade';
|
||||||
static function float GetHealPotency(KFPlayerReplicationInfo KFPRI){
|
}
|
||||||
local float potency, debuff;
|
static function float GetSyringeChargeRate(KFPlayerReplicationInfo KFPRI){
|
||||||
potency = 2.0;
|
return 3.0;
|
||||||
debuff = 0.0;
|
}
|
||||||
if(KFPRI != none && class'NiceVetFieldMedic'.static.hasSkill(NicePlayerController(KFPRI.Owner), class'NiceSkillMedicTranquilizer'))
debuff += class'NiceSkillMedicTranquilizer'.default.healingDebuff;
|
static function float GetHealPotency(KFPlayerReplicationInfo KFPRI){
|
||||||
potency *= (1.0 - debuff);
|
local float potency, debuff;
|
||||||
return potency;
|
potency = 2.0;
|
||||||
}
|
debuff = 0.0;
|
||||||
static function float GetFireSpeedModStatic(KFPlayerReplicationInfo KFPRI, class<Weapon> Other){
|
if(KFPRI != none && class'NiceVetFieldMedic'.static.hasSkill(NicePlayerController(KFPRI.Owner), class'NiceSkillMedicTranquilizer'))
|
||||||
if(ClassIsChildOf(Other, class'Syringe'))
return 1.6;
|
debuff += class'NiceSkillMedicTranquilizer'.default.healingDebuff;
|
||||||
return 1.0;
|
potency *= (1.0 - debuff);
|
||||||
}
|
return potency;
|
||||||
static function float GetMovementSpeedModifier(KFPlayerReplicationInfo KFPRI, KFGameReplicationInfo KFGRI){
|
}
|
||||||
return 1.2;
|
static function float GetFireSpeedModStatic(KFPlayerReplicationInfo KFPRI, class<Weapon> Other){
|
||||||
}
|
if(ClassIsChildOf(Other, class'Syringe'))
|
||||||
static function float SlowingModifier(KFPlayerReplicationInfo KFPRI){
|
return 1.6;
|
||||||
return 1.5;
|
return 1.0;
|
||||||
}
|
}
|
||||||
static function float GetCostScaling(KFPlayerReplicationInfo KFPRI, class<Pickup> Item){
|
static function float GetMovementSpeedModifier(KFPlayerReplicationInfo KFPRI, KFGameReplicationInfo KFGRI){
|
||||||
local class<NiceWeaponPickup> pickupClass;
|
return 1.2;
|
||||||
pickupClass = class<NiceWeaponPickup>(Item);
|
}
|
||||||
if(IsPerkedPickup(class<NiceWeaponPickup>(Item)))
return 0.5;
|
static function float GetCostScaling(KFPlayerReplicationInfo KFPRI, class<Pickup> Item){
|
||||||
return 1.0;
|
local class<NiceWeaponPickup> pickupClass;
|
||||||
}
|
pickupClass = class<NiceWeaponPickup>(Item);
|
||||||
static function string GetCustomLevelInfo(byte Level){
|
if(IsPerkedPickup(class<NiceWeaponPickup>(Item)))
|
||||||
return default.CustomLevelInfo;
|
return 0.5;
|
||||||
}
|
return 1.0;
|
||||||
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"
|
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"
|
||||||
|
}
|
||||||
|
@ -1,52 +1,87 @@
|
|||||||
//==============================================================================
|
//==============================================================================
|
||||||
// NicePack / NiceSharpshooterAbilitiesAdapter
|
// NicePack / NiceSharpshooterAbilitiesAdapter
|
||||||
//==============================================================================
|
//==============================================================================
|
||||||
// Temporary stand-in for future functionality.
|
// Temporary stand-in for future functionality.
|
||||||
// Use this class to catch events from sharpshooter players' abilities.
|
// Use this class to catch events from sharpshooter players' abilities.
|
||||||
//==============================================================================
|
//==============================================================================
|
||||||
// 'Nice pack' source
|
// 'Nice pack' source
|
||||||
// Do whatever the fuck you want with it
|
// Do whatever the fuck you want with it
|
||||||
// Author: dkanus
|
// Author: dkanus
|
||||||
// E-mail: dkanus@gmail.com
|
// E-mail: dkanus@gmail.com
|
||||||
//==============================================================================
|
//==============================================================================
|
||||||
class NiceSharpshooterAbilitiesAdapter extends NiceAbilitiesAdapter;
|
class NiceSharpshooterAbilitiesAdapter extends NiceAbilitiesAdapter;
|
||||||
static function AbilityActivated( string abilityID,
NicePlayerController relatedPlayer){
|
static function AbilityActivated( string abilityID,
|
||||||
local NiceHumanPawn nicePawn;
|
NicePlayerController relatedPlayer){
|
||||||
if(relatedPlayer == none) return;
|
local NiceHumanPawn nicePawn;
|
||||||
nicePawn = NiceHumanPawn(relatedPlayer.pawn);
|
if(relatedPlayer == none) return;
|
||||||
if(nicePawn == none)
return;
|
nicePawn = NiceHumanPawn(relatedPlayer.pawn);
|
||||||
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 == class'NiceSkillSharpshooterGunslingerA'.default.abilityID){
nicePawn.gunslingerTimer =
class'NiceSkillSharpshooterGunslingerA'.default.duration;
|
if(abilityID == "Calibration"){
|
||||||
}
|
nicePawn.currentCalibrationState = CALSTATE_ACTIVE;
|
||||||
}
|
nicePawn.calibrateUsedZeds.length = 0;
|
||||||
static function AbilityAdded( string abilityID,
NicePlayerController relatedPlayer){
|
nicePawn.calibrationScore = 1;
|
||||||
local NiceHumanPawn nicePawn;
|
nicePawn.calibrationRemainingTime = 7.0;
|
||||||
if(relatedPlayer == none) return;
|
nicePawn.calibrationHits = 0;
|
||||||
nicePawn = NiceHumanPawn(relatedPlayer.pawn);
|
nicePawn.calibrationTotalShots = 0;
|
||||||
if(nicePawn == none)
return;
|
}
|
||||||
if(abilityID == "Calibration"){
nicePawn.currentCalibrationState = CALSTATE_FINISHED;
nicePawn.calibrationScore = 1;
|
if(abilityID == class'NiceSkillSharpshooterGunslingerA'.default.abilityID){
|
||||||
}
|
nicePawn.gunslingerTimer =
|
||||||
}
|
class'NiceSkillSharpshooterGunslingerA'.default.duration;
|
||||||
static function AbilityRemoved( string abilityID,
NicePlayerController relatedPlayer){
|
}
|
||||||
local NiceHumanPawn nicePawn;
|
}
|
||||||
if(relatedPlayer == none) return;
|
static function AbilityAdded( string abilityID,
|
||||||
nicePawn = NiceHumanPawn(relatedPlayer.pawn);
|
NicePlayerController relatedPlayer){
|
||||||
if(nicePawn == none)
return;
|
local NiceHumanPawn nicePawn;
|
||||||
if(abilityID == "Calibration")
nicePawn.currentCalibrationState = CALSTATE_NOABILITY;
|
if(relatedPlayer == none) return;
|
||||||
if(abilityID == class'NiceSkillSharpshooterGunslingerA'.default.abilityID){
nicePawn.gunslingerTimer = 0.0;
|
nicePawn = NiceHumanPawn(relatedPlayer.pawn);
|
||||||
}
|
if(nicePawn == none)
|
||||||
}
|
return;
|
||||||
static function ModAbilityCooldown( string abilityID,
NicePlayerController relatedPlayer,
out float cooldown){
|
if(abilityID == "Calibration"){
|
||||||
local NiceHumanPawn nicePawn;
|
nicePawn.currentCalibrationState = CALSTATE_FINISHED;
|
||||||
if(relatedPlayer == none) return;
|
nicePawn.calibrationScore = 3;
|
||||||
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;
|
static function AbilityRemoved( string abilityID,
|
||||||
}
|
NicePlayerController relatedPlayer){
|
||||||
// Reduce calibration score
|
local NiceHumanPawn nicePawn;
|
||||||
if(nicePawn.calibrationScore > 1)
nicePawn.calibrationScore -= 1;
|
if(relatedPlayer == none) return;
|
||||||
}
|
nicePawn = NiceHumanPawn(relatedPlayer.pawn);
|
||||||
defaultproperties
|
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 > 3)
|
||||||
|
nicePawn.calibrationScore -= 1;
|
||||||
|
}
|
||||||
|
defaultproperties
|
||||||
|
{
|
||||||
|
}
|
||||||
|
@ -1,5 +1,16 @@
|
|||||||
class NiceDamTypeFNFALAssaultRifle extends NiceDamageTypeVetCommando
|
class NiceDamTypeFNFALAssaultRifle extends NiceDamageTypeVetCommando
|
||||||
abstract;
|
abstract;
|
||||||
defaultproperties
|
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
|
||||||
|
}
|
||||||
|
@ -1,5 +1,17 @@
|
|||||||
class NiceDamTypeSCARMK17AssaultRifle extends NiceDamageTypeVetCommando
|
class NiceDamTypeSCARMK17AssaultRifle extends NiceDamageTypeVetCommando
|
||||||
abstract;
|
abstract;
|
||||||
defaultproperties
|
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
|
||||||
|
}
|
||||||
|
@ -1,6 +1,19 @@
|
|||||||
class NiceDamTypeDeagle extends NiceDamageTypeVetSharpshooter
|
class NiceDamTypeDeagle extends NiceDamageTypeVetSharpshooter
|
||||||
abstract;
|
abstract;
|
||||||
defaultproperties
|
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
|
||||||
|
}
|
||||||
|
@ -1,4 +1,29 @@
|
|||||||
class NiceDeagleFire extends NiceSingleFire;
|
class NiceDeagleFire extends NiceSingleFire;
|
||||||
defaultproperties
|
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
|
||||||
|
}
|
||||||
|
@ -1,4 +1,24 @@
|
|||||||
class NiceDualDeagleFire extends NiceDualiesFire;
|
class NiceDualDeagleFire extends NiceDualiesFire;
|
||||||
defaultproperties
|
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
|
||||||
|
}
|
||||||
|
@ -1,6 +1,20 @@
|
|||||||
class NiceDamTypeMK23Pistol extends NiceDamageTypeVetSharpshooter
|
class NiceDamTypeMK23Pistol extends NiceDamageTypeVetSharpshooter
|
||||||
abstract;
|
abstract;
|
||||||
defaultproperties
|
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
|
||||||
|
}
|
||||||
|
@ -1,4 +1,25 @@
|
|||||||
class NiceDualMK23Fire extends NiceDualiesFire;
|
class NiceDualMK23Fire extends NiceDualiesFire;
|
||||||
defaultproperties
|
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
|
||||||
|
}
|
||||||
|
@ -1,4 +1,25 @@
|
|||||||
class NiceMK23Fire extends NiceSingleFire;
|
class NiceMK23Fire extends NiceSingleFire;
|
||||||
defaultproperties
|
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'
|
||||||
|
}
|
||||||
|
@ -1,4 +1,13 @@
|
|||||||
class NiceDamTypeMagnumPistol extends NiceDamageTypeVetSharpshooter;
|
class NiceDamTypeMagnumPistol extends NiceDamageTypeVetSharpshooter;
|
||||||
defaultproperties
|
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
|
||||||
|
}
|
||||||
|
@ -1,5 +1,37 @@
|
|||||||
class NiceDualMagnum extends NiceDualies;
|
class NiceDualMagnum extends NiceDualies;
|
||||||
defaultproperties
|
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
|
||||||
|
}
|
||||||
|
@ -1,4 +1,29 @@
|
|||||||
class NiceMagnumFire extends NiceSingleFire;
|
class NiceMagnumFire extends NiceSingleFire;
|
||||||
defaultproperties
|
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
|
||||||
|
}
|
||||||
|
@ -1,52 +1,103 @@
|
|||||||
class NiceBoomStick extends NiceWeapon;
|
class NiceBoomStick extends NiceWeapon;
|
||||||
#EXEC OBJ LOAD FILE=KillingFloorHUD.utx
|
#EXEC OBJ LOAD FILE=KillingFloorHUD.utx
|
||||||
var float glueTiming;
|
var float glueTiming;
|
||||||
var float firstShellTiming, secondShellTiming, jumpTiming;
|
var float firstShellTiming, secondShellTiming, jumpTiming;
|
||||||
var const string firstShellStr, secondShellStr, jumpStr;
|
var const string firstShellStr, secondShellStr, jumpStr;
|
||||||
simulated function PostBeginPlay(){
|
simulated function PostBeginPlay(){
|
||||||
local EventRecord record;
|
local EventRecord record;
|
||||||
local AutoReloadAnimDesc reloadDesc;
|
local AutoReloadAnimDesc reloadDesc;
|
||||||
// Setup animation timings
|
// Setup animation timings
|
||||||
autoReloadsDescriptions.Length = 0;
|
autoReloadsDescriptions.Length = 0;
|
||||||
reloadDesc.canInterruptFrame = 0.056;
|
reloadDesc.canInterruptFrame = 0.056;
|
||||||
reloadDesc.trashStartFrame = secondShellTiming;
|
reloadDesc.trashStartFrame = secondShellTiming;
|
||||||
reloadDesc.resumeFrame = 0.056;
|
reloadDesc.resumeFrame = 0.056;
|
||||||
reloadDesc.speedFrame = 0.056;
|
reloadDesc.speedFrame = 0.056;
|
||||||
// Setup all possible fire animations
|
// Setup all possible fire animations
|
||||||
reloadDesc.animName = 'Fire_Both';
|
reloadDesc.animName = 'Fire_Both';
|
||||||
autoReloadsDescriptions[0] = reloadDesc;
|
autoReloadsDescriptions[0] = reloadDesc;
|
||||||
reloadDesc.animName = 'Fire_Both_Iron';
|
reloadDesc.animName = 'Fire_Both_Iron';
|
||||||
autoReloadsDescriptions[1] = reloadDesc;
|
autoReloadsDescriptions[1] = reloadDesc;
|
||||||
reloadDesc.animName = 'Fire_Last';
|
reloadDesc.animName = 'Fire_Last';
|
||||||
autoReloadsDescriptions[2] = reloadDesc;
|
autoReloadsDescriptions[2] = reloadDesc;
|
||||||
reloadDesc.animName = 'Fire_Last_Iron';
|
reloadDesc.animName = 'Fire_Last_Iron';
|
||||||
autoReloadsDescriptions[3] = reloadDesc;
|
autoReloadsDescriptions[3] = reloadDesc;
|
||||||
// Setup reload events
|
// Setup reload events
|
||||||
record.eventName = jumpStr;
|
record.eventName = jumpStr;
|
||||||
record.eventFrame = jumpTiming;
|
record.eventFrame = jumpTiming;
|
||||||
relEvents[relEvents.Length] = record;
|
relEvents[relEvents.Length] = record;
|
||||||
record.eventName = firstShellStr;
|
record.eventName = firstShellStr;
|
||||||
record.eventFrame = firstShellTiming;
|
record.eventFrame = firstShellTiming;
|
||||||
relEvents[relEvents.Length] = record;
|
relEvents[relEvents.Length] = record;
|
||||||
record.eventName = secondShellStr;
|
record.eventName = secondShellStr;
|
||||||
record.eventFrame = secondShellTiming;
|
record.eventFrame = secondShellTiming;
|
||||||
relEvents[relEvents.Length] = record;
|
relEvents[relEvents.Length] = record;
|
||||||
super.PostBeginPlay();
|
super.PostBeginPlay();
|
||||||
}
|
}
|
||||||
simulated function ReloadEvent(string eventName){
|
simulated function ReloadEvent(string eventName){
|
||||||
if(eventName ~= jumpStr && GetMagazineAmmo() > 0)
SetAnimFrame(glueTiming);
|
if(eventName ~= jumpStr && GetMagazineAmmo() > 0)
|
||||||
if(eventName ~= firstShellStr)
MagAmmoRemainingClient = Min(1, AmmoAmount(0));
|
SetAnimFrame(glueTiming);
|
||||||
else if(eventName ~= secondShellStr)
MagAmmoRemainingClient = Min(2, AmmoAmount(0));
|
if(eventName ~= firstShellStr)
|
||||||
ServerSetMagSize(MagAmmoRemainingClient, bRoundInChamber, Level.TimeSeconds);
|
MagAmmoRemainingClient = Min(1, AmmoAmount(0));
|
||||||
}
|
else if(eventName ~= secondShellStr)
|
||||||
simulated function AddAutoReloadedAmmo(){
|
MagAmmoRemainingClient = Min(2, AmmoAmount(0));
|
||||||
MagAmmoRemainingClient = Min(2, AmmoAmount(0));
|
ServerSetMagSize(MagAmmoRemainingClient, bRoundInChamber, Level.TimeSeconds);
|
||||||
ServerSetMagSize(MagAmmoRemainingClient, bRoundInChamber, Level.TimeSeconds);
|
}
|
||||||
}
|
simulated function AddAutoReloadedAmmo(){
|
||||||
simulated function bool AltFireCanForceInterruptReload(){
|
MagAmmoRemainingClient = Min(2, AmmoAmount(0));
|
||||||
return (GetMagazineAmmo() > 0);
|
ServerSetMagSize(MagAmmoRemainingClient, bRoundInChamber, Level.TimeSeconds);
|
||||||
}
|
}
|
||||||
defaultproperties
|
simulated function bool AltFireCanForceInterruptReload(){
|
||||||
{
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
|
return (GetMagazineAmmo() > 0);
|
||||||
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
|
}
|
||||||
|
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=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
|
||||||
}
|
}
|
@ -1,5 +1,23 @@
|
|||||||
class NiceBoomStickPickup extends NiceWeaponPickup;
|
class NiceBoomStickPickup extends NiceWeaponPickup;
|
||||||
var int SingleShotCount;
|
var int SingleShotCount;
|
||||||
defaultproperties
|
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
|
||||||
}
|
}
|
@ -1,10 +1,48 @@
|
|||||||
class NiceSpas extends NiceWeapon;
|
class NiceSpas extends NiceWeapon;
|
||||||
|
|
||||||
simulated function fillSubReloadStages(){
|
simulated function fillSubReloadStages(){
|
||||||
// Loading 8 shells during 173 frames tops, with first shell loaded at frame 17, with 18 frames between load moments
|
// Loading 8 shells during 173 frames tops, with first shell loaded at frame 17, with 18 frames between load moments
|
||||||
generateReloadStages(8, 173, 17, 18);
|
generateReloadStages(8, 173, 17, 18);
|
||||||
}
|
}
|
||||||
|
|
||||||
defaultproperties
|
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
|
||||||
}
|
}
|
@ -1,18 +1,24 @@
|
|||||||
class MeanPoisonInventory extends Inventory;
|
class MeanPoisonInventory extends Inventory;
|
||||||
var float poisonStartTime, maxSpeedPenaltyTime, poisonSpeedDown;
|
var float poisonStartTime, maxSpeedPenaltyTime, poisonSpeedDown;
|
||||||
simulated function Tick(float DeltaTime) {
|
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;
|
simulated function float GetMovementModifierFor(Pawn InPawn){
|
||||||
local class<NiceVeterancyTypes> niceVet;
|
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;
|
niceVet = class'NiceVeterancyTypes'.static.GetVeterancy(InPawn.PlayerReplicationInfo);
|
||||||
}
|
if(niceVet != none){
|
||||||
// If something went wrong - ignore slowdown altogether
|
actualSpeedDown = 1.0 - (1.0 - poisonSpeedDown) * niceVet.static.SlowingModifier(KFPlayerReplicationInfo(InPawn.PlayerReplicationInfo));
|
||||||
return 1.0;
|
actualSpeedDown = FMax(0.0, FMin(1.0, actualSpeedDown));
|
||||||
}
|
return actualSpeedDown;
|
||||||
defaultproperties
|
}
|
||||||
{
maxSpeedPenaltyTime=5.000000
poisonSpeedDown=0.600000
|
// If something went wrong - ignore slowdown altogether
|
||||||
}
|
return 1.0;
|
||||||
|
}
|
||||||
|
defaultproperties
|
||||||
|
{
|
||||||
|
maxSpeedPenaltyTime=5.000000
|
||||||
|
poisonSpeedDown=0.800000
|
||||||
|
}
|
||||||
|
@ -668,36 +668,28 @@ function ModDamage( out int damage,
|
|||||||
float headshotLevel,
|
float headshotLevel,
|
||||||
KFPlayerReplicationInfo KFPRI,
|
KFPlayerReplicationInfo KFPRI,
|
||||||
optional float lockonTime){
|
optional float lockonTime){
|
||||||
local NicePlayerController nicePlayer;
|
local NicePlayerController nicePlayer;
|
||||||
local NiceMonster niceZed;
|
local bool hasGiantSlayer;
|
||||||
local bool hasThinOut;
|
local int bonusDamageStacks;
|
||||||
local bool isRelated;
|
if(KFPRI == none || KFPRI.ClientVeteranSkill == none) return;
|
||||||
local float maxDistance;
|
// Add perked damage
|
||||||
if(KFPRI == none || KFPRI.ClientVeteranSkill == none) return;
|
damage = KFPRI.ClientVeteranSkill.Static.AddDamage( KFPRI, self,
|
||||||
// Add perked damage
|
KFPawn(instigatedBy),
|
||||||
damage = KFPRI.ClientVeteranSkill.Static.AddDamage( KFPRI, self,
|
damage, damageType);
|
||||||
KFPawn(instigatedBy),
|
// Skill bonuses
|
||||||
damage, damageType);
|
if(instigatedBy == none)
|
||||||
// Skill bonuses
|
return;
|
||||||
if(nicePlayer == none || instigatedBy == none)
|
nicePlayer = NicePlayerController(instigatedBy.controller);
|
||||||
return;
|
if(nicePlayer == none)
|
||||||
hasThinOut = class'NiceVeterancyTypes'.static.hasSkill(nicePlayer,
|
return;
|
||||||
class'NiceSkillCommandoThinOut');
|
hasGiantSlayer = class'NiceVeterancyTypes'.static.hasSkill(nicePlayer,
|
||||||
if(!hasThinOut)
|
class'NiceSkillCommandoGiantSlayer');
|
||||||
return;
|
if(!hasGiantSlayer)
|
||||||
maxDistance = class'NiceSkillCommandoThinOut'.default.maxDistance;
|
return;
|
||||||
foreach instigatedBy.RadiusActors(class'NiceMonster', niceZed, maxDistance){
|
bonusDamageStacks =
|
||||||
if(!nicePlayer.CanSee(niceZed)) continue;
|
int(health / class'NiceSkillCommandoGiantSlayer'.default.healthStep);
|
||||||
if(niceZed == none || niceZed == self) continue;
|
damage *= 1.0f + bonusDamageStacks *
|
||||||
if(niceZed.health <= 0) continue;
|
class'NiceSkillCommandoGiantSlayer'.default.bonusDamageMult;
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
function ModRegularDamage( out int damage,
|
function ModRegularDamage( out int damage,
|
||||||
Pawn instigatedBy,
|
Pawn instigatedBy,
|
||||||
@ -945,8 +937,10 @@ function DealDecapDamage( int damage,
|
|||||||
damageType, headshotLevel, KFPRI, lockonTime);
|
damageType, headshotLevel, KFPRI, lockonTime);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
decapDmg = HealthMax * GetDecapDamageModifier( damageType, nicePlayer,
|
{
|
||||||
KFPRI);
|
decapDmg = Ceil(HealthMax * GetDecapDamageModifier( damageType,
|
||||||
|
nicePlayer, KFPRI));
|
||||||
|
}
|
||||||
DealBodyDamage( decapDmg, instigatedBy, hitLocation, momentum, damageType,
|
DealBodyDamage( decapDmg, instigatedBy, hitLocation, momentum, damageType,
|
||||||
headshotLevel, KFPRI, lockonTime);
|
headshotLevel, KFPRI, lockonTime);
|
||||||
if(class'NiceVeterancyTypes'.static.
|
if(class'NiceVeterancyTypes'.static.
|
||||||
@ -1057,7 +1051,9 @@ function DealBodyDamage(int damage,
|
|||||||
// Reduce health
|
// Reduce health
|
||||||
Health -= actualDamage;
|
Health -= actualDamage;
|
||||||
if(IsFinisher(damage, damageType, nicePlayer))
|
if(IsFinisher(damage, damageType, nicePlayer))
|
||||||
|
{
|
||||||
Health -= actualDamage;
|
Health -= actualDamage;
|
||||||
|
}
|
||||||
// Update location
|
// Update location
|
||||||
if(hitLocation == vect(0,0,0))
|
if(hitLocation == vect(0,0,0))
|
||||||
hitLocation = Location;
|
hitLocation = Location;
|
||||||
@ -1771,7 +1767,7 @@ simulated function RemoveHead(){
|
|||||||
// No more raspy breathin'...cuz he has no throat or mouth :S
|
// No more raspy breathin'...cuz he has no throat or mouth :S
|
||||||
AmbientSound = MiscSound;
|
AmbientSound = MiscSound;
|
||||||
if(Health > 0)
|
if(Health > 0)
|
||||||
BleedOutTime = Level.TimeSeconds + BleedOutDuration;
|
BleedOutTime = Level.TimeSeconds + BleedOutDuration;
|
||||||
if(MeleeAnims[1] == 'Claw3')
|
if(MeleeAnims[1] == 'Claw3')
|
||||||
MeleeAnims[1] = 'Claw1';
|
MeleeAnims[1] = 'Claw1';
|
||||||
if(MeleeAnims[2] == 'Claw3')
|
if(MeleeAnims[2] == 'Claw3')
|
||||||
|
Loading…
Reference in New Issue
Block a user