upload
This commit is contained in:
@ -9,6 +9,8 @@
|
||||
class KFAfflictionManager extends Object within KFPawn
|
||||
native(Pawn);
|
||||
|
||||
const STUN_GUARANTEED_POWER = 10000.f;
|
||||
|
||||
/** Abstracted body parts that can be associated with multiple zones */
|
||||
enum EHitZoneBodyPart
|
||||
{
|
||||
@ -246,11 +248,12 @@ protected function ProcessSpecialMoveAfflictions(KFPerk InstigatorPerk, vector H
|
||||
StumblePower *= StumbleModifier;
|
||||
StunPower *= StunModifier;
|
||||
|
||||
// [FFERRANDO @ SABER3D] INCAP MASTER NOW MODIFIES THE STUN POWER BY SETTING IT TO THE GIVEN VALUE
|
||||
if (InstigatorPerk != None && InstigatorPerk.GetIncapMasterActive())
|
||||
// [RMORENO @ SABER3D] //Overriding stun power with a High number so we can assure the stun independently of weapon, Zed resistances, body part hit. This does NOT ignores other factors like cooldowns.
|
||||
if (InstigatorPerk != None && InstigatorPerk.IsStunGuaranteed( DamageType, HitZoneIdx ))
|
||||
{
|
||||
StunPower += InstigatorPerk.GetStunPowerModifier( DamageType, HitZoneIdx );
|
||||
StunPower = STUN_GUARANTEED_POWER;
|
||||
}
|
||||
|
||||
// increment affliction power
|
||||
if (KnockdownPower > 0 && CanDoSpecialmove(SM_Knockdown))
|
||||
{
|
||||
|
@ -310,7 +310,7 @@ simulated function SetCharacterMeshFromArch( KFPawn KFP, optional KFPlayerReplic
|
||||
{
|
||||
local int AttachmentIdx, CosmeticMeshIdx;
|
||||
local bool bMaskHeadMesh;
|
||||
local int NumberOfCosmetics, NumberOfCosmeticsPostRemoval;
|
||||
//local int NumberOfCosmetics, NumberOfCosmeticsPostRemoval;
|
||||
|
||||
super.SetCharacterMeshFromArch( KFP, KFPRI );
|
||||
|
||||
@ -356,7 +356,7 @@ simulated function SetCharacterMeshFromArch( KFPawn KFP, optional KFPlayerReplic
|
||||
CosmeticMeshIdx = KFPRI.RepCustomizationInfo.AttachmentMeshIndices[AttachmentIdx];
|
||||
if ( CosmeticMeshIdx != `CLEARED_ATTACHMENT_INDEX && CosmeticMeshIdx != INDEX_NONE)
|
||||
{
|
||||
NumberOfCosmetics++;
|
||||
//NumberOfCosmetics++;
|
||||
bMaskHeadMesh = bMaskHeadMesh || CosmeticVariants[CosmeticMeshIdx].bMaskHeadMesh;
|
||||
|
||||
// Attach all saved attachments to the character
|
||||
@ -878,7 +878,7 @@ private function SetAttachmentMeshAndSkin(
|
||||
* Removes any attachments that exist in the same socket or have overriding cases
|
||||
* Network: Local Player
|
||||
*/
|
||||
function array<int> DetachConflictingAttachments(int NewAttachmentMeshIndex, KFPawn KFP, optional KFPlayerReplicationInfo KFPRI, optional out array<int> out_RemovedAttachments )
|
||||
function DetachConflictingAttachments(int NewAttachmentMeshIndex, KFPawn KFP, optional KFPlayerReplicationInfo KFPRI, optional out array<int> out_RemovedAttachments )
|
||||
{
|
||||
local name NewAttachmentSocketName;
|
||||
local int i, CurrentAttachmentIdx;
|
||||
|
@ -929,6 +929,15 @@ simulated exec function Vampire()
|
||||
GiveWeapon( "KFGameContent.KFWeap_HRG_Vampire" );
|
||||
}
|
||||
|
||||
/**
|
||||
* Give the player the HRG SonicGun
|
||||
*/
|
||||
simulated exec function SonicGun()
|
||||
{
|
||||
GiveWeapon( "KFGameContent.KFWeap_HRG_SonicGun" );
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Give the player all pistol weapons
|
||||
*/
|
||||
@ -1177,6 +1186,7 @@ exec function Surv()
|
||||
GiveWeapon( "KFGameContent.KFWeap_HRG_EMP_ArcGenerator" );
|
||||
GiveWeapon( "KFGameContent.KFWeap_Ice_FreezeThrower" );
|
||||
GiveWeapon( "KFGameContent.KFWeap_AssaultRifle_LazerCutter" );
|
||||
GiveWeapon( "KFGameContent.KFWeap_HRG_SonicGun" );
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -0,0 +1,27 @@
|
||||
class KFGFxSpecialEventObjectivesContainer_Spring2021 extends KFGFxSpecialEventObjectivesContainer;
|
||||
|
||||
function Initialize(KFGFxObject_Menu NewParentMenu)
|
||||
{
|
||||
super.Initialize(NewParentMenu);
|
||||
}
|
||||
|
||||
DefaultProperties
|
||||
{
|
||||
ObjectiveIconURLs[0] = "Spring2021_UI.UI_Objectives_Spring2021_Cyber_Threat" // Kill 15 Bosses on any map or mode
|
||||
ObjectiveIconURLs[1] = "Spring2021_UI.UI_Objectives_Spring2021_Weekly_Hack" // Complete the Weekly on Dystopia 2029
|
||||
ObjectiveIconURLs[2] = "Spring2021_UI.UI_Objectives_Spring2021_AI_Out_of_Control" // Kill 100 E.D.A.R.s on Dystopia 2029
|
||||
ObjectiveIconURLs[3] = "Spring2021_UI.UI_Objectives_Spring2021_Not_a_Simulation" // Complete a wave without taking any damage 10 times on Dystopia 2029
|
||||
ObjectiveIconURLs[4] = "Spring2021_UI.UI_Objectives_Spring2021_Zed_World" // Complete wave 15 on Endless Hard or higher difficulty on Dystopia 2029
|
||||
|
||||
//defaults
|
||||
AllCompleteRewardIconURL="CHR_CosmeticSet_Spring_01_Item_TEX.cyborg_companionbackpack.cyborgcompanionbackpack_precious"
|
||||
ChanceDropIconURLs[0]="CHR_CosmeticSet14_Item_TEX.Tickets.CyberPunk_ticket"
|
||||
ChanceDropIconURLs[1]="CHR_CosmeticSet14_Item_TEX.Tickets.CyberPunk_ticket_golden"
|
||||
IconURL="Spring2021_UI.KF2_Spring_DystopianDevastation_SmallLogo"
|
||||
|
||||
UsesProgressList[0] = true
|
||||
UsesProgressList[1] = false
|
||||
UsesProgressList[2] = true
|
||||
UsesProgressList[3] = true
|
||||
UsesProgressList[4] = false
|
||||
}
|
@ -12,6 +12,7 @@ class KFGFxHUD_PlayerStatus extends GFxObject;
|
||||
|
||||
/** Cached KFPlayerController */
|
||||
var KFPlayerController MyPC;
|
||||
var KFGameReplicationinfo KFGRI;
|
||||
var KFPawn_Human MyHumanPawn;
|
||||
var KFInventoryManager MyInventoryManager;
|
||||
// Player's perk type as of the last tick.
|
||||
@ -46,6 +47,7 @@ function TickHud(float DeltaTime)
|
||||
UpdateHealth();
|
||||
UpdateArmor();
|
||||
UpdateHealer();
|
||||
UpdateGlobalDamage();
|
||||
}
|
||||
|
||||
function ShowActiveIndicators( array<string> IconPathStrings )
|
||||
@ -213,6 +215,18 @@ function ShowXPBark( int DeltaXP, string iconPath, bool bIsCurrentPerk )
|
||||
ActionScriptVoid("showXPBark");
|
||||
}
|
||||
|
||||
function UpdateGlobalDamage()
|
||||
{
|
||||
if(KFGRI == none)
|
||||
{
|
||||
KFGRI = KFGameReplicationInfo(GetPC().WorldInfo.GRI);
|
||||
}
|
||||
else
|
||||
{
|
||||
SetBool("waveApplyingDamage", KFGRI.IsGlobalDamage());
|
||||
}
|
||||
}
|
||||
|
||||
DefaultProperties
|
||||
{
|
||||
|
||||
|
@ -12,6 +12,7 @@ class KFGFxHUD_WaveInfo extends GFxObject;
|
||||
|
||||
/** Cached KFPlayerController */
|
||||
var KFGameReplicationinfo KFGRI;
|
||||
|
||||
//
|
||||
var int LastWaveMax;
|
||||
//
|
||||
@ -50,10 +51,10 @@ function TickHud(float DeltaTime)
|
||||
{
|
||||
if (KFGRI.bWaveIsActive && !KFGRI.bWaveStarted)
|
||||
{
|
||||
SetString("waitingForWaveStart", "-----");
|
||||
SetString("waitingForWaveStart", "-----");
|
||||
}
|
||||
else if (!KFGRI.bWaveIsActive)
|
||||
{
|
||||
{
|
||||
UpdateTraderTimeRemaining();
|
||||
}
|
||||
else
|
||||
@ -82,7 +83,6 @@ function UpdateWaveCount()
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
// Max # of waves.
|
||||
CurrentWaveMax = KFGRI.GetFinalWaveNum();
|
||||
if(LastWaveMax != CurrentWaveMax)
|
||||
@ -156,7 +156,6 @@ function UpdateTraderTimeRemaining()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DefaultProperties
|
||||
{
|
||||
LastTraderTimeRemaining=0
|
||||
|
@ -697,7 +697,6 @@ private function Callback_AttachmentNumbered(int MeshIndex, int SkinIndex, int S
|
||||
{
|
||||
local Pawn P;
|
||||
local KFPawn KFP;
|
||||
local int i;
|
||||
local array<int> RemovedAttachments;
|
||||
P = GetPC().Pawn;
|
||||
if( P != none )
|
||||
|
@ -224,8 +224,18 @@ function bool IsMatchStarted()
|
||||
|
||||
function PerkChanged( byte NewPerkIndex, bool bClickedIndex)
|
||||
{
|
||||
local KFGameReplicationInfo KFGRI;
|
||||
|
||||
if( KFPC != none )
|
||||
{
|
||||
KFGRI = KFGameReplicationInfo( KFPC.WorldInfo.GRI );
|
||||
|
||||
// If the perk is not allowed stop the change process
|
||||
if( KFGRI != none && !KFGRI.IsPerkAllowed(KFPC.PerkList[NewPerkIndex].PerkClass) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// We aren't actually changing our selected perk so don't save stuff.
|
||||
UpdateSkillsHolder( KFPC.PerkList[NewPerkIndex].PerkClass );
|
||||
|
||||
|
@ -86,7 +86,7 @@ function UpdatePerkSelection(byte SelectedPerkIndex)
|
||||
TempObj.SetString( "Title", PerkClass.default.PerkName );
|
||||
TempObj.SetString( "iconSource", "img://"$PerkClass.static.GetPerkIconPath() );
|
||||
TempObj.SetBool("bTierUnlocked", bool(bTierUnlocked) && KFPC.PerkList[i].PerkLevel >= UnlockedPerkLevel);
|
||||
|
||||
TempObj.SetBool("bPerkAllowed", true);
|
||||
DataProvider.SetElementObject( i, TempObj );
|
||||
}
|
||||
SetObject( "perkData", DataProvider );
|
||||
@ -111,7 +111,7 @@ function UpdatePendingPerkInfo(byte SelectedPerkIndex)
|
||||
local KFPlayerController KFPC;
|
||||
|
||||
KFPC = KFPlayerController( GetPC() );
|
||||
|
||||
|
||||
if( KFPC != none && KFGRI != none )
|
||||
{
|
||||
if(!class'WorldInfo'.static.IsMenuLevel())
|
||||
|
@ -13,13 +13,13 @@ class KFGFxServerBrowser_Filters extends KFGFxObject_Container
|
||||
config(UI);
|
||||
|
||||
var KFGFxMenu_ServerBrowser ServerMenu;
|
||||
var localized string NoPasswordString, NoMutatorsString, NotFullString, NotEmptyString, NoRankedStandardString, NoRankedCustomString, NoUnrankedString, DedicatedString, VACSecureString, InLobbyString, InProgressString, OnlyStockMapsString, OnlyCustomMapsString, LimitServerResultsString;
|
||||
var localized string NoPasswordString, NoMutatorsString, NotFullString, NotEmptyString, NoRankedStandardString, NoRankedCustomString, NoUnrankedString, DedicatedString, VACSecureString, InLobbyString, InProgressString, OnlyStockMapsString, OnlyCustomMapsString, LimitServerResultsString, NotServerExiledString;
|
||||
var array<string> FilterStrings;
|
||||
|
||||
var config Bool bNoPassword, bNoMutators, bNotFull, bNotEmpty, bUsesStats, bCustom, bDedicated, bVAC_Secure, bInLobby, bInProgress, bOnlyStockMaps, bOnlyCustomMaps, bLimitServerResults;
|
||||
var config Bool bNoPassword, bNoMutators, bNotFull, bNotEmpty, bUsesStats, bCustom, bDedicated, bVAC_Secure, bInLobby, bInProgress, bOnlyStockMaps, bOnlyCustomMaps, bLimitServerResults, bNoLocalAdmin;
|
||||
var config byte SavedGameModeIndex, SavedMapIndex, SavedDifficultyIndex, SavedLengthIndex, SavedPingIndex;
|
||||
|
||||
var Bool bNoPasswordPending, bNoMutatorsPending, bNotFullPending, bNotEmptyPending, bUsesStatsPending, bCustomPending, bDedicatedPending, bVAC_SecurePending, bInLobbyPending, bInProgressPending, bOnlyStockMapsPending, bOnlyCustomMapsPending, bLimitServerResultsPending;
|
||||
var Bool bNoPasswordPending, bNoMutatorsPending, bNotFullPending, bNotEmptyPending, bUsesStatsPending, bCustomPending, bDedicatedPending, bVAC_SecurePending, bInLobbyPending, bInProgressPending, bOnlyStockMapsPending, bOnlyCustomMapsPending, bLimitServerResultsPending, bNoLocalAdminPending;
|
||||
var byte SavedGameModeIndexPending, SavedMapIndexPending, SavedDifficultyIndexPending, SavedLengthIndexPending, SavedPingIndexPending;
|
||||
|
||||
var transient string CachedMapName, CachedModeName;
|
||||
@ -45,6 +45,7 @@ enum EFilter_Key
|
||||
LIMIT_SERVER_RESULTS,
|
||||
/*ONLY_STOCK_MAPS, //Not using for EA
|
||||
ONLY_CUSTOM_MAPS,*/ //Not using for EA
|
||||
NO_LOCAL_ADMIN,
|
||||
FILTERS_MAX,
|
||||
};
|
||||
|
||||
@ -115,6 +116,7 @@ function InitFiltersArray()
|
||||
FilterStrings[IN_LOBBY] = InLobbyString;
|
||||
FilterStrings[IN_PROGRESS] = InProgressString;
|
||||
FilterStrings[LIMIT_SERVER_RESULTS] = LimitServerResultsString @class'KFGFxServerBrowser_ServerList'.default.MaxSearchResults;
|
||||
FilterStrings[NO_LOCAL_ADMIN] = NotServerExiledString;
|
||||
/*FilterStrings[ONLY_STOCK_MAPS] = OnlyStockMapsString;
|
||||
FilterStrings[ONLY_CUSTOM_MAPS] = OnlyCustomMapsString;*/
|
||||
}
|
||||
@ -316,6 +318,7 @@ function ApplyFilters()
|
||||
bOnlyStockMaps = bOnlyStockMapsPending;
|
||||
bOnlyCustomMaps = bOnlyCustomMapsPending;
|
||||
bLimitServerResults = bLimitServerResultsPending;
|
||||
bNoLocalAdmin = bNoLocalAdminPending;
|
||||
|
||||
SavedGameModeIndex = SavedGameModeIndexPending;
|
||||
SavedMapIndex = SavedMapIndexPending;
|
||||
@ -340,7 +343,8 @@ function ClearPendingValues()
|
||||
bInProgressPending = bInProgress;
|
||||
bOnlyStockMapsPending = bOnlyStockMaps;
|
||||
bOnlyCustomMapsPending = bOnlyCustomMaps;
|
||||
bLimitServerResultsPending = bLimitServerResults;
|
||||
bLimitServerResultsPending = bLimitServerResults;
|
||||
bNoLocalAdminPending = bNoLocalAdmin;
|
||||
SavedGameModeIndexPending = SavedGameModeIndex;
|
||||
SavedMapIndexPending = SavedMapIndex;
|
||||
SavedDifficultyIndexPending = SavedDifficultyIndex;
|
||||
@ -364,6 +368,7 @@ function ResetFilters()
|
||||
bOnlyStockMaps = false;
|
||||
bOnlyCustomMaps = false;
|
||||
bLimitServerResults = true;
|
||||
bNoLocalAdmin = true;
|
||||
|
||||
SavedGameModeIndex = 255;
|
||||
SavedMapIndex = 255;
|
||||
@ -420,6 +425,9 @@ function SetBoolByEFilter_Key(EFilter_Key Filter, bool FilterValue)
|
||||
case LIMIT_SERVER_RESULTS:
|
||||
bLimitServerResultsPending = FilterValue;
|
||||
break;
|
||||
case NO_LOCAL_ADMIN:
|
||||
bNoLocalAdminPending = FilterValue;
|
||||
break;
|
||||
/*case ONLY_STOCK_MAPS:
|
||||
bOnlyStockMapsPending = FilterValue;
|
||||
break;
|
||||
@ -467,6 +475,9 @@ function bool GetBoolByEFilter_Key(EFilter_Key Filter)
|
||||
|
||||
case LIMIT_SERVER_RESULTS:
|
||||
return bLimitServerResults;
|
||||
|
||||
case NO_LOCAL_ADMIN:
|
||||
return bNoLocalAdmin;
|
||||
|
||||
/*case ONLY_STOCK_MAPS:
|
||||
return bOnlyStockMaps;
|
||||
|
@ -278,6 +278,7 @@ function BuildServerFilters(KFGFxServerBrowser_Filters Filters, OnlineGameSearch
|
||||
Search.AddServerFilter("version_match", string(class'KFGameEngine'.static.GetKFGameVersion()));
|
||||
Search.TestAddServerFilter( Filters.bNotFull, "notfull");
|
||||
Search.TestAddServerFilter( Filters.bNotEmpty, "hasplayers");
|
||||
Search.TestAddBoolGametagFilter(GametagSearch, Filters.bNoLocalAdmin, 'bServerExiled', 0);
|
||||
|
||||
if( !class'WorldInfo'.static.IsConsoleBuild() )
|
||||
{
|
||||
@ -972,6 +973,7 @@ function UpdateListDataProvider()
|
||||
TempObj.SetString("mode", class'KFCommon_LocalizedStrings'.static.GetGameModeString(TempOnlineGamesSettings.Mode) );
|
||||
TempObj.SetString("map", TempOnlineGamesSettings.MapName);
|
||||
TempObj.SetBool("locked", TempOnlineGamesSettings.bRequiresPassword);
|
||||
TempObj.SetBool("serverExiled", TempOnlineGamesSettings.bServerExiled);
|
||||
//Get Game State from var const databinding EOnlineGameState GameState;
|
||||
TempObj.SetString("gameStatus", String(TempOnlineGamesSettings.GameState));
|
||||
|
||||
|
@ -175,22 +175,28 @@ function FillWhatsNew()
|
||||
local SWhatsNew item;
|
||||
WhatsNewItems.Remove(0, WhatsNewItems.Length);
|
||||
// Latest Update
|
||||
item = SetWhatsNewItem("img://UI_WhatsNew.UI_WhatsNew_Christmas_ChristmasBreakdown_Event", "LatestUpdate", "http://www.tripwireinteractive.com/redirect/KF2LatestUpdate/");
|
||||
item = SetWhatsNewItem("img://UI_WhatsNew.UI_WhatsNew_Spring_DystopianDevastation_Event", "LatestUpdate", "http://www.tripwireinteractive.com/redirect/KF2LatestUpdate/");
|
||||
WhatsNewItems.AddItem(item);
|
||||
// KF2 Armory Season Pass 2021
|
||||
item = SetWhatsNewItem("img://UI_WhatsNew.UI_WhatsNew_Spring_Armory_Season_Pass", "ArmorySeasonPass", "https://store.steampowered.com/app/1524820/Killing_Floor_2__Armory_Season_Pass");
|
||||
WhatsNewItems.AddItem(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_Spring_PremiumTicket", "FeaturedEventItem", "https://store.steampowered.com/buyitem/232090/5803");
|
||||
WhatsNewItems.AddItem(item);
|
||||
// Featured Weapon Skin Bundle
|
||||
item = SetWhatsNewItem("img://UI_WhatsNew.UI_WhatsNew_Xmas_IceBreaker", "FeaturedItemBundle", "https://store.steampowered.com/buyitem/232090/8616");
|
||||
WhatsNewItems.AddItem(item);
|
||||
// Featured Weapon Skin Bundle
|
||||
item = SetWhatsNewItem("img://UI_WhatsNew.UI_WhatsNew_Christmas_Spectre", "FeaturedItemBundle", "https://store.steampowered.com/buyitem/232090/8618");
|
||||
item = SetWhatsNewItem("img://UI_WhatsNew.UI_WhatsNew_Spring_Neon_MKVII", "FeaturedItemBundle", "https://store.steampowered.com/buyitem/232090/8774");
|
||||
WhatsNewItems.AddItem(item);
|
||||
// Featured Cosmetic Bundle
|
||||
item = SetWhatsNewItem("img://UI_WhatsNew.UI_WhatsNew_Winter","FeaturedItemBundle","https://store.steampowered.com/buyitem/232090/8617");
|
||||
item = SetWhatsNewItem("img://UI_WhatsNew.UI_WhatsNew_Spring_Paratrooper","FeaturedItemBundle","https://store.steampowered.com/buyitem/232090/8775");
|
||||
WhatsNewItems.AddItem(item);
|
||||
// Featured Cosmetic Bundle
|
||||
item = SetWhatsNewItem("img://UI_WhatsNew.UI_WhatsNew_Spring_DystopianDevastation", "FeaturedItemBundle", "https://store.steampowered.com/buyitem/232090/8773");
|
||||
WhatsNewItems.AddItem(item);
|
||||
// Featured Cosmetic Bundle
|
||||
item = SetWhatsNewItem("img://UI_WhatsNew.UI_WhatsNew_Spring_Chemical", "FeaturedItemBundle", "https://store.steampowered.com/buyitem/232090/8776");
|
||||
WhatsNewItems.AddItem(item);
|
||||
// Featured Weapon Bundle
|
||||
item=SetWhatsNewItem("img://UI_WhatsNew.UI_WhatsNew_Christmas_FrostGun", "FeaturedItemBundle", "https://store.steampowered.com/buyitem/232090/8619");
|
||||
item=SetWhatsNewItem("img://UI_WhatsNew.UI_WhatsNew_Spring_GravityImploder", "FeaturedItemBundle", "https://store.steampowered.com/buyitem/232090/8777");
|
||||
WhatsNewItems.AddItem(item);
|
||||
// Misc Community Links
|
||||
item=SetWhatsNewItem("img://UI_WhatsNew.UI_WhatsNew_CommunityHub", "Jaegorhorn", "https://steamcommunity.com/app/232090");
|
||||
@ -199,7 +205,7 @@ function FillWhatsNew()
|
||||
WhatsNewItems.AddItem(item);
|
||||
item=SetWhatsNewItem("img://UI_WhatsNew.UI_WhatsNew_Survey", "Survey", "http://www.tripwireinteractive.com/redirect/KF2Survey/");
|
||||
WhatsNewItems.AddItem(item);
|
||||
item=SetWhatsNewItem("img://UI_WhatsNew.UI_WhatsNew_CommunityIssue", "CommunityTracker", "https://trello.com/b/ZOwMRlcW/killing-floor-2-community-issue-roadmap");
|
||||
item=SetWhatsNewItem("img://UI_WhatsNew.UI_WhatsNew_CommunityIssue", "CommunityTracker", "http://www.killingfloor2.com/roadmap");
|
||||
WhatsNewItems.AddItem(item);
|
||||
item=SetWhatsNewItem("img://UI_WhatsNew.UI_WhatsNew_Merch", "Merch", "http://www.tripwireinteractive.com/redirect/shop/");
|
||||
WhatsNewItems.AddItem(item);
|
||||
|
@ -446,19 +446,19 @@ DefaultProperties
|
||||
|
||||
XboxFilterExceptions[0]="Wasteland Bundle" // Wasteland Outfit Bundle
|
||||
|
||||
FeaturedItemIDs[0]=7944
|
||||
FeaturedItemIDs[1]=8615
|
||||
FeaturedItemIDs[2]=8616
|
||||
FeaturedItemIDs[3]=8617
|
||||
FeaturedItemIDs[4]=8618
|
||||
FeaturedItemIDs[5]=8619
|
||||
FeaturedItemIDs[0]=8115
|
||||
FeaturedItemIDs[1]=8773
|
||||
FeaturedItemIDs[2]=8774
|
||||
FeaturedItemIDs[3]=8775
|
||||
FeaturedItemIDs[4]=8776
|
||||
FeaturedItemIDs[5]=8777
|
||||
|
||||
ConsoleFeaturedItemIDs[0]=7947
|
||||
ConsoleFeaturedItemIDs[1]=8615
|
||||
ConsoleFeaturedItemIDs[2]=8616
|
||||
ConsoleFeaturedItemIDs[3]=8617
|
||||
ConsoleFeaturedItemIDs[4]=8618
|
||||
ConsoleFeaturedItemIDs[5]=8619
|
||||
ConsoleFeaturedItemIDs[0]=8116
|
||||
ConsoleFeaturedItemIDs[1]=8773
|
||||
ConsoleFeaturedItemIDs[2]=8774
|
||||
ConsoleFeaturedItemIDs[3]=8775
|
||||
ConsoleFeaturedItemIDs[4]=8776
|
||||
ConsoleFeaturedItemIDs[5]=8777
|
||||
|
||||
MaxFeaturedItems=5
|
||||
}
|
@ -1165,8 +1165,14 @@ function ResetAllPickups()
|
||||
AllPickupFactories.AddItem( AmmoPickups[i] );
|
||||
}
|
||||
|
||||
ResetPickups( ItemPickups, NumWeaponPickups );
|
||||
ResetPickups( AmmoPickups, NumAmmoPickups );
|
||||
if(NumWeaponPickups > 0 )
|
||||
{
|
||||
ResetPickups( ItemPickups, NumWeaponPickups );
|
||||
}
|
||||
if(NumAmmoPickups > 0)
|
||||
{
|
||||
ResetPickups( AmmoPickups, NumAmmoPickups );
|
||||
}
|
||||
}
|
||||
|
||||
/** Pick random pickup items to enable and put all others to sleep */
|
||||
@ -1632,12 +1638,24 @@ function bool AllowPrimaryWeapon(string ClassPath)
|
||||
return true;
|
||||
}
|
||||
|
||||
/** Whether or not a specific secondary weapon is allowed. Called at player spawn time while setting inventory. */
|
||||
function bool AllowSecondaryWeapon(string ClassPath)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/** Allows gametype to adjust starting grenade count. Called at player spawn time from GiveInitialGrenadeCount in the inventory. */
|
||||
function int AdjustStartingGrenadeCount(int CurrentCount)
|
||||
{
|
||||
return CurrentCount;
|
||||
}
|
||||
|
||||
/** Allows gametype to validate a perk for the current match */
|
||||
function bool IsPerkAllowed(class<KFPerk> PerkClass)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/************************************************************************************
|
||||
* @name Difficulty Scaling
|
||||
***********************************************************************************/
|
||||
@ -2719,7 +2737,14 @@ function CheckZedTimeOnKill(Controller Killer, Controller KilledPlayer, Pawn Kil
|
||||
// Handle monster/zed kills - increased probability if closer to the player
|
||||
if( Killer != none && Killer.Pawn != none && VSizeSq(Killer.Pawn.Location - KilledPawn.Location) < 90000 ) // 3 meters
|
||||
{
|
||||
DramaticEvent(0.05);
|
||||
if(OutbreakEvent != none && Role == ROLE_Authority && OutbreakEvent.ActiveEvent.bModifyZedTimeOnANearZedKill)
|
||||
{
|
||||
DramaticEvent(OutbreakEvent.ActiveEvent.ZedTimeOnANearZedKill);
|
||||
}
|
||||
else
|
||||
{
|
||||
DramaticEvent(0.05);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -77,6 +77,25 @@ var bool bMatchVictory;
|
||||
//Whether or not traders are enabled
|
||||
var bool bTradersEnabled;
|
||||
|
||||
struct native PerkAvailableData
|
||||
{
|
||||
var bool bPerksAvailableLimited;
|
||||
|
||||
var bool bBerserkerAvailable;
|
||||
var bool bCommandoAvailable;
|
||||
var bool bSupportAvailable;
|
||||
var bool bFieldMedicAvailable;
|
||||
var bool bDemolitionistAvailable;
|
||||
var bool bFirebugAvailable;
|
||||
var bool bGunslingerAvailable;
|
||||
var bool bSharpshooterAvailable;
|
||||
var bool bSwatAvailable;
|
||||
var bool bSurvivalistAvailable;
|
||||
};
|
||||
|
||||
//Wheter or not some perks are not allowed
|
||||
var repnotify PerkAvailableData PerksAvailableData;
|
||||
|
||||
/************************************
|
||||
* Spawning
|
||||
************************************/
|
||||
@ -275,6 +294,10 @@ var float VersusZedDamageMod;
|
||||
/** The current game is a versus game */
|
||||
var bool bVersusGame;
|
||||
|
||||
/** The current game has global damage*/
|
||||
var bool bGlobalDamage;
|
||||
|
||||
|
||||
/************************************
|
||||
* Team Management
|
||||
************************************/
|
||||
@ -350,11 +373,13 @@ cpptext
|
||||
replication
|
||||
{
|
||||
if ( bNetDirty )
|
||||
TraderVolume, TraderVolumeCheckType, bTraderIsOpen, NextTrader, WaveNum, bWaveIsEndless, AIRemaining, WaveTotalAICount, bWaveIsActive, MaxHumanCount,
|
||||
TraderVolume, TraderVolumeCheckType, bTraderIsOpen, NextTrader, WaveNum, bWaveIsEndless, AIRemaining, WaveTotalAICount, bWaveIsActive, MaxHumanCount, bGlobalDamage,
|
||||
CurrentObjective, PreviousObjective, PreviousObjectiveResult, PreviousObjectiveXPResult, PreviousObjectiveVoshResult, MusicIntensity, ReplicatedMusicTrackInfo, MusicTrackRepCount,
|
||||
bIsUnrankedGame, GameSharedUnlocks, bHidePawnIcons, ConsoleGameSessionGuid, GameDifficulty, GameDifficultyModifier, BossIndex, bWaveStarted, NextObjective; //@HSL - JRO - 3/21/2016 - PS4 Sessions
|
||||
if ( bNetInitial )
|
||||
GameLength, WaveMax, bCustom, bVersusGame, TraderItems, GameAmmoCostScale, bAllowGrenadePurchase, MaxPerkLevel, bTradersEnabled;
|
||||
if ( bNetInitial || bNetDirty )
|
||||
PerksAvailableData;
|
||||
if ( bNetInitial && Role == ROLE_Authority )
|
||||
ServerAdInfo;
|
||||
|
||||
@ -492,6 +517,10 @@ simulated event ReplicatedEvent(name VarName)
|
||||
{
|
||||
ReceivedGameLength();
|
||||
}
|
||||
else if(VarName == nameof(PerksAvailableData))
|
||||
{
|
||||
UpdatePerksAvailable();
|
||||
}
|
||||
else
|
||||
{
|
||||
super.ReplicatedEvent(VarName);
|
||||
@ -2108,6 +2137,39 @@ simulated function bool IsObjectiveMode()
|
||||
return false;
|
||||
}
|
||||
|
||||
function SetGlobalDamage(bool bEnable)
|
||||
{
|
||||
bGlobalDamage = bEnable;
|
||||
}
|
||||
|
||||
simulated function bool IsGlobalDamage()
|
||||
{
|
||||
return bGlobalDamage;
|
||||
}
|
||||
|
||||
simulated function bool IsPerkAllowed(class<KFPerk> PerkClass)
|
||||
{
|
||||
if(PerksAvailableData.bPerksAvailableLimited)
|
||||
{
|
||||
if(PerkClass == class'KFPerk_Berserker') return PerksAvailableData.bBerserkerAvailable;
|
||||
else if(PerkClass == class'KFPerk_Commando') return PerksAvailableData.bCommandoAvailable;
|
||||
else if(PerkClass == class'KFPerk_Support') return PerksAvailableData.bSupportAvailable;
|
||||
else if(PerkClass == class'KFPerk_FieldMedic') return PerksAvailableData.bFieldMedicAvailable;
|
||||
else if(PerkClass == class'KFPerk_Demolitionist') return PerksAvailableData.bDemolitionistAvailable;
|
||||
else if(PerkClass == class'KFPerk_Firebug') return PerksAvailableData.bFirebugAvailable;
|
||||
else if(PerkClass == class'KFPerk_Gunslinger') return PerksAvailableData.bGunslingerAvailable;
|
||||
else if(PerkClass == class'KFPerk_Sharpshooter') return PerksAvailableData.bSharpshooterAvailable;
|
||||
else if(PerkClass == class'KFPerk_Swat') return PerksAvailableData.bSwatAvailable;
|
||||
else if(PerkClass == class'KFPerk_Survivalist') return PerksAvailableData.bSurvivalistAvailable;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
simulated function UpdatePerksAvailable()
|
||||
{
|
||||
KFPlayerController(GetALocalPlayerController()).UpdatePerkOnInit();
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
TraderItemsPath="GP_Trader_ARCH.DefaultTraderItems"
|
||||
|
@ -202,7 +202,7 @@ static function class<KFGFxSpecialeventObjectivesContainer> GetSpecialEventClass
|
||||
switch (SpecialEventID)
|
||||
{
|
||||
case SEI_Spring:
|
||||
return class'KFGFxSpecialEventObjectivesContainer_Spring2020';
|
||||
return class'KFGFxSpecialEventObjectivesContainer_Spring2021';
|
||||
case SEI_Summer:
|
||||
return class'KFGFxSpecialEventObjectivesContainer_Summer2020';
|
||||
case SEI_Fall:
|
||||
@ -1480,6 +1480,8 @@ function BuildServerFilters(OnlineGameInterface GameInterfaceSteam, KFGFxStartGa
|
||||
else
|
||||
{
|
||||
Search.AddServerFilter("version_match", string(class'KFGameEngine'.static.GetKFGameVersion()));
|
||||
Search.TestAddBoolGametagFilter(GameTagFilters, true, 'bServerExiled', 0);//Consoles does NOT have this property, so only in PC matchmaking search variables has to be added
|
||||
//TestAddBoolGametagFilter Explanation: if set to true the second param, it will add the property to the search filters. But this property may interest us to search it as "false" or "true" so that is the purpose of the fourth param.
|
||||
}
|
||||
|
||||
if (OptionsComponent.GetMakeNewServer() || bAttemptingServerCreate )
|
||||
|
@ -1121,7 +1121,6 @@ simulated function AttemptQuickHeal()
|
||||
{
|
||||
local KFWeap_HealerBase W;
|
||||
local KFPlayerController KFPC;
|
||||
local class<KFPowerUp> KFPowerUpClass;
|
||||
|
||||
// Do not heal if we have full health
|
||||
if ( Instigator.Health >= Instigator.HealthMax )
|
||||
@ -1138,8 +1137,7 @@ simulated function AttemptQuickHeal()
|
||||
KFPC = KFPlayerController(Instigator.Owner);
|
||||
if( KFPC != none )
|
||||
{
|
||||
KFPowerUpClass = KFPC.GetPowerUpClass();
|
||||
if( KFPowerUpClass != none && !KFPowerUpClass.default.CanBeHealedWhilePowerUpIsActive )
|
||||
if(!KFPC.CanUseHealObject())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
@ -116,6 +116,8 @@ var() EBossAIType SurvivalBossOverride<EditCondition=bOverrideSurvivalBoss>;
|
||||
var() SeasonalEventIndex ZedSeasonalThemeId;
|
||||
// Mutator code class that can override various map settings
|
||||
var() class<KFMapMutator> MapMutatorClass;
|
||||
// Whether to allow shotgun jumps
|
||||
var() bool bAllowShootgunJump;
|
||||
|
||||
// Objectives to use in Objective Mode
|
||||
var(ObjectiveMode) array<WaveObjectivePair> ObjectiveModeObjectives;
|
||||
@ -451,4 +453,6 @@ DefaultProperties
|
||||
AmbientMusicTracks.Add(KFMusicTrackInfo'WW_MAMB_Default.TI_SJ_Menace')
|
||||
|
||||
TraderVoiceGroupClassPath="KFGameContent.KFTraderVoiceGroup_Default"
|
||||
|
||||
bAllowShootgunJump=true
|
||||
}
|
||||
|
@ -66,6 +66,7 @@ defaultproperties
|
||||
ColumnIds.Add(STATID_ACHIEVE_DesolationCollectibles)
|
||||
ColumnIds.Add(STATID_ACHIEVE_HellmarkStationCollectibles)
|
||||
ColumnIds.Add(STATID_ACHIEVE_ElysiumEndlessWaveFifteen)
|
||||
ColumnIds.Add(STATID_ACHIEVE_Dystopia2029Collectibles)
|
||||
|
||||
ColumnMappings.Add((Id=STATID_ACHIEVE_MrPerky5, Name="AchievementMrPerky5"))
|
||||
ColumnMappings.Add((Id=STATID_ACHIEVE_MrPerky10, Name = "AchievementMrPerky10"))
|
||||
@ -120,4 +121,5 @@ defaultproperties
|
||||
ColumnMappings.Add((Id=STATID_ACHIEVE_DesolationCollectibles,Name="AchievementCollectDesolation"))
|
||||
ColumnMappings.Add((Id=STATID_ACHIEVE_HellmarkStationCollectibles,Name="AchievementCollectHellmarkStation"))
|
||||
ColumnMappings.Add((Id=STATID_ACHIEVE_ElysiumEndlessWaveFifteen,Name="AchievementEndlessElysium"))
|
||||
ColumnMappings.Add((Id=STATID_ACHIEVE_Dystopia2029Collectibles,NAme="AchievementCollectDystopia2029"))
|
||||
}
|
||||
|
@ -425,6 +425,10 @@ const KFACHID_ElysiumHard = 277;
|
||||
const KFACHID_ElysiumHellOnEarth = 278;
|
||||
const KFACHID_ElysiumEndlessWaveFifteen = 279;
|
||||
|
||||
const KFACHID_Dystopia2029Hard = 280;
|
||||
const KFACHID_Dystopia2029HellOnEarth = 281;
|
||||
const KFACHID_Dystopia2029Collectibles = 282;
|
||||
|
||||
/* __TW_ANALYTICS_ */
|
||||
var int PerRoundWeldXP;
|
||||
var int PerRoundHealXP;
|
||||
@ -1073,6 +1077,12 @@ function SavePersonalBest( EPersonalBests PersonalBestID, int Value )
|
||||
/*********************************************************************************************
|
||||
* @name Gameplay
|
||||
********************************************************************************************* */
|
||||
|
||||
private event AddToHitsTaken()
|
||||
{
|
||||
SeasonalEventStats_OnHitTaken();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Add a kill and give some EXP tp the player
|
||||
* @param MonsterClass The killed monster's class
|
||||
@ -1792,6 +1802,14 @@ final native simulated event SeasonalEventStats_OnGameWon(class<GameInfo> GameCl
|
||||
|
||||
final native simulated event SeasonalEventStats_OnGameEnd(class<GameInfo> GameClass);
|
||||
|
||||
final simulated function SeasonalEventStats_OnHitTaken()
|
||||
{
|
||||
if (SeasonalEventIsValid())
|
||||
{
|
||||
SeasonalEvent.OnHitTaken();
|
||||
}
|
||||
}
|
||||
|
||||
final simulated function SeasonalEventStats_OnZedKilled(class<KFPawn_Monster> MonsterClass, int Difficulty, class<DamageType> DT)
|
||||
{
|
||||
if (SeasonalEventIsValid())
|
||||
@ -2062,6 +2080,7 @@ defaultproperties
|
||||
DailyEvents.Add((ObjectiveType=DOT_WeaponDamage,ObjectiveClasses=(KFWeap_Rifle_Winchester1894, KFDT_Bludgeon_Winchester,KFDT_Ballistic_Winchester),CompletionAmount=5000)) //2000
|
||||
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_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_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_M99, KFDT_Bludgeon_M99,KFDT_Ballistic_M99),CompletionAmount=5000))
|
||||
@ -2203,6 +2222,9 @@ defaultproperties
|
||||
DailyEvents.Add((ObjectiveType=DOT_Maps,SecondaryType=DOST_MapCompletion,ObjectiveClasses=(KF-ELYSIUM),CompletionAmount=1))
|
||||
DailyEvents.Add((ObjectiveType=DOT_Maps,SecondaryType=DOST_MapCompletion,ObjectiveClasses=(KF-ELYSIUM),CompletionAmount=2))
|
||||
DailyEvents.Add((ObjectiveType=DOT_Maps,SecondaryType=DOST_MapCompletion,ObjectiveClasses=(KF-ELYSIUM),CompletionAmount=3))
|
||||
DailyEvents.Add((ObjectiveType=DOT_Maps,SecondaryType=DOST_MapCompletion,ObjectiveClasses=(KF-DYSTOPIA2029),CompletionAmount=1))
|
||||
DailyEvents.Add((ObjectiveType=DOT_Maps,SecondaryType=DOST_MapCompletion,ObjectiveClasses=(KF-DYSTOPIA2029),CompletionAmount=2))
|
||||
DailyEvents.Add((ObjectiveType=DOT_Maps,SecondaryType=DOST_MapCompletion,ObjectiveClasses=(KF-DYSTOPIA2029),CompletionAmount=3))
|
||||
|
||||
//Versus Damage
|
||||
// Per design doc that I have right now, these are x class damage y players, not damage y amount
|
||||
|
@ -68,4 +68,5 @@ defaultproperties
|
||||
Properties.Add((PropertyId = STATID_ACHIEVE_DesolationCollectibles,Data = (Type = SDT_Int32,Value1 = 0)))
|
||||
Properties.Add((PropertyId = STATID_ACHIEVE_HellmarkStationCollectibles,Data = (Type = SDT_Int32,Value1 = 0)))
|
||||
Properties.Add((PropertyId = STATID_ACHIEVE_ElysiumEndlessWaveFifteen,Data = (Type = SDT_Int32,Value1 = 0)))
|
||||
Properties.Add((PropertyId = STATID_ACHIEVE_Dystopia2029Collectibles, Data = (Type = SDT_Int32,Value1 = 0)))
|
||||
}
|
||||
|
@ -81,9 +81,19 @@ struct StatAdjustments
|
||||
/** 1 to max player count range of how many AI should spawn during the sub wave */
|
||||
var() Vector2D AdditionalSubSpawnCount;
|
||||
|
||||
/** Ammount of health recovered to the player on kill */
|
||||
var() int HealByKill;
|
||||
|
||||
/** Ammount of health recovered to the player on kill assistance */
|
||||
var() int HealByAssistance;
|
||||
|
||||
/** Killing the zed should give a different dosh amount than the standard. */
|
||||
var() int DoshGiven;
|
||||
|
||||
/** Speed modifier */
|
||||
var() float InitialGroundSpeedModifierScale;
|
||||
|
||||
|
||||
structdefaultproperties
|
||||
{
|
||||
HealthScale = 1.f;
|
||||
@ -101,6 +111,8 @@ struct StatAdjustments
|
||||
AdditionalSubSpawnCount = (X = 1,Y = 1)
|
||||
|
||||
DoshGiven=INDEX_NONE
|
||||
|
||||
InitialGroundSpeedModifierScale = 1.0
|
||||
}
|
||||
};
|
||||
|
||||
@ -135,12 +147,23 @@ struct WeeklyOverrides
|
||||
*/
|
||||
var() KFGFxObject_TraderItems SpawnWeaponList;
|
||||
|
||||
/** If this flag is set to true, the secondary weapon will be checked for availability in the current game mode */
|
||||
var() bool bSpawnWeaponListAffectsSecondaryWeapons;
|
||||
|
||||
/** If this array is not empty, modifies the trader's list of available weapons */
|
||||
var() KFGFxObject_TraderItems TraderWeaponList;
|
||||
|
||||
/** Whether or not grenades are disabled at spawn and for purchase */
|
||||
var() bool bDisableGrenades;
|
||||
|
||||
/** If this array is not empty, modifies the list of perks available for this weekly mode */
|
||||
var() const array<class<KFPerk> > PerksAvailableList;
|
||||
|
||||
/** Activates the special conditions for the Colliseum Weekly Mode
|
||||
* 1) Disables Berserker lvl25 skills 2) Enables lvl25 battery ram skill of the swat
|
||||
*/
|
||||
var() bool bColliseumSkillConditionsActive;
|
||||
|
||||
/** If this array is not empty, replaces AIClassList entries with a new spawn class */
|
||||
var() array<SpawnReplacement> SpawnReplacementList;
|
||||
|
||||
@ -202,6 +225,12 @@ struct WeeklyOverrides
|
||||
/** Height to use for kicking players out of partial zed time */
|
||||
var() float ZedTimeHeight;
|
||||
|
||||
/** Use a new probability of getting a drama event when a Zed is killed on a 3m radius of the player */
|
||||
var() bool bModifyZedTimeOnANearZedKill;
|
||||
|
||||
/** Percentage value (0...1) for the probability of getting a drama event when a Zed is killed on a 3m radius of the player */
|
||||
var() float ZedTimeOnANearZedKill;
|
||||
|
||||
/** Whether or not to use size scale on damage */
|
||||
var() bool bScaleOnHealth;
|
||||
|
||||
@ -289,6 +318,27 @@ struct WeeklyOverrides
|
||||
/** Boom performance optimization - Max booms in one frame (avoids big Demo spikes) */
|
||||
var() int MaxBoomsPerFrame;
|
||||
|
||||
/** Heal after kill */
|
||||
var() bool bHealAfterKill;
|
||||
|
||||
/** Cannot be Healed*/
|
||||
var() bool bCannotBeHealed;
|
||||
|
||||
/** Global Damage affects shield or ignores it */
|
||||
var() bool bGlobalDamageAffectsShield;
|
||||
|
||||
/** Global Damage Should be applied during a boss wave*/
|
||||
var() bool bApplyGlobalDamageBossWave;
|
||||
|
||||
/** Replenish player's health once a wave ends. */
|
||||
var() bool bHealPlayerAfterWave;
|
||||
|
||||
/** Global modifier of dosh received by players when a zed is killed. Default value is 1.0 */
|
||||
var() float DoshOnKillGlobalModifier;
|
||||
|
||||
/** Delay After a wave starts for applying global damage. */
|
||||
var() float DamageDelayAfterWaveStarted;
|
||||
|
||||
/** If another outbreak mode shares the same events, this will link the two to quicker UI lookup */
|
||||
var() int WeeklyOutbreakId;
|
||||
|
||||
@ -323,7 +373,18 @@ struct WeeklyOverrides
|
||||
InflationDeathGravity = -0.1
|
||||
MaxPerkLevel = 4
|
||||
bAllowSpawnReplacementDuringBossWave = true
|
||||
bHealAfterKill = false
|
||||
bCannotBeHealed = false
|
||||
bGlobalDamageAffectsShield = true
|
||||
bApplyGlobalDamageBossWave = true
|
||||
bHealPlayerAfterWave = false
|
||||
DamageDelayAfterWaveStarted = 10.0f
|
||||
WeeklyOutbreakId=INDEX_NONE
|
||||
bSpawnWeaponListAffectsSecondaryWeapons = false
|
||||
bColliseumSkillConditionsActive = false
|
||||
bModifyZedTimeOnANearZedKill = false
|
||||
ZedTimeOnANearZedKill = 0.05
|
||||
DoshOnKillGlobalModifier = 1.0f
|
||||
}
|
||||
};
|
||||
|
||||
@ -336,6 +397,7 @@ struct CachedOutbreakInfo
|
||||
var byte MaxPerkLevel;
|
||||
var float CachedWorldGravityZ;
|
||||
var float CachedGlobalGravityZ;
|
||||
var PerkAvailableData PerksAvailableData;
|
||||
|
||||
structdefaultproperties
|
||||
{
|
||||
@ -404,6 +466,11 @@ function ClearActiveEvent()
|
||||
KFGameReplicationInfo(GameReplicationInfo).TraderItems = CachedItems.TraderItems;
|
||||
}
|
||||
|
||||
if(ActiveEvent.PerksAvailableList.length > 0)
|
||||
{
|
||||
KFGameReplicationInfo(GameReplicationInfo).PerksAvailableData = CachedItems.PerksAvailableData;
|
||||
}
|
||||
|
||||
KFGameReplicationInfo(GameReplicationInfo).GameAmmoCostScale = CachedItems.GameAmmoCostScale;
|
||||
KFGameReplicationInfo(GameReplicationInfo).bAllowGrenadePurchase = CachedItems.bAllowGrenadePurchase;
|
||||
KFGameReplicationInfo(GameReplicationInfo).bTradersEnabled = CachedItems.bTradersEnabled;
|
||||
@ -425,6 +492,11 @@ function CacheGRI()
|
||||
CachedItems.TraderItems = KFGameReplicationInfo(GameReplicationInfo).TraderItems;
|
||||
}
|
||||
|
||||
if(ActiveEvent.PerksAvailableList.length > 0)
|
||||
{
|
||||
CachedItems.PerksAvailableData = KFGameReplicationInfo(GameReplicationInfo).PerksAvailableData;
|
||||
}
|
||||
|
||||
CachedItems.GameAmmoCostScale = KFGameReplicationInfo(GameReplicationInfo).GameAmmoCostScale;
|
||||
CachedItems.bAllowGrenadePurchase = KFGameReplicationInfo(GameReplicationInfo).bAllowGrenadePurchase;
|
||||
CachedItems.bTradersEnabled = KFGameReplicationInfo(GameReplicationInfo).bTradersEnabled;
|
||||
@ -434,20 +506,54 @@ function CacheGRI()
|
||||
|
||||
function UpdateGRI()
|
||||
{
|
||||
local int i;
|
||||
local KFGameReplicationInfo KFGRI;
|
||||
|
||||
CacheGRI();
|
||||
|
||||
//This should have just been spawned in the super
|
||||
if (GameReplicationInfo != none && KFGameReplicationInfo(GameReplicationInfo) != none)
|
||||
{
|
||||
KFGRI = KFGameReplicationInfo(GameReplicationInfo);
|
||||
|
||||
if (ActiveEvent.TraderWeaponList != none)
|
||||
{
|
||||
KFGameReplicationInfo(GameReplicationInfo).TraderItems = ActiveEvent.TraderWeaponList;
|
||||
KFGRI.TraderItems = ActiveEvent.TraderWeaponList;
|
||||
}
|
||||
|
||||
KFGameReplicationInfo(GameReplicationInfo).GameAmmoCostScale = ActiveEvent.GlobalAmmoCostScale;
|
||||
KFGameReplicationInfo(GameReplicationInfo).bAllowGrenadePurchase = !ActiveEvent.bDisableGrenades;
|
||||
KFGameReplicationInfo(GameReplicationInfo).bTradersEnabled = !ActiveEvent.bDisableTraders;
|
||||
KFGameReplicationInfo(GameReplicationInfo).MaxPerkLevel = ActiveEvent.MaxPerkLevel;
|
||||
if(ActiveEvent.PerksAvailableList.length > 0)
|
||||
{
|
||||
KFGRI.PerksAvailableData.bPerksAvailableLimited = true;
|
||||
KFGRI.PerksAvailableData.bBerserkerAvailable = false;
|
||||
KFGRI.PerksAvailableData.bCommandoAvailable = false;
|
||||
KFGRI.PerksAvailableData.bSupportAvailable = false;
|
||||
KFGRI.PerksAvailableData.bFieldMedicAvailable = false;
|
||||
KFGRI.PerksAvailableData.bDemolitionistAvailable = false;
|
||||
KFGRI.PerksAvailableData.bFirebugAvailable = false;
|
||||
KFGRI.PerksAvailableData.bGunslingerAvailable = false;
|
||||
KFGRI.PerksAvailableData.bSharpshooterAvailable = false;
|
||||
KFGRI.PerksAvailableData.bSwatAvailable = false;
|
||||
KFGRI.PerksAvailableData.bSurvivalistAvailable = false;
|
||||
|
||||
for(i=0 ; i<ActiveEvent.PerksAvailableList.length ; i++)
|
||||
{
|
||||
if(ActiveEvent.PerksAvailableList[i] == class'KFPerk_Berserker') KFGRI.PerksAvailableData.bBerserkerAvailable = true;
|
||||
else if(ActiveEvent.PerksAvailableList[i] == class'KFPerk_Commando') KFGRI.PerksAvailableData.bCommandoAvailable = true;
|
||||
else if(ActiveEvent.PerksAvailableList[i] == class'KFPerk_Support') KFGRI.PerksAvailableData.bSupportAvailable = true;
|
||||
else if(ActiveEvent.PerksAvailableList[i] == class'KFPerk_FieldMedic') KFGRI.PerksAvailableData.bFieldMedicAvailable = true;
|
||||
else if(ActiveEvent.PerksAvailableList[i] == class'KFPerk_Demolitionist') KFGRI.PerksAvailableData.bDemolitionistAvailable = true;
|
||||
else if(ActiveEvent.PerksAvailableList[i] == class'KFPerk_Firebug') KFGRI.PerksAvailableData.bFirebugAvailable = true;
|
||||
else if(ActiveEvent.PerksAvailableList[i] == class'KFPerk_Gunslinger') KFGRI.PerksAvailableData.bGunslingerAvailable = true;
|
||||
else if(ActiveEvent.PerksAvailableList[i] == class'KFPerk_Sharpshooter') KFGRI.PerksAvailableData.bSharpshooterAvailable = true;
|
||||
else if(ActiveEvent.PerksAvailableList[i] == class'KFPerk_Swat') KFGRI.PerksAvailableData.bSwatAvailable = true;
|
||||
else if(ActiveEvent.PerksAvailableList[i] == class'KFPerk_Survivalist') KFGRI.PerksAvailableData.bSurvivalistAvailable = true;
|
||||
}
|
||||
}
|
||||
|
||||
KFGRI.GameAmmoCostScale = ActiveEvent.GlobalAmmoCostScale;
|
||||
KFGRI.bAllowGrenadePurchase = !ActiveEvent.bDisableGrenades;
|
||||
KFGRI.bTradersEnabled = !ActiveEvent.bDisableTraders;
|
||||
KFGRI.MaxPerkLevel = ActiveEvent.MaxPerkLevel;
|
||||
}
|
||||
}
|
||||
|
||||
@ -648,6 +754,11 @@ function AdjustMonsterDefaults(out KFPawn_Monster P)
|
||||
P.HitZones[HZI_HEAD].MaxGoreHealth = P.HitZones[HZI_HEAD].GoreHealth;
|
||||
P.SetShieldScale(ToAdjust.ShieldScale);
|
||||
|
||||
P.HealByKill = ToAdjust.HealByKill;
|
||||
P.HealByAssistance = ToAdjust.HealByAssistance;
|
||||
|
||||
P.InitialGroundSpeedModifier *= ToAdjust.InitialGroundSpeedModifierScale;
|
||||
|
||||
if (ToAdjust.bStartEnraged)
|
||||
{
|
||||
//If we aren't using the AI controller's spawn enrage, go into the pawn
|
||||
@ -703,9 +814,12 @@ function OnScoreKill(Pawn KilledPawn)
|
||||
function ApplyGlobalDamage()
|
||||
{
|
||||
local KFPawn_Human Pawn;
|
||||
local class<DamageType> DamageType;
|
||||
|
||||
DamageType = ActiveEvent.bGlobalDamageAffectsShield ? class'DmgType_Crushed' : class'KFDT_Falling';
|
||||
foreach WorldInfo.AllPawns(class'KFPawn_Human', Pawn)
|
||||
{
|
||||
Pawn.TakeDamage(OutbreakEvent.ActiveEvent.GlobalDamageTickAmount, none, Pawn.Location, vect(0, 0, 0), class'DmgType_Crushed');
|
||||
Pawn.TakeDamage(OutbreakEvent.ActiveEvent.GlobalDamageTickAmount, none, Pawn.Location, vect(0, 0, 0), DamageType);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2672,9 +2672,6 @@ event TakeDamage(int Damage, Controller InstigatedBy, vector HitLocation, vector
|
||||
OldHealth = Health;
|
||||
Super.TakeDamage(Damage, InstigatedBy, HitLocation, Momentum, DamageType, HitInfo, DamageCauser);
|
||||
|
||||
// using the passed in damage type instead of the hitfxinfo since that doesn't get updated when zero damage is done
|
||||
HandleAfflictionsOnHit(InstigatedBy, Normal(Momentum), class<KFDamageType>(DamageType), DamageCauser);
|
||||
|
||||
ActualDamage = OldHealth - Health;
|
||||
if( ActualDamage > 0 )
|
||||
{
|
||||
@ -3999,12 +3996,12 @@ simulated function KFSkinTypeEffects GetHitZoneSkinTypeEffects( int HitZoneIdx )
|
||||
*/
|
||||
simulated function AdjustAffliction(out float AfflictionPower);
|
||||
|
||||
function HandleAfflictionsOnHit(Controller DamageInstigator, vector HitDir, class<KFDamageType> DamageType, Actor DamageCauser)
|
||||
function HandleAfflictionsOnHit(Controller DamageInstigator, vector HitDir, class<DamageType> DamageType, Actor DamageCauser)
|
||||
{
|
||||
//Handle afflictions
|
||||
if (AfflictionHandler != None)
|
||||
{
|
||||
AfflictionHandler.NotifyTakeHit(DamageInstigator, HitDir, DamageType, DamageCauser);
|
||||
AfflictionHandler.NotifyTakeHit(DamageInstigator, HitDir, class<KFDamageType>(DamageType), DamageCauser);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -159,9 +159,9 @@ var float MinHealthPctToTriggerSurrounded;
|
||||
********************************************************************************************* */
|
||||
var array<string> ActiveSkillIconPaths;
|
||||
|
||||
var private byte HealingSpeedBoost;
|
||||
var private byte HealingDamageBoost;
|
||||
var private byte HealingShield;
|
||||
var repnotify private byte HealingSpeedBoost;
|
||||
var repnotify private byte HealingDamageBoost;
|
||||
var repnotify private byte HealingShield;
|
||||
|
||||
var transient KFExplosion_AirborneAgent AAExplosionActor;
|
||||
|
||||
@ -359,9 +359,17 @@ simulated event ReplicatedEvent(name VarName)
|
||||
case nameof(PowerUpFxStopInfo):
|
||||
StopPowerUpEffect(PowerUpFxStopInfo);
|
||||
break;
|
||||
case nameof(HealingSpeedBoost):
|
||||
NotifyHealingSpeedBoostBuff(HealingSpeedBoost);
|
||||
break;
|
||||
case nameof(HealingDamageBoost):
|
||||
NotifyHealingDamageBoostBuff(HealingDamageBoost);
|
||||
break;
|
||||
case nameof(HealingShield):
|
||||
NotifyHealingShieldBoostBuff(HealingShield);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
Super.ReplicatedEvent(VarName);
|
||||
}
|
||||
|
||||
@ -436,6 +444,7 @@ simulated function OnCharacterMeshChanged()
|
||||
function AddDefaultInventory()
|
||||
{
|
||||
local KFPerk MyPerk;
|
||||
local KFGameInfo GameInfo;
|
||||
|
||||
MyPerk = GetPerk();
|
||||
|
||||
@ -447,7 +456,12 @@ function AddDefaultInventory()
|
||||
/** DefaultInventory.AddItem(class<Weapon>(DynamicLoadObject("KFGameContent.KFWeap_Pistol_9mm", class'Class')));
|
||||
Loading the secondary weapon in the perk again */
|
||||
|
||||
DefaultInventory.AddItem(class<Weapon>(DynamicLoadObject("KFGameContent.KFWeap_Healer_Syringe", class'Class')));
|
||||
GameInfo = KFGameInfo(WorldInfo.Game);
|
||||
if(GameInfo.OutbreakEvent == none || !GameInfo.OutbreakEvent.ActiveEvent.bCannotBeHealed)
|
||||
{
|
||||
DefaultInventory.AddItem(class<Weapon>(DynamicLoadObject("KFGameContent.KFWeap_Healer_Syringe", class'Class')));
|
||||
}
|
||||
|
||||
DefaultInventory.AddItem(class<Weapon>(DynamicLoadObject("KFGameContent.KFWeap_Welder", class'Class')));
|
||||
DefaultInventory.AddItem(class<Inventory>(DynamicLoadObject("KFGameContent.KFInventory_Money", class'Class')));
|
||||
|
||||
@ -675,18 +689,9 @@ event bool HealDamage(int Amount, Controller Healer, class<DamageType> DamageTyp
|
||||
event bool HealDamage(int Amount, Controller Healer, class<DamageType> DamageType)
|
||||
`endif
|
||||
{
|
||||
local int DoshEarned;
|
||||
local float UsedHealAmount;
|
||||
local KFPlayerReplicationInfo InstigatorPRI;
|
||||
local KFPlayerController InstigatorPC, KFPC;
|
||||
local KFPerk InstigatorPerk;
|
||||
local KFPlayerController KFPC;
|
||||
local KFPowerUp KFPowerUp;
|
||||
local class<KFDamageType> KFDT;
|
||||
local int i;
|
||||
local bool bRepairedArmor;
|
||||
local int OldHealth;
|
||||
|
||||
OldHealth = Health;
|
||||
local KFGameInfo GameInfo;
|
||||
|
||||
KFPC = KFPlayerController(Controller);
|
||||
if ( KFPC != none )
|
||||
@ -698,6 +703,30 @@ event bool HealDamage(int Amount, Controller Healer, class<DamageType> DamageTyp
|
||||
}
|
||||
}
|
||||
|
||||
GameInfo = KFGameInfo(WorldInfo.Game);
|
||||
if (GameInfo.OutbreakEvent != none && GameInfo.OutbreakEvent.ActiveEvent.bCannotBeHealed)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return HealDamageForce(Amount, Healer, DamageType, bCanRepairArmor, bMessageHealer);
|
||||
}
|
||||
|
||||
|
||||
event bool HealDamageForce(int Amount, Controller Healer, class<DamageType> DamageType, optional bool bCanRepairArmor=true, optional bool bMessageHealer=true)
|
||||
{
|
||||
local int DoshEarned;
|
||||
local float UsedHealAmount;
|
||||
local KFPlayerReplicationInfo InstigatorPRI;
|
||||
local KFPlayerController InstigatorPC, KFPC;
|
||||
local KFPerk InstigatorPerk;
|
||||
local class<KFDamageType> KFDT;
|
||||
local int i;
|
||||
local bool bRepairedArmor;
|
||||
local int OldHealth;
|
||||
|
||||
OldHealth = Health;
|
||||
|
||||
InstigatorPC = KFPlayerController(Healer);
|
||||
InstigatorPerk = InstigatorPC != None ? InstigatorPC.GetPerk() : None;
|
||||
if( InstigatorPerk != None )
|
||||
@ -1260,6 +1289,7 @@ event TakeDamage(int Damage, Controller InstigatedBy, vector HitLocation, vector
|
||||
{
|
||||
local int ActualDamageTaken, OldHealth;
|
||||
//local KFGameInfo KFGI;
|
||||
local KFGameReplicationInfo KFGRI;
|
||||
local KFPlayerReplicationInfo KFPRI;
|
||||
local KFAIController_ZedBoss InstigatedByBoss;
|
||||
|
||||
@ -1272,6 +1302,12 @@ event TakeDamage(int Damage, Controller InstigatedBy, vector HitLocation, vector
|
||||
|
||||
`log(GetFuncName()@"Damage AFTER ="$ActualDamageTaken$" DamageType: "$DamageType$" DamageCauser: "$DamageCauser, bLogTakeDamage);
|
||||
|
||||
KFGRI = KFGameReplicationInfo(KFGameInfo(WorldInfo.Game).GameReplicationInfo);
|
||||
if( Damage > 0 && IsAliveAndWell() && !KFGRI.bTraderIsOpen )
|
||||
{
|
||||
KFPlayerController(Controller).NotifyHitTaken();
|
||||
}
|
||||
|
||||
if( ActualDamageTaken > 0 && IsAliveAndWell() )
|
||||
{
|
||||
CheckAndEndActiveEMoteSpecialMove();
|
||||
@ -1396,6 +1432,11 @@ simulated function UpdateHealingSpeedBoost()
|
||||
{
|
||||
HealingSpeedBoost = Min( HealingSpeedBoost + class'KFPerk_FieldMedic'.static.GetHealingSpeedBoost(), class'KFPerk_FieldMedic'.static.GetMaxHealingSpeedBoost() );
|
||||
SetTimer( class'KFPerk_FieldMedic'.static.GetHealingSpeedBoostDuration(),, nameOf(ResetHealingSpeedBoost) );
|
||||
|
||||
if ( WorldInfo.NetMode == NM_STANDALONE)
|
||||
{
|
||||
NotifyHealingSpeedBoostBuff(HealingSpeedBoost);
|
||||
}
|
||||
}
|
||||
|
||||
simulated function ResetHealingSpeedBoost()
|
||||
@ -1406,6 +1447,11 @@ simulated function ResetHealingSpeedBoost()
|
||||
{
|
||||
ClearTimer( nameOf( ResetHealingSpeedBoost ) );
|
||||
}
|
||||
|
||||
if ( WorldInfo.NetMode == NM_STANDALONE)
|
||||
{
|
||||
NotifyHealingSpeedBoostBuff(HealingSpeedBoost);
|
||||
}
|
||||
}
|
||||
|
||||
simulated function float GetHealingDamageBoostModifier()
|
||||
@ -1417,6 +1463,11 @@ simulated function UpdateHealingDamageBoost()
|
||||
{
|
||||
HealingDamageBoost = Min( HealingDamageBoost + class'KFPerk_FieldMedic'.static.GetHealingDamageBoost(), class'KFPerk_FieldMedic'.static.GetMaxHealingDamageBoost() );
|
||||
SetTimer( class'KFPerk_FieldMedic'.static.GetHealingDamageBoostDuration(),, nameOf(ResetHealingDamageBoost) );
|
||||
|
||||
if ( WorldInfo.NetMode == NM_STANDALONE)
|
||||
{
|
||||
NotifyHealingDamageBoostBuff(HealingDamageBoost);
|
||||
}
|
||||
}
|
||||
|
||||
simulated function ResetHealingDamageBoost()
|
||||
@ -1427,6 +1478,11 @@ simulated function ResetHealingDamageBoost()
|
||||
{
|
||||
ClearTimer( nameOf( ResetHealingDamageBoost ) );
|
||||
}
|
||||
|
||||
if ( WorldInfo.NetMode == NM_STANDALONE)
|
||||
{
|
||||
NotifyHealingDamageBoostBuff(HealingDamageBoost);
|
||||
}
|
||||
}
|
||||
|
||||
simulated function float GetHealingShieldModifier()
|
||||
@ -1438,6 +1494,11 @@ simulated function UpdateHealingShield()
|
||||
{
|
||||
HealingShield = Min( HealingShield + class'KFPerk_FieldMedic'.static.GetHealingShield(), class'KFPerk_FieldMedic'.static.GetMaxHealingShield() );
|
||||
SetTimer( class'KFPerk_FieldMedic'.static.GetHealingShieldDuration(),, nameOf(ResetHealingShield) );
|
||||
|
||||
if ( WorldInfo.NetMode == NM_STANDALONE)
|
||||
{
|
||||
NotifyHealingShieldBoostBuff(HealingShield);
|
||||
}
|
||||
}
|
||||
|
||||
simulated function ResetHealingShield()
|
||||
@ -1448,6 +1509,11 @@ simulated function ResetHealingShield()
|
||||
{
|
||||
ClearTimer( nameOf( ResetHealingShield ) );
|
||||
}
|
||||
|
||||
if ( WorldInfo.NetMode == NM_STANDALONE)
|
||||
{
|
||||
NotifyHealingShieldBoostBuff(HealingShield);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1964,6 +2030,68 @@ simulated function DisplayDebug(HUD HUD, out float out_YL, out float out_YPos)
|
||||
}
|
||||
}
|
||||
|
||||
simulated function NotifyHealingSpeedBoostBuff(byte Speed)
|
||||
{
|
||||
if( Role == ROLE_Authority )
|
||||
{
|
||||
HealingSpeedBoost = Speed;
|
||||
bForceNetUpdate = true;
|
||||
}
|
||||
|
||||
if( IsLocallyControlled() )
|
||||
{
|
||||
UpdateActiveSkillsPath(class'KFPerk_FieldMedic'.default.PerkSkills[EMedicHealingSpeedBoost].IconPath, Speed > 0.0f);
|
||||
}
|
||||
}
|
||||
|
||||
simulated function NotifyHealingDamageBoostBuff(byte Damage)
|
||||
{
|
||||
if( Role == ROLE_Authority )
|
||||
{
|
||||
HealingSpeedBoost = Damage;
|
||||
bForceNetUpdate = true;
|
||||
}
|
||||
|
||||
if( IsLocallyControlled() )
|
||||
{
|
||||
UpdateActiveSkillsPath(class'KFPerk_FieldMedic'.default.PerkSkills[EMedicHealingDamageBoost].IconPath, Damage > 0.0f);
|
||||
}
|
||||
}
|
||||
|
||||
simulated function NotifyHealingShieldBoostBuff(byte Shield)
|
||||
{
|
||||
if( Role == ROLE_Authority )
|
||||
{
|
||||
HealingSpeedBoost = Shield;
|
||||
bForceNetUpdate = true;
|
||||
}
|
||||
|
||||
if( IsLocallyControlled() )
|
||||
{
|
||||
UpdateActiveSkillsPath(class'KFPerk_FieldMedic'.default.PerkSkills[EMedicHealingShield].IconPath, Shield > 0.0f);
|
||||
}
|
||||
}
|
||||
|
||||
function UpdateActiveSkillsPath(string IconPath, bool Active)
|
||||
{
|
||||
local KFPlayerController KFPC;
|
||||
|
||||
if(Active)
|
||||
{
|
||||
if (ActiveSkillIconPaths.Find(IconPath) == INDEX_NONE)
|
||||
{
|
||||
ActiveSkillIconPaths.AddItem(IconPath);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ActiveSkillIconPaths.RemoveItem(IconPath);
|
||||
}
|
||||
|
||||
KFPC = KFPlayerController(Controller);
|
||||
KFPC.MyGFxHUD.PlayerStatusContainer.ShowActiveIndicators(ActiveSkillIconPaths);
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
Begin Object Class=KFFlashlightAttachment name=Flashlight_0
|
||||
|
@ -88,6 +88,10 @@ var private const float XPValues[4];
|
||||
/** List of sockets representing weakpoint zone locations */
|
||||
var() array<name> WeakSpotSocketNames;
|
||||
|
||||
/** Heal after die */
|
||||
var int HealByKill;
|
||||
var int HealByAssistance;
|
||||
|
||||
/**
|
||||
* Information on resistant or vulnerable damage types
|
||||
* @todo: This is all static data so we should consider moving to the archetype
|
||||
@ -318,8 +322,11 @@ var protected const float BlockSprintSpeedModifier;
|
||||
/** The last time a successful block ended */
|
||||
var transient float LastBlockTime;
|
||||
|
||||
/** Multiplier applied to the vortex attraction force */
|
||||
var protected float VortexAttracionModifier;
|
||||
|
||||
var float KnockedDownBySonicWaveOdds;
|
||||
var bool bCloakOnMeleeEnd;
|
||||
var bool bCloakOnMeleeEnd;
|
||||
var bool bIsCloakingSpottedByLP;
|
||||
var repnotify bool bIsCloakingSpottedByTeam;
|
||||
var float LastSpottedStatusUpdate;
|
||||
@ -2368,6 +2375,11 @@ function BleedOutTimer()
|
||||
}
|
||||
}
|
||||
|
||||
function float GetVortexAttractionModifier ()
|
||||
{
|
||||
return VortexAttracionModifier;
|
||||
}
|
||||
|
||||
/** Applies the rally buff and spawns a rally effect */
|
||||
simulated function bool Rally(
|
||||
KFPawn RallyInstigator,
|
||||
@ -4852,4 +4864,6 @@ DefaultProperties
|
||||
Components.Add(HeadshotAkComponent0)
|
||||
|
||||
bSprintOverride=false
|
||||
|
||||
VortexAttracionModifier=1.0f
|
||||
}
|
||||
|
@ -443,4 +443,6 @@ defaultproperties
|
||||
SpeedLimitScalar=1.30
|
||||
|
||||
bCanBePinned=false
|
||||
|
||||
VortexAttracionModifier=0.3f
|
||||
}
|
@ -189,6 +189,17 @@ var float HeadshotAccuracyHandicap;
|
||||
|
||||
var array<string> PrestigeRewardItemIconPaths;
|
||||
|
||||
/*********************************************************************************************
|
||||
* Transient vars
|
||||
********************************************************************************************* */
|
||||
/**
|
||||
Indicates if the last hit was a headshot.
|
||||
This is added for the crossbow to apply the stun on enemies only if hit in the head.
|
||||
Afflictions are calculated after adjusting the damage, so the bone is not necessary
|
||||
indicating a headshot anymore.
|
||||
*/
|
||||
var transient bool bWasLastHitAHeadshot;
|
||||
|
||||
/*********************************************************************************************
|
||||
* Caching
|
||||
********************************************************************************************* */
|
||||
@ -461,6 +472,17 @@ static function bool IsBackupWeapon( KFWeapon KFW )
|
||||
return KFW != none && KFW.default.bIsBackupWeapon;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Return if a weapon is Dual 9mm
|
||||
*
|
||||
* @param KFW Weapon to check
|
||||
* @return true if backup weapon
|
||||
*/
|
||||
static function bool IsDual9mm( KFWeapon KFW )
|
||||
{
|
||||
return KFW != none && KFW.Class.Name == 'KFWeap_Pistol_Dual9mm';
|
||||
}
|
||||
|
||||
/*********************************************************************************************
|
||||
* @name Build / Level Management - Apply and save the updated build and level
|
||||
********************************************************************************************* */
|
||||
@ -934,13 +956,18 @@ function AddDefaultInventory( KFPawn P )
|
||||
{
|
||||
P.DefaultInventory.AddItem(class<Weapon>(DynamicLoadObject(GetPrimaryWeaponClassPath(), class'Class')));
|
||||
}
|
||||
|
||||
if(KFGameInfo(WorldInfo.Game).AllowSecondaryWeapon(GetSecondaryWeaponClassPath()))
|
||||
{
|
||||
P.DefaultInventory.AddItem(class<Weapon>(DynamicLoadObject(GetSecondaryWeaponClassPath(), class'Class')));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
P.DefaultInventory.AddItem(class<Weapon>(DynamicLoadObject(GetPrimaryWeaponClassPath(), class'Class')));
|
||||
P.DefaultInventory.AddItem(class<Weapon>(DynamicLoadObject(GetSecondaryWeaponClassPath(), class'Class')));
|
||||
}
|
||||
// Secondary weapon is spawned through the pawn unless we want an additional one not anymore
|
||||
P.DefaultInventory.AddItem(class<Weapon>(DynamicLoadObject(GetSecondaryWeaponClassPath(), class'Class')));
|
||||
|
||||
P.DefaultInventory.AddItem(class<Weapon>(DynamicLoadObject(GetKnifeWeaponClassPath(), class'Class')));
|
||||
}
|
||||
}
|
||||
@ -1073,8 +1100,7 @@ simulated function ModifySprintSpeed( out float Speed ){ ModifySpeed( Speed ); }
|
||||
function FinalizeSpeedVariables();
|
||||
/** Kickback - recaoil bonus */
|
||||
simulated function ModifyRecoil( out float CurrentRecoilModifier, KFWeapon KFW );
|
||||
/** Allow perk to adjust damage given */
|
||||
function ModifyDamageGiven( out int InDamage, optional Actor DamageCauser, optional KFPawn_Monster MyKFPM, optional KFPlayerController DamageInstigator, optional class<KFDamageType> DamageType, optional int HitZoneIdx );
|
||||
/** Allows to modify the damage taken */
|
||||
function ModifyDamageTaken( out int InDamage, optional class<DamageType> DamageType, optional Controller InstigatedBy );
|
||||
/** Ammunition capacity and mag count increased */
|
||||
simulated function ModifyMagSizeAndNumber( KFWeapon KFW, out int MagazineCapacity, optional array< Class<KFPerk> > WeaponPerkClass, optional bool bSecondary=false, optional name WeaponClassname );
|
||||
@ -1092,6 +1118,7 @@ static simulated function float GetZedTimeExtension( byte Level ){ return 1.0f;
|
||||
function float GetKnockdownPowerModifier( optional class<DamageType> DamageType, optional byte BodyPart, optional bool bIsSprinting=false ){ return 0.f; }
|
||||
function float GetStumblePowerModifier( optional KFPawn KFP, optional class<KFDamageType> DamageType, optional out float CooldownModifier, optional byte BodyPart ){ return 0.f; }
|
||||
function float GetStunPowerModifier( optional class<DamageType> DamageType, optional byte HitZoneIdx ){ return 0.f; }
|
||||
function bool IsStunGuaranteed( optional class<DamageType> DamageType, optional byte HitZoneIdx ){ return false; }
|
||||
function float GetReactionModifier( optional class<KFDamageType> DamageType ){ return 1.f; }
|
||||
simulated function float GetSnareSpeedModifier() { return 1.f; }
|
||||
simulated function float GetSnarePowerModifier( optional class<DamageType> DamageType, optional byte HitZoneIdx ){ return 1.f; }
|
||||
@ -1199,9 +1226,6 @@ simulated function int GetArmorDamageAmount( int AbsorbedAmt ) { return Absorbed
|
||||
simulated event float GetZedTimeSpeedScale() { return 1.f; }
|
||||
|
||||
|
||||
/** Survivalist dunctions */
|
||||
simulated function bool GetIncapMasterActive(){ return false; }
|
||||
|
||||
static function ModifyAssistDosh( out int EarnedDosh )
|
||||
{
|
||||
local float TempDosh;
|
||||
@ -1304,6 +1328,7 @@ function TickRegen( float DeltaTime )
|
||||
local KFPlayerController KFPC;
|
||||
local KFPowerUp PowerUp;
|
||||
local bool bCannotBeHealed;
|
||||
local KFGameInfo GameInfo;
|
||||
|
||||
TimeUntilNextRegen -= DeltaTime;
|
||||
if( TimeUntilNextRegen <= 0.f )
|
||||
@ -1314,9 +1339,12 @@ function TickRegen( float DeltaTime )
|
||||
if( KFPC != none )
|
||||
{
|
||||
PowerUp = KFPC.GetPowerUp();
|
||||
bCannotBeHealed = PowerUp != none && !PowerUp.CanBeHealedWhilePowerUpIsActive;
|
||||
bCannotBeHealed = PowerUp != none && !PowerUp.CanBeHealed();
|
||||
}
|
||||
|
||||
GameInfo = KFGameInfo(WorldInfo.Game);
|
||||
bCannotBeHealed = bCannotBeHealed || (GameInfo.OutbreakEvent != none && GameInfo.OutbreakEvent.ActiveEvent.bCannotBeHealed);
|
||||
|
||||
// If the Pawn cannot be healed return...
|
||||
if( bCannotBeHealed )
|
||||
{
|
||||
@ -1372,6 +1400,12 @@ simulated function class<KFWeaponDefinition> GetGrenadeWeaponDef()
|
||||
return default.GrenadeWeaponDef;
|
||||
}
|
||||
|
||||
/** Allow perk to adjust damage given */
|
||||
function ModifyDamageGiven( out int InDamage, optional Actor DamageCauser, optional KFPawn_Monster MyKFPM, optional KFPlayerController DamageInstigator, optional class<KFDamageType> DamageType, optional int HitZoneIdx )
|
||||
{
|
||||
bWasLastHitAHeadshot = MyKFPM != none && HitZoneIdx == HZI_HEAD;
|
||||
}
|
||||
|
||||
/*********************************************************************************************
|
||||
* @name Debug
|
||||
********************************************************************************************* */
|
||||
@ -1485,4 +1519,6 @@ DefaultProperties
|
||||
AssistDoshModifier=1.f
|
||||
|
||||
PrestigeRewardItemIconPaths[0]="Xmas_UI.UI_Objectives_Xmas_Krampus"
|
||||
|
||||
bWasLastHitAHeadshot=false
|
||||
}
|
||||
|
@ -53,6 +53,11 @@ enum EBerserkPerkSkills
|
||||
EBerserkerSpartan
|
||||
};
|
||||
|
||||
/** The last time a zed was bumped using battering ram */
|
||||
var float LastBumpTime;
|
||||
/** The unique list of actors that have been bumped before the last cooldown reset */
|
||||
var array<Actor> CurrentBumpedActors;
|
||||
|
||||
cpptext
|
||||
{
|
||||
// specific abilities
|
||||
@ -71,7 +76,7 @@ function ApplySkillsToPawn()
|
||||
|
||||
if( OwnerPawn != none )
|
||||
{
|
||||
OwnerPawn.bMovesFastInZedTime = IsFastInZedTime();
|
||||
OwnerPawn.bMovesFastInZedTime = IsFastInZedTime() || IsSWATEnforcerActiveForWeekly();
|
||||
}
|
||||
}
|
||||
|
||||
@ -112,13 +117,17 @@ reliable client function ClientClearPerkEffects()
|
||||
event Tick( float DeltaTime )
|
||||
{
|
||||
super.Tick( DeltaTime );
|
||||
|
||||
if( IsNinjaActive() )
|
||||
{
|
||||
TickRegen( DeltaTime );
|
||||
}
|
||||
}
|
||||
|
||||
simulated event float GetZedTimeSpeedScale()
|
||||
{
|
||||
return GetZedTimeSpeedScaleForColliseum();
|
||||
}
|
||||
|
||||
/*********************************************************************************************
|
||||
* @name Passive skills functions
|
||||
********************************************************************************************* */
|
||||
@ -136,6 +145,8 @@ simulated function ModifyDamageGiven( out int InDamage, optional Actor DamageCau
|
||||
local KFWeapon MyKFWeapon;
|
||||
local float TempDamage;
|
||||
|
||||
super.ModifyDamageGiven(InDamage, DamageCauser, MyKFPM, DamageInstigator, DamageType, HitZoneIdx);
|
||||
|
||||
TempDamage = InDamage;
|
||||
|
||||
if( DamageCauser != none )
|
||||
@ -540,6 +551,7 @@ function NotifyZedTimeStarted()
|
||||
local KFPlayerController KFPC;
|
||||
local KFPowerUp PowerUp;
|
||||
local KFAIController KFAIC;
|
||||
local KFGameInfo GameInfo;
|
||||
local bool bScaredAI;
|
||||
local bool bCannotBeHealed;
|
||||
|
||||
@ -549,9 +561,15 @@ function NotifyZedTimeStarted()
|
||||
if( KFPC != none )
|
||||
{
|
||||
PowerUp = KFPC.GetPowerUp();
|
||||
bCannotBeHealed = PowerUp != none && !PowerUp.CanBeHealedWhilePowerUpIsActive;
|
||||
bCannotBeHealed = (PowerUp != none && !PowerUp.CanBeHealedWhilePowerUpIsActive);
|
||||
|
||||
GameInfo = KFGameInfo(WorldInfo.Game);
|
||||
if(GameInfo != none)
|
||||
{
|
||||
bCannotBeHealed = bCannotBeHealed ||(GameInfo.OutbreakEvent != none && GameInfo.OutbreakEvent.ActiveEvent.bCannotBeHealed);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if( bCannotBeHealed == false )
|
||||
{
|
||||
OwnerPawn.Health += OwnerPawn.HealthMax * GetSkillValue( PerkSkills[EBerserkerRage] );
|
||||
@ -637,11 +655,11 @@ private static function float GetParryDamageModifier()
|
||||
{
|
||||
return default.ParryDamageReduction;
|
||||
}
|
||||
|
||||
/*********************************************************************************************
|
||||
* @name Getters / Setters
|
||||
********************************************************************************************* */
|
||||
|
||||
|
||||
/**
|
||||
* @brief Checks if the fortitude skill is active
|
||||
*
|
||||
@ -789,7 +807,7 @@ function bool CanNotBeGrabbed()
|
||||
*/
|
||||
simulated private event bool IsRageActive()
|
||||
{
|
||||
return PerkSkills[EBerserkerRage].bActive && WorldInfo.TimeDilation < 1.f && IsPerkLevelAllowed(EBerserkerRage);
|
||||
return PerkSkills[EBerserkerRage].bActive && WorldInfo.TimeDilation < 1.f && IsPerkLevelAllowed(EBerserkerRage) && !ShouldDisableZedTimeSkillsForWeekly();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -799,12 +817,12 @@ simulated private event bool IsRageActive()
|
||||
*/
|
||||
simulated final private event bool IsSpartanActive()
|
||||
{
|
||||
return PerkSkills[EBerserkerSpartan].bActive && WorldInfo.TimeDilation < 1.f && IsPerkLevelAllowed(EBerserkerSpartan);
|
||||
return PerkSkills[EBerserkerSpartan].bActive && WorldInfo.TimeDilation < 1.f && IsPerkLevelAllowed(EBerserkerSpartan) && !ShouldDisableZedTimeSkillsForWeekly();
|
||||
}
|
||||
|
||||
simulated private event bool CouldSpartanBeActive()
|
||||
{
|
||||
return PerkSkills[EBerserkerSpartan].bActive && IsPerkLevelAllowed(EBerserkerSpartan);
|
||||
return PerkSkills[EBerserkerSpartan].bActive && IsPerkLevelAllowed(EBerserkerSpartan) && !ShouldDisableZedTimeSkillsForWeekly();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -814,7 +832,12 @@ simulated private event bool CouldSpartanBeActive()
|
||||
*/
|
||||
simulated function bool IsFastInZedTime()
|
||||
{
|
||||
return PerkSkills[EBerserkerSpartan].bActive && IsPerkLevelAllowed(EBerserkerSpartan);
|
||||
return PerkSkills[EBerserkerSpartan].bActive && IsPerkLevelAllowed(EBerserkerSpartan) && !ShouldDisableZedTimeSkillsForWeekly();
|
||||
}
|
||||
|
||||
simulated function bool IsFastInZedTimeOutbreak()
|
||||
{
|
||||
return ShouldDisableZedTimeSkillsForWeekly();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -825,7 +848,7 @@ simulated function bool IsFastInZedTime()
|
||||
*/
|
||||
simulated event bool ShouldUseFastInstigatorDilation(KFWeapon Weap)
|
||||
{
|
||||
if (PerkSkills[EBerserkerSpartan].bActive && Weap != none && IsPerkLevelAllowed(EBerserkerSpartan))
|
||||
if (PerkSkills[EBerserkerSpartan].bActive && Weap != none && IsPerkLevelAllowed(EBerserkerSpartan) && !ShouldDisableZedTimeSkillsForWeekly())
|
||||
{
|
||||
return Weap.GetWeaponPerkClass(default.Class) == default.Class;
|
||||
}
|
||||
@ -833,6 +856,75 @@ simulated event bool ShouldUseFastInstigatorDilation(KFWeapon Weap)
|
||||
return false;
|
||||
}
|
||||
|
||||
/*********************************************************************************************
|
||||
* @name Special Weekly Modes
|
||||
********************************************************************************************* */
|
||||
|
||||
simulated event float GetZedTimeSpeedScaleForColliseum()
|
||||
{
|
||||
return IsSWATEnforcerActiveForWeekly() ? class'KFPerk_Swat'.default.SWATEnforcerZedTimeSpeedScale : 1.f;
|
||||
}
|
||||
|
||||
function bool ShouldDisableZedTimeSkillsForWeekly()
|
||||
{
|
||||
return MyKFGI != none && MyKFGI.OutbreakEvent != none && MyKFGI.OutbreakEvent.ActiveEvent.bColliseumSkillConditionsActive;
|
||||
}
|
||||
|
||||
function bool IsSWATEnforcerActiveForWeekly()
|
||||
{
|
||||
return MyKFGI != none && MyKFGI.OutbreakEvent != none && MyKFGI.OutbreakEvent.ActiveEvent.bColliseumSkillConditionsActive;
|
||||
}
|
||||
|
||||
simulated function bool ShouldKnockDownOnBump()
|
||||
{
|
||||
return IsSWATEnforcerActiveForWeekly() && WorldInfo.TimeDilation < 1.f;
|
||||
}
|
||||
|
||||
simulated function OnBump(Actor BumpedActor, KFPawn_Human BumpInstigator, vector BumpedVelocity, rotator BumpedRotation)
|
||||
{
|
||||
local KFPawn_Monster KFPM;
|
||||
local bool CanBump;
|
||||
|
||||
if (ShouldKnockDownOnBump() && Normal(BumpedVelocity) dot Vector(BumpedRotation) > 0.7f)
|
||||
{
|
||||
KFPM = KFPawn_Monster(BumpedActor);
|
||||
if (KFPM != none)
|
||||
{
|
||||
// cooldown so that the same zed can't be bumped multiple frames back to back
|
||||
// especially relevant if they can't be knocked down or stumbled so the player is always bumping them
|
||||
if (WorldInfo.TimeSeconds - LastBumpTime > class'KFPerk_Swat'.default.BumpCooldown)
|
||||
{
|
||||
CurrentBumpedActors.length = 0;
|
||||
CurrentBumpedActors.AddItem(BumpedActor);
|
||||
CanBump = true;
|
||||
}
|
||||
// if still within the cooldown time, can still bump the actor as long as it hasn't been bumped yet
|
||||
else if (CurrentBumpedActors.Find(BumpedActor) == INDEX_NONE)
|
||||
{
|
||||
CurrentBumpedActors.AddItem(BumpedActor);
|
||||
CanBump = true;
|
||||
}
|
||||
|
||||
LastBumpTime = WorldInfo.TimeSeconds;
|
||||
|
||||
if (CanBump)
|
||||
{
|
||||
if (KFPM.IsHeadless())
|
||||
{
|
||||
KFPM.TakeDamage(KFPM.HealthMax, BumpInstigator.Controller, BumpInstigator.Location,
|
||||
Normal(vector(BumpedRotation)) * class'KFPerk_Swat'.default.BumpMomentum, class'KFPerk_Swat'.default.BumpDamageType);
|
||||
}
|
||||
else
|
||||
{
|
||||
KFPM.TakeDamage(class'KFPerk_Swat'.default.BumpDamageAmount, BumpInstigator.Controller, BumpInstigator.Location,
|
||||
Normal(vector(BumpedRotation)) * class'KFPerk_Swat'.default.BumpMomentum, class'KFPerk_Swat'.default.BumpDamageType);
|
||||
KFPM.Knockdown(BumpedVelocity * 3, vect(1, 1, 1), KFPM.Location, 1000, 100);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*********************************************************************************************
|
||||
* @name UI / HUD
|
||||
********************************************************************************************* */
|
||||
@ -926,11 +1018,11 @@ DefaultProperties
|
||||
DamageResistance=(Name="Damage Resistance",Increment=0.03f,Rank=0,StartingValue=0.f,MaxValue=0.15f)
|
||||
NightVision=(Name="Night Vision",Increment=0.f,Rank=0,StartingValue=0.f,MaxValue=0.f)
|
||||
|
||||
PerkSkills(EBerserkerFortitude)=(Name="Fortitude",IconPath="UI_PerkTalent_TEX.berserker.UI_Talents_Berserker_Fortitude",Increment=0.f,Rank=0,StartingValue=0.75,MaxValue=0.75)
|
||||
PerkSkills(EBerserkerFortitude)=(Name="Fortitude",IconPath="UI_PerkTalent_TEX.berserker.UI_Talents_Berserker_Fortitude",Increment=0.f,Rank=0,StartingValue=1.0,MaxValue=1.0) //0.75
|
||||
PerkSkills(EBerserkerNinja)=(Name="Ninja",IconPath="UI_PerkTalent_TEX.berserker.UI_Talents_Berserker_Ninja",Increment=0.f,Rank=0,StartingValue=0.2f,MaxValue=0.2f)
|
||||
PerkSkills(EBerserkerVampire)=(Name="Vampire",IconPath="UI_PerkTalent_TEX.berserker.UI_Talents_Berserker_Vampire",Increment=0.f,Rank=0,StartingValue=4.f,MaxValue=4.f)
|
||||
PerkSkills(EBerserkerSpeed)=(Name="Speed",IconPath="UI_PerkTalent_TEX.berserker.UI_Talents_Berserker_Speed",Increment=0.f,Rank=0,StartingValue=0.2f,MaxValue=0.2f)
|
||||
PerkSkills(EBerserkerResistance)=(Name="Resistance",IconPath="UI_PerkTalent_TEX.berserker.UI_Talents_Berserker_PoisonResistance",Increment=0.f,Rank=0,StartingValue=0.2f,MaxValue=0.2f)
|
||||
PerkSkills(EBerserkerResistance)=(Name="Resistance",IconPath="UI_PerkTalent_TEX.berserker.UI_Talents_Berserker_PoisonResistance",Increment=0.f,Rank=0,StartingValue=0.25f,MaxValue=0.25f) //0.2
|
||||
PerkSkills(EBerserkerParry)=(Name="Parry",IconPath="UI_PerkTalent_TEX.berserker.UI_Talents_Berserker_Parry",Increment=0.f,Rank=0,StartingValue=0.35,MaxValue=0.35)
|
||||
PerkSkills(EBerserkerSmash)=(Name="Smash",IconPath="UI_PerkTalent_TEX.berserker.UI_Talents_Berserker_Smash",Increment=0.f,Rank=0,StartingValue=0.5f,MaxValue=0.5f)
|
||||
PerkSkills(EBerserkerFury)=(Name="Fury",IconPath="UI_PerkTalent_TEX.berserker.UI_Talents_Berserker_Intimidate",Increment=0.f,Rank=0,StartingValue=0.3f,MaxValue=0.3f)
|
||||
|
@ -74,6 +74,8 @@ simulated function ModifyDamageGiven( out int InDamage, optional Actor DamageCau
|
||||
{
|
||||
local KFWeapon KFW;
|
||||
local float TempDamage;
|
||||
|
||||
super.ModifyDamageGiven(InDamage, DamageCauser, MyKFPM, DamageInstigator, DamageType, HitZoneIdx);
|
||||
|
||||
TempDamage = InDamage;
|
||||
|
||||
@ -82,7 +84,7 @@ simulated function ModifyDamageGiven( out int InDamage, optional Actor DamageCau
|
||||
KFW = GetWeaponFromDamageCauser( DamageCauser );
|
||||
}
|
||||
|
||||
if( (KFW != none && IsWeaponOnPerk( KFW,, self.class )) || (DamageType != none && IsDamageTypeOnPerk( DamageType )) )
|
||||
if( (KFW != none && (IsWeaponOnPerk( KFW,, self.class ) || IsDual9mm(KFW) || Is9mm(KFW))) || (DamageType != none && IsDamageTypeOnPerk( DamageType )) )
|
||||
{
|
||||
TempDamage += InDamage * GetPassiveValue( WeaponDamage, CurrentLevel );
|
||||
if( IsRapidFireActive() )
|
||||
@ -97,7 +99,7 @@ simulated function ModifyDamageGiven( out int InDamage, optional Actor DamageCau
|
||||
// have the perks so tied into using that, it's easier to just specifically fix commando here.
|
||||
if( KFW != none && !DamageCauser.IsA('KFProj_Grenade'))
|
||||
{
|
||||
if( IsBackupActive() && (IsBackupWeapon( KFW ) || KFW.Class.Name == 'KFWeap_Pistol_Dual9mm') )
|
||||
if( IsBackupActive() && (IsBackupWeapon( KFW ) || IsDual9mm( KFW )) )
|
||||
{
|
||||
`QALog( "Backup Damage" @ KFW @ GetPercentage( InDamage, InDamage * GetSkillValue( PerkSkills[ECommandoBackup] )), bLogPerk );
|
||||
TempDamage += InDamage * GetSkillValue( PerkSkills[ECommandoBackup] );
|
||||
@ -234,7 +236,7 @@ function ModifyArmor( out byte MaxArmor )
|
||||
*/
|
||||
simulated function bool GetUsingTactialReload( KFWeapon KFW )
|
||||
{
|
||||
return ( IsTacticalReloadActive() && (IsWeaponOnPerk( KFW,, self.class ) || IsBackupWeapon( KFW )) );
|
||||
return ( IsTacticalReloadActive() && (IsWeaponOnPerk( KFW,, self.class ) || IsBackupWeapon( KFW ) || IsDual9mm( KFW )) );
|
||||
}
|
||||
|
||||
/**
|
||||
@ -278,7 +280,7 @@ simulated function ModifyMaxSpareAmmoAmount( KFWeapon KFW, out int MaxSpareAmmo,
|
||||
local float TempMaxSpareAmmoAmount;
|
||||
|
||||
if( IsAmmoVestActive() && (IsWeaponOnPerk( KFW, TraderItem.AssociatedPerkClasses, self.class ) ||
|
||||
IsBackupWeapon( KFW )) )
|
||||
IsBackupWeapon( KFW ) || IsDual9mm( KFW )) )
|
||||
{
|
||||
TempMaxSpareAmmoAmount = MaxSpareAmmo;
|
||||
TempMaxSpareAmmoAmount += MaxSpareAmmo * GetSkillValue( PerkSkills[ECommandoAmmoVest] );
|
||||
@ -302,7 +304,7 @@ simulated function float GetZedTimeModifier( KFWeapon W )
|
||||
local name StateName;
|
||||
StateName = W.GetStateName();
|
||||
|
||||
if( IsProfessionalActive() && (IsWeaponOnPerk( W,, self.class ) || IsBackupWeapon( W )) )
|
||||
if( IsProfessionalActive() && (IsWeaponOnPerk( W,, self.class ) || IsBackupWeapon( W ) || IsDual9mm( W )) )
|
||||
{
|
||||
if( StateName == 'Reloading' ||
|
||||
StateName == 'AltReloading' )
|
||||
@ -315,7 +317,7 @@ simulated function float GetZedTimeModifier( KFWeapon W )
|
||||
}
|
||||
}
|
||||
|
||||
if( CouldRapidFireActive() && (Is9mm(W) || IsWeaponOnPerk( W,, self.class )) && ZedTimeModifyingStates.Find( StateName ) != INDEX_NONE )
|
||||
if( CouldRapidFireActive() && (Is9mm(W) || IsDual9mm( W ) || IsWeaponOnPerk( W,, self.class )) && ZedTimeModifyingStates.Find( StateName ) != INDEX_NONE )
|
||||
{
|
||||
return RapidFireFiringRate;
|
||||
}
|
||||
|
@ -127,6 +127,8 @@ simulated function ModifyDamageGiven( out int InDamage, optional Actor DamageCau
|
||||
local KFWeapon KFW;
|
||||
local float TempDamage;
|
||||
|
||||
super.ModifyDamageGiven(InDamage, DamageCauser, MyKFPM, DamageInstigator, DamageType, HitZoneIdx);
|
||||
|
||||
if( DamageType != none && IsDamageIgnoredDT( DamageType ) )
|
||||
{
|
||||
return;
|
||||
@ -437,7 +439,7 @@ simulated protected function int GetAmmoExtraAmmo()
|
||||
*/
|
||||
simulated function bool GetUsingTactialReload(KFWeapon KFW)
|
||||
{
|
||||
return (IsTacticalReloadActive() && (IsWeaponOnPerk(KFW, , self.class) || IsBackupWeapon(KFW)) && TacticalReloadAsReloadRateClassNames.Find(KFW.class.Name) == INDEX_NONE);
|
||||
return (IsTacticalReloadActive() && (IsWeaponOnPerk(KFW, , self.class) || IsBackupWeapon(KFW) || IsDual9mm( KFW )) && TacticalReloadAsReloadRateClassNames.Find(KFW.class.Name) == INDEX_NONE);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -298,6 +298,8 @@ simulated function ModifyDamageGiven( out int InDamage, optional Actor DamageCau
|
||||
local KFWeapon KFW;
|
||||
local float TempDamage;
|
||||
|
||||
super.ModifyDamageGiven(InDamage, DamageCauser, MyKFPM, DamageInstigator, DamageType, HitZoneIdx);
|
||||
|
||||
TempDamage = InDamage;
|
||||
|
||||
if( DamageCauser != none )
|
||||
@ -646,7 +648,7 @@ DefaultProperties
|
||||
PerkBuildStatID=STATID_Medic_Build
|
||||
|
||||
SelfHealingSurgePct=0.1f
|
||||
MaxSurvivalistResistance=0.5f //0.8
|
||||
MaxSurvivalistResistance=0.70f //0.5f //0.8
|
||||
CombatantSpeedModifier=0.1f
|
||||
|
||||
MaxHealingSpeedBoost=30 //15 //50
|
||||
|
@ -82,6 +82,8 @@ simulated function ModifyDamageGiven( out int InDamage, optional Actor DamageCau
|
||||
local KFWeapon KFW;
|
||||
local float TempDamage;
|
||||
|
||||
super.ModifyDamageGiven(InDamage, DamageCauser, MyKFPM, DamageInstigator, DamageType, HitZoneIdx);
|
||||
|
||||
TempDamage = InDamage;
|
||||
|
||||
if( DamageCauser != none )
|
||||
|
@ -133,6 +133,8 @@ simulated function ModifyDamageGiven( out int InDamage, optional Actor DamageCau
|
||||
local KFWeapon KFW;
|
||||
local float TempDamage;
|
||||
|
||||
super.ModifyDamageGiven(InDamage, DamageCauser, MyKFPM, DamageInstigator, DamageType, HitZoneIdx);
|
||||
|
||||
TempDamage = InDamage;
|
||||
if( DamageCauser != none )
|
||||
{
|
||||
|
@ -125,6 +125,8 @@ simulated function ModifyDamageGiven( out int InDamage, optional Actor DamageCau
|
||||
local KFWeapon KFW;
|
||||
local float TempDamage;
|
||||
|
||||
super.ModifyDamageGiven(InDamage, DamageCauser, MyKFPM, DamageInstigator, DamageType, HitZoneIdx);
|
||||
|
||||
TempDamage = InDamage;
|
||||
|
||||
if( DamageCauser != none )
|
||||
@ -315,7 +317,7 @@ event Destroyed()
|
||||
simulated function bool GetUsingTactialReload( KFWeapon KFW )
|
||||
{
|
||||
`QALog( "Tactical Reload Active =" @ (IsTacticalReloadActive() && IsWeaponOnPerk( KFW,, self.class )), bLogPerk );
|
||||
return IsTacticalReloadActive() && (IsWeaponOnPerk( KFW, , self.class) || IsBackupWeapon( KFW ));
|
||||
return IsTacticalReloadActive() && (IsWeaponOnPerk( KFW, , self.class) || IsBackupWeapon( KFW ) || IsDual9mm( KFW ));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -324,23 +326,29 @@ simulated function bool GetUsingTactialReload( KFWeapon KFW )
|
||||
*/
|
||||
function float GetStunPowerModifier( optional class<DamageType> DamageType, optional byte HitZoneIdx )
|
||||
{
|
||||
if( IsDamageTypeOnPerk(class<KFDamageType>(DamageType)) )
|
||||
if( IsDamageTypeOnPerk(class<KFDamageType>(DamageType)) && IsStunActive())
|
||||
{
|
||||
if( HitZoneIdx == HZI_Head && GetZTStunActive() )
|
||||
{
|
||||
`QALog( "(ZT Stun)" @ GetSkillValue(PerkSkills[ESharpshooterZTStun]), bLogPerk );
|
||||
return GetSkillValue( PerkSkills[ESharpshooterZTStun] );
|
||||
}
|
||||
else if( IsStunActive() )
|
||||
{
|
||||
`QALog( "(Stun)" @ GetSkillValue( PerkSkills[ESharpshooterStun] ), bLogPerk );
|
||||
return GetSkillValue( PerkSkills[ESharpshooterStun] );
|
||||
}
|
||||
`QALog( "(Stun)" @ GetSkillValue( PerkSkills[ESharpshooterStun] ), bLogPerk );
|
||||
return GetSkillValue( PerkSkills[ESharpshooterStun] );
|
||||
}
|
||||
|
||||
return 0.f;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief skills and weapons can guarantee a stun
|
||||
* @return true/false
|
||||
*/
|
||||
function bool IsStunGuaranteed( optional class<DamageType> DamageType, optional byte HitZoneIdx )
|
||||
{
|
||||
if( IsDamageTypeOnPerk(class<KFDamageType>(DamageType)) && GetZTStunActive())
|
||||
{
|
||||
return bWasLastHitAHeadshot;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Checks if the Stationary Aim skill is active
|
||||
*
|
||||
|
@ -155,6 +155,8 @@ simulated function ModifyDamageGiven( out int InDamage, optional Actor DamageCau
|
||||
local KFWeapon KFW;
|
||||
local float TempDamage;
|
||||
|
||||
super.ModifyDamageGiven(InDamage, DamageCauser, MyKFPM, DamageInstigator, DamageType, HitZoneIdx);
|
||||
|
||||
TempDamage = InDamage;
|
||||
`QALog( GetFuncName() @ "BaseDamage =" @ InDamage, bLogPerk );
|
||||
|
||||
@ -337,7 +339,7 @@ simulated private static function float GetResupplyMaxSpareAmmoModifier()
|
||||
*/
|
||||
simulated function bool GetUsingTactialReload( KFWeapon KFW )
|
||||
{
|
||||
return IsTacticalReloadActive() && (IsWeaponOnPerk( KFW,, self.class ) || IsBackupWeapon( KFW ));
|
||||
return IsTacticalReloadActive() && (IsWeaponOnPerk( KFW,, self.class ) || IsBackupWeapon( KFW ) || IsDual9mm( KFW ));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -142,6 +142,8 @@ simulated function ModifyDamageGiven( out int InDamage, optional Actor DamageCau
|
||||
local KFWeapon KFW;
|
||||
local float TempDamage;
|
||||
|
||||
super.ModifyDamageGiven(InDamage, DamageCauser, MyKFPM, DamageInstigator, DamageType, HitZoneIdx);
|
||||
|
||||
TempDamage = InDamage;
|
||||
TempDamage += InDamage * GetPassiveValue( WeaponDamage, CurrentLevel );
|
||||
|
||||
@ -462,7 +464,7 @@ simulated function float GetAoERadiusModifier()
|
||||
simulated function float GetZedTimeModifier( KFWeapon W )
|
||||
{
|
||||
local name StateName;
|
||||
if( GetMadManActive() && !W.IsMeleeWeapon() || KFWeap_MeleeBase(W).default.bHasToBeConsideredAsRangedWeaponForPerks )
|
||||
if( GetMadManActive() && (!W.IsMeleeWeapon() || KFWeap_MeleeBase(W).default.bHasToBeConsideredAsRangedWeaponForPerks ))
|
||||
{
|
||||
StateName = W.GetStateName();
|
||||
`Warn(StateName);
|
||||
@ -525,18 +527,17 @@ function float GetStumblePowerModifier( optional KFPawn KFP, optional class<KFDa
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief skills and weapons can modify the stun power
|
||||
* @return stun power modifier
|
||||
* @brief skills and weapons can guarantee a stun
|
||||
* @return true/false
|
||||
*/
|
||||
function float GetStunPowerModifier( optional class<DamageType> DamageType, optional byte HitZoneIdx )
|
||||
function bool IsStunGuaranteed( optional class<DamageType> DamageType, optional byte HitZoneIdx )
|
||||
{
|
||||
if( GetIncapMasterActive() )
|
||||
{
|
||||
`QALog( "(ZT Stun)" @ (GetSkillValue(PerkSkills[ESharpshooterZTStun]) * 5), bLogPerk );
|
||||
return (GetSkillValue( PerkSkills[ESurvivalist_IncapMaster] ) );
|
||||
return true;
|
||||
}
|
||||
|
||||
return 0.f;
|
||||
return false;
|
||||
}
|
||||
|
||||
simulated function float GetSnarePowerModifier( optional class<DamageType> DamageType, optional byte HitZoneIdx )
|
||||
@ -849,6 +850,8 @@ DefaultProperties
|
||||
ZedTimeModifyingStates(8)="BlunderbussDeployAndDetonate"
|
||||
ZedTimeModifyingStates(9)="WeaponWindingUp"
|
||||
ZedTimeModifyingStates(10)="MineReconstructorCharge"
|
||||
ZedTimeModifyingStates(11)="WeaponSonicGunSingleFiring"
|
||||
ZedTimeModifyingStates(12)="WeaponSonicGunCharging"
|
||||
|
||||
PrimaryWeaponPaths(0)=class'KFWeapDef_AR15'
|
||||
PrimaryWeaponPaths(1)=class'KFWeapDef_MB500'
|
||||
|
@ -207,7 +207,7 @@ static simulated private function bool Is9mm( KFWeapon KFW )
|
||||
*/
|
||||
simulated event float GetIronSightSpeedModifier( KFWeapon KFW )
|
||||
{
|
||||
if( IsTacticalMovementActive() && (Is9mm( KFW ) || IsWeaponOnPerk( KFW,, self.class )) )
|
||||
if( IsTacticalMovementActive() && (Is9mm( KFW ) || IsDual9mm( KFW ) || IsWeaponOnPerk( KFW,, self.class )) )
|
||||
{
|
||||
`QALog( "Tactical Movement Mod:" @ KFW @ GetSkillValue( PerkSkills[ESWAT_TacticalMovement] ),bLogPerk );
|
||||
return GetSkillValue( PerkSkills[ESWAT_TacticalMovement] );
|
||||
@ -237,7 +237,7 @@ function FinalizeSpeedVariables()
|
||||
*/
|
||||
simulated event float GetCrouchSpeedModifier( KFWeapon KFW )
|
||||
{
|
||||
if( IsTacticalMovementActive() && (Is9mm( KFW ) || IsWeaponOnPerk( KFW,, self.class )) )
|
||||
if( IsTacticalMovementActive() && (Is9mm( KFW ) || IsDual9mm(KFW) || IsWeaponOnPerk( KFW,, self.class )) )
|
||||
{
|
||||
`QALog( "Tactical Movement Mod:" @ KFW @ GetSkillValue( PerkSkills[ESWAT_TacticalMovement] ),bLogPerk );
|
||||
return GetSkillValue( PerkSkills[ESWAT_TacticalMovement] ) * CurrentHealthPenalty;
|
||||
@ -268,6 +268,8 @@ simulated function ModifyDamageGiven( out int InDamage, optional Actor DamageCau
|
||||
local KFWeapon KFW;
|
||||
local float TempDamage;
|
||||
|
||||
super.ModifyDamageGiven(InDamage, DamageCauser, MyKFPM, DamageInstigator, DamageType, HitZoneIdx);
|
||||
|
||||
TempDamage = InDamage;
|
||||
|
||||
if( DamageCauser != none )
|
||||
@ -277,7 +279,7 @@ simulated function ModifyDamageGiven( out int InDamage, optional Actor DamageCau
|
||||
|
||||
if( KFW != none )
|
||||
{
|
||||
if( IsBackupActive() && (IsBackupWeapon( KFW ) || KFW.Class.Name == 'KFWeap_Pistol_Dual9mm') )
|
||||
if( IsBackupActive() && (IsBackupWeapon( KFW ) || IsDual9mm( KFW )) )
|
||||
{
|
||||
`QALog( "Backup Damage" @ KFW @ GetPercentage( InDamage, InDamage * GetSkillValue(PerkSkills[ESWAT_Backup])), bLogPerk );
|
||||
TempDamage += InDamage * GetSkillValue( PerkSkills[ESWAT_Backup] );
|
||||
@ -356,7 +358,7 @@ simulated function float GetZedTimeModifier( KFWeapon W )
|
||||
local name StateName;
|
||||
|
||||
StateName = W.GetStateName();
|
||||
if( IsRapidAssaultActive() && (Is9mm(W) || IsWeaponOnPerk( W,, self.class ) || W.IsA('KFWeap_Pistol_Dual9mm') ) )
|
||||
if( IsRapidAssaultActive() && (Is9mm(W) || IsWeaponOnPerk( W,, self.class ) || IsDual9mm( W ) ) )
|
||||
{
|
||||
if( ZedTimeModifyingStates.Find( StateName ) != INDEX_NONE )
|
||||
{
|
||||
@ -380,7 +382,7 @@ function float GetStumblePowerModifier( optional KFPawn KFP, optional class<KFDa
|
||||
StumbleModifier = 0.f;
|
||||
|
||||
KFW = GetOwnerWeapon();
|
||||
if( IsSpecialAmmunitionActive() && (Is9mm(KFW) || IsWeaponOnPerk( KFW,, self.class )) )
|
||||
if( IsSpecialAmmunitionActive() && (Is9mm(KFW) || IsDual9mm( KFW ) || IsWeaponOnPerk( KFW,, self.class )) )
|
||||
{
|
||||
StumbleModifier += GetSkillValue( PerkSkills[ESWAT_SpecialAmmunition] );
|
||||
`QALog( "Special Ammunition Modifier" @ GetSkillValue( PerkSkills[ESWAT_SpecialAmmunition] ), bLogPerk );
|
||||
@ -404,7 +406,7 @@ function float GetStumblePowerModifier( optional KFPawn KFP, optional class<KFDa
|
||||
*/
|
||||
simulated function bool GetIsUberAmmoActive( KFWeapon KFW )
|
||||
{
|
||||
return IsRapidAssaultActive() && (Is9mm(KFW) || IsWeaponOnPerk( KFW,, self.class ) || KFW.IsA('KFWeap_Pistol_Dual9mm'));
|
||||
return IsRapidAssaultActive() && (Is9mm(KFW) || IsWeaponOnPerk( KFW,, self.class ) || IsDual9mm( KFW ));
|
||||
}
|
||||
|
||||
simulated function bool ShouldKnockDownOnBump()
|
||||
@ -520,7 +522,7 @@ simulated private function bool IsTacticalReloadActive()
|
||||
*/
|
||||
simulated function bool GetUsingTactialReload( KFWeapon KFW )
|
||||
{
|
||||
return ( IsTacticalReloadActive() && (Is9mm(KFW) || IsWeaponOnPerk( KFW,, self.class )) );
|
||||
return ( IsTacticalReloadActive() && (Is9mm(KFW) || IsDual9mm( KFW ) || IsWeaponOnPerk( KFW,, self.class )) );
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -703,6 +703,12 @@ var int BeginningRoundVaultAmount;
|
||||
var transient float NoGoStartTime;
|
||||
var transient bool bNoGoActive;
|
||||
|
||||
/*********************************************************************************************
|
||||
* @name Profile Stored values
|
||||
********************************************************************************************* */
|
||||
|
||||
var transient byte StoredLocalUserNum;
|
||||
|
||||
cpptext
|
||||
{
|
||||
virtual UBOOL Tick( FLOAT DeltaSeconds, ELevelTick TickType );
|
||||
@ -824,6 +830,32 @@ simulated event PostBeginPlay()
|
||||
}
|
||||
}
|
||||
|
||||
function UpdateVOIP()
|
||||
{
|
||||
local KFPlayerInput KFPI;
|
||||
local KFPlayerReplicationInfo KFPRI;
|
||||
|
||||
KFPRI = KFPlayerReplicationInfo( PlayerReplicationInfo );
|
||||
KFPI = KFPlayerInput(PlayerInput);
|
||||
|
||||
if(KFPI == None || KFPRI == None)
|
||||
{
|
||||
// Retry
|
||||
SetTimer(0.1f, false, nameof(UpdateVOIP) );
|
||||
}
|
||||
else
|
||||
{
|
||||
if(KFPI.bRequiresPushToTalk)
|
||||
{
|
||||
ClientStopNetworkedVoice();
|
||||
}
|
||||
else
|
||||
{
|
||||
ClientStartNetworkedVoice();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function SpawnDefaultHUD()
|
||||
{
|
||||
super.SpawnDefaultHUD();
|
||||
@ -1018,6 +1050,7 @@ simulated event ReceivedPlayer()
|
||||
KFEngine.LastURL.Op.Remove(i, 1);
|
||||
}
|
||||
}
|
||||
UpdateVOIP();
|
||||
}
|
||||
}
|
||||
|
||||
@ -1512,12 +1545,15 @@ function OnReadProfileSettingsComplete(byte LocalUserNum,bool bWasSuccessful)
|
||||
local KFProfileSettings Profile;
|
||||
local KFPlayerInput KFInput;
|
||||
local KFGameInfo KFGI;
|
||||
local KFGameReplicationInfo KFGRI;
|
||||
local KFGameEngine KFEngine;
|
||||
local KFPlayerReplicationInfo KFPRI;
|
||||
local string MatchmakingRegion;
|
||||
local KFGoreManager GoreMgr;
|
||||
local UniqueNetId LobbyId, Zero;
|
||||
|
||||
StoredLocalUserNum = LocalUserNum;
|
||||
|
||||
Profile = KFProfileSettings(OnlineSub.PlayerInterface.GetProfileSettings(LocalUserNum));
|
||||
`QAlog(`location@`showvar(Profile)@`showvar(bWasSuccessful), true);
|
||||
|
||||
@ -1648,12 +1684,58 @@ function OnReadProfileSettingsComplete(byte LocalUserNum,bool bWasSuccessful)
|
||||
{
|
||||
OnlineSub.GetLobbyInterface().LobbyInvite(LobbyId, Zero, true);
|
||||
}
|
||||
|
||||
// If the perk is not allowed for this game mode, search for one that is available starting from the index 0
|
||||
KFGRI = KFGameReplicationInfo(WorldInfo.GRI);
|
||||
|
||||
if( KFGRI != none && !KFGRI.IsPerkAllowed(PerkList[SavedPerkIndex].PerkClass) )
|
||||
{
|
||||
SavedPerkIndex = 0;
|
||||
for(SavedPerkIndex=0 ; SavedPerkIndex<PerkList.length ; SavedPerkIndex++)
|
||||
{
|
||||
if( KFGRI.IsPerkAllowed(PerkList[SavedPerkIndex].PerkClass) )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
// Save the new perk selected in the the profile settings
|
||||
Profile.SetProfileSettingValueInt( KFID_SavedPerkIndex, SavedPerkIndex );
|
||||
}
|
||||
|
||||
// Update our cached Emote Id
|
||||
class'KFEmoteList'.static.RefreshCachedEmoteId();
|
||||
class'KFHeadShotEffectList'.static.RefreshCachedHeadShotEffectId();
|
||||
}
|
||||
|
||||
function UpdatePerkOnInit()
|
||||
{
|
||||
local KFGameReplicationInfo KFGRI;
|
||||
local KFProfileSettings Profile;
|
||||
|
||||
KFGRI = KFGameReplicationInfo(WorldInfo.GRI);
|
||||
|
||||
// If the perk is not allowed for this game mode, search for one that is available starting from the index 0
|
||||
if( KFGRI != none && !KFGRI.IsPerkAllowed(PerkList[SavedPerkIndex].PerkClass) )
|
||||
{
|
||||
SavedPerkIndex = 0;
|
||||
for(SavedPerkIndex=0 ; SavedPerkIndex<PerkList.length ; SavedPerkIndex++)
|
||||
{
|
||||
if( KFGRI.IsPerkAllowed(PerkList[SavedPerkIndex].PerkClass) )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
// Save the new perk selected in the the profile settings
|
||||
Profile = KFProfileSettings(OnlineSub.PlayerInterface.GetProfileSettings(StoredLocalUserNum));
|
||||
if( Profile != None )
|
||||
{
|
||||
Profile.SetProfileSettingValueInt( KFID_SavedPerkIndex, SavedPerkIndex );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*********************************************************************************************
|
||||
* @name Console Connection Handling
|
||||
@ -7268,6 +7350,13 @@ event byte GetPerkLevelFromPerkList(Class<KFPerk> PerkClass)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/** hit stat */
|
||||
function NotifyHitTaken()
|
||||
{
|
||||
ClientNotifyHitTaken();
|
||||
}
|
||||
native reliable client private function ClientNotifyHitTaken();
|
||||
|
||||
/** Kill stat */
|
||||
function AddZedKill( class<KFPawn_Monster> MonsterClass, byte Difficulty, class<DamageType> DT, bool bKiller )
|
||||
{
|
||||
@ -11495,6 +11584,22 @@ reliable client function DrawLocalizedTextOnHud(string Message, float DisplayTim
|
||||
}
|
||||
}
|
||||
|
||||
function bool CanUseHealObject()
|
||||
{
|
||||
local class<KFPowerUp> KFPowerUpClass;
|
||||
local KFGameInfo GameInfo;
|
||||
local bool CanHealPowerUp;
|
||||
local bool CanHealGameMode;
|
||||
|
||||
GameInfo = KFGameInfo(WorldInfo.Game);
|
||||
KFPowerUpClass = GetPowerUpClass();
|
||||
|
||||
CanHealPowerUp = KFPowerUpClass == none || KFPowerUpClass.default.CanBeHealedWhilePowerUpIsActive;
|
||||
CanHealGameMode = GameInfo == none || GameInfo.OutbreakEvent == none || !GameInfo.OutbreakEvent.ActiveEvent.bCannotBeHealed;
|
||||
|
||||
return CanHealPowerUp && CanHealGameMode;
|
||||
}
|
||||
|
||||
event OnLoginOnOtherPlatformDoneAndFriendsReady()
|
||||
{
|
||||
if (MyGFxManager != none)
|
||||
|
14
KFGame/Classes/KFPowerUp_HellishRage_NoCostHeal.uc
Normal file
14
KFGame/Classes/KFPowerUp_HellishRage_NoCostHeal.uc
Normal file
@ -0,0 +1,14 @@
|
||||
//=============================================================================
|
||||
// KFPowerUp_HellishRage
|
||||
//=============================================================================
|
||||
// Base class for the hellish rage power up
|
||||
//=============================================================================
|
||||
// Killing Floor 2
|
||||
// Copyright (C) 2015 Tripwire Interactive LLC
|
||||
//=============================================================================
|
||||
class KFPowerUp_HellishRage_NoCostHeal extends KFPowerUp_HellishRage;
|
||||
|
||||
DefaultProperties
|
||||
{
|
||||
HealthCost=0
|
||||
}
|
@ -100,7 +100,7 @@ simulated function bool GetImpactResult(Actor HitActor, PrimitiveComponent HitCo
|
||||
// NOTE: Door actors fall into this category!
|
||||
|
||||
// pass through meshes that can move
|
||||
return !StaticMeshComp.CanBecomeDynamic();
|
||||
return true;
|
||||
}
|
||||
|
||||
KFP = KFPawn_Human(HitActor);
|
||||
@ -108,16 +108,16 @@ simulated function bool GetImpactResult(Actor HitActor, PrimitiveComponent HitCo
|
||||
{
|
||||
// bounce off of player pawns, stick to other pawns
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
D = KFDestructibleActor(HitActor);
|
||||
|
||||
if (D != none)
|
||||
{
|
||||
|
||||
|
||||
// don't react to client-side-only destructibles, stick to others
|
||||
return D.ReplicationMode != RT_ClientSide;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return true;
|
||||
|
@ -71,4 +71,5 @@ simulated event OnGameEnd(class<GameInfo> GameClass);
|
||||
simulated function OnBossDied();
|
||||
simulated event OnWaveCompleted(class<GameInfo> GameClass, int Difficulty, int WaveNum);
|
||||
simulated event OnTriggerUsed(class<Trigger_PawnsOnly> TriggerClass);
|
||||
simulated event OnTryCompleteObjective(int ObjectiveIndex, int EventIndex);
|
||||
simulated event OnTryCompleteObjective(int ObjectiveIndex, int EventIndex);
|
||||
simulated function OnHitTaken();
|
@ -27,6 +27,7 @@ enum ESharedContentUnlock
|
||||
SCU_Minigun,
|
||||
SCU_MineReconstructor,
|
||||
SCU_FrostFang,
|
||||
SCU_GravityImploder,
|
||||
};
|
||||
|
||||
|
||||
@ -325,4 +326,8 @@ defaultproperties
|
||||
Name=KFWeap_Rifle_FrostShotgunAxe,
|
||||
IconPath="WEP_UI_Frost_Shotgun_Axe_TEX.UI_WeaponSelect_FrostGun",
|
||||
ID=8609)}
|
||||
SharedContentList(SCU_GravityImploder)={(
|
||||
Name=KFWeap_GravityImploder,
|
||||
IconPath="WEP_UI_Gravity_Imploder_TEX.UI_WeaponSelect_Gravity_Imploder",
|
||||
ID=8778)}
|
||||
}
|
||||
|
@ -15,7 +15,7 @@ DefaultProperties
|
||||
WeaponClassPath="KFGameContent.KFWeap_AssaultRifle_Bullpup"
|
||||
|
||||
BuyPrice=650
|
||||
AmmoPricePerMag=30
|
||||
AmmoPricePerMag=32 //30
|
||||
ImagePath="ui_weaponselect_tex.UI_WeaponSelect_Bullpup"
|
||||
|
||||
EffectiveRange=68
|
||||
|
28
KFGame/Classes/KFWeapDef_GravityImploder.uc
Normal file
28
KFGame/Classes/KFWeapDef_GravityImploder.uc
Normal file
@ -0,0 +1,28 @@
|
||||
//=============================================================================
|
||||
// KFWeapDef_GravityImploder
|
||||
//=============================================================================
|
||||
// A lightweight container for basic weapon properties that can be safely
|
||||
// accessed without a weapon actor (UI, remote clients).
|
||||
//=============================================================================
|
||||
// Killing Floor 2
|
||||
// Copyright (C) 2020 Tripwire Interactive LLC
|
||||
//=============================================================================
|
||||
|
||||
class KFWeapDef_GravityImploder extends KFWeaponDefinition
|
||||
abstract;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
WeaponClassPath="KFGameContent.KFWeap_GravityImploder"
|
||||
|
||||
BuyPrice=2000
|
||||
|
||||
AmmoPricePerMag=70//40
|
||||
|
||||
ImagePath="WEP_UI_Gravity_Imploder_TEX.UI_WeaponSelect_Gravity_Imploder"
|
||||
|
||||
EffectiveRange=95 // Based on comment Slightly less than M79 Grenade Launcher
|
||||
|
||||
SharedUnlockId=SCU_GravityImploder
|
||||
}
|
||||
|
25
KFGame/Classes/KFWeapDef_HRG_SonicGun.uc
Normal file
25
KFGame/Classes/KFWeapDef_HRG_SonicGun.uc
Normal file
@ -0,0 +1,25 @@
|
||||
//=============================================================================
|
||||
// KFWeapDef_HRG_SonicGun
|
||||
//=============================================================================
|
||||
// Killing Floor 2
|
||||
// Copyright (C) 2020 Tripwire Interactive LLC
|
||||
//=============================================================================
|
||||
class KFWeapDef_HRG_SonicGun extends KFWeaponDefinition
|
||||
abstract;
|
||||
|
||||
DefaultProperties
|
||||
{
|
||||
WeaponClassPath="KFGameContent.KFWeap_HRG_SonicGun"
|
||||
|
||||
BuyPrice=1100
|
||||
AmmoPricePerMag=65 //75
|
||||
ImagePath="WEP_UI_HRG_SonicGun_TEX.UI_WeaponSelect_HRG_SonicGun"
|
||||
|
||||
EffectiveRange=70
|
||||
|
||||
UpgradePrice[0]=700
|
||||
UpgradePrice[1]=1500
|
||||
|
||||
UpgradeSellPrice[0]=525
|
||||
UpgradeSellPrice[1]=1650
|
||||
}
|
@ -440,7 +440,6 @@ simulated function UpdateInteractionMessage()
|
||||
{
|
||||
local KFPlayerController InstigatorKFPC;
|
||||
local bool bCannotBeHealed;
|
||||
local KFPowerUp PowerUp;
|
||||
|
||||
//Update Interaction message
|
||||
if (Instigator != none && Instigator.IsLocallyControlled() && Instigator.Health > 0)
|
||||
@ -452,9 +451,8 @@ simulated function UpdateInteractionMessage()
|
||||
return;
|
||||
}
|
||||
|
||||
//Check if we have a power up that disables healing
|
||||
PowerUp = InstigatorKFPC.GetPowerUp();
|
||||
bCannotBeHealed = PowerUp != none && !PowerUp.CanBeHealedWhilePowerUpIsActive;
|
||||
//Check if the player can heal
|
||||
bCannotBeHealed = !InstigatorKFPC.CanUseHealObject();
|
||||
|
||||
if (bIsQuickHealMessageShowing)
|
||||
{
|
||||
|
@ -3406,4 +3406,120 @@ defaultproperties
|
||||
//8614 Frost Fang | Burned Land
|
||||
Skins.Add((Id=8614, Weapondef=class'KFWeapDef_Rifle_FrostShotgunAxe', MIC_1P=("WEP_SkinSet39_MAT.Wep_1stP_Frost_Shotgun_BurnedLand_MIC"), MIC_3P="WEP_SkinSet39_MAT.Wep_3stP_Frost_Shotgun_BurnedLand_MIC", MIC_Pickup="WEP_SkinSet39_MAT.Wep_3rdP_Frost_Shotgun_BurnedLand_Pickup_MIC"))
|
||||
|
||||
//Neon Caulk n Burn
|
||||
Skins.Add((Id=8654, Weapondef=class'KFWeapDef_CaulkBurn', MIC_1P=("WEP_SkinSet40_MAT.neon_caulkburn.Neon_CaulkBurn_1P_Mint_MIC"), MIC_3P="WEP_SkinSet40_MAT.neon_caulkburn.Neon_CaulkBurn_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet40_MAT.neon_caulkburn.Neon_CaulkBurn_3P_Pickup_MIC"))
|
||||
|
||||
//Neon Crovel
|
||||
Skins.Add((Id=8655, Weapondef=class'KFWeapDef_Crovel', MIC_1P=("WEP_SkinSet40_MAT.neon_crovel.Neon_Crovel_1P_Mint_MIC"), MIC_3P="WEP_SkinSet40_MAT.neon_crovel.Neon_Crovel_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet40_MAT.neon_crovel.Neon_Crovel_3P_Pickup_MIC"))
|
||||
|
||||
//Neon HX25
|
||||
Skins.Add((Id=8656, Weapondef=class'KFWeapDef_HX25', MIC_1P=("WEP_SkinSet40_MAT.neon_hx25.Neon_HX25_1P_Mint_MIC"), MIC_3P="WEP_SkinSet40_MAT.neon_hx25.Neon_HX25_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet40_MAT.neon_hx25.Neon_HX25_3P_Pickup_MIC"))
|
||||
|
||||
//Neon MP5RAS
|
||||
Skins.Add((Id=8657, Weapondef=class'KFWeapDef_MP5RAS', MIC_1P=("WEP_SkinSet40_MAT.neon_mp5ras.Neon_MP5RAS_1P_Mint_MIC"), MIC_3P="WEP_SkinSet40_MAT.neon_mp5ras.Neon_MP5RAS_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet40_MAT.neon_mp5ras.Neon_MP5RAS_3P_Pickup_MIC"))
|
||||
|
||||
//Neon 1858 Revolver
|
||||
Skins.Add((Id=8658, Weapondef=class'KFWeapDef_Remington1858', MIC_1P=("WEP_SkinSet40_MAT.neon_remington1858.Neon_Remington1858_1P_Mint_MIC"), MIC_3P="WEP_SkinSet40_MAT.neon_remington1858.Neon_Remington1858_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet40_MAT.neon_remington1858.Neon_Remington1858_3P_Pickup_MIC"))
|
||||
|
||||
//Neon Eviscerator
|
||||
Skins.Add((Id=8659, Weapondef=class'KFWeapDef_Eviscerator', MIC_1P=("WEP_SkinSet40_MAT.neon_sawblade.Neon_SawBlade_1P_Mint_MIC"), MIC_3P="WEP_SkinSet40_MAT.neon_sawblade.Neon_SawBlade_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet40_MAT.neon_sawblade.Neon_SawBlade_3P_Pickup_MIC"))
|
||||
|
||||
//Neon Berserker Knife
|
||||
Skins.Add((Id=8660, Weapondef=class'KFWeapDef_Knife_Berserker', MIC_1P=("WEP_SkinSet40_MAT.neon_berserkerknife.Neon_BerserkerKnife_1P_Mint_MIC"), MIC_3P="WEP_SkinSet40_MAT.neon_berserkerknife.Neon_BerserkerKnife_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet40_MAT.neon_berserkerknife.Neon_BerserkerKnife_3P_Pickup_MIC"))
|
||||
|
||||
//Neon KF-BAR
|
||||
Skins.Add((Id=8661, Weapondef=class'KFWeapDef_Knife_Commando', MIC_1P=("WEP_SkinSet40_MAT.neon_commandoknife.Neon_CommandoKnife_1P_Mint_MIC"), MIC_3P="WEP_SkinSet40_MAT.neon_commandoknife.Neon_CommandoKnife_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet40_MAT.neon_commandoknife.Neon_CommandoKnife_3P_Pickup_MIC"))
|
||||
|
||||
//Neon Demo Knife
|
||||
Skins.Add((Id=8662, Weapondef=class'KFWeapDef_Knife_Demo', MIC_1P=("WEP_SkinSet40_MAT.neon_demoknife.Neon_DemoKnife_1P_Mint_MIC"), MIC_3P="WEP_SkinSet40_MAT.neon_demoknife.Neon_DemoKnife_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet40_MAT.neon_demoknife.Neon_DemoKnife_3P_Pickup_MIC"))
|
||||
|
||||
//Neon Firemans Knife
|
||||
Skins.Add((Id=8663, Weapondef=class'KFWeapDef_Knife_Firebug', MIC_1P=("WEP_SkinSet40_MAT.neon_firebugknife.Neon_FirebugKnife_1P_Mint_MIC"), MIC_3P="WEP_SkinSet40_MAT.neon_firebugknife.Neon_FirebugKnife_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet40_MAT.neon_firebugknife.Neon_FirebugKnife_3P_Pickup_MIC"))
|
||||
|
||||
//Neon Gunslinger Knife
|
||||
Skins.Add((Id=8664, Weapondef=class'KFWeapDef_Knife_Gunslinger', MIC_1P=("WEP_SkinSet40_MAT.neon_gunslingerknife.Neon_GunslingerKnife_1P_Mint_MIC"), MIC_3P="WEP_SkinSet40_MAT.neon_gunslingerknife.Neon_GunslingerKnife_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet40_MAT.neon_gunslingerknife.Neon_GunslingerKnife_3P_Pickup_MIC"))
|
||||
|
||||
//Neon HMTech-001 Scalpel
|
||||
Skins.Add((Id=8665, Weapondef=class'KFWeapDef_Knife_Medic', MIC_1P=("WEP_SkinSet40_MAT.neon_medicknife.Neon_MedicKnife_1P_Mint_MIC"), MIC_3P="WEP_SkinSet40_MAT.neon_medicknife.Neon_MedicKnife_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet40_MAT.neon_medicknife.Neon_MedicKnife_3P_Pickup_MIC"))
|
||||
|
||||
//Neon Kukri
|
||||
Skins.Add((Id=8666, Weapondef=class'KFWeapDef_Knife_Sharpshooter', MIC_1P=("WEP_SkinSet40_MAT.neon_sharpshooterknife.Neon_SharpshooterKnife_1P_Mint_MIC"), MIC_3P="WEP_SkinSet40_MAT.neon_sharpshooterknife.Neon_SharpshooterKnife_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet40_MAT.neon_sharpshooterknife.Neon_SharpshooterKnife_3P_Pickup_MIC"))
|
||||
|
||||
//Neon Support Knife
|
||||
Skins.Add((Id=8667, Weapondef=class'KFWeapDef_Knife_Support', MIC_1P=("WEP_SkinSet40_MAT.neon_supportknife.Neon_SupportKnife_1P_Mint_MIC"), MIC_3P="WEP_SkinSet40_MAT.neon_supportknife.Neon_SupportKnife_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet40_MAT.neon_supportknife.Neon_SupportKnife_3P_Pickup_MIC"))
|
||||
|
||||
//Neon Gore Shiv
|
||||
Skins.Add((Id=8668, Weapondef=class'KFWeapDef_Knife_Survivalist', MIC_1P=("WEP_SkinSet40_MAT.neon_survivalistknife.Neon_SurvivalistKnife_1P_Mint_MIC"), MIC_3P="WEP_SkinSet40_MAT.neon_survivalistknife.Neon_SurvivalistKnife_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet40_MAT.neon_survivalistknife.Neon_SurvivalistKnife_3P_Pickup_MIC"))
|
||||
|
||||
//Neon Tactical Knife
|
||||
Skins.Add((Id=8669, Weapondef=class'KFWeapDef_Knife_SWAT', MIC_1P=("WEP_SkinSet40_MAT.neon_swatknife.Neon_SWATKnife_1P_Mint_MIC"), MIC_3P="WEP_SkinSet40_MAT.neon_swatknife.Neon_SWATKnife_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet40_MAT.neon_swatknife.Neon_SWATKnife_3P_Pickup_MIC"))
|
||||
|
||||
//NeonRGB Caulk n Burn
|
||||
Skins.Add((Id=8670, Weapondef=class'KFWeapDef_CaulkBurn', MIC_1P=("WEP_SkinSet40_MAT.neonrgb_caulkburn.NeonRGB_CaulkBurn_1P_Mint_MIC"), MIC_3P="WEP_SkinSet40_MAT.neonrgb_caulkburn.NeonRGB_CaulkBurn_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet40_MAT.neonrgb_caulkburn.NeonRGB_CaulkBurn_3P_Pickup_MIC"))
|
||||
|
||||
//NeonRGB Crovel
|
||||
Skins.Add((Id=8671, Weapondef=class'KFWeapDef_Crovel', MIC_1P=("WEP_SkinSet40_MAT.neonrgb_crovel.NeonRGB_Crovel_1P_Mint_MIC"), MIC_3P="WEP_SkinSet40_MAT.neonrgb_crovel.NeonRGB_Crovel_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet40_MAT.neonrgb_crovel.NeonRGB_Crovel_3P_Pickup_MIC"))
|
||||
|
||||
//NeonRGB HX25
|
||||
Skins.Add((Id=8672, Weapondef=class'KFWeapDef_HX25', MIC_1P=("WEP_SkinSet40_MAT.neonrgb_hx25.NeonRGB_HX25_1P_Mint_MIC"), MIC_3P="WEP_SkinSet40_MAT.neonrgb_hx25.NeonRGB_HX25_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet40_MAT.neonrgb_hx25.NeonRGB_HX25_3P_Pickup_MIC"))
|
||||
|
||||
//NeonRGB MP5RAS
|
||||
Skins.Add((Id=8673, Weapondef=class'KFWeapDef_MP5RAS', MIC_1P=("WEP_SkinSet40_MAT.neonrgb_mp5ras.NeonRGB_MP5RAS_1P_Mint_MIC"), MIC_3P="WEP_SkinSet40_MAT.neonrgb_mp5ras.NeonRGB_MP5RAS_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet40_MAT.neonrgb_mp5ras.NeonRGB_MP5RAS_3P_Pickup_MIC"))
|
||||
|
||||
//NeonRGB 1858 Revolver
|
||||
Skins.Add((Id=8674, Weapondef=class'KFWeapDef_Remington1858', MIC_1P=("WEP_SkinSet40_MAT.neonrgb_remington1858.NeonRGB_Remington1858_1P_Mint_MIC"), MIC_3P="WEP_SkinSet40_MAT.neonrgb_remington1858.NeonRGB_Remington1858_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet40_MAT.neonrgb_remington1858.NeonRGB_Remington1858_3P_Pickup_MIC"))
|
||||
|
||||
//NeonRGB Eviscerator
|
||||
Skins.Add((Id=8675, Weapondef=class'KFWeapDef_Eviscerator', MIC_1P=("WEP_SkinSet40_MAT.neonrgb_sawblade.NeonRGB_SawBlade_1P_Mint_MIC"), MIC_3P="WEP_SkinSet40_MAT.neonrgb_sawblade.NeonRGB_SawBlade_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet40_MAT.neonrgb_sawblade.NeonRGB_SawBlade_3P_Pickup_MIC"))
|
||||
|
||||
//NeonRGB Berserker Knife
|
||||
Skins.Add((Id=8676, Weapondef=class'KFWeapDef_Knife_Berserker', MIC_1P=("WEP_SkinSet40_MAT.neonrgb_berserkerknife.NeonRGB_BerserkerKnife_1P_Mint_MIC"), MIC_3P="WEP_SkinSet40_MAT.neonrgb_berserkerknife.NeonRGB_BerserkerKnife_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet40_MAT.neonrgb_berserkerknife.NeonRGB_BerserkerKnife_3P_Pickup_MIC"))
|
||||
|
||||
//NeonRGB KF-BAR
|
||||
Skins.Add((Id=8677, Weapondef=class'KFWeapDef_Knife_Commando', MIC_1P=("WEP_SkinSet40_MAT.neonrgb_commandoknife.NeonRGB_CommandoKnife_1P_Mint_MIC"), MIC_3P="WEP_SkinSet40_MAT.neonrgb_commandoknife.NeonRGB_CommandoKnife_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet40_MAT.neonrgb_commandoknife.NeonRGB_CommandoKnife_3P_Pickup_MIC"))
|
||||
|
||||
//NeonRGB Demo Knife
|
||||
Skins.Add((Id=8678, Weapondef=class'KFWeapDef_Knife_Demo', MIC_1P=("WEP_SkinSet40_MAT.neonrgb_demoknife.NeonRGB_DemoKnife_1P_Mint_MIC"), MIC_3P="WEP_SkinSet40_MAT.neonrgb_demoknife.NeonRGB_DemoKnife_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet40_MAT.neonrgb_demoknife.NeonRGB_DemoKnife_3P_Pickup_MIC"))
|
||||
|
||||
//NeonRGB Firemans Knife
|
||||
Skins.Add((Id=8679, Weapondef=class'KFWeapDef_Knife_Firebug', MIC_1P=("WEP_SkinSet40_MAT.neonrgb_firebugknife.NeonRGB_FirebugKnife_1P_Mint_MIC"), MIC_3P="WEP_SkinSet40_MAT.neonrgb_firebugknife.NeonRGB_FirebugKnife_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet40_MAT.neonrgb_firebugknife.NeonRGB_FirebugKnife_3P_Pickup_MIC"))
|
||||
|
||||
//NeonRGB Gunslinger Knife
|
||||
Skins.Add((Id=8680, Weapondef=class'KFWeapDef_Knife_Gunslinger', MIC_1P=("WEP_SkinSet40_MAT.neonrgb_gunslingerknife.NeonRGB_GunslingerKnife_1P_Mint_MIC"), MIC_3P="WEP_SkinSet40_MAT.neonrgb_gunslingerknife.NeonRGB_GunslingerKnife_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet40_MAT.neonrgb_gunslingerknife.NeonRGB_GunslingerKnife_3P_Pickup_MIC"))
|
||||
|
||||
//NeonRGB HMTech-001 Scalpel
|
||||
Skins.Add((Id=8681, Weapondef=class'KFWeapDef_Knife_Medic', MIC_1P=("WEP_SkinSet40_MAT.neonrgb_medicknife.NeonRGB_MedicKnife_1P_Mint_MIC"), MIC_3P="WEP_SkinSet40_MAT.neonrgb_medicknife.NeonRGB_MedicKnife_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet40_MAT.neonrgb_medicknife.NeonRGB_MedicKnife_3P_Pickup_MIC"))
|
||||
|
||||
//NeonRGB Kukri
|
||||
Skins.Add((Id=8682, Weapondef=class'KFWeapDef_Knife_Sharpshooter', MIC_1P=("WEP_SkinSet40_MAT.neonrgb_sharpshooterknife.NeonRGB_SharpshooterKnife_1P_Mint_MIC"), MIC_3P="WEP_SkinSet40_MAT.neonrgb_sharpshooterknife.NeonRGB_SharpshooterKnife_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet40_MAT.neonrgb_sharpshooterknife.NeonRGB_SharpshooterKnife_3P_Pickup_MIC"))
|
||||
|
||||
//NeonRGB Support Knife
|
||||
Skins.Add((Id=8683, Weapondef=class'KFWeapDef_Knife_Support', MIC_1P=("WEP_SkinSet40_MAT.neonrgb_supportknife.NeonRGB_SupportKnife_1P_Mint_MIC"), MIC_3P="WEP_SkinSet40_MAT.neonrgb_supportknife.NeonRGB_SupportKnife_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet40_MAT.neonrgb_supportknife.NeonRGB_SupportKnife_3P_Pickup_MIC"))
|
||||
|
||||
//NeonRGB Gore Shiv
|
||||
Skins.Add((Id=8684, Weapondef=class'KFWeapDef_Knife_Survivalist', MIC_1P=("WEP_SkinSet40_MAT.neonrgb_survivalistknife.NeonRGB_SurvivalistKnife_1P_Mint_MIC"), MIC_3P="WEP_SkinSet40_MAT.neonrgb_survivalistknife.NeonRGB_SurvivalistKnife_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet40_MAT.neonrgb_survivalistknife.NeonRGB_SurvivalistKnife_3P_Pickup_MIC"))
|
||||
|
||||
//NeonRGB Tactical Knife
|
||||
Skins.Add((Id=8685, Weapondef=class'KFWeapDef_Knife_SWAT', MIC_1P=("WEP_SkinSet40_MAT.neonrgb_swatknife.NeonRGB_SWATKnife_1P_Mint_MIC"), MIC_3P="WEP_SkinSet40_MAT.neonrgb_swatknife.NeonRGB_SWATKnife_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet40_MAT.neonrgb_swatknife.NeonRGB_SWATKnife_3P_Pickup_MIC"))
|
||||
|
||||
//GravityImploder Standard
|
||||
Skins.Add((Id=8778, Weapondef=class'KFWeapDef_GravityImploder', MIC_1P=("WEP_1P_Gravity_Imploder_MAT.Wep_1stP_Gravity_Imploder_MIC"), MIC_3P="WEP_3P_Gravity_Imploder_MAT.Wep_3rdP_Gravity_Imploder_MIC", MIC_Pickup="WEP_3p_Gravity_Imploder_MAT.Wep_3rdP_Gravity_Imploder_Pickup_MIC"))
|
||||
|
||||
//GravityImploder Area51
|
||||
Skins.Add((Id=8779, Weapondef=class'KFWeapDef_GravityImploder', MIC_1P=("WEP_SkinSet41_MAT.WEP_SkinSet_1stP_Gravity_Imploder_Area51_MIC"), MIC_3P="WEP_SkinSet41_MAT.Wep_SkinSet_3rdP_Gravity_Imploder_Area51_MIC", MIC_Pickup="WEP_SkinSet41_MAT.Wep_3rdP_Gravity_Imploder_Pickup_Area51_MIC"));
|
||||
|
||||
//GravityImploder Banzai
|
||||
Skins.Add((Id=8780, Weapondef=class'KFWeapDef_GravityImploder', MIC_1P=("WEP_SkinSet41_MAT.WEP_SkinSet_1stP_Gravity_Imploder_Banzai_MIC"), MIC_3P="WEP_SkinSet41_MAT.Wep_SkinSet_3rdP_Gravity_Imploder_Banzai_MIC", MIC_Pickup="WEP_SkinSet41_MAT.Wep_3rdP_Gravity_Imploder_Pickup_Banzai_MIC"));
|
||||
|
||||
//GravityImploder Jungle
|
||||
Skins.Add((Id=8781, Weapondef=class'KFWeapDef_GravityImploder', MIC_1P=("WEP_SkinSet41_MAT.WEP_SkinSet_1stP_Gravity_Imploder_Cambodia_MIC"), MIC_3P="WEP_SkinSet41_MAT.Wep_SkinSet_3rdP_Gravity_Imploder_Cambodia_MIC", MIC_Pickup="WEP_SkinSet41_MAT.Wep_3rdP_Gravity_Imploder_Pickup_Cambodia_MIC"));
|
||||
|
||||
//GravityImploder High Tech
|
||||
Skins.Add((Id=8782, Weapondef=class'KFWeapDef_GravityImploder', MIC_1P=("WEP_SkinSet41_MAT.WEP_SkinSet_1stP_Gravity_Imploder_HighTech_MIC"), MIC_3P="WEP_SkinSet41_MAT.Wep_SkinSet_3rdP_Gravity_Imploder_HighTech_MIC", MIC_Pickup="WEP_SkinSet41_MAT.Wep_3rdP_Gravity_Imploder_Pickup_HighTech_MIC"));
|
||||
|
||||
//GravityImploder Rust
|
||||
Skins.Add((Id=8783, Weapondef=class'KFWeapDef_GravityImploder', MIC_1P=("WEP_SkinSet41_MAT.WEP_SkinSet_1stP_Gravity_Imploder_Rust_MIC"), MIC_3P="WEP_SkinSet41_MAT.Wep_SkinSet_3rdP_Gravity_Imploder_Rust_MIC", MIC_Pickup="WEP_SkinSet41_MAT.Wep_3rdP_Gravity_Imploder_Pickup_Rust_MIC"));
|
||||
|
||||
//Coliseum Zweihander
|
||||
Skins.Add((Id=8791, Weapondef=class'KFWeapDef_Zweihander', MIC_1P=("WEP_SkinSet42_MAT.coliseum_zweihander.Coliseum_Zweihander_1P_Mint_MIC"), MIC_3P="WEP_SkinSet42_MAT.coliseum_zweihander.Coliseum_Zweihander_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet42_MAT.coliseum_zweihander.Coliseum_Zweihander_3P_Pickup_MIC"));
|
||||
}
|
@ -332,11 +332,20 @@ function float GetArmorDamageTypeModifier(class<DamageType> DT)
|
||||
{
|
||||
DamageModifier = FMax(Lerp(1.f, DamageModifier, GameResistancePct), 0.f);
|
||||
}
|
||||
|
||||
|
||||
if(DT.default.ArmorDamageModifier != 1)
|
||||
{
|
||||
DamageModifier *= DT.default.ArmorDamageModifier;
|
||||
}
|
||||
|
||||
return DamageModifier;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if(DT.default.ArmorDamageModifier != 1)
|
||||
{
|
||||
return DT.default.ArmorDamageModifier;
|
||||
}
|
||||
return 1.f;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user