upload
This commit is contained in:
parent
47731ae0b8
commit
df19937a54
@ -1052,12 +1052,12 @@ function ReceiveProjectileWarning(Projectile Proj);
|
|||||||
* =====================================================
|
* =====================================================
|
||||||
*/
|
*/
|
||||||
|
|
||||||
exec function SwitchToBestWeapon(optional bool bForceNewWeapon)
|
exec function SwitchToBestWeapon(optional bool bForceNewWeapon, optional bool check_9mm_logic = false)
|
||||||
{
|
{
|
||||||
if ( Pawn == None || Pawn.InvManager == None )
|
if ( Pawn == None || Pawn.InvManager == None )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Pawn.InvManager.SwitchToBestWeapon(bForceNewWeapon);
|
Pawn.InvManager.SwitchToBestWeapon(bForceNewWeapon, check_9mm_logic);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* epic ===============================================
|
/* epic ===============================================
|
||||||
@ -1070,7 +1070,11 @@ exec function SwitchToBestWeapon(optional bool bForceNewWeapon)
|
|||||||
*/
|
*/
|
||||||
reliable client function ClientSwitchToBestWeapon(optional bool bForceNewWeapon)
|
reliable client function ClientSwitchToBestWeapon(optional bool bForceNewWeapon)
|
||||||
{
|
{
|
||||||
SwitchToBestWeapon(bForceNewWeapon);
|
local bool check_9mm_logic;
|
||||||
|
|
||||||
|
check_9mm_logic = true;
|
||||||
|
|
||||||
|
SwitchToBestWeapon(bForceNewWeapon, check_9mm_logic);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* epic ===============================================
|
/* epic ===============================================
|
||||||
|
@ -386,7 +386,7 @@ simulated function float GetWeaponRatingFor( Weapon W )
|
|||||||
/**
|
/**
|
||||||
* returns the best weapon for this Pawn in loadout
|
* returns the best weapon for this Pawn in loadout
|
||||||
*/
|
*/
|
||||||
simulated function Weapon GetBestWeapon( optional bool bForceADifferentWeapon )
|
simulated function Weapon GetBestWeapon( optional bool bForceADifferentWeapon, optional bool allow9mm )
|
||||||
{
|
{
|
||||||
local Weapon W, BestWeapon;
|
local Weapon W, BestWeapon;
|
||||||
local float Rating, BestRating;
|
local float Rating, BestRating;
|
||||||
@ -419,7 +419,7 @@ simulated function Weapon GetBestWeapon( optional bool bForceADifferentWeapon )
|
|||||||
* Switch to best weapon available in loadout
|
* Switch to best weapon available in loadout
|
||||||
* Network: LocalPlayer
|
* Network: LocalPlayer
|
||||||
*/
|
*/
|
||||||
simulated function SwitchToBestWeapon( optional bool bForceADifferentWeapon )
|
simulated function SwitchToBestWeapon( optional bool bForceADifferentWeapon, optional bool check_9mm_logic = false )
|
||||||
{
|
{
|
||||||
local Weapon BestWeapon;
|
local Weapon BestWeapon;
|
||||||
|
|
||||||
|
@ -1385,11 +1385,13 @@ simulated final native function ShowMaterialSection(int MaterialID, bool bShow,
|
|||||||
* @param StartTime (optional) What time to start the animation at
|
* @param StartTime (optional) What time to start the animation at
|
||||||
* @param bPlayBackwards (optional) Play this animation backwards
|
* @param bPlayBackwards (optional) Play this animation backwards
|
||||||
*/
|
*/
|
||||||
function PlayAnim(name AnimName, optional float Duration, optional bool bLoop, optional bool bRestartIfAlreadyPlaying = true, optional float StartTime=0.0f, optional bool bPlayBackwards=false)
|
function bool PlayAnim(name AnimName, optional float Duration, optional bool bLoop, optional bool bRestartIfAlreadyPlaying = true, optional float StartTime=0.0f, optional bool bPlayBackwards=false)
|
||||||
{
|
{
|
||||||
local AnimNodeSequence AnimNode;
|
local AnimNodeSequence AnimNode;
|
||||||
local float DesiredRate;
|
local float DesiredRate;
|
||||||
|
local bool bIsAnimPlayed;
|
||||||
|
|
||||||
|
bIsAnimPlayed = false;
|
||||||
AnimNode = AnimNodeSequence(Animations);
|
AnimNode = AnimNodeSequence(Animations);
|
||||||
if (AnimNode == None && Animations.IsA('AnimTree'))
|
if (AnimNode == None && Animations.IsA('AnimTree'))
|
||||||
{
|
{
|
||||||
@ -1408,6 +1410,8 @@ function PlayAnim(name AnimName, optional float Duration, optional bool bLoop, o
|
|||||||
if (bRestartIfAlreadyPlaying || !AnimNode.bPlaying)
|
if (bRestartIfAlreadyPlaying || !AnimNode.bPlaying)
|
||||||
{
|
{
|
||||||
AnimNode.PlayAnim(bLoop, DesiredRate, StartTime);
|
AnimNode.PlayAnim(bLoop, DesiredRate, StartTime);
|
||||||
|
|
||||||
|
bIsAnimPlayed = true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -1423,9 +1427,13 @@ function PlayAnim(name AnimName, optional float Duration, optional bool bLoop, o
|
|||||||
DesiredRate = (Duration > 0.0) ? (AnimNode.AnimSeq.SequenceLength / (Duration * AnimNode.AnimSeq.RateScale)) : 1.0;
|
DesiredRate = (Duration > 0.0) ? (AnimNode.AnimSeq.SequenceLength / (Duration * AnimNode.AnimSeq.RateScale)) : 1.0;
|
||||||
DesiredRate = (bPlayBackwards) ? -DesiredRate : DesiredRate;
|
DesiredRate = (bPlayBackwards) ? -DesiredRate : DesiredRate;
|
||||||
AnimNode.PlayAnim(bLoop, DesiredRate, StartTime);
|
AnimNode.PlayAnim(bLoop, DesiredRate, StartTime);
|
||||||
|
|
||||||
|
bIsAnimPlayed = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return bIsAnimPlayed;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** simple generic case animation stopper
|
/** simple generic case animation stopper
|
||||||
|
@ -42,7 +42,8 @@ struct AARAward
|
|||||||
var array<AARAward> TeamAwardList;
|
var array<AARAward> TeamAwardList;
|
||||||
|
|
||||||
enum ETeamAwards
|
enum ETeamAwards
|
||||||
{
|
{
|
||||||
|
ETA_WeaponMaster,
|
||||||
ETA_ZedStomper,
|
ETA_ZedStomper,
|
||||||
ETA_MedicineMaster,
|
ETA_MedicineMaster,
|
||||||
ETA_ZedSlayer,
|
ETA_ZedSlayer,
|
||||||
@ -1103,6 +1104,9 @@ static function GetTeamAward(ETeamAwards AwardIndex, out AARAward TempAwardObjec
|
|||||||
case ETA_ZedStomper:
|
case ETA_ZedStomper:
|
||||||
Give_ZedStomper(TempAwardObject, KFPCArray);
|
Give_ZedStomper(TempAwardObject, KFPCArray);
|
||||||
break;
|
break;
|
||||||
|
case ETA_WeaponMaster:
|
||||||
|
GiveWeaponMaster(TempAwardObject, KFPCArray);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1416,6 +1420,27 @@ static function Give_ZedStomper(out AARAward outAward, const out Array<KFPlayerC
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static function GiveWeaponMaster(out AARAward outAward, const out Array<KFPlayerController> KFPCArray)
|
||||||
|
{
|
||||||
|
local int i;
|
||||||
|
local KFPlayerController_WeeklySurvival KFPC_WS;
|
||||||
|
|
||||||
|
for(i = 0; i < KFPCArray.Length; i++)
|
||||||
|
{
|
||||||
|
KFPC_WS = KFPlayerController_WeeklySurvival(KFPCArray[i]);
|
||||||
|
if (KFPC_WS != none)
|
||||||
|
{
|
||||||
|
if (KFPC_WS.GunGameData.GiveWeaponMaster)
|
||||||
|
{
|
||||||
|
outAward.PRI = KFPCArray[i].PlayerReplicationInfo;
|
||||||
|
outAward.DisplayValue = 1;
|
||||||
|
`log(KFPCArray[i].PlayerReplicationInfo.PlayerName @"Weapon Master", class'EphemeralMatchStats'.default.bShowMatchStatsLogging);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function ReceiveAwardInfo(byte AwardID, PlayerReplicationInfo PRI, int Value)
|
function ReceiveAwardInfo(byte AwardID, PlayerReplicationInfo PRI, int Value)
|
||||||
{
|
{
|
||||||
TeamAwardList[AwardID].PRI = PRI;
|
TeamAwardList[AwardID].PRI = PRI;
|
||||||
@ -1435,6 +1460,7 @@ DefaultProperties
|
|||||||
TeamAwardList(ETA_HeadPopper)=(TitleIdentifier="HeadPopper",ValueIdentifier="HeadPopperValue",IconPath="UI_Award_Team.UI_Award_Team-Headshots")
|
TeamAwardList(ETA_HeadPopper)=(TitleIdentifier="HeadPopper",ValueIdentifier="HeadPopperValue",IconPath="UI_Award_Team.UI_Award_Team-Headshots")
|
||||||
TeamAwardList(ETA_Dominator)=(TitleIdentifier="Dominator",ValueIdentifier="DominatorValue",IconPath="UI_Award_Team.UI_Award_Team-BossKO")
|
TeamAwardList(ETA_Dominator)=(TitleIdentifier="Dominator",ValueIdentifier="DominatorValue",IconPath="UI_Award_Team.UI_Award_Team-BossKO")
|
||||||
TeamAwardList(ETA_ZedStomper)=(TitleIdentifier="ZedStomper",ValueIdentifier="ZedStomperValue",IconPath="UI_Award_Team.UI_Award_Team-ZedStomper")
|
TeamAwardList(ETA_ZedStomper)=(TitleIdentifier="ZedStomper",ValueIdentifier="ZedStomperValue",IconPath="UI_Award_Team.UI_Award_Team-ZedStomper")
|
||||||
|
TeamAwardList(ETA_WeaponMaster)=(TitleIdentifier="WeaponMaster",ValueIdentifier="WeaponMasterValue",IconPath="UI_Award_Team.UI_Award_Team_GunMode")
|
||||||
//zed awards
|
//zed awards
|
||||||
TeamAwardList(ETA_Carnage)=(TitleIdentifier="Carnage",ValueIdentifier="CarnageValue",IconPath="ui_award_zeds.UI_Award_ZED_RawDmg")
|
TeamAwardList(ETA_Carnage)=(TitleIdentifier="Carnage",ValueIdentifier="CarnageValue",IconPath="ui_award_zeds.UI_Award_ZED_RawDmg")
|
||||||
TeamAwardList(ETA_Closer)=(TitleIdentifier="Closer",ValueIdentifier="CloserValue",IconPath="ui_award_zeds.UI_Award_ZED_Kills")
|
TeamAwardList(ETA_Closer)=(TitleIdentifier="Closer",ValueIdentifier="CloserValue",IconPath="ui_award_zeds.UI_Award_ZED_Kills")
|
||||||
|
@ -25,7 +25,7 @@ function Init(KFPawn P, EAfflictionType Type, KFPerk InstigatorPerk)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** */
|
/** */
|
||||||
function Activate()
|
function Activate(optional class<KFDamageType> DamageType = none)
|
||||||
{
|
{
|
||||||
if ( !bIsActive )
|
if ( !bIsActive )
|
||||||
{
|
{
|
||||||
|
@ -57,7 +57,7 @@ function Init(KFPawn P, EAfflictionType Type, KFPerk InstigatorPerk)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** */
|
/** */
|
||||||
function Accrue(float InPower)
|
function Accrue(float InPower, optional class<KFDamageType> DamageType = none)
|
||||||
{
|
{
|
||||||
// total immunity during cooldown
|
// total immunity during cooldown
|
||||||
if ( LastActivationTime > 0 && `TimeSinceEx(PawnOwner, LastActivationTime) < Cooldown )
|
if ( LastActivationTime > 0 && `TimeSinceEx(PawnOwner, LastActivationTime) < Cooldown )
|
||||||
@ -80,14 +80,14 @@ function Accrue(float InPower)
|
|||||||
CurrentStrength = fClamp(CurrentStrength + InPower, InPower, INCAP_THRESHOLD);
|
CurrentStrength = fClamp(CurrentStrength + InPower, InPower, INCAP_THRESHOLD);
|
||||||
if ( CurrentStrength >= INCAP_THRESHOLD )
|
if ( CurrentStrength >= INCAP_THRESHOLD )
|
||||||
{
|
{
|
||||||
Activate();
|
Activate(DamageType);
|
||||||
}
|
}
|
||||||
|
|
||||||
`log(Class.Name@"Added="$InPower@"NewStrength="$CurrentStrength, bDebug);
|
`log(Class.Name@"Added="$InPower@"NewStrength="$CurrentStrength, bDebug);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** */
|
/** */
|
||||||
function Activate()
|
function Activate(optional class<KFDamageType> DamageType = none)
|
||||||
{
|
{
|
||||||
if ( SpecialMove != SM_None )
|
if ( SpecialMove != SM_None )
|
||||||
{
|
{
|
||||||
@ -159,6 +159,11 @@ function float GetAttackSpeedModifier()
|
|||||||
return 1.f;
|
return 1.f;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function float GetDamageTakenModifier()
|
||||||
|
{
|
||||||
|
return 0.f;
|
||||||
|
}
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
//bDebug=true
|
//bDebug=true
|
||||||
|
@ -83,6 +83,8 @@ enum EAfflictionType
|
|||||||
AF_Freeze,
|
AF_Freeze,
|
||||||
AF_Microwave,
|
AF_Microwave,
|
||||||
AF_Bleed,
|
AF_Bleed,
|
||||||
|
AF_BigHead,
|
||||||
|
AF_Shrink,
|
||||||
|
|
||||||
AF_Custom1,
|
AF_Custom1,
|
||||||
AF_Custom2,
|
AF_Custom2,
|
||||||
@ -258,7 +260,7 @@ protected function ProcessSpecialMoveAfflictions(KFPerk InstigatorPerk, vector H
|
|||||||
// increment affliction power
|
// increment affliction power
|
||||||
if (KnockdownPower > 0 && CanDoSpecialmove(SM_Knockdown))
|
if (KnockdownPower > 0 && CanDoSpecialmove(SM_Knockdown))
|
||||||
{
|
{
|
||||||
AccrueAffliction(AF_Knockdown, KnockdownPower, BodyPart, InstigatorPerk);
|
AccrueAffliction(AF_Knockdown, KnockdownPower, BodyPart, InstigatorPerk, DamageType);
|
||||||
}
|
}
|
||||||
if (StunPower > 0 && CanDoSpecialmove(SM_Stunned))
|
if (StunPower > 0 && CanDoSpecialmove(SM_Stunned))
|
||||||
{
|
{
|
||||||
@ -342,26 +344,32 @@ protected function ProcessHitReactionAfflictions(KFPerk InstigatorPerk, class<KF
|
|||||||
protected function ProcessEffectBasedAfflictions(KFPerk InstigatorPerk, class<KFDamageType> DamageType, Actor DamageCauser)
|
protected function ProcessEffectBasedAfflictions(KFPerk InstigatorPerk, class<KFDamageType> DamageType, Actor DamageCauser)
|
||||||
{
|
{
|
||||||
local KFWeapon DamageWeapon;
|
local KFWeapon DamageWeapon;
|
||||||
local float BurnPower, EMPPower, PoisonPower, MicrowavePower, BleedPower;
|
local float BurnPower, EMPPower, PoisonPower, MicrowavePower, BleedPower, BigHeadPower, ShrinkPower;
|
||||||
local KFInterface_DamageCauser KFDmgCauser;
|
local KFInterface_DamageCauser KFDmgCauser;
|
||||||
|
|
||||||
// Get upgraded affliction power
|
// Get upgraded affliction power
|
||||||
DamageWeapon = class'KFPerk'.static.GetWeaponFromDamageCauser(DamageCauser);
|
DamageWeapon = class'KFPerk'.static.GetWeaponFromDamageCauser(DamageCauser);
|
||||||
if (DamageWeapon != none)
|
if (DamageWeapon != none)
|
||||||
{
|
{
|
||||||
BurnPower = DamageWeapon.GetUpgradedAfflictionPower(AF_FirePanic, DamageType.default.BurnPower);
|
BurnPower = DamageWeapon.GetUpgradedAfflictionPower(AF_FirePanic, DamageType.default.BurnPower);
|
||||||
EMPPower = DamageWeapon.GetUpgradedAfflictionPower(AF_EMP, DamageType.default.EMPPower);
|
EMPPower = DamageWeapon.GetUpgradedAfflictionPower(AF_EMP, DamageType.default.EMPPower);
|
||||||
PoisonPower = DamageWeapon.GetUpgradedAfflictionPower(AF_Poison, DamageType.default.PoisonPower);
|
PoisonPower = DamageWeapon.GetUpgradedAfflictionPower(AF_Poison, DamageType.default.PoisonPower);
|
||||||
MicrowavePower = DamageWeapon.GetUpgradedAfflictionPower(AF_Microwave, DamageType.default.MicrowavePower);
|
MicrowavePower = DamageWeapon.GetUpgradedAfflictionPower(AF_Microwave, DamageType.default.MicrowavePower);
|
||||||
BleedPower = DamageWeapon.GetUpgradedAfflictionPower(AF_Bleed, DamageType.default.BleedPower);
|
BleedPower = DamageWeapon.GetUpgradedAfflictionPower(AF_Bleed, DamageType.default.BleedPower);
|
||||||
|
ShrinkPower = DamageWeapon.GetUpgradedAfflictionPower(AF_Shrink, DamageType.default.ShrinkPower);
|
||||||
|
|
||||||
|
// No modifiers applied to Big Heads
|
||||||
|
BigHeadPower = DamageType.default.BigHeadPower;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
BurnPower = DamageType.default.BurnPower;
|
BurnPower = DamageType.default.BurnPower;
|
||||||
EMPPower = DamageType.default.EMPPower;
|
EMPPower = DamageType.default.EMPPower;
|
||||||
PoisonPower = DamageType.default.PoisonPower;
|
PoisonPower = DamageType.default.PoisonPower;
|
||||||
MicrowavePower = DamageType.default.MicrowavePower;
|
MicrowavePower = DamageType.default.MicrowavePower;
|
||||||
BleedPower = DamageType.default.BleedPower;
|
BleedPower = DamageType.default.BleedPower;
|
||||||
|
BigHeadPower = DamageType.default.BigHeadPower;
|
||||||
|
ShrinkPower = DamageType.default.ShrinkPower;
|
||||||
}
|
}
|
||||||
|
|
||||||
KFDmgCauser = KFInterface_DamageCauser(DamageCauser);
|
KFDmgCauser = KFInterface_DamageCauser(DamageCauser);
|
||||||
@ -397,7 +405,7 @@ protected function ProcessEffectBasedAfflictions(KFPerk InstigatorPerk, class<KF
|
|||||||
|
|
||||||
if (BurnPower > 0)
|
if (BurnPower > 0)
|
||||||
{
|
{
|
||||||
AccrueAffliction(AF_FirePanic, BurnPower);
|
AccrueAffliction(AF_FirePanic, BurnPower, , InstigatorPerk, DamageType);
|
||||||
}
|
}
|
||||||
if (PoisonPower > 0 || DamageType.static.AlwaysPoisons())
|
if (PoisonPower > 0 || DamageType.static.AlwaysPoisons())
|
||||||
{
|
{
|
||||||
@ -411,6 +419,14 @@ protected function ProcessEffectBasedAfflictions(KFPerk InstigatorPerk, class<KF
|
|||||||
{
|
{
|
||||||
AccrueAffliction(AF_Bleed, BleedPower);
|
AccrueAffliction(AF_Bleed, BleedPower);
|
||||||
}
|
}
|
||||||
|
if (BigHeadPower > 0)
|
||||||
|
{
|
||||||
|
AccrueAffliction(AF_BigHead, BigHeadPower);
|
||||||
|
}
|
||||||
|
if (ShrinkPower > 0)
|
||||||
|
{
|
||||||
|
AccrueAffliction(AF_Shrink, ShrinkPower,,InstigatorPerk);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -422,7 +438,7 @@ protected function ProcessEffectBasedAfflictions(KFPerk InstigatorPerk, class<KF
|
|||||||
* Adds StackedPower
|
* Adds StackedPower
|
||||||
* @return true if the affliction effect should be applied
|
* @return true if the affliction effect should be applied
|
||||||
*/
|
*/
|
||||||
function AccrueAffliction(EAfflictionType Type, float InPower, optional EHitZoneBodyPart BodyPart, optional KFPerk InstigatorPerk)
|
function AccrueAffliction(EAfflictionType Type, float InPower, optional EHitZoneBodyPart BodyPart, optional KFPerk InstigatorPerk, optional class<KFDamageType> DamageType = none)
|
||||||
{
|
{
|
||||||
if ( InPower <= 0 || Type >= IncapSettings.Length )
|
if ( InPower <= 0 || Type >= IncapSettings.Length )
|
||||||
{
|
{
|
||||||
@ -453,7 +469,7 @@ function AccrueAffliction(EAfflictionType Type, float InPower, optional EHitZone
|
|||||||
|
|
||||||
if ( InPower > 0 )
|
if ( InPower > 0 )
|
||||||
{
|
{
|
||||||
Afflictions[Type].Accrue(InPower);
|
Afflictions[Type].Accrue(InPower, DamageType);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -626,6 +642,11 @@ function float GetAfflictionDamageModifier()
|
|||||||
{
|
{
|
||||||
if (Afflictions[i] != none)
|
if (Afflictions[i] != none)
|
||||||
{
|
{
|
||||||
|
if (i == AF_BigHead)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
DamageModifier += Afflictions[i].GetDamageModifier();
|
DamageModifier += Afflictions[i].GetDamageModifier();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -633,6 +654,23 @@ function float GetAfflictionDamageModifier()
|
|||||||
return DamageModifier;
|
return DamageModifier;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function float GetAfflictionDamageTakenModifier()
|
||||||
|
{
|
||||||
|
local float DamageModifier;
|
||||||
|
local int i;
|
||||||
|
|
||||||
|
DamageModifier = 1.f;
|
||||||
|
for (i = 0; i < Afflictions.Length; ++i)
|
||||||
|
{
|
||||||
|
if (Afflictions[i] != none)
|
||||||
|
{
|
||||||
|
DamageModifier += Afflictions[i].GetDamageTakenModifier();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return DamageModifier;
|
||||||
|
}
|
||||||
|
|
||||||
/** Accessor to get known affliction speed modifier - Multiplicative from all mods */
|
/** Accessor to get known affliction speed modifier - Multiplicative from all mods */
|
||||||
function float GetAfflictionSpeedModifier()
|
function float GetAfflictionSpeedModifier()
|
||||||
{
|
{
|
||||||
@ -668,6 +706,25 @@ function float GetAfflictionAttackSpeedModifier()
|
|||||||
return SpeedModifier;
|
return SpeedModifier;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function float GetBigHeadAfflictionDamageModifier()
|
||||||
|
{
|
||||||
|
local float DamageModifier;
|
||||||
|
|
||||||
|
DamageModifier = 0.f;
|
||||||
|
|
||||||
|
if (Afflictions.Length > AF_BigHead)
|
||||||
|
{
|
||||||
|
if (Afflictions[AF_BigHead] != none)
|
||||||
|
{
|
||||||
|
DamageModifier = Afflictions[AF_BigHead].GetDamageModifier();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return DamageModifier;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/** Turns off all affliction sounds / effects */
|
/** Turns off all affliction sounds / effects */
|
||||||
simulated function Shutdown()
|
simulated function Shutdown()
|
||||||
{
|
{
|
||||||
@ -745,4 +802,6 @@ defaultproperties
|
|||||||
AfflictionClasses(AF_Knockdown)=class'KFAffliction_Knockdown'
|
AfflictionClasses(AF_Knockdown)=class'KFAffliction_Knockdown'
|
||||||
AfflictionClasses(AF_Snare)=class'KFAffliction_Snare'
|
AfflictionClasses(AF_Snare)=class'KFAffliction_Snare'
|
||||||
AfflictionClasses(AF_Bleed)=class'KFAffliction_Bleed'
|
AfflictionClasses(AF_Bleed)=class'KFAffliction_Bleed'
|
||||||
|
AfflictionClasses(AF_BigHead)=class'KFAffliction_BigHead'
|
||||||
|
AfflictionClasses(AF_Shrink)=class'KFAffliction_Shrink'
|
||||||
}
|
}
|
||||||
|
136
KFGame/Classes/KFAffliction_BigHead.uc
Normal file
136
KFGame/Classes/KFAffliction_BigHead.uc
Normal file
@ -0,0 +1,136 @@
|
|||||||
|
//=============================================================================
|
||||||
|
// KFAffliction_BigHead
|
||||||
|
//=============================================================================
|
||||||
|
// Affliction for cranial popper
|
||||||
|
//=============================================================================
|
||||||
|
// Killing Floor 2
|
||||||
|
// Copyright (C) 2022 Tripwire Interactive LLC
|
||||||
|
//=============================================================================
|
||||||
|
class KFAffliction_BigHead extends KFAfflictionAdvanced;
|
||||||
|
|
||||||
|
var() float EffectAppliedByStack;
|
||||||
|
var() float ApplyEffectVel;
|
||||||
|
var() float RemoveEffectVel;
|
||||||
|
var() array<float> StackDamageExplosion;
|
||||||
|
var() byte MaxStack;
|
||||||
|
var() byte MaxStackBobbleHead;
|
||||||
|
|
||||||
|
var transient byte CurrentStack;
|
||||||
|
var transient float CurrentEffectApplied;
|
||||||
|
var transient bool bIsBobbleHeadMode;
|
||||||
|
var transient bool bIsShrunkenHeads;
|
||||||
|
var transient byte CurrentMaxStack;
|
||||||
|
|
||||||
|
function Init(KFPawn P, EAfflictionType Type, KFPerk InstigatorPerk)
|
||||||
|
{
|
||||||
|
local KFGameReplicationInfo KFGRI;
|
||||||
|
local int EndlessWeeklyWaveIdx;
|
||||||
|
|
||||||
|
Super.Init(P, Type, InstigatorPerk);
|
||||||
|
|
||||||
|
KFGRI = KFGameReplicationInfo(P.WorldInfo.GRI);
|
||||||
|
|
||||||
|
if (KFGRI != none)
|
||||||
|
{
|
||||||
|
bIsBobbleHeadMode = (KFGRI.bIsWeeklyMode && KFGRI.CurrentWeeklyIndex == 3) || (KFGRI.IsWeeklyWave(EndlessWeeklyWaveIdx) && EndlessWeeklyWaveIdx == 3);
|
||||||
|
bIsShrunkenHeads = KFGRI.bIsWeeklyMode && KFGRI.CurrentWeeklyIndex == 15;
|
||||||
|
|
||||||
|
if (bIsBobbleHeadMode)
|
||||||
|
{
|
||||||
|
MaxStack = MaxStackBobbleHead;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
CurrentMaxStack = bIsBobbleHeadMode ? MaxStackBobbleHead : MaxStack;
|
||||||
|
}
|
||||||
|
|
||||||
|
function Activate(optional class<KFDamageType> DamageType = none)
|
||||||
|
{
|
||||||
|
if (CurrentStack < CurrentMaxStack)
|
||||||
|
{
|
||||||
|
Super.Activate();
|
||||||
|
|
||||||
|
if (!bIsBobbleHeadMode && !bIsShrunkenHeads)
|
||||||
|
{
|
||||||
|
++CurrentStack;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
event Tick(float DeltaTime)
|
||||||
|
{
|
||||||
|
local float Target;
|
||||||
|
|
||||||
|
if ( PawnOwner.bPlayedDeath )
|
||||||
|
{
|
||||||
|
CurrentStrength= 0.0f;
|
||||||
|
super.Deactivate();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bIsBobbleHeadMode || bIsShrunkenHeads)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Target = CurrentStack * EffectAppliedByStack;
|
||||||
|
|
||||||
|
if (CurrentEffectApplied != Target)
|
||||||
|
{
|
||||||
|
if (CurrentEffectApplied < Target)
|
||||||
|
{
|
||||||
|
CurrentEffectApplied = FMin(CurrentEffectApplied + DeltaTime * ApplyEffectVel, Target);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
CurrentEffectApplied = FMax(CurrentEffectApplied - DeltaTime * ApplyEffectVel, 0.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
PawnOwner.IntendedHeadScale = 1 + CurrentEffectApplied;
|
||||||
|
PawnOwner.SetHeadScale(1 + CurrentEffectApplied, PawnOwner.CurrentHeadScale);
|
||||||
|
PawnOwner.bNetDirty = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (CurrentStrength <= 0.0f)
|
||||||
|
{
|
||||||
|
CurrentStack = 0;
|
||||||
|
CurrentStrength = 0.1f;
|
||||||
|
|
||||||
|
if (CurrentEffectApplied <= 0.0f)
|
||||||
|
{
|
||||||
|
CurrentStrength = 0.0f;
|
||||||
|
super.Deactivate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Accessor to get known affliction Damage modifier */
|
||||||
|
function float GetDamageModifier()
|
||||||
|
{
|
||||||
|
local float damage;
|
||||||
|
|
||||||
|
damage = bIsBobbleHeadMode ? StackDamageExplosion[MaxStackBobbleHead] : StackDamageExplosion[CurrentStack];
|
||||||
|
|
||||||
|
CurrentStack = 0;
|
||||||
|
|
||||||
|
return damage;
|
||||||
|
}
|
||||||
|
|
||||||
|
defaultproperties
|
||||||
|
{
|
||||||
|
DissipationRate=10
|
||||||
|
bNeedsTick=true
|
||||||
|
|
||||||
|
MaxStack=3
|
||||||
|
MaxStackBobbleHead=1
|
||||||
|
EffectAppliedByStack=0.3f
|
||||||
|
|
||||||
|
ApplyEffectVel= 1.0f // % per second
|
||||||
|
RemoveEffectVel= 1.0f // % per second
|
||||||
|
|
||||||
|
CurrentStack=0
|
||||||
|
CurrentEffectApplied=0.0f
|
||||||
|
|
||||||
|
StackDamageExplosion={(0.0f, 150.0f, 300.0f, 500.0f, 0, 0)};
|
||||||
|
|
||||||
|
}
|
@ -115,7 +115,7 @@ function float GetAttackSpeedModifier()
|
|||||||
return 1.f;
|
return 1.f;
|
||||||
}
|
}
|
||||||
|
|
||||||
function Accrue(float InPower)
|
function Accrue(float InPower, optional class<KFDamageType> DamageType = none)
|
||||||
{
|
{
|
||||||
super.Accrue(InPower);
|
super.Accrue(InPower);
|
||||||
if (PawnOwner != none)
|
if (PawnOwner != none)
|
||||||
|
@ -25,7 +25,7 @@ var protected AkEvent OnEMPSound;
|
|||||||
/** Sound to play when this pawn stops being EMP'd */
|
/** Sound to play when this pawn stops being EMP'd */
|
||||||
var protected AkEvent OnEMPEndSound;
|
var protected AkEvent OnEMPEndSound;
|
||||||
|
|
||||||
function Activate()
|
function Activate(optional class<KFDamageType> DamageType = none)
|
||||||
{
|
{
|
||||||
Super.Activate();
|
Super.Activate();
|
||||||
SetEMPPanicked(true);
|
SetEMPPanicked(true);
|
||||||
|
@ -20,7 +20,7 @@ function Init(KFPawn P, EAfflictionType Type, KFPerk InstigatorPerk)
|
|||||||
DisruptCooldown = P.IncapSettings[Type].ChildAfflictionCooldown;
|
DisruptCooldown = P.IncapSettings[Type].ChildAfflictionCooldown;
|
||||||
}
|
}
|
||||||
|
|
||||||
function Accrue(float InPower)
|
function Accrue(float InPower, optional class<KFDamageType> DamageType = none)
|
||||||
{
|
{
|
||||||
Super.Accrue(InPower);
|
Super.Accrue(InPower);
|
||||||
|
|
||||||
|
@ -28,6 +28,8 @@ var protected AkEvent OnFireSound;
|
|||||||
/** Sound to play when this pawn stops being on fire */
|
/** Sound to play when this pawn stops being on fire */
|
||||||
var protected AkEvent OnFireEndSound;
|
var protected AkEvent OnFireEndSound;
|
||||||
|
|
||||||
|
var transient KFPlayerController Instigator;
|
||||||
|
|
||||||
function Init(KFPawn P, EAfflictionType Type, KFPerk InstigatorPerk)
|
function Init(KFPawn P, EAfflictionType Type, KFPerk InstigatorPerk)
|
||||||
{
|
{
|
||||||
Super.Init(P, Type, InstigatorPerk);
|
Super.Init(P, Type, InstigatorPerk);
|
||||||
@ -35,9 +37,14 @@ function Init(KFPawn P, EAfflictionType Type, KFPerk InstigatorPerk)
|
|||||||
// copy over some settings from the affliction handler that we'll need
|
// copy over some settings from the affliction handler that we'll need
|
||||||
FireFullyCharredDuration = P.AfflictionHandler.FireFullyCharredDuration;
|
FireFullyCharredDuration = P.AfflictionHandler.FireFullyCharredDuration;
|
||||||
FireCharPercentThreshhold = P.AfflictionHandler.FireCharPercentThreshhold;
|
FireCharPercentThreshhold = P.AfflictionHandler.FireCharPercentThreshhold;
|
||||||
|
|
||||||
|
if (InstigatorPerk != none)
|
||||||
|
{
|
||||||
|
Instigator = InstigatorPerk.OwnerPC;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function Activate()
|
function Activate(optional class<KFDamageType> DamageType = none)
|
||||||
{
|
{
|
||||||
// fire can accrue after death, but cannot trigger panic
|
// fire can accrue after death, but cannot trigger panic
|
||||||
if ( !PawnOwner.bPlayedDeath )
|
if ( !PawnOwner.bPlayedDeath )
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
class KFAffliction_HeavyRecovery extends KFAfflictionBase;
|
class KFAffliction_HeavyRecovery extends KFAfflictionBase;
|
||||||
|
|
||||||
/** */
|
/** */
|
||||||
function Activate()
|
function Activate(optional class<KFDamageType> DamageType = none)
|
||||||
{
|
{
|
||||||
// Attempt to interrupt the special move
|
// Attempt to interrupt the special move
|
||||||
if( PawnOwner.SpecialMove != SM_None )
|
if( PawnOwner.SpecialMove != SM_None )
|
||||||
|
@ -9,9 +9,9 @@
|
|||||||
class KFAffliction_Knockdown extends KFAfflictionBase;
|
class KFAffliction_Knockdown extends KFAfflictionBase;
|
||||||
|
|
||||||
/** */
|
/** */
|
||||||
function Activate()
|
function Activate(optional class<KFDamageType> DamageType = none)
|
||||||
{
|
{
|
||||||
ActivateKnockdown(PawnOwner.HitFxInfo.DamageType,
|
ActivateKnockdown(DamageType,
|
||||||
PawnOwner.HitFxInfo.HitLocation,
|
PawnOwner.HitFxInfo.HitLocation,
|
||||||
PawnOwner.DecodeUnitVector( PawnOwner.HitFxInfo.EncodedHitDirection ),
|
PawnOwner.DecodeUnitVector( PawnOwner.HitFxInfo.EncodedHitDirection ),
|
||||||
PawnOwner.HitFxInfo.HitBoneIndex);
|
PawnOwner.HitFxInfo.HitBoneIndex);
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
class KFAffliction_MediumRecovery extends KFAfflictionBase;
|
class KFAffliction_MediumRecovery extends KFAfflictionBase;
|
||||||
|
|
||||||
/** */
|
/** */
|
||||||
function Activate()
|
function Activate(optional class<KFDamageType> DamageType = none)
|
||||||
{
|
{
|
||||||
// Attempt to interrupt the special move
|
// Attempt to interrupt the special move
|
||||||
if( PawnOwner.SpecialMove != SM_None )
|
if( PawnOwner.SpecialMove != SM_None )
|
||||||
|
@ -30,7 +30,7 @@ var protected AkEvent OnSteamSound;
|
|||||||
/** Sound to play when this pawn stops being on fire */
|
/** Sound to play when this pawn stops being on fire */
|
||||||
var protected AkEvent OnSteamEndSound;
|
var protected AkEvent OnSteamEndSound;
|
||||||
|
|
||||||
function Activate()
|
function Activate(optional class<KFDamageType> DamageType = none)
|
||||||
{
|
{
|
||||||
Super.Activate();
|
Super.Activate();
|
||||||
SetMicrowavePanicked(true);
|
SetMicrowavePanicked(true);
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
//=============================================================================
|
//=============================================================================
|
||||||
class KFAffliction_Poison extends KFAfflictionAdvanced;
|
class KFAffliction_Poison extends KFAfflictionAdvanced;
|
||||||
|
|
||||||
function Activate()
|
function Activate(optional class<KFDamageType> DamageType = none)
|
||||||
{
|
{
|
||||||
Super.Activate();
|
Super.Activate();
|
||||||
SetPoisoned(true);
|
SetPoisoned(true);
|
||||||
|
182
KFGame/Classes/KFAffliction_Shrink.uc
Normal file
182
KFGame/Classes/KFAffliction_Shrink.uc
Normal file
@ -0,0 +1,182 @@
|
|||||||
|
//=============================================================================
|
||||||
|
// KFAffliction_Shrink
|
||||||
|
//=============================================================================
|
||||||
|
//=============================================================================
|
||||||
|
// Killing Floor 2
|
||||||
|
// Copyright (C) 2022 Tripwire Interactive LLC
|
||||||
|
//=============================================================================
|
||||||
|
class KFAffliction_Shrink extends KFAfflictionAdvanced;
|
||||||
|
|
||||||
|
var() float ScaleOnMaxEffect;
|
||||||
|
var() float EffectAppliedByStack;
|
||||||
|
var() float MaxEffectDamageValue;
|
||||||
|
var() float ApplyEffectVel;
|
||||||
|
var() float RemoveEffectVel;
|
||||||
|
var() float StackDamageModifier;
|
||||||
|
var() byte MaxEffect;
|
||||||
|
|
||||||
|
var transient float CurrentEffect;
|
||||||
|
var transient float CurrentEffectApplied;
|
||||||
|
var transient KFPlayerController Instigator;
|
||||||
|
var transient bool bIsTinyTerrorMode;
|
||||||
|
|
||||||
|
var transient bool AlreadyCached;
|
||||||
|
var transient float CachedBodyScaleChangePerSecond;
|
||||||
|
var transient float CachedBodyScale;
|
||||||
|
|
||||||
|
function Init(KFPawn P, EAfflictionType Type, KFPerk InstigatorPerk)
|
||||||
|
{
|
||||||
|
local KFGameReplicationInfo KFGRI;
|
||||||
|
|
||||||
|
Super.Init(P, Type, InstigatorPerk);
|
||||||
|
|
||||||
|
if (InstigatorPerk != none)
|
||||||
|
{
|
||||||
|
Instigator = InstigatorPerk.OwnerPC;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (AlreadyCached == false)
|
||||||
|
{
|
||||||
|
// (see KFPawn_ZedMatriarch.uc)
|
||||||
|
// There are some systems directly calling Init again without letting the Affliction Manager know
|
||||||
|
// That is a hack, but we can't improve it at this stage, so catch that here only once
|
||||||
|
AlreadyCached = true;
|
||||||
|
|
||||||
|
CachedBodyScaleChangePerSecond = P.BodyScaleChangePerSecond;
|
||||||
|
CachedBodyScale = P.Mesh.Scale;
|
||||||
|
}
|
||||||
|
|
||||||
|
KFGRI = KFGameReplicationInfo(P.WorldInfo.GRI);
|
||||||
|
if (KFGRI != none && KFGRI.bIsWeeklyMode)
|
||||||
|
{
|
||||||
|
bIsTinyTerrorMode = KFGRI.CurrentWeeklyIndex == 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function Activate(optional class<KFDamageType> DamageType = none)
|
||||||
|
{
|
||||||
|
local float StackModifier;
|
||||||
|
|
||||||
|
if (bIsTinyTerrorMode)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (CurrentEffect < MaxEffect)
|
||||||
|
{
|
||||||
|
Super.Activate();
|
||||||
|
|
||||||
|
StackModifier = 1.0f;
|
||||||
|
|
||||||
|
if (KFPawn_Monster(PawnOwner) != none)
|
||||||
|
{
|
||||||
|
StackModifier = KFPawn_Monster(PawnOwner).ShrinkEffectModifier;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Allow body to shrink visually faster
|
||||||
|
if (StackModifier >= 1.0f)
|
||||||
|
{
|
||||||
|
PawnOwner.BodyScaleChangePerSecond = CachedBodyScaleChangePerSecond * StackModifier;
|
||||||
|
PawnOwner.bNetDirty = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
CurrentEffect += EffectAppliedByStack * StackModifier;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (CurrentEffectApplied >= MaxEffect)
|
||||||
|
{
|
||||||
|
CurrentEffectApplied = MaxEffect;
|
||||||
|
|
||||||
|
KillOwner();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
event Tick(float DeltaTime)
|
||||||
|
{
|
||||||
|
if ( PawnOwner.bPlayedDeath )
|
||||||
|
{
|
||||||
|
CurrentStrength= 0.0f;
|
||||||
|
super.Deactivate();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (CurrentEffectApplied != CurrentEffect)
|
||||||
|
{
|
||||||
|
if (CurrentEffectApplied < CurrentEffect)
|
||||||
|
{
|
||||||
|
CurrentEffectApplied = FMin(CurrentEffectApplied + DeltaTime * ApplyEffectVel * KFPawn_Monster(PawnOwner).ShrinkEffectModifier, CurrentEffect);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
CurrentEffectApplied = CurrentEffectApplied - DeltaTime * RemoveEffectVel;
|
||||||
|
}
|
||||||
|
|
||||||
|
CurrentEffectApplied = FMax(CurrentEffectApplied, 0.f);
|
||||||
|
CurrentEffectApplied = FMin(CurrentEffectApplied, MaxEffect);
|
||||||
|
|
||||||
|
// It goes from the Cached Body Scale to CachedBodyScale - 0.5 at 100% affliction
|
||||||
|
PawnOwner.IntendedBodyScale = CachedBodyScale - ((CurrentEffectApplied/MaxEffect) * (1.0f - ScaleOnMaxEffect));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (CurrentStrength <= 0.0f)
|
||||||
|
{
|
||||||
|
CurrentEffect = 0;
|
||||||
|
CurrentStrength = 0.1f;
|
||||||
|
|
||||||
|
if (CurrentEffectApplied <= 0.0f)
|
||||||
|
{
|
||||||
|
CurrentStrength = 0.0f;
|
||||||
|
PawnOwner.BodyScaleChangePerSecond = CachedBodyScaleChangePerSecond;
|
||||||
|
PawnOwner.bNetDirty = true;
|
||||||
|
super.Deactivate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function float GetDamageTakenModifier()
|
||||||
|
{
|
||||||
|
return MaxEffectDamageValue * (CurrentEffect/MaxEffect);
|
||||||
|
}
|
||||||
|
|
||||||
|
function KillOwner()
|
||||||
|
{
|
||||||
|
local KFPawn_Monster KFPM;
|
||||||
|
|
||||||
|
KFPM = KFPawn_Monster(PawnOwner);
|
||||||
|
|
||||||
|
if (KFPM == none)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
KFPM.BodyScaleChangePerSecond = CachedBodyScaleChangePerSecond;
|
||||||
|
KFPM.bNetDirty = true;
|
||||||
|
|
||||||
|
if (!KFPM.bCanBeKilledByShrinking)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
KFPM.bUseExplosiveDeath = true;
|
||||||
|
KFPM.TakeDamage(9999, Instigator, KFPM.Location, vect(0,0,0), class'KFDT_ShrinkDeath',, Instigator.Pawn.Weapon);
|
||||||
|
}
|
||||||
|
|
||||||
|
defaultproperties
|
||||||
|
{
|
||||||
|
DissipationRate=10 //20
|
||||||
|
bNeedsTick=true
|
||||||
|
|
||||||
|
MaxEffect=10.f;
|
||||||
|
ScaleOnMaxEffect=0.5f
|
||||||
|
EffectAppliedByStack=1.0f
|
||||||
|
|
||||||
|
ApplyEffectVel=100.0f // % per second
|
||||||
|
RemoveEffectVel=0.25f // % per second
|
||||||
|
|
||||||
|
CurrentEffect=0.0f
|
||||||
|
CurrentEffectApplied=0.0f
|
||||||
|
|
||||||
|
MaxEffectDamageValue=1.0f
|
||||||
|
|
||||||
|
AlreadyCached = false
|
||||||
|
}
|
@ -24,7 +24,7 @@ function Init(KFPawn P, EAfflictionType Type, KFPerk InstigatorPerk)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** */
|
/** */
|
||||||
function Activate()
|
function Activate(optional class<KFDamageType> DamageType = none)
|
||||||
{
|
{
|
||||||
if( !bIsActive )
|
if( !bIsActive )
|
||||||
{
|
{
|
||||||
|
@ -386,7 +386,6 @@ function PurchaseWeapon(STraderItem ShopItem)
|
|||||||
Price = GetAdjustedBuyPriceFor(ShopItem);
|
Price = GetAdjustedBuyPriceFor(ShopItem);
|
||||||
// XMAS 2021 Seasonal Objective
|
// XMAS 2021 Seasonal Objective
|
||||||
KFPC = Outer;
|
KFPC = Outer;
|
||||||
`Log("ADDING WEAPON PURCHASED");
|
|
||||||
KFPC.AddWeaponPurchased(ShopItem.WeaponDef, Price);
|
KFPC.AddWeaponPurchased(ShopItem.WeaponDef, Price);
|
||||||
//
|
//
|
||||||
|
|
||||||
|
@ -871,7 +871,7 @@ private function SetAttachmentMeshAndSkin(
|
|||||||
CharAttachmentSocketName, KFP.ArmsMesh, KFP, true);
|
CharAttachmentSocketName, KFP.ArmsMesh, KFP, true);
|
||||||
|
|
||||||
KFGRI = KFGameReplicationInfo(KFP.WorldInfo.GRI);
|
KFGRI = KFGameReplicationInfo(KFP.WorldInfo.GRI);
|
||||||
if (AttachmentSlotIndex == 2 && KFP != none && KFGRI.bIsWeeklyMode && (class'KFGameEngine'.static.GetWeeklyEventIndexMod() == 12))
|
if (AttachmentSlotIndex == 2 && KFP != none && KFGRI.bIsWeeklyMode && (KFGRI.CurrentWeeklyIndex == 12))
|
||||||
{
|
{
|
||||||
SetWeeklyCowboyAttachmentSkinMaterial(
|
SetWeeklyCowboyAttachmentSkinMaterial(
|
||||||
AttachmentSlotIndex,
|
AttachmentSlotIndex,
|
||||||
@ -917,7 +917,7 @@ private function SetAttachmentMeshAndSkin(
|
|||||||
CharAttachmentSocketName, KFP.Mesh, KFP, false);
|
CharAttachmentSocketName, KFP.Mesh, KFP, false);
|
||||||
|
|
||||||
KFGRI = KFGameReplicationInfo(KFP.WorldInfo.GRI);
|
KFGRI = KFGameReplicationInfo(KFP.WorldInfo.GRI);
|
||||||
if (AttachmentSlotIndex == 2 && KFP != none && KFGRI.bIsWeeklyMode && (class'KFGameEngine'.static.GetWeeklyEventIndexMod() == 12))
|
if (AttachmentSlotIndex == 2 && KFP != none && KFGRI.bIsWeeklyMode && (KFGRI.CurrentWeeklyIndex == 12))
|
||||||
{
|
{
|
||||||
SetWeeklyCowboyAttachmentSkinMaterial(
|
SetWeeklyCowboyAttachmentSkinMaterial(
|
||||||
AttachmentSlotIndex,
|
AttachmentSlotIndex,
|
||||||
|
@ -273,7 +273,7 @@ simulated function SetCharacterMeshFromArch( KFPawn KFP, optional KFPlayerReplic
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (KFP != none && KFGRI.bIsWeeklyMode && (class'KFGameEngine'.static.GetWeeklyEventIndexMod() == 12))
|
if (KFP != none && KFGRI.bIsWeeklyMode && KFGRI.CurrentWeeklyIndex == 12)
|
||||||
{
|
{
|
||||||
NewAttachment.StaticAttachment = StaticMesh(DynamicLoadObject(ZEDCowboyHatMeshPath, class'StaticMesh'));
|
NewAttachment.StaticAttachment = StaticMesh(DynamicLoadObject(ZEDCowboyHatMeshPath, class'StaticMesh'));
|
||||||
NewAttachment.AttachSocketName = KFPawn_Monster(KFP).ZEDCowboyHatAttachName;
|
NewAttachment.AttachSocketName = KFPawn_Monster(KFP).ZEDCowboyHatAttachName;
|
||||||
|
@ -18,6 +18,9 @@ var localized string FailedToReachInventoryServerString;
|
|||||||
|
|
||||||
var localized array<string> DifficultyStrings;
|
var localized array<string> DifficultyStrings;
|
||||||
var localized array<string> LengthStrings;
|
var localized array<string> LengthStrings;
|
||||||
|
var localized string SpecialLengthString;
|
||||||
|
var localized string WeaponLevelString;
|
||||||
|
var localized string GunPointsString;
|
||||||
var localized array<string> ServerTypeStrings;
|
var localized array<string> ServerTypeStrings;
|
||||||
var localized array<string> PermissionStrings;
|
var localized array<string> PermissionStrings;
|
||||||
var localized array<string> ConsolePermissionStrings;
|
var localized array<string> ConsolePermissionStrings;
|
||||||
|
27
KFGame/Classes/KFDT_ShrinkDeath.uc
Normal file
27
KFGame/Classes/KFDT_ShrinkDeath.uc
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
//=============================================================================
|
||||||
|
// KFDT_ShrinkDeath
|
||||||
|
//=============================================================================
|
||||||
|
// damage applied for killind zeds by shrinking them
|
||||||
|
//=============================================================================
|
||||||
|
// Killing Floor 2
|
||||||
|
// Copyright (C) 2022 Tripwire Interactive LLC
|
||||||
|
//=============================================================================
|
||||||
|
|
||||||
|
class KFDT_ShrinkDeath extends KFDamageType;
|
||||||
|
|
||||||
|
defaultproperties
|
||||||
|
{
|
||||||
|
RadialDamageImpulse = 1000.f // This controls how much impulse is applied to gibs when exploding
|
||||||
|
bUseHitLocationForGibImpulses = true // This will make the impulse origin where the victim was hit for directional gibs
|
||||||
|
bPointImpulseTowardsOrigin = true // This creates an impulse direction aligned along hitlocation and pawn location -- this will push all gibs in the same direction
|
||||||
|
ImpulseOriginScale = 100.f // Higher means more directional gibbing, lower means more outward (and upward) gibbing
|
||||||
|
ImpulseOriginLift = 150.f
|
||||||
|
MaxObliterationGibs = 12 // Maximum number of gibs that can be spawned by obliteration, 0=MAX
|
||||||
|
bCanGib = true
|
||||||
|
bCanObliterate = true
|
||||||
|
ObliterationHealthThreshold = 0
|
||||||
|
ObliterationDamageThreshold = 1
|
||||||
|
bIgnoreAggroOnDamage=true
|
||||||
|
|
||||||
|
WeaponDef = class'KFWeapDef_ShrinkRayGun'
|
||||||
|
}
|
@ -91,7 +91,8 @@ var float MicrowavePower;
|
|||||||
var float FreezePower;
|
var float FreezePower;
|
||||||
var float SnarePower;
|
var float SnarePower;
|
||||||
var float BleedPower;
|
var float BleedPower;
|
||||||
|
var float BigHeadPower;
|
||||||
|
var float ShrinkPower;
|
||||||
/*********************************************************************************************
|
/*********************************************************************************************
|
||||||
Impact Effects
|
Impact Effects
|
||||||
********************************************************************************************* */
|
********************************************************************************************* */
|
||||||
|
@ -36,6 +36,8 @@ var bool bUsesSecondaryAmmo;
|
|||||||
var bool bUsesGrenadesAsSecondaryAmmo;
|
var bool bUsesGrenadesAsSecondaryAmmo;
|
||||||
var bool bUsesSecondaryAmmoAltHUD;
|
var bool bUsesSecondaryAmmoAltHUD;
|
||||||
|
|
||||||
|
var transient bool bLastDoshVisibility;
|
||||||
|
|
||||||
var class<KFPerk> LastPerkClass;
|
var class<KFPerk> LastPerkClass;
|
||||||
var KFWeapon LastWeapon;
|
var KFWeapon LastWeapon;
|
||||||
|
|
||||||
@ -45,6 +47,8 @@ var ASColorTransform DefaultColor;
|
|||||||
var ASColorTransform RedColor;
|
var ASColorTransform RedColor;
|
||||||
var name OldState;
|
var name OldState;
|
||||||
|
|
||||||
|
var transient byte LastGrenadeIndex;
|
||||||
|
|
||||||
function InitializeHUD()
|
function InitializeHUD()
|
||||||
{
|
{
|
||||||
MyKFPC = KFPlayerController(GetPC());
|
MyKFPC = KFPlayerController(GetPC());
|
||||||
@ -87,6 +91,20 @@ function UpdateDosh()
|
|||||||
{
|
{
|
||||||
local int CurrentDosh;
|
local int CurrentDosh;
|
||||||
local int DeltaDosh;
|
local int DeltaDosh;
|
||||||
|
local bool bCanUseDosh;
|
||||||
|
|
||||||
|
bCanUseDosh = MyKFPC.CanUseDosh();
|
||||||
|
|
||||||
|
if (bCanUseDosh != bLastDoshVisibility)
|
||||||
|
{
|
||||||
|
UpdateDoshVisibility(bCanUseDosh);
|
||||||
|
bLastDoshVisibility = bCanUseDosh;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!bCanUseDosh)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (MyKFPC.PlayerReplicationInfo != none)
|
if (MyKFPC.PlayerReplicationInfo != none)
|
||||||
{
|
{
|
||||||
@ -99,6 +117,18 @@ function UpdateDosh()
|
|||||||
SetInt("backpackDosh" ,DeltaDosh);
|
SetInt("backpackDosh" ,DeltaDosh);
|
||||||
LastDosh = CurrentDosh;
|
LastDosh = CurrentDosh;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function UpdateDoshVisibility(bool visible)
|
||||||
|
{
|
||||||
|
if (visible)
|
||||||
|
{
|
||||||
|
SetBool("DoshSetVisibility", true);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SetBool("DoshSetVisibility", false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -125,7 +155,13 @@ function UpdateGrenades()
|
|||||||
SetString("backpackGrenadeType", "img://" $ MyKFPC.CurrentPerk.GetGrenadeImagePath());
|
SetString("backpackGrenadeType", "img://" $ MyKFPC.CurrentPerk.GetGrenadeImagePath());
|
||||||
LastPerkClass = MyKFPC.CurrentPerk.Class;
|
LastPerkClass = MyKFPC.CurrentPerk.Class;
|
||||||
LastSavedBuild = MyKFPC.CurrentPerk.GetSavedBuild();
|
LastSavedBuild = MyKFPC.CurrentPerk.GetSavedBuild();
|
||||||
}
|
LastGrenadeIndex = MyKFPC.CurrentPerk.GetGrenadeSelectedIndex();
|
||||||
|
}
|
||||||
|
else if (MyKFPC.CurrentPerk.GetGrenadeSelectedIndex() != LastGrenadeIndex)
|
||||||
|
{
|
||||||
|
SetString("backpackGrenadeType", "img://" $ MyKFPC.CurrentPerk.GetGrenadeImagePath());
|
||||||
|
LastGrenadeIndex = MyKFPC.CurrentPerk.GetGrenadeSelectedIndex();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// Update the grenades count value
|
// Update the grenades count value
|
||||||
if(CurrentGrenades != LastGrenades)
|
if(CurrentGrenades != LastGrenades)
|
||||||
@ -328,4 +364,6 @@ DefaultProperties
|
|||||||
{
|
{
|
||||||
LastMaxWeight=-1
|
LastMaxWeight=-1
|
||||||
LastWeight=-1
|
LastWeight=-1
|
||||||
|
bLastDoshVisibility=true
|
||||||
|
LastGrenadeIndex=0
|
||||||
}
|
}
|
||||||
|
@ -89,7 +89,19 @@ function UpdateWaveCount()
|
|||||||
}
|
}
|
||||||
|
|
||||||
CurrentWaveNum = KFGRI.WaveNum;
|
CurrentWaveNum = KFGRI.WaveNum;
|
||||||
if(KFGRI.IsBossWave())
|
|
||||||
|
if (KFGRI.bIsWeeklyMode && KFGRI.CurrentWeeklyIndex == 16)
|
||||||
|
{
|
||||||
|
if (KFGRI.bWaveGunGameIsFinal)
|
||||||
|
{
|
||||||
|
SetString("waveNumber", FinalString);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SetString("waveNumber", "" $ KFGRI.GunGameWavesCurrent);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(KFGRI.IsBossWave())
|
||||||
{
|
{
|
||||||
SetString("waveNumber", class'KFGFxHUD_WaveInfo'.default.BossWaveString);
|
SetString("waveNumber", class'KFGFxHUD_WaveInfo'.default.BossWaveString);
|
||||||
}
|
}
|
||||||
|
@ -71,7 +71,7 @@ function TickHud(float DeltaTime)
|
|||||||
|
|
||||||
function UpdateWaveCount()
|
function UpdateWaveCount()
|
||||||
{
|
{
|
||||||
local int CurrentWaveMax,CurrentWave;
|
local int CurrentWaveMax, CurrentWave;
|
||||||
|
|
||||||
if( KFGRI == none )
|
if( KFGRI == none )
|
||||||
{
|
{
|
||||||
@ -83,21 +83,46 @@ function UpdateWaveCount()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Max # of waves.
|
if (KFGRI.bIsWeeklyMode && KFGRI.CurrentWeeklyIndex == 16)
|
||||||
CurrentWaveMax = KFGRI.GetFinalWaveNum();
|
{
|
||||||
if(LastWaveMax != CurrentWaveMax)
|
CurrentWave = KFGRI.GunGameWavesCurrent;
|
||||||
{
|
CurrentWaveMax = KFGRI.GetFinalWaveNum();
|
||||||
SetInt("maxWaves" , KFGRI.default.bEndlessMode ? INDEX_NONE : CurrentWaveMax);
|
|
||||||
LastWaveMax = CurrentWaveMax;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Current wave we're on.
|
if (KFGRI.bWaveGunGameIsFinal)
|
||||||
CurrentWave = KFGRI.WaveNum;
|
{
|
||||||
if(CurrentWave != LastWave)
|
CurrentWave = CurrentWaveMax + 1;
|
||||||
{
|
}
|
||||||
SetInt("currentWave" , CurrentWave);
|
else
|
||||||
|
{
|
||||||
|
CurrentWaveMax = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
Setint("maxGunGameWave" , CurrentWaveMax);
|
||||||
|
Setint("currentGunGameWave" , CurrentWave);
|
||||||
|
|
||||||
|
LastWaveMax = CurrentWaveMax;
|
||||||
LastWave = CurrentWave;
|
LastWave = CurrentWave;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
CurrentWave = KFGRI.WaveNum;
|
||||||
|
CurrentWaveMax = KFGRI.GetFinalWaveNum();
|
||||||
|
|
||||||
|
// Max # of waves.
|
||||||
|
if (LastWaveMax != CurrentWaveMax)
|
||||||
|
{
|
||||||
|
SetInt("maxWaves" , KFGRI.default.bEndlessMode ? INDEX_NONE : CurrentWaveMax);
|
||||||
|
LastWaveMax = CurrentWaveMax;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Current wave we're on.
|
||||||
|
if (CurrentWave != LastWave)
|
||||||
|
{
|
||||||
|
SetInt("currentWave" , CurrentWave);
|
||||||
|
|
||||||
|
LastWave = CurrentWave;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function UpdateZEDCount()
|
function UpdateZEDCount()
|
||||||
|
@ -306,6 +306,7 @@ function UpdateAttachmentsList(array<AttachmentVariants> Attachments)
|
|||||||
local string AttachmentName;
|
local string AttachmentName;
|
||||||
local PlayerController PC;
|
local PlayerController PC;
|
||||||
local bool bIsWildWest;
|
local bool bIsWildWest;
|
||||||
|
local KFGameReplicationInfo KFGRI;
|
||||||
|
|
||||||
bIsWildWest = false;
|
bIsWildWest = false;
|
||||||
ItemIndex = 0;
|
ItemIndex = 0;
|
||||||
@ -322,7 +323,8 @@ function UpdateAttachmentsList(array<AttachmentVariants> Attachments)
|
|||||||
ItemIndex++;
|
ItemIndex++;
|
||||||
|
|
||||||
PC = GetPC();
|
PC = GetPC();
|
||||||
bIsWildWest = (PC != none && Pc.WorldInfo.GRI.IsA('KFGameReplicationInfo_WeeklySurvival') && (class'KFGameEngine'.static.GetWeeklyEventIndexMod() == 12));
|
KFGRI = PC != none ? KFGameReplicationInfo(Pc.WorldInfo.GRI) : none;
|
||||||
|
bIsWildWest = (KFGRI != none && KFGRI.bIsWeeklyMode && KFGRI.CurrentWeeklyIndex == 12);
|
||||||
|
|
||||||
for (i = 0; i < Attachments.length; i++)
|
for (i = 0; i < Attachments.length; i++)
|
||||||
{
|
{
|
||||||
@ -773,9 +775,14 @@ function ForceWeeklyCowboyHat()
|
|||||||
{
|
{
|
||||||
local PlayerController PC;
|
local PlayerController PC;
|
||||||
local int CowboyHatIndex;
|
local int CowboyHatIndex;
|
||||||
PC = GetPC();
|
local bool bIsWildWest;
|
||||||
|
local KFGameReplicationInfo KFGRI;
|
||||||
|
|
||||||
if (PC != none && Pc.WorldInfo.GRI.IsA('KFGameReplicationInfo_WeeklySurvival') && (class'KFGameEngine'.static.GetWeeklyEventIndexMod() == 12))
|
PC = GetPC();
|
||||||
|
KFGRI = PC != none ? KFGameReplicationInfo(Pc.WorldInfo.GRI) : none;
|
||||||
|
bIsWildWest = (KFGRI != none && KFGRI.bIsWeeklyMode && KFGRI.CurrentWeeklyIndex == 12);
|
||||||
|
|
||||||
|
if (bIsWildWest)
|
||||||
{
|
{
|
||||||
CowboyHatIndex = FindCowboyHatAttachmentIndex(CurrentCharInfo);
|
CowboyHatIndex = FindCowboyHatAttachmentIndex(CurrentCharInfo);
|
||||||
if (CowboyHatIndex >= 0)
|
if (CowboyHatIndex >= 0)
|
||||||
|
@ -131,9 +131,22 @@ struct InventoryHelper
|
|||||||
var int ItemDefinition;
|
var int ItemDefinition;
|
||||||
var int ItemIndex;
|
var int ItemIndex;
|
||||||
var int ItemCount;
|
var int ItemCount;
|
||||||
|
var ItemType Type;
|
||||||
var GFxObject GfxItemObject;
|
var GFxObject GfxItemObject;
|
||||||
|
|
||||||
|
// For ordering in weapon skins
|
||||||
|
var int WeaponDef;
|
||||||
|
var int Price;
|
||||||
|
//var string FullName;
|
||||||
|
var int SkinType;
|
||||||
|
var ItemRarity Rarity;
|
||||||
|
var int Quality;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
var array<InventoryHelper> SkinListWeaponsSearchCache;
|
||||||
|
var array<InventoryHelper> SkinListOrderedCache;
|
||||||
|
var bool NeedToRegenerateSkinList;
|
||||||
|
|
||||||
var EInventoryWeaponType_Filter CurrentWeaponTypeFilter;
|
var EInventoryWeaponType_Filter CurrentWeaponTypeFilter;
|
||||||
var int CurrentPerkIndexFilter;
|
var int CurrentPerkIndexFilter;
|
||||||
var ItemRarity CurrentRarityFilter;
|
var ItemRarity CurrentRarityFilter;
|
||||||
@ -142,9 +155,14 @@ var EINventory_Filter CurrentInventoryFilter;
|
|||||||
|
|
||||||
var ExchangeRuleSets RuleToExchange;
|
var ExchangeRuleSets RuleToExchange;
|
||||||
|
|
||||||
|
var private int CrcTable[256];
|
||||||
|
|
||||||
function InitializeMenu( KFGFxMoviePlayer_Manager InManager )
|
function InitializeMenu( KFGFxMoviePlayer_Manager InManager )
|
||||||
{
|
{
|
||||||
super.InitializeMenu( InManager );
|
super.InitializeMenu( InManager );
|
||||||
|
|
||||||
|
CrcInit();
|
||||||
|
|
||||||
KFPC = KFPlayerController(GetPC());
|
KFPC = KFPlayerController(GetPC());
|
||||||
CurrentPerkIndexFilter = KFPC.PerkList.length; //default value
|
CurrentPerkIndexFilter = KFPC.PerkList.length; //default value
|
||||||
|
|
||||||
@ -229,15 +247,95 @@ function OnClose()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final function CrcInit() {
|
||||||
|
|
||||||
|
const CrcPolynomial = 0xedb88320;
|
||||||
|
|
||||||
|
local int CrcValue;
|
||||||
|
local int IndexBit;
|
||||||
|
local int IndexEntry;
|
||||||
|
|
||||||
|
for (IndexEntry = 0; IndexEntry < 256; IndexEntry++) {
|
||||||
|
CrcValue = IndexEntry;
|
||||||
|
|
||||||
|
for (IndexBit = 8; IndexBit > 0; IndexBit--)
|
||||||
|
if ((CrcValue & 1) != 0)
|
||||||
|
CrcValue = (CrcValue >>> 1) ^ CrcPolynomial;
|
||||||
|
else
|
||||||
|
CrcValue = CrcValue >>> 1;
|
||||||
|
|
||||||
|
CrcTable[IndexEntry] = CrcValue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
final function int Crc(coerce string Text)
|
||||||
|
{
|
||||||
|
local int CrcValue;
|
||||||
|
local int IndexChar;
|
||||||
|
local int StrLen;
|
||||||
|
|
||||||
|
CrcValue = 0xffffffff;
|
||||||
|
StrLen = Len(Text);
|
||||||
|
for (IndexChar = 0; IndexChar < StrLen; IndexChar++)
|
||||||
|
CrcValue = (CrcValue >>> 8) ^ CrcTable[(Asc(Mid(Text, IndexChar, 1)) ^ CrcValue) & 0xff];
|
||||||
|
|
||||||
|
return CrcValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
delegate int SortByWeaponTypeDefinition(InventoryHelper A, InventoryHelper B)
|
||||||
|
{
|
||||||
|
return A.WeaponDef < B.WeaponDef ? -1 : +1;
|
||||||
|
}
|
||||||
|
|
||||||
|
delegate int SortByPrice(InventoryHelper A, InventoryHelper B)
|
||||||
|
{
|
||||||
|
return A.Price > B.Price ? -1 : +1;
|
||||||
|
}
|
||||||
|
|
||||||
|
delegate int SortByRarity(InventoryHelper A, InventoryHelper B)
|
||||||
|
{
|
||||||
|
return A.Rarity > B.Rarity ? -1 : +1;
|
||||||
|
}
|
||||||
|
|
||||||
|
delegate int SortBySkinType(InventoryHelper A, InventoryHelper B)
|
||||||
|
{
|
||||||
|
return A.SkinType > B.SkinType ? -1 : +1;
|
||||||
|
}
|
||||||
|
|
||||||
|
delegate int SortByQuality(InventoryHelper A, InventoryHelper B)
|
||||||
|
{
|
||||||
|
return A.Quality < B.Quality ? -1 : +1;
|
||||||
|
}
|
||||||
|
|
||||||
|
delegate int SortByAll(InventoryHelper A, InventoryHelper B)
|
||||||
|
{
|
||||||
|
//local int WeapDefValue, SkinTypeValue;
|
||||||
|
|
||||||
|
/** Format: Compare lower ? -1 : (Compare upper) : 1 : (Equal case, repeat formula with the next sort condition) */
|
||||||
|
return A.Price > B.Price ? -1 : (A.Price < B.Price ? 1 : (
|
||||||
|
//STRCompare(A.WeaponDef, B.WeaponDef, WeapDefValue) < 0 ? -1 : ( WeapDefValue != 0 ? 1 : (
|
||||||
|
A.WeaponDef < B.WeaponDef ? -1 : (A.WeaponDef > B.WeaponDef ? 1 : (
|
||||||
|
A.Rarity > B.Rarity ? -1 : (A.Rarity < B.Rarity ? 1 : (
|
||||||
|
//STRCompare(A.SkinType, B.SkinType, SkinTypeValue) > 0 ? -1 : ( SkinTypeValue != 0 ? 1 : (
|
||||||
|
A.SkinType > B.SkinType ? -1 : (A.SkinType < B.SkinType ? 1 : (
|
||||||
|
A.Quality < B.Quality ? -1 : 1
|
||||||
|
))
|
||||||
|
))
|
||||||
|
))
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
function InitInventory()
|
function InitInventory()
|
||||||
{
|
{
|
||||||
local int i, ItemIndex, HelperIndex;
|
local int i, ItemIndex, HelperIndex, WeaponItemID, SearchWeaponSkinIndex;
|
||||||
local ItemProperties TempItemDetailsHolder;
|
local ItemProperties TempItemDetailsHolder;
|
||||||
local GFxObject ItemArray, ItemObject;
|
local GFxObject ItemArray, ItemObject;
|
||||||
local bool bActiveItem;
|
local bool bActiveItem;
|
||||||
local array<InventoryHelper> ActiveItems;
|
local array<InventoryHelper> ActiveItems, ValidSkinItems, FailedSkinItems;
|
||||||
local InventoryHelper HelperItem;
|
local InventoryHelper HelperItem;
|
||||||
local array<ExchangeRuleSets> ExchangeRules;
|
local array<ExchangeRuleSets> ExchangeRules;
|
||||||
|
local class<KFWeaponDefinition> WeaponDef;
|
||||||
|
local string SkinType;
|
||||||
|
|
||||||
local GFxObject PendingItem;
|
local GFxObject PendingItem;
|
||||||
|
|
||||||
@ -249,6 +347,7 @@ function InitInventory()
|
|||||||
SetObject("inventoryList", ItemArray);
|
SetObject("inventoryList", ItemArray);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < OnlineSub.CurrentInventory.length; i++)
|
for (i = 0; i < OnlineSub.CurrentInventory.length; i++)
|
||||||
{
|
{
|
||||||
//look item up to get info on it.
|
//look item up to get info on it.
|
||||||
@ -264,10 +363,62 @@ function InitInventory()
|
|||||||
ItemObject = CreateObject("Object");
|
ItemObject = CreateObject("Object");
|
||||||
HelperIndex = ActiveItems.Find('ItemDefinition', onlineSub.CurrentInventory[i].Definition);
|
HelperIndex = ActiveItems.Find('ItemDefinition', onlineSub.CurrentInventory[i].Definition);
|
||||||
|
|
||||||
if(HelperIndex == INDEX_NONE)
|
if (HelperIndex == INDEX_NONE)
|
||||||
{
|
{
|
||||||
HelperItem.ItemDefinition = onlineSub.CurrentInventory[i].Definition;
|
HelperItem.ItemDefinition = onlineSub.CurrentInventory[i].Definition;
|
||||||
HelperItem.ItemCount = onlineSub.CurrentInventory[i].Quantity;
|
HelperItem.ItemCount = onlineSub.CurrentInventory[i].Quantity;
|
||||||
|
|
||||||
|
if (TempItemDetailsHolder.Type == ITP_WeaponSkin)
|
||||||
|
{
|
||||||
|
// Copy required stuff
|
||||||
|
//HelperItem.FullName = TempItemDetailsHolder.Name;
|
||||||
|
HelperItem.Rarity = TempItemDetailsHolder.Rarity;
|
||||||
|
HelperItem.Quality = TempItemDetailsHolder.Quality;
|
||||||
|
|
||||||
|
if (bool(OnlineSub.CurrentInventory[i].NewlyAdded))
|
||||||
|
{
|
||||||
|
NeedToRegenerateSkinList = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Search on the cache, to speed up
|
||||||
|
WeaponItemID = SkinListWeaponsSearchCache.Find('ItemDefinition', HelperItem.ItemDefinition);
|
||||||
|
|
||||||
|
if (WeaponItemID != INDEX_NONE)
|
||||||
|
{
|
||||||
|
HelperItem.WeaponDef = SkinListWeaponsSearchCache[WeaponItemID].WeaponDef;
|
||||||
|
HelperItem.Price = SkinListWeaponsSearchCache[WeaponItemID].Price;
|
||||||
|
HelperItem.SkinType = SkinListWeaponsSearchCache[WeaponItemID].SkinType;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Get right part of the string without from the first "| "
|
||||||
|
SearchWeaponSkinIndex = InStr(TempItemDetailsHolder.Name, "|");
|
||||||
|
SkinType = Right(TempItemDetailsHolder.Name, Len(TempItemDetailsHolder.Name) - SearchWeaponSkinIndex - 2);
|
||||||
|
|
||||||
|
// Get the left part of the string without the next "| "
|
||||||
|
SearchWeaponSkinIndex = InStr(SkinType, "|");
|
||||||
|
HelperItem.SkinType = CrC(Left(SkinType, SearchWeaponSkinIndex));
|
||||||
|
|
||||||
|
WeaponItemID = class'KFWeaponSkinList'.default.Skins.Find('Id', HelperItem.ItemDefinition);
|
||||||
|
|
||||||
|
if (WeaponItemID != INDEX_NONE)
|
||||||
|
{
|
||||||
|
WeaponDef = class'KFWeaponSkinList'.default.Skins[WeaponItemID].WeaponDef;
|
||||||
|
|
||||||
|
// All Weapons start by KFGameContent.KFWeap_ Skip that prefix.
|
||||||
|
HelperItem.WeaponDef = CrC(Mid(WeaponDef.default.WeaponClassPath, 21));
|
||||||
|
HelperItem.Price = WeaponDef.default.BuyPrice;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
HelperItem.WeaponDef = -1;
|
||||||
|
HelperItem.Price = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
SkinListWeaponsSearchCache.AddItem(HelperItem);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ActiveItems.AddItem(HelperItem);
|
ActiveItems.AddItem(HelperItem);
|
||||||
HelperIndex = ActiveItems.length - 1;
|
HelperIndex = ActiveItems.length - 1;
|
||||||
}
|
}
|
||||||
@ -314,9 +465,87 @@ function InitInventory()
|
|||||||
|
|
||||||
OnlineSub.ClearNewlyAdded();
|
OnlineSub.ClearNewlyAdded();
|
||||||
|
|
||||||
for (i = 0; i < ActiveItems.length; i++)
|
if (CurrentInventoryFilter == EInv_WeaponSkins)
|
||||||
{
|
{
|
||||||
ItemArray.SetElementObject(i, ActiveItems[i].GfxItemObject);
|
// If need to refresh... we regenerate the list, if not reuse our Cache
|
||||||
|
NeedToRegenerateSkinList = NeedToRegenerateSkinList || ActiveItems.Length != SkinListOrderedCache.Length;
|
||||||
|
if (NeedToRegenerateSkinList)
|
||||||
|
{
|
||||||
|
NeedToRegenerateSkinList = false;
|
||||||
|
|
||||||
|
/*`Log("START ORDERING!!!");
|
||||||
|
`Log("----------");*/
|
||||||
|
|
||||||
|
for (i = 0 ; i < ActiveItems.Length; i++)
|
||||||
|
{
|
||||||
|
// If doesn't have weapon definition, don't consider, only add as FailedItem to be added at the end
|
||||||
|
if (ActiveItems[i].WeaponDef != -1)
|
||||||
|
{
|
||||||
|
ValidSkinItems.AddItem(ActiveItems[i]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
FailedSkinItems.AddItem(ActiveItems[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Now we have all valid weapons
|
||||||
|
|
||||||
|
// We want to order by Price - Weapon Def - Rarity - Quality
|
||||||
|
// So we order inverse that way we keep the final list with the design intention
|
||||||
|
|
||||||
|
ValidSkinItems.Sort(SortByAll);
|
||||||
|
|
||||||
|
SkinListOrderedCache = ValidSkinItems;
|
||||||
|
|
||||||
|
/*for (i = 0 ; i < SkinListOrderedCache.Length; i++)
|
||||||
|
{
|
||||||
|
`Log("ID : " $SkinListOrderedCache[i].ItemDefinition);
|
||||||
|
`Log("Weapon Def : " $SkinListOrderedCache[i].WeaponDef);
|
||||||
|
`Log("Price : " $SkinListOrderedCache[i].Price);
|
||||||
|
//`Log("Full Name : " $SkinListOrderedCache[i].FullName);
|
||||||
|
`Log("Skin : " $SkinListOrderedCache[i].SkinType);
|
||||||
|
`Log("Rarity : " $SkinListOrderedCache[i].Rarity);
|
||||||
|
`Log("Quality : " $SkinListOrderedCache[i].Quality);
|
||||||
|
`Log("----------");
|
||||||
|
}*/
|
||||||
|
|
||||||
|
// FailedItems are weapons that don't have a Weapon Definition, this might be a case with old unsupported content?
|
||||||
|
for (i = 0; i < FailedSkinItems.Length; i++)
|
||||||
|
{
|
||||||
|
/*if (FailedSkinItems[i].FullName != "")
|
||||||
|
{
|
||||||
|
`Log("FailedSkinItems ID : " $FailedSkinItems[i].ItemDefinition);
|
||||||
|
`Log("FailedSkinItems Price : " $FailedSkinItems[i].Price);
|
||||||
|
`Log("FailedSkinItems Full Name : " $FailedSkinItems[i].FullName);
|
||||||
|
`Log("FailedSkinItems Skin : " $FailedSkinItems[i].SkinType);
|
||||||
|
`Log("FailedSkinItems Rarity : " $FailedSkinItems[i].Rarity);
|
||||||
|
`Log("FailedFailedSkinItemsItems Quality : " $FailedSkinItems[i].Quality);
|
||||||
|
`Log("----------");
|
||||||
|
}*/
|
||||||
|
|
||||||
|
SkinListOrderedCache.AddItem(FailedSkinItems[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*`Log("FINISH ORDERING!!!");
|
||||||
|
`Log("----------");*/
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//`Log("USING SKIN LIST CACHE!!!");
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < SkinListOrderedCache.length; i++)
|
||||||
|
{
|
||||||
|
ItemArray.SetElementObject(i, SkinListOrderedCache[i].GfxItemObject);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (i = 0; i < ActiveItems.length; i++)
|
||||||
|
{
|
||||||
|
ItemArray.SetElementObject(i, ActiveItems[i].GfxItemObject);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SetObject("inventoryList", ItemArray);
|
SetObject("inventoryList", ItemArray);
|
||||||
@ -376,6 +605,9 @@ function OnItemExhangeTimeOut()
|
|||||||
function FinishCraft()
|
function FinishCraft()
|
||||||
{
|
{
|
||||||
SetVisible(true);
|
SetVisible(true);
|
||||||
|
|
||||||
|
`Log("FinishCraft");
|
||||||
|
NeedToRegenerateSkinList = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
function SetMatineeColor(int ItemRarity)
|
function SetMatineeColor(int ItemRarity)
|
||||||
@ -494,10 +726,12 @@ function bool IsItemActive(int ItemDefinition)
|
|||||||
|
|
||||||
if(WeaponDef != none)
|
if(WeaponDef != none)
|
||||||
{
|
{
|
||||||
return class'KFWeaponSkinList'.Static.IsSkinEquip(WeaponDef, ItemDefinition);
|
if (class'KFWeaponSkinList'.Static.IsSkinEquip(WeaponDef, ItemDefinition))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -953,6 +1187,7 @@ function Callback_Equip( int ItemDefinition )
|
|||||||
}
|
}
|
||||||
|
|
||||||
//refresh inventory
|
//refresh inventory
|
||||||
|
NeedToRegenerateSkinList = true; // need to regenerate as the equipped state changed
|
||||||
InitInventory();
|
InitInventory();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1249,6 +1484,8 @@ function Callback_PreviewItem( int ItemDefinition )
|
|||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
|
NeedToRegenerateSkinList=false
|
||||||
|
|
||||||
CurrentWeaponTypeFilter = EInvWT_None;
|
CurrentWeaponTypeFilter = EInvWT_None;
|
||||||
CurrentRarityFilter = ITR_NONE;
|
CurrentRarityFilter = ITR_NONE;
|
||||||
|
|
||||||
|
@ -39,11 +39,17 @@ var KFPlayerReplicationInfo MyKFPRI;
|
|||||||
var bool bModifiedSkills;
|
var bool bModifiedSkills;
|
||||||
var bool bModifiedPerk;
|
var bool bModifiedPerk;
|
||||||
var bool bChangesMadeDuringLobby;
|
var bool bChangesMadeDuringLobby;
|
||||||
|
var bool bModifiedWeaponIndexes;
|
||||||
|
|
||||||
var name PerkLevelupSound;
|
var name PerkLevelupSound;
|
||||||
|
|
||||||
var byte SelectedSkillsHolder[`MAX_PERK_SKILLS];
|
var byte SelectedSkillsHolder[`MAX_PERK_SKILLS];
|
||||||
|
|
||||||
|
var const private float StickInputThreshold;
|
||||||
|
var const private float StickResetThreshold;
|
||||||
|
|
||||||
|
var transient bool bAxisResetLeft, bAxisResetRight;
|
||||||
|
|
||||||
function InitializeMenu(KFGFxMoviePlayer_Manager InManager)
|
function InitializeMenu(KFGFxMoviePlayer_Manager InManager)
|
||||||
{
|
{
|
||||||
super.InitializeMenu(InManager);
|
super.InitializeMenu(InManager);
|
||||||
@ -77,7 +83,7 @@ event bool WidgetInitialized(name WidgetName, name WidgetPath, GFxObject Widget)
|
|||||||
{
|
{
|
||||||
DetailsContainer = KFGFxPerksContainer_Details(Widget);//some reason this is coming out to none!
|
DetailsContainer = KFGFxPerksContainer_Details(Widget);//some reason this is coming out to none!
|
||||||
DetailsContainer.Initialize( self );
|
DetailsContainer.Initialize( self );
|
||||||
DetailsContainer.UpdateDetails(PerkClass);
|
DetailsContainer.UpdateDetails(PerkClass, SelectedSkillsHolder, false, false);
|
||||||
DetailsContainer.UpdatePassives(PerkClass);
|
DetailsContainer.UpdatePassives(PerkClass);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -114,6 +120,8 @@ function OnOpen()
|
|||||||
{
|
{
|
||||||
local KFGameReplicationInfo KFGRI;
|
local KFGameReplicationInfo KFGRI;
|
||||||
|
|
||||||
|
GetGameViewportClient().HandleInputAxis = OnAxisModified;
|
||||||
|
|
||||||
LastPerkIndex = KFPC.SavedPerkIndex;
|
LastPerkIndex = KFPC.SavedPerkIndex;
|
||||||
|
|
||||||
MyKFPRI = KFPlayerReplicationInfo( GetPC().PlayerReplicationInfo );
|
MyKFPRI = KFPlayerReplicationInfo( GetPC().PlayerReplicationInfo );
|
||||||
@ -196,9 +204,11 @@ event OnClose()
|
|||||||
{
|
{
|
||||||
local bool bShouldUpdatePerk;
|
local bool bShouldUpdatePerk;
|
||||||
|
|
||||||
|
GetGameViewportClient().HandleInputAxis = none;
|
||||||
|
|
||||||
if( KFPC != none )
|
if( KFPC != none )
|
||||||
{
|
{
|
||||||
if( bModifiedPerk || bModifiedSkills )
|
if( bModifiedPerk || bModifiedSkills || bModifiedWeaponIndexes)
|
||||||
{
|
{
|
||||||
bShouldUpdatePerk = bModifiedPerk && LastPerkIndex != KFPC.SavedPerkIndex;
|
bShouldUpdatePerk = bModifiedPerk && LastPerkIndex != KFPC.SavedPerkIndex;
|
||||||
|
|
||||||
@ -215,8 +225,15 @@ event OnClose()
|
|||||||
Manager.CachedProfile.SetProfileSettingValueInt( KFID_SavedPerkIndex, LastPerkIndex );
|
Manager.CachedProfile.SetProfileSettingValueInt( KFID_SavedPerkIndex, LastPerkIndex );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (bModifiedWeaponIndexes)
|
||||||
|
{
|
||||||
|
Manager.CachedProfile.SetProfileSettingValueInt( KFID_SurvivalStartingWeapIdx, KFPC.SurvivalPerkWeapIndex );
|
||||||
|
Manager.CachedProfile.SetProfileSettingValueInt( KFID_SurvivalStartingGrenIdx, KFPC.SurvivalPerkGrenIndex );
|
||||||
|
}
|
||||||
|
|
||||||
bModifiedPerk = false;
|
bModifiedPerk = false;
|
||||||
bModifiedSkills = false;
|
bModifiedSkills = false;
|
||||||
|
bModifiedWeaponIndexes = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -323,7 +340,7 @@ function UpdateContainers( class<KFPerk> PerkClass, optional bool bClickedIndex=
|
|||||||
|
|
||||||
if( DetailsContainer != none )
|
if( DetailsContainer != none )
|
||||||
{
|
{
|
||||||
DetailsContainer.UpdateDetails( PerkClass );
|
DetailsContainer.UpdateDetails( PerkClass, SelectedSkillsHolder, false, false );
|
||||||
DetailsContainer.UpdatePassives( PerkClass );
|
DetailsContainer.UpdatePassives( PerkClass );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -457,6 +474,11 @@ function Callback_SkillSelected( byte TierIndex, byte SkillIndex )
|
|||||||
SelectedSkillsHolder[TierIndex] = SkillIndex;
|
SelectedSkillsHolder[TierIndex] = SkillIndex;
|
||||||
UpdateSkillsUI(KFPC.PerkList[LastPerkIndex].PerkClass);
|
UpdateSkillsUI(KFPC.PerkList[LastPerkIndex].PerkClass);
|
||||||
SavePerkData();
|
SavePerkData();
|
||||||
|
|
||||||
|
if ( KFPC.PerkList[LastPerkIndex].PerkClass.Name == 'KFPerk_Survivalist' )
|
||||||
|
{
|
||||||
|
DetailsContainer.UpdateDetails( KFPC.CurrentPerk.Class, SelectedSkillsHolder, false, false );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -469,6 +491,110 @@ function Callback_SkillSelectionOpened()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function OnPrevWeaponPressed()
|
||||||
|
{
|
||||||
|
local byte NewIndex;
|
||||||
|
|
||||||
|
NewIndex = KFPC.CurrentPerk.OnPrevWeaponSelected();
|
||||||
|
KFPC.SurvivalPerkWeapIndex = NewIndex;
|
||||||
|
|
||||||
|
DetailsContainer.UpdateDetails( KFPC.CurrentPerk.Class, SelectedSkillsHolder, true, false );
|
||||||
|
bModifiedWeaponIndexes=true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function OnNextWeaponPressed()
|
||||||
|
{
|
||||||
|
local byte NewIndex;
|
||||||
|
|
||||||
|
NewIndex = KFPC.CurrentPerk.OnNextWeaponSelected();
|
||||||
|
KFPC.SurvivalPerkWeapIndex = NewIndex;
|
||||||
|
|
||||||
|
DetailsContainer.UpdateDetails( KFPC.CurrentPerk.Class, SelectedSkillsHolder, false, true );
|
||||||
|
bModifiedWeaponIndexes=true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function OnPrevGrenadePressed()
|
||||||
|
{
|
||||||
|
local byte NewIndex;
|
||||||
|
|
||||||
|
NewIndex = KFPC.CurrentPerk.OnPrevGrenadeSelected();
|
||||||
|
KFPC.SurvivalPerkGrenIndex = NewIndex;
|
||||||
|
|
||||||
|
DetailsContainer.UpdateDetails( KFPC.CurrentPerk.Class, SelectedSkillsHolder, true, false );
|
||||||
|
bModifiedWeaponIndexes=true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function OnNextGrenadePressed()
|
||||||
|
{
|
||||||
|
local byte NewIndex;
|
||||||
|
|
||||||
|
NewIndex = KFPC.CurrentPerk.OnNextGrenadeSelected();
|
||||||
|
KFPC.SurvivalPerkGrenIndex = NewIndex;
|
||||||
|
|
||||||
|
DetailsContainer.UpdateDetails( KFPC.CurrentPerk.Class, SelectedSkillsHolder, false, true );
|
||||||
|
bModifiedWeaponIndexes=true;
|
||||||
|
}
|
||||||
|
|
||||||
|
event bool OnAxisModified( int ControllerId, name Key, float Delta, float DeltaTime, bool bGamepad )
|
||||||
|
{
|
||||||
|
if (GetPC().PlayerInput.bUsingGamepad )
|
||||||
|
{
|
||||||
|
if (DetailsContainer != none && bGamepad)
|
||||||
|
{
|
||||||
|
OnGamepadAxisModified(ControllerId, Key, Delta, DeltaTime, bGamepad);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function OnGamepadAxisModified( int ControllerId, name Key, float Delta, float DeltaTime, bool bGamepad )
|
||||||
|
{
|
||||||
|
local float AbsDelta;
|
||||||
|
|
||||||
|
AbsDelta = Abs(Delta);
|
||||||
|
|
||||||
|
if ( KFPC.CurrentPerk.static.CanChoosePrimaryWeapon() && Key == 'XboxTypeS_LeftX' )
|
||||||
|
{
|
||||||
|
if (bAxisResetLeft && AbsDelta > StickInputThreshold)
|
||||||
|
{
|
||||||
|
if (Delta < 0)
|
||||||
|
{
|
||||||
|
OnPrevWeaponPressed();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
OnNextWeaponPressed();
|
||||||
|
}
|
||||||
|
bAxisResetLeft = false;
|
||||||
|
}
|
||||||
|
else if (!bAxisResetLeft && AbsDelta < StickResetThreshold)
|
||||||
|
{
|
||||||
|
bAxisResetLeft = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (KFPC.CurrentPerk.static.CanChooseGrenade() && Key == 'XboxTypeS_RightX')
|
||||||
|
{
|
||||||
|
if (bAxisResetRight && AbsDelta > StickInputThreshold)
|
||||||
|
{
|
||||||
|
if (Delta < 0)
|
||||||
|
{
|
||||||
|
OnPrevGrenadePressed();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
OnNextGrenadePressed();
|
||||||
|
}
|
||||||
|
bAxisResetRight = false;
|
||||||
|
}
|
||||||
|
else if (!bAxisResetRight && AbsDelta < StickResetThreshold)
|
||||||
|
{
|
||||||
|
bAxisResetRight = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
PerkLevelupSound=LevelUp_Popup
|
PerkLevelupSound=LevelUp_Popup
|
||||||
@ -481,4 +607,9 @@ defaultproperties
|
|||||||
SubWidgetBindings.Add((WidgetName="SelectedPerkSummaryContainer",WidgetClass=class'KFGFxPerksContainer_SkillsSummary'))
|
SubWidgetBindings.Add((WidgetName="SelectedPerkSummaryContainer",WidgetClass=class'KFGFxPerksContainer_SkillsSummary'))
|
||||||
LastPerkIndex=255
|
LastPerkIndex=255
|
||||||
LastPerkLevel=255
|
LastPerkLevel=255
|
||||||
|
|
||||||
|
bAxisResetLeft=true
|
||||||
|
bAxisResetRight=false
|
||||||
|
StickInputThreshold=0.5
|
||||||
|
StickResetThreshold=0.5
|
||||||
}
|
}
|
||||||
|
@ -216,7 +216,11 @@ function SetSumarryInfo()
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (KFGRI.default.bEndlessMode)
|
if (KFGRI.bIsWeeklyMode && KFGRI.CurrentWeeklyIndex == 16)
|
||||||
|
{
|
||||||
|
TextObject.SetString("waveTime", WaveString @ KFGRI.GunGameWavesCurrent @"-" @FormatTime(KFGRI.ElapsedTime));
|
||||||
|
}
|
||||||
|
else if (KFGRI.default.bEndlessMode)
|
||||||
{
|
{
|
||||||
TextObject.SetString("waveTime", WaveString @ KFGRI.WaveNum @"-" @FormatTime(KFGRI.ElapsedTime));
|
TextObject.SetString("waveTime", WaveString @ KFGRI.WaveNum @"-" @FormatTime(KFGRI.ElapsedTime));
|
||||||
}
|
}
|
||||||
|
@ -70,6 +70,9 @@ var KFGFxWidget_BossHealthBar bossHealthBar;
|
|||||||
var KFGFxWidget_MapText MapTextWidget;
|
var KFGFxWidget_MapText MapTextWidget;
|
||||||
// Widget that displays map texts
|
// Widget that displays map texts
|
||||||
var KFGFxWidget_MapCounterText MapCounterTextWidget;
|
var KFGFxWidget_MapCounterText MapCounterTextWidget;
|
||||||
|
// Widget that displays gun mode texts
|
||||||
|
var KFGFxWidget_GunGame GunGameWidget;
|
||||||
|
|
||||||
|
|
||||||
var KFPlayerController KFPC;
|
var KFPlayerController KFPC;
|
||||||
|
|
||||||
@ -102,6 +105,9 @@ var Protected float LastUpdateTime;
|
|||||||
// The name of the player currently being voted on to kick
|
// The name of the player currently being voted on to kick
|
||||||
var string PendingKickPlayerName;
|
var string PendingKickPlayerName;
|
||||||
|
|
||||||
|
// Gun game variables
|
||||||
|
var transient bool bLastGunGameVisibility;
|
||||||
|
|
||||||
/** On creation of the HUD */
|
/** On creation of the HUD */
|
||||||
function Init(optional LocalPlayer LocPlay)
|
function Init(optional LocalPlayer LocPlay)
|
||||||
{
|
{
|
||||||
@ -348,6 +354,13 @@ event bool WidgetInitialized(name WidgetName, name WidgetPath, GFxObject Widget)
|
|||||||
GoompaCounterWidget=KFGFxWidget_GoompaCounter(Widget);
|
GoompaCounterWidget=KFGFxWidget_GoompaCounter(Widget);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case 'GunGameContainer':
|
||||||
|
if (GunGameWidget == none)
|
||||||
|
{
|
||||||
|
GunGameWidget=KFGFxWidget_GunGame(Widget);
|
||||||
|
SetWidgetPathBinding( Widget, WidgetPath );
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@ -376,6 +389,8 @@ function UpdateWeaponSelect()
|
|||||||
/** Update all the unique HUD pieces */
|
/** Update all the unique HUD pieces */
|
||||||
function TickHud(float DeltaTime)
|
function TickHud(float DeltaTime)
|
||||||
{
|
{
|
||||||
|
local bool bGunGameVisibility;
|
||||||
|
|
||||||
if(KFPC == none || KFPC.WorldInfo.TimeSeconds - LastUpdateTime < UpdateInterval )
|
if(KFPC == none || KFPC.WorldInfo.TimeSeconds - LastUpdateTime < UpdateInterval )
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
@ -447,6 +462,22 @@ function TickHud(float DeltaTime)
|
|||||||
{
|
{
|
||||||
GfxScoreBoardPlayer.TickHud(DeltaTime);
|
GfxScoreBoardPlayer.TickHud(DeltaTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (GunGameWidget != none)
|
||||||
|
{
|
||||||
|
bGunGameVisibility = KFPC.CanUseGunGame();
|
||||||
|
|
||||||
|
if (bGunGameVisibility)
|
||||||
|
{
|
||||||
|
bGunGameVisibility = KFPC.Pawn.Health > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bGunGameVisibility != bLastGunGameVisibility)
|
||||||
|
{
|
||||||
|
GunGameWidget.UpdateGunGameVisibility(bGunGameVisibility);
|
||||||
|
bLastGunGameVisibility = bGunGameVisibility;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function UpdateObjectiveActive()
|
function UpdateObjectiveActive()
|
||||||
@ -781,7 +812,18 @@ function DisplayExpandedWaveInfo()
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (KFGRI.IsBossWave())
|
if (KFGRI.bIsWeeklyMode && KFGRI.CurrentWeeklyIndex == 16)
|
||||||
|
{
|
||||||
|
if (KFGRI.bWaveGunGameIsFinal)
|
||||||
|
{
|
||||||
|
PriorityMessageObject.SetString("waveNum", class'KFGFxHUD_WaveInfo'.default.FinalWaveString);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
PriorityMessageObject.SetString("waveNum", KFGRI.GunGameWavesCurrent $"/?");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (KFGRI.IsBossWave())
|
||||||
{
|
{
|
||||||
PriorityMessageObject.SetString("waveNum", class'KFGFxHUD_WaveInfo'.default.BossWaveString);
|
PriorityMessageObject.SetString("waveNum", class'KFGFxHUD_WaveInfo'.default.BossWaveString);
|
||||||
}
|
}
|
||||||
@ -1091,6 +1133,14 @@ function UpdateGoompaCounterWidget(int value, int max)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function UpdateGunGameWidget(int score, int max_score, int level, int max_level)
|
||||||
|
{
|
||||||
|
if (GunGameWidget != none)
|
||||||
|
{
|
||||||
|
GunGameWidget.SetData(score, max_score, level, max_level);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//==============================================================
|
//==============================================================
|
||||||
// Input
|
// Input
|
||||||
//==============================================================
|
//==============================================================
|
||||||
@ -1441,6 +1491,8 @@ DefaultProperties
|
|||||||
bAutoPlay=true
|
bAutoPlay=true
|
||||||
bIsSpectating=false
|
bIsSpectating=false
|
||||||
|
|
||||||
|
bLastGunGameVisibility=true
|
||||||
|
|
||||||
WidgetBindings.Add((WidgetName="ObjectiveContainer",WidgetClass=class'KFGFxHUD_ObjectiveConatiner'))
|
WidgetBindings.Add((WidgetName="ObjectiveContainer",WidgetClass=class'KFGFxHUD_ObjectiveConatiner'))
|
||||||
WidgetBindings.Add((WidgetName="SpectatorInfoWidget",WidgetClass=class'KFGFxHUD_SpectatorInfo'))
|
WidgetBindings.Add((WidgetName="SpectatorInfoWidget",WidgetClass=class'KFGFxHUD_SpectatorInfo'))
|
||||||
WidgetBindings.Add((WidgetName="PlayerStatWidgetMC",WidgetClass=class'KFGFxHUD_PlayerStatus'))
|
WidgetBindings.Add((WidgetName="PlayerStatWidgetMC",WidgetClass=class'KFGFxHUD_PlayerStatus'))
|
||||||
@ -1465,6 +1517,7 @@ DefaultProperties
|
|||||||
WidgetBindings.Add((WidgetName="bossHealthBar", WidgetClass=class'KFGFxWidget_BossHealthBar'))
|
WidgetBindings.Add((WidgetName="bossHealthBar", WidgetClass=class'KFGFxWidget_BossHealthBar'))
|
||||||
WidgetBindings.Add((WidgetName="mapTextWidget", WidgetClass=class'KFGFxWidget_MapText'))
|
WidgetBindings.Add((WidgetName="mapTextWidget", WidgetClass=class'KFGFxWidget_MapText'))
|
||||||
WidgetBindings.Add((WidgetName="counterMapTextWidget", WidgetClass=class'KFGFxWidget_MapCounterText'))
|
WidgetBindings.Add((WidgetName="counterMapTextWidget", WidgetClass=class'KFGFxWidget_MapCounterText'))
|
||||||
|
WidgetBindings.ADD((WidgetName="GunGameContainer", WidgetClass=class'KFGFxWidget_GunGame'));
|
||||||
|
|
||||||
|
|
||||||
SpecialWaveIconPath(AT_Clot)="UI_Endless_TEX.ZEDs.UI_ZED_Endless_Cyst"
|
SpecialWaveIconPath(AT_Clot)="UI_Endless_TEX.ZEDs.UI_ZED_Endless_Cyst"
|
||||||
|
@ -25,53 +25,68 @@ function LocalizeContainer()
|
|||||||
GetObject("basicLoadoutTextField").SetString("text", BasicLoadoutString);
|
GetObject("basicLoadoutTextField").SetString("text", BasicLoadoutString);
|
||||||
}
|
}
|
||||||
|
|
||||||
function UpdateDetails( class<KFPerk> PerkClass)
|
function UpdateDetailsInternal(class<KFPerk> PerkClass, KFPlayerController KFPC, byte WeaponIdx, byte GrenadeIdx)
|
||||||
{
|
{
|
||||||
local GFxObject DetailsProvider;
|
local GFxObject DetailsProvider;
|
||||||
local KFPlayerController KFPC;
|
|
||||||
local array<string> WeaponNames;
|
local array<string> WeaponNames;
|
||||||
local array<string> WeaponSources;
|
local array<string> WeaponSources;
|
||||||
local int i;
|
local int i;
|
||||||
|
|
||||||
DetailsProvider = CreateObject( "Object" );
|
DetailsProvider = CreateObject( "Object" );
|
||||||
|
|
||||||
|
DetailsProvider.SetString( "ExperienceMessage", ExperienceString @ KFPC.GetPerkXP(PerkClass) );
|
||||||
|
|
||||||
|
if(PerkClass.default.PrimaryWeaponDef != none)
|
||||||
|
{
|
||||||
|
AddWeaponInfo(WeaponNames, WeaponSources, PerkClass.static.GetPrimaryWeaponName(WeaponIdx), PerkClass.static.GetPrimaryWeaponImagePath(WeaponIdx));
|
||||||
|
}
|
||||||
|
|
||||||
|
if(PerkClass.default.SecondaryWeaponDef != none)
|
||||||
|
{
|
||||||
|
AddWeaponInfo(WeaponNames, WeaponSources, PerkClass.default.SecondaryWeaponDef.static.GetItemName(), PerkClass.default.SecondaryWeaponDef.static.GetImagePath());
|
||||||
|
}
|
||||||
|
if(PerkClass.default.KnifeWeaponDef != none)
|
||||||
|
{
|
||||||
|
AddWeaponInfo(WeaponNames, WeaponSources, PerkClass.default.KnifeWeaponDef.static.GetItemName(), PerkClass.default.KnifeWeaponDef.static.GetImagePath());
|
||||||
|
}
|
||||||
|
if(PerkClass.default.GrenadeWeaponDef != none)
|
||||||
|
{
|
||||||
|
AddWeaponInfo(WeaponNames, WeaponSources, PerkClass.static.GetGrenadeWeaponName(GrenadeIdx), PerkClass.static.GetGrenadeWeaponImagePath(GrenadeIdx));
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < WeaponNames.length; i++)
|
||||||
|
{
|
||||||
|
DetailsProvider.SetString( "WeaponName" $ i, WeaponNames[i] );
|
||||||
|
DetailsProvider.SetString( "WeaponImage" $ i, "img://"$WeaponSources[i] );
|
||||||
|
}
|
||||||
|
|
||||||
|
DetailsProvider.SetString( "EXPAction1", PerkClass.default.EXPAction1 );
|
||||||
|
DetailsProvider.SetString( "EXPAction2", PerkClass.default.EXPAction2 );
|
||||||
|
|
||||||
|
DetailsProvider.SetBool("ShowPrimaryWeaponSelectors", PerkClass.static.CanChoosePrimaryWeapon());
|
||||||
|
DetailsProvider.SetBool("ShowGrenadeSelectors", PerkClass.static.CanChooseGrenade());
|
||||||
|
|
||||||
|
SetObject( "detailsData", DetailsProvider );
|
||||||
|
}
|
||||||
|
|
||||||
|
function UpdateDetails(class<KFPerk> PerkClass, byte SelectedSkills[`MAX_PERK_SKILLS], bool IsChoosingPrev, bool IsChoosingNext)
|
||||||
|
{
|
||||||
|
local KFPlayerController KFPC;
|
||||||
|
local byte WeaponIdx, GrenadeIdx;
|
||||||
|
|
||||||
KFPC = KFPlayerController( GetPC() );
|
KFPC = KFPlayerController( GetPC() );
|
||||||
|
|
||||||
if ( KFPC != none)
|
if ( KFPC == none)
|
||||||
{
|
{
|
||||||
if(KFPC != none)
|
return;
|
||||||
{
|
|
||||||
DetailsProvider.SetString( "ExperienceMessage", ExperienceString @ KFPC.GetPerkXP(PerkClass) );
|
|
||||||
}
|
|
||||||
|
|
||||||
if(PerkClass.default.PrimaryWeaponDef != none)
|
|
||||||
{
|
|
||||||
AddWeaponInfo(WeaponNames, WeaponSources, PerkClass.default.PrimaryWeaponDef.static.GetItemName(), PerkClass.default.PrimaryWeaponDef.static.GetImagePath());
|
|
||||||
}
|
|
||||||
if(PerkClass.default.SecondaryWeaponDef != none)
|
|
||||||
{
|
|
||||||
AddWeaponInfo(WeaponNames, WeaponSources, PerkClass.default.SecondaryWeaponDef.static.GetItemName(), PerkClass.default.SecondaryWeaponDef.static.GetImagePath());
|
|
||||||
}
|
|
||||||
if(PerkClass.default.KnifeWeaponDef != none)
|
|
||||||
{
|
|
||||||
AddWeaponInfo(WeaponNames, WeaponSources, PerkClass.default.KnifeWeaponDef.static.GetItemName(), PerkClass.default.KnifeWeaponDef.static.GetImagePath());
|
|
||||||
}
|
|
||||||
if(PerkClass.default.GrenadeWeaponDef != none)
|
|
||||||
{
|
|
||||||
AddWeaponInfo(WeaponNames, WeaponSources, PerkClass.default.GrenadeWeaponDef.static.GetItemName(), PerkClass.default.GrenadeWeaponDef.static.GetImagePath());
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0; i < WeaponNames.length; i++)
|
|
||||||
{
|
|
||||||
DetailsProvider.SetString( "WeaponName" $ i, WeaponNames[i] );
|
|
||||||
DetailsProvider.SetString( "WeaponImage" $ i, "img://"$WeaponSources[i] );
|
|
||||||
}
|
|
||||||
|
|
||||||
DetailsProvider.SetString( "EXPAction1", PerkClass.default.EXPAction1 );
|
|
||||||
DetailsProvider.SetString( "EXPAction2", PerkClass.default.EXPAction2 );
|
|
||||||
|
|
||||||
SetObject( "detailsData", DetailsProvider );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
WeaponIdx = 0;
|
||||||
|
GrenadeIdx = 0;
|
||||||
|
|
||||||
|
UpdateAndGetCurrentWeaponIndexes(PerkClass, KFPC, WeaponIdx, GrenadeIdx, SelectedSkills, IsChoosingPrev, IsChoosingNext);
|
||||||
|
|
||||||
|
UpdateDetailsInternal(PerkClass, KFPC, WeaponIdx, GrenadeIdx);
|
||||||
}
|
}
|
||||||
|
|
||||||
function AddWeaponInfo(out array<string> WeaponNames, out array<string> WeaponSources, string WeaponName, string WeaponSource)
|
function AddWeaponInfo(out array<string> WeaponNames, out array<string> WeaponSources, string WeaponName, string WeaponSource)
|
||||||
@ -108,4 +123,12 @@ function UpdatePassives(Class<KFPerk> PerkClass)
|
|||||||
SetObject( "passivesData", PassivesProvider );
|
SetObject( "passivesData", PassivesProvider );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function UpdateAndGetCurrentWeaponIndexes(class<KFPerk> PerkClass, KFPlayerController KFPC, out byte WeaponIdx, out byte GrenadeIdx
|
||||||
|
, byte SelectedSkills[`MAX_PERK_SKILLS], bool IsChoosingPrev, bool IsChoosingNext)
|
||||||
|
{
|
||||||
|
if (PerkClass.Name == 'KFPerk_Survivalist')
|
||||||
|
{
|
||||||
|
WeaponIdx = KFPC.CurrentPerk.SetWeaponSelectedIndex(KFPC.SurvivalPerkWeapIndex);
|
||||||
|
GrenadeIdx = KFPC.CurrentPerk.SetGrenadeSelectedIndexUsingSkills(KFPC.SurvivalPerkGrenIndex, SelectedSkills, IsChoosingPrev, IsChoosingNext);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -14,6 +14,14 @@ var localized string YourVoteString;
|
|||||||
var localized string TopVotesString;
|
var localized string TopVotesString;
|
||||||
var string MapVoteString; //localized in parent and parent passes it to this class
|
var string MapVoteString; //localized in parent and parent passes it to this class
|
||||||
|
|
||||||
|
// Maps to skip
|
||||||
|
const MapBiolapse = 'KF-Biolapse';
|
||||||
|
const MapNightmare = 'KF-Nightmare';
|
||||||
|
const MapPowerCore = 'KF-PowerCore_Holdout';
|
||||||
|
const MapDescent = 'KF-TheDescent';
|
||||||
|
const MapKrampus = 'KF-KrampusLair';
|
||||||
|
const MapSteam = 'KF-SteamFortress';
|
||||||
|
|
||||||
//==============================================================
|
//==============================================================
|
||||||
// Initialization
|
// Initialization
|
||||||
//==============================================================
|
//==============================================================
|
||||||
@ -47,36 +55,46 @@ function SetMapOptions()
|
|||||||
local bool IsWeeklyMode;
|
local bool IsWeeklyMode;
|
||||||
local bool IsBrokenTrader;
|
local bool IsBrokenTrader;
|
||||||
local bool IsBossRush;
|
local bool IsBossRush;
|
||||||
|
local bool IsGunGame;
|
||||||
|
local bool bShouldSkipMaps;
|
||||||
|
local name MapName;
|
||||||
|
|
||||||
KFGRI = KFGameReplicationInfo(GetPC().WorldInfo.GRI);
|
KFGRI = KFGameReplicationInfo(GetPC().WorldInfo.GRI);
|
||||||
|
|
||||||
|
bShouldSkipMaps = false;
|
||||||
Counter = 0;
|
Counter = 0;
|
||||||
|
|
||||||
if(KFGRI != none && KFGRI.VoteCollector != none)
|
if(KFGRI != none && KFGRI.VoteCollector != none)
|
||||||
{
|
{
|
||||||
ServerMapList = KFGRI.VoteCollector.MapList;
|
ServerMapList = KFGRI.VoteCollector.MapList;
|
||||||
IsWeeklyMode = KFGRI.bIsWeeklyMode;
|
IsWeeklyMode = KFGRI.bIsWeeklyMode;
|
||||||
IsBrokenTrader = KFGRI.CurrentWeeklyIndex == 11;
|
IsBrokenTrader = KFGRI.CurrentWeeklyIndex == 11;
|
||||||
IsBossRush = KFGRI.CurrentWeeklyIndex == 14;
|
IsBossRush = KFGRI.CurrentWeeklyIndex == 14;
|
||||||
|
IsGunGame = KFGRI.CurrentWeeklyIndex == 16;
|
||||||
|
|
||||||
|
bShouldSkipMaps = IsWeeklyMode && (IsBrokenTrader || IsBossRush || IsGunGame);
|
||||||
|
|
||||||
//gfx
|
//gfx
|
||||||
MapList = CreateArray();
|
MapList = CreateArray();
|
||||||
|
|
||||||
for (i = 0; i < ServerMapList.length; i++)
|
for (i = 0; i < ServerMapList.length; i++)
|
||||||
{
|
{
|
||||||
if ( IsWeeklyMode && (IsBrokenTrader || IsBossRush) && ( ServerMapList[i] == "KF-Biolapse" ||
|
MapName = name(ServerMapList[i]);
|
||||||
ServerMapList[i] == "KF-Nightmare" ||
|
if ( bShouldSkipMaps && ( MapName == MapBiolapse ||
|
||||||
ServerMapList[i] == "KF-PowerCore_Holdout" ||
|
MapName == MapNightmare ||
|
||||||
ServerMapList[i] == "KF-TheDescent" ||
|
MapName == MapPowerCore ||
|
||||||
ServerMapList[i] == "KF-KrampusLair"))
|
MapName == MapDescent ||
|
||||||
|
MapName == MapKrampus))
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Temporary removal of SteamFrotress for BossRush */
|
/* Temporary removal of SteamFrotress for BossRush */
|
||||||
if (IsWeeklyMode && IsBossRush && ServerMapList[i] == "KF-SteamFortress")
|
if (IsWeeklyMode && IsBossRush && MapName == MapSteam)
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
/**/
|
/* */
|
||||||
|
|
||||||
MapObject = CreateObject("Object");
|
MapObject = CreateObject("Object");
|
||||||
MapObject.SetString("label", class'KFCommon_LocalizedStrings'.static.GetFriendlyMapName(ServerMapList[i]) );
|
MapObject.SetString("label", class'KFCommon_LocalizedStrings'.static.GetFriendlyMapName(ServerMapList[i]) );
|
||||||
|
@ -0,0 +1,27 @@
|
|||||||
|
class KFGFxSpecialEventObjectivesContainer_Summer2022 extends KFGFxSpecialEventObjectivesContainer;
|
||||||
|
|
||||||
|
function Initialize(KFGFxObject_Menu NewParentMenu)
|
||||||
|
{
|
||||||
|
super.Initialize(NewParentMenu);
|
||||||
|
}
|
||||||
|
|
||||||
|
DefaultProperties
|
||||||
|
{
|
||||||
|
ObjectiveIconURLs[0] = "Summer2022_UI.UI_Objectives_Summer2022_Not_the_best_tourists" // Kill 1500 Zeds on any map or mode
|
||||||
|
ObjectiveIconURLs[1] = "Summer2022_UI.UI_Objectives_Summer2022_Splashdown" // Complete the Weekly on Rig
|
||||||
|
ObjectiveIconURLs[2] = "Summer2022_UI.UI_Objectives_Summer2022_Top_Surfer" // Complete 100 waves on Rig
|
||||||
|
ObjectiveIconURLs[3] = "Summer2022_UI.UI_Objectives_Summer2022_Overboard" // Throw 50 Zeds to the sea on Rig
|
||||||
|
ObjectiveIconURLs[4] = "Summer2022_UI.UI_Objectives_Summer2022_Wide_wide_sea" // Complete wave 15 on Endless Hard or higher difficulty on Rig
|
||||||
|
|
||||||
|
//defaults
|
||||||
|
AllCompleteRewardIconURL="CHR_DeepSeaUniform_Item_TEX.trident.deepseatrident_precious"
|
||||||
|
ChanceDropIconURLs[0]="CHR_CosmeticSet_SS_01_ItemTex.Sideshow_Prize_Ticket"
|
||||||
|
ChanceDropIconURLs[1]="CHR_CosmeticSet_SS_01_ItemTex.SideshowGoldenTicket_Small"
|
||||||
|
IconURL="Summer2022_UI.KF2_Summer_2022_Tidal_Terror"
|
||||||
|
|
||||||
|
UsesProgressList[0] = true
|
||||||
|
UsesProgressList[1] = false
|
||||||
|
UsesProgressList[2] = true
|
||||||
|
UsesProgressList[3] = true
|
||||||
|
UsesProgressList[4] = false
|
||||||
|
}
|
@ -348,11 +348,9 @@ function UpdateOverviewInGame()
|
|||||||
bCustomLength = false; //not using these now
|
bCustomLength = false; //not using these now
|
||||||
bCustomDifficulty = false;
|
bCustomDifficulty = false;
|
||||||
|
|
||||||
|
|
||||||
KFGRI = KFGameReplicationInfo(GetPC().WorldInfo.GRI);
|
KFGRI = KFGameReplicationInfo(GetPC().WorldInfo.GRI);
|
||||||
if(KFGRI != none)
|
if(KFGRI != none)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (KFGRI != none && KFGRI.GameClass != none && !KFGRI.GameClass.Static.GetShouldShowLength())
|
if (KFGRI != none && KFGRI.GameClass != none && !KFGRI.GameClass.Static.GetShouldShowLength())
|
||||||
{
|
{
|
||||||
HideLengthInfo();
|
HideLengthInfo();
|
||||||
@ -372,19 +370,30 @@ function UpdateOverviewInGame()
|
|||||||
}
|
}
|
||||||
|
|
||||||
CurrentLengthIndex = KFGRI.GameLength;
|
CurrentLengthIndex = KFGRI.GameLength;
|
||||||
if(LastLengthIndex != CurrentLengthIndex)
|
|
||||||
{
|
if (KFGRI.bIsWeeklyMode && KFGRI.CurrentWeeklyIndex == 16)
|
||||||
// don't show the length category in objective mode
|
{
|
||||||
if (KFGRI.GameClass.Name == ObjectiveClassName)
|
UpdateLength(Class'KFCommon_LocalizedStrings'.default.SpecialLengthString);
|
||||||
{
|
|
||||||
UpdateLength("");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
UpdateLength(bCustomLength ? Class'KFCommon_LocalizedStrings'.default.CustomString : class'KFCommon_LocalizedStrings'.static.GetLengthString(CurrentLengthIndex));
|
|
||||||
}
|
|
||||||
LastLengthIndex = CurrentLengthIndex;
|
LastLengthIndex = CurrentLengthIndex;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (LastLengthIndex != CurrentLengthIndex)
|
||||||
|
{
|
||||||
|
// don't show the length category in objective mode
|
||||||
|
if (KFGRI.GameClass.Name == ObjectiveClassName)
|
||||||
|
{
|
||||||
|
UpdateLength("");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
UpdateLength(bCustomLength ? Class'KFCommon_LocalizedStrings'.default.CustomString : class'KFCommon_LocalizedStrings'.static.GetLengthString(CurrentLengthIndex));
|
||||||
|
}
|
||||||
|
|
||||||
|
LastLengthIndex = CurrentLengthIndex;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
UpdateServerType( class'KFCommon_LocalizedStrings'.static.GetServerTypeString(int(KFGRI.bCustom)) );
|
UpdateServerType( class'KFCommon_LocalizedStrings'.static.GetServerTypeString(int(KFGRI.bCustom)) );
|
||||||
|
|
||||||
|
@ -182,31 +182,40 @@ function FillWhatsNew()
|
|||||||
local SWhatsNew item;
|
local SWhatsNew item;
|
||||||
WhatsNewItems.Remove(0, WhatsNewItems.Length);
|
WhatsNewItems.Remove(0, WhatsNewItems.Length);
|
||||||
// Latest Update
|
// Latest Update
|
||||||
item = SetWhatsNewItem("img://UI_WhatsNew.UI_WhatsNew_Christmas_ChopTilYouDrop", "LatestUpdate", "http://www.tripwireinteractive.com/redirect/KF2LatestUpdate/");
|
item = SetWhatsNewItem("img://UI_WhatsNew.UI_WhatsNew_Summer2022_TidalTerror", "LatestUpdate", "http://www.tripwireinteractive.com/redirect/KF2LatestUpdate/");
|
||||||
WhatsNewItems.AddItem(item);
|
WhatsNewItems.AddItem(item);
|
||||||
// KF2 Armory Season Pass 2021
|
// KF2 Armory Season Pass 2022
|
||||||
item = SetWhatsNewItem("img://UI_WhatsNew.UI_WhatsNew_Spring_Armory_Season_Pass", "ArmorySeasonPass", "https://store.steampowered.com/app/1524820/Killing_Floor_2__Armory_Season_Pass");
|
item = SetWhatsNewItem("img://UI_WhatsNew.UI_WhatsNew_Summer2022_ArmorySeasonPassII", "ArmorySeasonPass", "https://store.steampowered.com/app/1914490/KF2__Season_Pass_2022");
|
||||||
WhatsNewItems.AddItem(item);
|
WhatsNewItems.AddItem(item);
|
||||||
// Featured Time Limited Item
|
// Featured Time Limited Item
|
||||||
item = SetWhatsNewItem("img://UI_WhatsNew.UI_WhatsNew_Christmas_PremiumTicket", "FeaturedEventItem", "https://store.steampowered.com/buyitem/232090/5588");
|
item = SetWhatsNewItem("img://UI_WhatsNew.UI_WhatsNew_SS_PremiumTicket", "FeaturedEventItem", "https://store.steampowered.com/buyitem/232090/4928");
|
||||||
WhatsNewItems.AddItem(item);
|
WhatsNewItems.AddItem(item);
|
||||||
// Featured Full Gear
|
// Featured Full Gear
|
||||||
item = SetWhatsNewItem("img://UI_WhatsNew.UI_WhatsNew_Xmas_Holiday_Shopper", "FeaturedItemBundle", "https://store.steampowered.com/buyitem/232090/9262");
|
item = SetWhatsNewItem("img://UI_WhatsNew.UI_WhatsNew_Summer2022_UltimateEdition", "FeaturedItemBundle", "https://store.steampowered.com/buyitem/232090/9283");
|
||||||
|
WhatsNewItems.AddItem(item);
|
||||||
|
// Featured Weapon Skin Bundle
|
||||||
|
item = SetWhatsNewItem("img://UI_WhatsNew.UI_WhatsNew_Summer2022_NeonMKVIII_Weapon_Skin", "FeaturedItemBundle", "https://store.steampowered.com/buyitem/232090/9362");
|
||||||
|
WhatsNewItems.AddItem(item);
|
||||||
|
// Featured Weapon Skin Bundle
|
||||||
|
item = SetWhatsNewItem("img://UI_WhatsNew.UI_WhatsNew_Summer2022_Classic_Weapon_Skin", "FeaturedItemBundle", "https://store.steampowered.com/buyitem/232090/9363");
|
||||||
|
WhatsNewItems.AddItem(item);
|
||||||
|
// Featured Weapon Skin Bundle
|
||||||
|
item = SetWhatsNewItem("img://UI_WhatsNew.UI_WhatsNew_Summer2022_DeepSea_Weapon_Skin", "FeaturedItemBundle", "https://store.steampowered.com/buyitem/232090/9364");
|
||||||
|
WhatsNewItems.AddItem(item);
|
||||||
|
// Featured Weapon Skin Bundle
|
||||||
|
item = SetWhatsNewItem("img://UI_WhatsNew.UI_WhatsNew_Summer2022_Chameleon_Weapon_Skin", "FeaturedItemBundle", "https://store.steampowered.com/buyitem/232090/9365");
|
||||||
WhatsNewItems.AddItem(item);
|
WhatsNewItems.AddItem(item);
|
||||||
// Featured Outfit Bundle
|
// Featured Outfit Bundle
|
||||||
item = SetWhatsNewItem("img://UI_WhatsNew.UI_WhatsNew_Christmas_Shopping_Uniforms", "FeaturedItemBundle", "https://store.steampowered.com/buyitem/232090/9263");
|
item = SetWhatsNewItem("img://UI_WhatsNew.UI_WhatsNew_Summer2022_DeepSea_Explorer_Uniforms", "FeaturedItemBundle", "https://store.steampowered.com/buyitem/232090/9366");
|
||||||
WhatsNewItems.AddItem(item);
|
WhatsNewItems.AddItem(item);
|
||||||
// Featured Weapon Skin Bundle
|
// Featured Weapon
|
||||||
item = SetWhatsNewItem("img://UI_WhatsNew.UI_WhatsNew_Xmas_Christmas", "FeaturedItemBundle", "https://store.steampowered.com/buyitem/232090/9264");
|
item = SetWhatsNewItem("img://UI_WhatsNew.UI_WhatsNew_Summer2022_ReductoRay", "FeaturedItemBundle", "https://store.steampowered.com/buyitem/232090/9367");
|
||||||
WhatsNewItems.AddItem(item);
|
WhatsNewItems.AddItem(item);
|
||||||
// Featured Weapon Skin Bundle
|
// Featured Weapon
|
||||||
item = SetWhatsNewItem("img://UI_WhatsNew.UI_WhatsNew_Xmas_Alchemist_Weapon_Skin", "FeaturedItemBundle", "https://store.steampowered.com/buyitem/232090/9265");
|
item = SetWhatsNewItem("img://UI_WhatsNew.UI_WhatsNew_Summer2022_Sentinel","FeaturedItemBundle","https://store.steampowered.com/buyitem/232090/9368");
|
||||||
WhatsNewItems.AddItem(item);
|
|
||||||
// Featured Cosmetic Bundle
|
|
||||||
item = SetWhatsNewItem("img://UI_WhatsNew.UI_WhatsNew_Xmas_Alchemist","FeaturedItemBundle","https://store.steampowered.com/buyitem/232090/9266");
|
|
||||||
WhatsNewItems.AddItem(item);
|
WhatsNewItems.AddItem(item);
|
||||||
// Featured Weapon Bundle
|
// Featured Weapon Bundle
|
||||||
item = SetWhatsNewItem("img://UI_WhatsNew.UI_WhatsNew_XMAS_Doshinegun", "FeaturedItemBundle", "https://store.steampowered.com/buyitem/232090/9267");
|
item = SetWhatsNewItem("img://UI_WhatsNew.UI_WhatsNew_Summer2022_Weaponsbundle", "FeaturedItemBundle", "https://store.steampowered.com/buyitem/232090/9369");
|
||||||
WhatsNewItems.AddItem(item);
|
WhatsNewItems.AddItem(item);
|
||||||
// Misc Community Links
|
// Misc Community Links
|
||||||
item=SetWhatsNewItem("img://UI_WhatsNew.UI_WhatsNew_CommunityHub", "Jaegorhorn", "https://steamcommunity.com/app/232090");
|
item=SetWhatsNewItem("img://UI_WhatsNew.UI_WhatsNew_CommunityHub", "Jaegorhorn", "https://steamcommunity.com/app/232090");
|
||||||
|
@ -271,11 +271,16 @@ function FilterWeeklyMaps(out array<string> List)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
`Log("OPTIONS: Skipping Maps");
|
||||||
|
|
||||||
// Scavenger index = 11
|
// Scavenger index = 11
|
||||||
// BossRush index = 14
|
// BossRush index = 14
|
||||||
|
// GunGame index = 16
|
||||||
WeeklyIndex = class'KFGameEngine'.static.GetWeeklyEventIndexMod();
|
WeeklyIndex = class'KFGameEngine'.static.GetWeeklyEventIndexMod();
|
||||||
if (WeeklyIndex == 11 || WeeklyIndex == 14)
|
if (WeeklyIndex == 11 || WeeklyIndex == 14 || WeeklyIndex == 16)
|
||||||
{
|
{
|
||||||
|
`Log("OPTIONS: Inside, removing maps");
|
||||||
|
|
||||||
List.RemoveItem("KF-Biolapse");
|
List.RemoveItem("KF-Biolapse");
|
||||||
List.RemoveItem("KF-Nightmare");
|
List.RemoveItem("KF-Nightmare");
|
||||||
List.RemoveItem("KF-PowerCore_Holdout");
|
List.RemoveItem("KF-PowerCore_Holdout");
|
||||||
|
@ -447,21 +447,25 @@ DefaultProperties
|
|||||||
|
|
||||||
XboxFilterExceptions[0]="Wasteland Bundle" // Wasteland Outfit Bundle
|
XboxFilterExceptions[0]="Wasteland Bundle" // Wasteland Outfit Bundle
|
||||||
|
|
||||||
FeaturedItemIDs[0]=7944 //Whatsnew Gold Ticket
|
FeaturedItemIDs[0]=8178 //Whatsnew Gold Ticket
|
||||||
FeaturedItemIDs[1]=9262
|
FeaturedItemIDs[1]=9369
|
||||||
FeaturedItemIDs[2]=9263
|
FeaturedItemIDs[2]=9367
|
||||||
FeaturedItemIDs[3]=9264
|
FeaturedItemIDs[3]=9368
|
||||||
FeaturedItemIDs[4]=9265
|
FeaturedItemIDs[4]=9366
|
||||||
FeaturedItemIDs[5]=9266
|
FeaturedItemIDs[5]=9364
|
||||||
FeaturedItemIDs[6]=9267
|
FeaturedItemIDs[6]=9362
|
||||||
|
FeaturedItemIDs[7]=9363
|
||||||
|
FeaturedItemIDs[8]=9365
|
||||||
|
|
||||||
ConsoleFeaturedItemIDs[0]=7947 //Whatsnew Gold Ticket PSN
|
ConsoleFeaturedItemIDs[0]=8181 //Whatsnew Gold Ticket PSN
|
||||||
ConsoleFeaturedItemIDs[1]=9262
|
ConsoleFeaturedItemIDs[1]=9369
|
||||||
ConsoleFeaturedItemIDs[2]=9263
|
ConsoleFeaturedItemIDs[2]=9367
|
||||||
ConsoleFeaturedItemIDs[3]=9264
|
ConsoleFeaturedItemIDs[3]=9368
|
||||||
ConsoleFeaturedItemIDs[4]=9265
|
ConsoleFeaturedItemIDs[4]=9366
|
||||||
ConsoleFeaturedItemIDs[5]=9266
|
ConsoleFeaturedItemIDs[5]=9364
|
||||||
ConsoleFeaturedItemIDs[6]=9267
|
ConsoleFeaturedItemIDs[6]=9362
|
||||||
|
ConsoleFeaturedItemIDs[7]=9363
|
||||||
|
ConsoleFeaturedItemIDs[8]=9365
|
||||||
|
|
||||||
MaxFeaturedItems=5
|
MaxFeaturedItems=5
|
||||||
}
|
}
|
@ -34,8 +34,11 @@ function UpdateGameInfo()
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Show the upcoming wave number for every wave except the boss wave
|
if (KFGRI.bIsWeeklyMode && KFGRI.CurrentWeeklyIndex == 16)
|
||||||
if (KFGRI.default.bEndlessMode)
|
{
|
||||||
|
FinalWaveString = WaveString @ (KFGRI.GunGameWavesCurrent) $"/?";
|
||||||
|
}
|
||||||
|
else if (KFGRI.default.bEndlessMode) // Show the upcoming wave number for every wave except the boss wave
|
||||||
{
|
{
|
||||||
// Show wave number, since there is no max
|
// Show wave number, since there is no max
|
||||||
FinalWaveString = WaveString @ (KFGRI.WaveNum);
|
FinalWaveString = WaveString @ (KFGRI.WaveNum);
|
||||||
|
@ -31,14 +31,30 @@ function bool PopulateData()
|
|||||||
{
|
{
|
||||||
local GFxObject DataObject;
|
local GFxObject DataObject;
|
||||||
local KFWeeklyOutbreakInformation WeeklyInfo;
|
local KFWeeklyOutbreakInformation WeeklyInfo;
|
||||||
|
|
||||||
local bool bWeeklyComplete;
|
local bool bWeeklyComplete;
|
||||||
|
local int WeeklyIndex;
|
||||||
|
|
||||||
bWeeklyComplete = KFPC.IsWeeklyEventComplete();
|
bWeeklyComplete = KFPC.IsWeeklyEventComplete();
|
||||||
|
WeeklyIndex = -1;
|
||||||
|
|
||||||
if(bWeeklyComplete != bLastWeeklyComplete || !bInitialDataPopulated)
|
if(bWeeklyComplete != bLastWeeklyComplete || !bInitialDataPopulated)
|
||||||
{
|
{
|
||||||
WeeklyInfo = class'KFMission_LocalizedStrings'.static.GetCurrentWeeklyOutbreakInfo();
|
if (KFPC.WorldInfo.NetMode == NM_Client)
|
||||||
|
{
|
||||||
|
if (KFPC != none && KFGameReplicationInfo(KFPC.WorldInfo.GRI) != none)
|
||||||
|
{
|
||||||
|
WeeklyIndex = KFGameReplicationInfo(KFPC.WorldInfo.GRI).CurrentWeeklyIndex;
|
||||||
|
WeeklyInfo = class'KFMission_LocalizedStrings'.static.GetWeeklyOutbreakInfoByIndex(WeeklyIndex);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
GetPC().SetTimer(0.5f, false, nameof(PopulateData));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
WeeklyInfo = class'KFMission_LocalizedStrings'.static.GetCurrentWeeklyOutbreakInfo();
|
||||||
|
}
|
||||||
|
|
||||||
DataObject = CreateObject("Object");
|
DataObject = CreateObject("Object");
|
||||||
if(WeeklyInfo == none)
|
if(WeeklyInfo == none)
|
||||||
@ -46,8 +62,9 @@ function bool PopulateData()
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
DataObject.SetString("label", WeeklyInfo.FriendlyName);
|
DataObject.SetString("label", WeeklyInfo.FriendlyName);
|
||||||
if(WeeklyInfo != none && WeeklyInfo.ModifierDescriptions.length > 0)
|
if(WeeklyInfo.ModifierDescriptions.length > 0)
|
||||||
{
|
{
|
||||||
|
`Log("SETTING DESCRIPTION: " $WeeklyInfo.DescriptionStrings[0]);
|
||||||
DataObject.SetString("description", WeeklyInfo.DescriptionStrings[0]);
|
DataObject.SetString("description", WeeklyInfo.DescriptionStrings[0]);
|
||||||
}
|
}
|
||||||
DataObject.SetString("iconPath", "img://"$WeeklyInfo.IconPath);
|
DataObject.SetString("iconPath", "img://"$WeeklyInfo.IconPath);
|
||||||
@ -58,8 +75,14 @@ function bool PopulateData()
|
|||||||
DataObject.SetString("textValue", "");
|
DataObject.SetString("textValue", "");
|
||||||
|
|
||||||
SetObject("weeklyObjectiveData", DataObject);
|
SetObject("weeklyObjectiveData", DataObject);
|
||||||
PopulateModifiers();
|
|
||||||
PopulateRewards();
|
if (WeeklyInfo.ModifierDescriptions.Length > 0)
|
||||||
|
{
|
||||||
|
SetString("weeklyDescription", WeeklyInfo.ModifierDescriptions[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
PopulateModifiers(WeeklyInfo);
|
||||||
|
PopulateRewards(WeeklyInfo, WeeklyIndex);
|
||||||
|
|
||||||
bLastWeeklyComplete = bWeeklyComplete;
|
bLastWeeklyComplete = bWeeklyComplete;
|
||||||
bInitialDataPopulated = true;
|
bInitialDataPopulated = true;
|
||||||
@ -69,24 +92,26 @@ function bool PopulateData()
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
function PopulateModifiers()
|
function PopulateModifiers(KFWeeklyOutbreakInformation WeeklyInfo)
|
||||||
{
|
{
|
||||||
local int i;
|
local int i;
|
||||||
local GFxObject DataObject;
|
local GFxObject DataObject;
|
||||||
local GFxObject DataProvider; //array containing the data objects
|
local GFxObject DataProvider; //array containing the data objects
|
||||||
local KFWeeklyOutbreakInformation WeeklyInfo;
|
|
||||||
|
if (WeeklyInfo == none || (GetPC().WorldInfo.NetMode == NM_Client && KFPC.WorldInfo.GRI == none))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
DataProvider = CreateArray();
|
DataProvider = CreateArray();
|
||||||
|
|
||||||
WeeklyInfo = class'KFMission_LocalizedStrings'.static.GetCurrentWeeklyOutbreakInfo();
|
|
||||||
for (i = 0; i < WeeklyInfo.ModifierDescriptions.length; i++)
|
for (i = 0; i < WeeklyInfo.ModifierDescriptions.length; i++)
|
||||||
{
|
{
|
||||||
DataObject = CreateObject("Object");
|
DataObject = CreateObject("Object");
|
||||||
DataObject.SetString("label", ""); //no lable at the moment
|
DataObject.SetString("label", ""); //no lable at the moment
|
||||||
if(WeeklyInfo != none && WeeklyInfo.ModifierDescriptions.length > 0)
|
|
||||||
{
|
DataObject.SetString("description", WeeklyInfo.ModifierDescriptions[i]);
|
||||||
DataObject.SetString("description", WeeklyInfo.ModifierDescriptions[i]);
|
|
||||||
}
|
|
||||||
//DataObject.SetString("iconPath", "img://"$WeeklyInfo.ModifierIconPaths[i]);
|
//DataObject.SetString("iconPath", "img://"$WeeklyInfo.ModifierIconPaths[i]);
|
||||||
|
|
||||||
DataProvider.SetElementObject(i, DataObject); //add it to the array
|
DataProvider.SetElementObject(i, DataObject); //add it to the array
|
||||||
@ -95,18 +120,21 @@ function PopulateModifiers()
|
|||||||
SetObject("modifiers", DataProvider); //pass to SWF
|
SetObject("modifiers", DataProvider); //pass to SWF
|
||||||
}
|
}
|
||||||
|
|
||||||
function PopulateRewards()
|
function PopulateRewards(KFWeeklyOutbreakInformation WeeklyInfo, int WeeklyIndex)
|
||||||
{
|
{
|
||||||
local int i, ItemCount;
|
local int i, ItemCount;
|
||||||
local GFxObject DataProvider; //array containing the data objects
|
local GFxObject DataProvider; //array containing the data objects
|
||||||
local KFWeeklyOutbreakInformation WeeklyInfo;
|
|
||||||
local GFxObject GfxRewardItem;
|
local GFxObject GfxRewardItem;
|
||||||
|
|
||||||
|
if (WeeklyInfo == none)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
ItemCount = 0;
|
ItemCount = 0;
|
||||||
DataProvider = CreateArray();
|
DataProvider = CreateArray();
|
||||||
|
|
||||||
WeeklyInfo = class'KFMission_LocalizedStrings'.static.GetCurrentWeeklyOutbreakInfo();
|
WeeklyInfo.RewardIDs = class'KFOnlineStatsWrite'.static.GetWeeklyOutbreakRewards(WeeklyIndex);
|
||||||
WeeklyInfo.RewardIDs = class'KFOnlineStatsWrite'.static.GetWeeklyOutbreakRewards();
|
|
||||||
for (i = 0; i < WeeklyInfo.RewardIDs.length; i++)
|
for (i = 0; i < WeeklyInfo.RewardIDs.length; i++)
|
||||||
{
|
{
|
||||||
GfxRewardItem = CreateRewardItem(WeeklyInfo, WeeklyInfo.RewardIDs[i]);
|
GfxRewardItem = CreateRewardItem(WeeklyInfo, WeeklyInfo.RewardIDs[i]);
|
||||||
@ -161,9 +189,9 @@ function GFxObject CreateRewardItem(KFWeeklyOutbreakInformation WeeklyInfo,int I
|
|||||||
function LocalizeMenu()
|
function LocalizeMenu()
|
||||||
{
|
{
|
||||||
local GFxObject TextObject;
|
local GFxObject TextObject;
|
||||||
local KFWeeklyOutbreakInformation WeeklyInfo;
|
// local KFWeeklyOutbreakInformation WeeklyInfo;
|
||||||
|
|
||||||
WeeklyInfo = class'KFMission_LocalizedStrings'.static.GetCurrentWeeklyOutbreakInfo();
|
// WeeklyInfo = class'KFMission_LocalizedStrings'.static.GetCurrentWeeklyOutbreakInfo();
|
||||||
TextObject = CreateObject("Object");
|
TextObject = CreateObject("Object");
|
||||||
// Localize static text
|
// Localize static text
|
||||||
TextObject.SetString("currentModifier", class'KFMission_LocalizedStrings'.default.CurrentWeeklySettingsString);
|
TextObject.SetString("currentModifier", class'KFMission_LocalizedStrings'.default.CurrentWeeklySettingsString);
|
||||||
@ -172,11 +200,11 @@ function LocalizeMenu()
|
|||||||
TextObject.SetString("weekly", class'KFMission_LocalizedStrings'.default.WeeklyString);
|
TextObject.SetString("weekly", class'KFMission_LocalizedStrings'.default.WeeklyString);
|
||||||
TextObject.SetString("overview", class'KFMission_LocalizedStrings'.default.WeeklyOverview);
|
TextObject.SetString("overview", class'KFMission_LocalizedStrings'.default.WeeklyOverview);
|
||||||
TextObject.SetString("vaultDosh", class'KFMission_LocalizedStrings'.default.VaultDoshString);
|
TextObject.SetString("vaultDosh", class'KFMission_LocalizedStrings'.default.VaultDoshString);
|
||||||
|
/*
|
||||||
if(WeeklyInfo != none && WeeklyInfo.ModifierDescriptions.length > 0)
|
if(WeeklyInfo != none && WeeklyInfo.ModifierDescriptions.length > 0)
|
||||||
{
|
{
|
||||||
TextObject.SetString("description", WeeklyInfo.ModifierDescriptions[0]);
|
TextObject.SetString("description", WeeklyInfo.ModifierDescriptions[0]);
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
SetObject("localizedText", TextObject);
|
SetObject("localizedText", TextObject);
|
||||||
}
|
}
|
||||||
|
36
KFGame/Classes/KFGFxWidget_GunGame.uc
Normal file
36
KFGame/Classes/KFGFxWidget_GunGame.uc
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
|
||||||
|
|
||||||
|
//=============================================================================
|
||||||
|
// KFGFxWidget_GunGame
|
||||||
|
//=============================================================================
|
||||||
|
// HUD Widget that displays gun game messages to the player
|
||||||
|
//=============================================================================
|
||||||
|
// Killing Floor 2
|
||||||
|
// Copyright (C) 2022 Tripwire Interactive LLC
|
||||||
|
//
|
||||||
|
//=============================================================================
|
||||||
|
|
||||||
|
class KFGFxWidget_GunGame extends GFxObject;
|
||||||
|
|
||||||
|
function SetData( int score, int max_score, int level, int max_level )
|
||||||
|
{
|
||||||
|
SetString("WeaponLevelSetLocalised", Class'KFCommon_LocalizedStrings'.default.WeaponLevelString);
|
||||||
|
SetString("GunPointsSetLocalised", Class'KFCommon_LocalizedStrings'.default.GunPointsString);
|
||||||
|
|
||||||
|
SetInt("GunGameSetLevel", level);
|
||||||
|
SetInt("GunGameSetMaxLevel", max_level);
|
||||||
|
SetInt("GunGameSetScore", score);
|
||||||
|
SetInt("GunGameSetMaxScore", max_score);
|
||||||
|
}
|
||||||
|
|
||||||
|
function UpdateGunGameVisibility(bool visible)
|
||||||
|
{
|
||||||
|
if (visible)
|
||||||
|
{
|
||||||
|
SetBool("GunGameSetVisibility", true);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SetBool("GunGameSetVisibility", false);
|
||||||
|
}
|
||||||
|
}
|
@ -84,12 +84,15 @@ function UpdateReadyButtonVisibility()
|
|||||||
//sanity check because this is happening
|
//sanity check because this is happening
|
||||||
MyKFPRI = KFPlayerReplicationInfo(GetPC().PlayerReplicationInfo);
|
MyKFPRI = KFPlayerReplicationInfo(GetPC().PlayerReplicationInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(bReadyButtonVisible)
|
if(bReadyButtonVisible)
|
||||||
{
|
{
|
||||||
KFGRI = KFGameReplicationInfo( GetPC().WorldInfo.GRI );
|
KFGRI = KFGameReplicationInfo( GetPC().WorldInfo.GRI );
|
||||||
if ( KFGRI != none )
|
if ( KFGRI != none )
|
||||||
{
|
{
|
||||||
if (KFGRI.bMatchHasBegun && (MyKFPRI != none && MyKFPRI.bHasSpawnedIn && KFGRI.bTraderIsOpen) && !KFGRI.bMatchIsOver && MyKFPRI.GetTeamNum() != 255 )
|
if (KFGRI.bMatchHasBegun
|
||||||
|
&& (MyKFPRI != none && MyKFPRI.bHasSpawnedIn && (KFGRI.bTraderIsOpen || KFGRI.bForceSkipTraderUI))
|
||||||
|
&& !KFGRI.bMatchIsOver && MyKFPRI.GetTeamNum() != 255)
|
||||||
{
|
{
|
||||||
bShowingSkipTrader = !MyKFPRI.bVotedToSkipTraderTime;
|
bShowingSkipTrader = !MyKFPRI.bVotedToSkipTraderTime;
|
||||||
if (bShowingSkipTrader && !ReadyButton.GetBool("visible"))
|
if (bShowingSkipTrader && !ReadyButton.GetBool("visible"))
|
||||||
|
@ -442,6 +442,14 @@ var int SpawnedMonsterProperties[EMonsterProperties];
|
|||||||
*/
|
*/
|
||||||
var transient array< byte > BossRushEnemies;
|
var transient array< byte > BossRushEnemies;
|
||||||
|
|
||||||
|
// Maps to skip
|
||||||
|
const MapBiolapse = 'KF-Biolapse';
|
||||||
|
const MapNightmare = 'KF-Nightmare';
|
||||||
|
const MapPowerCore = 'KF-PowerCore_Holdout';
|
||||||
|
const MapDescent = 'KF-TheDescent';
|
||||||
|
const MapKrampus = 'KF-KrampusLair';
|
||||||
|
const MapSteam = 'KF-SteamFortress';
|
||||||
|
|
||||||
/************************************************************************************
|
/************************************************************************************
|
||||||
* @name Native
|
* @name Native
|
||||||
***********************************************************************************/
|
***********************************************************************************/
|
||||||
@ -1193,14 +1201,7 @@ function ResetPickups( array<KFPickupFactory> PickupList, int NumPickups )
|
|||||||
|
|
||||||
PossiblePickups = PickupList;
|
PossiblePickups = PickupList;
|
||||||
|
|
||||||
if (OutbreakEvent != none && OutbreakEvent.ActiveEvent.bUnlimitedWeaponPickups && KFPickupFactory_Item(PickupList[0]) != none)
|
NumIterations = Min(NumPickups, PickupList.Length - 1);
|
||||||
{
|
|
||||||
NumIterations = Min(NumPickups, PickupList.Length - 1);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
NumIterations = Min(NumPickups, PickupList.Length);
|
|
||||||
}
|
|
||||||
|
|
||||||
for ( i = 0; i < NumIterations; i++ )
|
for ( i = 0; i < NumIterations; i++ )
|
||||||
{
|
{
|
||||||
@ -1267,8 +1268,15 @@ function ActivateNextPickup( KFPickupFactory NextFactory, int RespawnDelay )
|
|||||||
{
|
{
|
||||||
if( NextFactory != none )
|
if( NextFactory != none )
|
||||||
{
|
{
|
||||||
NextFactory.bToBeActivated = true;
|
if (NextFactory.CanUsePickup())
|
||||||
NextFactory.SetTimer( RespawnDelay, , nameof(NextFactory.Reset) );
|
{
|
||||||
|
NextFactory.bToBeActivated = true;
|
||||||
|
NextFactory.SetTimer( RespawnDelay, , nameof(NextFactory.Reset) );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
NextFactory.SetPickupHidden();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1421,6 +1429,14 @@ function RestartPlayer(Controller NewPlayer)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function ResetGunGame(KFPlayerController_WeeklySurvival KFPC_WS)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
function RestartGunGamePlayerWeapon(KFPlayerController_WeeklySurvival KFPC_WS, byte WaveToUse)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
/** Returns a low rating if other players are nearby (spawn will fail) */
|
/** Returns a low rating if other players are nearby (spawn will fail) */
|
||||||
function float RatePlayerStart(PlayerStart P, byte Team, Controller Player)
|
function float RatePlayerStart(PlayerStart P, byte Team, Controller Player)
|
||||||
{
|
{
|
||||||
@ -2895,62 +2911,69 @@ function string GetNextMap()
|
|||||||
{
|
{
|
||||||
local array<string> MapList;
|
local array<string> MapList;
|
||||||
local int i;
|
local int i;
|
||||||
|
local name MapName;
|
||||||
|
|
||||||
if ( bUseMapList && GameMapCycles.Length > 0 )
|
if ( bUseMapList && GameMapCycles.Length > 0 )
|
||||||
|
{
|
||||||
|
if ( MapCycleIndex == INDEX_NONE )
|
||||||
{
|
{
|
||||||
|
MapList = GameMapCycles[ActiveMapCycle].Maps;
|
||||||
|
MapCycleIndex = GetCurrentMapCycleIndex(MapList);
|
||||||
if ( MapCycleIndex == INDEX_NONE )
|
if ( MapCycleIndex == INDEX_NONE )
|
||||||
{
|
{
|
||||||
MapList = GameMapCycles[ActiveMapCycle].Maps;
|
// Assume current map is actually zero
|
||||||
MapCycleIndex = GetCurrentMapCycleIndex(MapList);
|
MapCycleIndex = 0;
|
||||||
if ( MapCycleIndex == INDEX_NONE )
|
|
||||||
{
|
|
||||||
// Assume current map is actually zero
|
|
||||||
MapCycleIndex = 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 0; i < GameMapCycles[ActiveMapCycle].Maps.length; ++i)
|
for (i = 0; i < GameMapCycles[ActiveMapCycle].Maps.length; ++i)
|
||||||
|
{
|
||||||
|
MapCycleIndex = MapCycleIndex + 1 < GameMapCycles[ActiveMapCycle].Maps.length ? (MapCycleIndex + 1) : 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
This could be changed to read replicated values instead of engine ones.
|
||||||
|
*/
|
||||||
|
if (MyKFGRI.IsA('KFGameReplicationInfo_WeeklySurvival'))
|
||||||
{
|
{
|
||||||
MapCycleIndex = MapCycleIndex + 1 < GameMapCycles[ActiveMapCycle].Maps.length ? (MapCycleIndex + 1) : 0;
|
if ((class'KFGameEngine'.static.GetWeeklyEventIndexMod() == 11 || OutbreakEvent.ActiveEvent == OutbreakEvent.SetEvents[11]) || // Scavenger
|
||||||
|
(class'KFGameEngine'.static.GetWeeklyEventIndexMod() == 14 || OutbreakEvent.ActiveEvent == OutbreakEvent.SetEvents[14]) || // Boss Rush
|
||||||
if (MyKFGRI.IsA('KFGameReplicationInfo_WeeklySurvival'))
|
(class'KFGameEngine'.static.GetWeeklyEventIndexMod() == 16 || OutbreakEvent.ActiveEvent == OutbreakEvent.SetEvents[16])) // Gun Game
|
||||||
{
|
{
|
||||||
if ((class'KFGameEngine'.static.GetWeeklyEventIndexMod() == 11 || OutbreakEvent.ActiveEvent == OutbreakEvent.SetEvents[11]) || // Scavenger
|
MapName = name(GameMapCycles[ActiveMapCycle].Maps[MapCycleIndex]);
|
||||||
(class'KFGameEngine'.static.GetWeeklyEventIndexMod() == 14 || OutbreakEvent.ActiveEvent == OutbreakEvent.SetEvents[14])) // Boss Rush
|
|
||||||
{
|
|
||||||
if (GameMapCycles[ActiveMapCycle].Maps[MapCycleIndex] == "KF-Biolapse" ||
|
|
||||||
GameMapCycles[ActiveMapCycle].Maps[MapCycleIndex] == "KF-Nightmare" ||
|
|
||||||
GameMapCycles[ActiveMapCycle].Maps[MapCycleIndex] == "KF-PowerCore_Holdout" ||
|
|
||||||
GameMapCycles[ActiveMapCycle].Maps[MapCycleIndex] == "KF-TheDescent" ||
|
|
||||||
GameMapCycles[ActiveMapCycle].Maps[MapCycleIndex] == "KF-KrampusLair")
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Temporary removal of SteamFrotress for BossRush */
|
if (MapName == MapBiolapse ||
|
||||||
if (class'KFGameEngine'.static.GetWeeklyEventIndexMod() == 14 || OutbreakEvent.ActiveEvent == OutbreakEvent.SetEvents[14] &&
|
MapName == MapNightmare ||
|
||||||
GameMapCycles[ActiveMapCycle].Maps[MapCycleIndex] == "KF-SteamFortress")
|
MapName == MapPowerCore ||
|
||||||
|
MapName == MapDescent ||
|
||||||
|
MapName == MapKrampus)
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
/**/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( IsMapAllowedInCycle(GameMapCycles[ActiveMapCycle].Maps[MapCycleIndex]) )
|
/* Temporary removal of SteamFrotress for BossRush */
|
||||||
|
if (class'KFGameEngine'.static.GetWeeklyEventIndexMod() == 14 || OutbreakEvent.ActiveEvent == OutbreakEvent.SetEvents[14] &&
|
||||||
|
MapName == MapSteam)
|
||||||
{
|
{
|
||||||
SaveConfig();
|
continue;
|
||||||
return GameMapCycles[ActiveMapCycle].Maps[MapCycleIndex];
|
|
||||||
}
|
}
|
||||||
|
/* */
|
||||||
}
|
}
|
||||||
|
|
||||||
return string(WorldInfo.GetPackageName());
|
if ( IsMapAllowedInCycle(GameMapCycles[ActiveMapCycle].Maps[MapCycleIndex]) )
|
||||||
}
|
{
|
||||||
else
|
SaveConfig();
|
||||||
{
|
return GameMapCycles[ActiveMapCycle].Maps[MapCycleIndex];
|
||||||
return string(WorldInfo.GetPackageName());
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return string(WorldInfo.GetPackageName());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return string(WorldInfo.GetPackageName());
|
||||||
|
}
|
||||||
|
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3781,14 +3804,22 @@ function UpdateCurrentMapVoteTime(byte NewTime, optional bool bStartTime);
|
|||||||
function float GetTraderTime()
|
function float GetTraderTime()
|
||||||
{
|
{
|
||||||
local float MapOverride;
|
local float MapOverride;
|
||||||
|
local float TraderTimeModifier;
|
||||||
|
|
||||||
|
TraderTimeModifier = 1.f;
|
||||||
|
|
||||||
|
if (OutbreakEvent != none && OutbreakEvent.ActiveEvent.TraderTimeModifier != 1.f)
|
||||||
|
{
|
||||||
|
TraderTimeModifier = OutbreakEvent.ActiveEvent.TraderTimeModifier;
|
||||||
|
}
|
||||||
|
|
||||||
MapOverride = DifficultyInfo.GetTraderTimeByMap(WorldInfo.GetMapName(true));
|
MapOverride = DifficultyInfo.GetTraderTimeByMap(WorldInfo.GetMapName(true));
|
||||||
if (MapOverride > 0.f)
|
if (MapOverride > 0.f)
|
||||||
{
|
{
|
||||||
return MapOverride;
|
return MapOverride * TraderTimeModifier;
|
||||||
}
|
}
|
||||||
|
|
||||||
return DifficultyInfo.GetTraderTimeByDifficulty();
|
return DifficultyInfo.GetTraderTimeByDifficulty() * TraderTimeModifier;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -60,6 +60,7 @@ var repnotify bool bTraderIsOpen;
|
|||||||
var repnotify bool bWaveIsActive;
|
var repnotify bool bWaveIsActive;
|
||||||
var repnotify bool bWaveStarted;
|
var repnotify bool bWaveStarted;
|
||||||
var bool bIsEndlessPaused;
|
var bool bIsEndlessPaused;
|
||||||
|
var bool bForceSkipTraderUI;
|
||||||
|
|
||||||
/** Replicates at beginning and end of waves to change track / track type */
|
/** Replicates at beginning and end of waves to change track / track type */
|
||||||
var repnotify byte MusicTrackRepCount;
|
var repnotify byte MusicTrackRepCount;
|
||||||
@ -107,6 +108,8 @@ var repnotify PerkAvailableData PerksAvailableData;
|
|||||||
var byte WaveMax; // The "end" wave
|
var byte WaveMax; // The "end" wave
|
||||||
var repnotify byte WaveNum; // The wave we are currently in
|
var repnotify byte WaveNum; // The wave we are currently in
|
||||||
var bool bWaveIsEndless;
|
var bool bWaveIsEndless;
|
||||||
|
var repnotify byte GunGameWavesCurrent;
|
||||||
|
var repnotify bool bWaveGunGameIsFinal;
|
||||||
var int AIRemaining;
|
var int AIRemaining;
|
||||||
var int WaveTotalAICount;
|
var int WaveTotalAICount;
|
||||||
var bool bEndlessMode;
|
var bool bEndlessMode;
|
||||||
@ -358,6 +361,9 @@ var transient bool bIsBrokenTrader;
|
|||||||
************************************/
|
************************************/
|
||||||
var int CurrentWeeklyIndex;
|
var int CurrentWeeklyIndex;
|
||||||
|
|
||||||
|
/** If true, force show skip time between waves ready button */
|
||||||
|
var bool bForceShowSkipTrader;
|
||||||
|
|
||||||
/************************************
|
/************************************
|
||||||
* Steam heartbeat
|
* Steam heartbeat
|
||||||
************************************/
|
************************************/
|
||||||
@ -389,11 +395,12 @@ cpptext
|
|||||||
replication
|
replication
|
||||||
{
|
{
|
||||||
if ( bNetDirty )
|
if ( bNetDirty )
|
||||||
TraderVolume, TraderVolumeCheckType, bTraderIsOpen, NextTrader, WaveNum, bWaveIsEndless, AIRemaining, WaveTotalAICount, bWaveIsActive, MaxHumanCount, bGlobalDamage,
|
TraderVolume, TraderVolumeCheckType, bTraderIsOpen, NextTrader, WaveNum, bWaveIsEndless, GunGameWavesCurrent, bWaveGunGameIsFinal, AIRemaining, WaveTotalAICount, bWaveIsActive, MaxHumanCount, bGlobalDamage,
|
||||||
CurrentObjective, PreviousObjective, PreviousObjectiveResult, PreviousObjectiveXPResult, PreviousObjectiveVoshResult, MusicIntensity, ReplicatedMusicTrackInfo, MusicTrackRepCount,
|
CurrentObjective, PreviousObjective, PreviousObjectiveResult, PreviousObjectiveXPResult, PreviousObjectiveVoshResult, MusicIntensity, ReplicatedMusicTrackInfo, MusicTrackRepCount,
|
||||||
bIsUnrankedGame, GameSharedUnlocks, bHidePawnIcons, ConsoleGameSessionGuid, GameDifficulty, GameDifficultyModifier, BossIndex, bWaveStarted, NextObjective, bIsBrokenTrader, bIsWeeklyMode, CurrentWeeklyIndex, bIsEndlessPaused; //@HSL - JRO - 3/21/2016 - PS4 Sessions
|
bIsUnrankedGame, GameSharedUnlocks, bHidePawnIcons, ConsoleGameSessionGuid, GameDifficulty, GameDifficultyModifier, BossIndex, bWaveStarted, NextObjective, bIsBrokenTrader, bIsWeeklyMode,
|
||||||
|
CurrentWeeklyIndex, bIsEndlessPaused, bForceSkipTraderUI; //@HSL - JRO - 3/21/2016 - PS4 Sessions
|
||||||
if ( bNetInitial )
|
if ( bNetInitial )
|
||||||
GameLength, WaveMax, bCustom, bVersusGame, TraderItems, GameAmmoCostScale, bAllowGrenadePurchase, MaxPerkLevel, bTradersEnabled;
|
GameLength, WaveMax, bCustom, bVersusGame, TraderItems, GameAmmoCostScale, bAllowGrenadePurchase, MaxPerkLevel, bTradersEnabled, bForceShowSkipTrader;
|
||||||
if ( bNetInitial || bNetDirty )
|
if ( bNetInitial || bNetDirty )
|
||||||
PerksAvailableData;
|
PerksAvailableData;
|
||||||
if ( bNetInitial && Role == ROLE_Authority )
|
if ( bNetInitial && Role == ROLE_Authority )
|
||||||
@ -543,6 +550,14 @@ simulated event ReplicatedEvent(name VarName)
|
|||||||
{
|
{
|
||||||
UpdatePerksAvailable();
|
UpdatePerksAvailable();
|
||||||
}
|
}
|
||||||
|
else if (VarName == 'GunGameWavesCurrent')
|
||||||
|
{
|
||||||
|
UpdateHUDWaveCount();
|
||||||
|
}
|
||||||
|
else if (VarName == 'bWaveGunGameIsFinal')
|
||||||
|
{
|
||||||
|
UpdateHUDWaveCount();
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
super.ReplicatedEvent(VarName);
|
super.ReplicatedEvent(VarName);
|
||||||
@ -797,7 +812,7 @@ simulated function EndGame()
|
|||||||
bMatchHasBegun = false;
|
bMatchHasBegun = false;
|
||||||
bMatchIsOver = true;
|
bMatchIsOver = true;
|
||||||
|
|
||||||
class'KFGameEngine'.static.RefreshOnlineGameData(false);
|
class'KFGameEngine'.static.RefreshOnlineGameData(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Welcome screen shenanigans */
|
/* Welcome screen shenanigans */
|
||||||
@ -1111,6 +1126,7 @@ function SetWaveActive(bool bWaveActive, optional byte NewMusicIntensity)
|
|||||||
// set up music intensity for this wave
|
// set up music intensity for this wave
|
||||||
MusicIntensity = NewMusicIntensity;
|
MusicIntensity = NewMusicIntensity;
|
||||||
bTraderIsOpen = !bWaveActive && bMatchHasBegun && bTradersEnabled;
|
bTraderIsOpen = !bWaveActive && bMatchHasBegun && bTradersEnabled;
|
||||||
|
bForceSkipTraderUI = !bWaveActive && bMatchHasBegun && bForceShowSkipTrader;
|
||||||
bWaveIsActive = bWaveActive;
|
bWaveIsActive = bWaveActive;
|
||||||
bForceNetUpdate = true;
|
bForceNetUpdate = true;
|
||||||
|
|
||||||
@ -2029,21 +2045,25 @@ function int SetNextObjective(array<KFInterface_MapObjective> PossibleObjectives
|
|||||||
while (PossibleObjectives.Length > 0)
|
while (PossibleObjectives.Length > 0)
|
||||||
{
|
{
|
||||||
RandID = Rand(PossibleObjectives.Length);
|
RandID = Rand(PossibleObjectives.Length);
|
||||||
PctChanceToActivate = PossibleObjectives[RandID].GetActivationPctChance();
|
|
||||||
if (bForceNextObjective || (PossibleObjectives[RandID].CanActivateObjective() && PreviousObjective != PossibleObjectives[RandID] && (PctChanceToActivate >= 1.f || DieRoll <= PctChanceToActivate)))
|
if (PossibleObjectives[RandID].CanActivateObjectiveByWeekly())
|
||||||
{
|
{
|
||||||
if (bActivateImmediately)
|
PctChanceToActivate = PossibleObjectives[RandID].GetActivationPctChance();
|
||||||
|
if (bForceNextObjective || (PossibleObjectives[RandID].CanActivateObjective() && PreviousObjective != PossibleObjectives[RandID] && (PctChanceToActivate >= 1.f || DieRoll <= PctChanceToActivate)))
|
||||||
{
|
{
|
||||||
ActivateObjective(PossibleObjectives[RandID], bUseEndlessSpawning);
|
if (bActivateImmediately)
|
||||||
|
{
|
||||||
|
ActivateObjective(PossibleObjectives[RandID], bUseEndlessSpawning);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
NextObjective = Actor(PossibleObjectives[RandID]);
|
||||||
|
NextObjectiveIsEndless = bUseEndlessSpawning;
|
||||||
|
KFInterface_MapObjective(NextObjective).NotifyObjectiveSelected();
|
||||||
|
}
|
||||||
|
return RandID;
|
||||||
}
|
}
|
||||||
else
|
}
|
||||||
{
|
|
||||||
NextObjective = Actor(PossibleObjectives[RandID]);
|
|
||||||
NextObjectiveIsEndless = bUseEndlessSpawning;
|
|
||||||
KFInterface_MapObjective(NextObjective).NotifyObjectiveSelected();
|
|
||||||
}
|
|
||||||
return RandID;
|
|
||||||
}
|
|
||||||
|
|
||||||
PossibleObjectives.Remove(RandID, 1);
|
PossibleObjectives.Remove(RandID, 1);
|
||||||
}
|
}
|
||||||
@ -2268,4 +2288,8 @@ defaultproperties
|
|||||||
PreviousObjectiveXPResult=-1
|
PreviousObjectiveXPResult=-1
|
||||||
bIsBrokenTrader=false
|
bIsBrokenTrader=false
|
||||||
bIsWeeklyMode=false
|
bIsWeeklyMode=false
|
||||||
|
bForceShowSkipTrader=false
|
||||||
|
bForceSkipTraderUI=false
|
||||||
|
GunGameWavesCurrent=1
|
||||||
|
bWaveGunGameIsFinal=false
|
||||||
}
|
}
|
||||||
|
@ -204,7 +204,7 @@ static function class<KFGFxSpecialeventObjectivesContainer> GetSpecialEventClass
|
|||||||
case SEI_Spring:
|
case SEI_Spring:
|
||||||
return class'KFGFxSpecialEventObjectivesContainer_Spring2021';
|
return class'KFGFxSpecialEventObjectivesContainer_Spring2021';
|
||||||
case SEI_Summer:
|
case SEI_Summer:
|
||||||
return class'KFGFxSpecialEventObjectivesContainer_Summer2021';
|
return class'KFGFxSpecialEventObjectivesContainer_Summer2022';
|
||||||
case SEI_Fall:
|
case SEI_Fall:
|
||||||
return class'KFGFxSpecialEventObjectivesContainer_Fall2021';
|
return class'KFGFxSpecialEventObjectivesContainer_Fall2021';
|
||||||
case SEI_Winter:
|
case SEI_Winter:
|
||||||
|
@ -1866,7 +1866,7 @@ event bool FilterButtonInput(int ControllerId, name ButtonName, EInputEvent Inpu
|
|||||||
PartyWidget.ReadyButton.SetBool("selected", KFPRI.bReadyToPlay);
|
PartyWidget.ReadyButton.SetBool("selected", KFPRI.bReadyToPlay);
|
||||||
|
|
||||||
}
|
}
|
||||||
else if(KFPRI.bHasSpawnedIn && !KFGRI.bMatchIsOver && KFGRI.bMatchHasBegun && KFGRI.bTraderIsOpen && CurrentMenu != TraderMenu && bMenusOpen)
|
else if(KFPRI.bHasSpawnedIn && !KFGRI.bMatchIsOver && KFGRI.bMatchHasBegun && (KFGRI.bTraderIsOpen || KFGRI.bForceSkipTraderUI) && CurrentMenu != TraderMenu && bMenusOpen)
|
||||||
{
|
{
|
||||||
bForceCloseMenuNextTime = true;
|
bForceCloseMenuNextTime = true;
|
||||||
CurrentMenu.Callback_ReadyClicked(true);
|
CurrentMenu.Callback_ReadyClicked(true);
|
||||||
|
@ -234,7 +234,7 @@ function Callback_ReadyClicked( bool bReady )
|
|||||||
if (KFGRI.bMatchHasBegun)
|
if (KFGRI.bMatchHasBegun)
|
||||||
{
|
{
|
||||||
//player has spawned, skip trader time
|
//player has spawned, skip trader time
|
||||||
if (KFGRI.bTraderIsOpen && KFPRI.bHasSpawnedIn)
|
if ((KFGRI.bTraderIsOpen || KFGRI.bForceSkipTraderUI) && KFPRI.bHasSpawnedIn)
|
||||||
{
|
{
|
||||||
if (KFPC.MyGFxManager.bMenusOpen && KFPC.MyGFxManager.CurrentMenu != KFPC.MyGFxManager.TraderMenu)
|
if (KFPC.MyGFxManager.bMenusOpen && KFPC.MyGFxManager.CurrentMenu != KFPC.MyGFxManager.TraderMenu)
|
||||||
{
|
{
|
||||||
@ -506,6 +506,26 @@ function Callback_ChatFocusOut()
|
|||||||
Manager.UpdateDynamicIgnoreKeys();
|
Manager.UpdateDynamicIgnoreKeys();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function Callback_OnLoadoutPrevWeaponPressed()
|
||||||
|
{
|
||||||
|
Manager.PerksMenu.OnPrevWeaponPressed();
|
||||||
|
}
|
||||||
|
|
||||||
|
function Callback_OnLoadoutNextWeaponPressed()
|
||||||
|
{
|
||||||
|
Manager.PerksMenu.OnNextWeaponPressed();
|
||||||
|
}
|
||||||
|
|
||||||
|
function Callback_OnLoadoutPrevGrenadePressed()
|
||||||
|
{
|
||||||
|
Manager.PerksMenu.OnPrevGrenadePressed();
|
||||||
|
}
|
||||||
|
|
||||||
|
function Callback_OnLoadoutNextGrenadePressed()
|
||||||
|
{
|
||||||
|
Manager.PerksMenu.OnNextGrenadePressed();
|
||||||
|
}
|
||||||
|
|
||||||
/** RETURN TO THESE FUNCTIONS */
|
/** RETURN TO THESE FUNCTIONS */
|
||||||
|
|
||||||
/************************************************************************
|
/************************************************************************
|
||||||
|
@ -92,7 +92,7 @@ simulated function PlayImpactEffects(const vector HitLocation, const Pawn Effect
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bIsWeaponHandlingEffects = KFPawn(EffectInstigator).MyKFWeapon.bForceHandleImpacts;
|
bIsWeaponHandlingEffects = KFPawn(EffectInstigator).MyKFWeapon != none ? KFPawn(EffectInstigator).MyKFWeapon.bForceHandleImpacts : false;
|
||||||
|
|
||||||
// Trace using the Instigator as the TraceOwner so that melee weapons don't collide with Instigator
|
// Trace using the Instigator as the TraceOwner so that melee weapons don't collide with Instigator
|
||||||
HitActor = EffectInstigator.Trace(NewHitLoc, HitNormal, (HitLocation - (HitNormal * 32)), HitLocation + (HitNormal * 32), !bWorldImpactsOnly,, HitInfo, TRACEFLAG_Bullet);
|
HitActor = EffectInstigator.Trace(NewHitLoc, HitNormal, (HitLocation - (HitNormal * 32)), HitLocation + (HitNormal * 32), !bWorldImpactsOnly,, HitInfo, TRACEFLAG_Bullet);
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
interface KFInterface_MapObjective;
|
interface KFInterface_MapObjective;
|
||||||
|
|
||||||
// Status
|
// Status
|
||||||
|
simulated function bool CanActivateObjectiveByWeekly();
|
||||||
simulated function ActivateObjective();
|
simulated function ActivateObjective();
|
||||||
simulated function DeactivateObjective();
|
simulated function DeactivateObjective();
|
||||||
simulated function GrantReward(KFPlayerReplicationInfo KFPRI, KFPlayerController KFPC);
|
simulated function GrantReward(KFPlayerReplicationInfo KFPRI, KFPlayerController KFPC);
|
||||||
|
@ -495,6 +495,130 @@ function bool ClassNameIsInInventory(name ItemClassName, out Inventory out_Inven
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns the best weapon for this Pawn in loadout
|
||||||
|
*/
|
||||||
|
simulated function Weapon GetBestWeapon( optional bool bForceADifferentWeapon, optional bool allow9mm )
|
||||||
|
{
|
||||||
|
local KFWeapon W, BestWeapon;
|
||||||
|
local float Rating, BestRating;
|
||||||
|
|
||||||
|
ForEach InventoryActors( class'KFWeapon', W )
|
||||||
|
{
|
||||||
|
if( w.HasAnyAmmo() )
|
||||||
|
{
|
||||||
|
if( bForceADifferentWeapon &&
|
||||||
|
W == Instigator.Weapon )
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
Rating = W.GetWeaponRating();
|
||||||
|
if( BestWeapon == None ||
|
||||||
|
Rating > BestRating )
|
||||||
|
{
|
||||||
|
if (allow9mm == false)
|
||||||
|
{
|
||||||
|
if (W.bIsBackupWeapon && !W.IsMeleeWeapon())
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
BestWeapon = W;
|
||||||
|
BestRating = Rating;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (BestWeapon == none && allow9mm == false)
|
||||||
|
{
|
||||||
|
ForEach InventoryActors( class'KFWeapon', W )
|
||||||
|
{
|
||||||
|
if( w.HasAnyAmmo() )
|
||||||
|
{
|
||||||
|
if( bForceADifferentWeapon &&
|
||||||
|
W == Instigator.Weapon )
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
Rating = W.GetWeaponRating();
|
||||||
|
if( BestWeapon == None ||
|
||||||
|
Rating > BestRating )
|
||||||
|
{
|
||||||
|
BestWeapon = W;
|
||||||
|
BestRating = Rating;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return BestWeapon;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Switch to best weapon available in loadout
|
||||||
|
* Network: LocalPlayer
|
||||||
|
*/
|
||||||
|
simulated function SwitchToBestWeapon( optional bool bForceADifferentWeapon, optional bool check_9mm_logic = false )
|
||||||
|
{
|
||||||
|
local Weapon BestWeapon;
|
||||||
|
local PlayerController PC;
|
||||||
|
local KFPlayerInput KFPI;
|
||||||
|
local bool bCanSwapTo9mm;
|
||||||
|
|
||||||
|
if (check_9mm_logic)
|
||||||
|
{
|
||||||
|
// Default behaviour is you can't swap to 9mm
|
||||||
|
bCanSwapTo9mm = false;
|
||||||
|
|
||||||
|
PC = PlayerController(Instigator.Controller);
|
||||||
|
if ( PC != None )
|
||||||
|
{
|
||||||
|
KFPI = KFPlayerInput(PC.PlayerInput);
|
||||||
|
if (KFPI != None)
|
||||||
|
{
|
||||||
|
bCanSwapTo9mm = KFPI.bAllowSwapTo9mm;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
bCanSwapTo9mm = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
`LogInv("bForceADifferentWeapon:" @ bForceADifferentWeapon);
|
||||||
|
|
||||||
|
// if we don't already have a pending weapon,
|
||||||
|
if( bForceADifferentWeapon ||
|
||||||
|
PendingWeapon == None ||
|
||||||
|
(AIController(Instigator.Controller) != None) )
|
||||||
|
{
|
||||||
|
// figure out the new weapon to bring up
|
||||||
|
BestWeapon = GetBestWeapon( bForceADifferentWeapon, bCanSwapTo9mm );
|
||||||
|
|
||||||
|
if( BestWeapon == None )
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// if it matches our current weapon then don't bother switching
|
||||||
|
if( BestWeapon == Instigator.Weapon )
|
||||||
|
{
|
||||||
|
BestWeapon = None;
|
||||||
|
PendingWeapon = None;
|
||||||
|
Instigator.Weapon.Activate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// stop any current weapon fire
|
||||||
|
Instigator.Controller.StopFiring();
|
||||||
|
|
||||||
|
// and activate the new pending weapon
|
||||||
|
SetCurrentWeapon(BestWeapon);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Switches to Previous weapon
|
* Switches to Previous weapon
|
||||||
* Network: Client
|
* Network: Client
|
||||||
@ -943,7 +1067,7 @@ reliable client function SetCurrentWeapon(Weapon DesiredWeapon)
|
|||||||
local KFWeapon DesiredKFW;
|
local KFWeapon DesiredKFW;
|
||||||
local KFWeapon PendingKFW;
|
local KFWeapon PendingKFW;
|
||||||
|
|
||||||
CurrentKFW = KFWeapon(Instigator.Weapon);
|
CurrentKFW = Instigator != none ? KFWeapon(Instigator.Weapon) : none;
|
||||||
if ( CurrentKFW != none )
|
if ( CurrentKFW != none )
|
||||||
{
|
{
|
||||||
// Set the flag to switch to ironsights when the weapon is brought up
|
// Set the flag to switch to ironsights when the weapon is brought up
|
||||||
@ -963,6 +1087,7 @@ reliable client function SetCurrentWeapon(Weapon DesiredWeapon)
|
|||||||
// Only change your weapon if it is different or we weant to equip the weapon we are currently putting down
|
// Only change your weapon if it is different or we weant to equip the weapon we are currently putting down
|
||||||
DesiredKFW = KFWeapon(DesiredWeapon);
|
DesiredKFW = KFWeapon(DesiredWeapon);
|
||||||
if( DesiredKFW != none &&
|
if( DesiredKFW != none &&
|
||||||
|
Instigator != none &&
|
||||||
(DesiredKFW != Instigator.Weapon || Instigator.Weapon.IsInState('WeaponPuttingDown')) )
|
(DesiredKFW != Instigator.Weapon || Instigator.Weapon.IsInState('WeaponPuttingDown')) )
|
||||||
{
|
{
|
||||||
if ( DesiredKFW.bHasIronSights )
|
if ( DesiredKFW.bHasIronSights )
|
||||||
|
@ -63,6 +63,11 @@ simulated function PlayActivationSoundEvent()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
simulated function bool CanActivateObjectiveByWeekly()
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
// Status
|
// Status
|
||||||
simulated function ActivateObjective()
|
simulated function ActivateObjective()
|
||||||
{
|
{
|
||||||
|
@ -158,6 +158,11 @@ simulated function ActivateBoundarySplines()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
simulated function bool CanActivateObjectiveByWeekly()
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
// Status
|
// Status
|
||||||
simulated function ActivateObjective()
|
simulated function ActivateObjective()
|
||||||
{
|
{
|
||||||
|
@ -70,6 +70,7 @@ defaultproperties
|
|||||||
ColumnIds.Add(STATID_ACHIEVE_MoonbaseCollectibles)
|
ColumnIds.Add(STATID_ACHIEVE_MoonbaseCollectibles)
|
||||||
ColumnIds.Add(STATID_ACHIEVE_NetherholdCollectibles)
|
ColumnIds.Add(STATID_ACHIEVE_NetherholdCollectibles)
|
||||||
ColumnIds.Add(STATID_ACHIEVE_CarillonHamletCollectibles)
|
ColumnIds.Add(STATID_ACHIEVE_CarillonHamletCollectibles)
|
||||||
|
ColumnIds.Add(STATID_ACHIEVE_RigCollectibles)
|
||||||
|
|
||||||
ColumnMappings.Add((Id=STATID_ACHIEVE_MrPerky5, Name="AchievementMrPerky5"))
|
ColumnMappings.Add((Id=STATID_ACHIEVE_MrPerky5, Name="AchievementMrPerky5"))
|
||||||
ColumnMappings.Add((Id=STATID_ACHIEVE_MrPerky10, Name = "AchievementMrPerky10"))
|
ColumnMappings.Add((Id=STATID_ACHIEVE_MrPerky10, Name = "AchievementMrPerky10"))
|
||||||
@ -124,8 +125,9 @@ defaultproperties
|
|||||||
ColumnMappings.Add((Id=STATID_ACHIEVE_DesolationCollectibles,Name="AchievementCollectDesolation"))
|
ColumnMappings.Add((Id=STATID_ACHIEVE_DesolationCollectibles,Name="AchievementCollectDesolation"))
|
||||||
ColumnMappings.Add((Id=STATID_ACHIEVE_HellmarkStationCollectibles,Name="AchievementCollectHellmarkStation"))
|
ColumnMappings.Add((Id=STATID_ACHIEVE_HellmarkStationCollectibles,Name="AchievementCollectHellmarkStation"))
|
||||||
ColumnMappings.Add((Id=STATID_ACHIEVE_ElysiumEndlessWaveFifteen,Name="AchievementEndlessElysium"))
|
ColumnMappings.Add((Id=STATID_ACHIEVE_ElysiumEndlessWaveFifteen,Name="AchievementEndlessElysium"))
|
||||||
ColumnMappings.Add((Id=STATID_ACHIEVE_Dystopia2029Collectibles,NAme="AchievementCollectDystopia2029"))
|
ColumnMappings.Add((Id=STATID_ACHIEVE_Dystopia2029Collectibles,Name="AchievementCollectDystopia2029"))
|
||||||
ColumnMappings.Add((Id=STATID_ACHIEVE_MoonbaseCollectibles,NAme="AchievementCollectMoonbase"))
|
ColumnMappings.Add((Id=STATID_ACHIEVE_MoonbaseCollectibles,Name="AchievementCollectMoonbase"))
|
||||||
ColumnMappings.Add((Id=STATID_ACHIEVE_NetherholdCollectibles,NAme="AchievementCollectNetherhold"))
|
ColumnMappings.Add((Id=STATID_ACHIEVE_NetherholdCollectibles,Name="AchievementCollectNetherhold"))
|
||||||
ColumnMappings.Add((Id=STATID_ACHIEVE_CarillonHamletCollectibles,NAme="AchievementCollectCarillonHamlet"))
|
ColumnMappings.Add((Id=STATID_ACHIEVE_CarillonHamletCollectibles,Name="AchievementCollectCarillonHamlet"))
|
||||||
|
ColumnMappings.Add((Id=STATID_ACHIEVE_RigCollectibles,Name="AchievementCollectRig"))
|
||||||
}
|
}
|
||||||
|
@ -441,6 +441,10 @@ const KFACHID_CarillonHamletHard = 289;
|
|||||||
const KFACHID_CarillonHamletHellOnEarth = 290;
|
const KFACHID_CarillonHamletHellOnEarth = 290;
|
||||||
const KFACHID_CarillonHamletCollectibles = 291;
|
const KFACHID_CarillonHamletCollectibles = 291;
|
||||||
|
|
||||||
|
const KFACHID_RigHard = 292;
|
||||||
|
const KFACHID_RigHellOnEarth = 293;
|
||||||
|
const KFACHID_RigCollectibles = 294;
|
||||||
|
|
||||||
/* __TW_ANALYTICS_ */
|
/* __TW_ANALYTICS_ */
|
||||||
var int PerRoundWeldXP;
|
var int PerRoundWeldXP;
|
||||||
var int PerRoundHealXP;
|
var int PerRoundHealXP;
|
||||||
@ -2078,6 +2082,7 @@ defaultproperties
|
|||||||
DailyEvents.Add((ObjectiveType=DOT_WeaponDamage,ObjectiveClasses=(KFWeap_Thrown_C4, KFDT_Explosive_C4,KFDT_Bludgeon_C4),CompletionAmount=2500))
|
DailyEvents.Add((ObjectiveType=DOT_WeaponDamage,ObjectiveClasses=(KFWeap_Thrown_C4, KFDT_Explosive_C4,KFDT_Bludgeon_C4),CompletionAmount=2500))
|
||||||
DailyEvents.Add((ObjectiveType=DOT_WeaponDamage,ObjectiveClasses=(KFWeap_GrenadeLauncher_M79, KFDT_Ballistic_M79Impact,KFDT_Explosive_M79,KFDT_Bludgeon_M79),CompletionAmount=7000))
|
DailyEvents.Add((ObjectiveType=DOT_WeaponDamage,ObjectiveClasses=(KFWeap_GrenadeLauncher_M79, KFDT_Ballistic_M79Impact,KFDT_Explosive_M79,KFDT_Bludgeon_M79),CompletionAmount=7000))
|
||||||
DailyEvents.Add((ObjectiveType=DOT_WeaponDamage,ObjectiveClasses=(KFWeap_HRG_Boomy, KFDT_Ballistic_HRG_Boomy,KFDT_Explosive_HRG_Boomy,KFDT_Bludgeon_HRG_Boomy),CompletionAmount=7000))
|
DailyEvents.Add((ObjectiveType=DOT_WeaponDamage,ObjectiveClasses=(KFWeap_HRG_Boomy, KFDT_Ballistic_HRG_Boomy,KFDT_Explosive_HRG_Boomy,KFDT_Bludgeon_HRG_Boomy),CompletionAmount=7000))
|
||||||
|
DailyEvents.Add((ObjectiveType=DOT_WeaponDamage,ObjectiveClasses=(KFWeap_HRG_Crossboom, KFDT_Piercing_HRG_Crossboom,KFDT_Explosive_HRG_Crossboom,KFDT_Explosive_HRG_CrossboomAlt,KFDT_Bludgeon_HRG_Crossboom),CompletionAmount=7000))
|
||||||
DailyEvents.Add((ObjectiveType=DOT_WeaponDamage,ObjectiveClasses=(KFWeap_Shotgun_HRG_Kaboomstick, KFDT_Ballistic_HRG_Kaboomstick,KFDT_Explosive_HRG_Kaboomstick,KFDT_Bludgeon_HRG_Kaboomstick),CompletionAmount=9000))
|
DailyEvents.Add((ObjectiveType=DOT_WeaponDamage,ObjectiveClasses=(KFWeap_Shotgun_HRG_Kaboomstick, KFDT_Ballistic_HRG_Kaboomstick,KFDT_Explosive_HRG_Kaboomstick,KFDT_Bludgeon_HRG_Kaboomstick),CompletionAmount=9000))
|
||||||
DailyEvents.Add((ObjectiveType=DOT_WeaponDamage,ObjectiveClasses=(KFWeap_RocketLauncher_RPG7, KFDT_Ballistic_RPG7Impact,KFDT_Explosive_RPG7,KFDT_Explosive_RPG7BackBlast,KFDT_Bludgeon_RPG7),CompletionAmount=7500))
|
DailyEvents.Add((ObjectiveType=DOT_WeaponDamage,ObjectiveClasses=(KFWeap_RocketLauncher_RPG7, KFDT_Ballistic_RPG7Impact,KFDT_Explosive_RPG7,KFDT_Explosive_RPG7BackBlast,KFDT_Bludgeon_RPG7),CompletionAmount=7500))
|
||||||
DailyEvents.Add((ObjectiveType=DOT_WeaponDamage,ObjectiveClasses=(KFWeap_AssaultRifle_M16M203, KFDT_Ballistic_M16M203,KFDT_Bludgeon_M16M203,KFDT_Ballistic_M203Impact,KFDT_Explosive_M16M203),CompletionAmount=9000)) //7000
|
DailyEvents.Add((ObjectiveType=DOT_WeaponDamage,ObjectiveClasses=(KFWeap_AssaultRifle_M16M203, KFDT_Ballistic_M16M203,KFDT_Bludgeon_M16M203,KFDT_Ballistic_M203Impact,KFDT_Explosive_M16M203),CompletionAmount=9000)) //7000
|
||||||
@ -2124,6 +2129,7 @@ defaultproperties
|
|||||||
DailyEvents.Add((ObjectiveType=DOT_WeaponDamage,ObjectiveClasses=(KFWeap_Bow_Crossbow, KFDT_Bludgeon_Crossbow,KFDT_Piercing_Crossbow),CompletionAmount=7000)) //5000
|
DailyEvents.Add((ObjectiveType=DOT_WeaponDamage,ObjectiveClasses=(KFWeap_Bow_Crossbow, KFDT_Bludgeon_Crossbow,KFDT_Piercing_Crossbow),CompletionAmount=7000)) //5000
|
||||||
DailyEvents.Add((ObjectiveType=DOT_WeaponDamage,ObjectiveClasses=(KFWeap_Rifle_M14EBR, KFDT_Bludgeon_M14EBR,KFDT_Ballistic_M14EBR),CompletionAmount=9000)) //7000
|
DailyEvents.Add((ObjectiveType=DOT_WeaponDamage,ObjectiveClasses=(KFWeap_Rifle_M14EBR, KFDT_Bludgeon_M14EBR,KFDT_Ballistic_M14EBR),CompletionAmount=9000)) //7000
|
||||||
DailyEvents.Add((ObjectiveType=DOT_WeaponDamage,ObjectiveClasses=(KFWeap_HRG_SonicGun, KFDT_Bludgeon_HRG_SonicGun, KFDT_Ballistic_HRG_SonicGun_SonicBlastUncharged, KFDT_Ballistic_HRG_SonicGun_SonicBlastHalfCharged, KFDT_Ballistic_HRG_SonicGun_SonicBlastFullyCharged),CompletionAmount=7000))
|
DailyEvents.Add((ObjectiveType=DOT_WeaponDamage,ObjectiveClasses=(KFWeap_HRG_SonicGun, KFDT_Bludgeon_HRG_SonicGun, KFDT_Ballistic_HRG_SonicGun_SonicBlastUncharged, KFDT_Ballistic_HRG_SonicGun_SonicBlastHalfCharged, KFDT_Ballistic_HRG_SonicGun_SonicBlastFullyCharged),CompletionAmount=7000))
|
||||||
|
DailyEvents.Add((ObjectiveType=DOT_WeaponDamage,ObjectiveClasses=(KFWeap_HRG_CranialPopper, KFDT_Bludgeon_HRG_CranialPopper,KFDT_Piercing_HRG_CranialPopper,KFDT_Blast_HRG_CranialPopper),CompletionAmount=7000))
|
||||||
DailyEvents.Add((ObjectiveType=DOT_WeaponDamage,ObjectiveClasses=(KFWeap_Rifle_RailGun, KFDT_Bludgeon_RailGun,KFDT_Ballistic_RailGun),CompletionAmount=5000))
|
DailyEvents.Add((ObjectiveType=DOT_WeaponDamage,ObjectiveClasses=(KFWeap_Rifle_RailGun, KFDT_Bludgeon_RailGun,KFDT_Ballistic_RailGun),CompletionAmount=5000))
|
||||||
DailyEvents.Add((ObjectiveType=DOT_WeaponDamage,ObjectiveClasses=(KFWeap_Rifle_CenterfireMB464, KFDT_Bludgeon_CenterfireMB464,KFDT_Ballistic_CenterfireMB464),CompletionAmount=7000)) //5000
|
DailyEvents.Add((ObjectiveType=DOT_WeaponDamage,ObjectiveClasses=(KFWeap_Rifle_CenterfireMB464, KFDT_Bludgeon_CenterfireMB464,KFDT_Ballistic_CenterfireMB464),CompletionAmount=7000)) //5000
|
||||||
DailyEvents.Add((ObjectiveType=DOT_WeaponDamage,ObjectiveClasses=(KFWeap_Rifle_M99, KFDT_Bludgeon_M99,KFDT_Ballistic_M99),CompletionAmount=5000))
|
DailyEvents.Add((ObjectiveType=DOT_WeaponDamage,ObjectiveClasses=(KFWeap_Rifle_M99, KFDT_Bludgeon_M99,KFDT_Ballistic_M99),CompletionAmount=5000))
|
||||||
@ -2277,6 +2283,9 @@ defaultproperties
|
|||||||
DailyEvents.Add((ObjectiveType=DOT_Maps,SecondaryType=DOST_MapCompletion,ObjectiveClasses=(KF-CARILLONHAMLET),CompletionAmount=1))
|
DailyEvents.Add((ObjectiveType=DOT_Maps,SecondaryType=DOST_MapCompletion,ObjectiveClasses=(KF-CARILLONHAMLET),CompletionAmount=1))
|
||||||
DailyEvents.Add((ObjectiveType=DOT_Maps,SecondaryType=DOST_MapCompletion,ObjectiveClasses=(KF-CARILLONHAMLET),CompletionAmount=2))
|
DailyEvents.Add((ObjectiveType=DOT_Maps,SecondaryType=DOST_MapCompletion,ObjectiveClasses=(KF-CARILLONHAMLET),CompletionAmount=2))
|
||||||
DailyEvents.Add((ObjectiveType=DOT_Maps,SecondaryType=DOST_MapCompletion,ObjectiveClasses=(KF-CARILLONHAMLET),CompletionAmount=3))
|
DailyEvents.Add((ObjectiveType=DOT_Maps,SecondaryType=DOST_MapCompletion,ObjectiveClasses=(KF-CARILLONHAMLET),CompletionAmount=3))
|
||||||
|
DailyEvents.Add((ObjectiveType=DOT_Maps,SecondaryType=DOST_MapCompletion,ObjectiveClasses=(KF-RIG),CompletionAmount=1))
|
||||||
|
DailyEvents.Add((ObjectiveType=DOT_Maps,SecondaryType=DOST_MapCompletion,ObjectiveClasses=(KF-RIG),CompletionAmount=2))
|
||||||
|
DailyEvents.Add((ObjectiveType=DOT_Maps,SecondaryType=DOST_MapCompletion,ObjectiveClasses=(KF-RIG),CompletionAmount=3))
|
||||||
|
|
||||||
//Versus Damage
|
//Versus Damage
|
||||||
// Per design doc that I have right now, these are x class damage y players, not damage y amount
|
// Per design doc that I have right now, these are x class damage y players, not damage y amount
|
||||||
|
@ -72,4 +72,5 @@ defaultproperties
|
|||||||
Properties.Add((PropertyId = STATID_ACHIEVE_MoonbaseCollectibles, Data = (Type = SDT_Int32, Value1 = 0)))
|
Properties.Add((PropertyId = STATID_ACHIEVE_MoonbaseCollectibles, Data = (Type = SDT_Int32, Value1 = 0)))
|
||||||
Properties.Add((PropertyId = STATID_ACHIEVE_NetherholdCollectibles, Data = (Type = SDT_Int32, Value1 = 0)))
|
Properties.Add((PropertyId = STATID_ACHIEVE_NetherholdCollectibles, Data = (Type = SDT_Int32, Value1 = 0)))
|
||||||
Properties.Add((PropertyId = STATID_ACHIEVE_CarillonHamletCollectibles, Data = (Type = SDT_Int32, Value1 = 0)))
|
Properties.Add((PropertyId = STATID_ACHIEVE_CarillonHamletCollectibles, Data = (Type = SDT_Int32, Value1 = 0)))
|
||||||
|
Properties.Add((PropertyId = STATID_ACHIEVE_RigCollectibles, Data = (Type = SDT_Int32, Value1 = 0)))
|
||||||
}
|
}
|
||||||
|
@ -99,6 +99,10 @@ struct StatAdjustments
|
|||||||
/** WeakPoints to show special VFX*/
|
/** WeakPoints to show special VFX*/
|
||||||
var() array<WeakPoint> WeakPoints;
|
var() array<WeakPoint> WeakPoints;
|
||||||
|
|
||||||
|
/** Score given when killed on GunGame weekly */
|
||||||
|
var() byte GunGameKilledScore;
|
||||||
|
var() byte GunGameAssistanceScore;
|
||||||
|
|
||||||
structdefaultproperties
|
structdefaultproperties
|
||||||
{
|
{
|
||||||
HealthScale = 1.f;
|
HealthScale = 1.f;
|
||||||
@ -118,6 +122,8 @@ struct StatAdjustments
|
|||||||
DoshGiven=INDEX_NONE
|
DoshGiven=INDEX_NONE
|
||||||
|
|
||||||
InitialGroundSpeedModifierScale = 1.0
|
InitialGroundSpeedModifierScale = 1.0
|
||||||
|
GunGameKilledScore = 0;
|
||||||
|
GunGameAssistanceScore = 0;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -140,6 +146,24 @@ struct BossRushOverrides
|
|||||||
var() array <BossRushOverridesPerWave> PerWaves;
|
var() array <BossRushOverridesPerWave> PerWaves;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct GunGameLevel
|
||||||
|
{
|
||||||
|
var() int RequiredScore;
|
||||||
|
var() array< class<KFWeaponDefinition> > GrantedWeapons;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct GunGameRespawnLevel
|
||||||
|
{
|
||||||
|
var() int Wave;
|
||||||
|
var() int Level;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct GunGamePerkData
|
||||||
|
{
|
||||||
|
var() array<GunGameLevel> GunGameLevels;
|
||||||
|
var() array<GunGameRespawnLevel> GunGameRespawnLevels;
|
||||||
|
};
|
||||||
|
|
||||||
/** Individual property overrides that drive other behavior to allow for
|
/** Individual property overrides that drive other behavior to allow for
|
||||||
* a large amount of variety in our weekly event mode.
|
* a large amount of variety in our weekly event mode.
|
||||||
*/
|
*/
|
||||||
@ -210,6 +234,9 @@ struct WeeklyOverrides
|
|||||||
/** Whether or not to skip opening of the trader */
|
/** Whether or not to skip opening of the trader */
|
||||||
var() bool bDisableTraders;
|
var() bool bDisableTraders;
|
||||||
|
|
||||||
|
/** Whether or not to force show skip trader button */
|
||||||
|
var() bool bForceShowSkipTrader;
|
||||||
|
|
||||||
/** When to reset pickups */
|
/** When to reset pickups */
|
||||||
var() PickupResetTime PickupResetTime;
|
var() PickupResetTime PickupResetTime;
|
||||||
|
|
||||||
@ -394,6 +421,12 @@ struct WeeklyOverrides
|
|||||||
/** Global modifier of dosh received by players when a zed is killed. Default value is 1.0 */
|
/** Global modifier of dosh received by players when a zed is killed. Default value is 1.0 */
|
||||||
var() float DoshOnKillGlobalModifier;
|
var() float DoshOnKillGlobalModifier;
|
||||||
|
|
||||||
|
/** Disable Add Dosh */
|
||||||
|
var() bool bDisableAddDosh;
|
||||||
|
|
||||||
|
/** Disable Throw Weapon */
|
||||||
|
var() bool bDisableThrowWeapon;
|
||||||
|
|
||||||
/** Delay After a wave starts for applying global damage. */
|
/** Delay After a wave starts for applying global damage. */
|
||||||
var() float DamageDelayAfterWaveStarted;
|
var() float DamageDelayAfterWaveStarted;
|
||||||
|
|
||||||
@ -411,9 +444,24 @@ struct WeeklyOverrides
|
|||||||
|
|
||||||
var() BossRushOverrides BossRushOverrideParams;
|
var() BossRushOverrides BossRushOverrideParams;
|
||||||
|
|
||||||
|
/** */
|
||||||
|
var() bool bGunGameMode;
|
||||||
|
|
||||||
|
/** Information about each level in Gun Game Mode */
|
||||||
|
var() GunGamePerkData GunGamePerksData;
|
||||||
|
|
||||||
/** Ignores damage caused by headshots. */
|
/** Ignores damage caused by headshots. */
|
||||||
var() bool bInvulnerableHeads;
|
var() bool bInvulnerableHeads;
|
||||||
|
|
||||||
|
/** Trade time override. */
|
||||||
|
var() float TraderTimeModifier;
|
||||||
|
|
||||||
|
/** Time between waves override. */
|
||||||
|
var() float TimeBetweenWaves;
|
||||||
|
|
||||||
|
/** Wether or not we only can spawn Armor on the Item pickups */
|
||||||
|
var() bool bOnlyArmorItemPickup;
|
||||||
|
|
||||||
structdefaultproperties
|
structdefaultproperties
|
||||||
{
|
{
|
||||||
GameLength = GL_Short
|
GameLength = GL_Short
|
||||||
@ -471,7 +519,14 @@ struct WeeklyOverrides
|
|||||||
DroppedItemLifespan=-1.0f
|
DroppedItemLifespan=-1.0f
|
||||||
bForceWWLMusic = false;
|
bForceWWLMusic = false;
|
||||||
bBossRushMode = false;
|
bBossRushMode = false;
|
||||||
|
bDisableAddDosh = false;
|
||||||
|
bDisableThrowWeapon = false;
|
||||||
|
bGunGameMode = false;
|
||||||
bInvulnerableHeads = false;
|
bInvulnerableHeads = false;
|
||||||
|
TraderTimeModifier = 1.f;
|
||||||
|
TimeBetweenWaves = -1.f;
|
||||||
|
bOnlyArmorItemPickup=false;
|
||||||
|
bForceShowSkipTrader = false;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -485,12 +540,14 @@ struct CachedOutbreakInfo
|
|||||||
var float CachedWorldGravityZ;
|
var float CachedWorldGravityZ;
|
||||||
var float CachedGlobalGravityZ;
|
var float CachedGlobalGravityZ;
|
||||||
var PerkAvailableData PerksAvailableData;
|
var PerkAvailableData PerksAvailableData;
|
||||||
|
var bool bForceShowSkipTrader;
|
||||||
|
|
||||||
structdefaultproperties
|
structdefaultproperties
|
||||||
{
|
{
|
||||||
bTradersEnabled=true,
|
bTradersEnabled=true
|
||||||
bAllowGrenadePurchase=true
|
bAllowGrenadePurchase=true
|
||||||
GameAmmoCostScale=1.0
|
GameAmmoCostScale=1.0
|
||||||
|
bForceShowSkipTrader=false
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -506,7 +563,7 @@ var WeeklyOverrides ActiveEvent;
|
|||||||
/** Stored values of World Info and GRI items incase we need to reset it. */
|
/** Stored values of World Info and GRI items incase we need to reset it. */
|
||||||
var CachedOutbreakInfo CachedItems;
|
var CachedOutbreakInfo CachedItems;
|
||||||
|
|
||||||
function SetActiveEvent(int ActiveEventIdx)
|
function int SetActiveEvent(int ActiveEventIdx)
|
||||||
{
|
{
|
||||||
`if(`notdefined(ShippingPC))
|
`if(`notdefined(ShippingPC))
|
||||||
local string LocalURL;
|
local string LocalURL;
|
||||||
@ -537,6 +594,8 @@ function SetActiveEvent(int ActiveEventIdx)
|
|||||||
ActiveEvent = SetEvents[ActiveEventIdx];
|
ActiveEvent = SetEvents[ActiveEventIdx];
|
||||||
}
|
}
|
||||||
`endif
|
`endif
|
||||||
|
|
||||||
|
return ActiveEventIdx;
|
||||||
}
|
}
|
||||||
|
|
||||||
function ClearActiveEvent()
|
function ClearActiveEvent()
|
||||||
@ -562,6 +621,7 @@ function ClearActiveEvent()
|
|||||||
KFGameReplicationInfo(GameReplicationInfo).bAllowGrenadePurchase = CachedItems.bAllowGrenadePurchase;
|
KFGameReplicationInfo(GameReplicationInfo).bAllowGrenadePurchase = CachedItems.bAllowGrenadePurchase;
|
||||||
KFGameReplicationInfo(GameReplicationInfo).bTradersEnabled = CachedItems.bTradersEnabled;
|
KFGameReplicationInfo(GameReplicationInfo).bTradersEnabled = CachedItems.bTradersEnabled;
|
||||||
KFGameReplicationInfo(GameReplicationInfo).MaxPerkLevel = CachedItems.MaxPerkLevel;
|
KFGameReplicationInfo(GameReplicationInfo).MaxPerkLevel = CachedItems.MaxPerkLevel;
|
||||||
|
KFGameReplicationInfo(GameReplicationInfo).bForceShowSkipTrader = CachedItems.bForceShowSkipTrader;
|
||||||
}
|
}
|
||||||
|
|
||||||
ActiveEvent = EmptyEvent;
|
ActiveEvent = EmptyEvent;
|
||||||
@ -588,6 +648,7 @@ function CacheGRI()
|
|||||||
CachedItems.bAllowGrenadePurchase = KFGameReplicationInfo(GameReplicationInfo).bAllowGrenadePurchase;
|
CachedItems.bAllowGrenadePurchase = KFGameReplicationInfo(GameReplicationInfo).bAllowGrenadePurchase;
|
||||||
CachedItems.bTradersEnabled = KFGameReplicationInfo(GameReplicationInfo).bTradersEnabled;
|
CachedItems.bTradersEnabled = KFGameReplicationInfo(GameReplicationInfo).bTradersEnabled;
|
||||||
CachedItems.MaxPerkLevel = KFGameReplicationInfo(GameReplicationInfo).MaxPerkLevel;
|
CachedItems.MaxPerkLevel = KFGameReplicationInfo(GameReplicationInfo).MaxPerkLevel;
|
||||||
|
CachedItems.bForceShowSkipTrader = KFGameReplicationInfo(GameReplicationInfo).bForceShowSkipTrader;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -641,6 +702,7 @@ function UpdateGRI()
|
|||||||
KFGRI.bAllowGrenadePurchase = !ActiveEvent.bDisableGrenades;
|
KFGRI.bAllowGrenadePurchase = !ActiveEvent.bDisableGrenades;
|
||||||
KFGRI.bTradersEnabled = !ActiveEvent.bDisableTraders;
|
KFGRI.bTradersEnabled = !ActiveEvent.bDisableTraders;
|
||||||
KFGRI.MaxPerkLevel = ActiveEvent.MaxPerkLevel;
|
KFGRI.MaxPerkLevel = ActiveEvent.MaxPerkLevel;
|
||||||
|
KFGRI.bForceShowSkipTrader = ActiveEvent.bForceShowSkipTrader;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -893,6 +955,9 @@ function AdjustDefaults(out KFPawn_Monster P, array <StatAdjustments> Adjustment
|
|||||||
P.HealByAssistance = ToAdjust.HealByAssistance;
|
P.HealByAssistance = ToAdjust.HealByAssistance;
|
||||||
P.InitialGroundSpeedModifier *= ToAdjust.InitialGroundSpeedModifierScale;
|
P.InitialGroundSpeedModifier *= ToAdjust.InitialGroundSpeedModifierScale;
|
||||||
|
|
||||||
|
P.GunGameKilledScore = ToAdjust.GunGameKilledScore;
|
||||||
|
P.GunGameAssistanceScore = ToAdjust.GunGameAssistanceScore;
|
||||||
|
|
||||||
if (ToAdjust.bStartEnraged)
|
if (ToAdjust.bStartEnraged)
|
||||||
{
|
{
|
||||||
//If we aren't using the AI controller's spawn enrage, go into the pawn
|
//If we aren't using the AI controller's spawn enrage, go into the pawn
|
||||||
|
@ -880,6 +880,12 @@ var repnotify byte WeaponSpecialAction;
|
|||||||
********************************************************************************************* */
|
********************************************************************************************* */
|
||||||
var transient byte LastHitZoneIndex;
|
var transient byte LastHitZoneIndex;
|
||||||
|
|
||||||
|
/**
|
||||||
|
AutoTurret
|
||||||
|
*/
|
||||||
|
var const bool bIsTurret;
|
||||||
|
|
||||||
|
|
||||||
replication
|
replication
|
||||||
{
|
{
|
||||||
// Replicated to ALL
|
// Replicated to ALL
|
||||||
@ -887,7 +893,7 @@ replication
|
|||||||
AmbientSound, WeaponClassForAttachmentTemplate, bIsSprinting, InjuredHitZones,
|
AmbientSound, WeaponClassForAttachmentTemplate, bIsSprinting, InjuredHitZones,
|
||||||
KnockdownImpulse, ReplicatedSpecialMove, bEmpDisrupted, bEmpPanicked, bFirePanicked,
|
KnockdownImpulse, ReplicatedSpecialMove, bEmpDisrupted, bEmpPanicked, bFirePanicked,
|
||||||
RepFireBurnedAmount, bUnaffectedByZedTime, bMovesFastInZedTime, IntendedBodyScale,
|
RepFireBurnedAmount, bUnaffectedByZedTime, bMovesFastInZedTime, IntendedBodyScale,
|
||||||
IntendedHeadScale, AttackSpeedModifier, bHasStartedFire, PowerUpAmbientSound;
|
IntendedHeadScale, AttackSpeedModifier, bHasStartedFire, PowerUpAmbientSound, BodyScaleChangePerSecond;
|
||||||
if ( bNetDirty && WorldInfo.TimeSeconds < LastTakeHitTimeout )
|
if ( bNetDirty && WorldInfo.TimeSeconds < LastTakeHitTimeout )
|
||||||
HitFxInfo, HitFxRadialInfo, HitFxInstigator, HitFxAddedRelativeLocs, HitFxAddedHitCount;
|
HitFxInfo, HitFxRadialInfo, HitFxInstigator, HitFxAddedRelativeLocs, HitFxAddedHitCount;
|
||||||
if ( Physics == PHYS_RigidBody && !bTearOff )
|
if ( Physics == PHYS_RigidBody && !bTearOff )
|
||||||
@ -2696,6 +2702,7 @@ event TakeDamage(int Damage, Controller InstigatedBy, vector HitLocation, vector
|
|||||||
HitFxInfo.HitBoneIndex = HZI_HEAD;
|
HitFxInfo.HitBoneIndex = HZI_HEAD;
|
||||||
}
|
}
|
||||||
`endif
|
`endif
|
||||||
|
|
||||||
// NVCHANGE_BEGIN - RLS - Debugging Effects
|
// NVCHANGE_BEGIN - RLS - Debugging Effects
|
||||||
bAllowHeadshot = CanCountHeadshots();
|
bAllowHeadshot = CanCountHeadshots();
|
||||||
OldHealth = Health;
|
OldHealth = Health;
|
||||||
@ -2778,6 +2785,12 @@ function AdjustDamage(out int InDamage, out vector Momentum, Controller Instigat
|
|||||||
}
|
}
|
||||||
|
|
||||||
InstigatorMonster = InstigatedBy == none ? none : KFPawn_Monster(InstigatedBy.Pawn);
|
InstigatorMonster = InstigatedBy == none ? none : KFPawn_Monster(InstigatedBy.Pawn);
|
||||||
|
|
||||||
|
if (InDamage > 0 && InstigatedBy != none && InstigatedBy.Pawn.IsA('KFPawn_Human'))
|
||||||
|
{
|
||||||
|
InDamage = InDamage * AfflictionHandler.GetAfflictionDamageTakenModifier();
|
||||||
|
}
|
||||||
|
|
||||||
if( InDamage > 0 && InstigatorMonster != None )
|
if( InDamage > 0 && InstigatorMonster != None )
|
||||||
{
|
{
|
||||||
// Increase AI damage by AI Damage modifiers
|
// Increase AI damage by AI Damage modifiers
|
||||||
@ -5393,6 +5406,8 @@ simulated function StopExtraVFX(Name FXLabel)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
simulated function SetTurretWeaponAttachment(class<KFWeapon> WeaponClass) {}
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
InventoryManagerClass=class'KFInventoryManager'
|
InventoryManagerClass=class'KFInventoryManager'
|
||||||
@ -5648,11 +5663,15 @@ defaultproperties
|
|||||||
// Visuals
|
// Visuals
|
||||||
IntendedBodyScale=1.0
|
IntendedBodyScale=1.0
|
||||||
CurrentBodyScale=1.0
|
CurrentBodyScale=1.0
|
||||||
BodyScaleChangePerSecond=0.5
|
BodyScaleChangePerSecond=0.5f
|
||||||
IntendedHeadScale=1.0
|
IntendedHeadScale=1.0
|
||||||
CurrentHeadScale=1.0
|
CurrentHeadScale=1.0
|
||||||
bAllowDeathSM=true
|
bAllowDeathSM=true
|
||||||
|
|
||||||
bCanBePinned=false
|
bCanBePinned=false
|
||||||
LastHitZoneIndex=0
|
LastHitZoneIndex=0
|
||||||
|
|
||||||
|
// ---------------------------------------------
|
||||||
|
// AutoTurret
|
||||||
|
bIsTurret=false
|
||||||
}
|
}
|
||||||
|
@ -471,6 +471,14 @@ function AddDefaultInventory()
|
|||||||
DefaultInventory.AddItem(class<Inventory>(DynamicLoadObject("KFGameContent.KFInventory_Money", class'Class')));
|
DefaultInventory.AddItem(class<Inventory>(DynamicLoadObject("KFGameContent.KFInventory_Money", class'Class')));
|
||||||
|
|
||||||
Super.AddDefaultInventory();
|
Super.AddDefaultInventory();
|
||||||
|
|
||||||
|
if (GameInfo.OutbreakEvent != none && GameInfo.OutbreakEvent.ActiveEvent.bGunGameMode)
|
||||||
|
{
|
||||||
|
if (KFPlayerController_WeeklySurvival(Controller) != none)
|
||||||
|
{
|
||||||
|
KFPlayerController_WeeklySurvival(Controller).UpdateInitialHeldWeapon();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** When switching weapon modify GroundSpeed by encumbrance level */
|
/** When switching weapon modify GroundSpeed by encumbrance level */
|
||||||
@ -491,6 +499,12 @@ simulated function bool CanThrowWeapon()
|
|||||||
{
|
{
|
||||||
local KFPlayerController KFPC;
|
local KFPlayerController KFPC;
|
||||||
|
|
||||||
|
if (KFGameInfo(WorldInfo.Game).OutbreakEvent != none
|
||||||
|
&& KFGameInfo(WorldInfo.Game).OutbreakEvent.ActiveEvent.bDisableThrowWeapon)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
KFPC = KFPlayerController(Controller);
|
KFPC = KFPlayerController(Controller);
|
||||||
if (KFPC != none && KFPC.MyGFxManager != none && KFPC.MyGFxManager.TraderMenu != none && KFPC.MyGFxManager.CurrentMenu == KFPC.MyGFxManager.TraderMenu)
|
if (KFPC != none && KFPC.MyGFxManager != none && KFPC.MyGFxManager.TraderMenu != none && KFPC.MyGFxManager.CurrentMenu == KFPC.MyGFxManager.TraderMenu)
|
||||||
{
|
{
|
||||||
@ -2128,11 +2142,11 @@ client reliable function ClientOverrideHumanDefaults()
|
|||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
KFGRI = KFGameReplicationInfo(WorldInfo.GRI);
|
KFGRI = KFGameReplicationInfo(WorldInfo.GRI);
|
||||||
|
|
||||||
if (KFGRI != none && KFGRI.CurrentWeeklyIndex == 12)
|
if (KFGRI != none && KFGRI.CurrentWeeklyIndex == 12)
|
||||||
{
|
{
|
||||||
KFPRI = KFPlayerReplicationInfo(KFPC_WS.PlayerReplicationInfo);
|
KFPRI = KFPlayerReplicationInfo(KFPC_WS.PlayerReplicationInfo);
|
||||||
if (KFPRI != none)
|
if (KFPRI != none)
|
||||||
{
|
{
|
||||||
@ -2144,7 +2158,7 @@ client reliable function ClientOverrideHumanDefaults()
|
|||||||
KFPRI.SetWeeklyCharacterAttachment(CowboyHatIndex, 0);
|
KFPRI.SetWeeklyCharacterAttachment(CowboyHatIndex, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
|
@ -95,6 +95,9 @@ var int HealByAssistance;
|
|||||||
/** WWL Hat attach name*/
|
/** WWL Hat attach name*/
|
||||||
var name ZEDCowboyHatAttachName;
|
var name ZEDCowboyHatAttachName;
|
||||||
|
|
||||||
|
/** GunGameMode: score given when killed */
|
||||||
|
var byte GunGameKilledScore;
|
||||||
|
var byte GunGameAssistanceScore;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Information on resistant or vulnerable damage types
|
* Information on resistant or vulnerable damage types
|
||||||
@ -568,6 +571,13 @@ var transient array<ParticleSystemComponent> WeakPointVFXComponents;
|
|||||||
var repnotify WeakPoint WeakPoints_TS[`TINY_SKULL_MAX_WEAKPOINTS];
|
var repnotify WeakPoint WeakPoints_TS[`TINY_SKULL_MAX_WEAKPOINTS];
|
||||||
var ParticleSystem WeakPointParticleTemplate;
|
var ParticleSystem WeakPointParticleTemplate;
|
||||||
|
|
||||||
|
/*********************************************************************************************
|
||||||
|
* @name ShrinkRayGun
|
||||||
|
********************************************************************************************* */
|
||||||
|
|
||||||
|
var bool bCanBeKilledByShrinking;
|
||||||
|
var float ShrinkEffectModifier;
|
||||||
|
|
||||||
/*********************************************************************************************
|
/*********************************************************************************************
|
||||||
* @name Delegates
|
* @name Delegates
|
||||||
********************************************************************************************* */
|
********************************************************************************************* */
|
||||||
@ -2050,6 +2060,7 @@ event TakeDamage(int Damage, Controller InstigatedBy, vector HitLocation, vector
|
|||||||
local KFAIController KFAIC;
|
local KFAIController KFAIC;
|
||||||
local KFPawn_Monster KFPM;
|
local KFPawn_Monster KFPM;
|
||||||
local float NapalmCheckDist;
|
local float NapalmCheckDist;
|
||||||
|
local float InfernoRadius;
|
||||||
|
|
||||||
AIMonster = KFAIController_Monster(InstigatedBy);
|
AIMonster = KFAIController_Monster(InstigatedBy);
|
||||||
KFDT = class<KFDamageType>(DamageType);
|
KFDT = class<KFDamageType>(DamageType);
|
||||||
@ -2098,9 +2109,9 @@ event TakeDamage(int Damage, Controller InstigatedBy, vector HitLocation, vector
|
|||||||
&& DamageCauser != none
|
&& DamageCauser != none
|
||||||
&& KFDT != none
|
&& KFDT != none
|
||||||
&& KFDT.default.DoT_Type == DOT_Fire
|
&& KFDT.default.DoT_Type == DOT_Fire
|
||||||
&& KFDT != class'KFDT_Fire_Napalm'
|
&& KFDT != class'KFDT_Fire_Napalm')
|
||||||
&& WorldInfo.RealTimeSeconds - LastNapalmInfectCheckTime > 0.25f )
|
|
||||||
{
|
{
|
||||||
|
|
||||||
if( KFPC != none
|
if( KFPC != none
|
||||||
&& KFPC.GetPerk() != none
|
&& KFPC.GetPerk() != none
|
||||||
&& KFPC.GetPerk().CanSpreadNapalm()
|
&& KFPC.GetPerk().CanSpreadNapalm()
|
||||||
@ -2130,6 +2141,29 @@ event TakeDamage(int Damage, Controller InstigatedBy, vector HitLocation, vector
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if( Damage > 0
|
||||||
|
&& InstigatedBy != none
|
||||||
|
&& KFDT != none
|
||||||
|
&& KFDT.default.DoT_Type == DOT_Fire
|
||||||
|
&& KFDT != class'KFDT_Fire_Napalm'
|
||||||
|
&& KFPC != none
|
||||||
|
&& KFPC.GetPerk() != none
|
||||||
|
&& KFPC.GetPerk().CanSpreadInferno()
|
||||||
|
&& class'KFPerk'.static.IsDamageTypeOnThisPerk(KFDT, class'KFPerk_Firebug') )
|
||||||
|
{
|
||||||
|
|
||||||
|
InfernoRadius = CylinderComponent.CollisionRadius + class'KFPerk_Firebug'.static.GetInfernoRadius();
|
||||||
|
|
||||||
|
//PawnOwner.DrawDebugSphere(PawnOwner.Location, InfernoRadius, 20, 255, 255, 0, true);
|
||||||
|
|
||||||
|
foreach CollidingActors(class'KFPawn_Monster', KFPM, InfernoRadius, Location, true,,)
|
||||||
|
{
|
||||||
|
KFPM.ApplyDamageOverTime(Damage,
|
||||||
|
KFPC,
|
||||||
|
KFDT);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
KFPRI = KFPlayerReplicationInfo( PlayerReplicationInfo );
|
KFPRI = KFPlayerReplicationInfo( PlayerReplicationInfo );
|
||||||
if( KFPRI != none )
|
if( KFPRI != none )
|
||||||
{
|
{
|
||||||
@ -4907,7 +4941,8 @@ DefaultProperties
|
|||||||
IncapSettings(AF_Microwave)=(Cooldown=5.0, Duration=5.0,)
|
IncapSettings(AF_Microwave)=(Cooldown=5.0, Duration=5.0,)
|
||||||
IncapSettings(AF_Freeze)=(Cooldown=5.0)
|
IncapSettings(AF_Freeze)=(Cooldown=5.0)
|
||||||
IncapSettings(AF_Snare)=(Cooldown=5.0, Duration=5.0,)
|
IncapSettings(AF_Snare)=(Cooldown=5.0, Duration=5.0,)
|
||||||
|
IncapSettings(AF_BigHead)=(Cooldown=0.0, Duration=10.0)
|
||||||
|
IncapSettings(AF_Shrink)=(Cooldown=0.0, Duration=10.0)
|
||||||
// ---------------------------------------------
|
// ---------------------------------------------
|
||||||
// Movement / Physics
|
// Movement / Physics
|
||||||
bCanCrouch=false
|
bCanCrouch=false
|
||||||
@ -5052,4 +5087,10 @@ DefaultProperties
|
|||||||
ZEDCowboyHatAttachName=HEAD_Attach
|
ZEDCowboyHatAttachName=HEAD_Attach
|
||||||
|
|
||||||
WeakPointParticleTemplate=ParticleSystem'FX_Gameplay_EMIT.FX_Weak_Indicator'
|
WeakPointParticleTemplate=ParticleSystem'FX_Gameplay_EMIT.FX_Weak_Indicator'
|
||||||
|
|
||||||
|
GunGameKilledScore=0
|
||||||
|
GunGameAssistanceScore=0
|
||||||
|
|
||||||
|
bCanBeKilledByShrinking=true
|
||||||
|
ShrinkEffectModifier=1.0f
|
||||||
}
|
}
|
||||||
|
@ -445,4 +445,6 @@ defaultproperties
|
|||||||
bCanBePinned=false
|
bCanBePinned=false
|
||||||
|
|
||||||
VortexAttracionModifier=0.3f
|
VortexAttracionModifier=0.3f
|
||||||
|
|
||||||
|
bCanBeKilledByShrinking=false
|
||||||
}
|
}
|
@ -461,6 +461,39 @@ static function bool IsBackupWeapon( KFWeapon KFW )
|
|||||||
return KFW != none && KFW.default.bIsBackupWeapon;
|
return KFW != none && KFW.default.bIsBackupWeapon;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Return if a weapon is a knife
|
||||||
|
*
|
||||||
|
* @param KFW Weapon to check
|
||||||
|
* @return true if knife weapon
|
||||||
|
*/
|
||||||
|
static simulated public function bool IsKnife( KFWeapon KFW )
|
||||||
|
{
|
||||||
|
return KFW != none && KFW.default.bIsBackupWeapon && KFW.IsMeleeWeapon();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Return if a weapon is a welder
|
||||||
|
*
|
||||||
|
* @param KFW Weapon to check
|
||||||
|
* @return true if knife weapon
|
||||||
|
*/
|
||||||
|
static simulated public function bool IsWelder( KFWeapon KFW )
|
||||||
|
{
|
||||||
|
return KFW != none && KFW.Class.Name == 'KFWeap_Welder';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Return if a weapon is the syringe
|
||||||
|
*
|
||||||
|
* @param KFW Weapon to check
|
||||||
|
* @return true if syringe weapon
|
||||||
|
*/
|
||||||
|
static simulated public function bool IsSyringe( KFWeapon KFW )
|
||||||
|
{
|
||||||
|
return KFW != none && KFW.Class.Name == 'KFWeap_Healer_Syringe';
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Return if a weapon is Dual 9mm
|
* @brief Return if a weapon is Dual 9mm
|
||||||
*
|
*
|
||||||
@ -505,6 +538,29 @@ static function bool IsDoshinegun( KFWeapon KFW )
|
|||||||
return KFW != none && KFW.Class.Name == 'KFWeap_AssaultRifle_Doshinegun';
|
return KFW != none && KFW.Class.Name == 'KFWeap_AssaultRifle_Doshinegun';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Return if a weapon is Crossboom (special case for high rounds perk)
|
||||||
|
*
|
||||||
|
* @param KFW Weapon to check
|
||||||
|
* @return true if backup weapon
|
||||||
|
*/
|
||||||
|
static function bool IsHRGCrossboom( KFWeapon KFW )
|
||||||
|
{
|
||||||
|
return KFW != none && KFW.Class.Name == 'KFWeap_HRG_Crossboom';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Return if a weapon is AutoTurret (should ignore ammo upgrades)
|
||||||
|
*
|
||||||
|
* @param KFW Weapon to check
|
||||||
|
* @return true if backup weapon
|
||||||
|
*/
|
||||||
|
static function bool IsAutoTurret( KFWeapon KFW )
|
||||||
|
{
|
||||||
|
return KFW != none && KFW.Class.Name == 'KFWeap_AutoTurret';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*********************************************************************************************
|
/*********************************************************************************************
|
||||||
* @name Build / Level Management - Apply and save the updated build and level
|
* @name Build / Level Management - Apply and save the updated build and level
|
||||||
********************************************************************************************* */
|
********************************************************************************************* */
|
||||||
@ -789,7 +845,7 @@ simulated final function int GetSavedBuild()
|
|||||||
simulated event PreBeginPlay()
|
simulated event PreBeginPlay()
|
||||||
{
|
{
|
||||||
// Set the grenade class for this perk
|
// Set the grenade class for this perk
|
||||||
GrenadeClass = class<KFProj_Grenade>(DynamicLoadObject(GrenadeWeaponDef.default.WeaponClassPath, class'Class'));
|
GrenadeClass = class<KFProj_Grenade>(DynamicLoadObject(GetGrenadeClassPath(), class'Class'));
|
||||||
PerkIcon = Texture2D(DynamicLoadObject(GetPerkIconPath(), class'Texture2D'));
|
PerkIcon = Texture2D(DynamicLoadObject(GetPerkIconPath(), class'Texture2D'));
|
||||||
|
|
||||||
MyKFGRI = KFGameReplicationInfo(WorldInfo.GRI);
|
MyKFGRI = KFGameReplicationInfo(WorldInfo.GRI);
|
||||||
@ -1020,6 +1076,12 @@ simulated function string GetKnifeWeaponClassPath()
|
|||||||
return KnifeWeaponDef.default.WeaponClassPath;
|
return KnifeWeaponDef.default.WeaponClassPath;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Returns the primary weapon's class path for this perk */
|
||||||
|
simulated function string GetGrenadeClassPath()
|
||||||
|
{
|
||||||
|
return GrenadeWeaponDef.default.WeaponClassPath;
|
||||||
|
}
|
||||||
|
|
||||||
simulated function bool PerkNeedsTick(){ return false; }
|
simulated function bool PerkNeedsTick(){ return false; }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1208,6 +1270,7 @@ simulated function bool IsFlarotovActive(){ return false; }
|
|||||||
function float GetDoTScalerAdditions(class<KFDamageType> KFDT);
|
function float GetDoTScalerAdditions(class<KFDamageType> KFDT);
|
||||||
function bool GetFireStumble( optional KFPawn KFP, optional class<DamageType> DamageType ){ return false; }
|
function bool GetFireStumble( optional KFPawn KFP, optional class<DamageType> DamageType ){ return false; }
|
||||||
function bool CanSpreadNapalm(){ return false; }
|
function bool CanSpreadNapalm(){ return false; }
|
||||||
|
function bool CanSpreadInferno(){ return false; }
|
||||||
function bool CouldBeZedShrapnel( class<KFDamageType> KFDT ){ return false; }
|
function bool CouldBeZedShrapnel( class<KFDamageType> KFDT ){ return false; }
|
||||||
simulated function bool ShouldShrapnel(){ return false; }
|
simulated function bool ShouldShrapnel(){ return false; }
|
||||||
simulated function float GetSplashDamageModifier(){ return 1.f; }
|
simulated function float GetSplashDamageModifier(){ return 1.f; }
|
||||||
@ -1293,6 +1356,11 @@ function OnWaveEnded();
|
|||||||
|
|
||||||
function OnWaveStart();
|
function OnWaveStart();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Notifications for Wave start / end but on client
|
||||||
|
*/
|
||||||
|
simulated function OnClientWaveEnded();
|
||||||
|
|
||||||
simulated function bool GetUsingTactialReload( KFWeapon KFW )
|
simulated function bool GetUsingTactialReload( KFWeapon KFW )
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
@ -1493,6 +1561,46 @@ simulated function FormatPerkSkills()
|
|||||||
|
|
||||||
simulated function PlayerDied(){}
|
simulated function PlayerDied(){}
|
||||||
|
|
||||||
|
static simulated function bool CanChoosePrimaryWeapon()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
static simulated function bool CanChooseGrenade()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated function byte OnPrevWeaponSelected() { return 255; }
|
||||||
|
simulated function byte OnNextWeaponSelected() { return 255; }
|
||||||
|
simulated function byte OnPrevGrenadeSelected() { return 255; }
|
||||||
|
simulated function byte OnNextGrenadeSelected() { return 255; }
|
||||||
|
simulated function byte SetWeaponSelectedIndex(byte idx);
|
||||||
|
simulated function byte SetGrenadeSelectedIndex(byte idx);
|
||||||
|
simulated function byte SetGrenadeSelectedIndexUsingSkills(byte idx, byte InSelectedSkills[`MAX_PERK_SKILLS], bool IsChoosingPrev, bool IsChoosingNext);
|
||||||
|
simulated function byte GetGrenadeSelectedIndex() { return 255;}
|
||||||
|
simulated function InitializeGrenades();
|
||||||
|
|
||||||
|
static simulated function string GetPrimaryWeaponName(byte Idx)
|
||||||
|
{
|
||||||
|
return default.PrimaryWeaponDef.static.GetItemName();
|
||||||
|
}
|
||||||
|
|
||||||
|
static simulated function string GetPrimaryWeaponImagePath(byte Idx)
|
||||||
|
{
|
||||||
|
return default.PrimaryWeaponDef.static.GetImagePath();
|
||||||
|
}
|
||||||
|
|
||||||
|
static simulated function string GetGrenadeWeaponName(byte Idx)
|
||||||
|
{
|
||||||
|
return default.GrenadeWeaponDef.static.GetItemName();
|
||||||
|
}
|
||||||
|
|
||||||
|
static simulated function string GetGrenadeWeaponImagePath(byte Idx)
|
||||||
|
{
|
||||||
|
return default.GrenadeWeaponDef.static.GetImagePath();
|
||||||
|
}
|
||||||
|
|
||||||
DefaultProperties
|
DefaultProperties
|
||||||
{
|
{
|
||||||
bTickIsDisabled=TRUE
|
bTickIsDisabled=TRUE
|
||||||
|
@ -251,7 +251,8 @@ simulated function ModifyMagSizeAndNumber( KFWeapon KFW, out int MagazineCapacit
|
|||||||
TempCapacity = MagazineCapacity;
|
TempCapacity = MagazineCapacity;
|
||||||
|
|
||||||
// FAMAS needs its secondary ammo affected
|
// FAMAS needs its secondary ammo affected
|
||||||
if( (!bSecondary || IsFAMAS(KFW)) && IsWeaponOnPerk( KFW, WeaponPerkClass, self.class ) && (KFW == none || !KFW.bNoMagazine) )
|
// Autoturret cannot modify its magazine capacity
|
||||||
|
if( (!bSecondary || IsFAMAS(KFW)) && !IsAutoTurret(KFW) && IsWeaponOnPerk( KFW, WeaponPerkClass, self.class ) && (KFW == none || !KFW.bNoMagazine) )
|
||||||
{
|
{
|
||||||
if( IsLargeMagActive() )
|
if( IsLargeMagActive() )
|
||||||
{
|
{
|
||||||
@ -260,9 +261,10 @@ simulated function ModifyMagSizeAndNumber( KFWeapon KFW, out int MagazineCapacit
|
|||||||
|
|
||||||
if( IsEatLeadActive() )
|
if( IsEatLeadActive() )
|
||||||
{
|
{
|
||||||
TempCapacity += MagazineCapacity * GetSkillValue( PerkSkills[ECommandoEatLead] );
|
TempCapacity += MagazineCapacity * GetSkillValue( PerkSkills[ECommandoEatLead] );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
MagazineCapacity = Round(TempCapacity);
|
MagazineCapacity = Round(TempCapacity);
|
||||||
}
|
}
|
||||||
|
@ -126,6 +126,7 @@ simulated function ModifyDamageGiven( out int InDamage, optional Actor DamageCau
|
|||||||
{
|
{
|
||||||
local KFWeapon KFW;
|
local KFWeapon KFW;
|
||||||
local float TempDamage;
|
local float TempDamage;
|
||||||
|
local bool bIsCrossboom;
|
||||||
|
|
||||||
if( DamageType != none && IsDamageIgnoredDT( DamageType ) )
|
if( DamageType != none && IsDamageIgnoredDT( DamageType ) )
|
||||||
{
|
{
|
||||||
@ -140,7 +141,9 @@ simulated function ModifyDamageGiven( out int InDamage, optional Actor DamageCau
|
|||||||
KFW = GetWeaponFromDamageCauser( DamageCauser );
|
KFW = GetWeaponFromDamageCauser( DamageCauser );
|
||||||
}
|
}
|
||||||
|
|
||||||
if( (KFW != none && IsWeaponOnPerk( KFW,, self.class )) || (DamageType != none && IsDamageTypeOnPerk( DamageType )) )
|
bIsCrossboom = IsHRGCrossboom(KFW);
|
||||||
|
|
||||||
|
if( (KFW != none && (IsWeaponOnPerk( KFW,, self.class )) || bIsCrossboom) || (DamageType != none && IsDamageTypeOnPerk( DamageType )) )
|
||||||
{
|
{
|
||||||
`QALog( "Base Damage Given" @ DamageType @ KFW @ InDamage, bLogPerk );
|
`QALog( "Base Damage Given" @ DamageType @ KFW @ InDamage, bLogPerk );
|
||||||
//Passive
|
//Passive
|
||||||
@ -153,9 +156,9 @@ simulated function ModifyDamageGiven( out int InDamage, optional Actor DamageCau
|
|||||||
`QALog( "Bombadier Given" @ DamageType @ KFW @ InDamage * GetSkillValue( PerkSkills[EDemoDamage] ), bLogPerk );
|
`QALog( "Bombadier Given" @ DamageType @ KFW @ InDamage * GetSkillValue( PerkSkills[EDemoDamage] ), bLogPerk );
|
||||||
}
|
}
|
||||||
|
|
||||||
if( IsDirectHitActive() && DamageType != none && IsDamageTypeOnPerk( DamageType ) )
|
if( IsDirectHitActive() && ((DamageType != none && IsDamageTypeOnPerk( DamageType )) || bIsCrossboom ))
|
||||||
{
|
{
|
||||||
if( class<KFDT_Ballistic_Shell>(DamageType) != none || class<KFDT_Bludgeon>(DamageType)!=none)
|
if( class<KFDT_Ballistic_Shell>(DamageType) != none || class<KFDT_Bludgeon>(DamageType)!=none || (bIsCrossboom && class<KFDT_Piercing>(DamageType) != none))
|
||||||
{
|
{
|
||||||
TempDamage += InDamage * GetSkillValue( PerkSkills[EDemoDirectHit] );
|
TempDamage += InDamage * GetSkillValue( PerkSkills[EDemoDirectHit] );
|
||||||
`QALog( "High Impact Damage Given" @ DamageType @ KFW @ InDamage * GetSkillValue( PerkSkills[EDemoDirectHit] ), bLogPerk );
|
`QALog( "High Impact Damage Given" @ DamageType @ KFW @ InDamage * GetSkillValue( PerkSkills[EDemoDirectHit] ), bLogPerk );
|
||||||
|
@ -32,7 +32,8 @@ var private const class<DamageType> SnareCausingDmgTypeClass;
|
|||||||
var private const int NapalmDamage;
|
var private const int NapalmDamage;
|
||||||
/** Multiplier on CylinderComponent.CollisionRadius to check for infecting other zeds */
|
/** Multiplier on CylinderComponent.CollisionRadius to check for infecting other zeds */
|
||||||
var private const float NapalmCheckCollisionScale;
|
var private const float NapalmCheckCollisionScale;
|
||||||
|
// Radius in cm to check for, this is added to CylinderComponent.CollisionRadius
|
||||||
|
var private const float InfernoRadius;
|
||||||
|
|
||||||
enum EFirebugSkills
|
enum EFirebugSkills
|
||||||
{
|
{
|
||||||
@ -294,11 +295,21 @@ function bool CanSpreadNapalm()
|
|||||||
return IsNapalmActive();
|
return IsNapalmActive();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function bool CanSpreadInferno()
|
||||||
|
{
|
||||||
|
return IsInfernoActive();
|
||||||
|
}
|
||||||
|
|
||||||
static final function float GetNapalmCheckCollisionScale()
|
static final function float GetNapalmCheckCollisionScale()
|
||||||
{
|
{
|
||||||
return default.NapalmCheckCollisionScale;
|
return default.NapalmCheckCollisionScale;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static final function float GetInfernoRadius()
|
||||||
|
{
|
||||||
|
return default.InfernoRadius;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Checks if a zed could potentially explode later
|
* @brief Checks if a zed could potentially explode later
|
||||||
*
|
*
|
||||||
@ -634,6 +645,7 @@ DefaultProperties
|
|||||||
|
|
||||||
NapalmDamage=7 //50
|
NapalmDamage=7 //50
|
||||||
NapalmCheckCollisionScale=2.0f //6.0
|
NapalmCheckCollisionScale=2.0f //6.0
|
||||||
|
InfernoRadius=800.0f
|
||||||
|
|
||||||
ShrapnelChance=0.3f //0.2
|
ShrapnelChance=0.3f //0.2
|
||||||
|
|
||||||
|
@ -806,7 +806,7 @@ simulated function bool ShouldDisableZedTimeSkillsForWildWest()
|
|||||||
{
|
{
|
||||||
if (WorldInfo.NetMode == NM_Client)
|
if (WorldInfo.NetMode == NM_Client)
|
||||||
{
|
{
|
||||||
return MyKFGRI.bIsWeeklyMode && class'KFGameEngine'.static.GetWeeklyEventIndexMod() == 12;
|
return MyKFGRI.bIsWeeklyMode && MyKFGRI.CurrentWeeklyIndex == 12;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -696,7 +696,7 @@ function bool ShouldDisableZedTimeSkillsForWildWest()
|
|||||||
{
|
{
|
||||||
if (WorldInfo.NetMode == NM_Client)
|
if (WorldInfo.NetMode == NM_Client)
|
||||||
{
|
{
|
||||||
return MyKFGRI.bIsWeeklyMode && class'KFGameEngine'.static.GetWeeklyEventIndexMod() == 12;
|
return MyKFGRI.bIsWeeklyMode && MyKFGRI.CurrentWeeklyIndex == 12;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -708,7 +708,7 @@ simulated function bool IsFanfareActiveForWildWest()
|
|||||||
{
|
{
|
||||||
if (WorldInfo.NetMode == NM_Client)
|
if (WorldInfo.NetMode == NM_Client)
|
||||||
{
|
{
|
||||||
return MyKFGRI.bIsWeeklyMode && class'KFGameEngine'.static.GetWeeklyEventIndexMod() == 12;
|
return MyKFGRI.bIsWeeklyMode && MyKFGRI.CurrentWeeklyIndex == 12;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -423,7 +423,7 @@ simulated function Interact( KFPawn_Human KFPH )
|
|||||||
{
|
{
|
||||||
foreach KFPH.InvManager.InventoryActors( class'KFWeapon', KFW )
|
foreach KFPH.InvManager.InventoryActors( class'KFWeapon', KFW )
|
||||||
{
|
{
|
||||||
if( KFW.static.DenyPerkResupply() )
|
if( KFW.DenyPerkResupply() )
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -47,14 +47,24 @@ var class<KFWeaponDefinition> HealingGrenadeWeaponDef;
|
|||||||
var class<KFWeaponDefinition> MolotovGrenadeWeaponDef;
|
var class<KFWeaponDefinition> MolotovGrenadeWeaponDef;
|
||||||
|
|
||||||
var private const array<class<KFWeaponDefinition> > PrimaryWeaponPaths;
|
var private const array<class<KFWeaponDefinition> > PrimaryWeaponPaths;
|
||||||
|
var private const array<class<KFWeaponDefinition> > GrenadeWeaponPaths;
|
||||||
var private const array<string> KnifeWeaponPaths;
|
var private const array<string> KnifeWeaponPaths;
|
||||||
var int StartingWeaponClassIndex;
|
var byte StartingWeaponClassIndex;
|
||||||
|
var byte StartingGrenadeClassIndex; // This is the cached value for the tentative Grenade selection (only applied when gameplay time)
|
||||||
|
var byte CurrentGrenadeClassIndex; // This is the gameplay value we use for Grenade Index, it can only be changed while TraderTime / Wave Start / Wave Ended
|
||||||
|
|
||||||
var private const array<name> TacticalReloadAsReloadRateClassNames;
|
var private const array<name> TacticalReloadAsReloadRateClassNames;
|
||||||
|
|
||||||
/** When MakeThingsGoBoom skill is selected the survivalist gets additional explosive resistance */
|
/** When MakeThingsGoBoom skill is selected the survivalist gets additional explosive resistance */
|
||||||
var private const float MakeThingsGoBoomExplosiveResistance;
|
var private const float MakeThingsGoBoomExplosiveResistance;
|
||||||
|
|
||||||
|
var private const byte MedicGrenadeIndex;
|
||||||
|
var private const byte FirebugGrenadeIndex;
|
||||||
|
|
||||||
|
var private transient bool bIsGrenadeDirty;
|
||||||
|
|
||||||
|
`define WEAP_IDX_NONE 255
|
||||||
|
|
||||||
/*********************************************************************************************
|
/*********************************************************************************************
|
||||||
* @name Perk init and spawning
|
* @name Perk init and spawning
|
||||||
******************************************************************************************** */
|
******************************************************************************************** */
|
||||||
@ -105,7 +115,11 @@ function bool ShouldGetAllTheXP()
|
|||||||
/* Returns the primary weapon's class path for this perk */
|
/* Returns the primary weapon's class path for this perk */
|
||||||
simulated function string GetPrimaryWeaponClassPath()
|
simulated function string GetPrimaryWeaponClassPath()
|
||||||
{
|
{
|
||||||
StartingWeaponClassIndex = Rand(PrimaryWeaponPaths.length);
|
if (StartingWeaponClassIndex == `WEAP_IDX_NONE)
|
||||||
|
{
|
||||||
|
StartingWeaponClassIndex = Rand(PrimaryWeaponPaths.length);
|
||||||
|
}
|
||||||
|
|
||||||
AutoBuyLoadOutPath.InsertItem(0,PrimaryWeaponPaths[StartingWeaponClassIndex]);
|
AutoBuyLoadOutPath.InsertItem(0,PrimaryWeaponPaths[StartingWeaponClassIndex]);
|
||||||
return PrimaryWeaponPaths[StartingWeaponClassIndex].default.WeaponClassPath;
|
return PrimaryWeaponPaths[StartingWeaponClassIndex].default.WeaponClassPath;
|
||||||
}
|
}
|
||||||
@ -556,16 +570,7 @@ simulated function float GetSnarePowerModifier( optional class<DamageType> Damag
|
|||||||
/* Returns the grenade class for this perk */
|
/* Returns the grenade class for this perk */
|
||||||
simulated function class< KFProj_Grenade > GetGrenadeClass()
|
simulated function class< KFProj_Grenade > GetGrenadeClass()
|
||||||
{
|
{
|
||||||
if( IsAmmoVestActive() )
|
return class<KFProj_Grenade>(DynamicLoadObject(GrenadeWeaponPaths[CurrentGrenadeClassIndex].default.WeaponClassPath, class'Class'));
|
||||||
{
|
|
||||||
return class<KFProj_Grenade>(DynamicLoadObject(HealingGrenadeWeaponDef.default.WeaponClassPath, class'Class'));
|
|
||||||
}
|
|
||||||
else if( IsBigPocketsActive() )
|
|
||||||
{
|
|
||||||
return class<KFProj_Grenade>(DynamicLoadObject(MolotovGrenadeWeaponDef.default.WeaponClassPath, class'Class'));
|
|
||||||
}
|
|
||||||
|
|
||||||
return GrenadeClass;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -744,41 +749,379 @@ simulated static function GetPassiveStrings( out array<string> PassiveValues, ou
|
|||||||
|
|
||||||
simulated function string GetGrenadeImagePath()
|
simulated function string GetGrenadeImagePath()
|
||||||
{
|
{
|
||||||
if( IsAmmoVestActive() )
|
return CurrentGrenadeClassIndex == `WEAP_IDX_NONE ? default.GrenadeWeaponDef.static.GetImagePath() : default.GrenadeWeaponPaths[CurrentGrenadeClassIndex].static.GetImagePath();
|
||||||
{
|
|
||||||
return default.HealingGrenadeWeaponDef.Static.GetImagePath();
|
|
||||||
}
|
|
||||||
else if( IsBigPocketsActive() )
|
|
||||||
{
|
|
||||||
return default.MolotovGrenadeWeaponDef.Static.GetImagePath();
|
|
||||||
}
|
|
||||||
|
|
||||||
return default.GrenadeWeaponDef.Static.GetImagePath();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
simulated function class<KFWeaponDefinition> GetGrenadeWeaponDef()
|
simulated function class<KFWeaponDefinition> GetGrenadeWeaponDef()
|
||||||
{
|
{
|
||||||
if( IsAmmoVestActive() )
|
return GrenadeWeaponPaths[CurrentGrenadeClassIndex];
|
||||||
{
|
}
|
||||||
return default.HealingGrenadeWeaponDef;
|
|
||||||
}
|
static simulated function bool CanChoosePrimaryWeapon()
|
||||||
else if( IsBigPocketsActive() )
|
{
|
||||||
{
|
return true;
|
||||||
return default.MolotovGrenadeWeaponDef;
|
}
|
||||||
|
|
||||||
|
static simulated function bool CanChooseGrenade()
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated function byte OnPrevWeaponSelected()
|
||||||
|
{
|
||||||
|
if (StartingWeaponClassIndex == `WEAP_IDX_NONE)
|
||||||
|
{
|
||||||
|
StartingWeaponClassIndex = PrimaryWeaponPaths.Length - 1;
|
||||||
|
}
|
||||||
|
else if (StartingWeaponClassIndex == 0)
|
||||||
|
{
|
||||||
|
StartingWeaponClassIndex = `WEAP_IDX_NONE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
--StartingWeaponClassIndex;
|
||||||
}
|
}
|
||||||
|
|
||||||
return default.GrenadeWeaponDef;
|
return StartingWeaponClassIndex;
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated function byte OnNextWeaponSelected()
|
||||||
|
{
|
||||||
|
if (StartingWeaponClassIndex == `WEAP_IDX_NONE)
|
||||||
|
{
|
||||||
|
StartingWeaponClassIndex = 0;
|
||||||
|
}
|
||||||
|
else if (StartingWeaponClassIndex == PrimaryWeaponPaths.Length - 1)
|
||||||
|
{
|
||||||
|
StartingWeaponClassIndex = `WEAP_IDX_NONE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
++StartingWeaponClassIndex;
|
||||||
|
}
|
||||||
|
|
||||||
|
return StartingWeaponClassIndex;
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated function byte OnPrevGrenadeSelected()
|
||||||
|
{
|
||||||
|
if (StartingGrenadeClassIndex == `WEAP_IDX_NONE)
|
||||||
|
{
|
||||||
|
StartingGrenadeClassIndex = GrenadeWeaponPaths.Length - 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
--StartingGrenadeClassIndex;
|
||||||
|
|
||||||
|
if (StartingGrenadeClassIndex == FirebugGrenadeIndex && !IsBigPocketsActive())
|
||||||
|
{
|
||||||
|
--StartingGrenadeClassIndex;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (StartingGrenadeClassIndex == MedicGrenadeIndex && !IsAmmoVestActive())
|
||||||
|
{
|
||||||
|
--StartingGrenadeClassIndex;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (StartingGrenadeClassIndex > GrenadeWeaponPaths.Length - 1)
|
||||||
|
{
|
||||||
|
StartingGrenadeClassIndex = `WEAP_IDX_NONE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bIsGrenadeDirty=true;
|
||||||
|
|
||||||
|
return StartingGrenadeClassIndex;
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated function byte OnNextGrenadeSelected()
|
||||||
|
{
|
||||||
|
if (StartingGrenadeClassIndex == `WEAP_IDX_NONE)
|
||||||
|
{
|
||||||
|
StartingGrenadeClassIndex = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
++StartingGrenadeClassIndex;
|
||||||
|
|
||||||
|
if (StartingGrenadeClassIndex == MedicGrenadeIndex && !IsAmmoVestActive())
|
||||||
|
{
|
||||||
|
++StartingGrenadeClassIndex;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (StartingGrenadeClassIndex == FirebugGrenadeIndex && !IsBigPocketsActive())
|
||||||
|
{
|
||||||
|
++StartingGrenadeClassIndex;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (StartingGrenadeClassIndex > GrenadeWeaponPaths.Length - 1)
|
||||||
|
{
|
||||||
|
StartingGrenadeClassIndex = `WEAP_IDX_NONE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bIsGrenadeDirty=true;
|
||||||
|
|
||||||
|
return StartingGrenadeClassIndex;
|
||||||
|
}
|
||||||
|
|
||||||
|
static simulated function string GetPrimaryWeaponName(byte Idx)
|
||||||
|
{
|
||||||
|
return Idx == `WEAP_IDX_NONE ? default.PrimaryWeaponDef.static.GetItemName() : default.PrimaryWeaponPaths[Idx].static.GetItemName();
|
||||||
|
}
|
||||||
|
|
||||||
|
static simulated function string GetPrimaryWeaponImagePath(byte Idx)
|
||||||
|
{
|
||||||
|
return Idx == `WEAP_IDX_NONE ? default.PrimaryWeaponDef.static.GetImagePath() : default.PrimaryWeaponPaths[Idx].static.GetImagePath();
|
||||||
|
}
|
||||||
|
|
||||||
|
static simulated function string GetGrenadeWeaponName(byte Idx)
|
||||||
|
{
|
||||||
|
return Idx == `WEAP_IDX_NONE ? default.GrenadeWeaponDef.static.GetItemName() : default.GrenadeWeaponPaths[Idx].static.GetItemName();
|
||||||
|
}
|
||||||
|
|
||||||
|
static simulated function string GetGrenadeWeaponImagePath(byte Idx)
|
||||||
|
{
|
||||||
|
return Idx == `WEAP_IDX_NONE ? default.GrenadeWeaponDef.static.GetImagePath() : default.GrenadeWeaponPaths[Idx].static.GetImagePath();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Returns the primary weapon's class path for this perk */
|
||||||
|
simulated function string GetGrenadeClassPath()
|
||||||
|
{
|
||||||
|
return GrenadeWeaponPaths[StartingGrenadeClassIndex].default.WeaponClassPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated function byte GetGrenadeSelectedIndex() { return CurrentGrenadeClassIndex; }
|
||||||
|
|
||||||
|
simulated function byte SetWeaponSelectedIndex(byte idx)
|
||||||
|
{
|
||||||
|
if (idx >= default.PrimaryWeaponPaths.Length && idx < 255)
|
||||||
|
{
|
||||||
|
StartingWeaponClassIndex = 0;
|
||||||
|
}
|
||||||
|
else if (idx == 255)
|
||||||
|
{
|
||||||
|
StartingWeaponClassIndex = `WEAP_IDX_NONE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
StartingWeaponClassIndex = idx;
|
||||||
|
}
|
||||||
|
|
||||||
|
ServerUpdateCurrentWeapon(StartingWeaponClassIndex);
|
||||||
|
|
||||||
|
return StartingWeaponClassIndex;
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated function byte SetGrenadeSelectedIndex(byte idx)
|
||||||
|
{
|
||||||
|
local KFGameReplicationInfo KFGRI;
|
||||||
|
|
||||||
|
KFGRI = KFGameReplicationInfo(WorldInfo.GRI);
|
||||||
|
|
||||||
|
if (idx >= default.GrenadeWeaponPaths.Length && idx < 255)
|
||||||
|
{
|
||||||
|
StartingGrenadeClassIndex = 0;
|
||||||
|
}
|
||||||
|
else if (idx == 255)
|
||||||
|
{
|
||||||
|
StartingGrenadeClassIndex = `WEAP_IDX_NONE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
StartingGrenadeClassIndex = idx;
|
||||||
|
|
||||||
|
if (StartingGrenadeClassIndex == MedicGrenadeIndex || StartingGrenadeClassIndex == FirebugGrenadeIndex)
|
||||||
|
{
|
||||||
|
if (IsAmmoVestActive())
|
||||||
|
{
|
||||||
|
StartingGrenadeClassIndex = MedicGrenadeIndex;
|
||||||
|
}
|
||||||
|
else if (IsBigPocketsActive())
|
||||||
|
{
|
||||||
|
StartingGrenadeClassIndex = FirebugGrenadeIndex;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
StartingGrenadeClassIndex = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// If we are in no gameplay time insta change
|
||||||
|
if (!KFGRI.bWaveIsActive)
|
||||||
|
{
|
||||||
|
UpdateCurrentGrenade();
|
||||||
|
}
|
||||||
|
|
||||||
|
return StartingGrenadeClassIndex;
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated function byte SetGrenadeSelectedIndexUsingSkills(byte idx, byte InSelectedSkills[`MAX_PERK_SKILLS], bool IsChoosingPrev, bool IsChoosingNext)
|
||||||
|
{
|
||||||
|
local KFGameReplicationInfo KFGRI;
|
||||||
|
local bool AmmoVestActive, BigPocketsActive;
|
||||||
|
|
||||||
|
KFGRI = KFGameReplicationInfo(WorldInfo.GRI);
|
||||||
|
|
||||||
|
AmmoVestActive = false;
|
||||||
|
BigPocketsActive = false;
|
||||||
|
|
||||||
|
if (idx >= default.GrenadeWeaponPaths.Length && idx < 255)
|
||||||
|
{
|
||||||
|
StartingGrenadeClassIndex = 0;
|
||||||
|
}
|
||||||
|
else if (idx == 255)
|
||||||
|
{
|
||||||
|
StartingGrenadeClassIndex = `WEAP_IDX_NONE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
StartingGrenadeClassIndex = idx;
|
||||||
|
|
||||||
|
if (StartingGrenadeClassIndex == MedicGrenadeIndex || StartingGrenadeClassIndex == FirebugGrenadeIndex)
|
||||||
|
{
|
||||||
|
AmmoVestActive = InSelectedSkills[2] == 1;
|
||||||
|
BigPocketsActive = InSelectedSkills[2] == 2;
|
||||||
|
|
||||||
|
if (IsChoosingPrev)
|
||||||
|
{
|
||||||
|
if (StartingGrenadeClassIndex == FirebugGrenadeIndex)
|
||||||
|
{
|
||||||
|
if (BigPocketsActive == false)
|
||||||
|
{
|
||||||
|
--StartingGrenadeClassIndex;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (StartingGrenadeClassIndex == MedicGrenadeIndex)
|
||||||
|
{
|
||||||
|
if (AmmoVestActive == false)
|
||||||
|
{
|
||||||
|
--StartingGrenadeClassIndex;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (IsChoosingNext)
|
||||||
|
{
|
||||||
|
if (StartingGrenadeClassIndex == MedicGrenadeIndex)
|
||||||
|
{
|
||||||
|
if (AmmoVestActive == false)
|
||||||
|
{
|
||||||
|
++StartingGrenadeClassIndex;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (StartingGrenadeClassIndex == FirebugGrenadeIndex)
|
||||||
|
{
|
||||||
|
if (BigPocketsActive == false)
|
||||||
|
{
|
||||||
|
++StartingGrenadeClassIndex;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (AmmoVestActive)
|
||||||
|
{
|
||||||
|
StartingGrenadeClassIndex = MedicGrenadeIndex;
|
||||||
|
}
|
||||||
|
else if (BigPocketsActive)
|
||||||
|
{
|
||||||
|
StartingGrenadeClassIndex = FirebugGrenadeIndex;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
StartingGrenadeClassIndex = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (StartingGrenadeClassIndex > GrenadeWeaponPaths.Length - 1)
|
||||||
|
{
|
||||||
|
StartingGrenadeClassIndex = `WEAP_IDX_NONE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// If we are in no gameplay time insta change
|
||||||
|
if (!KFGRI.bWaveIsActive)
|
||||||
|
{
|
||||||
|
UpdateCurrentGrenade();
|
||||||
|
}
|
||||||
|
|
||||||
|
return StartingGrenadeClassIndex;
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated function InitializeGrenades()
|
||||||
|
{
|
||||||
|
local byte MaxValue;
|
||||||
|
|
||||||
|
if (StartingGrenadeClassIndex == `WEAP_IDX_NONE && ( bIsGrenadeDirty || CurrentGrenadeClassIndex == `WEAP_IDX_NONE))
|
||||||
|
{
|
||||||
|
MaxValue = (!IsAmmoVestActive() && !IsBigPocketsActive()) ? GrenadeWeaponPaths.length - 1 : GrenadeWeaponPaths.length;
|
||||||
|
CurrentGrenadeClassIndex = Rand(MaxValue);
|
||||||
|
|
||||||
|
if ( (!IsAmmoVestActive() && CurrentGrenadeClassIndex == MedicGrenadeIndex) ||
|
||||||
|
(!IsBigPocketsActive() && CurrentGrenadeClassIndex == FirebugGrenadeIndex) ||
|
||||||
|
(CurrentLevel < 15 && (CurrentGrenadeClassIndex == MedicGrenadeIndex || CurrentGrenadeClassIndex == FirebugGrenadeIndex)))
|
||||||
|
{
|
||||||
|
CurrentGrenadeClassIndex = GrenadeWeaponPaths.length - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
bIsGrenadeDirty = false;
|
||||||
|
|
||||||
|
if (Controller(Owner).IsLocalController())
|
||||||
|
{
|
||||||
|
ServerUpdateCurrentGrenade(CurrentGrenadeClassIndex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated function OnClientWaveEnded()
|
||||||
|
{
|
||||||
|
super.OnWaveEnded();
|
||||||
|
UpdateCurrentGrenade();
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated function UpdateCurrentGrenade()
|
||||||
|
{
|
||||||
|
if (StartingGrenadeClassIndex == `WEAP_IDX_NONE)
|
||||||
|
{
|
||||||
|
InitializeGrenades();
|
||||||
|
}
|
||||||
|
else if (CurrentGrenadeClassIndex != StartingGrenadeClassIndex || bIsGrenadeDirty)
|
||||||
|
{
|
||||||
|
CurrentGrenadeClassIndex = StartingGrenadeClassIndex;
|
||||||
|
|
||||||
|
if (Controller(Owner).IsLocalController())
|
||||||
|
{
|
||||||
|
ServerUpdateCurrentGrenade(CurrentGrenadeClassIndex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
reliable server function ServerUpdateCurrentWeapon(byte Value)
|
||||||
|
{
|
||||||
|
StartingWeaponClassIndex = Value;
|
||||||
|
}
|
||||||
|
|
||||||
|
reliable server function ServerUpdateCurrentGrenade(byte CurrentIndex)
|
||||||
|
{
|
||||||
|
CurrentGrenadeClassIndex = CurrentIndex;
|
||||||
}
|
}
|
||||||
|
|
||||||
DefaultProperties
|
DefaultProperties
|
||||||
{
|
{
|
||||||
StartingWeaponClassIndex=Index_None
|
StartingWeaponClassIndex=0
|
||||||
|
StartingGrenadeClassIndex=0
|
||||||
|
CurrentGrenadeClassIndex=0
|
||||||
|
bIsGrenadeDirty=true
|
||||||
|
|
||||||
PerkIcon=Texture2D'UI_PerkIcons_TEX.UI_PerkIcon_Survivalist'
|
PerkIcon=Texture2D'UI_PerkIcons_TEX.UI_PerkIcon_Survivalist'
|
||||||
|
|
||||||
PrimaryWeaponDef=class'KFWeapDef_Random'
|
PrimaryWeaponDef=class'KFWeapDef_Random'
|
||||||
KnifeWeaponDef=class'KFweapDef_Knife_Survivalist'
|
KnifeWeaponDef=class'KFweapDef_Knife_Survivalist'
|
||||||
GrenadeWeaponDef=class'KFWeapDef_Grenade_Commando'
|
GrenadeWeaponDef=class'KFWeapDef_RandomGrenade'
|
||||||
HealingGrenadeWeaponDef=class'KFWeapDef_Grenade_Medic'
|
HealingGrenadeWeaponDef=class'KFWeapDef_Grenade_Medic'
|
||||||
MolotovGrenadeWeaponDef=class'KFWeapDef_Grenade_Firebug'
|
MolotovGrenadeWeaponDef=class'KFWeapDef_Grenade_Firebug'
|
||||||
|
|
||||||
@ -856,17 +1199,27 @@ DefaultProperties
|
|||||||
ZedTimeModifyingStates(11)="WeaponSonicGunSingleFiring"
|
ZedTimeModifyingStates(11)="WeaponSonicGunSingleFiring"
|
||||||
ZedTimeModifyingStates(12)="WeaponSonicGunCharging"
|
ZedTimeModifyingStates(12)="WeaponSonicGunCharging"
|
||||||
|
|
||||||
PrimaryWeaponPaths(0)=class'KFWeapDef_AR15'
|
PrimaryWeaponPaths(0)=class'KFWeapDef_Crovel'
|
||||||
PrimaryWeaponPaths(1)=class'KFWeapDef_MB500'
|
PrimaryWeaponPaths(1)=class'KFWeapDef_AR15'
|
||||||
PrimaryWeaponPaths(2)=class'KFWeapDef_Crovel'
|
PrimaryWeaponPaths(2)=class'KFWeapDef_MB500'
|
||||||
PrimaryWeaponPaths(3)=class'KFWeapDef_HX25'
|
PrimaryWeaponPaths(3)=class'KFWeapDef_MedicPistol'
|
||||||
PrimaryWeaponPaths(4)=class'KFWeapDef_MedicPistol'
|
PrimaryWeaponPaths(4)=class'KFWeapDef_HX25'
|
||||||
PrimaryWeaponPaths(5)=class'KFWeapDef_CaulkBurn'
|
PrimaryWeaponPaths(5)=class'KFWeapDef_CaulkBurn'
|
||||||
PrimaryWeaponPaths(6)=class'KFWeapDef_Remington1858Dual'
|
PrimaryWeaponPaths(6)=class'KFWeapDef_Remington1858Dual'
|
||||||
PrimaryWeaponPaths(7)=class'KFWeapDef_Winchester1894'
|
PrimaryWeaponPaths(7)=class'KFWeapDef_Winchester1894'
|
||||||
PrimaryWeaponPaths(8)=class'KFWeapDef_MP7'
|
PrimaryWeaponPaths(8)=class'KFWeapDef_MP7'
|
||||||
AutoBuyLoadOutPath=(class'KFWeapDef_DragonsBreath', class'KFWeapDef_FreezeThrower', class'KFWeapDef_MedicRifle', class'KFWeapDef_LazerCutter')
|
AutoBuyLoadOutPath=(class'KFWeapDef_DragonsBreath', class'KFWeapDef_FreezeThrower', class'KFWeapDef_MedicRifle', class'KFWeapDef_LazerCutter')
|
||||||
|
|
||||||
|
GrenadeWeaponPaths(0)=class'KFWeapDef_Grenade_Commando'
|
||||||
|
GrenadeWeaponPaths(1)=class'KFWeapDef_Grenade_Support'
|
||||||
|
GrenadeWeaponPaths(2)=class'KFWeapDef_Grenade_Medic'
|
||||||
|
GrenadeWeaponPaths(3)=class'KFWeapDef_Grenade_Firebug'
|
||||||
|
GrenadeWeaponPaths(4)=class'KFWeapDef_Grenade_Gunslinger'
|
||||||
|
GrenadeWeaponPaths(5)=class'KFWeapDef_Grenade_SWAT'
|
||||||
|
|
||||||
|
MedicGrenadeIndex = 2;
|
||||||
|
FirebugGrenadeIndex = 3;
|
||||||
|
|
||||||
// Prestige Rewards
|
// Prestige Rewards
|
||||||
PrestigeRewardItemIconPaths[0]="WEP_SkinSet_Prestige01_Item_TEX.knives.SurvivalistKnife_PrestigePrecious_Mint_large"
|
PrestigeRewardItemIconPaths[0]="WEP_SkinSet_Prestige01_Item_TEX.knives.SurvivalistKnife_PrestigePrecious_Mint_large"
|
||||||
PrestigeRewardItemIconPaths[1]="WEP_SkinSet_Prestige02_Item_TEX.tier01.FreezeThrower_PrestigePrecious_Mint_large"
|
PrestigeRewardItemIconPaths[1]="WEP_SkinSet_Prestige02_Item_TEX.tier01.FreezeThrower_PrestigePrecious_Mint_large"
|
||||||
|
@ -37,17 +37,29 @@ var() bool bEnabledAtStart<EditCondition=bKismetDriven>;
|
|||||||
/** Whether this pickup node has been modified by kismet (enabled or disabled) */
|
/** Whether this pickup node has been modified by kismet (enabled or disabled) */
|
||||||
var transient bool bKismetEnabled;
|
var transient bool bKismetEnabled;
|
||||||
|
|
||||||
|
function bool CanUsePickup()
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/** Pick a weapon from 'ItemPickups' and enable it in the world */
|
/** Pick a weapon from 'ItemPickups' and enable it in the world */
|
||||||
function Reset()
|
function Reset()
|
||||||
{
|
{
|
||||||
if( bKismetDriven )
|
if (CanUsePickup())
|
||||||
{
|
{
|
||||||
SetInitialState();
|
if( bKismetDriven )
|
||||||
|
{
|
||||||
|
SetInitialState();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
bToBeActivated = false;
|
||||||
|
GotoState('Pickup');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
bToBeActivated = false;
|
SetPickupHidden();
|
||||||
GotoState('Pickup');
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -49,11 +49,42 @@ replication
|
|||||||
PickupIndex;
|
PickupIndex;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function bool CanUsePickup()
|
||||||
|
{
|
||||||
|
local KFGameInfo KFGI;
|
||||||
|
local int i;
|
||||||
|
local bool has_armour;
|
||||||
|
|
||||||
|
KFGI = KFGameInfo( WorldInfo.Game );
|
||||||
|
|
||||||
|
if (KFGI != none && KFGI.OutbreakEvent != none)
|
||||||
|
{
|
||||||
|
if (KFGI.OutbreakEvent.ActiveEvent.bOnlyArmorItemPickup)
|
||||||
|
{
|
||||||
|
for (i = 0 ; i < ItemPickups.Length ; i++)
|
||||||
|
{
|
||||||
|
if (ItemPickups[i].ItemClass.Name == ArmorClassName)
|
||||||
|
{
|
||||||
|
has_armour = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (has_armour == false)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return super.CanUsePickup();
|
||||||
|
}
|
||||||
|
|
||||||
simulated event PreBeginPlay()
|
simulated event PreBeginPlay()
|
||||||
{
|
{
|
||||||
local KFGameInfo KFGI;
|
local KFGameInfo KFGI;
|
||||||
|
|
||||||
// For Scavenger weekly, we need to treat the factory items as non kismet items.
|
// For Scavenger weekly, we need to treat the factory items as non kismet items.
|
||||||
KFGI = KFGameInfo( WorldInfo.Game );
|
KFGI = KFGameInfo( WorldInfo.Game );
|
||||||
if (KFGI != none && KFGI.OutbreakEvent != none && KFGI.OutbreakEvent.ActiveEvent.bUnlimitedWeaponPickups)
|
if (KFGI != none && KFGI.OutbreakEvent != none && KFGI.OutbreakEvent.ActiveEvent.bUnlimitedWeaponPickups)
|
||||||
{
|
{
|
||||||
@ -62,7 +93,6 @@ simulated event PreBeginPlay()
|
|||||||
bKismetDriven=false;
|
bKismetDriven=false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
////////////////////////////////////////
|
|
||||||
|
|
||||||
super.PreBeginPlay();
|
super.PreBeginPlay();
|
||||||
}
|
}
|
||||||
@ -152,10 +182,26 @@ function int ChooseWeaponPickup()
|
|||||||
local int i, DesiredItemIdx;
|
local int i, DesiredItemIdx;
|
||||||
local float Weight, TotalWeight, RandomWeight;
|
local float Weight, TotalWeight, RandomWeight;
|
||||||
local array<int> IndexList;
|
local array<int> IndexList;
|
||||||
|
local KFGameInfo KFGI;
|
||||||
|
|
||||||
|
KFGI = KFGameInfo(WorldInfo.Game);
|
||||||
|
|
||||||
|
DesiredItemIdx = 255;
|
||||||
|
|
||||||
// Add up the total weight for all valid attacks
|
// Add up the total weight for all valid attacks
|
||||||
for(i = 0; i < ItemPickups.Length; i++)
|
for(i = 0; i < ItemPickups.Length; i++)
|
||||||
{
|
{
|
||||||
|
if (KFGI != none && KFGI.OutbreakEvent != none)
|
||||||
|
{
|
||||||
|
if (KFGI.OutbreakEvent.ActiveEvent.bOnlyArmorItemPickup)
|
||||||
|
{
|
||||||
|
if (ItemPickups[i].ItemClass.Name != 'KFInventory_Armor')
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ( ItemPickups[i].Priority > 0.f )
|
if ( ItemPickups[i].Priority > 0.f )
|
||||||
{
|
{
|
||||||
TotalWeight += ItemPickups[i].Priority;
|
TotalWeight += ItemPickups[i].Priority;
|
||||||
@ -194,11 +240,26 @@ simulated native function GetPickupMesh(class<KFWeapon> ItemClass);
|
|||||||
/** Use the pickups static mesh for this factory */
|
/** Use the pickups static mesh for this factory */
|
||||||
simulated function SetPickupMesh()
|
simulated function SetPickupMesh()
|
||||||
{
|
{
|
||||||
|
local KFGameInfo KFGI;
|
||||||
|
|
||||||
if (PickupIndex >= ItemPickups.Length)
|
if (PickupIndex >= ItemPickups.Length)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
KFGI = KFGameInfo(WorldInfo.Game);
|
||||||
|
|
||||||
|
if (KFGI != none && KFGI.OutbreakEvent != none)
|
||||||
|
{
|
||||||
|
if (KFGI.OutbreakEvent.ActiveEvent.bOnlyArmorItemPickup)
|
||||||
|
{
|
||||||
|
if (ItemPickups[PickupIndex].ItemClass.Name != ArmorClassName)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (ItemPickups[PickupIndex].ItemClass.Name == ArmorClassName)
|
if (ItemPickups[PickupIndex].ItemClass.Name == ArmorClassName)
|
||||||
{
|
{
|
||||||
FinalizePickupMesh(StaticMeshComponent(ItemPickups[PickupIndex].ItemClass.default.PickupFactoryMesh).StaticMesh);
|
FinalizePickupMesh(StaticMeshComponent(ItemPickups[PickupIndex].ItemClass.default.PickupFactoryMesh).StaticMesh);
|
||||||
@ -307,12 +368,24 @@ function ActivateNewPickup(Pawn P)
|
|||||||
{
|
{
|
||||||
local KFGameInfo KFGI;
|
local KFGameInfo KFGI;
|
||||||
|
|
||||||
|
KFGI = KFGameInfo( WorldInfo.Game );
|
||||||
|
|
||||||
|
if (KFGI != none && KFGI.OutbreakEvent != none)
|
||||||
|
{
|
||||||
|
if (KFGI.OutbreakEvent.ActiveEvent.bOnlyArmorItemPickup)
|
||||||
|
{
|
||||||
|
if (ItemPickups[PickupIndex].ItemClass.Name != ArmorClassName)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if( bKismetDriven )
|
if( bKismetDriven )
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
KFGI = KFGameInfo( WorldInfo.Game );
|
|
||||||
if ( KFGI != none )
|
if ( KFGI != none )
|
||||||
{
|
{
|
||||||
KFGI.EnableNewPickup( KFGI.ItemPickups, KFGI.DifficultyInfo.GetWeaponPickupInterval(KFGI.GetLivingPlayerCount()), self );
|
KFGI.EnableNewPickup( KFGI.ItemPickups, KFGI.DifficultyInfo.GetWeaponPickupInterval(KFGI.GetLivingPlayerCount()), self );
|
||||||
|
@ -113,6 +113,10 @@ var private const bool bPerkStatsLoaded;
|
|||||||
|
|
||||||
/** Id of previously selected perk */
|
/** Id of previously selected perk */
|
||||||
var public byte SavedPerkIndex;
|
var public byte SavedPerkIndex;
|
||||||
|
/** Index of the weapon chosen for the survival perk */
|
||||||
|
var public byte SurvivalPerkWeapIndex;
|
||||||
|
/** Index of the grenade chosen for the survival perk */
|
||||||
|
var public byte SurvivalPerkGrenIndex;
|
||||||
|
|
||||||
/** Player zed spawn params (Versus) */
|
/** Player zed spawn params (Versus) */
|
||||||
var transient sPlayerZedSpawnInfo PlayerZedSpawnInfo;
|
var transient sPlayerZedSpawnInfo PlayerZedSpawnInfo;
|
||||||
@ -136,6 +140,10 @@ var protected float UnmodifiedFOV;
|
|||||||
var transient protected int BenefactorDosh;
|
var transient protected int BenefactorDosh;
|
||||||
var private const int BenefactorDoshReq;
|
var private const int BenefactorDoshReq;
|
||||||
|
|
||||||
|
var array<KFPawn_Monster> KilledZeds;
|
||||||
|
var array<float> KilledZedsLastZPosition;
|
||||||
|
var KFSeaTrigger SeaTrigger;
|
||||||
|
|
||||||
/*********************************************************************************************
|
/*********************************************************************************************
|
||||||
* @name UDK Variables
|
* @name UDK Variables
|
||||||
********************************************************************************************* */
|
********************************************************************************************* */
|
||||||
@ -712,6 +720,14 @@ var transient bool bNoGoActive;
|
|||||||
|
|
||||||
var transient byte StoredLocalUserNum;
|
var transient byte StoredLocalUserNum;
|
||||||
|
|
||||||
|
/*********************************************************************************************
|
||||||
|
* @name KFWeap_Autoturret
|
||||||
|
|
||||||
|
With the trader you can buy and sell the weapon without exploding the turrets. Add them to
|
||||||
|
the controller to keep track of them rather than the weapon.
|
||||||
|
**********************************************************************************************/
|
||||||
|
var transient array<Actor> DeployedTurrets;
|
||||||
|
|
||||||
cpptext
|
cpptext
|
||||||
{
|
{
|
||||||
virtual UBOOL Tick( FLOAT DeltaSeconds, ELevelTick TickType );
|
virtual UBOOL Tick( FLOAT DeltaSeconds, ELevelTick TickType );
|
||||||
@ -811,6 +827,8 @@ native private function ShowPreClientTravelMovie(string URLString);
|
|||||||
|
|
||||||
simulated event PostBeginPlay()
|
simulated event PostBeginPlay()
|
||||||
{
|
{
|
||||||
|
local KFSeaTrigger actor_search;
|
||||||
|
|
||||||
super.PostBeginPlay();
|
super.PostBeginPlay();
|
||||||
|
|
||||||
PostAkEvent( ResetFiltersEvent );
|
PostAkEvent( ResetFiltersEvent );
|
||||||
@ -831,6 +849,18 @@ simulated event PostBeginPlay()
|
|||||||
OnlineSub.AddOnReadOnlineAvatarCompleteDelegate(OnAvatarReceived);
|
OnlineSub.AddOnReadOnlineAvatarCompleteDelegate(OnAvatarReceived);
|
||||||
OnlineSub.AddOnReadOnlineAvatarByNameCompleteDelegate(OnAvatarURLPS4Received);
|
OnlineSub.AddOnReadOnlineAvatarByNameCompleteDelegate(OnAvatarURLPS4Received);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
foreach AllActors(class'KFSeaTrigger', actor_search)
|
||||||
|
{
|
||||||
|
SeaTrigger = actor_search;
|
||||||
|
|
||||||
|
if (WorldInfo.NetMode == NM_Client || WorldInfo.NetMode == NM_Standalone)
|
||||||
|
{
|
||||||
|
SetTimer(1.f, true, nameOf(ZedKillsSeaDetection));
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function UpdateVOIP()
|
function UpdateVOIP()
|
||||||
@ -952,7 +982,8 @@ simulated event name GetSeasonalStateName()
|
|||||||
local int EventId;
|
local int EventId;
|
||||||
local KFMapInfo KFMI;
|
local KFMapInfo KFMI;
|
||||||
local bool bIsWWLWeekly; // WWL Weekly should not allow seasonal overrides
|
local bool bIsWWLWeekly; // WWL Weekly should not allow seasonal overrides
|
||||||
|
local KFGameReplicationInfo KFGRI;
|
||||||
|
|
||||||
EventId = class'KFGameEngine'.static.GetSeasonalEventID();
|
EventId = class'KFGameEngine'.static.GetSeasonalEventID();
|
||||||
KFMI = KFMapInfo(WorldInfo.GetMapInfo());
|
KFMI = KFMapInfo(WorldInfo.GetMapInfo());
|
||||||
if (KFMI != none)
|
if (KFMI != none)
|
||||||
@ -960,7 +991,8 @@ simulated event name GetSeasonalStateName()
|
|||||||
KFMI.ModifySeasonalEventId(EventId);
|
KFMI.ModifySeasonalEventId(EventId);
|
||||||
}
|
}
|
||||||
|
|
||||||
bIsWWLWeekly = class'KFGameEngine'.static.GetWeeklyEventIndexMod() == 12 && KFGameReplicationInfo(WorldInfo.GRI) != none && KFGameReplicationInfo(WorldInfo.GRI).bIsWeeklyMode;
|
KFGRI = KFGameReplicationInfo(WorldInfo.GRI);
|
||||||
|
bIsWWLWeekly = KFGRI != none && KFGRI.bIsWeeklyMode && KFGRI.CurrentWeeklyIndex == 12;
|
||||||
if (bIsWWLWeekly)
|
if (bIsWWLWeekly)
|
||||||
return 'No_Event';
|
return 'No_Event';
|
||||||
|
|
||||||
@ -1566,13 +1598,15 @@ function OnReadProfileSettingsComplete(byte LocalUserNum,bool bWasSuccessful)
|
|||||||
|
|
||||||
if(Profile != none)
|
if(Profile != none)
|
||||||
{
|
{
|
||||||
SavedPerkIndex = byte(Profile.GetProfileInt(KFID_SavedPerkIndex));
|
SavedPerkIndex = byte(Profile.GetProfileInt(KFID_SavedPerkIndex));
|
||||||
bSkipNonCriticalForceLookAt = Profile.GetProfileBool(KFID_AutoTurnOff);
|
bSkipNonCriticalForceLookAt = Profile.GetProfileBool(KFID_AutoTurnOff);
|
||||||
bShowKillTicker = Profile.GetProfileBool(KFID_ShowKillTicker);
|
bShowKillTicker = Profile.GetProfileBool(KFID_ShowKillTicker);
|
||||||
bNoEarRingingSound = Profile.GetProfileBool(KFID_ReduceHightPitchSounds);
|
bNoEarRingingSound = Profile.GetProfileBool(KFID_ReduceHightPitchSounds);
|
||||||
bHideBossHealthBar = Profile.GetProfileBool(KFID_HideBossHealthBar);
|
bHideBossHealthBar = Profile.GetProfileBool(KFID_HideBossHealthBar);
|
||||||
bDisableAutoUpgrade = Profile.GetProfileBool(KFID_DisableAutoUpgrade);
|
bDisableAutoUpgrade = Profile.GetProfileBool(KFID_DisableAutoUpgrade);
|
||||||
bHideRemotePlayerHeadshotEffects = Profile.GetProfileBool(KFID_HideRemoteHeadshotEffects);
|
bHideRemotePlayerHeadshotEffects = Profile.GetProfileBool(KFID_HideRemoteHeadshotEffects);
|
||||||
|
SurvivalPerkWeapIndex = byte(Profile.GetProfileInt(KFID_SurvivalStartingWeapIdx));
|
||||||
|
SurvivalPerkGrenIndex = byte(Profile.GetProfileInt(KFID_SurvivalStartingGrenIdx));
|
||||||
|
|
||||||
KFPRI = KFPlayerReplicationInfo(PlayerReplicationInfo);
|
KFPRI = KFPlayerReplicationInfo(PlayerReplicationInfo);
|
||||||
if(KFPRI != none)
|
if(KFPRI != none)
|
||||||
@ -2581,6 +2615,30 @@ function NotifyPlayTogetherFailed(optional string LocKey = "UnableToPlayTogether
|
|||||||
* @name Dosh Vault
|
* @name Dosh Vault
|
||||||
********************************************************************************************* */
|
********************************************************************************************* */
|
||||||
|
|
||||||
|
public function bool CanUseDosh()
|
||||||
|
{
|
||||||
|
/** If this is run in Server or Standalone, GameInfo exists so can access to the OutbreakEvent */
|
||||||
|
if (Role == Role_Authority)
|
||||||
|
{
|
||||||
|
return KFGameInfo(WorldInfo.Game).OutbreakEvent == none
|
||||||
|
|| !KFGameInfo(WorldInfo.Game).OutbreakEvent.ActiveEvent.bDisableAddDosh;
|
||||||
|
}
|
||||||
|
/** But in client, GameInfo doesn't exist, so needs to be checked in a different way. */
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
In client there's a kfgame replication info that contains if the mode is a weekly, and the index.
|
||||||
|
This way would also work in server, but will need to be in code rather than using the weekly variables.
|
||||||
|
*/
|
||||||
|
/** Another option is to use instead a variable replicated just with that value */
|
||||||
|
return KFGameReplicationInfo(WorldInfo.GRI) == none
|
||||||
|
|| !KFGameReplicationInfo(WorldInfo.GRI).bIsWeeklyMode
|
||||||
|
|| KFGameReplicationInfo(WorldInfo.GRI).CurrentWeeklyIndex != 16;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
function int GetPreStigeValueDoshRewardValue()
|
function int GetPreStigeValueDoshRewardValue()
|
||||||
{
|
{
|
||||||
if (StatsWrite != none)
|
if (StatsWrite != none)
|
||||||
@ -2672,6 +2730,34 @@ function CheckHasViewedDoshVault()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*********************************************************************************************
|
||||||
|
* @name Gun Game
|
||||||
|
********************************************************************************************* */
|
||||||
|
|
||||||
|
public function bool CanUseGunGame()
|
||||||
|
{
|
||||||
|
/** If this is run in Server or Standalone, GameInfo exists so can access to the OutbreakEvent */
|
||||||
|
if (Role == Role_Authority)
|
||||||
|
{
|
||||||
|
return KFGameInfo(WorldInfo.Game).OutbreakEvent != none
|
||||||
|
&& KFGameInfo(WorldInfo.Game).OutbreakEvent.ActiveEvent.bGunGameMode;
|
||||||
|
}
|
||||||
|
/** But in client, GameInfo doesn't exist, so needs to be checked in a different way. */
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
In client there's a kfgame replication info that contains if the mode is a weekly, and the index.
|
||||||
|
This way would also work in server, but will need to be in code rather than using the weekly variables.
|
||||||
|
*/
|
||||||
|
/** Another option is to use instead a variable replicated just with that value */
|
||||||
|
return KFGameReplicationInfo(WorldInfo.GRI) != none
|
||||||
|
&& KFGameReplicationInfo(WorldInfo.GRI).bIsWeeklyMode
|
||||||
|
&& KFGameReplicationInfo(WorldInfo.GRI).CurrentWeeklyIndex == 16;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/*********************************************************************************************
|
/*********************************************************************************************
|
||||||
* @name Skill Tracking
|
* @name Skill Tracking
|
||||||
********************************************************************************************* */
|
********************************************************************************************* */
|
||||||
@ -3089,6 +3175,8 @@ function RecievedNewPerkClass()
|
|||||||
{
|
{
|
||||||
MyGfxManager.TraderMenu.UpdatePlayerInfo();
|
MyGfxManager.TraderMenu.UpdatePlayerInfo();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
InitPerkLoadout();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*********************************************************************************************
|
/*********************************************************************************************
|
||||||
@ -3976,7 +4064,7 @@ simulated final function Pawn GetPickedAimAtTarget(out float bestAim, out float
|
|||||||
return PickAimAtTarget(bestAim, bestDist, FireDir, projStart, MaxRange, bTargetTeammates);
|
return PickAimAtTarget(bestAim, bestDist, FireDir, projStart, MaxRange, bTargetTeammates);
|
||||||
}
|
}
|
||||||
|
|
||||||
exec function SwitchToBestWeapon(optional bool bForceNewWeapon)
|
exec function SwitchToBestWeapon(optional bool bForceNewWeapon, optional bool check_9mm_logic = false)
|
||||||
{
|
{
|
||||||
// Don't let players use an exec to bring up a weapon if the weapon prevents it
|
// Don't let players use an exec to bring up a weapon if the weapon prevents it
|
||||||
if( Pawn != none && Pawn.Weapon != none && KFWeapon(Pawn.Weapon) != none )
|
if( Pawn != none && Pawn.Weapon != none && KFWeapon(Pawn.Weapon) != none )
|
||||||
@ -3987,7 +4075,7 @@ exec function SwitchToBestWeapon(optional bool bForceNewWeapon)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
super.SwitchToBestWeapon(bForceNewWeapon);
|
super.SwitchToBestWeapon(bForceNewWeapon, check_9mm_logic);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -4148,6 +4236,7 @@ simulated event OnWeaponAsyncContentLoaded(class<KFWeapon> WeaponClass)
|
|||||||
|
|
||||||
local KFPawn_Human KFPH;
|
local KFPawn_Human KFPH;
|
||||||
local KFDroppedPickup KFDP;
|
local KFDroppedPickup KFDP;
|
||||||
|
local KFPawn KFP;
|
||||||
|
|
||||||
// Attempt to set the weapon attachment for any player than might need theirs set. This is a backup
|
// Attempt to set the weapon attachment for any player than might need theirs set. This is a backup
|
||||||
// for when content isn't quite ready when WeaponClassForAttachmentTemplate is replicated.
|
// for when content isn't quite ready when WeaponClassForAttachmentTemplate is replicated.
|
||||||
@ -4169,6 +4258,14 @@ simulated event OnWeaponAsyncContentLoaded(class<KFWeapon> WeaponClass)
|
|||||||
KFDP.SetPickupMesh(WeaponClass.default.DroppedPickupMesh);
|
KFDP.SetPickupMesh(WeaponClass.default.DroppedPickupMesh);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
foreach WorldInfo.AllPawns(class'KFPawn', KFP)
|
||||||
|
{
|
||||||
|
if (KFP.bIsTurret && WeaponClass == KFP.WeaponClassForAttachmentTemplate)
|
||||||
|
{
|
||||||
|
KFP.SetTurretWeaponAttachment(WeaponClass);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*********************************************************************************************
|
/*********************************************************************************************
|
||||||
@ -5285,7 +5382,9 @@ function bool ShouldDisplayGameplayPostProcessFX()
|
|||||||
/* ZED time effect is active */
|
/* ZED time effect is active */
|
||||||
CurrentZEDTimeEffectIntensity > 0.f ||
|
CurrentZEDTimeEffectIntensity > 0.f ||
|
||||||
/* sepia effect */
|
/* sepia effect */
|
||||||
(class'KFGameEngine'.static.GetWeeklyEventIndexMod() == 12) ||
|
(KFGameReplicationInfo(WorldInfo.GRI) != none &&
|
||||||
|
KFGameReplicationInfo(WorldInfo.GRI).bIsWeeklyMode &&
|
||||||
|
KFGameReplicationInfo(WorldInfo.GRI).CurrentWeeklyIndex == 12) ||
|
||||||
/* Night vision active */
|
/* Night vision active */
|
||||||
bNightVisionActive ||
|
bNightVisionActive ||
|
||||||
SirenScreamEffectTimeRemaining > 0.f ||
|
SirenScreamEffectTimeRemaining > 0.f ||
|
||||||
@ -7154,6 +7253,8 @@ simulated function OnStatsInitialized( bool bWasSuccessful )
|
|||||||
LoadAllPerkLevels();
|
LoadAllPerkLevels();
|
||||||
ClientInitializePerks();
|
ClientInitializePerks();
|
||||||
|
|
||||||
|
InitPerkLoadout();
|
||||||
|
|
||||||
// Update the GFX menu if we need to
|
// Update the GFX menu if we need to
|
||||||
if( MyGFxManager != none && MyGFxManager.PerksMenu != none )
|
if( MyGFxManager != none && MyGFxManager.PerksMenu != none )
|
||||||
{
|
{
|
||||||
@ -9186,6 +9287,13 @@ event Destroyed()
|
|||||||
StingerAkComponent.StopEvents();
|
StingerAkComponent.StopEvents();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Destroy deployed turrets
|
||||||
|
// Destroyed event on Turret calls the KFPlayer to modify the same list, that's why we use a while loop...
|
||||||
|
while (DeployedTurrets.Length > 0)
|
||||||
|
{
|
||||||
|
DeployedTurrets[0].Destroy();
|
||||||
|
}
|
||||||
|
|
||||||
SetRTPCValue( 'Health', 100, true );
|
SetRTPCValue( 'Health', 100, true );
|
||||||
PostAkEvent( LowHealthStopEvent );
|
PostAkEvent( LowHealthStopEvent );
|
||||||
bPlayingLowHealthSFX = false;
|
bPlayingLowHealthSFX = false;
|
||||||
@ -9215,6 +9323,7 @@ event Destroyed()
|
|||||||
ClearMixerDelegates();
|
ClearMixerDelegates();
|
||||||
ClearDiscord();
|
ClearDiscord();
|
||||||
}
|
}
|
||||||
|
|
||||||
ClientMatchEnded();
|
ClientMatchEnded();
|
||||||
|
|
||||||
Super.Destroyed();
|
Super.Destroyed();
|
||||||
@ -9340,6 +9449,43 @@ state Dead
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
simulated function ZedKillsSeaDetection()
|
||||||
|
{
|
||||||
|
local int i;
|
||||||
|
local KFPawn_Monster Monster;
|
||||||
|
local float LastMonsterZPosition;
|
||||||
|
|
||||||
|
for (i = KilledZeds.Length - 1; i >= 0; i--)
|
||||||
|
{
|
||||||
|
Monster = KilledZeds[i];
|
||||||
|
|
||||||
|
// If respawned...
|
||||||
|
if (Monster == None || Monster.Health > 0)
|
||||||
|
{
|
||||||
|
KilledZeds.Remove(i, 1);
|
||||||
|
KilledZedsLastZPosition.Remove(i, 1);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
LastMonsterZPosition = KilledZedsLastZPosition[i];
|
||||||
|
|
||||||
|
KilledZedsLastZPosition[i] = Monster.Location.Z;
|
||||||
|
|
||||||
|
// If we are falling...
|
||||||
|
if (LastMonsterZPosition > Monster.Location.Z)
|
||||||
|
{
|
||||||
|
// If we passed the point of the sea trigger detection
|
||||||
|
if (Monster.Location.Z < SeaTrigger.Location.Z)
|
||||||
|
{
|
||||||
|
ClientOnTriggerUsed(class'KFSeaTrigger');
|
||||||
|
|
||||||
|
KilledZeds.Remove(i, 1);
|
||||||
|
KilledZedsLastZPosition.Remove(i, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Should be to instigate a transition to spectating, automatically handles notifying server or notifying the owning client as necessary.
|
* Should be to instigate a transition to spectating, automatically handles notifying server or notifying the owning client as necessary.
|
||||||
*/
|
*/
|
||||||
@ -9916,6 +10062,15 @@ unreliable client event ClientHearDialog( Actor DialogSpeaker, AkEvent DialogEve
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
reliable client function NotifyKilledForTracking(KFPawn_Monster KilledMonster)
|
||||||
|
{
|
||||||
|
if (KilledMonster != None && KilledZeds.Find(KilledMonster) == INDEX_NONE)
|
||||||
|
{
|
||||||
|
KilledZeds.AddItem(KilledMonster);
|
||||||
|
KilledZedsLastZPosition.AddItem(KilledMonster.Location.Z);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function NotifyKilled( Controller Killer, Controller Killed, pawn KilledPawn, class<DamageType> damageType )
|
function NotifyKilled( Controller Killer, Controller Killed, pawn KilledPawn, class<DamageType> damageType )
|
||||||
{
|
{
|
||||||
local KFPawn_Monster MonsterPawn;
|
local KFPawn_Monster MonsterPawn;
|
||||||
@ -9937,6 +10092,12 @@ function NotifyKilled( Controller Killer, Controller Killed, pawn KilledPawn, cl
|
|||||||
MatchStats.ZedsKilledLastWave++;
|
MatchStats.ZedsKilledLastWave++;
|
||||||
|
|
||||||
CheckForZedOnDeathAchievements( MonsterPawn );
|
CheckForZedOnDeathAchievements( MonsterPawn );
|
||||||
|
|
||||||
|
// If we need to track killed zeds, make the function to be called on client...
|
||||||
|
if (SeaTrigger != none)
|
||||||
|
{
|
||||||
|
NotifyKilledForTracking(MonsterPawn);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// Own death. Like PawnDied(), but with more input parameters
|
// Own death. Like PawnDied(), but with more input parameters
|
||||||
else if ( self == Killed )
|
else if ( self == Killed )
|
||||||
@ -10065,7 +10226,7 @@ exec function RequestSkipTrader()
|
|||||||
{
|
{
|
||||||
if (KFGRI.bMatchHasBegun)
|
if (KFGRI.bMatchHasBegun)
|
||||||
{
|
{
|
||||||
if (KFGRI.bTraderIsOpen && KFPRI.bHasSpawnedIn)
|
if ((KFGRI.bTraderIsOpen || KFGRI.bForceSkipTraderUI) && KFPRI.bHasSpawnedIn)
|
||||||
{
|
{
|
||||||
KFPRI.RequestSkiptTrader(KFPRI);
|
KFPRI.RequestSkiptTrader(KFPRI);
|
||||||
if (MyGFxManager != none)
|
if (MyGFxManager != none)
|
||||||
@ -11728,6 +11889,24 @@ event OnServerTakeoverResponseRecieved()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
reliable client function ForceMonsterHeadExplode(KFPawn_Monster Victim)
|
||||||
|
{
|
||||||
|
if (Victim != none)
|
||||||
|
{
|
||||||
|
Victim.bIsHeadless=true;
|
||||||
|
Victim.PlayHeadAsplode();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated function InitPerkLoadout()
|
||||||
|
{
|
||||||
|
if (CurrentPerk.IsA('KFPerk_Survivalist'))
|
||||||
|
{
|
||||||
|
CurrentPerk.SetWeaponSelectedIndex(SurvivalPerkWeapIndex);
|
||||||
|
CurrentPerk.SetGrenadeSelectedIndex(SurvivalPerkGrenIndex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
EarnedDosh=0
|
EarnedDosh=0
|
||||||
|
@ -38,8 +38,26 @@ var protected const AkEvent RhythmMethodSoundReset;
|
|||||||
var protected const AkEvent RhythmMethodSoundHit;
|
var protected const AkEvent RhythmMethodSoundHit;
|
||||||
var protected const AkEvent RhythmMethodSoundTop;
|
var protected const AkEvent RhythmMethodSoundTop;
|
||||||
var protected const AkEvent AracnoStompSoundEvent;
|
var protected const AkEvent AracnoStompSoundEvent;
|
||||||
|
var protected const AKEvent GunGameLevelUpSoundEvent;
|
||||||
|
var protected const AKEvent GunGameLevelUpFinalWeaponSoundEvent;
|
||||||
|
|
||||||
|
struct native GunGameInfo
|
||||||
|
{
|
||||||
|
var transient byte Level;
|
||||||
|
var transient int Score;
|
||||||
|
var array<byte> GunGamePreselectedWeapons;
|
||||||
|
var byte WaveToUseForRestart;
|
||||||
|
var bool GiveWeaponMaster;
|
||||||
|
|
||||||
|
structdefaultproperties
|
||||||
|
{
|
||||||
|
Level=0;
|
||||||
|
Score=0;
|
||||||
|
WaveToUseForRestart=0;
|
||||||
|
GiveWeaponMaster=false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
var transient GunGameInfo GunGameData;
|
||||||
|
|
||||||
cpptext
|
cpptext
|
||||||
{
|
{
|
||||||
@ -49,7 +67,7 @@ cpptext
|
|||||||
replication
|
replication
|
||||||
{
|
{
|
||||||
if (bNetDirty)
|
if (bNetDirty)
|
||||||
bUsingPermanentZedTime, ZedTimeRadius, ZedTimeBossRadius, ZedTimeHeight, GoompaStreak;
|
bUsingPermanentZedTime, ZedTimeRadius, ZedTimeBossRadius, ZedTimeHeight, GoompaStreak, GunGameData;
|
||||||
}
|
}
|
||||||
|
|
||||||
simulated event PostBeginPlay()
|
simulated event PostBeginPlay()
|
||||||
@ -114,6 +132,22 @@ function RecheckZedTime()
|
|||||||
EnterZedTime();
|
EnterZedTime();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
reliable client function UpdateWaveCount()
|
||||||
|
{
|
||||||
|
if (MyGFxHUD != none)
|
||||||
|
{
|
||||||
|
MyGFxHUD.UpdateWaveCount();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
reliable client function UpdateGunGameWidget(int score, int max_score, int level, int max_level)
|
||||||
|
{
|
||||||
|
if (MyGFxHUD != none)
|
||||||
|
{
|
||||||
|
MyGFxHUD.UpdateGunGameWidget(score, max_score, level, max_level);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Arachnophobia Goompa Stomp Streak functions
|
Arachnophobia Goompa Stomp Streak functions
|
||||||
*/
|
*/
|
||||||
@ -195,13 +229,35 @@ reliable client function GoompaStompMessage( byte StompNum)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
reliable client function PlayGunGameMessage(bool isLastLevel)
|
||||||
|
{
|
||||||
|
if (isLastLevel)
|
||||||
|
{
|
||||||
|
if (GunGameLevelUpFinalWeaponSoundEvent != none)
|
||||||
|
{
|
||||||
|
PlaySoundBase(GunGameLevelUpFinalWeaponSoundEvent);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (GunGameLevelUpSoundEvent != none)
|
||||||
|
{
|
||||||
|
PlaySoundBase(GunGameLevelUpSoundEvent);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/** Resets all gameplay FX to initial state.
|
/** Resets all gameplay FX to initial state.
|
||||||
Append to this list if additional effects are added. */
|
Append to this list if additional effects are added. */
|
||||||
function ResetGameplayPostProcessFX()
|
function ResetGameplayPostProcessFX()
|
||||||
{
|
{
|
||||||
|
local KFGameReplicationInfo KFGRI;
|
||||||
|
|
||||||
super.ResetGameplayPostProcessFX();
|
super.ResetGameplayPostProcessFX();
|
||||||
|
|
||||||
if( GameplayPostProcessEffectMIC != none && (class'KFGameEngine'.static.GetWeeklyEventIndexMod() == 12))
|
KFGRI = KFGameReplicationInfo(WorldInfo.GRI);
|
||||||
|
|
||||||
|
if((KFGRI != none && KFGRI.bIsWeeklyMode && KFGRI.CurrentWeeklyIndex == 12) && GameplayPostProcessEffectMIC != none)
|
||||||
{
|
{
|
||||||
GameplayPostProcessEffectMIC.SetScalarParameterValue(EffectZedTimeSepiaParamName, 1.f);
|
GameplayPostProcessEffectMIC.SetScalarParameterValue(EffectZedTimeSepiaParamName, 1.f);
|
||||||
}
|
}
|
||||||
@ -228,6 +284,55 @@ simulated function ResetBossCamera()
|
|||||||
super(PlayerController).ResetCameraMode();
|
super(PlayerController).ResetCameraMode();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function RestartGunGame()
|
||||||
|
{
|
||||||
|
local KFGameInfo KFGI;
|
||||||
|
local KFGameReplicationInfo KFGRI;
|
||||||
|
|
||||||
|
KFGI = KFGameInfo(WorldInfo.Game);
|
||||||
|
KFGRI = KFGameReplicationInfo(WorldInfo.GRI);
|
||||||
|
|
||||||
|
if (KFGI != none && KFGRI != none)
|
||||||
|
{
|
||||||
|
KFGI.RestartGunGamePlayerWeapon(self, GunGameData.WaveToUseForRestart);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function UpdateInitialHeldWeapon()
|
||||||
|
{
|
||||||
|
//local KFWeapon KFW;
|
||||||
|
local KFPawn_Human KFPH;
|
||||||
|
local KFGameInfo KFGI;
|
||||||
|
local KFGameReplicationInfo KFGRI;
|
||||||
|
|
||||||
|
KFPH = KFPawn_Human(Pawn);
|
||||||
|
|
||||||
|
if (KFPH == none || KFPH.InvManager == none)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*foreach KFPH.InvManager.InventoryActors( class'KFWeapon', KFW )
|
||||||
|
{
|
||||||
|
/** Seems its in order, so knife goes first. Equip it */
|
||||||
|
|
||||||
|
KFPH.InvManager.SetCurrentWeapon(KFW);
|
||||||
|
break;
|
||||||
|
}*/
|
||||||
|
|
||||||
|
KFGI = KFGameInfo(WorldInfo.Game);
|
||||||
|
KFGRI = KFGameReplicationInfo(WorldInfo.GRI);
|
||||||
|
|
||||||
|
if (KFGI != none && KFGRI != none)
|
||||||
|
{
|
||||||
|
KFGI.ResetGunGame(self);
|
||||||
|
|
||||||
|
GunGameData.WaveToUseForRestart = KFGRI.WaveNum;
|
||||||
|
|
||||||
|
SetTimer(1.0, false, 'RestartGunGame');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
defaultProperties
|
defaultProperties
|
||||||
{
|
{
|
||||||
@ -239,4 +344,6 @@ defaultProperties
|
|||||||
RhythmMethodSoundHit =AkEvent'WW_UI_PlayerCharacter.Play_R_Method_Hit'
|
RhythmMethodSoundHit =AkEvent'WW_UI_PlayerCharacter.Play_R_Method_Hit'
|
||||||
RhythmMethodSoundTop =AkEvent'WW_UI_PlayerCharacter.Play_R_Method_Top'
|
RhythmMethodSoundTop =AkEvent'WW_UI_PlayerCharacter.Play_R_Method_Top'
|
||||||
AracnoStompSoundEvent =AkEvent'WW_GLO_Runtime.WeeklyArcno'
|
AracnoStompSoundEvent =AkEvent'WW_GLO_Runtime.WeeklyArcno'
|
||||||
|
GunGameLevelUpSoundEvent=AkEvent'WW_GLO_Runtime.WeeklyAALevelUp'
|
||||||
|
GunGameLevelUpFinalWeaponSoundEvent=AkEvent'WW_GLO_Runtime.WeeklyAALevelFinal'
|
||||||
}
|
}
|
||||||
|
@ -2062,8 +2062,10 @@ function vector GetBestAutoTargetLocation(Pawn CheckTarget, out name outBoneName
|
|||||||
if( KFP != none )
|
if( KFP != none )
|
||||||
{
|
{
|
||||||
// Get the location from the pawn we're targeting if we can
|
// Get the location from the pawn we're targeting if we can
|
||||||
KFP.GetAutoTargetBones(WeakBones, NormalBones);
|
if (!KFP.GetAutoTargetBones(WeakBones, NormalBones))
|
||||||
|
{
|
||||||
|
return vect(0,0,0);
|
||||||
|
}
|
||||||
// cone setup
|
// cone setup
|
||||||
GetPlayerViewPoint( CamLoc, CamRot );
|
GetPlayerViewPoint( CamLoc, CamRot );
|
||||||
CamRot += WeaponBufferRotation;
|
CamRot += WeaponBufferRotation;
|
||||||
|
@ -1351,6 +1351,15 @@ reliable server private function ServerSetPlayerReady( bool bReady )
|
|||||||
/** Called on server to +/- dosh. Do not modify score directly */
|
/** Called on server to +/- dosh. Do not modify score directly */
|
||||||
function AddDosh( int DoshAmount, optional bool bEarned )
|
function AddDosh( int DoshAmount, optional bool bEarned )
|
||||||
{
|
{
|
||||||
|
local KFPlayerController KFPC;
|
||||||
|
|
||||||
|
/** Server code: controllers exist */
|
||||||
|
KFPC = KFPlayerController(Owner);
|
||||||
|
if (KFPC != none && !KFPC.CanUseDosh())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
//If the game has turned off dosh earning for this PRI, early out.
|
//If the game has turned off dosh earning for this PRI, early out.
|
||||||
if (!bAllowDoshEarning && bEarned)
|
if (!bAllowDoshEarning && bEarned)
|
||||||
{
|
{
|
||||||
@ -1465,6 +1474,10 @@ simulated function NotifyWaveEnded()
|
|||||||
{
|
{
|
||||||
bVotedToSkipTraderTime = false;
|
bVotedToSkipTraderTime = false;
|
||||||
|
|
||||||
|
if ( (WorldInfo.NetMode == NM_Standalone || WorldInfo.NetMode == NM_Client) && KFPlayerController(Owner) != none && KFPlayerController(Owner).GetPerk() != none)
|
||||||
|
{
|
||||||
|
KFPlayerController(Owner).GetPerk().OnClientWaveEnded();
|
||||||
|
}
|
||||||
/*local KFGameReplicationInfo KFGRI;
|
/*local KFGameReplicationInfo KFGRI;
|
||||||
|
|
||||||
if( Role == ROLE_Authority )
|
if( Role == ROLE_Authority )
|
||||||
@ -1475,6 +1488,11 @@ simulated function NotifyWaveEnded()
|
|||||||
KFGRI.VoteCollector.ResetSkipTraderBeforeWaveStarts();
|
KFGRI.VoteCollector.ResetSkipTraderBeforeWaveStarts();
|
||||||
}
|
}
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
|
if ( (WorldInfo.NetMode == NM_Standalone || WorldInfo.NetMode == NM_Client) && KFPlayerController(Owner) != none && KFPlayerController(Owner).GetPerk() != none)
|
||||||
|
{
|
||||||
|
KFPlayerController(Owner).GetPerk().OnClientWaveEnded();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//reset the icons here
|
//reset the icons here
|
||||||
|
@ -380,4 +380,10 @@ defaultproperties
|
|||||||
// Added 16/07/2021 - QoL: Quick Swap button allowing 9mm as an option.
|
// Added 16/07/2021 - QoL: Quick Swap button allowing 9mm as an option.
|
||||||
ProfileMappings.Add((Id=KFID_AllowSwapTo9mm, Name="AllowSwitchTo9mm", MappingType=PVMT_RawValue))
|
ProfileMappings.Add((Id=KFID_AllowSwapTo9mm, Name="AllowSwitchTo9mm", MappingType=PVMT_RawValue))
|
||||||
DefaultSettings.Add((Owner=OPPO_Game,ProfileSetting=(PropertyId=KFID_AllowSwapTo9mm,Data=(Type=SDT_Int32,Value1=0))))
|
DefaultSettings.Add((Owner=OPPO_Game,ProfileSetting=(PropertyId=KFID_AllowSwapTo9mm,Data=(Type=SDT_Int32,Value1=0))))
|
||||||
|
|
||||||
|
// Added 07/02/2022 - QoL: Allow survivalits to chose starting weapons.
|
||||||
|
ProfileMappings.Add((Id=KFID_SurvivalStartingWeapIdx, Name="Survival Starting Weapon Index", MappingType=PVMT_RawValue))
|
||||||
|
DefaultSettings.Add((Owner=OPPO_Game,ProfileSetting=(PropertyId=KFID_SurvivalStartingWeapIdx,Data=(Type=SDT_Int32,Value1=0))))
|
||||||
|
ProfileMappings.Add((Id=KFID_SurvivalStartingGrenIdx, Name="Survival Starting Grenade Index", MappingType=PVMT_RawValue))
|
||||||
|
DefaultSettings.Add((Owner=OPPO_Game,ProfileSetting=(PropertyId=KFID_SurvivalStartingGrenIdx,Data=(Type=SDT_Int32,Value1=0))))
|
||||||
}
|
}
|
||||||
|
@ -182,6 +182,8 @@ function SetFrozenParameter(float FreezeAmount)
|
|||||||
local MaterialInstanceConstant MIC;
|
local MaterialInstanceConstant MIC;
|
||||||
local int i;
|
local int i;
|
||||||
local bool bIsWWLMode;
|
local bool bIsWWLMode;
|
||||||
|
local KFGameReplicationInfo KFGRI;
|
||||||
|
|
||||||
if ( PawnOwner.WorldInfo.NetMode != NM_DedicatedServer )
|
if ( PawnOwner.WorldInfo.NetMode != NM_DedicatedServer )
|
||||||
{
|
{
|
||||||
FreezeMatParamValue = FreezeAmount;
|
FreezeMatParamValue = FreezeAmount;
|
||||||
@ -201,7 +203,8 @@ function SetFrozenParameter(float FreezeAmount)
|
|||||||
|
|
||||||
if (KFPawn_Monster(KFPOwner) != none)
|
if (KFPawn_Monster(KFPOwner) != none)
|
||||||
{
|
{
|
||||||
bIsWWLMode = class'KFGameEngine'.static.GetWeeklyEventIndexMod() == 12 && KFGameReplicationInfo(PawnOwner.WorldInfo.GRI) != none && KFGameReplicationInfo(PawnOwner.WorldInfo.GRI).bIsWeeklyMode;
|
KFGRI = KFGameReplicationInfo(PawnOwner.WorldInfo.GRI);
|
||||||
|
bIsWWLMode = KFGRI != none && KFGRI.bIsWeeklyMode && KFGRI.CurrentWeeklyIndex == 12;
|
||||||
|
|
||||||
for (i = 0; i < KFPawn_Monster(KFPOwner).StaticAttachList.length; i++)
|
for (i = 0; i < KFPawn_Monster(KFPOwner).StaticAttachList.length; i++)
|
||||||
{
|
{
|
||||||
|
41
KFGame/Classes/KFSeaTrigger.uc
Normal file
41
KFGame/Classes/KFSeaTrigger.uc
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
//=============================================================================
|
||||||
|
// KFSeaTrigger
|
||||||
|
//=============================================================================
|
||||||
|
// Simple trigger used for sea to bypass kismet
|
||||||
|
//=============================================================================
|
||||||
|
// Killing Floor 2
|
||||||
|
// Copyright (C) 2022 Tripwire Interactive LLC
|
||||||
|
//
|
||||||
|
//=============================================================================
|
||||||
|
class KFSeaTrigger extends Trigger_PawnsOnly
|
||||||
|
placeable
|
||||||
|
native;
|
||||||
|
|
||||||
|
// This class is totally dummy, it is used to place the trigger on the Scene
|
||||||
|
// Then on KFPlayerController we detect this exists and do the logic for Zeds falling to the sea
|
||||||
|
|
||||||
|
cpptext
|
||||||
|
{
|
||||||
|
#if WITH_EDITOR
|
||||||
|
virtual void CheckForErrors(); // Skip 'Trigger is not referenced' warning
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
event Touch(Actor Other, PrimitiveComponent OtherComp, vector HitLocation, vector HitNormal)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
event UnTouch(Actor Other)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
DefaultProperties
|
||||||
|
{
|
||||||
|
Begin Object NAME=CollisionCylinder
|
||||||
|
CollisionRadius=+00200.000000
|
||||||
|
CollisionHeight=+00100.000000
|
||||||
|
End Object
|
||||||
|
|
||||||
|
bProjTarget=false
|
||||||
|
bStatic=true
|
||||||
|
}
|
@ -32,7 +32,9 @@ enum ESharedContentUnlock
|
|||||||
SCU_Thermite,
|
SCU_Thermite,
|
||||||
SCU_BladedPistol,
|
SCU_BladedPistol,
|
||||||
SCU_ParasiteImplanter,
|
SCU_ParasiteImplanter,
|
||||||
SCU_Doshinegun
|
SCU_Doshinegun,
|
||||||
|
SCU_AutoTurret,
|
||||||
|
SCU_ShrinkRayGun
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -212,6 +214,7 @@ static private event bool CheckCustomizationOwnership(KFPlayerReplicationInfo PR
|
|||||||
local SkinVariant Skin;
|
local SkinVariant Skin;
|
||||||
local AttachmentVariants Attachment;
|
local AttachmentVariants Attachment;
|
||||||
local int i;
|
local int i;
|
||||||
|
local KFGameReplicationInfo KFGRI;
|
||||||
|
|
||||||
CharArch = PRI.CharacterArchetypes[PRI.RepCustomizationInfo.CharacterIndex];
|
CharArch = PRI.CharacterArchetypes[PRI.RepCustomizationInfo.CharacterIndex];
|
||||||
|
|
||||||
@ -246,10 +249,12 @@ static private event bool CheckCustomizationOwnership(KFPlayerReplicationInfo PR
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
KFGRI = KFGameReplicationInfo(PRI.WorldInfo.GRI);
|
||||||
// accessory
|
// accessory
|
||||||
for( i=0; i < `MAX_COSMETIC_ATTACHMENTS; i++ )
|
for( i=0; i < `MAX_COSMETIC_ATTACHMENTS; i++ )
|
||||||
{
|
{
|
||||||
if (i == 2 && PRI.WorldInfo.GRI.IsA('KFGameReplicationInfo_WeeklySurvival') && (class'KFGameEngine'.static.GetWeeklyEventIndexMod() == 12))
|
if (i == 2 && KFGRI != none && KFGRI.bIsWeeklyMode && KFGRI.CurrentWeeklyIndex == 12)
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -360,4 +365,12 @@ defaultproperties
|
|||||||
Name=KFWeap_AssaultRifle_Doshinegun,
|
Name=KFWeap_AssaultRifle_Doshinegun,
|
||||||
IconPath="WEP_UI_Doshinegun_TEX.UI_Weapon_Select_Doshinegun",
|
IconPath="WEP_UI_Doshinegun_TEX.UI_Weapon_Select_Doshinegun",
|
||||||
ID=9275)}
|
ID=9275)}
|
||||||
|
SharedContentList(SCU_AutoTurret)={(
|
||||||
|
Name=KFWeap_AutoTurret,
|
||||||
|
IconPath="WEP_UI_AutoTurret_TEX.UI_WeaponSelect_AutoTurret",
|
||||||
|
ID=9284)}
|
||||||
|
SharedContentList(SCU_ShrinkRayGun)={(
|
||||||
|
Name=KFWeap_ShrinkRayGun,
|
||||||
|
IconPath="WEP_UI_ShrinkRay_Gun_TEX.UI_Weapon_Select_Shrink_Ray_Gun",
|
||||||
|
ID=9290)}
|
||||||
}
|
}
|
||||||
|
@ -434,7 +434,7 @@ function ServerStartVoteSkipTrader(PlayerReplicationInfo PRI)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Trader is not open, we are not allowed to initiate a skip trader vote
|
// Trader is not open, we are not allowed to initiate a skip trader vote
|
||||||
if(!KFGRI.bTraderIsOpen)
|
if(!KFGRI.bTraderIsOpen && !KFGRI.bForceShowSkipTrader)
|
||||||
{
|
{
|
||||||
KFPC.ReceiveLocalizedMessage(class'KFLocalMessage', LMT_SkipTraderIsNotOpen);
|
KFPC.ReceiveLocalizedMessage(class'KFLocalMessage', LMT_SkipTraderIsNotOpen);
|
||||||
return;
|
return;
|
||||||
|
@ -31,6 +31,8 @@ var AkEvent PilotLightPlayEvent;
|
|||||||
/** Pilot light sound stop event */
|
/** Pilot light sound stop event */
|
||||||
var AkEvent PilotLightStopEvent;
|
var AkEvent PilotLightStopEvent;
|
||||||
|
|
||||||
|
var protected bool bInvertPilot;
|
||||||
|
|
||||||
/** Effect for the pilot light. */
|
/** Effect for the pilot light. */
|
||||||
var protected KFParticleSystemComponent PSC_PilotLight;
|
var protected KFParticleSystemComponent PSC_PilotLight;
|
||||||
/** Socket to attach the pilot light to. */
|
/** Socket to attach the pilot light to. */
|
||||||
@ -263,9 +265,17 @@ simulated function StopPilotSound()
|
|||||||
simulated function SetPilotDynamicLightEnabled( bool bLightEnabled )
|
simulated function SetPilotDynamicLightEnabled( bool bLightEnabled )
|
||||||
{
|
{
|
||||||
local int Idx;
|
local int Idx;
|
||||||
|
local bool doEnable;
|
||||||
|
|
||||||
|
doEnable = bLightEnabled;
|
||||||
|
|
||||||
|
if (bInvertPilot)
|
||||||
|
{
|
||||||
|
doEnable = bLightEnabled == false;
|
||||||
|
}
|
||||||
|
|
||||||
// Don't turn these on if we're not in third person
|
// Don't turn these on if we're not in third person
|
||||||
if( bLightEnabled && (Instigator != none && Instigator.IsFirstPerson()) )
|
if (doEnable && (Instigator != none && Instigator.IsFirstPerson()))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -273,7 +283,7 @@ simulated function SetPilotDynamicLightEnabled( bool bLightEnabled )
|
|||||||
// turn off lights
|
// turn off lights
|
||||||
for (Idx=0; Idx<PilotLights.length; ++Idx)
|
for (Idx=0; Idx<PilotLights.length; ++Idx)
|
||||||
{
|
{
|
||||||
PilotLights[Idx].Light.SetEnabled(bLightEnabled);
|
PilotLights[Idx].Light.SetEnabled(doEnable);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -507,6 +517,8 @@ defaultproperties
|
|||||||
TickGroup=TG_PostUpdateWork
|
TickGroup=TG_PostUpdateWork
|
||||||
End Object
|
End Object
|
||||||
PSC_PilotLight=PilotLight0
|
PSC_PilotLight=PilotLight0
|
||||||
|
|
||||||
|
bInvertPilot=false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
29
KFGame/Classes/KFWeapDef_AutoTurret.uc
Normal file
29
KFGame/Classes/KFWeapDef_AutoTurret.uc
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
//=============================================================================
|
||||||
|
// KFWeapDef_AutoTurret
|
||||||
|
//=============================================================================
|
||||||
|
//=============================================================================
|
||||||
|
// Killing Floor 2
|
||||||
|
// Copyright (C) 2022 Tripwire Interactive LLC
|
||||||
|
//=============================================================================
|
||||||
|
class KFWeapDef_AutoTurret extends KFWeaponDefinition
|
||||||
|
abstract;
|
||||||
|
|
||||||
|
DefaultProperties
|
||||||
|
{
|
||||||
|
WeaponClassPath="KFGameContent.KFWeap_AutoTurret"
|
||||||
|
|
||||||
|
BuyPrice=500
|
||||||
|
AmmoPricePerMag=60 // 27
|
||||||
|
ImagePath="WEP_UI_AutoTurret_TEX.UI_WeaponSelect_AutoTurret"
|
||||||
|
|
||||||
|
EffectiveRange=18
|
||||||
|
|
||||||
|
UpgradePrice[0]=700
|
||||||
|
UpgradePrice[1]=1500
|
||||||
|
|
||||||
|
UpgradeSellPrice[0]=525
|
||||||
|
UpgradeSellPrice[1]=1650
|
||||||
|
|
||||||
|
SharedUnlockId=SCU_AutoTurret
|
||||||
|
|
||||||
|
}
|
19
KFGame/Classes/KFWeapDef_AutoTurretWeapon.uc
Normal file
19
KFGame/Classes/KFWeapDef_AutoTurretWeapon.uc
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
//=============================================================================
|
||||||
|
// KFWeapDef_AutoTurretWeapon
|
||||||
|
//=============================================================================
|
||||||
|
// Weapon attached to a drone
|
||||||
|
//=============================================================================
|
||||||
|
// Killing Floor 2
|
||||||
|
// Copyright (C) 2022 Tripwire Interactive LLC
|
||||||
|
//=============================================================================
|
||||||
|
class KFWeapDef_AutoTurretWeapon extends KFWeaponDefinition
|
||||||
|
abstract;
|
||||||
|
|
||||||
|
DefaultProperties
|
||||||
|
{
|
||||||
|
WeaponClassPath="KFGameContent.KFWeap_AutoTurretWeapon"
|
||||||
|
|
||||||
|
BuyPrice=0
|
||||||
|
AmmoPricePerMag=0
|
||||||
|
ImagePath="ui_weaponselect_tex.UI_WeaponSelect_AR15"
|
||||||
|
}
|
25
KFGame/Classes/KFWeapDef_HRG_CranialPopper.uc
Normal file
25
KFGame/Classes/KFWeapDef_HRG_CranialPopper.uc
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
//=============================================================================
|
||||||
|
// KFWeapDef_HRG_CranialPopper
|
||||||
|
//=============================================================================
|
||||||
|
//=============================================================================
|
||||||
|
// Killing Floor 2
|
||||||
|
// Copyright (C) 2022 Tripwire Interactive LLC
|
||||||
|
//=============================================================================
|
||||||
|
class KFWeapDef_HRG_CranialPopper extends KFWeaponDefinition
|
||||||
|
abstract;
|
||||||
|
|
||||||
|
DefaultProperties
|
||||||
|
{
|
||||||
|
WeaponClassPath="KFGameContent.KFWeap_HRG_CranialPopper"
|
||||||
|
|
||||||
|
BuyPrice=1100
|
||||||
|
AmmoPricePerMag=40
|
||||||
|
ImagePath="wep_ui_hrg_cranialpopper_tex.UI_WeaponSelect_HRG_CranialPopper"
|
||||||
|
EffectiveRange=90
|
||||||
|
|
||||||
|
UpgradePrice[0]=700
|
||||||
|
UpgradePrice[1]=1500
|
||||||
|
|
||||||
|
UpgradeSellPrice[0]=525
|
||||||
|
UpgradeSellPrice[1]=1650
|
||||||
|
}
|
27
KFGame/Classes/KFWeapDef_HRG_Crossboom.uc
Normal file
27
KFGame/Classes/KFWeapDef_HRG_Crossboom.uc
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
//=============================================================================
|
||||||
|
// KFWeapDef_HRG_Crossboom
|
||||||
|
//=============================================================================
|
||||||
|
//=============================================================================
|
||||||
|
// Killing Floor 2
|
||||||
|
// Copyright (C) 2022 Tripwire Interactive LLC
|
||||||
|
//=============================================================================
|
||||||
|
|
||||||
|
class KFWeapDef_HRG_Crossboom extends KFWeaponDefinition
|
||||||
|
abstract;
|
||||||
|
|
||||||
|
DefaultProperties
|
||||||
|
{
|
||||||
|
WeaponClassPath="KFGameContent.KFWeap_HRG_Crossboom"
|
||||||
|
|
||||||
|
BuyPrice=900
|
||||||
|
AmmoPricePerMag=14
|
||||||
|
ImagePath="WEP_UI_HRG_Crossboom_TEX.UI_WeaponSelect_Crossboom"
|
||||||
|
|
||||||
|
EffectiveRange=80
|
||||||
|
|
||||||
|
UpgradePrice[0]=700
|
||||||
|
UpgradePrice[1]=1500
|
||||||
|
|
||||||
|
UpgradeSellPrice[0]=525
|
||||||
|
UpgradeSellPrice[1]=1650
|
||||||
|
}
|
15
KFGame/Classes/KFWeapDef_RandomGrenade.uc
Normal file
15
KFGame/Classes/KFWeapDef_RandomGrenade.uc
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
//=============================================================================
|
||||||
|
// KFWeapDef_RandomGrenade
|
||||||
|
//=============================================================================
|
||||||
|
//=============================================================================
|
||||||
|
// Killing Floor 2
|
||||||
|
// Copyright (C) 2022 Tripwire Interactive LLC
|
||||||
|
//=============================================================================
|
||||||
|
class KFWeapDef_RandomGrenade extends KFWeaponDefinition
|
||||||
|
abstract;
|
||||||
|
|
||||||
|
DefaultProperties
|
||||||
|
{
|
||||||
|
ImagePath="wep_ui_shared_tex.UI_WeaponSelect_QuestionMark"
|
||||||
|
WeaponClassPath="KFGameContent.KFWeap_RandomGrenade"
|
||||||
|
}
|
28
KFGame/Classes/KFWeapDef_ShrinkRayGun.uc
Normal file
28
KFGame/Classes/KFWeapDef_ShrinkRayGun.uc
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
//=============================================================================
|
||||||
|
// KFWeapDef_ShrinkRayGun
|
||||||
|
//=============================================================================
|
||||||
|
//=============================================================================
|
||||||
|
// Killing Floor 2
|
||||||
|
// Copyright (C) 2021 Tripwire Interactive LLC
|
||||||
|
//=============================================================================
|
||||||
|
class KFWeapDef_ShrinkRayGun extends KFWeaponDefinition
|
||||||
|
abstract;
|
||||||
|
|
||||||
|
DefaultProperties
|
||||||
|
{
|
||||||
|
WeaponClassPath="KFGameContent.KFWeap_ShrinkRayGun"
|
||||||
|
|
||||||
|
BuyPrice=1200
|
||||||
|
AmmoPricePerMag=50
|
||||||
|
ImagePath="WEP_UI_ShrinkRay_Gun_TEX.UI_Weapon_Select_Shrink_Ray_Gun"
|
||||||
|
|
||||||
|
EffectiveRange=12
|
||||||
|
|
||||||
|
UpgradePrice[0]=700
|
||||||
|
UpgradePrice[1]=1500
|
||||||
|
|
||||||
|
UpgradeSellPrice[0]=525
|
||||||
|
UpgradeSellPrice[1]=1650
|
||||||
|
|
||||||
|
SharedUnlockId=SCU_ShrinkRayGun
|
||||||
|
}
|
@ -33,6 +33,8 @@ var AkEvent PilotLightPlayEvent;
|
|||||||
/** Pilot light sound stop event */
|
/** Pilot light sound stop event */
|
||||||
var AkEvent PilotLightStopEvent;
|
var AkEvent PilotLightStopEvent;
|
||||||
|
|
||||||
|
var protected bool bInvertPilot;
|
||||||
|
|
||||||
/** Effect for the pilot light. */
|
/** Effect for the pilot light. */
|
||||||
var() protected KFParticleSystemComponent PSC_PilotLight;
|
var() protected KFParticleSystemComponent PSC_PilotLight;
|
||||||
/** Socket to attach the pilot light to. */
|
/** Socket to attach the pilot light to. */
|
||||||
@ -47,6 +49,9 @@ var float LastBarrelHeat;
|
|||||||
/** Whether this weapon should warn AI when it fires */
|
/** Whether this weapon should warn AI when it fires */
|
||||||
var() const bool bWarnAIWhenFiring;
|
var() const bool bWarnAIWhenFiring;
|
||||||
|
|
||||||
|
/** Modifier to the speed for barrel cooldown */
|
||||||
|
var const float CooldownBarrelModifier;
|
||||||
|
|
||||||
/*********************************************************************************************
|
/*********************************************************************************************
|
||||||
* @name Optional dynamic pilot lights
|
* @name Optional dynamic pilot lights
|
||||||
********************************************************************************************* */
|
********************************************************************************************* */
|
||||||
@ -147,13 +152,26 @@ simulated event Tick(float DeltaTime)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if( BarrelHeat > 0 )
|
if (ActiveFlameSpray != none)
|
||||||
|
{
|
||||||
|
FlameHeat = ActiveFlameSpray.MaterialHeatRange.X;
|
||||||
|
}
|
||||||
|
else if (FlameSprayArchetype != none)
|
||||||
|
{
|
||||||
|
FlameHeat = FlameSprayArchetype.default.MaterialHeatRange.X;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
FlameHeat = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( BarrelHeat != FlameHeat )
|
||||||
{
|
{
|
||||||
// Cool the barrel down when not shooting
|
// Cool the barrel down when not shooting
|
||||||
BarrelHeat -= DeltaTime * 0.5;
|
BarrelHeat -= DeltaTime * CooldownBarrelModifier;
|
||||||
if( BarrelHeat < 0 )
|
if( BarrelHeat < FlameHeat )
|
||||||
{
|
{
|
||||||
BarrelHeat = 0;
|
BarrelHeat = FlameHeat;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -340,9 +358,17 @@ simulated protected function TurnOffPilot()
|
|||||||
simulated function SetPilotDynamicLightEnabled( bool bLightEnabled )
|
simulated function SetPilotDynamicLightEnabled( bool bLightEnabled )
|
||||||
{
|
{
|
||||||
local int Idx;
|
local int Idx;
|
||||||
|
local bool doEnable;
|
||||||
|
|
||||||
|
doEnable = bLightEnabled;
|
||||||
|
|
||||||
|
if (bInvertPilot)
|
||||||
|
{
|
||||||
|
doEnable = bLightEnabled == false;
|
||||||
|
}
|
||||||
|
|
||||||
// Don't turn these on if we're not the local playercontroller
|
// Don't turn these on if we're not the local playercontroller
|
||||||
if( bLightEnabled && (Instigator == none || !Instigator.IsLocallyControlled() || !Instigator.IsFirstPerson()) )
|
if (doEnable && (Instigator == none || !Instigator.IsLocallyControlled() || !Instigator.IsFirstPerson()))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -350,7 +376,7 @@ simulated function SetPilotDynamicLightEnabled( bool bLightEnabled )
|
|||||||
// turn off lights
|
// turn off lights
|
||||||
for (Idx=0; Idx<PilotLights.length; ++Idx)
|
for (Idx=0; Idx<PilotLights.length; ++Idx)
|
||||||
{
|
{
|
||||||
PilotLights[Idx].Light.SetEnabled(bLightEnabled);
|
PilotLights[Idx].Light.SetEnabled(doEnable);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -379,7 +405,9 @@ simulated function StopPilotSound()
|
|||||||
simulated function StartLoopingFireEffects(byte FireModeNum, optional bool bForceAnim)
|
simulated function StartLoopingFireEffects(byte FireModeNum, optional bool bForceAnim)
|
||||||
{
|
{
|
||||||
StopPilotSound();
|
StopPilotSound();
|
||||||
SetPilotDynamicLightEnabled(false);
|
|
||||||
|
SetPilotDynamicLightEnabled(false);
|
||||||
|
|
||||||
super.StartLoopingFireEffects(FireModeNum, bForceAnim);
|
super.StartLoopingFireEffects(FireModeNum, bForceAnim);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -389,8 +417,10 @@ simulated function StartLoopingFireEffects(byte FireModeNum, optional bool bForc
|
|||||||
simulated function StopLoopingFireEffects(byte FireModeNum)
|
simulated function StopLoopingFireEffects(byte FireModeNum)
|
||||||
{
|
{
|
||||||
super.StopLoopingFireEffects(FireModeNum);
|
super.StopLoopingFireEffects(FireModeNum);
|
||||||
|
|
||||||
StartPilotSound();
|
StartPilotSound();
|
||||||
SetPilotDynamicLightEnabled(true);
|
|
||||||
|
SetPilotDynamicLightEnabled(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -800,10 +830,14 @@ defaultproperties
|
|||||||
|
|
||||||
bWeaponNeedsServerPosition=true
|
bWeaponNeedsServerPosition=true
|
||||||
|
|
||||||
|
bInvertPilot=false
|
||||||
|
|
||||||
// Aim Assist
|
// Aim Assist
|
||||||
AimCorrectionSize=0.f
|
AimCorrectionSize=0.f
|
||||||
|
|
||||||
// AI Warning
|
// AI Warning
|
||||||
MaxAIWarningDistSQ=1000000
|
MaxAIWarningDistSQ=1000000
|
||||||
MaxAIWarningDistFromPointSQ=40000
|
MaxAIWarningDistFromPointSQ=40000
|
||||||
|
|
||||||
|
CooldownBarrelModifier=0.5f
|
||||||
}
|
}
|
@ -1246,7 +1246,7 @@ simulated function Timer_UpdateWeaponSkin()
|
|||||||
// for remote clients to preload content when a user picks up a weapon without
|
// for remote clients to preload content when a user picks up a weapon without
|
||||||
// having to do the full setting stack.
|
// having to do the full setting stack.
|
||||||
simulated native static function TriggerAsyncContentLoad(class<KFWeapon> WeaponClass);
|
simulated native static function TriggerAsyncContentLoad(class<KFWeapon> WeaponClass);
|
||||||
native private function StartLoadWeaponContent();
|
native protected function StartLoadWeaponContent();
|
||||||
native private function LoadWeaponContent();
|
native private function LoadWeaponContent();
|
||||||
native private function CacheWeaponContent();
|
native private function CacheWeaponContent();
|
||||||
native private function UnloadWeaponContent();
|
native private function UnloadWeaponContent();
|
||||||
@ -1618,6 +1618,21 @@ simulated function AttachLaserSight()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function GunGameRemove()
|
||||||
|
{
|
||||||
|
if (Instigator != none && Instigator.InvManager != none)
|
||||||
|
{
|
||||||
|
Instigator.InvManager.RemoveFromInventory(Self);
|
||||||
|
}
|
||||||
|
|
||||||
|
Instigator = None;
|
||||||
|
GotoState('');
|
||||||
|
|
||||||
|
AIController = None;
|
||||||
|
|
||||||
|
Destroy();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Drop this item out in to the world
|
* Drop this item out in to the world
|
||||||
*/
|
*/
|
||||||
@ -1815,9 +1830,24 @@ reliable client function ClientNotifyPickedUp()
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** Treat as non-standard equipment item for */
|
/** Treat as non-standard equipment item for */
|
||||||
simulated static function bool DenyPerkResupply()
|
simulated function bool DenyPerkResupply()
|
||||||
{
|
{
|
||||||
return default.InventoryGroup >= IG_Equipment;
|
if (default.InventoryGroup >= IG_Equipment)
|
||||||
|
{
|
||||||
|
if (Class.Name == 'KFWeap_Thrown_C4')
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Class.Name == 'KFWeap_AutoTurret')
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
simulated static function bool IsMeleeWeapon()
|
simulated static function bool IsMeleeWeapon()
|
||||||
@ -6488,7 +6518,7 @@ simulated state WeaponFiring
|
|||||||
Instigator.WeaponStoppedFiring(self, false);
|
Instigator.WeaponStoppedFiring(self, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( bPlayingLoopingFireAnim || bPlayingLoopingFireAnim )
|
if ( bPlayingLoopingFireAnim || bPlayingLoopingFireSnd )
|
||||||
{
|
{
|
||||||
StopLoopingFireEffects(CurrentFireMode);
|
StopLoopingFireEffects(CurrentFireMode);
|
||||||
}
|
}
|
||||||
|
@ -2748,6 +2748,9 @@ defaultproperties
|
|||||||
//Dragon & Koi Pulverizer
|
//Dragon & Koi Pulverizer
|
||||||
Skins.Add((Id=7519, Weapondef=class'KFWeapDef_Pulverizer', MIC_1P=("WEP_SkinSet_DragonKoi_03_MAT.dragonkoi_pulverizer.DragonKoi_Pulverizer_1P_Mint_MIC"), MIC_3P="WEP_SkinSet_DragonKoi_03_MAT.dragonkoi_pulverizer.DragonKoi_Pulverizer_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet_DragonKoi_03_MAT.dragonkoi_pulverizer.DragonKoi_Pulverizer_3P_Pickup_MIC"))
|
Skins.Add((Id=7519, Weapondef=class'KFWeapDef_Pulverizer', MIC_1P=("WEP_SkinSet_DragonKoi_03_MAT.dragonkoi_pulverizer.DragonKoi_Pulverizer_1P_Mint_MIC"), MIC_3P="WEP_SkinSet_DragonKoi_03_MAT.dragonkoi_pulverizer.DragonKoi_Pulverizer_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet_DragonKoi_03_MAT.dragonkoi_pulverizer.DragonKoi_Pulverizer_3P_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Standard Ion Sword
|
||||||
|
Skins.Add((Id=7715, Weapondef=class'KFWeapDef_IonThruster', MIC_1P=("WEP_1P_Ion_Sword_MAT.Wep_1stP_Ion_Sword_MIC"), MIC_3P="WEP_3P_Ion_Sword_MAT.Wep_3rdP_Ion_Sword_MIC", MIC_Pickup="WEP_3P_Ion_Sword_MAT.Wep_3rdP_Ion_Sword_Pickup_MIC"))
|
||||||
|
|
||||||
//Dosh Royale Ion Sword
|
//Dosh Royale Ion Sword
|
||||||
Skins.Add((Id=7716, Weapondef=class'KFWeapDef_IonThruster', MIC_1P=("WEP_1P_Ion_Sword_MAT.Wep_1st_Ion_Sword_DoshRoyale_MIC"), MIC_3P="WEP_3P_Ion_Sword_MAT.Wep_3rdP_Ion_Sword_DoshRoyale_MIC", MIC_Pickup="WEP_3P_Ion_Sword_MAT.Wep_3rdP_Ion_Sword_DoshRoyale_Pickup_MIC"))
|
Skins.Add((Id=7716, Weapondef=class'KFWeapDef_IonThruster', MIC_1P=("WEP_1P_Ion_Sword_MAT.Wep_1st_Ion_Sword_DoshRoyale_MIC"), MIC_3P="WEP_3P_Ion_Sword_MAT.Wep_3rdP_Ion_Sword_DoshRoyale_MIC", MIC_Pickup="WEP_3P_Ion_Sword_MAT.Wep_3rdP_Ion_Sword_DoshRoyale_Pickup_MIC"))
|
||||||
|
|
||||||
@ -2763,6 +2766,9 @@ defaultproperties
|
|||||||
//Shatter Ion Sword
|
//Shatter Ion Sword
|
||||||
Skins.Add((Id=7720, Weapondef=class'KFWeapDef_IonThruster', MIC_1P=("WEP_1P_Ion_Sword_MAT.Wep_1st_Ion_Sword_Shatter_MIC"), MIC_3P="WEP_3P_Ion_Sword_MAT.Wep_3rdP_Ion_Sword_Shatter_MIC", MIC_Pickup="WEP_3P_Ion_Sword_MAT.Wep_3rdP_Ion_Sword_Shatter_Pickup_MIC"))
|
Skins.Add((Id=7720, Weapondef=class'KFWeapDef_IonThruster', MIC_1P=("WEP_1P_Ion_Sword_MAT.Wep_1st_Ion_Sword_Shatter_MIC"), MIC_3P="WEP_3P_Ion_Sword_MAT.Wep_3rdP_Ion_Sword_Shatter_MIC", MIC_Pickup="WEP_3P_Ion_Sword_MAT.Wep_3rdP_Ion_Sword_Shatter_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Standard Chiappa Rhino
|
||||||
|
Skins.Add((Id=7704, Weapondef=class'KFWeapDef_ChiappaRhino', MIC_1P=("wep_1p_chiapparhino_mat.WEP_1P_ChiappaRhino_MIC"), MIC_3P="WEP_3P_ChiappoRhino_MAT.WEP_3P_ChiappaRhino_MIC", MIC_Pickup="WEP_3P_ChiappoRhino_MAT.3P_Pickup_ChiappaRhino_MIC"))
|
||||||
|
|
||||||
//Dosh Royale Chiappa Rhino
|
//Dosh Royale Chiappa Rhino
|
||||||
Skins.Add((Id=7705, Weapondef=class'KFWeapDef_ChiappaRhino', MIC_1P=("wep_1p_chiapparhino_mat.WEP_1P_ChiappaRhinos_DoshRoyale_MIC"), MIC_3P="WEP_3P_ChiappoRhino_MAT.WEP_3P_ChiappaRhino_DoshRoyale_MIC", MIC_Pickup="WEP_3P_ChiappoRhino_MAT.3P_Pickup_ChiappaRhino_DoshRoyale_MIC"))
|
Skins.Add((Id=7705, Weapondef=class'KFWeapDef_ChiappaRhino', MIC_1P=("wep_1p_chiapparhino_mat.WEP_1P_ChiappaRhinos_DoshRoyale_MIC"), MIC_3P="WEP_3P_ChiappoRhino_MAT.WEP_3P_ChiappaRhino_DoshRoyale_MIC", MIC_Pickup="WEP_3P_ChiappoRhino_MAT.3P_Pickup_ChiappaRhino_DoshRoyale_MIC"))
|
||||||
|
|
||||||
@ -2798,6 +2804,26 @@ defaultproperties
|
|||||||
Skins.Add((Id=7796, Weapondef=class'KFWeapDef_MicrowaveRifle', MIC_1P=("WEP_SkinSet27_MAT.jaeger_microwaveassault.Jaeger_MicrowaveAssault_1P_FieldTested_MIC"), MIC_3P="WEP_SkinSet27_MAT.jaeger_microwaveassault.Jaeger_MicrowaveAssault_3P_FieldTested_MIC", MIC_Pickup="WEP_SkinSet27_MAT.jaeger_microwaveassault.Jaeger_MicrowaveAssault_3P_Pickup_MIC"))
|
Skins.Add((Id=7796, Weapondef=class'KFWeapDef_MicrowaveRifle', MIC_1P=("WEP_SkinSet27_MAT.jaeger_microwaveassault.Jaeger_MicrowaveAssault_1P_FieldTested_MIC"), MIC_3P="WEP_SkinSet27_MAT.jaeger_microwaveassault.Jaeger_MicrowaveAssault_3P_FieldTested_MIC", MIC_Pickup="WEP_SkinSet27_MAT.jaeger_microwaveassault.Jaeger_MicrowaveAssault_3P_Pickup_MIC"))
|
||||||
Skins.Add((Id=7797, Weapondef=class'KFWeapDef_MicrowaveRifle', MIC_1P=("WEP_SkinSet27_MAT.jaeger_microwaveassault.Jaeger_MicrowaveAssault_1P_Mint_MIC"), MIC_3P="WEP_SkinSet27_MAT.jaeger_microwaveassault.Jaeger_MicrowaveAssault_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet27_MAT.jaeger_microwaveassault.Jaeger_MicrowaveAssault_3P_Pickup_MIC"))
|
Skins.Add((Id=7797, Weapondef=class'KFWeapDef_MicrowaveRifle', MIC_1P=("WEP_SkinSet27_MAT.jaeger_microwaveassault.Jaeger_MicrowaveAssault_1P_Mint_MIC"), MIC_3P="WEP_SkinSet27_MAT.jaeger_microwaveassault.Jaeger_MicrowaveAssault_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet27_MAT.jaeger_microwaveassault.Jaeger_MicrowaveAssault_3P_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Jaeger Desert Eagle
|
||||||
|
//BattleScarred
|
||||||
|
Skins.Add((Id=7798, Weapondef=class'KFWeapDef_Deagle', MIC_1P=("WEP_SkinSet27_MAT.jaeger_deagle.Jaeger_Deagle_1P_BattleScarred_MIC"), MIC_3P="WEP_SkinSet27_MAT.jaeger_deagle.Jaeger_Deagle_3P_BattleScarred_MIC", MIC_Pickup="WEP_SkinSet27_MAT.jaeger_deagle.Jaeger_Deagle_3P_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Field Tested
|
||||||
|
Skins.Add((Id=7799, Weapondef=class'KFWeapDef_Deagle', MIC_1P=("WEP_SkinSet27_MAT.jaeger_deagle.Jaeger_Deagle_1P_FieldTested_MIC"), MIC_3P="WEP_SkinSet27_MAT.jaeger_deagle.Jaeger_Deagle_3P_FieldTested_MIC", MIC_Pickup="WEP_SkinSet27_MAT.jaeger_deagle.Jaeger_Deagle_3P_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Mint
|
||||||
|
Skins.Add((Id=7800, Weapondef=class'KFWeapDef_Deagle', MIC_1P=("WEP_SkinSet27_MAT.jaeger_deagle.Jaeger_Deagle_1P_Mint_MIC"), MIC_3P="WEP_SkinSet27_MAT.jaeger_deagle.Jaeger_Deagle_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet27_MAT.jaeger_deagle.Jaeger_Deagle_3P_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Jaeger P90
|
||||||
|
//BattleScarred
|
||||||
|
Skins.Add((Id=7804, Weapondef=class'KFWeapDef_P90', MIC_1P=("WEP_SkinSet27_MAT.jaeger_p90.jaeger_P90_1P_BattleScarred_MIC"), MIC_3P="WEP_SkinSet27_MAT.jaeger_p90.Jaeger_P90_3P_BattleScarred_MIC", MIC_Pickup="WEP_SkinSet27_MAT.jaeger_p90.Jaeger_P90_3P_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Field Tested
|
||||||
|
Skins.Add((Id=7805, Weapondef=class'KFWeapDef_P90', MIC_1P=("WEP_SkinSet27_MAT.jaeger_p90.jaeger_P90_1P_FieldTested_MIC"), MIC_3P="WEP_SkinSet27_MAT.jaeger_p90.Jaeger_P90_3P_FieldTested_MIC", MIC_Pickup="WEP_SkinSet27_MAT.jaeger_p90.Jaeger_P90_3P_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Mint
|
||||||
|
Skins.Add((Id=7806, Weapondef=class'KFWeapDef_P90', MIC_1P=("WEP_SkinSet27_MAT.jaeger_p90.jaeger_P90_1P_Mint_MIC"), MIC_3P="WEP_SkinSet27_MAT.jaeger_p90.Jaeger_P90_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet27_MAT.jaeger_p90.Jaeger_P90_3P_Pickup_MIC"))
|
||||||
|
|
||||||
//Jaeger Desert Eagle BattleScarred
|
//Jaeger Desert Eagle BattleScarred
|
||||||
Skins.Add((Id=8031, Weapondef=class'KFWeapDef_Deagle', MIC_1P=("WEP_SkinSet27_MAT.jaeger_deagle.Jaeger_Deagle_1P_BattleScarred_MIC"), MIC_3P="WEP_SkinSet27_MAT.jaeger_deagle.Jaeger_Deagle_3P_BattleScarred_MIC", MIC_Pickup="WEP_SkinSet27_MAT.jaeger_deagle.Jaeger_Deagle_3P_Pickup_MIC"))
|
Skins.Add((Id=8031, Weapondef=class'KFWeapDef_Deagle', MIC_1P=("WEP_SkinSet27_MAT.jaeger_deagle.Jaeger_Deagle_1P_BattleScarred_MIC"), MIC_3P="WEP_SkinSet27_MAT.jaeger_deagle.Jaeger_Deagle_3P_BattleScarred_MIC", MIC_Pickup="WEP_SkinSet27_MAT.jaeger_deagle.Jaeger_Deagle_3P_Pickup_MIC"))
|
||||||
|
|
||||||
@ -3613,6 +3639,42 @@ defaultproperties
|
|||||||
//Doshinegun Koi Dream
|
//Doshinegun Koi Dream
|
||||||
Skins.Add((Id=9276, Weapondef=class'KFWeapDef_Doshinegun', MIC_1P=("wep_skinset53_mat.Wep_Doshinegun_koidream_body_PM", "wep_skinset53_mat.Wep_Doshinegun_koidream_mag_PM"), MIC_3P="WEP_SkinSet53_MAT.Wep_Doshinegun_koidream_3P_PM", MIC_Pickup="WEP_SkinSet53_MAT.Wep_Doshinegun_koidream_3P_Pickup_MIC"));
|
Skins.Add((Id=9276, Weapondef=class'KFWeapDef_Doshinegun', MIC_1P=("wep_skinset53_mat.Wep_Doshinegun_koidream_body_PM", "wep_skinset53_mat.Wep_Doshinegun_koidream_mag_PM"), MIC_3P="WEP_SkinSet53_MAT.Wep_Doshinegun_koidream_3P_PM", MIC_Pickup="WEP_SkinSet53_MAT.Wep_Doshinegun_koidream_3P_Pickup_MIC"));
|
||||||
|
|
||||||
|
//Sentinel Standard
|
||||||
|
Skins.Add((Id=9284, Weapondef=class'KFWeapDef_AutoTurret', MIC_1P=("wep_1p_autoturret_mat.Wep_1P_AutoTurret_MIC","Wep_1P_AutoTurret_MAT.Wep_1P_Remote_MIC"), MIC_3P="WEP_3P_AutoTurret_MAT.WEP_3P_AutoTurret_MIC", MIC_Pickup="wep_3p_autoturret_mat.3P_Pickup_AutoTurret_MIC"))
|
||||||
|
|
||||||
|
//Sentinel 1942
|
||||||
|
Skins.Add((Id=9285, Weapondef=class'KFWeapDef_AutoTurret', MIC_1P=("WEP_SkinSet54_MAT.Wep_1P_1942_AutoTurret_MIC","WEP_SkinSet54_MAT.Wep_1P_1942_Remote_MIC"), MIC_3P="wep_skinset54_mat.Wep_3P_1942_AutoTurret_MIC", MIC_Pickup="wep_skinset54_mat.Wep_3P_1942_AutoTurrent_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Sentinel Black Bird
|
||||||
|
Skins.Add((Id=9286, Weapondef=class'KFWeapDef_AutoTurret', MIC_1P=("WEP_SkinSet54_MAT.Wep_1P_BlackBird_AutoTurret_MIC","WEP_SkinSet54_MAT.Wep_1P_BlackBird_Remote_MIC"), MIC_3P="wep_skinset54_mat.Wep_3P_BlackBird_AutoTurret_MIC", MIC_Pickup="wep_skinset54_mat.Wep_3P_BlackBird_AutoTurrent_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Sentinel Hades
|
||||||
|
Skins.Add((Id=9287, Weapondef=class'KFWeapDef_AutoTurret', MIC_1P=("WEP_SkinSet54_MAT.Wep_1P_Hades_AutoTurret_MIC","WEP_SkinSet54_MAT.Wep_1P_Hades_Remote_MIC"), MIC_3P="wep_skinset54_mat.Wep_3P_Hades_AutoTurret_MIC", MIC_Pickup="wep_skinset54_mat.Wep_3P_Hades_AutoTurrent_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Sentinel Ice Storm
|
||||||
|
Skins.Add((Id=9288, Weapondef=class'KFWeapDef_AutoTurret', MIC_1P=("WEP_SkinSet54_MAT.Wep_1P_IceStorm_AutoTurret_MIC","WEP_SkinSet54_MAT.Wep_1P_IceStorm_Remote_MIC"), MIC_3P="wep_skinset54_mat.Wep_3P_IceStorm_AutoTurret_MIC", MIC_Pickup="wep_skinset54_mat.Wep_3P_IceStorm_AutoTurrent_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Sentinel Shock
|
||||||
|
Skins.Add((Id=9289, Weapondef=class'KFWeapDef_AutoTurret', MIC_1P=("WEP_SkinSet54_MAT.Wep_1P_Shock_AutoTurret_MIC","WEP_SkinSet54_MAT.Wep_1P_Shock_Remote_MIC"), MIC_3P="wep_skinset54_mat.Wep_3P_Shock_AutoTurret_MIC", MIC_Pickup="wep_skinset54_mat.Wep_3P_Shock_AutoTurrent_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Reducto Ray Standard
|
||||||
|
Skins.Add((Id=9290, Weapondef=class'KFWeapDef_ShrinkRayGun', MIC_1P=("wep_1p_shrinkray_gun_mat.Wep_1P_ShrinkRay_Gun_MIC","WEP_1P_ShrinkRay_Gun_MAT.WEP_ShrinkRay_Glass_MIC"), MIC_3P="wep_3p_shrinkray_gun_mat.WEP_3P_ShrinkRay_Gun_MIC", MIC_Pickup="wep_3p_shrinkray_gun_mat.3P_Pickup_ShrinkRay_Gun_MIC"))
|
||||||
|
|
||||||
|
//Reducto Ray Atomic Love
|
||||||
|
Skins.Add((Id=9291, Weapondef=class'KFWeapDef_ShrinkRayGun', MIC_1P=("wep_skinset55_mat.Wep_1P_AtomicLove_ShrinkRay_Gun_MIC","WEP_1P_ShrinkRay_Gun_MAT.WEP_ShrinkRay_Glass_MIC"), MIC_3P="wep_skinset55_mat.Wep_3P_AtomicLove_ShrinkRay_Gun_MIC", MIC_Pickup="wep_skinset55_mat.Wep_3P_AtomicLove_ShrinkRay_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Reducto Ray Destructor
|
||||||
|
Skins.Add((Id=9292, Weapondef=class'KFWeapDef_ShrinkRayGun', MIC_1P=("wep_skinset55_mat.Wep_1P_Destructor_ShrinkRay_Gun_MIC","WEP_1P_ShrinkRay_Gun_MAT.WEP_ShrinkRay_Glass_MIC"), MIC_3P="wep_skinset55_mat.Wep_3P_Destructor_ShrinkRay_Gun_MIC", MIC_Pickup="wep_skinset55_mat.Wep_3P_Destructor_ShrinkRay_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Reducto Ray Heavy Metal
|
||||||
|
Skins.Add((Id=9293, Weapondef=class'KFWeapDef_ShrinkRayGun', MIC_1P=("wep_skinset55_mat.Wep_1P_HeavyMetal_ShrinkRay_Gun_MIC","WEP_1P_ShrinkRay_Gun_MAT.WEP_ShrinkRay_Glass_MIC"), MIC_3P="wep_skinset55_mat.Wep_3P_HeavyMetal_ShrinkRay_Gun_MIC", MIC_Pickup="wep_skinset55_mat.Wep_3P_HeavyMetal_ShrinkRay_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Reducto Ray HellsFury
|
||||||
|
Skins.Add((Id=9294, Weapondef=class'KFWeapDef_ShrinkRayGun', MIC_1P=("wep_skinset55_mat.Wep_1P_HellsFury_ShrinkRay_Gun_MIC","WEP_1P_ShrinkRay_Gun_MAT.WEP_ShrinkRay_Glass_MIC"), MIC_3P="wep_skinset55_mat.Wep_3P_HellsFury_ShrinkRay_Gun_MIC", MIC_Pickup="wep_skinset55_mat.Wep_3P_HellsFury_ShrinkRay_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Reducto Ray Lucky Strike
|
||||||
|
Skins.Add((Id=9295, Weapondef=class'KFWeapDef_ShrinkRayGun', MIC_1P=("wep_skinset55_mat.Wep_1P_LuckyStrike_ShrinkRay_Gun_MIC","WEP_1P_ShrinkRay_Gun_MAT.WEP_ShrinkRay_Glass_MIC"), MIC_3P="wep_skinset55_mat.Wep_3P_LuckyStrike_ShrinkRay_Gun_MIC", MIC_Pickup="wep_skinset55_mat.Wep_3P_LuckyStrike_ShrinkRay_Pickup_MIC"))
|
||||||
|
|
||||||
//BeyondHorizon AA12
|
//BeyondHorizon AA12
|
||||||
Skins.Add((Id=8845, bNeedsCodeUpdates = true, Weapondef=class'KFWeapDef_AA12', MIC_1P=("WEP_SkinSet43_MAT.space_aa12.Space_AA12_1P_Mint_MIC"), MIC_3P="WEP_SkinSet43_MAT.space_aa12.Space_AA12_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet43_MAT.space_aa12.Space_AA12_3P_Pickup_MIC"))
|
Skins.Add((Id=8845, bNeedsCodeUpdates = true, Weapondef=class'KFWeapDef_AA12', MIC_1P=("WEP_SkinSet43_MAT.space_aa12.Space_AA12_1P_Mint_MIC"), MIC_3P="WEP_SkinSet43_MAT.space_aa12.Space_AA12_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet43_MAT.space_aa12.Space_AA12_3P_Pickup_MIC"))
|
||||||
|
|
||||||
@ -3858,4 +3920,183 @@ defaultproperties
|
|||||||
|
|
||||||
//XMas Sour Spitfire
|
//XMas Sour Spitfire
|
||||||
Skins.Add((Id=9217, bNeedsCodeUpdates = true, Weapondef=class'KFWeapDef_Flaregun', MIC_1P=("WEP_SkinSet52_MAT.sour_flaregun.Sour_FlareGun_1P_Mint_MIC"), MIC_3P="WEP_SkinSet52_MAT.sour_flaregun.Sour_FlareGun_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet52_MAT.sour_flaregun.Sour_FlareGun_3P_Pickup_MIC"))
|
Skins.Add((Id=9217, bNeedsCodeUpdates = true, Weapondef=class'KFWeapDef_Flaregun', MIC_1P=("WEP_SkinSet52_MAT.sour_flaregun.Sour_FlareGun_1P_Mint_MIC"), MIC_3P="WEP_SkinSet52_MAT.sour_flaregun.Sour_FlareGun_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet52_MAT.sour_flaregun.Sour_FlareGun_3P_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Neon Boomstick
|
||||||
|
Skins.Add((Id=9335, Weapondef=class'KFWeapDef_DoubleBarrel', MIC_1P=("wep_skinset56_mat.neon_doublebarrel.Neon_DoubleBarrel_1P_Mint_MIC"), MIC_3P="wep_skinset56_mat.neon_doublebarrel.Neon_DoubleBarrel_3P_Mint_MIC", MIC_Pickup="wep_skinset56_mat.neon_doublebarrel.Neon_DoubleBarrel_3P_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Neon HZ12
|
||||||
|
Skins.Add((Id=9336, Weapondef=class'KFWeapDef_HZ12', MIC_1P=("wep_skinset56_mat.neon_hz12.Neon_HZ12_1P_Mint_MIC"), MIC_3P="wep_skinset56_mat.neon_hz12.Neon_HZ12_3P_Mint_MIC", MIC_Pickup="wep_skinset56_mat.neon_hz12.Neon_HZ12_3P_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Neon HRG Beluga Beat
|
||||||
|
Skins.Add((Id=9337, Weapondef=class'KFWeapDef_HRG_SonicGun', MIC_1P=("wep_skinset56_mat.neon_hrgsonicgun.Neon_HRGSonicGun_1P_Mint_MIC"), MIC_3P="wep_skinset56_mat.neon_hrgsonicgun.Neon_HRGSonicGun_3P_Mint_MIC", MIC_Pickup="wep_skinset56_mat.neon_hrgsonicgun.Neon_HRGSonicGun_3P_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Neon Zweihander
|
||||||
|
Skins.Add((Id=9338, Weapondef=class'KFWeapDef_Zweihander', MIC_1P=("wep_skinset56_mat.neon_zweihander.Neon_Zweihander_1P_Mint_MIC"), MIC_3P="wep_skinset56_mat.neon_zweihander.Neon_Zweihander_3P_Mint_MIC", MIC_Pickup="wep_skinset56_mat.neon_zweihander.Neon_Zweihander_3P_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Neon RGB Boomstick
|
||||||
|
Skins.Add((Id=9339, Weapondef=class'KFWeapDef_DoubleBarrel', MIC_1P=("wep_skinset56_mat.neonrgb_doublebarrel.NeonRGB_DoubleBarrel_1P_Mint_MIC"), MIC_3P="wep_skinset56_mat.neonrgb_doublebarrel.NeonRGB_DoubleBarrel_3P_Mint_MIC", MIC_Pickup="wep_skinset56_mat.neonrgb_doublebarrel.NeonRGB_DoubleBarrel_3P_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Neon RGB HZ12
|
||||||
|
Skins.Add((Id=9340, Weapondef=class'KFWeapDef_HZ12', MIC_1P=("wep_skinset56_mat.neonrgb_hz12.NeonRGB_HZ12_1P_Mint_MIC"), MIC_3P="wep_skinset56_mat.neonrgb_hz12.NeonRGB_HZ12_3P_Mint_MIC", MIC_Pickup="wep_skinset56_mat.neonrgb_hz12.NeonRGB_HZ12_3P_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Neon RGB HRG Beluga Beat
|
||||||
|
Skins.Add((Id=9341, Weapondef=class'KFWeapDef_HRG_SonicGun', MIC_1P=("wep_skinset56_mat.neonrgb_hrgsonicgun.NeonRGB_HRGSonicGun_1P_Mint_MIC"), MIC_3P="wep_skinset56_mat.neonrgb_hrgsonicgun.NeonRGB_HRGSonicGun_3P_Mint_MIC", MIC_Pickup="wep_skinset56_mat.neonrgb_hrgsonicgun.NeonRGB_HRGSonicGun_3P_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Neon RGB Zweihander
|
||||||
|
Skins.Add((Id=9342, Weapondef=class'KFWeapDef_Zweihander', MIC_1P=("wep_skinset56_mat.neonrgb_zweihander.NeonRGB_Zweihander_1P_Mint_MIC"), MIC_3P="wep_skinset56_mat.neonrgb_zweihander.NeonRGB_Zweihander_3P_Mint_MIC", MIC_Pickup="wep_skinset56_mat.neonrgb_zweihander.NeonRGB_Zweihander_3P_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Classic Mint 9MM
|
||||||
|
Skins.Add((Id=9343, Weapondef=class'KFWeapDef_9mm', MIC_1P=("wep_skinset57_mat.classic_9mm.Classic_9MM_1P_Mint_MIC"), MIC_3P="wep_skinset57_mat.classic_9mm.Classic_9MM_3P_Mint_MIC", MIC_Pickup="wep_skinset57_mat.classic_9mm.Classic_9MM_3P_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Classic Mint AA12
|
||||||
|
Skins.Add((Id=9344, Weapondef=class'KFWeapDef_AA12', MIC_1P=("wep_skinset57_mat.classic_aa12.Classic_AA12_1P_Mint_MIC"), MIC_3P="wep_skinset57_mat.classic_aa12.Classic_AA12_3P_Mint_MIC", MIC_Pickup="wep_skinset57_mat.classic_aa12.Classic_AA12_3P_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Classic Mint Boomstick
|
||||||
|
Skins.Add((Id=9345, Weapondef=class'KFWeapDef_DoubleBarrel', MIC_1P=("wep_skinset57_mat.classic_doublebarrel.Classic_DoubleBarrel_1P_Mint_MIC"), MIC_3P="wep_skinset57_mat.classic_doublebarrel.Classic_DoubleBarrel_3P_Mint_MIC", MIC_Pickup="wep_skinset57_mat.classic_doublebarrel.Classic_DoubleBarrel_3P_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Classic Mint M1911
|
||||||
|
Skins.Add((Id=9346, Weapondef=class'KFWeapDef_Colt1911', MIC_1P=("wep_skinset57_mat.classic_m1911.Classic_M1911_1P_Mint_MIC"), MIC_3P="wep_skinset57_mat.classic_m1911.Classic_M1911_3P_Mint_MIC", MIC_Pickup="wep_skinset57_mat.classic_m1911.Classic_M1911_3P_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Classic Precious 9MM
|
||||||
|
Skins.Add((Id=9347, Weapondef=class'KFWeapDef_9mm', MIC_1P=("wep_skinset57_mat.standard_9mm.Standard_9MM_1P_Mint_MIC"), MIC_3P="wep_skinset57_mat.standard_9mm.Standard_9MM_3P_Mint_MIC", MIC_Pickup="wep_skinset57_mat.standard_9mm.Standard_9MM_3P_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Classic Precious AA12
|
||||||
|
Skins.Add((Id=9348, Weapondef=class'KFWeapDef_AA12', MIC_1P=("wep_skinset57_mat.standard_aa12.Standard_AA12_1P_Mint_MIC"), MIC_3P="wep_skinset57_mat.standard_aa12.Standard_AA12_3P_Mint_MIC", MIC_Pickup="wep_skinset57_mat.standard_aa12.Standard_AA12_3P_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Classic Precious Boomstick
|
||||||
|
Skins.Add((Id=9349, Weapondef=class'KFWeapDef_DoubleBarrel', MIC_1P=("wep_skinset57_mat.standard_doublebarrel.Standard_DoubleBarrel_1P_Mint_MIC"), MIC_3P="wep_skinset57_mat.standard_doublebarrel.Standard_DoubleBarrel_3P_Mint_MIC", MIC_Pickup="wep_skinset57_mat.standard_doublebarrel.Standard_DoubleBarrel_3P_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Classic Precious M1911
|
||||||
|
Skins.Add((Id=9350, Weapondef=class'KFWeapDef_Colt1911', MIC_1P=("wep_skinset57_mat.standard_m1911.Standard_M1911_1P_Mint_MIC"), MIC_3P="wep_skinset57_mat.standard_m1911.Standard_M1911_3P_Mint_MIC", MIC_Pickup="wep_skinset57_mat.standard_m1911.Standard_M1911_3P_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Chameleon Dynamic Desert Eagle
|
||||||
|
Skins.Add((Id=9351, bNeedsCodeUpdates = true, Weapondef=class'KFWeapDef_Deagle', MIC_1P=("wep_skinset58_mat.chameleon_deagle.Chameleon_Deagle_1P_Mint_MIC"), MIC_3P="WEP_SkinSet58_MAT.chameleon_deagle.Chameleon_Deagle_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet58_MAT.chameleon_deagle.Chameleon_Deagle_3P_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Chameleon Dynamic Katana
|
||||||
|
Skins.Add((Id=9352, bNeedsCodeUpdates = true, Weapondef=class'KFWeapDef_Katana', MIC_1P=("wep_skinset58_mat.chameleon_katana.Chameleon_Katana_1P_Mint_MIC"), MIC_3P="WEP_SkinSet58_MAT.chameleon_katana.Chameleon_Katana_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet58_MAT.chameleon_katana.Chameleon_Katana_3P_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Chameleon Dynamic Kriss SMG
|
||||||
|
Skins.Add((Id=9353, bNeedsCodeUpdates = true, Weapondef=class'KFWeapDef_Kriss', MIC_1P=("wep_skinset58_mat.chameleon_kriss.Chameleon_Kriss_1P_Mint_MIC", "wep_skinset58_mat.chameleon_kriss.Chameleon_Kriss_Scope_1P_Mint_MIC"), MIC_3P="WEP_SkinSet58_MAT.chameleon_kriss.Chameleon_Kriss_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet58_MAT.chameleon_kriss.Chameleon_Kriss_3P_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Chameleon Dynamic RPG-7
|
||||||
|
Skins.Add((Id=9354, bNeedsCodeUpdates = true, Weapondef=class'KFWeapDef_RPG7', MIC_1P=("wep_skinset58_mat.chameleon_rpg7.Chameleon_RPG7_1P_Mint_MIC"), MIC_3P="WEP_SkinSet58_MAT.chameleon_rpg7.Chameleon_RPG7_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet58_MAT.chameleon_rpg7.Chameleon_RPG7_3P_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Chameleon Dynamic RGB Desert Eagle
|
||||||
|
Skins.Add((Id=9355, bNeedsCodeUpdates = true, Weapondef=class'KFWeapDef_Deagle', MIC_1P=("wep_skinset58_mat.chameleonrgb_deagle.ChameleonRGB_Deagle_1P_Mint_MIC"), MIC_3P="WEP_SkinSet58_MAT.chameleonrgb_deagle.ChameleonRGB_Deagle_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet58_MAT.chameleonrgb_deagle.ChameleonRGB_Deagle_3P_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Chameleon Dynamic RGB Katana
|
||||||
|
Skins.Add((Id=9356, bNeedsCodeUpdates = true, Weapondef=class'KFWeapDef_Katana', MIC_1P=("wep_skinset58_mat.chameleonrgb_katana.ChameleonRGB_Katana_1P_Mint_MIC"), MIC_3P="WEP_SkinSet58_MAT.chameleonrgb_katana.ChameleonRGB_Katana_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet58_MAT.chameleonrgb_katana.ChameleonRGB_Katana_3P_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Chameleon Dynamic RGB Kriss SMG
|
||||||
|
Skins.Add((Id=9357, bNeedsCodeUpdates = true, Weapondef=class'KFWeapDef_Kriss', MIC_1P=("wep_skinset58_mat.chameleonrgb_kriss.ChameleonRGB_Kriss_1P_Mint_MIC", "wep_skinset58_mat.chameleonrgb_kriss.ChameleonRGB_Kriss_Scope_1P_Mint_MIC"), MIC_3P="WEP_SkinSet58_MAT.chameleonrgb_kriss.ChameleonRGB_Kriss_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet58_MAT.chameleonrgb_kriss.ChameleonRGB_Kriss_3P_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Chameleon Dynamic RGB RPG-7
|
||||||
|
Skins.Add((Id=9358, bNeedsCodeUpdates = true, Weapondef=class'KFWeapDef_RPG7', MIC_1P=("wep_skinset58_mat.chameleonrgb_rpg7.ChameleonRGB_RPG7_1P_Mint_MIC"), MIC_3P="WEP_SkinSet58_MAT.chameleonrgb_rpg7.ChameleonRGB_RPG7_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet58_MAT.chameleonrgb_rpg7.ChameleonRGB_RPG7_3P_Pickup_MIC"))
|
||||||
|
//Deep Sea Antique AA12
|
||||||
|
Skins.Add((Id=9298, bNeedsCodeUpdates = true, Weapondef=class'KFWeapDef_AA12', MIC_1P=("WEP_SkinSet59_MAT.deepsea_aa12.DeepSea_AA12_1P_Mint_MIC"), MIC_3P="WEP_SkinSet59_MAT.deepsea_aa12.DeepSea_AA12_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet59_MAT.deepsea_aa12.DeepSea_AA12_3P_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Deep Sea Aqua AA12
|
||||||
|
Skins.Add((Id=9299, bNeedsCodeUpdates = true, Weapondef=class'KFWeapDef_AA12', MIC_1P=("WEP_SkinSet59_MAT.deepsea_aa12.DeepSeaAqua_AA12_1P_Mint_MIC"), MIC_3P="WEP_SkinSet59_MAT.deepsea_aa12.DeepSeaAqua_AA12_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet59_MAT.deepsea_aa12.DeepSeaAqua_AA12_3P_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Deep Sea Coral AA12
|
||||||
|
Skins.Add((Id=9300, bNeedsCodeUpdates = true, Weapondef=class'KFWeapDef_AA12', MIC_1P=("WEP_SkinSet59_MAT.deepsea_aa12.DeepSeaCoral_AA12_1P_Mint_MIC"), MIC_3P="WEP_SkinSet59_MAT.deepsea_aa12.DeepSeaCoral_AA12_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet59_MAT.deepsea_aa12.DeepSeaCoral_AA12_3P_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Deep Sea Pearl AA12
|
||||||
|
Skins.Add((Id=9301, bNeedsCodeUpdates = true, Weapondef=class'KFWeapDef_AA12', MIC_1P=("WEP_SkinSet59_MAT.deepsea_aa12.DeepSeaPearl_AA12_1P_Mint_MIC"), MIC_3P="WEP_SkinSet59_MAT.deepsea_aa12.DeepSeaPearl_AA12_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet59_MAT.deepsea_aa12.DeepSeaPearl_AA12_3P_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Deep Sea Black Seal AA12
|
||||||
|
Skins.Add((Id=9302, bNeedsCodeUpdates = true, Weapondef=class'KFWeapDef_AA12', MIC_1P=("WEP_SkinSet59_MAT.deepsea_aa12.DeepSeaBlackSeal_AA12_1P_Mint_MIC"), MIC_3P="WEP_SkinSet59_MAT.deepsea_aa12.DeepSeaBlackSeal_AA12_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet59_MAT.deepsea_aa12.DeepSeaBlackSeal_AA12_3P_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Deep Sea Precious AA12
|
||||||
|
Skins.Add((Id=9303, bNeedsCodeUpdates = true, Weapondef=class'KFWeapDef_AA12', MIC_1P=("WEP_SkinSet59_MAT.deepsea_aa12.DeepSeaPrecious_AA12_1P_Mint_MIC"), MIC_3P="WEP_SkinSet59_MAT.deepsea_aa12.DeepSeaPrecious_AA12_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet59_MAT.deepsea_aa12.DeepSeaPrecious_AA12_3P_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Deep Sea Antique FN FAL
|
||||||
|
Skins.Add((Id=9304, bNeedsCodeUpdates = true, Weapondef=class'KFWeapDef_FNFAL', MIC_1P=("WEP_SkinSet59_MAT.deepsea_fnfal.DeepSea_FNFAL_1P_Mint_MIC", "WEP_SkinSet59_MAT.deepsea_fnfal.DeepSea_FNFAL_Scope_1P_Mint_MIC"), MIC_3P="WEP_SkinSet59_MAT.deepsea_fnfal.DeepSea_FNFAL_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet59_MAT.deepsea_fnfal.DeepSea_FNFAL_3P_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Deep Sea Aqua FN FAL
|
||||||
|
Skins.Add((Id=9305, bNeedsCodeUpdates = true, Weapondef=class'KFWeapDef_FNFAL', MIC_1P=("WEP_SkinSet59_MAT.deepsea_fnfal.DeepSeaAqua_FNFAL_1P_Mint_MIC", "WEP_SkinSet59_MAT.deepsea_fnfal.DeepSeaAqua_FNFAL_Scope_1P_Mint_MIC"), MIC_3P="WEP_SkinSet59_MAT.deepsea_fnfal.DeepSeaAqua_FNFAL_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet59_MAT.deepsea_fnfal.DeepSeaAqua_FNFAL_3P_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Deep Sea Coral FN FAL
|
||||||
|
Skins.Add((Id=9306, bNeedsCodeUpdates = true, Weapondef=class'KFWeapDef_FNFAL', MIC_1P=("WEP_SkinSet59_MAT.deepsea_fnfal.DeepSeaCoral_FNFAL_1P_Mint_MIC", "WEP_SkinSet59_MAT.deepsea_fnfal.DeepSeaCoral_FNFAL_Scope_1P_Mint_MIC"), MIC_3P="WEP_SkinSet59_MAT.deepsea_fnfal.DeepSeaCoral_FNFAL_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet59_MAT.deepsea_fnfal.DeepSeaCoral_FNFAL_3P_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Deep Sea Pearl FN FAL
|
||||||
|
Skins.Add((Id=9307, bNeedsCodeUpdates = true, Weapondef=class'KFWeapDef_FNFAL', MIC_1P=("WEP_SkinSet59_MAT.deepsea_fnfal.DeepSeaPearl_FNFAL_1P_Mint_MIC", "WEP_SkinSet59_MAT.deepsea_fnfal.DeepSeaPearl_FNFAL_Scope_1P_Mint_MIC"), MIC_3P="WEP_SkinSet59_MAT.deepsea_fnfal.DeepSeaPearl_FNFAL_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet59_MAT.deepsea_fnfal.DeepSeaPearl_FNFAL_3P_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Deep Sea Black Seal FN FAL
|
||||||
|
Skins.Add((Id=9308, bNeedsCodeUpdates = true, Weapondef=class'KFWeapDef_FNFAL', MIC_1P=("WEP_SkinSet59_MAT.deepsea_fnfal.DeepSeaBlackSeal_FNFAL_1P_Mint_MIC", "WEP_SkinSet59_MAT.deepsea_fnfal.DeepSeaBlackSeal_FNFAL_Scope_1P_Mint_MIC"), MIC_3P="WEP_SkinSet59_MAT.deepsea_fnfal.DeepSeaBlackSeal_FNFAL_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet59_MAT.deepsea_fnfal.DeepSeaBlackSeal_FNFAL_3P_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Deep Sea Precious FN FAL
|
||||||
|
Skins.Add((Id=9309, bNeedsCodeUpdates = true, Weapondef=class'KFWeapDef_FNFAL', MIC_1P=("WEP_SkinSet59_MAT.deepsea_fnfal.DeepSeaPrecious_FNFAL_1P_Mint_MIC", "WEP_SkinSet59_MAT.deepsea_fnfal.DeepSeaPrecious_FNFAL_Scope_1P_Mint_MIC"), MIC_3P="WEP_SkinSet59_MAT.deepsea_fnfal.DeepSeaPrecious_FNFAL_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet59_MAT.deepsea_fnfal.DeepSeaPrecious_FNFAL_3P_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Deep Sea Antique M14EBR
|
||||||
|
Skins.Add((Id=9310, bNeedsCodeUpdates = true, Weapondef=class'KFWeapDef_M14EBR', MIC_1P=("WEP_SkinSet59_MAT.deepsea_m14ebr.DeepSea_M14EBR_1P_Mint_MIC", "WEP_SkinSet59_MAT.deepsea_m14ebr.DeepSea_M14EBR_Scope_1P_Mint_MIC"), MIC_3P="WEP_SkinSet59_MAT.deepsea_m14ebr.DeepSea_M14EBR_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet59_MAT.deepsea_m14ebr.DeepSea_M14EBR_3P_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Deep Sea Aqua M14EBR
|
||||||
|
Skins.Add((Id=9311, bNeedsCodeUpdates = true, Weapondef=class'KFWeapDef_M14EBR', MIC_1P=("WEP_SkinSet59_MAT.deepsea_m14ebr.DeepSeaAqua_M14EBR_1P_Mint_MIC", "WEP_SkinSet59_MAT.deepsea_m14ebr.DeepSeaAqua_M14EBR_Scope_1P_Mint_MIC"), MIC_3P="WEP_SkinSet59_MAT.deepsea_m14ebr.DeepSeaAqua_M14EBR_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet59_MAT.deepsea_m14ebr.DeepSeaAqua_M14EBR_3P_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Deep Sea Coral M14EBR
|
||||||
|
Skins.Add((Id=9312, bNeedsCodeUpdates = true, Weapondef=class'KFWeapDef_M14EBR', MIC_1P=("WEP_SkinSet59_MAT.deepsea_m14ebr.DeepSeaCoral_M14EBR_1P_Mint_MIC", "WEP_SkinSet59_MAT.deepsea_m14ebr.DeepSeaCoral_M14EBR_Scope_1P_Mint_MIC"), MIC_3P="WEP_SkinSet59_MAT.deepsea_m14ebr.DeepSeaCoral_M14EBR_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet59_MAT.deepsea_m14ebr.DeepSeaCoral_M14EBR_3P_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Deep Sea Pearl M14EBR
|
||||||
|
Skins.Add((Id=9313, bNeedsCodeUpdates = true, Weapondef=class'KFWeapDef_M14EBR', MIC_1P=("WEP_SkinSet59_MAT.deepsea_m14ebr.DeepSeaPearl_M14EBR_1P_Mint_MIC", "WEP_SkinSet59_MAT.deepsea_m14ebr.DeepSeaPearl_M14EBR_Scope_1P_Mint_MIC"), MIC_3P="WEP_SkinSet59_MAT.deepsea_m14ebr.DeepSeaPearl_M14EBR_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet59_MAT.deepsea_m14ebr.DeepSeaPearl_M14EBR_3P_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Deep Sea Black Seal M14EBR
|
||||||
|
Skins.Add((Id=9314, bNeedsCodeUpdates = true, Weapondef=class'KFWeapDef_M14EBR', MIC_1P=("WEP_SkinSet59_MAT.deepsea_m14ebr.DeepSeaBlackSeal_M14EBR_1P_Mint_MIC", "WEP_SkinSet59_MAT.deepsea_m14ebr.DeepSeaBlackSeal_M14EBR_Scope_1P_Mint_MIC"), MIC_3P="WEP_SkinSet59_MAT.deepsea_m14ebr.DeepSeaBlackSeal_M14EBR_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet59_MAT.deepsea_m14ebr.DeepSeaBlackSeal_M14EBR_3P_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Deep Sea Precious M14EBR
|
||||||
|
Skins.Add((Id=9315, bNeedsCodeUpdates = true, Weapondef=class'KFWeapDef_M14EBR', MIC_1P=("WEP_SkinSet59_MAT.deepsea_m14ebr.DeepSeaPrecious_M14EBR_1P_Mint_MIC", "WEP_SkinSet59_MAT.deepsea_m14ebr.DeepSeaPrecious_M14EBR_Scope_1P_Mint_MIC"), MIC_3P="WEP_SkinSet59_MAT.deepsea_m14ebr.DeepSeaPrecious_M14EBR_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet59_MAT.deepsea_m14ebr.DeepSeaPrecious_M14EBR_3P_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Deep Sea Antique MAC 10
|
||||||
|
Skins.Add((Id=9316, bNeedsCodeUpdates = true, Weapondef=class'KFWeapDef_Mac10', MIC_1P=("WEP_SkinSet59_MAT.deepsea_mac10.DeepSea_MAC10_1P_Mint_MIC"), MIC_3P="WEP_SkinSet59_MAT.deepsea_mac10.DeepSea_MAC10_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet59_MAT.deepsea_mac10.DeepSea_MAC10_3P_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Deep Sea Aqua MAC 10
|
||||||
|
Skins.Add((Id=9317, bNeedsCodeUpdates = true, Weapondef=class'KFWeapDef_Mac10', MIC_1P=("WEP_SkinSet59_MAT.deepsea_mac10.DeepSeaAqua_MAC10_1P_Mint_MIC"), MIC_3P="WEP_SkinSet59_MAT.deepsea_mac10.DeepSeaAqua_MAC10_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet59_MAT.deepsea_mac10.DeepSeaAqua_MAC10_3P_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Deep Sea Coral MAC 10
|
||||||
|
Skins.Add((Id=9318, bNeedsCodeUpdates = true, Weapondef=class'KFWeapDef_Mac10', MIC_1P=("WEP_SkinSet59_MAT.deepsea_mac10.DeepSeaCoral_MAC10_1P_Mint_MIC"), MIC_3P="WEP_SkinSet59_MAT.deepsea_mac10.DeepSeaCoral_MAC10_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet59_MAT.deepsea_mac10.DeepSeaCoral_MAC10_3P_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Deep Sea Pearl MAC 10
|
||||||
|
Skins.Add((Id=9319, bNeedsCodeUpdates = true, Weapondef=class'KFWeapDef_Mac10', MIC_1P=("WEP_SkinSet59_MAT.deepsea_mac10.DeepSeaPearl_MAC10_1P_Mint_MIC"), MIC_3P="WEP_SkinSet59_MAT.deepsea_mac10.DeepSeaPearl_MAC10_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet59_MAT.deepsea_mac10.DeepSeaPearl_MAC10_3P_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Deep Sea Black Seal MAC 10
|
||||||
|
Skins.Add((Id=9320, bNeedsCodeUpdates = true, Weapondef=class'KFWeapDef_Mac10', MIC_1P=("WEP_SkinSet59_MAT.deepsea_mac10.DeepSeaBlackSeal_MAC10_1P_Mint_MIC"), MIC_3P="WEP_SkinSet59_MAT.deepsea_mac10.DeepSeaBlackSeal_MAC10_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet59_MAT.deepsea_mac10.DeepSeaBlackSeal_MAC10_3P_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Deep Sea Precious MAC 10
|
||||||
|
Skins.Add((Id=9321, bNeedsCodeUpdates = true, Weapondef=class'KFWeapDef_Mac10', MIC_1P=("WEP_SkinSet59_MAT.deepsea_mac10.DeepSeaPrecious_MAC10_1P_Mint_MIC"), MIC_3P="WEP_SkinSet59_MAT.deepsea_mac10.DeepSeaPrecious_MAC10_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet59_MAT.deepsea_mac10.DeepSeaPrecious_MAC10_3P_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Deep Sea Antique MP5RAS
|
||||||
|
Skins.Add((Id=9322, bNeedsCodeUpdates = true, Weapondef=class'KFWeapDef_MP5RAS', MIC_1P=("WEP_SkinSet59_MAT.deepsea_mp5ras.DeepSea_MP5RAS_1P_Mint_MIC"), MIC_3P="WEP_SkinSet59_MAT.deepsea_mp5ras.DeepSea_MP5RAS_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet59_MAT.deepsea_mp5ras.DeepSea_MP5RAS_3P_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Deep Sea Aqua MP5RAS
|
||||||
|
Skins.Add((Id=9323, bNeedsCodeUpdates = true, Weapondef=class'KFWeapDef_MP5RAS', MIC_1P=("WEP_SkinSet59_MAT.deepsea_mp5ras.DeepSeaAqua_MP5RAS_1P_Mint_MIC"), MIC_3P="WEP_SkinSet59_MAT.deepsea_mp5ras.DeepSeaAqua_MP5RAS_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet59_MAT.deepsea_mp5ras.DeepSeaAqua_MP5RAS_3P_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Deep Sea Coral MP5RAS
|
||||||
|
Skins.Add((Id=9324, bNeedsCodeUpdates = true, Weapondef=class'KFWeapDef_MP5RAS', MIC_1P=("WEP_SkinSet59_MAT.deepsea_mp5ras.DeepSeaCoral_MP5RAS_1P_Mint_MIC"), MIC_3P="WEP_SkinSet59_MAT.deepsea_mp5ras.DeepSeaCoral_MP5RAS_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet59_MAT.deepsea_mp5ras.DeepSeaCoral_MP5RAS_3P_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Deep Sea Pearl MP5RAS
|
||||||
|
Skins.Add((Id=9325, bNeedsCodeUpdates = true, Weapondef=class'KFWeapDef_MP5RAS', MIC_1P=("WEP_SkinSet59_MAT.deepsea_mp5ras.DeepSeaPearl_MP5RAS_1P_Mint_MIC"), MIC_3P="WEP_SkinSet59_MAT.deepsea_mp5ras.DeepSeaPearl_MP5RAS_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet59_MAT.deepsea_mp5ras.DeepSeaPearl_MP5RAS_3P_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Deep Sea Black Seal MP5RAS
|
||||||
|
Skins.Add((Id=9326, bNeedsCodeUpdates = true, Weapondef=class'KFWeapDef_MP5RAS', MIC_1P=("WEP_SkinSet59_MAT.deepsea_mp5ras.DeepSeaBlackSeal_MP5RAS_1P_Mint_MIC"), MIC_3P="WEP_SkinSet59_MAT.deepsea_mp5ras.DeepSeaBlackSeal_MP5RAS_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet59_MAT.deepsea_mp5ras.DeepSeaBlackSeal_MP5RAS_3P_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Deep Sea Precious MP5RAS
|
||||||
|
Skins.Add((Id=9327, bNeedsCodeUpdates = true, Weapondef=class'KFWeapDef_MP5RAS', MIC_1P=("WEP_SkinSet59_MAT.deepsea_mp5ras.DeepSeaPrecious_MP5RAS_1P_Mint_MIC"), MIC_3P="WEP_SkinSet59_MAT.deepsea_mp5ras.DeepSeaPrecious_MP5RAS_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet59_MAT.deepsea_mp5ras.DeepSeaPrecious_MP5RAS_3P_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Deep Sea Antique RPG-7
|
||||||
|
Skins.Add((Id=9328, bNeedsCodeUpdates = true, Weapondef=class'KFWeapDef_RPG7', MIC_1P=("WEP_SkinSet59_MAT.deepsea_rpg7.DeepSea_RPG7_1P_Mint_MIC"), MIC_3P="WEP_SkinSet59_MAT.deepsea_rpg7.DeepSea_RPG7_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet59_MAT.deepsea_rpg7.DeepSea_RPG7_3P_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Deep Sea Aqua RPG-7
|
||||||
|
Skins.Add((Id=9329, bNeedsCodeUpdates = true, Weapondef=class'KFWeapDef_RPG7', MIC_1P=("WEP_SkinSet59_MAT.deepsea_rpg7.DeepSeaAqua_RPG7_1P_Mint_MIC"), MIC_3P="WEP_SkinSet59_MAT.deepsea_rpg7.DeepSeaAqua_RPG7_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet59_MAT.deepsea_rpg7.DeepSeaAqua_RPG7_3P_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Deep Sea Coral RPG-7
|
||||||
|
Skins.Add((Id=9330, bNeedsCodeUpdates = true, Weapondef=class'KFWeapDef_RPG7', MIC_1P=("WEP_SkinSet59_MAT.deepsea_rpg7.DeepSeaCoral_RPG7_1P_Mint_MIC"), MIC_3P="WEP_SkinSet59_MAT.deepsea_rpg7.DeepSeaCoral_RPG7_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet59_MAT.deepsea_rpg7.DeepSeaCoral_RPG7_3P_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Deep Sea Pearl RPG-7
|
||||||
|
Skins.Add((Id=9331, bNeedsCodeUpdates = true, Weapondef=class'KFWeapDef_RPG7', MIC_1P=("WEP_SkinSet59_MAT.deepsea_rpg7.DeepSeaPearl_RPG7_1P_Mint_MIC"), MIC_3P="WEP_SkinSet59_MAT.deepsea_rpg7.DeepSeaPearl_RPG7_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet59_MAT.deepsea_rpg7.DeepSeaPearl_RPG7_3P_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Deep Sea Black Seal RPG-7
|
||||||
|
Skins.Add((Id=9332, bNeedsCodeUpdates = true, Weapondef=class'KFWeapDef_RPG7', MIC_1P=("WEP_SkinSet59_MAT.deepsea_rpg7.DeepSeaBlackSeal_RPG7_1P_Mint_MIC"), MIC_3P="WEP_SkinSet59_MAT.deepsea_rpg7.DeepSeaBlackSeal_RPG7_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet59_MAT.deepsea_rpg7.DeepSeaBlackSeal_RPG7_3P_Pickup_MIC"))
|
||||||
|
|
||||||
|
//Deep Sea Precious RPG-7
|
||||||
|
Skins.Add((Id=9333, bNeedsCodeUpdates = true, Weapondef=class'KFWeapDef_RPG7', MIC_1P=("WEP_SkinSet59_MAT.deepsea_rpg7.DeepSeaPrecious_RPG7_1P_Mint_MIC"), MIC_3P="WEP_SkinSet59_MAT.deepsea_rpg7.DeepSeaPrecious_RPG7_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet59_MAT.deepsea_rpg7.DeepSeaPrecious_RPG7_3P_Pickup_MIC"))
|
||||||
}
|
}
|
@ -27,7 +27,7 @@ var localized array<string> ModifierDescriptions;
|
|||||||
cpptext
|
cpptext
|
||||||
{
|
{
|
||||||
/** Num of Weekly events available */
|
/** Num of Weekly events available */
|
||||||
static const int NumWeeklyEvents = 16;
|
static const int NumWeeklyEvents = 17;
|
||||||
}
|
}
|
||||||
DefaultProperties
|
DefaultProperties
|
||||||
{
|
{
|
||||||
|
@ -156,4 +156,5 @@ const STATID_ACHIEVE_Dystopia2029Collectibles = 4058;
|
|||||||
const STATID_ACHIEVE_MoonbaseCollectibles = 4059;
|
const STATID_ACHIEVE_MoonbaseCollectibles = 4059;
|
||||||
const STATID_ACHIEVE_NetherholdCollectibles = 4060;
|
const STATID_ACHIEVE_NetherholdCollectibles = 4060;
|
||||||
const STATID_ACHIEVE_CarillonHamletCollectibles = 4061;
|
const STATID_ACHIEVE_CarillonHamletCollectibles = 4061;
|
||||||
|
const STATID_ACHIEVE_RigCollectibles = 4062;
|
||||||
/** `endif */
|
/** `endif */
|
||||||
|
@ -74,3 +74,5 @@ const KFID_GamepadDeadzoneScale = 175;
|
|||||||
const KFID_GamepadAccelerationJumpScale = 176;
|
const KFID_GamepadAccelerationJumpScale = 176;
|
||||||
const KFID_HasTabbedToStore = 177;
|
const KFID_HasTabbedToStore = 177;
|
||||||
const KFID_AllowSwapTo9mm = 178; // Halloween 2021 QoL: added option to quick switch weapons to 9mm
|
const KFID_AllowSwapTo9mm = 178; // Halloween 2021 QoL: added option to quick switch weapons to 9mm
|
||||||
|
const KFID_SurvivalStartingWeapIdx=179; // Summer 2022 QoL: added option to choose starting weapon for survival perk
|
||||||
|
const KFID_SurvivalStartingGrenIdx=180; // Summer 2022 QoL: added option to choose starting grenade for survival perk
|
||||||
|
27
KFGameContent/Classes/KFDT_Ballistic_AutoTurret.uc
Normal file
27
KFGameContent/Classes/KFDT_Ballistic_AutoTurret.uc
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
//=============================================================================
|
||||||
|
// KFDT_Ballistic_AutoTurret
|
||||||
|
//=============================================================================
|
||||||
|
// Class Description
|
||||||
|
//=============================================================================
|
||||||
|
// Killing Floor 2
|
||||||
|
// Copyright (C) 2022 Tripwire Interactive LLC
|
||||||
|
//=============================================================================
|
||||||
|
|
||||||
|
class KFDT_Ballistic_AutoTurret extends KFDT_Ballistic_AssaultRifle
|
||||||
|
abstract
|
||||||
|
hidedropdown;
|
||||||
|
|
||||||
|
defaultproperties
|
||||||
|
{
|
||||||
|
KDamageImpulse=900
|
||||||
|
KDeathUpKick=-300
|
||||||
|
KDeathVel=100
|
||||||
|
|
||||||
|
StumblePower=5
|
||||||
|
GunHitPower=0
|
||||||
|
|
||||||
|
WeaponDef=class'KFWeapDef_AutoTurret'
|
||||||
|
|
||||||
|
//Perk
|
||||||
|
ModifierPerkList(0)=class'KFPerk_Commando'
|
||||||
|
}
|
67
KFGameContent/Classes/KFDT_Blast_HRG_CranialPopper.uc
Normal file
67
KFGameContent/Classes/KFDT_Blast_HRG_CranialPopper.uc
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
//=============================================================================
|
||||||
|
// KFDT_Blast_HRG_CranialPopper
|
||||||
|
//=============================================================================
|
||||||
|
// Damage caused by the cranial popper alternate fire
|
||||||
|
//=============================================================================
|
||||||
|
// Killing Floor 2
|
||||||
|
// Copyright (C) 2021 Tripwire Interactive LLC
|
||||||
|
//=============================================================================
|
||||||
|
|
||||||
|
class KFDT_Blast_HRG_CranialPopper extends KFDT_Ballistic_Rifle
|
||||||
|
abstract
|
||||||
|
hidedropdown;
|
||||||
|
|
||||||
|
|
||||||
|
static simulated function bool CanDismemberHitZone( name InHitZoneName )
|
||||||
|
{
|
||||||
|
switch ( InHitZoneName )
|
||||||
|
{
|
||||||
|
case 'head':
|
||||||
|
return false; //true to dismember
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Allows the damage type to customize exactly which hit zones it can dismember while the zed is alive
|
||||||
|
*/
|
||||||
|
//static simulated function bool CanDismemberHitZoneWhileAlive(name InHitZoneName)
|
||||||
|
//{
|
||||||
|
// switch ( InHitZoneName )
|
||||||
|
// {
|
||||||
|
// case 'head':
|
||||||
|
// return true;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// return false;
|
||||||
|
//}
|
||||||
|
|
||||||
|
|
||||||
|
DefaultProperties
|
||||||
|
{
|
||||||
|
// This weapon uses radial impulses
|
||||||
|
RadialDamageImpulse=1500
|
||||||
|
KDamageImpulse=0
|
||||||
|
KDeathUpKick=500.0
|
||||||
|
KDeathVel=300
|
||||||
|
|
||||||
|
// unreal physics momentum
|
||||||
|
bExtraMomentumZ=True
|
||||||
|
|
||||||
|
KnockdownPower=0
|
||||||
|
StunPower=250
|
||||||
|
StumblePower=0
|
||||||
|
GunHitPower=0
|
||||||
|
MeleeHitPower=0
|
||||||
|
EMPPower=0
|
||||||
|
|
||||||
|
//bCanObliterate=true
|
||||||
|
//ObliterationHealthThreshold=-75
|
||||||
|
//ObliterationDamageThreshold=100
|
||||||
|
bCanGib=true
|
||||||
|
GoreDamageGroup=DGT_Obliteration
|
||||||
|
|
||||||
|
WeaponDef=class'KFWeapDef_HRG_CranialPopper'
|
||||||
|
ModifierPerkList(0)=class'KFPerk_Sharpshooter'
|
||||||
|
}
|
16
KFGameContent/Classes/KFDT_Bludgeon_AutoTurret.uc
Normal file
16
KFGameContent/Classes/KFDT_Bludgeon_AutoTurret.uc
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
//=============================================================================
|
||||||
|
// KFDT_Bludgeon_AutoTurret
|
||||||
|
//=============================================================================
|
||||||
|
// Killing Floor 2
|
||||||
|
// Copyright (C) 2022 Tripwire Interactive LLC
|
||||||
|
//=============================================================================
|
||||||
|
|
||||||
|
class KFDT_Bludgeon_AutoTurret extends KFDT_Bludgeon_RifleButt
|
||||||
|
abstract
|
||||||
|
hidedropdown;
|
||||||
|
|
||||||
|
DefaultProperties
|
||||||
|
{
|
||||||
|
//defaults
|
||||||
|
WeaponDef=class'KFWeapDef_AutoTurret'
|
||||||
|
}
|
16
KFGameContent/Classes/KFDT_Bludgeon_HRG_CranialPopper.uc
Normal file
16
KFGameContent/Classes/KFDT_Bludgeon_HRG_CranialPopper.uc
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
//=============================================================================
|
||||||
|
// KFDT_Bludgeon_HRG_CranialPopper
|
||||||
|
//=============================================================================
|
||||||
|
// Killing Floor 2
|
||||||
|
// Copyright (C) 2022 Tripwire Interactive LLC
|
||||||
|
//=============================================================================
|
||||||
|
|
||||||
|
class KFDT_Bludgeon_HRG_CranialPopper extends KFDT_Bludgeon_RifleButt
|
||||||
|
abstract
|
||||||
|
hidedropdown;
|
||||||
|
|
||||||
|
DefaultProperties
|
||||||
|
{
|
||||||
|
//defaults
|
||||||
|
WeaponDef=class'KFWeapDef_HRG_CranialPopper'
|
||||||
|
}
|
16
KFGameContent/Classes/KFDT_Bludgeon_HRG_Crossboom.uc
Normal file
16
KFGameContent/Classes/KFDT_Bludgeon_HRG_Crossboom.uc
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
//=============================================================================
|
||||||
|
// KFDT_Bludgeon_HRG_Crossboom
|
||||||
|
//=============================================================================
|
||||||
|
// Killing Floor 2
|
||||||
|
// Copyright (C) 2022 Tripwire Interactive LLC
|
||||||
|
//=============================================================================
|
||||||
|
|
||||||
|
class KFDT_Bludgeon_HRG_Crossboom extends KFDT_Bludgeon_RifleButt
|
||||||
|
abstract
|
||||||
|
hidedropdown;
|
||||||
|
|
||||||
|
DefaultProperties
|
||||||
|
{
|
||||||
|
//defaults
|
||||||
|
WeaponDef=class'KFWeapDef_HRG_Crossboom'
|
||||||
|
}
|
16
KFGameContent/Classes/KFDT_Bludgeon_ShrinkRay.uc
Normal file
16
KFGameContent/Classes/KFDT_Bludgeon_ShrinkRay.uc
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
//=============================================================================
|
||||||
|
// KFDT_Bludgeon_Flamethrower
|
||||||
|
//=============================================================================
|
||||||
|
// Killing Floor 2
|
||||||
|
// Copyright (C) 2015 Tripwire Interactive LLC
|
||||||
|
//=============================================================================
|
||||||
|
|
||||||
|
class KFDT_Bludgeon_ShrinkRay extends KFDT_Bludgeon_RifleButt
|
||||||
|
abstract
|
||||||
|
hidedropdown;
|
||||||
|
|
||||||
|
DefaultProperties
|
||||||
|
{
|
||||||
|
//defaults
|
||||||
|
WeaponDef=class'KFWeapDef_ShrinkRayGun'
|
||||||
|
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user