upload
This commit is contained in:
parent
cde088c1f4
commit
722a3bf4a7
@ -7480,6 +7480,9 @@ final function UIInteraction GetUIController()
|
|||||||
*/
|
*/
|
||||||
native final function bool IsPlayerMuted(const out UniqueNetId Sender);
|
native final function bool IsPlayerMuted(const out UniqueNetId Sender);
|
||||||
|
|
||||||
|
native final function bool IsClientMinimized();
|
||||||
|
native final function bool IsClientInForeground();
|
||||||
|
|
||||||
`if(`__TW_)
|
`if(`__TW_)
|
||||||
native final function bool ShouldReplicateVoicePacketFrom(const out UniqueNetId Sender);
|
native final function bool ShouldReplicateVoicePacketFrom(const out UniqueNetId Sender);
|
||||||
native final function bool ShouldReplicateVoicePacketTo(const out UniqueNetId Receiver);
|
native final function bool ShouldReplicateVoicePacketTo(const out UniqueNetId Receiver);
|
||||||
|
@ -21,4 +21,6 @@ defaultproperties
|
|||||||
ObliterationHealthThreshold = 0
|
ObliterationHealthThreshold = 0
|
||||||
ObliterationDamageThreshold = 1
|
ObliterationDamageThreshold = 1
|
||||||
bIgnoreAggroOnDamage=true
|
bIgnoreAggroOnDamage=true
|
||||||
|
|
||||||
|
bAnyPerk = true
|
||||||
}
|
}
|
||||||
|
@ -33,4 +33,6 @@ defaultproperties
|
|||||||
WeaponDef=class'KFWeapDef_HRG_Locust'
|
WeaponDef=class'KFWeapDef_HRG_Locust'
|
||||||
|
|
||||||
SpreadOnTouchDamage=25
|
SpreadOnTouchDamage=25
|
||||||
|
|
||||||
|
SelfDamageReductionValue=0.f
|
||||||
}
|
}
|
@ -248,6 +248,9 @@ var bool bCanEnrage;
|
|||||||
// If applies radial impulse an it affect the affliction power as well?
|
// If applies radial impulse an it affect the affliction power as well?
|
||||||
var bool bCanApplyRadialCalculationtoAffliction;
|
var bool bCanApplyRadialCalculationtoAffliction;
|
||||||
|
|
||||||
|
/** Reduction for the amount of damage dealt to the instigator */
|
||||||
|
var float SelfDamageReductionValue;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Take the primary HitDirection and modify it to add more spread.
|
* Take the primary HitDirection and modify it to add more spread.
|
||||||
* Use the BloodSpread property to calculate the spread amount
|
* Use the BloodSpread property to calculate the spread amount
|
||||||
@ -478,4 +481,6 @@ Defaultproperties
|
|||||||
bCanEnrage=true
|
bCanEnrage=true
|
||||||
|
|
||||||
bCanApplyRadialCalculationtoAffliction=true
|
bCanApplyRadialCalculationtoAffliction=true
|
||||||
|
|
||||||
|
SelfDamageReductionValue = 1.0f
|
||||||
}
|
}
|
@ -605,7 +605,7 @@ simulated private function OpenSwingingDoor(Pawn P)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** To close the door, just reverse the animation */
|
/** To close the door, just reverse the animation */
|
||||||
simulated private function CloseDoor()
|
simulated function CloseDoor()
|
||||||
{
|
{
|
||||||
if( bIsDestroyed || !bLocalIsDoorOpen || !bCanCloseDoor)
|
if( bIsDestroyed || !bLocalIsDoorOpen || !bCanCloseDoor)
|
||||||
{
|
{
|
||||||
|
@ -390,6 +390,9 @@ function GiveTo(Pawn P)
|
|||||||
local KFInventoryManager KFIM;
|
local KFInventoryManager KFIM;
|
||||||
local KFGameReplicationInfo KFGRI;
|
local KFGameReplicationInfo KFGRI;
|
||||||
local class<Inventory> NewInventoryClass;
|
local class<Inventory> NewInventoryClass;
|
||||||
|
local bool bIsSecondaryPistol;
|
||||||
|
local bool bIs9mmInInventory;
|
||||||
|
local bool bIsHRG93InInventory;
|
||||||
|
|
||||||
NewInventoryClass = InventoryClass;
|
NewInventoryClass = InventoryClass;
|
||||||
|
|
||||||
@ -404,28 +407,42 @@ function GiveTo(Pawn P)
|
|||||||
KFIM = KFInventoryManager(P.InvManager);
|
KFIM = KFInventoryManager(P.InvManager);
|
||||||
if (KFIM != None)
|
if (KFIM != None)
|
||||||
{
|
{
|
||||||
if (KFIM.Is9mmInInventory())
|
bIsSecondaryPistol = InventoryClass.name == 'KFWeap_HRG_93R' ||
|
||||||
|
InventoryClass.name == 'KFWeap_HRG_93R_Dual' ||
|
||||||
|
InventoryClass.name == 'KFWeap_Pistol_9mm' ||
|
||||||
|
InventoryClass.name == 'KFWeap_Pistol_Dual9mm';
|
||||||
|
|
||||||
|
if (bIsSecondaryPistol)
|
||||||
{
|
{
|
||||||
if (InventoryClass.name == 'KFWeap_HRG_93R')
|
bIs9mmInInventory = KFIM.Is9mmInInventory();
|
||||||
|
bIsHRG93InInventory = KFIM.IsHRG93InInventory();
|
||||||
|
if (!(bIs9mmInInventory && bIsHRG93InInventory))
|
||||||
{
|
{
|
||||||
NewInventoryClass = class<Weapon>(DynamicLoadObject(class'KfWeapDef_9mm'.default.WeaponClassPath, class'Class'));
|
if (bIs9mmInInventory)
|
||||||
}
|
{
|
||||||
else if (InventoryClass.name == 'KFWeap_HRG_93R_Dual')
|
if (InventoryClass.name == 'KFWeap_HRG_93R')
|
||||||
{
|
{
|
||||||
NewInventoryClass = class<Weapon>(DynamicLoadObject(class'KfWeapDef_9mmDual'.default.WeaponClassPath, class'Class'));
|
NewInventoryClass = class<Weapon>(DynamicLoadObject(class'KfWeapDef_9mm'.default.WeaponClassPath, class'Class'));
|
||||||
}
|
}
|
||||||
}
|
else if (InventoryClass.name == 'KFWeap_HRG_93R_Dual')
|
||||||
else
|
{
|
||||||
{
|
NewInventoryClass = class<Weapon>(DynamicLoadObject(class'KfWeapDef_9mmDual'.default.WeaponClassPath, class'Class'));
|
||||||
if(InventoryClass.name == 'KFWeap_Pistol_9mm')
|
}
|
||||||
{
|
}
|
||||||
NewInventoryClass = class<Weapon>(DynamicLoadObject(class'KFWeapDef_HRG_93R'.default.WeaponClassPath, class'Class'));
|
else
|
||||||
}
|
{
|
||||||
else if (InventoryClass.name == 'KFWeap_Pistol_Dual9mm')
|
if(InventoryClass.name == 'KFWeap_Pistol_9mm')
|
||||||
{
|
{
|
||||||
NewInventoryClass = class<Weapon>(DynamicLoadObject(class'KFWeapDef_HRG_93R_Dual'.default.WeaponClassPath, class'Class'));
|
NewInventoryClass = class<Weapon>(DynamicLoadObject(class'KFWeapDef_HRG_93R'.default.WeaponClassPath, class'Class'));
|
||||||
|
}
|
||||||
|
else if (InventoryClass.name == 'KFWeap_Pistol_Dual9mm')
|
||||||
|
{
|
||||||
|
NewInventoryClass = class<Weapon>(DynamicLoadObject(class'KFWeapDef_HRG_93R_Dual'.default.WeaponClassPath, class'Class'));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
KFWInvClass = class<KFWeapon>(NewInventoryClass);
|
KFWInvClass = class<KFWeapon>(NewInventoryClass);
|
||||||
foreach KFIM.InventoryActors(class'KFWeapon', KFW)
|
foreach KFIM.InventoryActors(class'KFWeapon', KFW)
|
||||||
|
@ -145,18 +145,12 @@ simulated function SetActive(bool bActive)
|
|||||||
function SetCompleted(bool bComplete)
|
function SetCompleted(bool bComplete)
|
||||||
{
|
{
|
||||||
local GFxObject DataObject;
|
local GFxObject DataObject;
|
||||||
local KFGameReplicationInfo KFGRI;
|
|
||||||
|
|
||||||
KFGRI=KFGameReplicationInfo(KFPC.WorldInfo.GRI);
|
DataObject = CreateObject("Object");
|
||||||
|
|
||||||
if (KFGRI.IsContaminationMode() == false)
|
DataObject.SetBool("bComplete", bComplete);
|
||||||
{
|
DataObject.SetString("completeString", bComplete ? Localize("Objectives", "SuccessString", "KFGame") : "");
|
||||||
DataObject = CreateObject("Object");
|
SetObject("completeStatus", DataObject);
|
||||||
|
|
||||||
DataObject.SetBool("bComplete", bComplete);
|
|
||||||
DataObject.SetString("completeString", bComplete ? Localize("Objectives", "SuccessString", "KFGame") : "");
|
|
||||||
SetObject("completeStatus", DataObject);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!bComplete)
|
if (!bComplete)
|
||||||
{
|
{
|
||||||
@ -272,15 +266,6 @@ function ClearObjectiveUI()
|
|||||||
//pass a value from 0-1
|
//pass a value from 0-1
|
||||||
function SetCurrentProgress(float CurrentProgress)
|
function SetCurrentProgress(float CurrentProgress)
|
||||||
{
|
{
|
||||||
local KFGameReplicationInfo KFGRI;
|
|
||||||
|
|
||||||
KFGRI=KFGameReplicationInfo(KFPC.WorldInfo.GRI);
|
|
||||||
|
|
||||||
if (KFGRI.IsContaminationMode())
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (LastProgress != CurrentProgress)
|
if (LastProgress != CurrentProgress)
|
||||||
{
|
{
|
||||||
CurrentProgress = FClamp(CurrentProgress, 0, 1);
|
CurrentProgress = FClamp(CurrentProgress, 0, 1);
|
||||||
|
@ -366,4 +366,5 @@ DefaultProperties
|
|||||||
LastWeight=-1
|
LastWeight=-1
|
||||||
bLastDoshVisibility=true
|
bLastDoshVisibility=true
|
||||||
LastGrenadeIndex=0
|
LastGrenadeIndex=0
|
||||||
|
LastSecondaryAmmo=255
|
||||||
}
|
}
|
||||||
|
@ -157,7 +157,7 @@ struct InventoryHelper
|
|||||||
var bool IsKey;
|
var bool IsKey;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct WeaponSkinListCacheState
|
struct GenericCacheState
|
||||||
{
|
{
|
||||||
var array<InventoryHelper> SearchCache;
|
var array<InventoryHelper> SearchCache;
|
||||||
|
|
||||||
@ -165,27 +165,19 @@ struct WeaponSkinListCacheState
|
|||||||
|
|
||||||
var bool NeedToRegenerate;
|
var bool NeedToRegenerate;
|
||||||
|
|
||||||
var EInventoryWeaponType_Filter WeaponTypeFilter;
|
|
||||||
var int PerkIndexFilter;
|
|
||||||
var ItemRarity RarityFilter;
|
|
||||||
|
|
||||||
structdefaultproperties
|
structdefaultproperties
|
||||||
{
|
{
|
||||||
NeedToRegenerate = false
|
NeedToRegenerate = false
|
||||||
|
|
||||||
WeaponTypeFilter = EInvWT_None
|
|
||||||
PerkIndexFilter = 0
|
|
||||||
RarityFilter = ITR_NONE
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
var WeaponSkinListCacheState WeaponSkinListCache;
|
var GenericCacheState WeaponSkinListCache;
|
||||||
|
|
||||||
var array<InventoryHelper> CosmeticSkinListSearchCache;
|
var GenericCacheState CosmeticSkinListCache;
|
||||||
|
|
||||||
var array<InventoryHelper> CraftingListSearchCache;
|
var GenericCacheState CraftingListCache;
|
||||||
|
|
||||||
var array<InventoryHelper> ItemListSearchCache;
|
var GenericCacheState ItemListCache;
|
||||||
|
|
||||||
struct ByTypeItemsHelper
|
struct ByTypeItemsHelper
|
||||||
{
|
{
|
||||||
@ -460,13 +452,12 @@ function InitInventory()
|
|||||||
HelperItem.ItemDefinition = onlineSub.CurrentInventory[i].Definition;
|
HelperItem.ItemDefinition = onlineSub.CurrentInventory[i].Definition;
|
||||||
HelperItem.ItemCount = onlineSub.CurrentInventory[i].Quantity;
|
HelperItem.ItemCount = onlineSub.CurrentInventory[i].Quantity;
|
||||||
|
|
||||||
if (TempItemDetailsHolder.Type == ITP_WeaponSkin)
|
switch (TempItemDetailsHolder.Type)
|
||||||
{
|
{
|
||||||
HelperItem.Rarity = TempItemDetailsHolder.Rarity;
|
case ITP_WeaponSkin:
|
||||||
HelperItem.Quality = TempItemDetailsHolder.Quality;
|
|
||||||
|
|
||||||
if (bool(OnlineSub.CurrentInventory[i].NewlyAdded))
|
if (bool(OnlineSub.CurrentInventory[i].NewlyAdded))
|
||||||
{
|
{
|
||||||
|
// We need to sort again
|
||||||
WeaponSkinListCache.NeedToRegenerate = true;
|
WeaponSkinListCache.NeedToRegenerate = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -477,12 +468,17 @@ function InitInventory()
|
|||||||
|
|
||||||
if (ItemID != INDEX_NONE)
|
if (ItemID != INDEX_NONE)
|
||||||
{
|
{
|
||||||
|
HelperItem.Rarity = WeaponSkinListCache.SearchCache[ItemID].Rarity;
|
||||||
|
HelperItem.Quality = WeaponSkinListCache.SearchCache[ItemID].Quality;
|
||||||
HelperItem.WeaponDef = WeaponSkinListCache.SearchCache[ItemID].WeaponDef;
|
HelperItem.WeaponDef = WeaponSkinListCache.SearchCache[ItemID].WeaponDef;
|
||||||
HelperItem.Price = WeaponSkinListCache.SearchCache[ItemID].Price;
|
HelperItem.Price = WeaponSkinListCache.SearchCache[ItemID].Price;
|
||||||
HelperItem.SkinType = WeaponSkinListCache.SearchCache[ItemID].SkinType;
|
HelperItem.SkinType = WeaponSkinListCache.SearchCache[ItemID].SkinType;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
HelperItem.Rarity = TempItemDetailsHolder.Rarity;
|
||||||
|
HelperItem.Quality = TempItemDetailsHolder.Quality;
|
||||||
|
|
||||||
// Skin Type
|
// Skin Type
|
||||||
|
|
||||||
// Get right part of the string without from the first "| "
|
// Get right part of the string without from the first "| "
|
||||||
@ -513,17 +509,24 @@ function InitInventory()
|
|||||||
|
|
||||||
WeaponSkinListCache.SearchCache.AddItem(HelperItem);
|
WeaponSkinListCache.SearchCache.AddItem(HelperItem);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else if (TempItemDetailsHolder.Type == ITP_CharacterSkin)
|
break;
|
||||||
{
|
|
||||||
|
case ITP_CharacterSkin:
|
||||||
|
if (bool(OnlineSub.CurrentInventory[i].NewlyAdded))
|
||||||
|
{
|
||||||
|
// We need to sort again
|
||||||
|
CosmeticSkinListCache.NeedToRegenerate = true;
|
||||||
|
}
|
||||||
|
|
||||||
// Search on the cache, to speed up
|
// Search on the cache, to speed up
|
||||||
ItemID = CosmeticSkinListSearchCache.Find('ItemDefinition', HelperItem.ItemDefinition);
|
ItemID = CosmeticSkinListCache.SearchCache.Find('ItemDefinition', HelperItem.ItemDefinition);
|
||||||
|
|
||||||
if (ItemID != INDEX_NONE)
|
if (ItemID != INDEX_NONE)
|
||||||
{
|
{
|
||||||
HelperItem.Rarity = CosmeticSkinListSearchCache[ItemID].Rarity;
|
HelperItem.Rarity = CosmeticSkinListCache.SearchCache[ItemID].Rarity;
|
||||||
HelperItem.CosmeticType = CosmeticSkinListSearchCache[ItemID].CosmeticType;
|
HelperItem.CosmeticType = CosmeticSkinListCache.SearchCache[ItemID].CosmeticType;
|
||||||
HelperItem.SkinType = CosmeticSkinListSearchCache[ItemID].SkinType;
|
HelperItem.SkinType = CosmeticSkinListCache.SearchCache[ItemID].SkinType;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -561,18 +564,25 @@ function InitInventory()
|
|||||||
HelperItem.SkinType = CrC(SkinType);
|
HelperItem.SkinType = CrC(SkinType);
|
||||||
}
|
}
|
||||||
|
|
||||||
CosmeticSkinListSearchCache.AddItem(HelperItem);
|
CosmeticSkinListCache.SearchCache.AddItem(HelperItem);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else if (TempItemDetailsHolder.Type == ITP_CraftingComponent)
|
break;
|
||||||
{
|
|
||||||
ItemId = CraftingListSearchCache.Find('ItemDefinition', HelperItem.ItemDefinition);
|
case ITP_CraftingComponent:
|
||||||
|
if (bool(OnlineSub.CurrentInventory[i].NewlyAdded))
|
||||||
|
{
|
||||||
|
// We need to sort again
|
||||||
|
CraftingListCache.NeedToRegenerate = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
ItemId = CraftingListCache.SearchCache.Find('ItemDefinition', HelperItem.ItemDefinition);
|
||||||
|
|
||||||
if (ItemID != INDEX_NONE)
|
if (ItemID != INDEX_NONE)
|
||||||
{
|
{
|
||||||
HelperItem.CraftingType = CraftingListSearchCache[ItemID].CraftingType;
|
HelperItem.CraftingType = CraftingListCache.SearchCache[ItemID].CraftingType;
|
||||||
HelperItem.CraftingRarity = CraftingListSearchCache[ItemID].CraftingRarity;
|
HelperItem.CraftingRarity = CraftingListCache.SearchCache[ItemID].CraftingRarity;
|
||||||
HelperItem.CraftingTicketType = CraftingListSearchCache[ItemID].CraftingTicketType;
|
HelperItem.CraftingTicketType = CraftingListCache.SearchCache[ItemID].CraftingTicketType;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -674,16 +684,23 @@ function InitInventory()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
CraftingListSearchCache.AddItem(HelperItem);
|
CraftingListCache.SearchCache.AddItem(HelperItem);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else if (TempItemDetailsHolder.Type == ITP_KeyCrate)
|
break;
|
||||||
{
|
|
||||||
ItemId = ItemListSearchCache.Find('ItemDefinition', HelperItem.ItemDefinition);
|
case ITP_KeyCrate:
|
||||||
|
if (bool(OnlineSub.CurrentInventory[i].NewlyAdded))
|
||||||
|
{
|
||||||
|
// We need to sort again
|
||||||
|
ItemListCache.NeedToRegenerate = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
ItemId = ItemListCache.SearchCache.Find('ItemDefinition', HelperItem.ItemDefinition);
|
||||||
|
|
||||||
if (ItemID != INDEX_NONE)
|
if (ItemID != INDEX_NONE)
|
||||||
{
|
{
|
||||||
HelperItem.IsKey = ItemListSearchCache[ItemID].IsKey;
|
HelperItem.IsKey = ItemListCache.SearchCache[ItemID].IsKey;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -705,11 +722,14 @@ function InitInventory()
|
|||||||
HelperItem.IsKey = false;
|
HelperItem.IsKey = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
ItemListSearchCache.AddItem(HelperItem);
|
ItemListCache.SearchCache.AddItem(HelperItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
ByTypeItems[TempItemDetailsHolder.Type].ItemsOnType.AddItem(HelperItem);
|
ByTypeItems[TempItemDetailsHolder.Type].ItemsOnType.AddItem(HelperItem);
|
||||||
|
|
||||||
HelperIndex = ByTypeItems[TempItemDetailsHolder.Type].ItemsOnType.Length - 1;
|
HelperIndex = ByTypeItems[TempItemDetailsHolder.Type].ItemsOnType.Length - 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -757,37 +777,108 @@ function InitInventory()
|
|||||||
|
|
||||||
if (CurrentInventoryFilter == EInv_All || CurrentInventoryFilter == EInv_WeaponSkins)
|
if (CurrentInventoryFilter == EInv_All || CurrentInventoryFilter == EInv_WeaponSkins)
|
||||||
{
|
{
|
||||||
// If need to refresh... we regenerate the list, if not reuse our Cache
|
// Cache for Weapon Skin List only if no more filters are used, the reordering for those should be fast enough
|
||||||
|
|
||||||
if (WeaponSkinListCache.NeedToRegenerate
|
if (CurrentWeaponTypeFilter == EInvWT_None
|
||||||
|| WeaponSkinListCache.WeaponTypeFilter != CurrentWeaponTypeFilter
|
&& CurrentPerkIndexFilter == KFPC.PerkList.Length
|
||||||
|| WeaponSkinListCache.PerkIndexFilter != CurrentPerkIndexFilter
|
&& CurrentRarityFilter == ITR_NONE)
|
||||||
|| WeaponSkinListCache.RarityFilter != CurrentRarityFilter
|
|
||||||
|| ByTypeItems[ITP_WeaponSkin].ItemsOnType.Length != WeaponSkinListCache.OrderedCache.Length)
|
|
||||||
{
|
{
|
||||||
WeaponSkinListCache.NeedToRegenerate = false;
|
if (WeaponSkinListCache.NeedToRegenerate
|
||||||
|
|| ByTypeItems[ITP_WeaponSkin].ItemsOnType.Length != WeaponSkinListCache.OrderedCache.Length)
|
||||||
|
{
|
||||||
|
WeaponSkinListCache.NeedToRegenerate = false;
|
||||||
|
|
||||||
WeaponSkinListCache.WeaponTypeFilter = CurrentWeaponTypeFilter;
|
ByTypeItems[ITP_WeaponSkin].ItemsOnType.Sort(SortWeaponSkinList);
|
||||||
WeaponSkinListCache.PerkIndexFilter = CurrentPerkIndexFilter;
|
|
||||||
WeaponSkinListCache.RarityFilter = CurrentRarityFilter;
|
|
||||||
|
|
||||||
// We want to order by Price - Weapon Def - Rarity - Quality
|
WeaponSkinListCache.OrderedCache = ByTypeItems[ITP_WeaponSkin].ItemsOnType;
|
||||||
|
|
||||||
|
/*`Log("----------");
|
||||||
|
|
||||||
|
for (i = 0 ; i < ByTypeItems[ITP_WeaponSkin].ItemsOnType.Length; i++)
|
||||||
|
{
|
||||||
|
`Log("ID : " $ByTypeItems[ITP_WeaponSkin].ItemsOnType[i].ItemDefinition);
|
||||||
|
`Log("Weapon Def : " $ByTypeItems[ITP_WeaponSkin].ItemsOnType[i].WeaponDef);
|
||||||
|
`Log("Price : " $ByTypeItems[ITP_WeaponSkin].ItemsOnType[i].Price);
|
||||||
|
`Log("Full Name : " $ByTypeItems[ITP_WeaponSkin].ItemsOnType[i].FullName);
|
||||||
|
`Log("Skin : " $ByTypeItems[ITP_WeaponSkin].ItemsOnType[i].SkinType);
|
||||||
|
`Log("Rarity : " $ByTypeItems[ITP_WeaponSkin].ItemsOnType[i].Rarity);
|
||||||
|
`Log("Quality : " $ByTypeItems[ITP_WeaponSkin].ItemsOnType[i].Quality);
|
||||||
|
`Log("----------");
|
||||||
|
}
|
||||||
|
|
||||||
|
`Log("----------");*/
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//`Log("USING WEAPON SKIN LIST CACHE!!!");
|
||||||
|
|
||||||
|
ByTypeItems[ITP_WeaponSkin].ItemsOnType = WeaponSkinListCache.OrderedCache;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
ByTypeItems[ITP_WeaponSkin].ItemsOnType.Sort(SortWeaponSkinList);
|
ByTypeItems[ITP_WeaponSkin].ItemsOnType.Sort(SortWeaponSkinList);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
WeaponSkinListCache.OrderedCache = ByTypeItems[ITP_WeaponSkin].ItemsOnType;
|
if (CurrentInventoryFilter == EInv_All || CurrentInventoryFilter == EInv_Cosmetics)
|
||||||
|
{
|
||||||
|
// Cache for Cosmetic Skin List only if no more filters are used, the reordering for those should be fast enough
|
||||||
|
|
||||||
|
if (CurrentRarityFilter == ITR_NONE)
|
||||||
|
{
|
||||||
|
if (CosmeticSkinListCache.NeedToRegenerate
|
||||||
|
|| ByTypeItems[ITP_CharacterSkin].ItemsOnType.Length != CosmeticSkinListCache.OrderedCache.Length)
|
||||||
|
{
|
||||||
|
CosmeticSkinListCache.NeedToRegenerate = false;
|
||||||
|
|
||||||
|
ByTypeItems[ITP_CharacterSkin].ItemsOnType.Sort(SortCosmeticsList);
|
||||||
|
|
||||||
|
CosmeticSkinListCache.OrderedCache = ByTypeItems[ITP_CharacterSkin].ItemsOnType;
|
||||||
|
|
||||||
|
/*`Log("----------");
|
||||||
|
|
||||||
|
for (i = 0 ; i < ByTypeItems[ITP_CharacterSkin].ItemsOnType.Length; i++)
|
||||||
|
{
|
||||||
|
`Log("Cosmetic Name : " $ByTypeItems[ITP_CharacterSkin].ItemsOnType[i].CosmeticType);
|
||||||
|
`Log("Skin : " $ByTypeItems[ITP_CharacterSkin].ItemsOnType[i].SkinType);
|
||||||
|
`Log("Rarity : " $ByTypeItems[ITP_CharacterSkin].ItemsOnType[i].Rarity);
|
||||||
|
`Log("----------");
|
||||||
|
}
|
||||||
|
|
||||||
|
`Log("----------");*/
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//`Log("USING COSMETIC SKIN LIST CACHE!!!");
|
||||||
|
|
||||||
|
ByTypeItems[ITP_CharacterSkin].ItemsOnType = CosmeticSkinListCache.OrderedCache;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ByTypeItems[ITP_CharacterSkin].ItemsOnType.Sort(SortCosmeticsList);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (CurrentInventoryFilter == EInv_All || CurrentInventoryFilter == EInv_CraftingMats)
|
||||||
|
{
|
||||||
|
if (CraftingListCache.NeedToRegenerate
|
||||||
|
|| ByTypeItems[ITP_CraftingComponent].ItemsOnType.Length != CraftingListCache.OrderedCache.Length)
|
||||||
|
{
|
||||||
|
CraftingListCache.NeedToRegenerate = false;
|
||||||
|
|
||||||
|
ByTypeItems[ITP_CraftingComponent].ItemsOnType.Sort(SortCraftingList);
|
||||||
|
|
||||||
|
CraftingListCache.OrderedCache = ByTypeItems[ITP_CraftingComponent].ItemsOnType;
|
||||||
|
|
||||||
/*`Log("----------");
|
/*`Log("----------");
|
||||||
|
|
||||||
for (i = 0 ; i < ByTypeItems[ITP_WeaponSkin].ItemsOnType.Length; i++)
|
for (i = 0 ; i < ByTypeItems[ITP_CraftingComponent].ItemsOnType.Length; i++)
|
||||||
{
|
{
|
||||||
`Log("ID : " $ByTypeItems[ITP_WeaponSkin].ItemsOnType[i].ItemDefinition);
|
`Log("Crafting Type : " $ByTypeItems[ITP_CraftingComponent].ItemsOnType[i].CraftingType);
|
||||||
`Log("Weapon Def : " $ByTypeItems[ITP_WeaponSkin].ItemsOnType[i].WeaponDef);
|
`Log("Rarity : " $ByTypeItems[ITP_CraftingComponent].ItemsOnType[i].CraftingRarity);
|
||||||
`Log("Price : " $ByTypeItems[ITP_WeaponSkin].ItemsOnType[i].Price);
|
`Log("Ticket Type : " $ByTypeItems[ITP_CraftingComponent].ItemsOnType[i].CraftingTicketType);
|
||||||
`Log("Full Name : " $ByTypeItems[ITP_WeaponSkin].ItemsOnType[i].FullName);
|
|
||||||
`Log("Skin : " $ByTypeItems[ITP_WeaponSkin].ItemsOnType[i].SkinType);
|
|
||||||
`Log("Rarity : " $ByTypeItems[ITP_WeaponSkin].ItemsOnType[i].Rarity);
|
|
||||||
`Log("Quality : " $ByTypeItems[ITP_WeaponSkin].ItemsOnType[i].Quality);
|
|
||||||
`Log("----------");
|
`Log("----------");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -795,60 +886,40 @@ function InitInventory()
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//`Log("USING SKIN LIST CACHE!!!");
|
//`Log("USING CRAFTING LIST CACHE!!!");
|
||||||
|
|
||||||
ByTypeItems[ITP_WeaponSkin].ItemsOnType = WeaponSkinListCache.OrderedCache;
|
ByTypeItems[ITP_CraftingComponent].ItemsOnType = CraftingListCache.OrderedCache;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (CurrentInventoryFilter == EInv_All || CurrentInventoryFilter == EInv_Cosmetics)
|
|
||||||
{
|
|
||||||
ByTypeItems[ITP_CharacterSkin].ItemsOnType.Sort(SortCosmeticsList);
|
|
||||||
|
|
||||||
/*`Log("----------");
|
|
||||||
|
|
||||||
for (i = 0 ; i < ByTypeItems[ITP_CharacterSkin].ItemsOnType.Length; i++)
|
|
||||||
{
|
|
||||||
`Log("Cosmetic Name : " $ByTypeItems[ITP_CharacterSkin].ItemsOnType[i].CosmeticType);
|
|
||||||
`Log("Skin : " $ByTypeItems[ITP_CharacterSkin].ItemsOnType[i].SkinType);
|
|
||||||
`Log("Rarity : " $ByTypeItems[ITP_CharacterSkin].ItemsOnType[i].Rarity);
|
|
||||||
`Log("----------");
|
|
||||||
}
|
|
||||||
|
|
||||||
`Log("----------");*/
|
|
||||||
}
|
|
||||||
|
|
||||||
if (CurrentInventoryFilter == EInv_All || CurrentInventoryFilter == EInv_CraftingMats)
|
|
||||||
{
|
|
||||||
ByTypeItems[ITP_CraftingComponent].ItemsOnType.Sort(SortCraftingList);
|
|
||||||
|
|
||||||
/*`Log("----------");
|
|
||||||
|
|
||||||
for (i = 0 ; i < ByTypeItems[ITP_CraftingComponent].ItemsOnType.Length; i++)
|
|
||||||
{
|
|
||||||
`Log("Crafting Type : " $ByTypeItems[ITP_CraftingComponent].ItemsOnType[i].CraftingType);
|
|
||||||
`Log("Rarity : " $ByTypeItems[ITP_CraftingComponent].ItemsOnType[i].CraftingRarity);
|
|
||||||
`Log("Ticket Type : " $ByTypeItems[ITP_CraftingComponent].ItemsOnType[i].CraftingTicketType);
|
|
||||||
`Log("----------");
|
|
||||||
}
|
|
||||||
|
|
||||||
`Log("----------");*/
|
|
||||||
}
|
|
||||||
|
|
||||||
if (CurrentInventoryFilter == EInv_All || CurrentInventoryFilter == EInv_Consumables)
|
if (CurrentInventoryFilter == EInv_All || CurrentInventoryFilter == EInv_Consumables)
|
||||||
{
|
{
|
||||||
// Consumables is the type for the "Items" category on the UI
|
if (ItemListCache.NeedToRegenerate
|
||||||
ByTypeItems[ITP_KeyCrate].ItemsOnType.Sort(SortItemList);
|
|| ByTypeItems[ITP_KeyCrate].ItemsOnType.Length != ItemListCache.OrderedCache.Length)
|
||||||
|
|
||||||
/*`Log("----------");
|
|
||||||
|
|
||||||
for (i = 0 ; i < ByTypeItems[ITP_KeyCrate].ItemsOnType.Length; i++)
|
|
||||||
{
|
{
|
||||||
`Log("Is Key : " $ByTypeItems[ITP_KeyCrate].ItemsOnType[i].IsKey);
|
ItemListCache.NeedToRegenerate = false;
|
||||||
`Log("----------");
|
|
||||||
}
|
|
||||||
|
|
||||||
`Log("----------");*/
|
// Consumables is the type for the "Items" category on the UI
|
||||||
|
ByTypeItems[ITP_KeyCrate].ItemsOnType.Sort(SortItemList);
|
||||||
|
|
||||||
|
ItemListCache.OrderedCache = ByTypeItems[ITP_KeyCrate].ItemsOnType;
|
||||||
|
|
||||||
|
/*`Log("----------");
|
||||||
|
|
||||||
|
for (i = 0 ; i < ByTypeItems[ITP_KeyCrate].ItemsOnType.Length; i++)
|
||||||
|
{
|
||||||
|
`Log("Is Key : " $ByTypeItems[ITP_KeyCrate].ItemsOnType[i].IsKey);
|
||||||
|
`Log("----------");
|
||||||
|
}
|
||||||
|
|
||||||
|
`Log("----------");*/
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//`Log("USING ITEMS LIST CACHE!!!");
|
||||||
|
|
||||||
|
ByTypeItems[ITP_KeyCrate].ItemsOnType = ItemListCache.OrderedCache;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//`Log("--------------------------------");
|
//`Log("--------------------------------");
|
||||||
@ -898,10 +969,15 @@ function bool DoesMatchFilter(ItemProperties InventoryItem)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// doesn't match filter if the perk id doesn't match (unless it's set to any or survivalist)
|
// Skip perk check for 9mm
|
||||||
if (CurrentPerkIndexFilter != KFPC.PerkList.length && !(CurrentPerkIndexFilter == InventoryItem.PerkId || CurrentPerkIndexFilter == InventoryItem.AltPerkId) && KFPC.PerkList[CurrentPerkIndexFilter].PerkClass != class'KFPerk_Survivalist') //perk
|
if (!(InventoryItem.WeaponType == 0 && Is9mm(InventoryItem)))
|
||||||
{
|
{
|
||||||
return false;
|
// doesn't match filter if the perk id doesn't match (unless it's set to any or survivalist)
|
||||||
|
if (CurrentPerkIndexFilter != KFPC.PerkList.length
|
||||||
|
&& !(CurrentPerkIndexFilter == InventoryItem.PerkId || CurrentPerkIndexFilter == InventoryItem.AltPerkId))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -917,6 +993,13 @@ function bool DoesMatchFilter(ItemProperties InventoryItem)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function bool Is9mm(ItemProperties InventoryItem)
|
||||||
|
{
|
||||||
|
local int ItemID;
|
||||||
|
ItemID = class'KFWeaponSkinList'.default.Skins.Find('Id', InventoryItem.Definition);
|
||||||
|
return class'KFWeaponSkinList'.default.Skins[ItemID].WeaponDef != none && class'KFWeaponSkinList'.default.Skins[ItemID].WeaponDef.name == 'KFWeapDef_9mm';
|
||||||
|
}
|
||||||
|
|
||||||
function OnItemExhangeTimeOut()
|
function OnItemExhangeTimeOut()
|
||||||
{
|
{
|
||||||
if( !class'WorldInfo'.static.IsConsoleBuild() )
|
if( !class'WorldInfo'.static.IsConsoleBuild() )
|
||||||
@ -1906,7 +1989,6 @@ function Callback_PerkTypeFilterChanged(int NewFilterIndex)
|
|||||||
InitInventory();
|
InitInventory();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function CallBack_RequestCosmeticCraftInfo()
|
function CallBack_RequestCosmeticCraftInfo()
|
||||||
{
|
{
|
||||||
SetCosmeticCraftDetails();
|
SetCosmeticCraftDetails();
|
||||||
|
@ -231,6 +231,8 @@ event OnClose()
|
|||||||
Manager.CachedProfile.SetProfileSettingValueInt( KFID_SurvivalStartingWeapIdx, KFPC.SurvivalPerkWeapIndex );
|
Manager.CachedProfile.SetProfileSettingValueInt( KFID_SurvivalStartingWeapIdx, KFPC.SurvivalPerkWeapIndex );
|
||||||
Manager.CachedProfile.SetProfileSettingValueInt( KFID_SurvivalStartingSecondaryWeapIdx, KFPC.SurvivalPerkSecondaryWeapIndex );
|
Manager.CachedProfile.SetProfileSettingValueInt( KFID_SurvivalStartingSecondaryWeapIdx, KFPC.SurvivalPerkSecondaryWeapIndex );
|
||||||
Manager.CachedProfile.SetProfileSettingValueInt( KFID_SurvivalStartingGrenIdx, KFPC.SurvivalPerkGrenIndex );
|
Manager.CachedProfile.SetProfileSettingValueInt( KFID_SurvivalStartingGrenIdx, KFPC.SurvivalPerkGrenIndex );
|
||||||
|
|
||||||
|
KFPC.CurrentPerk.SetWeaponSelectedIndex(KFPC.SurvivalPerkWeapIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
bModifiedPerk = false;
|
bModifiedPerk = false;
|
||||||
|
@ -170,7 +170,9 @@ function SearchInventoryForNewItem()
|
|||||||
local int ItemIndex, InventoryIndex;
|
local int ItemIndex, InventoryIndex;
|
||||||
local CurrentInventoryEntry TempInventoryDetailsHolder;
|
local CurrentInventoryEntry TempInventoryDetailsHolder;
|
||||||
local ItemProperties TempItemDetailsHolder;
|
local ItemProperties TempItemDetailsHolder;
|
||||||
|
local int i, IndexInReward;
|
||||||
|
local array<int> NewlyAddedItems, RewardIDs;
|
||||||
|
local KFGameReplicationInfo KFGRI;
|
||||||
|
|
||||||
ItemIndex = INDEX_NONE;
|
ItemIndex = INDEX_NONE;
|
||||||
InventoryIndex = INDEX_NONE;
|
InventoryIndex = INDEX_NONE;
|
||||||
@ -181,13 +183,50 @@ function SearchInventoryForNewItem()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
InventoryIndex = OnlineSub.CurrentInventory.Find('NewlyAdded', 1);
|
// If weekly check for weekly rewards,..
|
||||||
|
KFGRI = KFGameReplicationInfo(GetPC().Worldinfo.GRI);
|
||||||
|
if(KFGRI != none)
|
||||||
|
{
|
||||||
|
if (KFGRI.bIsWeeklyMode)
|
||||||
|
{
|
||||||
|
// Gather all newly added items
|
||||||
|
for (i = 0; i < OnlineSub.CurrentInventory.Length; ++i)
|
||||||
|
{
|
||||||
|
if (OnlineSub.CurrentInventory[i].NewlyAdded != 0)
|
||||||
|
{
|
||||||
|
NewlyAddedItems.AddItem(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// If more than 1, we prioritise the weekly if any..
|
||||||
|
if (NewlyAddedItems.Length > 1)
|
||||||
|
{
|
||||||
|
RewardIDs = class'KFOnlineStatsWrite'.static.GetWeeklyOutbreakRewards(class'KFGameEngine'.static.GetIntendedWeeklyEventIndexMod());
|
||||||
|
|
||||||
|
for (i = 0; i < NewlyAddedItems.length; i++)
|
||||||
|
{
|
||||||
|
TempInventoryDetailsHolder = OnlineSub.CurrentInventory[NewlyAddedItems[i]];
|
||||||
|
IndexInReward = RewardIDs.Find(TempInventoryDetailsHolder.Definition);
|
||||||
|
|
||||||
|
if (IndexInReward != INDEX_NONE)
|
||||||
|
{
|
||||||
|
InventoryIndex = NewlyAddedItems[i];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(InventoryIndex == INDEX_NONE)
|
||||||
|
{
|
||||||
|
InventoryIndex = OnlineSub.CurrentInventory.Find('NewlyAdded', 1);
|
||||||
|
}
|
||||||
|
|
||||||
if(InventoryIndex != INDEX_NONE)
|
if(InventoryIndex != INDEX_NONE)
|
||||||
{
|
{
|
||||||
TempInventoryDetailsHolder = OnlineSub.CurrentInventory[InventoryIndex];
|
TempInventoryDetailsHolder = OnlineSub.CurrentInventory[InventoryIndex];
|
||||||
|
|
||||||
|
|
||||||
ItemIndex = OnlineSub.ItemPropertiesList.Find('Definition', TempInventoryDetailsHolder.Definition);
|
ItemIndex = OnlineSub.ItemPropertiesList.Find('Definition', TempInventoryDetailsHolder.Definition);
|
||||||
|
|
||||||
if(ItemIndex != INDEX_NONE)
|
if(ItemIndex != INDEX_NONE)
|
||||||
|
@ -307,7 +307,35 @@ function CheckForEmptyStore()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function Callback_StoreSearch(string searchStr)
|
||||||
|
{
|
||||||
|
MainContainer.StoreSearch(searchStr, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
function Callback_Log(string str)
|
||||||
|
{
|
||||||
|
`Log("From AS: " $str);
|
||||||
|
}
|
||||||
|
|
||||||
|
function Callback_OpenKeyboard()
|
||||||
|
{
|
||||||
|
OnlineSub = Class'GameEngine'.static.GetOnlineSubsystem();
|
||||||
|
OnlineSub.PlayerInterface.AddKeyboardInputDoneDelegate(KeyboardInputComplete);
|
||||||
|
OnlineSub.PlayerInterface.ShowKeyboardUI(0, "Search", "Search");
|
||||||
|
}
|
||||||
|
|
||||||
|
function KeyboardInputComplete(bool bWasSuccessful)
|
||||||
|
{
|
||||||
|
local byte bWasCancelled;
|
||||||
|
local string UserInput;
|
||||||
|
|
||||||
|
OnlineSub = Class'GameEngine'.static.GetOnlineSubsystem();
|
||||||
|
UserInput = OnlineSub.PlayerInterface.GetKeyboardInputResults(bWasCancelled);
|
||||||
|
|
||||||
|
Callback_StoreSearch(UserInput);
|
||||||
|
|
||||||
|
OnlineSub.PlayerInterface.ClearKeyboardInputDoneDelegate(KeyboardInputComplete);
|
||||||
|
}
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
|
@ -191,7 +191,7 @@ function UpdateAndGetCurrentWeaponIndexes(class<KFPerk> PerkClass, KFPlayerContr
|
|||||||
KFPerk_Survivalist(KFPC.CurrentPerk).StartingGrenadeClassIndex = GrenadeIdx;
|
KFPerk_Survivalist(KFPC.CurrentPerk).StartingGrenadeClassIndex = GrenadeIdx;
|
||||||
|
|
||||||
// If we are in no gameplay time insta change
|
// If we are in no gameplay time insta change
|
||||||
if (!KFGRI.bWaveIsActive)
|
if (!KFGRI.bWaveIsActive || KFPC.PlayerReplicationInfo.bIsSpectator)
|
||||||
{
|
{
|
||||||
KFPerk_Survivalist(KFPC.CurrentPerk).UpdateCurrentGrenade();
|
KFPerk_Survivalist(KFPC.CurrentPerk).UpdateCurrentGrenade();
|
||||||
}
|
}
|
||||||
|
@ -55,99 +55,68 @@ function SetMapOptions()
|
|||||||
local array<string> ServerMapList;
|
local array<string> ServerMapList;
|
||||||
local KFGameReplicationInfo KFGRI;
|
local KFGameReplicationInfo KFGRI;
|
||||||
local bool IsWeeklyMode;
|
local bool IsWeeklyMode;
|
||||||
local bool bShouldSkipMaps;
|
local bool IsBoom, IsScavenger, IsBossRush, IsGunGame, IsContaminationMode, IsBountyHunt;
|
||||||
local bool bWeeklyNoSanta;
|
|
||||||
|
|
||||||
local bool IsBoom, IsCraniumCracker, IsTinyTerror, IsBobbleZed, IsPoundemonium, IsUpUpAndDecay, IsZedTime, IsBeefcake;
|
|
||||||
local bool IsBloodThirst, IsColiseum, IsArachnophobia, IsScavenger, IsWW, IsAbandon, IsBossRush, IsShrunkenHeads;
|
|
||||||
local bool IsGunGame, /*IsVIP,*/ IsPerkRoulette, IsContaminationMode, IsBountyHunt;
|
|
||||||
|
|
||||||
local name MapName;
|
local name MapName;
|
||||||
|
|
||||||
KFGRI = KFGameReplicationInfo(GetPC().WorldInfo.GRI);
|
KFGRI = KFGameReplicationInfo(GetPC().WorldInfo.GRI);
|
||||||
|
|
||||||
bShouldSkipMaps = false;
|
|
||||||
Counter = 0;
|
Counter = 0;
|
||||||
|
|
||||||
if(KFGRI != none && KFGRI.VoteCollector != none)
|
if (KFGRI != none && KFGRI.VoteCollector != none)
|
||||||
{
|
{
|
||||||
ServerMapList = KFGRI.VoteCollector.MapList;
|
ServerMapList = KFGRI.VoteCollector.MapList;
|
||||||
|
|
||||||
IsWeeklyMode = KFGRI.bIsWeeklyMode;
|
IsWeeklyMode = KFGRI.bIsWeeklyMode;
|
||||||
|
|
||||||
IsBoom = false;
|
IsBoom = false;
|
||||||
IsCraniumCracker = false;
|
|
||||||
IsTinyTerror = false;
|
|
||||||
IsBobbleZed = false;
|
|
||||||
IsPoundemonium = false;
|
|
||||||
IsUpUpAndDecay = false;
|
|
||||||
IsZedTime = false;
|
|
||||||
IsBeefcake = false;
|
|
||||||
IsBloodThirst = false;
|
|
||||||
IsColiseum = false;
|
|
||||||
IsArachnophobia = false;
|
|
||||||
IsScavenger = false;
|
IsScavenger = false;
|
||||||
IsWW = false;
|
|
||||||
IsAbandon = false;
|
|
||||||
IsBossRush = false;
|
IsBossRush = false;
|
||||||
IsShrunkenHeads = false;
|
|
||||||
IsGunGame = false;
|
IsGunGame = false;
|
||||||
//IsVIP = false;
|
|
||||||
IsPerkRoulette = false;
|
|
||||||
IsContaminationMode = false;
|
IsContaminationMode = false;
|
||||||
IsBountyHunt = false;
|
IsBountyHunt = false;
|
||||||
|
|
||||||
switch (KFGRI.CurrentWeeklyIndex)
|
switch (KFGRI.CurrentWeeklyIndex)
|
||||||
{
|
{
|
||||||
case 0: IsBoom = true; break;
|
case 0: IsBoom = true; break;
|
||||||
case 1: IsCraniumCracker = true; break;
|
|
||||||
case 2: IsTinyTerror = true; break;
|
|
||||||
case 3: IsBobbleZed = true; break;
|
|
||||||
case 4: IsPoundemonium = true; break;
|
|
||||||
case 5: IsUpUpAndDecay = true; break;
|
|
||||||
case 6: IsZedTime = true; break;
|
|
||||||
case 7: IsBeefcake = true; break;
|
|
||||||
case 8: IsBloodThirst = true; break;
|
|
||||||
case 9: IsColiseum = true; break;
|
|
||||||
case 10: IsArachnophobia = true; break;
|
|
||||||
case 11: IsScavenger = true; break;
|
case 11: IsScavenger = true; break;
|
||||||
case 12: IsWW = true; break;
|
|
||||||
case 13: IsAbandon = true; break;
|
|
||||||
case 14: IsBossRush = true; break;
|
case 14: IsBossRush = true; break;
|
||||||
case 15: IsShrunkenHeads = true; break;
|
|
||||||
case 16: IsGunGame = true; break;
|
case 16: IsGunGame = true; break;
|
||||||
//case 17: IsVIP = true; break;
|
|
||||||
case 18: IsPerkRoulette = true; break;
|
|
||||||
case 19: IsContaminationMode = true; break;
|
case 19: IsContaminationMode = true; break;
|
||||||
case 20: IsBountyHunt = true; break;
|
case 20: IsBountyHunt = true; break;
|
||||||
}
|
}
|
||||||
|
|
||||||
bShouldSkipMaps = IsWeeklyMode && (IsScavenger || IsBossRush || IsGunGame);
|
|
||||||
|
|
||||||
bWeeklyNoSanta = IsWeeklyMode && ( IsBoom || IsCraniumCracker || IsTinyTerror || IsBobbleZed
|
|
||||||
|| IsPoundemonium || IsUpUpAndDecay || IsZedTime || IsBeefcake
|
|
||||||
|| IsBloodThirst || IsColiseum || IsArachnophobia || IsScavenger
|
|
||||||
|| IsWW || IsAbandon || IsShrunkenHeads || IsPerkRoulette);
|
|
||||||
|
|
||||||
//gfx
|
|
||||||
MapList = CreateArray();
|
MapList = CreateArray();
|
||||||
|
|
||||||
for (i = 0; i < ServerMapList.length; i++)
|
for (i = 0; i < ServerMapList.length; i++)
|
||||||
{
|
{
|
||||||
MapName = name(ServerMapList[i]);
|
MapName = name(ServerMapList[i]);
|
||||||
|
|
||||||
if (bWeeklyNoSanta && MapName == MapSantas)
|
if (IsWeeklyMode)
|
||||||
{
|
{
|
||||||
continue;
|
if (MapName == MapSantas)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( bShouldSkipMaps && ( MapName == MapBiolapse ||
|
if (IsWeeklyMode && IsBoom)
|
||||||
MapName == MapNightmare ||
|
|
||||||
MapName == MapPowerCore ||
|
|
||||||
MapName == MapDescent ||
|
|
||||||
MapName == MapKrampus))
|
|
||||||
{
|
{
|
||||||
continue;
|
if (MapName == MapSteam)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (IsWeeklyMode && (IsScavenger || IsBossRush || IsGunGame))
|
||||||
|
{
|
||||||
|
if (MapName == MapBiolapse ||
|
||||||
|
MapName == MapNightmare ||
|
||||||
|
MapName == MapPowerCore ||
|
||||||
|
MapName == MapDescent ||
|
||||||
|
MapName == MapKrampus)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (IsWeeklyMode && IsContaminationMode)
|
if (IsWeeklyMode && IsContaminationMode)
|
||||||
@ -178,9 +147,12 @@ function SetMapOptions()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (IsWeeklyMode && IsBossRush && MapName == MapSteam)
|
if (IsWeeklyMode && IsBossRush)
|
||||||
{
|
{
|
||||||
continue;
|
if (MapName == MapSteam)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
MapObject = CreateObject("Object");
|
MapObject = CreateObject("Object");
|
||||||
|
@ -28,6 +28,7 @@ var transient int CachedDifficulty, CachedLength;
|
|||||||
var transient array<string> MapList;
|
var transient array<string> MapList;
|
||||||
|
|
||||||
var int NumDifficultyStrings;
|
var int NumDifficultyStrings;
|
||||||
|
var int MaxNumberMapList;
|
||||||
|
|
||||||
// if you change this also update ServerBrowserFilterContainer.as -> NUM_OF_FILTERS
|
// if you change this also update ServerBrowserFilterContainer.as -> NUM_OF_FILTERS
|
||||||
|
|
||||||
@ -55,15 +56,24 @@ enum EFilter_Key
|
|||||||
function Initialize( KFGFxObject_Menu NewParentMenu )
|
function Initialize( KFGFxObject_Menu NewParentMenu )
|
||||||
{
|
{
|
||||||
super.Initialize( NewParentMenu );
|
super.Initialize( NewParentMenu );
|
||||||
|
|
||||||
ServerMenu = KFGFxMenu_ServerBrowser(NewParentMenu);
|
ServerMenu = KFGFxMenu_ServerBrowser(NewParentMenu);
|
||||||
|
|
||||||
if (SavedGameModeIndex < 0 || SavedGameModeIndex >= class'KFGameInfo'.default.GameModes.length)
|
if (SavedGameModeIndex < 0 || SavedGameModeIndex >= class'KFGameInfo'.default.GameModes.length)
|
||||||
{
|
{
|
||||||
SavedGameModeIndex = 255;
|
SavedGameModeIndex = 255;
|
||||||
}
|
}
|
||||||
|
|
||||||
SavedGameModeIndexPending = SavedGameModeIndex;
|
SavedGameModeIndexPending = SavedGameModeIndex;
|
||||||
|
|
||||||
NumDifficultyStrings = class'KFCommon_LocalizedStrings'.static.GetDifficultyStringsArray().Length;
|
NumDifficultyStrings = class'KFCommon_LocalizedStrings'.static.GetDifficultyStringsArray().Length;
|
||||||
|
|
||||||
AdjustSavedFiltersToMode();
|
AdjustSavedFiltersToMode();
|
||||||
ServerMenu.Manager.StartMenu.GetMapList(MapList, SavedGameModeIndexPending);
|
|
||||||
|
MaxNumberMapList = -1;
|
||||||
|
|
||||||
|
UpdateMapList();
|
||||||
|
|
||||||
InitFiltersArray();
|
InitFiltersArray();
|
||||||
LocalizeText();
|
LocalizeText();
|
||||||
ClearPendingValues();
|
ClearPendingValues();
|
||||||
@ -88,6 +98,7 @@ function AdjustSavedFiltersToMode()
|
|||||||
SavedDifficultyIndex = 255;
|
SavedDifficultyIndex = 255;
|
||||||
}
|
}
|
||||||
SavedDifficultyIndexPending = SavedDifficultyIndex;
|
SavedDifficultyIndexPending = SavedDifficultyIndex;
|
||||||
|
|
||||||
if (SavedLengthIndex >= class'KFGameInfo'.default.GameModes[GetUsableGameMode(SavedGameModeIndex)].Lengths)
|
if (SavedLengthIndex >= class'KFGameInfo'.default.GameModes[GetUsableGameMode(SavedGameModeIndex)].Lengths)
|
||||||
{
|
{
|
||||||
SavedLengthIndex = 255;
|
SavedLengthIndex = 255;
|
||||||
@ -174,8 +185,8 @@ function LocalizeCheckBoxes()
|
|||||||
bShowAllowSeasonalSkins = true;
|
bShowAllowSeasonalSkins = true;
|
||||||
|
|
||||||
if (ServerMenu.Manager.StartMenu.GetStartMenuState() == EMatchmaking
|
if (ServerMenu.Manager.StartMenu.GetStartMenuState() == EMatchmaking
|
||||||
|| class'KFGameEngine'.static.GetSeasonalEventID() == SEI_None
|
|| class'KFGameEngine'.static.GetSeasonalEventIDForZedSkins() == SEI_None
|
||||||
|| class'KFGameEngine'.static.GetSeasonalEventID() == SEI_Spring)
|
|| class'KFGameEngine'.static.GetSeasonalEventIDForZedSkins() == SEI_Spring)
|
||||||
{
|
{
|
||||||
bShowAllowSeasonalSkins = false; // Default if we don't have a season or it's find a match menu
|
bShowAllowSeasonalSkins = false; // Default if we don't have a season or it's find a match menu
|
||||||
}
|
}
|
||||||
@ -237,8 +248,10 @@ function SetModeMenus(string DifficultyListString, string LengthListString, int
|
|||||||
CreateList(LengthListString, class'KFCommon_LocalizedStrings'.static.GetLengthStringsArray(), NewLengthIndex, class'KFGameInfo'.default.GameModes[UseModeIndex].Lengths);
|
CreateList(LengthListString, class'KFCommon_LocalizedStrings'.static.GetLengthStringsArray(), NewLengthIndex, class'KFGameInfo'.default.GameModes[UseModeIndex].Lengths);
|
||||||
}
|
}
|
||||||
|
|
||||||
function CreateList( string ListString, array<string> TextArray, int SelectedIndex
|
function CreateList( string ListString
|
||||||
, optional int MaxListLength = -1
|
, array<string> TextArray
|
||||||
|
, int SelectedIndex
|
||||||
|
, optional int MaxListLength = 0
|
||||||
, optional bool bAnyIsFirst = false
|
, optional bool bAnyIsFirst = false
|
||||||
, optional bool bEnabled = true)
|
, optional bool bEnabled = true)
|
||||||
{
|
{
|
||||||
@ -250,9 +263,11 @@ function CreateList( string ListString, array<string> TextArray, int SelectedInd
|
|||||||
local int ListLength;
|
local int ListLength;
|
||||||
|
|
||||||
OptionList = GetObject(ListString);
|
OptionList = GetObject(ListString);
|
||||||
|
|
||||||
DataProvider = OptionList.GetObject("dataProvider");
|
DataProvider = OptionList.GetObject("dataProvider");
|
||||||
|
|
||||||
//`log("MaxListLength:"$MaxListLength$", Length:"$TextArray.length);
|
//`log("MaxListLength:"$MaxListLength$", Length:"$TextArray.length);
|
||||||
|
|
||||||
if (MaxListLength > 0)
|
if (MaxListLength > 0)
|
||||||
{
|
{
|
||||||
ListLength = Min(MaxListLength, TextArray.length);
|
ListLength = Min(MaxListLength, TextArray.length);
|
||||||
@ -261,6 +276,7 @@ function CreateList( string ListString, array<string> TextArray, int SelectedInd
|
|||||||
{
|
{
|
||||||
ListLength = TextArray.length;
|
ListLength = TextArray.length;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (MaxListLength >= ListLength)
|
if (MaxListLength >= ListLength)
|
||||||
{
|
{
|
||||||
SelectedIndex = 255;
|
SelectedIndex = 255;
|
||||||
@ -334,6 +350,47 @@ function CreateList( string ListString, array<string> TextArray, int SelectedInd
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function UpdateMapList()
|
||||||
|
{
|
||||||
|
ServerMenu.Manager.StartMenu.GetMapList(MapList, SavedGameModeIndexPending);
|
||||||
|
|
||||||
|
if (MapList.Length > MaxNumberMapList)
|
||||||
|
{
|
||||||
|
MaxNumberMapList = MapList.Length + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function ClearExtraMaps()
|
||||||
|
{
|
||||||
|
local int i;
|
||||||
|
local GFxObject OptionList;
|
||||||
|
local GFxObject DataProvider;
|
||||||
|
local GFxObject TempObj;
|
||||||
|
|
||||||
|
OptionList = GetObject("mapScrollingList");
|
||||||
|
|
||||||
|
DataProvider = OptionList.GetObject("dataProvider");
|
||||||
|
|
||||||
|
for ( i = 0 ; i < MaxNumberMapList; i++ )
|
||||||
|
{
|
||||||
|
TempObj = DataProvider.GetElementObject(i);
|
||||||
|
if (TempObj == none)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
DataProvider.SetElementObject(i, none);
|
||||||
|
}
|
||||||
|
|
||||||
|
OptionList.SetInt("selectedIndex", 0);
|
||||||
|
|
||||||
|
OptionList.SetObject("dataProvider", DataProvider);
|
||||||
|
|
||||||
|
OptionList.GetObject("associatedButton").SetString("label", "-");
|
||||||
|
|
||||||
|
OptionList.ActionScriptVoid("invalidateData");
|
||||||
|
}
|
||||||
|
|
||||||
function ModeChanged(int index)
|
function ModeChanged(int index)
|
||||||
{
|
{
|
||||||
if (index >= 0 && index < class'KFGameInfo'.default.GameModes.length)
|
if (index >= 0 && index < class'KFGameInfo'.default.GameModes.length)
|
||||||
@ -345,7 +402,13 @@ function ModeChanged(int index)
|
|||||||
SavedGameModeIndexPending = 255;
|
SavedGameModeIndexPending = 255;
|
||||||
}
|
}
|
||||||
|
|
||||||
ServerMenu.Manager.StartMenu.GetMapList(MapList, SavedGameModeIndexPending);
|
// Reset Saved Map
|
||||||
|
SavedMapIndexPending = 255;
|
||||||
|
|
||||||
|
UpdateMapList();
|
||||||
|
|
||||||
|
// Reset Map Filter List (we need to do because the previous ElementObject are still there, we have to clear their state and then feed with new data)
|
||||||
|
ClearExtraMaps();
|
||||||
|
|
||||||
//`log("Adjusting difficulty");
|
//`log("Adjusting difficulty");
|
||||||
AdjustSavedFiltersToMode();
|
AdjustSavedFiltersToMode();
|
||||||
@ -464,6 +527,9 @@ function ResetFilters()
|
|||||||
|
|
||||||
ClearPendingValues();
|
ClearPendingValues();
|
||||||
SaveConfig();
|
SaveConfig();
|
||||||
|
|
||||||
|
UpdateMapList();
|
||||||
|
|
||||||
//reinit values
|
//reinit values
|
||||||
LocalizeCheckBoxes();
|
LocalizeCheckBoxes();
|
||||||
LocalizeText();
|
LocalizeText();
|
||||||
|
@ -75,7 +75,7 @@ function SetDetails(KFOnlineGameSettings ServerResult)
|
|||||||
TempObj = CreateObject("Object");
|
TempObj = CreateObject("Object");
|
||||||
TempObj.SetString("serverName", TempOnlingGamesSettings.OwningPlayerName);
|
TempObj.SetString("serverName", TempOnlingGamesSettings.OwningPlayerName);
|
||||||
|
|
||||||
PlayerCount = TempOnlingGamesSettings.NumPublicConnections-TempOnlingGamesSettings.NumOpenPublicConnections;
|
PlayerCount = TempOnlingGamesSettings.NumPublicConnections - TempOnlingGamesSettings.NumOpenPublicConnections;
|
||||||
|
|
||||||
if (PlayerCount < 0)
|
if (PlayerCount < 0)
|
||||||
{
|
{
|
||||||
@ -95,8 +95,8 @@ function SetDetails(KFOnlineGameSettings ServerResult)
|
|||||||
TempObj.SetBool("ranked", TempOnlingGamesSettings.bUsesStats);
|
TempObj.SetBool("ranked", TempOnlingGamesSettings.bUsesStats);
|
||||||
TempObj.SetBool("seasonalSkins", TempOnlingGamesSettings.bNoSeasonalSkins == false);
|
TempObj.SetBool("seasonalSkins", TempOnlingGamesSettings.bNoSeasonalSkins == false);
|
||||||
|
|
||||||
bShowSeasonalSkins = class'KFGameEngine'.static.GetSeasonalEventID() != SEI_None
|
bShowSeasonalSkins = class'KFGameEngine'.static.GetSeasonalEventIDForZedSkins() != SEI_None
|
||||||
&& class'KFGameEngine'.static.GetSeasonalEventID() != SEI_Spring;
|
&& class'KFGameEngine'.static.GetSeasonalEventIDForZedSkins() != SEI_Spring;
|
||||||
|
|
||||||
TempObj.SetBool("showSeasonalSkins", bShowSeasonalSkins);
|
TempObj.SetBool("showSeasonalSkins", bShowSeasonalSkins);
|
||||||
|
|
||||||
|
@ -283,8 +283,8 @@ function BuildServerFilters(KFGFxServerBrowser_Filters Filters, OnlineGameSearch
|
|||||||
|
|
||||||
DisableSeasonalSkins = Filters.bNoSeasonalSkins;
|
DisableSeasonalSkins = Filters.bNoSeasonalSkins;
|
||||||
|
|
||||||
if (class'KFGameEngine'.static.GetSeasonalEventID() == SEI_None
|
if (class'KFGameEngine'.static.GetSeasonalEventIDForZedSkins() == SEI_None
|
||||||
|| class'KFGameEngine'.static.GetSeasonalEventID() == SEI_Spring)
|
|| class'KFGameEngine'.static.GetSeasonalEventIDForZedSkins() == SEI_Spring)
|
||||||
{
|
{
|
||||||
DisableSeasonalSkins = false;
|
DisableSeasonalSkins = false;
|
||||||
}
|
}
|
||||||
@ -997,7 +997,7 @@ function UpdateListDataProvider()
|
|||||||
|
|
||||||
TempObj.SetString("serverName", TempOnlineGamesSettings.OwningPlayerName);
|
TempObj.SetString("serverName", TempOnlineGamesSettings.OwningPlayerName);
|
||||||
|
|
||||||
PlayerCount = TempOnlineGamesSettings.NumPublicConnections-TempOnlineGamesSettings.NumOpenPublicConnections;
|
PlayerCount = TempOnlineGamesSettings.NumPublicConnections - TempOnlineGamesSettings.NumOpenPublicConnections;
|
||||||
|
|
||||||
if (PlayerCount < 0)
|
if (PlayerCount < 0)
|
||||||
{
|
{
|
||||||
|
@ -63,7 +63,6 @@ function LocalizeMenu()
|
|||||||
SetObject("localizedText", TextObject);
|
SetObject("localizedText", TextObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function bool PopulateData()
|
function bool PopulateData()
|
||||||
{
|
{
|
||||||
local GFxObject DataObject;
|
local GFxObject DataObject;
|
||||||
@ -72,6 +71,13 @@ function bool PopulateData()
|
|||||||
local int CurrentProgressValue, MaxProgressValue;
|
local int CurrentProgressValue, MaxProgressValue;
|
||||||
local float ProgressCompletePercentage;
|
local float ProgressCompletePercentage;
|
||||||
|
|
||||||
|
if (KFPC.HasStatsWrite() == false)
|
||||||
|
{
|
||||||
|
// If stats are not ready, retry in one second
|
||||||
|
KFPC.SetTimer(1.f, false, nameof(PopulateData), self);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
if(HasObjectiveStatusChanged())
|
if(HasObjectiveStatusChanged())
|
||||||
{
|
{
|
||||||
DataProvider = CreateArray();
|
DataProvider = CreateArray();
|
||||||
|
@ -182,37 +182,40 @@ function FillWhatsNew()
|
|||||||
local SWhatsNew item;
|
local SWhatsNew item;
|
||||||
WhatsNewItems.Remove(0, WhatsNewItems.Length);
|
WhatsNewItems.Remove(0, WhatsNewItems.Length);
|
||||||
// Latest Update
|
// Latest Update
|
||||||
item = SetWhatsNewItem("img://UI_WhatsNew.UI_WhatsNew_Halloween2023_Event", "LatestUpdate", "http://www.tripwireinteractive.com/redirect/KF2LatestUpdate/");
|
item = SetWhatsNewItem("img://UI_WhatsNew.UI_WhatsNew_KF3", "LatestUpdate", "https://killingfloor3.com/");
|
||||||
WhatsNewItems.AddItem(item);
|
WhatsNewItems.AddItem(item);
|
||||||
// Featured Ultimate Edition
|
// Featured Ultimate Edition
|
||||||
item = SetWhatsNewItem("img://UI_WhatsNew.UI_WhatsNew_Summer2022_UltimateEdition_Upgrade", "FeaturedItemBundle", "https://store.steampowered.com/app/1914560/KF2__Ultimate_Edition_Upgrade_DLC/");
|
item = SetWhatsNewItem("img://UI_WhatsNew.UI_WhatsNew_Summer2022_UltimateEdition_Upgrade", "FeaturedItemBundle", "https://store.steampowered.com/app/1914560/KF2__Ultimate_Edition_Upgrade_DLC/");
|
||||||
WhatsNewItems.AddItem(item);
|
WhatsNewItems.AddItem(item);
|
||||||
|
// KF2 Cosmetic Season Pass
|
||||||
|
item = SetWhatsNewItem("img://UI_WhatsNew.UI_WhatsNew_Summer2023_CosmeticsSeasonPass", "FeaturedItemBundle", "https://store.steampowered.com/app/2363410/Killing_Floor_2__Cosmetics_Season_Pass");
|
||||||
|
WhatsNewItems.AddItem(item);
|
||||||
// KF2 Armory Season Pass 2022
|
// KF2 Armory Season Pass 2022
|
||||||
item = SetWhatsNewItem("img://UI_WhatsNew.UI_WhatsNew_Summer2022_ArmorySeasonPassII", "ArmorySeasonPass", "https://store.steampowered.com/app/1914490/KF2__Season_Pass_2022");
|
item = SetWhatsNewItem("img://UI_WhatsNew.UI_WhatsNew_Summer2022_ArmorySeasonPassII", "ArmorySeasonPass", "https://store.steampowered.com/app/1914490/KF2__Season_Pass_2022");
|
||||||
WhatsNewItems.AddItem(item);
|
WhatsNewItems.AddItem(item);
|
||||||
// KF2 Armory Season Pass 2021
|
// 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");
|
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);
|
WhatsNewItems.AddItem(item);
|
||||||
// KF2 Armory Season Pass 2023
|
// Featured Mrs Foster
|
||||||
item = SetWhatsNewItem("img://UI_WhatsNew.UI_WhatsNew_Summer2023_CosmeticsSeasonPass", "FeaturedItemBundle", "https://store.steampowered.com/app/2363410/Killing_Floor_2__Cosmetics_Season_Pass");
|
item = SetWhatsNewItem("img://UI_WhatsNew.UI_WhatsNew_SS_Steampunk_MrsFosterBundle", "FeaturedItemBundle", "https://store.steampowered.com/buyitem/232090/6185");
|
||||||
WhatsNewItems.AddItem(item);
|
WhatsNewItems.AddItem(item);
|
||||||
|
// Featured Reaper Outfit Bundle
|
||||||
|
item = SetWhatsNewItem("img://UI_WhatsNew.UI_WhatsNew_Fall_ReaperOutfit", "FeaturedItemBundle", "https://store.steampowered.com/buyitem/232090/8462");
|
||||||
|
WhatsNewItems.AddItem(item);
|
||||||
|
// Featured Last Stand Outfit Bundle
|
||||||
|
item = SetWhatsNewItem("img://UI_WhatsNew.UI_WhatsNew_Halloween2023_LastStand_Uniforms", "FeaturedEventItem", "https://store.steampowered.com/buyitem/232090/9747");
|
||||||
|
WhatsNewItems.AddItem(item);
|
||||||
|
// Featured Commando Chicken Bundle
|
||||||
|
item = SetWhatsNewItem("img://UI_WhatsNew.UI_WhatsNew_Halloween_CommandoChicken_Bundle", "FeaturedItemBundle", "https://store.steampowered.com/buyitem/232090/5286");
|
||||||
|
WhatsNewItems.AddItem(item);
|
||||||
|
// Featured Badass Santa Bundle
|
||||||
|
item = SetWhatsNewItem("img://UI_WhatsNew.UI_WhatsNew_Xmas_BadSanta", "FeaturedItemBundle", "https://store.steampowered.com/buyitem/232090/6670");
|
||||||
|
WhatsNewItems.AddItem(item);
|
||||||
// Featured Weapon
|
// Featured Weapon
|
||||||
item = SetWhatsNewItem("img://UI_WhatsNew.UI_WhatsNew_Halloween2023_MG3Shredder", "FeaturedItemBundle", "https://store.steampowered.com/buyitem/232090/9749");
|
item = SetWhatsNewItem("img://UI_WhatsNew.UI_WhatsNew_Halloween2023_MG3Shredder", "FeaturedItemBundle", "https://store.steampowered.com/buyitem/232090/9749");
|
||||||
WhatsNewItems.AddItem(item);
|
WhatsNewItems.AddItem(item);
|
||||||
// Featured Outfit Bundle
|
// Featured Weapon
|
||||||
item = SetWhatsNewItem("img://UI_WhatsNew.UI_WhatsNew_Halloween2023_LastStand_Uniforms", "FeaturedItemBundle", "https://store.steampowered.com/buyitem/232090/9747");
|
item = SetWhatsNewItem("img://UI_WhatsNew.UI_WhatsNew_Summer2023_S12Shockgun", "FeaturedItemBundle", "https://store.steampowered.com/buyitem/232090/9655");
|
||||||
WhatsNewItems.AddItem(item);
|
|
||||||
// Featured Time Limited Item
|
|
||||||
item = SetWhatsNewItem("img://UI_WhatsNew.UI_WhatsNew_Halloween_PremiumTicket", "FeaturedEventItem", "https://store.steampowered.com/buyitem/232090/5246");
|
|
||||||
WhatsNewItems.AddItem(item);
|
|
||||||
// Featured Weapon Skin Bundle
|
|
||||||
item = SetWhatsNewItem("img://UI_WhatsNew.UI_WhatsNew_Halloween2023_MedievalMKII_Weapon_Skin", "FeaturedItemBundle", "https://store.steampowered.com/buyitem/232090/9718");
|
|
||||||
WhatsNewItems.AddItem(item);
|
|
||||||
// Featured Weapon Skin Bundle
|
|
||||||
item = SetWhatsNewItem("img://UI_WhatsNew.UI_WhatsNew_Halloween2023_HRGSpectreMKIII_Weapon_Skin", "FeaturedItemBundle", "https://store.steampowered.com/buyitem/232090/9720");
|
|
||||||
WhatsNewItems.AddItem(item);
|
|
||||||
// Featured Weapon Skin Bundle
|
|
||||||
item = SetWhatsNewItem("img://UI_WhatsNew.UI_WhatsNew_Halloween2023_ChameleonMKIV_Weapon_Skin", "FeaturedItemBundle", "https://store.steampowered.com/buyitem/232090/9716");
|
|
||||||
WhatsNewItems.AddItem(item);
|
WhatsNewItems.AddItem(item);
|
||||||
// Misc Community Links
|
// Misc Community Links
|
||||||
item=SetWhatsNewItem("img://UI_WhatsNew.UI_WhatsNew_CommunityHub", "Jaegorhorn", "https://steamcommunity.com/app/232090");
|
item=SetWhatsNewItem("img://UI_WhatsNew.UI_WhatsNew_CommunityHub", "Jaegorhorn", "https://steamcommunity.com/app/232090");
|
||||||
|
@ -260,9 +260,9 @@ function InitializeGameOptions()
|
|||||||
TextObject.SetString("length",StartMenu.LengthTitle);
|
TextObject.SetString("length",StartMenu.LengthTitle);
|
||||||
TextObject.SetString("privacy",StartMenu.PermissionsTitle);
|
TextObject.SetString("privacy",StartMenu.PermissionsTitle);
|
||||||
TextObject.SetString("inProgress", InProgressString);
|
TextObject.SetString("inProgress", InProgressString);
|
||||||
|
|
||||||
if (class'KFGameEngine'.static.GetSeasonalEventID() == SEI_None
|
if (class'KFGameEngine'.static.GetSeasonalEventIDForZedSkins() == SEI_None
|
||||||
|| class'KFGameEngine'.static.GetSeasonalEventID() == SEI_Spring)
|
|| class'KFGameEngine'.static.GetSeasonalEventIDForZedSkins() == SEI_Spring)
|
||||||
{
|
{
|
||||||
TextObject.SetBool("bShowAllowSeasonalSkins", false);
|
TextObject.SetBool("bShowAllowSeasonalSkins", false);
|
||||||
}
|
}
|
||||||
@ -313,50 +313,12 @@ function FilterWeeklyMaps(out array<string> List)
|
|||||||
WeeklyIndex = ParentMenu.Manager.GetWeeklySelectorIndex() - 1;
|
WeeklyIndex = ParentMenu.Manager.GetWeeklySelectorIndex() - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
List.RemoveItem("KF-SantasWorkshop");
|
||||||
|
|
||||||
switch (WeeklyIndex)
|
switch (WeeklyIndex)
|
||||||
{
|
{
|
||||||
case 0: // Boom
|
case 0: // Boom
|
||||||
List.RemoveItem("KF-SantasWorkshop");
|
List.RemoveItem("KF-SteamFortress");
|
||||||
break;
|
|
||||||
|
|
||||||
case 1: // Cranium Cracker
|
|
||||||
List.RemoveItem("KF-SantasWorkshop");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 2: // Tiny Terror
|
|
||||||
List.RemoveItem("KF-SantasWorkshop");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 3: // BobbleZed
|
|
||||||
List.RemoveItem("KF-SantasWorkshop");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 4: // Poundemonium
|
|
||||||
List.RemoveItem("KF-SantasWorkshop");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 5: // Up Up And Decay
|
|
||||||
List.RemoveItem("KF-SantasWorkshop");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 6: // Zed Time
|
|
||||||
List.RemoveItem("KF-SantasWorkshop");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 7: // Beefcake
|
|
||||||
List.RemoveItem("KF-SantasWorkshop");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 8: // BloodThirst
|
|
||||||
List.RemoveItem("KF-SantasWorkshop");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 9: // Coliseum
|
|
||||||
List.RemoveItem("KF-SantasWorkshop");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 10: // Arachnophobia
|
|
||||||
List.RemoveItem("KF-SantasWorkshop");
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 11: // Scavenger
|
case 11: // Scavenger
|
||||||
@ -365,17 +327,8 @@ function FilterWeeklyMaps(out array<string> List)
|
|||||||
List.RemoveItem("KF-PowerCore_Holdout");
|
List.RemoveItem("KF-PowerCore_Holdout");
|
||||||
List.RemoveItem("KF-TheDescent");
|
List.RemoveItem("KF-TheDescent");
|
||||||
List.RemoveItem("KF-KrampusLair");
|
List.RemoveItem("KF-KrampusLair");
|
||||||
List.RemoveItem("KF-SantasWorkshop");
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 12: // WW
|
|
||||||
List.RemoveItem("KF-SantasWorkshop");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 13: // Abandon
|
|
||||||
List.RemoveItem("KF-SantasWorkshop");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 14: // Boss Rush
|
case 14: // Boss Rush
|
||||||
List.RemoveItem("KF-Biolapse");
|
List.RemoveItem("KF-Biolapse");
|
||||||
List.RemoveItem("KF-Nightmare");
|
List.RemoveItem("KF-Nightmare");
|
||||||
@ -385,10 +338,6 @@ function FilterWeeklyMaps(out array<string> List)
|
|||||||
List.RemoveItem("KF-SteamFortress");
|
List.RemoveItem("KF-SteamFortress");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 15: // Shrunken Heads
|
|
||||||
List.RemoveItem("KF-SantasWorkshop");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 16: // GunGame
|
case 16: // GunGame
|
||||||
List.RemoveItem("KF-Biolapse");
|
List.RemoveItem("KF-Biolapse");
|
||||||
List.RemoveItem("KF-Nightmare");
|
List.RemoveItem("KF-Nightmare");
|
||||||
@ -397,20 +346,12 @@ function FilterWeeklyMaps(out array<string> List)
|
|||||||
List.RemoveItem("KF-KrampusLair");
|
List.RemoveItem("KF-KrampusLair");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 17: // VIP
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 18: // Perk Roulette
|
|
||||||
List.RemoveItem("KF-SantasWorkshop");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 19: // Contamination Zone
|
case 19: // Contamination Zone
|
||||||
List.RemoveItem("KF-Biolapse");
|
List.RemoveItem("KF-Biolapse");
|
||||||
List.RemoveItem("KF-Nightmare");
|
List.RemoveItem("KF-Nightmare");
|
||||||
List.RemoveItem("KF-PowerCore_Holdout");
|
List.RemoveItem("KF-PowerCore_Holdout");
|
||||||
List.RemoveItem("KF-TheDescent");
|
List.RemoveItem("KF-TheDescent");
|
||||||
List.RemoveItem("KF-KrampusLair");
|
List.RemoveItem("KF-KrampusLair");
|
||||||
List.RemoveItem("KF-SantasWorkshop");
|
|
||||||
List.RemoveItem("KF-Elysium");
|
List.RemoveItem("KF-Elysium");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -31,6 +31,12 @@ var localized string SelectCosmeticsString;
|
|||||||
var localized string SelectEmotesString;
|
var localized string SelectEmotesString;
|
||||||
var localized string SelectKeysAndTicketsString;
|
var localized string SelectKeysAndTicketsString;
|
||||||
|
|
||||||
|
var localized string SearchText;
|
||||||
|
var localized string ClearSearchText;
|
||||||
|
var localized string NoItemsString;
|
||||||
|
|
||||||
|
var int SearchMaxChars;
|
||||||
|
|
||||||
var array<int> FilterIndexConversion;
|
var array<int> FilterIndexConversion;
|
||||||
var array<int> ItemTypeIndexConversion;
|
var array<int> ItemTypeIndexConversion;
|
||||||
var array<int> MarketItemTypeIndexConversion;
|
var array<int> MarketItemTypeIndexConversion;
|
||||||
@ -44,6 +50,9 @@ var int MaxFeaturedItems;
|
|||||||
|
|
||||||
var KFGFxMenu_Store StoreMenu;
|
var KFGFxMenu_Store StoreMenu;
|
||||||
|
|
||||||
|
var transient string SearchKeyword;
|
||||||
|
var Array<ItemProperties> FilteredItemsArray;
|
||||||
|
|
||||||
enum EStore_Filter
|
enum EStore_Filter
|
||||||
{
|
{
|
||||||
EStore_WeaponBundles, //EStore_WeaponSkins,
|
EStore_WeaponBundles, //EStore_WeaponSkins,
|
||||||
@ -105,6 +114,14 @@ function LocalizeText()
|
|||||||
|
|
||||||
LocalizedObject.SetString("thankYouString", ThankYouString);
|
LocalizedObject.SetString("thankYouString", ThankYouString);
|
||||||
|
|
||||||
|
LocalizedObject.SetString("searchTitle", SearchText);
|
||||||
|
LocalizedObject.SetString("searchText", SearchText$"...");
|
||||||
|
|
||||||
|
LocalizedObject.SetBool("bIsConsoleBuild", class'WorldInfo'.static.IsConsoleBuild());
|
||||||
|
LocalizedObject.SetInt("searchMaxChars", SearchMaxChars);
|
||||||
|
|
||||||
|
LocalizedObject.SetString("noItemsText", NoItemsString);
|
||||||
|
|
||||||
SetObject("localizedText", LocalizedObject);
|
SetObject("localizedText", LocalizedObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -175,10 +192,10 @@ function SendItems(const out Array<ItemProperties> StoreItemArray)
|
|||||||
{
|
{
|
||||||
local int i, ItemCount, j;
|
local int i, ItemCount, j;
|
||||||
local GFxObject DataProvider;
|
local GFxObject DataProvider;
|
||||||
local Array<ItemProperties> FilteredItemsArray;
|
|
||||||
local ItemProperties TempItemProps; //since we can't push elements of an array
|
local ItemProperties TempItemProps; //since we can't push elements of an array
|
||||||
local bool AlreadyFiltered;
|
local bool AlreadyFiltered;
|
||||||
|
|
||||||
|
FilteredItemsArray.Length = 0;
|
||||||
ItemCount = 0;
|
ItemCount = 0;
|
||||||
DataProvider = CreateArray();
|
DataProvider = CreateArray();
|
||||||
|
|
||||||
@ -288,13 +305,20 @@ function SendItems(const out Array<ItemProperties> StoreItemArray)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (CurrentStoreFilter == EStore_Featured)
|
if (SearchKeyword != "" && CurrentStoreFilter != EStore_Featured)
|
||||||
{
|
{
|
||||||
SetObject("storeItemFeaturedData", DataProvider);
|
StoreSearch(SearchKeyword);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
SetObject("storeItemData", DataProvider);
|
if (CurrentStoreFilter == EStore_Featured)
|
||||||
|
{
|
||||||
|
SetObject("storeItemFeaturedData", DataProvider);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SetObject("storeItemData", DataProvider);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -410,6 +434,57 @@ function bool IsItemValidForThisPlatform(string ItemName)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function StoreSearch(string searchStr, bool bForceInitIfClear = false)
|
||||||
|
{
|
||||||
|
local int i, j, ItemCounter;
|
||||||
|
local array<string> SearchKeywords;
|
||||||
|
local bool Accepted;
|
||||||
|
local GFxObject DataProvider;
|
||||||
|
|
||||||
|
SearchKeyword = searchStr;
|
||||||
|
|
||||||
|
if (searchStr == "")
|
||||||
|
{
|
||||||
|
if (bForceInitIfClear && CurrentStoreFilter != EStore_Featured)
|
||||||
|
{
|
||||||
|
SendItems(StoreMenu.OnlineSub.ItemPropertiesList);
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ItemCounter = 0;
|
||||||
|
DataProvider = CreateArray();
|
||||||
|
|
||||||
|
SearchKeywords = SplitString( searchStr, " ", true);
|
||||||
|
|
||||||
|
for (i = 0; i < FilteredItemsArray.Length; ++i)
|
||||||
|
{
|
||||||
|
Accepted = true;
|
||||||
|
for (j = 0; j < SearchKeywords.Length; ++j)
|
||||||
|
{
|
||||||
|
if (InStr(Locs(FilteredItemsArray[i].Name), Locs(SearchKeywords[j])) == -1)
|
||||||
|
{
|
||||||
|
Accepted = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Accepted)
|
||||||
|
{
|
||||||
|
DataProvider.SetElementObject(ItemCounter, CreateStoreItem(FilteredItemsArray[i]));
|
||||||
|
++ItemCounter;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ignore featured items
|
||||||
|
if (CurrentStoreFilter != EStore_Featured)
|
||||||
|
{
|
||||||
|
SetObject("storeItemData", DataProvider);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
DefaultProperties
|
DefaultProperties
|
||||||
{
|
{
|
||||||
//defaults
|
//defaults
|
||||||
@ -447,19 +522,41 @@ DefaultProperties
|
|||||||
|
|
||||||
XboxFilterExceptions[0]="Wasteland Bundle" // Wasteland Outfit Bundle
|
XboxFilterExceptions[0]="Wasteland Bundle" // Wasteland Outfit Bundle
|
||||||
|
|
||||||
FeaturedItemIDs[0]=7619 //Whatsnew Gold Ticket
|
FeaturedItemIDs[0]=6185 //Whatsnew Gold Ticket
|
||||||
FeaturedItemIDs[1]=9749
|
FeaturedItemIDs[1]=6670
|
||||||
FeaturedItemIDs[2]=9747
|
FeaturedItemIDs[2]=8462
|
||||||
FeaturedItemIDs[3]=9716
|
FeaturedItemIDs[3]=4857
|
||||||
FeaturedItemIDs[4]=9718
|
FeaturedItemIDs[4]=9747
|
||||||
FeaturedItemIDs[5]=9720
|
FeaturedItemIDs[5]=5286
|
||||||
|
FeaturedItemIDs[6]=7967
|
||||||
|
FeaturedItemIDs[7]=7968
|
||||||
|
FeaturedItemIDs[8]=9369
|
||||||
|
FeaturedItemIDs[9]=8190
|
||||||
|
FeaturedItemIDs[10]=8469
|
||||||
|
FeaturedItemIDs[11]=9125
|
||||||
|
FeaturedItemIDs[12]=8959
|
||||||
|
FeaturedItemIDs[13]=9471
|
||||||
|
FeaturedItemIDs[14]=9557
|
||||||
|
FeaturedItemIDs[15]=9655
|
||||||
|
FeaturedItemIDs[16]=9749
|
||||||
|
|
||||||
ConsoleFeaturedItemIDs[0]=7783 //Whatsnew Gold Ticket PSN
|
ConsoleFeaturedItemIDs[0]=6185 //Whatsnew Gold Ticket PSN
|
||||||
ConsoleFeaturedItemIDs[1]=9749
|
ConsoleFeaturedItemIDs[1]=6670
|
||||||
ConsoleFeaturedItemIDs[2]=9747
|
ConsoleFeaturedItemIDs[2]=8462
|
||||||
ConsoleFeaturedItemIDs[3]=9716
|
ConsoleFeaturedItemIDs[3]=4857
|
||||||
ConsoleFeaturedItemIDs[4]=9718
|
ConsoleFeaturedItemIDs[4]=9747
|
||||||
ConsoleFeaturedItemIDs[5]=9720
|
ConsoleFeaturedItemIDs[5]=5286
|
||||||
|
ConsoleFeaturedItemIDs[6]=7967
|
||||||
|
ConsoleFeaturedItemIDs[7]=7968
|
||||||
|
ConsoleFeaturedItemIDs[8]=9369
|
||||||
|
ConsoleFeaturedItemIDs[9]=8190
|
||||||
|
ConsoleFeaturedItemIDs[10]=8469
|
||||||
|
ConsoleFeaturedItemIDs[11]=9125
|
||||||
|
ConsoleFeaturedItemIDs[12]=8959
|
||||||
|
ConsoleFeaturedItemIDs[13]=9471
|
||||||
|
ConsoleFeaturedItemIDs[14]=9557
|
||||||
|
ConsoleFeaturedItemIDs[15]=9655
|
||||||
|
ConsoleFeaturedItemIDs[16]=9749
|
||||||
|
|
||||||
MaxFeaturedItems=5
|
MaxFeaturedItems=5
|
||||||
}
|
}
|
@ -29,7 +29,7 @@ var localized string UpgradeCostString, UpgradeString;
|
|||||||
var GFxObject DetailsContainer;
|
var GFxObject DetailsContainer;
|
||||||
|
|
||||||
/** Max stat values used to calculate stat bars */
|
/** Max stat values used to calculate stat bars */
|
||||||
const WeaponStatMax_Damage = 820.f;
|
const WeaponStatMax_Damage = 990.f;
|
||||||
const WeaponStatMax_FireRate = 800.f;
|
const WeaponStatMax_FireRate = 800.f;
|
||||||
const WeaponStatMax_Penetration = 4.f;
|
const WeaponStatMax_Penetration = 4.f;
|
||||||
const WeaponStatMax_Range = 100.f;
|
const WeaponStatMax_Range = 100.f;
|
||||||
|
@ -102,36 +102,36 @@ function RefreshWeaponListByPerk(byte FilterIndex, const out array<STraderItem>
|
|||||||
{
|
{
|
||||||
continue; // Skip this item if it's in our inventory
|
continue; // Skip this item if it's in our inventory
|
||||||
}
|
}
|
||||||
else if ( ItemList[i].AssociatedPerkClasses.length > 0 && ItemList[i].AssociatedPerkClasses[0] != none && TargetPerkClass != class'KFPerk_Survivalist'
|
|
||||||
&& (FilterIndex >= KFPC.PerkList.Length || ItemList[i].AssociatedPerkClasses.Find(TargetPerkClass) == INDEX_NONE ) )
|
if ( ItemList[i].AssociatedPerkClasses.length > 0
|
||||||
|
&& ItemList[i].AssociatedPerkClasses[0] != none
|
||||||
|
&& (FilterIndex >= KFPC.PerkList.Length || ItemList[i].AssociatedPerkClasses.Find(TargetPerkClass) == INDEX_NONE ) )
|
||||||
{
|
{
|
||||||
continue; // filtered by perk
|
continue; // filtered by perk
|
||||||
}
|
}
|
||||||
else
|
|
||||||
|
if(ItemList[i].AssociatedPerkClasses.length > 0)
|
||||||
{
|
{
|
||||||
if(ItemList[i].AssociatedPerkClasses.length > 0)
|
switch (ItemList[i].AssociatedPerkClasses.Find(TargetPerkClass))
|
||||||
{
|
{
|
||||||
switch (ItemList[i].AssociatedPerkClasses.Find(TargetPerkClass))
|
case 0: //primary perk
|
||||||
{
|
if(OnPerkWeapons.length == 0 && MyTraderMenu.SelectedList == TL_Shop)
|
||||||
case 0: //primary perk
|
{
|
||||||
if(OnPerkWeapons.length == 0 && MyTraderMenu.SelectedList == TL_Shop)
|
if(GetInt( "currentSelectedIndex" ) == 0)
|
||||||
{
|
{
|
||||||
if(GetInt( "currentSelectedIndex" ) == 0)
|
MyTraderMenu.SetTraderItemDetails(i);
|
||||||
{
|
|
||||||
MyTraderMenu.SetTraderItemDetails(i);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
OnPerkWeapons.AddItem(ItemList[i]);
|
}
|
||||||
break;
|
OnPerkWeapons.AddItem(ItemList[i]);
|
||||||
|
break;
|
||||||
case 1: //secondary perk
|
|
||||||
SecondaryWeapons.AddItem(ItemList[i]);
|
case 1: //secondary perk
|
||||||
break;
|
SecondaryWeapons.AddItem(ItemList[i]);
|
||||||
|
break;
|
||||||
default: //off perk
|
|
||||||
OffPerkWeapons.AddItem(ItemList[i]);
|
default: //off perk
|
||||||
break;
|
OffPerkWeapons.AddItem(ItemList[i]);
|
||||||
}
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -249,7 +249,13 @@ function bool isPlayerFromSteam(UniqueNetId PlayerID)
|
|||||||
{
|
{
|
||||||
local PlayerReplicationInfo CurrentPRI;
|
local PlayerReplicationInfo CurrentPRI;
|
||||||
CurrentPRI = KFPC.GetPRIFromNetId(PlayerID);
|
CurrentPRI = KFPC.GetPRIFromNetId(PlayerID);
|
||||||
return !class'WorldInfo'.static.IsEOSBuild() && CurrentPRI.PlayfabPlayerId == "";
|
|
||||||
|
`Log("isPlayerFromSteam");
|
||||||
|
`Log("!class'WorldInfo'.static.IsEOSBuild(): " $(!class'WorldInfo'.static.IsEOSBuild()));
|
||||||
|
|
||||||
|
`Log("CurrentPRI.PlayfabPlayerId: " $(CurrentPRI != none ? CurrentPRI.PlayfabPlayerId : "CurrentPRI was NULL"));
|
||||||
|
|
||||||
|
return !class'WorldInfo'.static.IsEOSBuild() && CurrentPRI != none && CurrentPRI.PlayfabPlayerId == "";
|
||||||
}
|
}
|
||||||
|
|
||||||
function AddStringOptionToList(string OptionKey, int ItemIndex, string Option, out GFxObject DataProvider)
|
function AddStringOptionToList(string OptionKey, int ItemIndex, string Option, out GFxObject DataProvider)
|
||||||
|
@ -475,6 +475,7 @@ function ClearOnlineDelegates()
|
|||||||
|
|
||||||
/** Static because these are both called on default object */
|
/** Static because these are both called on default object */
|
||||||
native static function int GetSeasonalEventID();
|
native static function int GetSeasonalEventID();
|
||||||
|
native static function int GetSeasonalEventIDForZedSkins();
|
||||||
native static function int GetIntendedWeeklyEventIndex();
|
native static function int GetIntendedWeeklyEventIndex();
|
||||||
native static function int GetIntendedWeeklyEventIndexMod();
|
native static function int GetIntendedWeeklyEventIndexMod();
|
||||||
native static function int GetWeeklyEventIndex();
|
native static function int GetWeeklyEventIndex();
|
||||||
|
@ -213,6 +213,7 @@ var protected int BossIndex; //Index into boss array, only preload conte
|
|||||||
|
|
||||||
var int AllowSeasonalSkinsIndex;
|
var int AllowSeasonalSkinsIndex;
|
||||||
var int WeeklySelectorIndex;
|
var int WeeklySelectorIndex;
|
||||||
|
var int SeasonalSkinsIndex;
|
||||||
|
|
||||||
/** Class replacements for each zed type */
|
/** Class replacements for each zed type */
|
||||||
struct native SpawnReplacement
|
struct native SpawnReplacement
|
||||||
@ -428,6 +429,8 @@ var KFOutbreakEvent OutbreakEvent;
|
|||||||
/** Type of outbreak event to be used. */
|
/** Type of outbreak event to be used. */
|
||||||
var class<KFOutbreakEvent> OutbreakEventClass;
|
var class<KFOutbreakEvent> OutbreakEventClass;
|
||||||
|
|
||||||
|
var array<KFPlayerController> PlayersDelayedSuicideMessage;
|
||||||
|
|
||||||
/************************************************************************************
|
/************************************************************************************
|
||||||
* @name Kismet Monster Properties
|
* @name Kismet Monster Properties
|
||||||
***********************************************************************************/
|
***********************************************************************************/
|
||||||
@ -722,6 +725,16 @@ event InitGame( string Options, out string ErrorMessage )
|
|||||||
AllowSeasonalSkinsIndex = 0;
|
AllowSeasonalSkinsIndex = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
OptionRead = ParseOption(Options, "SeasonalSkinsIndex");
|
||||||
|
if (OptionRead != "")
|
||||||
|
{
|
||||||
|
SeasonalSkinsIndex = int(OptionRead);
|
||||||
|
if (SeasonalSkinsIndex < 0 || SeasonalSkinsIndex > 4)
|
||||||
|
{
|
||||||
|
SeasonalSkinsIndex = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if( OnlineSub != none && OnlineSub.GetLobbyInterface() != none )
|
if( OnlineSub != none && OnlineSub.GetLobbyInterface() != none )
|
||||||
{
|
{
|
||||||
OnlineSub.GetLobbyInterface().LobbyJoinGame();
|
OnlineSub.GetLobbyInterface().LobbyJoinGame();
|
||||||
@ -1080,11 +1093,21 @@ event PostLogin( PlayerController NewPlayer )
|
|||||||
function Logout( Controller Exiting )
|
function Logout( Controller Exiting )
|
||||||
{
|
{
|
||||||
local int OldNumSpectators;
|
local int OldNumSpectators;
|
||||||
|
local KFPlayerController KFPC;
|
||||||
|
|
||||||
OldNumSpectators = NumSpectators;
|
OldNumSpectators = NumSpectators;
|
||||||
|
|
||||||
|
KFPC = KFPlayerController(Exiting);
|
||||||
|
|
||||||
|
if (KFPC != none)
|
||||||
|
{
|
||||||
|
KFPC.bLoggedOut = true;
|
||||||
|
}
|
||||||
|
|
||||||
Super.Logout( Exiting );
|
Super.Logout( Exiting );
|
||||||
|
|
||||||
|
MyKFGRI.VoteCollector.ServerNotifyDisconnect();
|
||||||
|
|
||||||
// Delay this by 1.5 seconds so there aren't multiple calls if everyone joins/leaves at the same time
|
// Delay this by 1.5 seconds so there aren't multiple calls if everyone joins/leaves at the same time
|
||||||
if( PlayfabInter != None && PlayfabInter.IsRegisteredWithPlayfab() )
|
if( PlayfabInter != None && PlayfabInter.IsRegisteredWithPlayfab() )
|
||||||
{
|
{
|
||||||
@ -1179,6 +1202,7 @@ function InitGRIVariables()
|
|||||||
MyKFGRI.MaxHumanCount = MaxPlayers;
|
MyKFGRI.MaxHumanCount = MaxPlayers;
|
||||||
MyKFGRI.NotifyAllowSeasonalSkins(AllowSeasonalSkinsIndex);
|
MyKFGRI.NotifyAllowSeasonalSkins(AllowSeasonalSkinsIndex);
|
||||||
MyKFGRI.NotifyWeeklySelector(WeeklySelectorIndex);
|
MyKFGRI.NotifyWeeklySelector(WeeklySelectorIndex);
|
||||||
|
MyKFGRI.NotifySeasonalSkinsIndex(SeasonalSkinsIndex);
|
||||||
|
|
||||||
SetBossIndex();
|
SetBossIndex();
|
||||||
}
|
}
|
||||||
@ -2277,8 +2301,29 @@ function BroadCastLastManStanding()
|
|||||||
BroadcastLocalized(self, class'KFLocalMessage_Priority', GMT_LastPlayerStanding, none );
|
BroadcastLocalized(self, class'KFLocalMessage_Priority', GMT_LastPlayerStanding, none );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function BroadCastSuicide()
|
||||||
|
{
|
||||||
|
local KFPlayerController KFPC;
|
||||||
|
|
||||||
|
if (PlayersDelayedSuicideMessage.Length != 0)
|
||||||
|
{
|
||||||
|
KFPC = PlayersDelayedSuicideMessage[0];
|
||||||
|
|
||||||
|
if (KFPC.bLoggedOut == false)
|
||||||
|
{
|
||||||
|
BroadcastLocalized( self, class'KFLocalMessage_Game', KMT_Suicide, none, KFPC.PlayerReplicationInfo );
|
||||||
|
}
|
||||||
|
|
||||||
|
PlayersDelayedSuicideMessage.Remove(0, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function BroadcastDeathMessage(Controller Killer, Controller Other, class<DamageType> damageType)
|
function BroadcastDeathMessage(Controller Killer, Controller Other, class<DamageType> damageType)
|
||||||
{
|
{
|
||||||
|
local KFPlayerController KFPC;
|
||||||
|
|
||||||
|
KFPC = KFPlayerController(Other);
|
||||||
|
|
||||||
if( Killer == none )
|
if( Killer == none )
|
||||||
{
|
{
|
||||||
// If a zed died from no killer, it's very likely that they killed themselves. Skip the death message.
|
// If a zed died from no killer, it's very likely that they killed themselves. Skip the death message.
|
||||||
@ -2291,7 +2336,19 @@ function BroadcastDeathMessage(Controller Killer, Controller Other, class<Damage
|
|||||||
else if( Killer == Other )
|
else if( Killer == Other )
|
||||||
{
|
{
|
||||||
// Suicide
|
// Suicide
|
||||||
BroadcastLocalized( self, class'KFLocalMessage_Game', KMT_Suicide, none, Other.PlayerReplicationInfo );
|
if (KFPC != none && damageType == class'DmgType_Suicided')
|
||||||
|
{
|
||||||
|
// The Logout message comes after the Death, don't ask me why, we have to
|
||||||
|
// delay so we can react properly to a Logout situation (to change UI or hide death notification)
|
||||||
|
PlayersDelayedSuicideMessage.AddItem(KFPC);
|
||||||
|
|
||||||
|
SetTimer(0.5f, false, nameOf(BroadCastSuicide));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
BroadcastLocalized( self, class'KFLocalMessage_Game', KMT_Suicide, none, Other.PlayerReplicationInfo );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -2305,6 +2362,7 @@ function BroadcastDeathMessage(Controller Killer, Controller Other, class<Damage
|
|||||||
BroadcastLocalized( self, class'KFLocalMessage_PlayerKills', KMT_PlayerKillPlayer, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo );
|
BroadcastLocalized( self, class'KFLocalMessage_PlayerKills', KMT_PlayerKillPlayer, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Other != none && Other.GetTeamNum() != 255)
|
if (Other != none && Other.GetTeamNum() != 255)
|
||||||
{
|
{
|
||||||
//do timer to double check group didnt get wasted by hans' nade spam or something like that
|
//do timer to double check group didnt get wasted by hans' nade spam or something like that
|
||||||
@ -3046,24 +3104,14 @@ function string GetNextMap()
|
|||||||
{
|
{
|
||||||
MapName = name(GameMapCycles[ActiveMapCycle].Maps[MapCycleIndex]);
|
MapName = name(GameMapCycles[ActiveMapCycle].Maps[MapCycleIndex]);
|
||||||
|
|
||||||
if ((class'KFGameEngine'.static.GetWeeklyEventIndexMod() == 0 || OutbreakEvent.ActiveEvent == OutbreakEvent.SetEvents[0]) || // Boom
|
if (MapName == MapSantas)
|
||||||
(class'KFGameEngine'.static.GetWeeklyEventIndexMod() == 1 || OutbreakEvent.ActiveEvent == OutbreakEvent.SetEvents[1]) || // Cranium Cracker
|
|
||||||
(class'KFGameEngine'.static.GetWeeklyEventIndexMod() == 2 || OutbreakEvent.ActiveEvent == OutbreakEvent.SetEvents[2]) || // Tiny Terror
|
|
||||||
(class'KFGameEngine'.static.GetWeeklyEventIndexMod() == 3 || OutbreakEvent.ActiveEvent == OutbreakEvent.SetEvents[3]) || // Bobble Zed
|
|
||||||
(class'KFGameEngine'.static.GetWeeklyEventIndexMod() == 4 || OutbreakEvent.ActiveEvent == OutbreakEvent.SetEvents[4]) || // Poundemonium
|
|
||||||
(class'KFGameEngine'.static.GetWeeklyEventIndexMod() == 5 || OutbreakEvent.ActiveEvent == OutbreakEvent.SetEvents[5]) || // Up Up and Decay
|
|
||||||
(class'KFGameEngine'.static.GetWeeklyEventIndexMod() == 6 || OutbreakEvent.ActiveEvent == OutbreakEvent.SetEvents[6]) || // Zed Time
|
|
||||||
(class'KFGameEngine'.static.GetWeeklyEventIndexMod() == 7 || OutbreakEvent.ActiveEvent == OutbreakEvent.SetEvents[7]) || // Beefcake
|
|
||||||
(class'KFGameEngine'.static.GetWeeklyEventIndexMod() == 8 || OutbreakEvent.ActiveEvent == OutbreakEvent.SetEvents[8]) || // Bloodthirst
|
|
||||||
(class'KFGameEngine'.static.GetWeeklyEventIndexMod() == 9 || OutbreakEvent.ActiveEvent == OutbreakEvent.SetEvents[9]) || // Coliseum
|
|
||||||
(class'KFGameEngine'.static.GetWeeklyEventIndexMod() == 10 || OutbreakEvent.ActiveEvent == OutbreakEvent.SetEvents[10]) || // Arachnophobia
|
|
||||||
(class'KFGameEngine'.static.GetWeeklyEventIndexMod() == 11 || OutbreakEvent.ActiveEvent == OutbreakEvent.SetEvents[11]) || // Scavenger
|
|
||||||
(class'KFGameEngine'.static.GetWeeklyEventIndexMod() == 12 || OutbreakEvent.ActiveEvent == OutbreakEvent.SetEvents[12]) || // WW
|
|
||||||
(class'KFGameEngine'.static.GetWeeklyEventIndexMod() == 13 || OutbreakEvent.ActiveEvent == OutbreakEvent.SetEvents[13]) || // Abandon
|
|
||||||
(class'KFGameEngine'.static.GetWeeklyEventIndexMod() == 15 || OutbreakEvent.ActiveEvent == OutbreakEvent.SetEvents[15]) || // Shrunken Heads
|
|
||||||
(class'KFGameEngine'.static.GetWeeklyEventIndexMod() == 18 || OutbreakEvent.ActiveEvent == OutbreakEvent.SetEvents[18])) // Perk Roulette
|
|
||||||
{
|
{
|
||||||
if (MapName == MapSantas)
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (class'KFGameEngine'.static.GetWeeklyEventIndexMod() == 0 || OutbreakEvent.ActiveEvent == OutbreakEvent.SetEvents[0]) // Boom
|
||||||
|
{
|
||||||
|
if (MapName == MapSteam)
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -3090,8 +3138,7 @@ function string GetNextMap()
|
|||||||
MapName == MapPowerCore ||
|
MapName == MapPowerCore ||
|
||||||
MapName == MapDescent ||
|
MapName == MapDescent ||
|
||||||
MapName == MapKrampus ||
|
MapName == MapKrampus ||
|
||||||
MapName == MapElysium ||
|
MapName == MapElysium)
|
||||||
MapName == MapSantas)
|
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -3111,7 +3158,7 @@ function string GetNextMap()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (class'KFGameEngine'.static.GetWeeklyEventIndexMod() == 14 || OutbreakEvent.ActiveEvent == OutbreakEvent.SetEvents[14])
|
if (class'KFGameEngine'.static.GetWeeklyEventIndexMod() == 14 || OutbreakEvent.ActiveEvent == OutbreakEvent.SetEvents[14]) // Boss Rush
|
||||||
{
|
{
|
||||||
if (MapName == MapSteam)
|
if (MapName == MapSteam)
|
||||||
{
|
{
|
||||||
@ -3285,6 +3332,7 @@ event MakeReservations(const string URLOptions, const UniqueNetId PlayerId, out
|
|||||||
event PlayerController Login(string Portal, string Options, const UniqueNetID UniqueID, out string ErrorMessage)
|
event PlayerController Login(string Portal, string Options, const UniqueNetID UniqueID, out string ErrorMessage)
|
||||||
{
|
{
|
||||||
local PlayerController SpawnedPC;
|
local PlayerController SpawnedPC;
|
||||||
|
local KFPlayerController KFPC;
|
||||||
local string PlayerfabPlayerId;
|
local string PlayerfabPlayerId;
|
||||||
|
|
||||||
SeatPlayer(UniqueID);
|
SeatPlayer(UniqueID);
|
||||||
@ -3303,6 +3351,13 @@ event PlayerController Login(string Portal, string Options, const UniqueNetID Un
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
KFPC = KFPlayerController(SpawnedPC);
|
||||||
|
|
||||||
|
if (KFPC != none)
|
||||||
|
{
|
||||||
|
KFPC.bLoggedOut = false;
|
||||||
|
}
|
||||||
|
|
||||||
return SpawnedPC;
|
return SpawnedPC;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4134,6 +4189,7 @@ defaultproperties
|
|||||||
bDelayedStart=true
|
bDelayedStart=true
|
||||||
AllowSeasonalSkinsIndex=0
|
AllowSeasonalSkinsIndex=0
|
||||||
WeeklySelectorIndex=-1
|
WeeklySelectorIndex=-1
|
||||||
|
SeasonalSkinsIndex=-1
|
||||||
|
|
||||||
ActionMusicDelay=5.0
|
ActionMusicDelay=5.0
|
||||||
ForcedMusicTracks(0)=KFMusicTrackInfo'WW_MMNU_Login.TrackInfo' // menu
|
ForcedMusicTracks(0)=KFMusicTrackInfo'WW_MMNU_Login.TrackInfo' // menu
|
||||||
|
@ -387,6 +387,7 @@ var repnotify KFPlayerReplicationInfo VIPRepPlayer;
|
|||||||
|
|
||||||
var bool bAllowSeasonalSkins;
|
var bool bAllowSeasonalSkins;
|
||||||
var int WeeklySelectorIndex;
|
var int WeeklySelectorIndex;
|
||||||
|
var int SeasonalSkinsIndex;
|
||||||
|
|
||||||
/************************************
|
/************************************
|
||||||
* Steam heartbeat
|
* Steam heartbeat
|
||||||
@ -426,7 +427,7 @@ replication
|
|||||||
if ( bNetInitial )
|
if ( bNetInitial )
|
||||||
GameLength, WaveMax, bCustom, bVersusGame, TraderItems, GameAmmoCostScale, bAllowGrenadePurchase, MaxPerkLevel, bTradersEnabled, bForceShowSkipTrader, bAllowSeasonalSkins;
|
GameLength, WaveMax, bCustom, bVersusGame, TraderItems, GameAmmoCostScale, bAllowGrenadePurchase, MaxPerkLevel, bTradersEnabled, bForceShowSkipTrader, bAllowSeasonalSkins;
|
||||||
if ( bNetInitial || bNetDirty )
|
if ( bNetInitial || bNetDirty )
|
||||||
CurrentWeeklyIndex, WeeklySelectorIndex, PerksAvailableData;
|
CurrentWeeklyIndex, WeeklySelectorIndex, SeasonalSkinsIndex, PerksAvailableData;
|
||||||
if ( bNetInitial && Role == ROLE_Authority )
|
if ( bNetInitial && Role == ROLE_Authority )
|
||||||
ServerAdInfo;
|
ServerAdInfo;
|
||||||
|
|
||||||
@ -856,7 +857,7 @@ exec reliable client function ShowPreGameServerWelcomeScreen()
|
|||||||
{
|
{
|
||||||
local KFPlayerController KFPC;
|
local KFPlayerController KFPC;
|
||||||
|
|
||||||
if( WorldInfo.NetMode != NM_DedicatedServer )
|
if( WorldInfo.NetMode != NM_Client )
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -1558,10 +1559,15 @@ function UpdatePickupList()
|
|||||||
{
|
{
|
||||||
PickupInfos[i].PickupType = 2;
|
PickupInfos[i].PickupType = 2;
|
||||||
}
|
}
|
||||||
else
|
else if (KFGameInfo.AllPickupFactories[j].CurrentPickupIsCash())
|
||||||
|
{
|
||||||
|
PickupInfos[i].PickupType = 3;
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
PickupInfos[i].PickupType = -1;
|
PickupInfos[i].PickupType = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
bNetDirty = true;
|
bNetDirty = true;
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
@ -1831,7 +1837,7 @@ simulated function PlayNewMusicTrack( optional bool bGameStateChanged, optional
|
|||||||
}
|
}
|
||||||
|
|
||||||
// loop if we're designated to loop or this is the boss wave
|
// loop if we're designated to loop or this is the boss wave
|
||||||
if( bLoop || (!bEndlessMode && IsBossWave()))
|
if( bLoop || (!bEndlessMode && (IsBossWave() || class'KFGameEngine'.static.GetWeeklyEventIndexMod() == 12)))
|
||||||
{
|
{
|
||||||
NextMusicTrackInfo = CurrentMusicTrackInfo;
|
NextMusicTrackInfo = CurrentMusicTrackInfo;
|
||||||
}
|
}
|
||||||
@ -2319,7 +2325,12 @@ simulated function NotifyAllowSeasonalSkins(int AllowSeasonalSkinsIndex)
|
|||||||
simulated function NotifyWeeklySelector(int WeeklySelectorIndex_)
|
simulated function NotifyWeeklySelector(int WeeklySelectorIndex_)
|
||||||
{
|
{
|
||||||
WeeklySelectorIndex = WeeklySelectorIndex_;
|
WeeklySelectorIndex = WeeklySelectorIndex_;
|
||||||
|
bNetDirty = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
simulated function NotifySeasonalSkinsIndex(int SeasonalSkinsIndex_)
|
||||||
|
{
|
||||||
|
SeasonalSkinsIndex = SeasonalSkinsIndex_;
|
||||||
bNetDirty = true;
|
bNetDirty = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2498,6 +2509,7 @@ defaultproperties
|
|||||||
bForceShowSkipTrader=false
|
bForceShowSkipTrader=false
|
||||||
bAllowSeasonalSkins=true
|
bAllowSeasonalSkins=true
|
||||||
WeeklySelectorIndex=-1
|
WeeklySelectorIndex=-1
|
||||||
|
SeasonalSkinsIndex=-1
|
||||||
bForceSkipTraderUI=false
|
bForceSkipTraderUI=false
|
||||||
GunGameWavesCurrent=1
|
GunGameWavesCurrent=1
|
||||||
bWaveGunGameIsFinal=false
|
bWaveGunGameIsFinal=false
|
||||||
|
@ -1180,8 +1180,8 @@ function string MakeMapURL(KFGFxStartGameContainer_Options InOptionsComponent)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (CurrentMenuState == EMatchmaking
|
if (CurrentMenuState == EMatchmaking
|
||||||
|| class'KFGameEngine'.static.GetSeasonalEventID() == SEI_None
|
|| class'KFGameEngine'.static.GetSeasonalEventIDForZedSkins() == SEI_None
|
||||||
|| class'KFGameEngine'.static.GetSeasonalEventID() == SEI_Spring)
|
|| class'KFGameEngine'.static.GetSeasonalEventIDForZedSkins() == SEI_Spring)
|
||||||
{
|
{
|
||||||
AllowSeasonalSkins = 1; // Default if we don't have a season or it's find a match menu
|
AllowSeasonalSkins = 1; // Default if we don't have a season or it's find a match menu
|
||||||
}
|
}
|
||||||
@ -1599,17 +1599,6 @@ function BuildServerFilters(OnlineGameInterface GameInterfaceSteam, KFGFxStartGa
|
|||||||
// We don't want to force a search with the Seasonal Skins filter, we find any available server
|
// We don't want to force a search with the Seasonal Skins filter, we find any available server
|
||||||
// then we do a takeover, that's when we change the server settings
|
// then we do a takeover, that's when we change the server settings
|
||||||
|
|
||||||
//bAllowSeasonal = OptionsComponent.GetAllowSeasonalSkinsIndex() == 0;
|
|
||||||
|
|
||||||
//if (GetStartMenuState() == EMatchmaking
|
|
||||||
// || class'KFGameEngine'.static.GetSeasonalEventID() == SEI_None
|
|
||||||
// || class'KFGameEngine'.static.GetSeasonalEventID() == SEI_Spring)
|
|
||||||
//{
|
|
||||||
// bAllowSeasonal = true; // Default if we don't have a season or it's find a match menu
|
|
||||||
//}
|
|
||||||
|
|
||||||
//Search.TestAddBoolGametagFilter(GameTagFilters, bAllowSeasonal == false, 'bNoSeasonalSkins', 1);
|
|
||||||
|
|
||||||
if (OptionsComponent.GetMakeNewServer() || bAttemptingServerCreate )
|
if (OptionsComponent.GetMakeNewServer() || bAttemptingServerCreate )
|
||||||
{
|
{
|
||||||
Search.AddGametagFilter( GameTagFilters, 'bAvailableForTakeover', "1");
|
Search.AddGametagFilter( GameTagFilters, 'bAvailableForTakeover', "1");
|
||||||
|
@ -579,6 +579,11 @@ simulated function PurchaseError(bool bCannotAfford, bool bCannotCarry)
|
|||||||
// ActionScript Callbacks - Trader and Player Inventory
|
// ActionScript Callbacks - Trader and Player Inventory
|
||||||
//==============================================================
|
//==============================================================
|
||||||
|
|
||||||
|
function Callback_Log(String Text)
|
||||||
|
{
|
||||||
|
`Log("From script: " $Text);
|
||||||
|
}
|
||||||
|
|
||||||
function Callback_BuyOrSellItem()
|
function Callback_BuyOrSellItem()
|
||||||
{
|
{
|
||||||
local STraderItem ShopItem;
|
local STraderItem ShopItem;
|
||||||
|
@ -90,9 +90,16 @@ function ShowLeavePartyPopUp()
|
|||||||
function ConfirmLeaveParty()
|
function ConfirmLeaveParty()
|
||||||
{
|
{
|
||||||
local KFPlayerController KFPC;
|
local KFPlayerController KFPC;
|
||||||
|
local KFPawn KFP;
|
||||||
KFPC = KFPlayerController(GetPC());
|
KFPC = KFPlayerController(GetPC());
|
||||||
|
|
||||||
|
// For killing Special Movement Sounds before going to menu
|
||||||
|
KFP = KFPawn(KFPC.Pawn);
|
||||||
|
if (KFP != none && KFP.IsDoingSpecialMove())
|
||||||
|
{
|
||||||
|
KFP.EndSpecialMove();
|
||||||
|
}
|
||||||
|
|
||||||
if(OnlineLobby != none)
|
if(OnlineLobby != none)
|
||||||
{
|
{
|
||||||
OnlineLobby.QuitLobby();
|
OnlineLobby.QuitLobby();
|
||||||
|
@ -868,7 +868,7 @@ simulated function bool DrawFriendlyHumanPlayerInfo( KFPawn_Human KFPH )
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Draw player name (Top)
|
//Draw player name (Top)
|
||||||
FontScale = class'KFGameEngine'.Static.GetKFFontScale() * FriendlyHudScale;
|
FontScale = class'KFGameEngine'.Static.GetKFFontScale() * ResModifier;
|
||||||
Canvas.Font = class'KFGameEngine'.Static.GetKFCanvasFont();
|
Canvas.Font = class'KFGameEngine'.Static.GetKFCanvasFont();
|
||||||
|
|
||||||
// drop shadow for player name text
|
// drop shadow for player name text
|
||||||
@ -992,7 +992,7 @@ simulated function bool DrawScriptedPawnInfo(KFPawn_Scripted KFPS, float Normali
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Draw health bar
|
//Draw health bar
|
||||||
FontScale = class'KFGameEngine'.Static.GetKFFontScale() * FriendlyHudScale;
|
FontScale = class'KFGameEngine'.Static.GetKFFontScale() * ResModifier;
|
||||||
Percentage = FMin(float(KFPS.Health) / float(KFPS.HealthMax), 1);
|
Percentage = FMin(float(KFPS.Health) / float(KFPS.HealthMax), 1);
|
||||||
|
|
||||||
// Make sure that the entire health bar is on screen
|
// Make sure that the entire health bar is on screen
|
||||||
|
@ -2765,6 +2765,7 @@ simulated function bool GetIsOwned( name ClassName )
|
|||||||
{
|
{
|
||||||
local int i;
|
local int i;
|
||||||
local Inventory Inv;
|
local Inventory Inv;
|
||||||
|
local KFPlayerController KFPC;
|
||||||
|
|
||||||
ForEach InventoryActors(class'Inventory', Inv)
|
ForEach InventoryActors(class'Inventory', Inv)
|
||||||
{
|
{
|
||||||
@ -2783,7 +2784,22 @@ simulated function bool GetIsOwned( name ClassName )
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (WorldInfo.NetMode == NM_Client)
|
||||||
|
{
|
||||||
|
KFPC = KFPlayerController( Instigator.Controller );
|
||||||
|
if (KFPC != none)
|
||||||
|
{
|
||||||
|
for (i = 0; i < KFPC.GetPurchaseHelper().OwnedItemList.Length; ++i)
|
||||||
|
{
|
||||||
|
if (KFPC.GetPurchaseHelper().OwnedItemList[i].DefaultItem.ClassName == ClassName)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
`log("GetIsOwned: ClassName="$ClassName @ "false", bLogInventory);
|
`log("GetIsOwned: ClassName="$ClassName @ "false", bLogInventory);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -2832,6 +2848,21 @@ simulated function bool Is9mmInInventory()
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
simulated function bool IsHRG93InInventory()
|
||||||
|
{
|
||||||
|
local Inventory Inv;
|
||||||
|
|
||||||
|
for (Inv = InventoryChain; Inv != None; Inv = Inv.Inventory)
|
||||||
|
{
|
||||||
|
if (Inv.Class.name == 'KFWeap_HRG_93R' || Inv.Class.name == 'KFWeap_HRG_93R_Dual')
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
PendingFire(0)=0 // DEFAULT_FIREMOD
|
PendingFire(0)=0 // DEFAULT_FIREMOD
|
||||||
|
@ -2821,6 +2821,12 @@ function AdjustDamage(out int InDamage, out vector Momentum, Controller Instigat
|
|||||||
`log(self@GetFuncName()@"Starting Damage="$InDamage@"Momentum="$Momentum@"Zone="$HitInfo.BoneName@"DamageType="$DamageType, bLogTakeDamage);
|
`log(self@GetFuncName()@"Starting Damage="$InDamage@"Momentum="$Momentum@"Zone="$HitInfo.BoneName@"DamageType="$DamageType, bLogTakeDamage);
|
||||||
|
|
||||||
// Allow current weapon state to reduce damage
|
// Allow current weapon state to reduce damage
|
||||||
|
KFDT = class<KFDamageType>(DamageType);
|
||||||
|
if (KFDT != none && Instigator != none && DamageCauser != none && DamageCauser.Instigator == Instigator)
|
||||||
|
{
|
||||||
|
InDamage *= KFDT.default.SelfDamageReductionValue;
|
||||||
|
}
|
||||||
|
|
||||||
if ( MyKFWeapon != None )
|
if ( MyKFWeapon != None )
|
||||||
{
|
{
|
||||||
MyKFWeapon.AdjustDamage(InDamage, DamageType, DamageCauser);
|
MyKFWeapon.AdjustDamage(InDamage, DamageType, DamageCauser);
|
||||||
@ -2863,7 +2869,6 @@ function AdjustDamage(out int InDamage, out vector Momentum, Controller Instigat
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Check non lethal damage
|
// Check non lethal damage
|
||||||
KFDT = class<KFDamageType>(DamageType);
|
|
||||||
if ( InDamage >= Health && KFDT != none && KFDT.default.bNonLethalDamage )
|
if ( InDamage >= Health && KFDT != none && KFDT.default.bNonLethalDamage )
|
||||||
{
|
{
|
||||||
InDamage = Health - 1;
|
InDamage = Health - 1;
|
||||||
@ -3154,12 +3159,15 @@ function class<KFPerk> GetUsedWeaponPerk( Controller DamagerController, Actor Da
|
|||||||
KFW = KFWeapon(KFPC.Pawn.Weapon);
|
KFW = KFWeapon(KFPC.Pawn.Weapon);
|
||||||
if( KFW != none )
|
if( KFW != none )
|
||||||
{
|
{
|
||||||
WeaponPerk = class'KFPerk'.static.GetPerkFromDamageCauser( KFW, InstigatorPerkClass );
|
WeaponPerk = class'KFPerk'.static.GetPerkFromDamageCauser( KFW, InstigatorPerkClass );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if( WeaponPerk == none && KFW != none && ( class'KFPerk'.static.IsBackupWeapon( KFW ) || class'KFPerk'.static.IsDoshinegun( KFW ) ))
|
if( WeaponPerk == none && KFW != none
|
||||||
|
&& ( class'KFPerk'.static.IsBackupWeapon( KFW ) ||
|
||||||
|
class'KFPerk'.static.IsDoshinegun( KFW ) ||
|
||||||
|
class'KFPerk'.static.IsMineReconstructor( KFW ) ))
|
||||||
{
|
{
|
||||||
WeaponPerk = InstigatorPerkClass;
|
WeaponPerk = InstigatorPerkClass;
|
||||||
}
|
}
|
||||||
@ -5011,7 +5019,7 @@ reliable server final function ServerDoSpecialMove(ESpecialMove NewMove, optiona
|
|||||||
/**
|
/**
|
||||||
* Request to abort/stop current SpecialMove
|
* Request to abort/stop current SpecialMove
|
||||||
*/
|
*/
|
||||||
simulated final event EndSpecialMove(optional ESpecialMove SpecialMoveToEnd, optional bool bForceNetSync)
|
simulated event EndSpecialMove(optional ESpecialMove SpecialMoveToEnd, optional bool bForceNetSync)
|
||||||
{
|
{
|
||||||
if ( SpecialMoveHandler != None )
|
if ( SpecialMoveHandler != None )
|
||||||
{
|
{
|
||||||
@ -5579,11 +5587,6 @@ simulated function bool CanInteractWithPawnGrapple()
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
simulated function bool CanInteractWithZoneVelocity()
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
InventoryManagerClass=class'KFInventoryManager'
|
InventoryManagerClass=class'KFInventoryManager'
|
||||||
|
@ -1363,7 +1363,7 @@ event TakeDamage(int Damage, Controller InstigatedBy, vector HitLocation, vector
|
|||||||
|
|
||||||
`log(GetFuncName()@"Damage AFTER ="$ActualDamageTaken$" DamageType: "$DamageType$" DamageCauser: "$DamageCauser, bLogTakeDamage);
|
`log(GetFuncName()@"Damage AFTER ="$ActualDamageTaken$" DamageType: "$DamageType$" DamageCauser: "$DamageCauser, bLogTakeDamage);
|
||||||
|
|
||||||
KFGRI = KFGameReplicationInfo(KFGameInfo(WorldInfo.Game).GameReplicationInfo);
|
KFGRI = KFGameReplicationInfo(WorldInfo.GRI);
|
||||||
|
|
||||||
if( (ActualDamageTaken > 0 || OldArmor - Armor > 0) && IsAliveAndWell() && !KFGRI.bTraderIsOpen )
|
if( (ActualDamageTaken > 0 || OldArmor - Armor > 0) && IsAliveAndWell() && !KFGRI.bTraderIsOpen )
|
||||||
{
|
{
|
||||||
|
@ -741,10 +741,10 @@ static function int IndexOverrideReplaceSpawnWithElite()
|
|||||||
WI = class'WorldInfo'.static.GetWorldInfo();
|
WI = class'WorldInfo'.static.GetWorldInfo();
|
||||||
KFGRI = KFGameReplicationInfo(WI.GRI);
|
KFGRI = KFGameReplicationInfo(WI.GRI);
|
||||||
|
|
||||||
// We only use this feature in this weekly for now, we pregenerate the Random so we can replace the Zed with Elite version
|
// We pregenerate the Random so we can replace the Zed with Elite version
|
||||||
// And use the Weekly SpawnReplacementList to replace correctly
|
// And use the Weekly SpawnReplacementList to replace correctly
|
||||||
|
|
||||||
if (KFGRI.IsContaminationMode())
|
if (KFGRI.bIsWeeklyMode)
|
||||||
{
|
{
|
||||||
if (default.ElitePawnClass.length > 0
|
if (default.ElitePawnClass.length > 0
|
||||||
&& default.DifficultySettings != none
|
&& default.DifficultySettings != none
|
||||||
@ -757,7 +757,7 @@ static function int IndexOverrideReplaceSpawnWithElite()
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Gets the actual classes used for spawning. Can be overridden to replace this monster with another */
|
/** Gets the actual classes used for spawning. */
|
||||||
static event class<KFPawn_Monster> GetAIPawnClassToSpawn()
|
static event class<KFPawn_Monster> GetAIPawnClassToSpawn()
|
||||||
{
|
{
|
||||||
local WorldInfo WI;
|
local WorldInfo WI;
|
||||||
@ -766,9 +766,7 @@ static event class<KFPawn_Monster> GetAIPawnClassToSpawn()
|
|||||||
WI = class'WorldInfo'.static.GetWorldInfo();
|
WI = class'WorldInfo'.static.GetWorldInfo();
|
||||||
KFGRI = KFGameReplicationInfo(WI.GRI);
|
KFGRI = KFGameReplicationInfo(WI.GRI);
|
||||||
|
|
||||||
// We already generated the random for this mode when calling IndexOverrideReplaceSpawnWithElite, so no need to roll the dice again
|
if (KFGRI.bIsWeeklyMode == false)
|
||||||
|
|
||||||
if (KFGRI.IsContaminationMode() == false)
|
|
||||||
{
|
{
|
||||||
if (default.ElitePawnClass.length > 0
|
if (default.ElitePawnClass.length > 0
|
||||||
&& default.DifficultySettings != none
|
&& default.DifficultySettings != none
|
||||||
@ -4907,7 +4905,7 @@ static function string GetLocalizedName()
|
|||||||
static function string GetSeasonalLocalizationSuffix()
|
static function string GetSeasonalLocalizationSuffix()
|
||||||
{
|
{
|
||||||
//Remove any year information, just get 1s digit
|
//Remove any year information, just get 1s digit
|
||||||
switch (class'KFGameEngine'.static.GetSeasonalEventID() % 10)
|
switch (class'KFGameEngine'.static.GetSeasonalEventIDForZedSkins() % 10)
|
||||||
{
|
{
|
||||||
case SEI_Spring:
|
case SEI_Spring:
|
||||||
return "_Spring";
|
return "_Spring";
|
||||||
|
@ -546,6 +546,17 @@ static function bool IsDoshinegun( KFWeapon KFW )
|
|||||||
return KFW != none && KFW.Class.Name == 'KFWeap_AssaultRifle_Doshinegun';
|
return KFW != none && KFW.Class.Name == 'KFWeap_AssaultRifle_Doshinegun';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Return if a weapon is Mine Reconstructor
|
||||||
|
*
|
||||||
|
* @param KFW Weapon to check
|
||||||
|
* @return true if mine reconstructor weapon
|
||||||
|
*/
|
||||||
|
static function bool IsMineReconstructor( KFWeapon KFW )
|
||||||
|
{
|
||||||
|
return KFW != none && KFW.Class.Name == 'KFWeap_Mine_Reconstructor';
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Return if a weapon is Crossboom (special case for high rounds perk)
|
* @brief Return if a weapon is Crossboom (special case for high rounds perk)
|
||||||
*
|
*
|
||||||
@ -901,6 +912,10 @@ function SetPlayerDefaults(Pawn PlayerPawn)
|
|||||||
ApplySkillsToPawn();
|
ApplySkillsToPawn();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function SetWaveDefaults()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
/** On perk customization or change, modify owning pawn based on perk selection */
|
/** On perk customization or change, modify owning pawn based on perk selection */
|
||||||
event NotifyPerkModified()
|
event NotifyPerkModified()
|
||||||
{
|
{
|
||||||
@ -1338,6 +1353,7 @@ function bool CouldBeZedShrapnel( class<KFDamageType> KFDT ){ return false; }
|
|||||||
simulated function bool ShouldShrapnel(){ return false; }
|
simulated function bool ShouldShrapnel(){ return false; }
|
||||||
simulated function float GetSplashDamageModifier(){ return 1.f; }
|
simulated function float GetSplashDamageModifier(){ return 1.f; }
|
||||||
simulated function bool IsRangeActive(){ return false; }
|
simulated function bool IsRangeActive(){ return false; }
|
||||||
|
simulated function float GetRangeGroundFireDurationMod(){ return 1.f; }
|
||||||
|
|
||||||
/** Demo functions */
|
/** Demo functions */
|
||||||
simulated function bool IsOnContactActive(){ return false; }
|
simulated function bool IsOnContactActive(){ return false; }
|
||||||
|
@ -511,6 +511,16 @@ simulated function bool IsRangeActive()
|
|||||||
return PerkSkills[EFirebugRange].bActive && IsPerkLevelAllowed(EFirebugRange);
|
return PerkSkills[EFirebugRange].bActive && IsPerkLevelAllowed(EFirebugRange);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Returns mod to Ground Fire Duration modification
|
||||||
|
*
|
||||||
|
* @return float
|
||||||
|
*/
|
||||||
|
simulated function float GetRangeGroundFireDurationMod()
|
||||||
|
{
|
||||||
|
return 1.2f;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Checks if the Splash Damage skill is active
|
* @brief Checks if the Splash Damage skill is active
|
||||||
*
|
*
|
||||||
|
@ -85,6 +85,18 @@ function SetPlayerDefaults( Pawn PlayerPawn )
|
|||||||
NewArmor += OwnerPawn.default.MaxArmor * GetSKillValue( PerkSkills[ESWAT_HeavyArmor] );
|
NewArmor += OwnerPawn.default.MaxArmor * GetSKillValue( PerkSkills[ESWAT_HeavyArmor] );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
OwnerPawn.AddArmor( Round( NewArmor ) );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function SetWaveDefaults()
|
||||||
|
{
|
||||||
|
local float NewArmor;
|
||||||
|
|
||||||
|
super.SetWaveDefaults();
|
||||||
|
|
||||||
|
if( OwnerPawn.Role == ROLE_Authority )
|
||||||
|
{
|
||||||
if( IsBodyArmorActive() )
|
if( IsBodyArmorActive() )
|
||||||
{
|
{
|
||||||
NewArmor += OwnerPawn.default.MaxArmor * GetSKillValue( PerkSkills[ESWAT_BodyArmor] );
|
NewArmor += OwnerPawn.default.MaxArmor * GetSKillValue( PerkSkills[ESWAT_BodyArmor] );
|
||||||
|
@ -185,6 +185,11 @@ function bool CurrentPickupIsAmmo()
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function bool CurrentPickupIsCash()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Make pickup mesh and associated effects hidden.
|
* Make pickup mesh and associated effects hidden.
|
||||||
*/
|
*/
|
||||||
|
@ -315,6 +315,9 @@ function GiveWeapon( Pawn P )
|
|||||||
local class<KFWeapon> KFWeaponClass;
|
local class<KFWeapon> KFWeaponClass;
|
||||||
local KFInventoryManager KFIM;
|
local KFInventoryManager KFIM;
|
||||||
local Inventory Inv;
|
local Inventory Inv;
|
||||||
|
local bool bIsSecondatyPistol;
|
||||||
|
local bool bIs9mmInInventory;
|
||||||
|
local bool bIsHRG93InInventory;
|
||||||
|
|
||||||
// Give us the weapon if we do not have it
|
// Give us the weapon if we do not have it
|
||||||
InventoryClass = ItemPickups[ PickupIndex ].ItemClass;
|
InventoryClass = ItemPickups[ PickupIndex ].ItemClass;
|
||||||
@ -322,27 +325,40 @@ function GiveWeapon( Pawn P )
|
|||||||
// Check if we have the weapon
|
// Check if we have the weapon
|
||||||
KFIM = KFInventoryManager( P.InvManager );
|
KFIM = KFInventoryManager( P.InvManager );
|
||||||
|
|
||||||
// For HRG93R and 9mm pistols, if one of the other type is picked just give the one owned
|
bIsSecondatyPistol = InventoryClass.name == 'KFWeap_HRG_93R' ||
|
||||||
if (KFIM.Is9mmInInventory())
|
InventoryClass.name == 'KFWeap_HRG_93R_Dual' ||
|
||||||
|
InventoryClass.name == 'KFWeap_Pistol_9mm' ||
|
||||||
|
InventoryClass.name == 'KFWeap_Pistol_Dual9mm';
|
||||||
|
|
||||||
|
if (bIsSecondatyPistol)
|
||||||
{
|
{
|
||||||
if (InventoryClass.name == 'KFWeap_HRG_93R')
|
bIs9mmInInventory = KFIM.Is9mmInInventory();
|
||||||
|
bIsHRG93InInventory = KFIM.IsHRG93InInventory();
|
||||||
|
if (!(bIs9mmInInventory && bIsHRG93InInventory))
|
||||||
{
|
{
|
||||||
InventoryClass = class<Weapon>(DynamicLoadObject(class'KfWeapDef_9mm'.default.WeaponClassPath, class'Class'));
|
// For HRG93R and 9mm pistols, if one of the other type is picked just give the one owned
|
||||||
}
|
if (KFIM.Is9mmInInventory())
|
||||||
else if (InventoryClass.name == 'KFWeap_HRG_93R_Dual')
|
{
|
||||||
{
|
if (InventoryClass.name == 'KFWeap_HRG_93R')
|
||||||
InventoryClass = class<Weapon>(DynamicLoadObject(class'KfWeapDef_9mmDual'.default.WeaponClassPath, class'Class'));
|
{
|
||||||
}
|
InventoryClass = class<Weapon>(DynamicLoadObject(class'KfWeapDef_9mm'.default.WeaponClassPath, class'Class'));
|
||||||
}
|
}
|
||||||
else
|
else if (InventoryClass.name == 'KFWeap_HRG_93R_Dual')
|
||||||
{
|
{
|
||||||
if(InventoryClass.name == 'KFWeap_Pistol_9mm')
|
InventoryClass = class<Weapon>(DynamicLoadObject(class'KfWeapDef_9mmDual'.default.WeaponClassPath, class'Class'));
|
||||||
{
|
}
|
||||||
InventoryClass = class<Weapon>(DynamicLoadObject(class'KFWeapDef_HRG_93R'.default.WeaponClassPath, class'Class'));
|
}
|
||||||
}
|
else
|
||||||
else if (InventoryClass.name == 'KFWeap_Pistol_Dual9mm')
|
{
|
||||||
{
|
if(InventoryClass.name == 'KFWeap_Pistol_9mm')
|
||||||
InventoryClass = class<Weapon>(DynamicLoadObject(class'KFWeapDef_HRG_93R_Dual'.default.WeaponClassPath, class'Class'));
|
{
|
||||||
|
InventoryClass = class<Weapon>(DynamicLoadObject(class'KFWeapDef_HRG_93R'.default.WeaponClassPath, class'Class'));
|
||||||
|
}
|
||||||
|
else if (InventoryClass.name == 'KFWeap_Pistol_Dual9mm')
|
||||||
|
{
|
||||||
|
InventoryClass = class<Weapon>(DynamicLoadObject(class'KFWeapDef_HRG_93R_Dual'.default.WeaponClassPath, class'Class'));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -172,6 +172,8 @@ struct native ObjectiveAnnouncementInfo
|
|||||||
/** Used to determine if a player can be considered for achievements */
|
/** Used to determine if a player can be considered for achievements */
|
||||||
var bool bIsAchievementPlayer;
|
var bool bIsAchievementPlayer;
|
||||||
|
|
||||||
|
var bool bHasEverPossessed;
|
||||||
|
|
||||||
/*********************************************************************************************
|
/*********************************************************************************************
|
||||||
* @name UT Variables
|
* @name UT Variables
|
||||||
********************************************************************************************* */
|
********************************************************************************************* */
|
||||||
@ -761,6 +763,8 @@ var bool bAllowSeasonalSkins;
|
|||||||
|
|
||||||
var bool bFriendlyUIEnabled;
|
var bool bFriendlyUIEnabled;
|
||||||
|
|
||||||
|
var bool bLoggedOut;
|
||||||
|
|
||||||
cpptext
|
cpptext
|
||||||
{
|
{
|
||||||
virtual UBOOL Tick( FLOAT DeltaSeconds, ELevelTick TickType );
|
virtual UBOOL Tick( FLOAT DeltaSeconds, ELevelTick TickType );
|
||||||
@ -1024,7 +1028,7 @@ simulated function bool GetAllowSeasonalSkins()
|
|||||||
|
|
||||||
bIsAllowSeasonalSkins = KFGRI != none && KFGRI.bAllowSeasonalSkins;
|
bIsAllowSeasonalSkins = KFGRI != none && KFGRI.bAllowSeasonalSkins;
|
||||||
|
|
||||||
if(bIsWWLWeekly || bIsCastleVolter || bIsAllowSeasonalSkins == false)
|
if (bIsWWLWeekly || bIsCastleVolter || bIsAllowSeasonalSkins == false)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -1036,8 +1040,11 @@ simulated event name GetSeasonalStateName()
|
|||||||
{
|
{
|
||||||
local int EventId, MapModifiedEventId;
|
local int EventId, MapModifiedEventId;
|
||||||
local KFMapInfo KFMI;
|
local KFMapInfo KFMI;
|
||||||
|
local KFGameReplicationInfo KFGRI;
|
||||||
|
|
||||||
|
KFGRI = KFGameReplicationInfo(WorldInfo.GRI);
|
||||||
|
|
||||||
EventId = class'KFGameEngine'.static.GetSeasonalEventID();
|
EventId = class'KFGameEngine'.static.GetSeasonalEventIDForZedSkins();
|
||||||
|
|
||||||
MapModifiedEventId = SEI_None;
|
MapModifiedEventId = SEI_None;
|
||||||
|
|
||||||
@ -1049,18 +1056,23 @@ simulated event name GetSeasonalStateName()
|
|||||||
|
|
||||||
bAllowSeasonalSkins = GetAllowSeasonalSkins();
|
bAllowSeasonalSkins = GetAllowSeasonalSkins();
|
||||||
|
|
||||||
`Log("GetSeasonalStateName: "$EventId$" AllowSeasonalSkins: "$bAllowSeasonalSkins);
|
|
||||||
|
|
||||||
if (MapModifiedEventId == SEI_None)
|
if (MapModifiedEventId == SEI_None)
|
||||||
{
|
{
|
||||||
if (bAllowSeasonalSkins == false)
|
if (bAllowSeasonalSkins == false)
|
||||||
{
|
{
|
||||||
EventId = SEI_None;
|
EventId = SEI_None;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (bAllowSeasonalSkins)
|
||||||
|
{
|
||||||
|
if (KFGRI != none && KFGRI.SeasonalSkinsIndex != -1)
|
||||||
|
{
|
||||||
|
EventId = KFGRI.SeasonalSkinsIndex;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
`Log("GetSeasonalStateName: ModifySeasonalEventId: "$MapModifiedEventId);
|
|
||||||
EventId = MapModifiedEventId;
|
EventId = MapModifiedEventId;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1228,6 +1240,8 @@ event Possess(Pawn aPawn, bool bVehicleTransition)
|
|||||||
{
|
{
|
||||||
local KFPlayerReplicationInfo KFPRI;
|
local KFPlayerReplicationInfo KFPRI;
|
||||||
|
|
||||||
|
bHasEverPossessed = true;
|
||||||
|
|
||||||
if( aPawn != none && aPawn.IsAliveAndWell() )
|
if( aPawn != none && aPawn.IsAliveAndWell() )
|
||||||
{
|
{
|
||||||
bIsAchievementPlayer = true;
|
bIsAchievementPlayer = true;
|
||||||
@ -7259,12 +7273,8 @@ simulated event InitializeStats()
|
|||||||
local class<KFOnlineStatsRead> StatsReadClass;
|
local class<KFOnlineStatsRead> StatsReadClass;
|
||||||
local class<KFOnlineStatsWrite> StatsWriteClass;
|
local class<KFOnlineStatsWrite> StatsWriteClass;
|
||||||
|
|
||||||
`Log("InitializeStats()");
|
if ( StatsRead == none && WorldInfo.NetMode != NM_DedicatedServer )
|
||||||
|
|
||||||
if ( ( StatsRead == none || StatsWrite == none ) && WorldInfo.NetMode != NM_DedicatedServer )
|
|
||||||
{
|
{
|
||||||
`Log("InitializeStats() - Create objects");
|
|
||||||
|
|
||||||
// BWJ - 1-4-17 - Different stats read for dingo
|
// BWJ - 1-4-17 - Different stats read for dingo
|
||||||
if( WorldInfo.IsConsoleBuild( CONSOLE_Durango ) )
|
if( WorldInfo.IsConsoleBuild( CONSOLE_Durango ) )
|
||||||
{
|
{
|
||||||
@ -7293,6 +7303,11 @@ simulated event InitializeStats()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
simulated function bool HasStatsWrite()
|
||||||
|
{
|
||||||
|
return StatsWrite != none;
|
||||||
|
}
|
||||||
|
|
||||||
simulated function LogStatValue(int StatId)
|
simulated function LogStatValue(int StatId)
|
||||||
{
|
{
|
||||||
if (StatsWrite != none)
|
if (StatsWrite != none)
|
||||||
@ -8385,6 +8400,13 @@ function DrawDebugMap( out Canvas Canvas )
|
|||||||
ElementColor.B=255;
|
ElementColor.B=255;
|
||||||
ElementColor.A = 255;
|
ElementColor.A = 255;
|
||||||
}
|
}
|
||||||
|
else if ( KFGRI.PickupInfos[i].PickupType == 3 )
|
||||||
|
{
|
||||||
|
ElementColor.R=255;
|
||||||
|
ElementColor.G=255;
|
||||||
|
ElementColor.B=0;
|
||||||
|
ElementColor.A = 255;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Continue;
|
Continue;
|
||||||
@ -12245,6 +12267,8 @@ defaultproperties
|
|||||||
//Allow PC-based things to be properly ticked, but skip the rest of the tick in native
|
//Allow PC-based things to be properly ticked, but skip the rest of the tick in native
|
||||||
bAlwaysTick=true
|
bAlwaysTick=true
|
||||||
|
|
||||||
|
bHasEverPossessed = false
|
||||||
|
|
||||||
MatchStatsClass=Class'EphemeralMatchStats'
|
MatchStatsClass=Class'EphemeralMatchStats'
|
||||||
InputClass=class'KFGame.KFPlayerInput'
|
InputClass=class'KFGame.KFPlayerInput'
|
||||||
CheatClass=class'KFGame.KFCheatManager'
|
CheatClass=class'KFGame.KFCheatManager'
|
||||||
@ -12448,4 +12472,6 @@ defaultproperties
|
|||||||
bAllowSeasonalSkins = false
|
bAllowSeasonalSkins = false
|
||||||
|
|
||||||
bFriendlyUIEnabled = true
|
bFriendlyUIEnabled = true
|
||||||
|
|
||||||
|
bLoggedOut = false
|
||||||
}
|
}
|
||||||
|
@ -452,6 +452,15 @@ event PlayerInput( float DeltaTime )
|
|||||||
RawJoyVector.y = RawJoyLookUp;
|
RawJoyVector.y = RawJoyLookUp;
|
||||||
RawJoyLookMagnitude = VSize2d( RawJoyVector );
|
RawJoyLookMagnitude = VSize2d( RawJoyVector );
|
||||||
|
|
||||||
|
// Avoid having controller influence view rotation when using keyboard and mouse
|
||||||
|
if (!bUsingGamepad)
|
||||||
|
{
|
||||||
|
CurrTurn = 0;
|
||||||
|
CurrLookUp = 0;
|
||||||
|
aLookUp = 0;
|
||||||
|
aTurn = 0;
|
||||||
|
}
|
||||||
|
|
||||||
// PlayerInput shouldn't take timedilation into account
|
// PlayerInput shouldn't take timedilation into account
|
||||||
DeltaTime /= WorldInfo.TimeDilation;
|
DeltaTime /= WorldInfo.TimeDilation;
|
||||||
if (Outer.bDemoOwner && WorldInfo.NetMode == NM_Client)
|
if (Outer.bDemoOwner && WorldInfo.NetMode == NM_Client)
|
||||||
|
@ -257,6 +257,20 @@ reliable client function ShowKickVote(PlayerReplicationInfo PRI, byte VoteDurati
|
|||||||
super.ShowKickVote(PRI, VoteDuration, bShowChoices && (PRI.GetTeamNum() == GetTeamNum()));
|
super.ShowKickVote(PRI, VoteDuration, bShowChoices && (PRI.GetTeamNum() == GetTeamNum()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
reliable client function ShowSkipTraderVote(PlayerReplicationInfo PRI, byte VoteDuration, bool bShowChoices)
|
||||||
|
{
|
||||||
|
super.ShowSkipTraderVote(PRI, VoteDuration, bShowChoices && (PRI.GetTeamNum() != GetTeamNum()));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Override for not allowing skip trader as enemy
|
||||||
|
simulated function RequestSkiptTrader(PlayerReplicationInfo PRI)
|
||||||
|
{
|
||||||
|
if (GetTeamNum() != 255)
|
||||||
|
{
|
||||||
|
super.RequestSkiptTrader(PRI);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
bReplicateInstigator=false
|
bReplicateInstigator=false
|
||||||
|
@ -89,7 +89,10 @@ simulated function ProcessTouch(Actor Other, Vector HitLocation, Vector HitNorma
|
|||||||
PenetrationPower -= KFP.PenetrationResistance;
|
PenetrationPower -= KFP.PenetrationResistance;
|
||||||
}
|
}
|
||||||
|
|
||||||
bPassThrough = TRUE;
|
if (PenetrationPower > 0)
|
||||||
|
{
|
||||||
|
bPassThrough = TRUE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -268,6 +268,12 @@ function SpecialMoveEnded(Name PrevMove, Name NextMove)
|
|||||||
Super.SpecialMoveEnded(PrevMove, NextMove);
|
Super.SpecialMoveEnded(PrevMove, NextMove);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function AnimEndNotify(AnimNodeSequence SeqNode, float PlayedTime, float ExcessTime)
|
||||||
|
{
|
||||||
|
// By default end this special move.
|
||||||
|
KFPOwner.EndSpecialMove(SM_RecoverFromRagdoll);
|
||||||
|
}
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
Handle=KFSM_RecoverFromRagdoll
|
Handle=KFSM_RecoverFromRagdoll
|
||||||
|
@ -20,8 +20,7 @@ event Activated()
|
|||||||
{
|
{
|
||||||
Door = KFDoorActor(ObjVar.GetObjectValue());
|
Door = KFDoorActor(ObjVar.GetObjectValue());
|
||||||
Door.SetInteractive(false);
|
Door.SetInteractive(false);
|
||||||
Door.bIsDoorOpen = true;
|
Door.CloseDoor();
|
||||||
Door.UseDoor(none);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
36
KFGame/Classes/KFSeqAct_EnableDoor.uc
Normal file
36
KFGame/Classes/KFSeqAct_EnableDoor.uc
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
//=============================================================================
|
||||||
|
// KFSeqAct_EnableDoor
|
||||||
|
//=============================================================================
|
||||||
|
// Enables one or more KFDoorActors, meaning they can be interacted
|
||||||
|
// with or damaged
|
||||||
|
//=============================================================================
|
||||||
|
// Killing Floor 2
|
||||||
|
//=============================================================================
|
||||||
|
|
||||||
|
|
||||||
|
class KFSeqAct_EnableDoor extends SequenceAction;
|
||||||
|
|
||||||
|
event Activated()
|
||||||
|
{
|
||||||
|
local SeqVar_Object ObjVar;
|
||||||
|
local KFDoorActor Door;
|
||||||
|
|
||||||
|
if (InputLinks[0].bHasImpulse)
|
||||||
|
{
|
||||||
|
foreach LinkedVariables(class'SeqVar_Object',ObjVar,"KFDoorActor(s)")
|
||||||
|
{
|
||||||
|
Door = KFDoorActor(ObjVar.GetObjectValue());
|
||||||
|
Door.SetInteractive(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
defaultProperties
|
||||||
|
{
|
||||||
|
ObjCategory="Killing Floor"
|
||||||
|
ObjName="Enable Door"
|
||||||
|
|
||||||
|
InputLinks(0)=(LinkDesc="Enable")
|
||||||
|
VariableLinks(0)=(ExpectedType=class'SeqVar_Object',LinkDesc="KFDoorActor(s)",PropertyName="")
|
||||||
|
bCallHandler=false
|
||||||
|
}
|
@ -1083,7 +1083,7 @@ function bool ShouldConcludePauseGameVote()
|
|||||||
reliable server function ConcludeVotePauseGame()
|
reliable server function ConcludeVotePauseGame()
|
||||||
{
|
{
|
||||||
local array<KFPlayerReplicationInfo> PRIs;
|
local array<KFPlayerReplicationInfo> PRIs;
|
||||||
local int i, NumPRIs;
|
local int i;
|
||||||
local KFGameInfo KFGI;
|
local KFGameInfo KFGI;
|
||||||
local KFGameReplicationInfo KFGRI;
|
local KFGameReplicationInfo KFGRI;
|
||||||
|
|
||||||
@ -1099,7 +1099,6 @@ reliable server function ConcludeVotePauseGame()
|
|||||||
PRIs[i].HidePauseGameVote();
|
PRIs[i].HidePauseGameVote();
|
||||||
}
|
}
|
||||||
|
|
||||||
NumPRIs = PRIs.Length;
|
|
||||||
SetTimer( 0.f, true, nameof(UpdatePauseGameTimer), self );
|
SetTimer( 0.f, true, nameof(UpdatePauseGameTimer), self );
|
||||||
|
|
||||||
if( NoVotes > 0)
|
if( NoVotes > 0)
|
||||||
@ -1108,7 +1107,7 @@ reliable server function ConcludeVotePauseGame()
|
|||||||
SetTimer( KFGI.TimeBetweenFailedVotes, false, nameof(ClearFailedVoteFlag), self );
|
SetTimer( KFGI.TimeBetweenFailedVotes, false, nameof(ClearFailedVoteFlag), self );
|
||||||
KFGI.BroadcastLocalized(KFGI, class'KFLocalMessage', KFGRI.bIsEndlessPaused ? LMT_ResumeVoteFailed : LMT_PauseVoteFailed);
|
KFGI.BroadcastLocalized(KFGI, class'KFLocalMessage', KFGRI.bIsEndlessPaused ? LMT_ResumeVoteFailed : LMT_PauseVoteFailed);
|
||||||
}
|
}
|
||||||
else if( YesVotes >= NumPRIs )
|
else if( YesVotes >= KFGameInfo(WorldInfo.Game).NumPlayers )
|
||||||
{
|
{
|
||||||
|
|
||||||
//pause game
|
//pause game
|
||||||
@ -1159,6 +1158,17 @@ reliable server function ResetPauseGameVote()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function ServerNotifyDisconnect()
|
||||||
|
{
|
||||||
|
local KFGameReplicationInfo KFGRI;
|
||||||
|
KFGRI = Outer;
|
||||||
|
|
||||||
|
if (bIsPauseGameVoteInProgress && KFGRI.bIsEndlessPaused && (YesVotes + NoVotes >= KFGameInfo(WorldInfo.Game).NumPlayers))
|
||||||
|
{
|
||||||
|
ConcludeVotePauseGame();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
DefaultProperties
|
DefaultProperties
|
||||||
{
|
{
|
||||||
VoteTime=30
|
VoteTime=30
|
||||||
|
@ -924,6 +924,16 @@ simulated function StartFire(byte FireModeNum)
|
|||||||
Super.StartFire(FireModeNum);
|
Super.StartFire(FireModeNum);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function bool DenyPickupQuery(class<Inventory> ItemClass, Actor Pickup)
|
||||||
|
{
|
||||||
|
if (ItemClass == class || ItemClass == SingleClass)
|
||||||
|
{
|
||||||
|
return DenyPickupQuery_Internal(ItemClass, Pickup);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
InventoryGroup=IG_Primary
|
InventoryGroup=IG_Primary
|
||||||
|
@ -1768,49 +1768,60 @@ function SetOriginalValuesFromPickup( KFWeapon PickedUpWeapon )
|
|||||||
*/
|
*/
|
||||||
function bool DenyPickupQuery(class<Inventory> ItemClass, Actor Pickup)
|
function bool DenyPickupQuery(class<Inventory> ItemClass, Actor Pickup)
|
||||||
{
|
{
|
||||||
local bool bDenyPickUp;
|
if (ItemClass == class || (DualClass != none && ItemClass == DualClass))
|
||||||
|
{
|
||||||
|
return DenyPickupQuery_Internal(ItemClass, Pickup);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function bool DenyPickupQuery_Internal(class<Inventory> ItemClass, Actor Pickup)
|
||||||
|
{
|
||||||
|
local bool bDenyPickUp, bIsProjectile;
|
||||||
local KFPlayerController KFPC;
|
local KFPlayerController KFPC;
|
||||||
local class<KFWeapon> KFWeapClass;
|
local class<KFWeapon> KFWeapClass;
|
||||||
|
|
||||||
if (ItemClass == class)
|
KFWeapClass = class<KFWeapon>(ItemClass);
|
||||||
|
bIsProjectile = Pickup.IsA('Projectile');
|
||||||
|
|
||||||
|
// don't do this ammo check if the player is trying to pick up the second dual weapon
|
||||||
|
if (bIsProjectile ||
|
||||||
|
KFWeapClass == none || default.DualClass == none ||
|
||||||
|
(ItemClass == class && KFWeapClass.default.DualClass != default.DualClass))
|
||||||
{
|
{
|
||||||
KFWeapClass = class<KFWeapon>(ItemClass);
|
// Unless ammo is full, allow the pickup to handle giving ammo
|
||||||
// don't do this ammo check if the player is trying to pick up the second dual weapon
|
// @note: projectile pickups can only refill primary ammo
|
||||||
if (KFWeapClass == none || KFWeapClass.default.DualClass == none || KFWeapClass.default.DualClass != default.DualClass)
|
|
||||||
|
if (CanRefillSecondaryAmmo() && !bIsProjectile)
|
||||||
{
|
{
|
||||||
// Unless ammo is full, allow the pickup to handle giving ammo
|
bDenyPickUp = ((SpareAmmoCount[0] + AmmoCount[0]) >= GetMaxAmmoAmount(0) && AmmoCount[1] >= MagazineCapacity[1]);
|
||||||
// @note: projectile pickups can only refill primary ammo
|
}
|
||||||
if (CanRefillSecondaryAmmo() && !Pickup.IsA('Projectile'))
|
else
|
||||||
|
{
|
||||||
|
if (KFProj_RicochetStickBullet(Pickup) == none || KFProj_RicochetStickBullet(Pickup).bPickupCanBeDenied)
|
||||||
{
|
{
|
||||||
bDenyPickUp = ((SpareAmmoCount[0] + AmmoCount[0]) >= GetMaxAmmoAmount(0) && AmmoCount[1] >= MagazineCapacity[1]);
|
bDenyPickUp = ((SpareAmmoCount[0] + AmmoCount[0]) >= GetMaxAmmoAmount(0));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (KFProj_RicochetStickBullet(Pickup) == none || KFProj_RicochetStickBullet(Pickup).bPickupCanBeDenied)
|
bDenyPickUp = false;
|
||||||
{
|
|
||||||
bDenyPickUp = ((SpareAmmoCount[0] + AmmoCount[0]) >= GetMaxAmmoAmount(0));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
bDenyPickUp = false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (bDenyPickUp)
|
if (bDenyPickUp)
|
||||||
|
{
|
||||||
|
KFPC = KFPlayerController(Instigator.Controller);
|
||||||
|
//show non critical message for deny pickup
|
||||||
|
if (KFPC != None)
|
||||||
{
|
{
|
||||||
KFPC = KFPlayerController(Instigator.Controller);
|
KFPC.ReceiveLocalizedMessage(class'KFLocalMessage_Game', (MagazineCapacity[0] == 0) ? GMT_AlreadyCarryingWeapon : GMT_AmmoIsFull);
|
||||||
//show non critical message for deny pickup
|
|
||||||
if (KFPC != None)
|
|
||||||
{
|
|
||||||
KFPC.ReceiveLocalizedMessage(class'KFLocalMessage_Game', (MagazineCapacity[0] == 0) ? GMT_AlreadyCarryingWeapon : GMT_AmmoIsFull);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return bDenyPickUp;
|
return bDenyPickUp;
|
||||||
}
|
}
|
||||||
|
|
||||||
function NotifyPickedUp()
|
function NotifyPickedUp()
|
||||||
{
|
{
|
||||||
ClientNotifyPickedUp();
|
ClientNotifyPickedUp();
|
||||||
@ -6568,7 +6579,7 @@ simulated state WeaponFiring
|
|||||||
|
|
||||||
if (WorldInfo.NetMode == NM_Client && bAllowClientAmmoTracking && FireInterval[CurrentFireMode] <= MinFireIntervalToTriggerSync)
|
if (WorldInfo.NetMode == NM_Client && bAllowClientAmmoTracking && FireInterval[CurrentFireMode] <= MinFireIntervalToTriggerSync)
|
||||||
{
|
{
|
||||||
SyncCurrentAmmoCount(CurrentFireMode, AmmoCount[CurrentFireMode]);
|
SyncCurrentAmmoCount(CurrentFireMode, AmmoCount[GetAmmoType(CurrentFireMode)]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -6614,11 +6625,11 @@ simulated state WeaponFiring
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
unreliable server function SyncCurrentAmmoCount(byte FireMode, int CurrentAmmoCount)
|
reliable server function SyncCurrentAmmoCount(byte FireMode, int CurrentAmmoCount)
|
||||||
{
|
{
|
||||||
if(AmmoCount[FireMode] != CurrentAmmoCount)
|
if(AmmoCount[GetAmmoType(CurrentFireMode)] != CurrentAmmoCount)
|
||||||
{
|
{
|
||||||
AmmoCount[FireMode] = CurrentAmmoCount;
|
AmmoCount[GetAmmoType(CurrentFireMode)] = CurrentAmmoCount;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -7128,6 +7139,7 @@ simulated function TimeWeaponReloading()
|
|||||||
local name AnimName;
|
local name AnimName;
|
||||||
local float AnimLength, AnimRate;
|
local float AnimLength, AnimRate;
|
||||||
local float AmmoTimer, StatusTimer;
|
local float AmmoTimer, StatusTimer;
|
||||||
|
local KFPlayerController KFPC;
|
||||||
|
|
||||||
ReloadStatus = GetNextReloadStatus();
|
ReloadStatus = GetNextReloadStatus();
|
||||||
|
|
||||||
@ -7146,8 +7158,8 @@ simulated function TimeWeaponReloading()
|
|||||||
if ( AnimLength > 0.f )
|
if ( AnimLength > 0.f )
|
||||||
{
|
{
|
||||||
MakeNoise(0.5f,'PlayerReload'); // AI
|
MakeNoise(0.5f,'PlayerReload'); // AI
|
||||||
|
KFPC = KFPlayerController(Instigator.Controller);
|
||||||
if ( Instigator.IsFirstPerson() )
|
if ( Instigator.IsFirstPerson() || (KFPC != none && KFPC.IsBossCameraMode()))
|
||||||
{
|
{
|
||||||
PlayAnimation(AnimName, AnimLength);
|
PlayAnimation(AnimName, AnimLength);
|
||||||
}
|
}
|
||||||
|
@ -4828,7 +4828,7 @@ defaultproperties
|
|||||||
Skins.Add((Id=9689, bNeedsCodeUpdates = true, Weapondef=class'KFWeapDef_HRG_Dragonbreath', MIC_1P=("WEP_SkinSet78_MAT.spectre_hrgmegadragonsbreath.Spectre_HRGMegaDragonsbreath_1P_Mint_MIC", "WEP_SkinSet78_MAT.spectre_hrgmegadragonsbreath.Spectre_HRGMegaDragonsbreath_Barrel_1P_Mint_MIC", "WEP_SkinSet78_MAT.spectre_hrgmegadragonsbreath.Spectre_HRGMegaDragonsbreath_Loader_1P_Mint_MIC"), MIC_3P="WEP_SkinSet78_MAT.spectre_hrgmegadragonsbreath.Spectre_HRGMegaDragonsbreath_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet78_MAT.spectre_hrgmegadragonsbreath.Spectre_HRGMegaDragonsbreath_3P_Pickup_MIC"))
|
Skins.Add((Id=9689, bNeedsCodeUpdates = true, Weapondef=class'KFWeapDef_HRG_Dragonbreath', MIC_1P=("WEP_SkinSet78_MAT.spectre_hrgmegadragonsbreath.Spectre_HRGMegaDragonsbreath_1P_Mint_MIC", "WEP_SkinSet78_MAT.spectre_hrgmegadragonsbreath.Spectre_HRGMegaDragonsbreath_Barrel_1P_Mint_MIC", "WEP_SkinSet78_MAT.spectre_hrgmegadragonsbreath.Spectre_HRGMegaDragonsbreath_Loader_1P_Mint_MIC"), MIC_3P="WEP_SkinSet78_MAT.spectre_hrgmegadragonsbreath.Spectre_HRGMegaDragonsbreath_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet78_MAT.spectre_hrgmegadragonsbreath.Spectre_HRGMegaDragonsbreath_3P_Pickup_MIC"))
|
||||||
|
|
||||||
//Spectre HRG Head Hunter
|
//Spectre HRG Head Hunter
|
||||||
Skins.Add((Id=9690, bNeedsCodeUpdates = true, Weapondef=class'KFWeapDef_HRG_CranialPopper', MIC_1P=("WEP_1P_HRG_CranialPopper_MAT.Wep_Cranial_Optic_PM_MIC", "WEP_SkinSet78_MAT.spectre_hrgcranialpopper.Spectre_HRGCranialPopper_Optic_1P_Mint_MIC", "WEP_1P_RailGun_MAT.WEP_RailGunScopeLense_PM", "WEP_SkinSet78_MAT.spectre_hrgcranialpopper.Spectre_HRGCranialPopper_1P_Mint_MIC"), MIC_3P="WEP_SkinSet78_MAT.spectre_hrgcranialpopper.Spectre_HRGCranialPopper_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet78_MAT.spectre_hrgcranialpopper.Spectre_HRGCranialPopper_3P_Pickup_MIC"))
|
Skins.Add((Id=9690, bNeedsCodeUpdates = true, Weapondef=class'KFWeapDef_HRG_CranialPopper', MIC_1P=("WEP_SkinSet78_MAT.spectre_hrgcranialpopper.Spectre_HRGCranialPopper_1P_Mint_MIC", "WEP_SkinSet78_MAT.spectre_hrgcranialpopper.Spectre_HRGCranialPopper_Optic_1P_Mint_MIC"), MIC_3P="WEP_SkinSet78_MAT.spectre_hrgcranialpopper.Spectre_HRGCranialPopper_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet78_MAT.spectre_hrgcranialpopper.Spectre_HRGCranialPopper_3P_Pickup_MIC"))
|
||||||
|
|
||||||
//Spectre HRG Locust
|
//Spectre HRG Locust
|
||||||
Skins.Add((Id=9691, bNeedsCodeUpdates = true, Weapondef=class'KFWeapDef_HRG_Locust', MIC_1P=("WEP_SkinSet78_MAT.spectre_hrglocust.Spectre_HRGLocust_1P_Mint_MIC", "WEP_SkinSet78_MAT.spectre_hrglocust.Spectre_HRGLocust_Optic_1P_Mint_MIC"), MIC_3P="WEP_SkinSet78_MAT.spectre_hrglocust.Spectre_HRGLocust_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet78_MAT.spectre_hrglocust.Spectre_HRGLocust_3P_Pickup_MIC"))
|
Skins.Add((Id=9691, bNeedsCodeUpdates = true, Weapondef=class'KFWeapDef_HRG_Locust', MIC_1P=("WEP_SkinSet78_MAT.spectre_hrglocust.Spectre_HRGLocust_1P_Mint_MIC", "WEP_SkinSet78_MAT.spectre_hrglocust.Spectre_HRGLocust_Optic_1P_Mint_MIC"), MIC_3P="WEP_SkinSet78_MAT.spectre_hrglocust.Spectre_HRGLocust_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet78_MAT.spectre_hrglocust.Spectre_HRGLocust_3P_Pickup_MIC"))
|
||||||
@ -4867,7 +4867,7 @@ defaultproperties
|
|||||||
Skins.Add((Id=9702, bNeedsCodeUpdates = true, Weapondef=class'KFWeapDef_HRG_Dragonbreath', MIC_1P=("WEP_SkinSet78_MAT.spectrechroma_hrgmegadragonsbreath.SpectreChroma_HRGMegaDragonsbreath_1P_Mint_MIC", "WEP_SkinSet78_MAT.spectrechroma_hrgmegadragonsbreath.SpectreChroma_HRGMegaDragonsbreath_Barrel_1P_Mint_MIC", "WEP_SkinSet78_MAT.spectrechroma_hrgmegadragonsbreath.SpectreChroma_HRGMegaDragonsbreath_Loader_1P_Mint_MIC"), MIC_3P="WEP_SkinSet78_MAT.spectrechroma_hrgmegadragonsbreath.SpectreChroma_HRGMegaDragonsbreath_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet78_MAT.spectrechroma_hrgmegadragonsbreath.SpectreChroma_HRGMegaDragonsbreath_3P_Pickup_MIC"))
|
Skins.Add((Id=9702, bNeedsCodeUpdates = true, Weapondef=class'KFWeapDef_HRG_Dragonbreath', MIC_1P=("WEP_SkinSet78_MAT.spectrechroma_hrgmegadragonsbreath.SpectreChroma_HRGMegaDragonsbreath_1P_Mint_MIC", "WEP_SkinSet78_MAT.spectrechroma_hrgmegadragonsbreath.SpectreChroma_HRGMegaDragonsbreath_Barrel_1P_Mint_MIC", "WEP_SkinSet78_MAT.spectrechroma_hrgmegadragonsbreath.SpectreChroma_HRGMegaDragonsbreath_Loader_1P_Mint_MIC"), MIC_3P="WEP_SkinSet78_MAT.spectrechroma_hrgmegadragonsbreath.SpectreChroma_HRGMegaDragonsbreath_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet78_MAT.spectrechroma_hrgmegadragonsbreath.SpectreChroma_HRGMegaDragonsbreath_3P_Pickup_MIC"))
|
||||||
|
|
||||||
//Spectre Chroma HRG Head Hunter
|
//Spectre Chroma HRG Head Hunter
|
||||||
Skins.Add((Id=9703, bNeedsCodeUpdates = true, Weapondef=class'KFWeapDef_HRG_CranialPopper', MIC_1P=("WEP_1P_HRG_CranialPopper_MAT.Wep_Cranial_Optic_PM_MIC", "WEP_SkinSet78_MAT.spectrechroma_hrgcranialpopper.SpectreChroma_HRGCranialPopper_Optic_1P_Mint_MIC", "WEP_1P_RailGun_MAT.WEP_RailGunScopeLense_PM", "WEP_SkinSet78_MAT.spectrechroma_hrgcranialpopper.SpectreChroma_HRGCranialPopper_1P_Mint_MIC"), MIC_3P="WEP_SkinSet78_MAT.spectrechroma_hrgcranialpopper.SpectreChroma_HRGCranialPopper_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet78_MAT.spectrechroma_hrgcranialpopper.SpectreChroma_HRGCranialPopper_3P_Pickup_MIC"))
|
Skins.Add((Id=9703, bNeedsCodeUpdates = true, Weapondef=class'KFWeapDef_HRG_CranialPopper', MIC_1P=( "WEP_SkinSet78_MAT.spectrechroma_hrgcranialpopper.SpectreChroma_HRGCranialPopper_1P_Mint_MIC", "WEP_SkinSet78_MAT.spectrechroma_hrgcranialpopper.SpectreChroma_HRGCranialPopper_Optic_1P_Mint_MIC"), MIC_3P="WEP_SkinSet78_MAT.spectrechroma_hrgcranialpopper.SpectreChroma_HRGCranialPopper_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet78_MAT.spectrechroma_hrgcranialpopper.SpectreChroma_HRGCranialPopper_3P_Pickup_MIC"))
|
||||||
|
|
||||||
//Spectre Chroma HRG Locust
|
//Spectre Chroma HRG Locust
|
||||||
Skins.Add((Id=9704, bNeedsCodeUpdates = true, Weapondef=class'KFWeapDef_HRG_Locust', MIC_1P=("WEP_SkinSet78_MAT.spectrechroma_hrglocust.SpectreChroma_HRGLocust_1P_Mint_MIC", "WEP_SkinSet78_MAT.spectrechroma_hrglocust.SpectreChroma_HRGLocust_Optic_1P_Mint_MIC"), MIC_3P="WEP_SkinSet78_MAT.spectrechroma_hrglocust.SpectreChroma_HRGLocust_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet78_MAT.spectrechroma_hrglocust.SpectreChroma_HRGLocust_3P_Pickup_MIC"))
|
Skins.Add((Id=9704, bNeedsCodeUpdates = true, Weapondef=class'KFWeapDef_HRG_Locust', MIC_1P=("WEP_SkinSet78_MAT.spectrechroma_hrglocust.SpectreChroma_HRGLocust_1P_Mint_MIC", "WEP_SkinSet78_MAT.spectrechroma_hrglocust.SpectreChroma_HRGLocust_Optic_1P_Mint_MIC"), MIC_3P="WEP_SkinSet78_MAT.spectrechroma_hrglocust.SpectreChroma_HRGLocust_3P_Mint_MIC", MIC_Pickup="WEP_SkinSet78_MAT.spectrechroma_hrglocust.SpectreChroma_HRGLocust_3P_Pickup_MIC"))
|
||||||
|
@ -49,6 +49,8 @@ defaultproperties
|
|||||||
|
|
||||||
BurnDamageType=class'KFDT_Fire_ThermiteImpactDoT'
|
BurnDamageType=class'KFDT_Fire_ThermiteImpactDoT'
|
||||||
|
|
||||||
|
SelfDamageReductionValue=0.05f //0.25f
|
||||||
|
|
||||||
ModifierPerkList(0)=class'KFPerk_FireBug'
|
ModifierPerkList(0)=class'KFPerk_FireBug'
|
||||||
|
|
||||||
WeaponDef=class'KFWeapDef_ThermiteBore'
|
WeaponDef=class'KFWeapDef_ThermiteBore'
|
||||||
|
@ -24,6 +24,8 @@ defaultproperties
|
|||||||
|
|
||||||
KnockdownPower=150
|
KnockdownPower=150
|
||||||
StumblePower=400
|
StumblePower=400
|
||||||
|
|
||||||
|
SelfDamageReductionValue=0.5f //0.75f
|
||||||
|
|
||||||
//Perk
|
//Perk
|
||||||
ModifierPerkList(0)=class'KFPerk_Demolitionist'
|
ModifierPerkList(0)=class'KFPerk_Demolitionist'
|
||||||
|
@ -27,6 +27,8 @@ defaultproperties
|
|||||||
KDeathVel=200
|
KDeathVel=200
|
||||||
StumblePower=200
|
StumblePower=200
|
||||||
|
|
||||||
|
SelfDamageReductionValue=0.075f
|
||||||
|
|
||||||
ModifierPerkList(0)=class'KFPerk_Demolitionist'
|
ModifierPerkList(0)=class'KFPerk_Demolitionist'
|
||||||
|
|
||||||
WeaponDef=class'KFWeapDef_GravityImploder'
|
WeaponDef=class'KFWeapDef_GravityImploder'
|
||||||
|
@ -23,6 +23,7 @@ defaultproperties
|
|||||||
|
|
||||||
KnockdownPower=400
|
KnockdownPower=400
|
||||||
|
|
||||||
|
SelfDamageReductionValue=0.075f
|
||||||
//Perk
|
//Perk
|
||||||
ModifierPerkList(0)=class'KFPerk_Demolitionist'
|
ModifierPerkList(0)=class'KFPerk_Demolitionist'
|
||||||
WeaponDef=class'KFWeapDef_GravityImploder'
|
WeaponDef=class'KFWeapDef_GravityImploder'
|
||||||
|
@ -24,6 +24,8 @@ defaultproperties
|
|||||||
KnockdownPower = 100
|
KnockdownPower = 100
|
||||||
StumblePower = 200
|
StumblePower = 200
|
||||||
|
|
||||||
|
SelfDamageReductionValue = 0.25f;
|
||||||
|
|
||||||
//Perk
|
//Perk
|
||||||
ModifierPerkList(0) = class'KFPerk_Demolitionist'
|
ModifierPerkList(0) = class'KFPerk_Demolitionist'
|
||||||
|
|
||||||
|
@ -37,4 +37,7 @@ defaultproperties
|
|||||||
|
|
||||||
bCausesFracture=false
|
bCausesFracture=false
|
||||||
bCanPlayDeadHitEffects=false
|
bCanPlayDeadHitEffects=false
|
||||||
|
|
||||||
|
SelfDamageReductionValue = 0f;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -20,8 +20,8 @@ defaultproperties
|
|||||||
KDeathUpKick=1000
|
KDeathUpKick=1000
|
||||||
KDeathVel=300
|
KDeathVel=300
|
||||||
|
|
||||||
StunPower=160
|
StunPower=200
|
||||||
StumblePower=40
|
StumblePower=100
|
||||||
|
|
||||||
//Perk
|
//Perk
|
||||||
ModifierPerkList(0)=class'KFPerk_SWAT'
|
ModifierPerkList(0)=class'KFPerk_SWAT'
|
||||||
|
@ -50,7 +50,8 @@ defaultproperties
|
|||||||
ModifierPerkList(0) = class'KFPerk_Firebug'
|
ModifierPerkList(0) = class'KFPerk_Firebug'
|
||||||
ModifierPerkList(1)=class'KFPerk_Demolitionist'
|
ModifierPerkList(1)=class'KFPerk_Demolitionist'
|
||||||
|
|
||||||
|
SelfDamageReductionValue=0.1f
|
||||||
|
|
||||||
WeaponDef=class'KFWeapDef_HuskCannon'
|
WeaponDef=class'KFWeapDef_HuskCannon'
|
||||||
BurnDamageType = class'KFDT_HuskCannonDot'
|
BurnDamageType = class'KFDT_HuskCannonDot'
|
||||||
|
|
||||||
|
@ -24,6 +24,8 @@ defaultproperties
|
|||||||
KnockdownPower = 150
|
KnockdownPower = 150
|
||||||
StumblePower = 400
|
StumblePower = 400
|
||||||
|
|
||||||
|
SelfDamageReductionValue = 0.25f
|
||||||
|
|
||||||
//Perk
|
//Perk
|
||||||
ModifierPerkList(0) = class'KFPerk_Demolitionist'
|
ModifierPerkList(0) = class'KFPerk_Demolitionist'
|
||||||
|
|
||||||
|
@ -35,6 +35,8 @@ defaultproperties
|
|||||||
DoT_Interval=0.5
|
DoT_Interval=0.5
|
||||||
DoT_DamageScale=0.2
|
DoT_DamageScale=0.2
|
||||||
|
|
||||||
|
SelfDamageReductionValue=0.05f //0.25f
|
||||||
|
|
||||||
BurnPower=10
|
BurnPower=10
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -22,4 +22,6 @@ defaultproperties
|
|||||||
WeaponDef=class'KFWeapDef_ChiappaRhino'
|
WeaponDef=class'KFWeapDef_ChiappaRhino'
|
||||||
|
|
||||||
ModifierPerkList(0)=class'KFPerk_Gunslinger'
|
ModifierPerkList(0)=class'KFPerk_Gunslinger'
|
||||||
|
|
||||||
|
bAnyPerk = true
|
||||||
}
|
}
|
||||||
|
@ -21,6 +21,8 @@ defaultproperties
|
|||||||
DoT_Duration=2.0 //1.0
|
DoT_Duration=2.0 //1.0
|
||||||
DoT_Interval=0.5 //1.0
|
DoT_Interval=0.5 //1.0
|
||||||
DoT_DamageScale=0.1
|
DoT_DamageScale=0.1
|
||||||
|
|
||||||
|
SelfDamageReductionValue=0.1f
|
||||||
|
|
||||||
ModifierPerkList(0)=class'KFPerk_FieldMedic'
|
ModifierPerkList(0)=class'KFPerk_FieldMedic'
|
||||||
WeaponDef=class'KFWeapDef_HRG_Vampire'
|
WeaponDef=class'KFWeapDef_HRG_Vampire'
|
||||||
|
@ -36,6 +36,8 @@ defaultproperties
|
|||||||
DoT_Duration=4.0 //5.0 //1.7
|
DoT_Duration=4.0 //5.0 //1.7
|
||||||
DoT_Interval=1.0 //1.0 //0.4
|
DoT_Interval=1.0 //1.0 //0.4
|
||||||
DoT_DamageScale=0.1 //1.5
|
DoT_DamageScale=0.1 //1.5
|
||||||
|
|
||||||
|
SelfDamageReductionValue=0.1f
|
||||||
|
|
||||||
ModifierPerkList(0)=class'KFPerk_FieldMedic'
|
ModifierPerkList(0)=class'KFPerk_FieldMedic'
|
||||||
WeaponDef=class'KFWeapDef_Mine_Reconstructor'
|
WeaponDef=class'KFWeapDef_Mine_Reconstructor'
|
||||||
|
@ -1087,6 +1087,12 @@ function WaveStarted()
|
|||||||
}
|
}
|
||||||
|
|
||||||
`QALog("Player Name:" @ KFPC.PlayerReplicationInfo.PlayerName @ "Dosh" @ KFPC.PlayerReplicationInfo.Score, bLogScoring);
|
`QALog("Player Name:" @ KFPC.PlayerReplicationInfo.PlayerName @ "Dosh" @ KFPC.PlayerReplicationInfo.Score, bLogScoring);
|
||||||
|
|
||||||
|
if (KFPC.IsInState('Spectating') == false
|
||||||
|
&& KFPC.PlayerReplicationInfo.bOnlySpectator == false)
|
||||||
|
{
|
||||||
|
KFPC.GetPerk().SetWaveDefaults();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -22,7 +22,6 @@ enum ETurretState
|
|||||||
};
|
};
|
||||||
|
|
||||||
var SkeletalMeshComponent TurretMesh;
|
var SkeletalMeshComponent TurretMesh;
|
||||||
var Controller InstigatorController;
|
|
||||||
|
|
||||||
/** Speed to rise the drone in Z axis after thrown */
|
/** Speed to rise the drone in Z axis after thrown */
|
||||||
var const float DeployZSpeed;
|
var const float DeployZSpeed;
|
||||||
@ -164,6 +163,8 @@ simulated event PreBeginPlay()
|
|||||||
|
|
||||||
if (Role == ROLE_Authority)
|
if (Role == ROLE_Authority)
|
||||||
{
|
{
|
||||||
|
SetCollisionType(COLLIDE_NoCollision);
|
||||||
|
|
||||||
Weapon = Spawn(WeaponClass, self);
|
Weapon = Spawn(WeaponClass, self);
|
||||||
TurretWeapon = KFWeap_AutoTurretWeapon(Weapon);
|
TurretWeapon = KFWeap_AutoTurretWeapon(Weapon);
|
||||||
MyKFWeapon = TurretWeapon;
|
MyKFWeapon = TurretWeapon;
|
||||||
@ -390,6 +391,7 @@ simulated state Deploy
|
|||||||
{
|
{
|
||||||
local float CurrentHeight;
|
local float CurrentHeight;
|
||||||
local vector LocationNext;
|
local vector LocationNext;
|
||||||
|
local bool bTraceOk;
|
||||||
|
|
||||||
super.Tick(DeltaTime);
|
super.Tick(DeltaTime);
|
||||||
|
|
||||||
@ -404,7 +406,12 @@ simulated state Deploy
|
|||||||
LocationNext.z += Velocity.z * DeltaTime;
|
LocationNext.z += Velocity.z * DeltaTime;
|
||||||
|
|
||||||
// If we are going to collide stop
|
// If we are going to collide stop
|
||||||
if (!FastTrace(LocationNext, Location, vect(25,25,25)))
|
|
||||||
|
SetCollisionType(COLLIDE_CustomDefault);
|
||||||
|
bTraceOk = FastTrace(LocationNext, Location, vect(25,25,25));
|
||||||
|
SetCollisionType(COLLIDE_NoCollision);
|
||||||
|
|
||||||
|
if (!bTraceOk)
|
||||||
{
|
{
|
||||||
SetTurretState(ETS_TargetSearch);
|
SetTurretState(ETS_TargetSearch);
|
||||||
return;
|
return;
|
||||||
@ -507,7 +514,9 @@ simulated function bool TargetValidWithGeometry(Actor Target, vector MuzzleLoc,
|
|||||||
local bool bTraderFound;
|
local bool bTraderFound;
|
||||||
local int IteratorTrader;
|
local int IteratorTrader;
|
||||||
|
|
||||||
|
SetCollisionType(COLLIDE_CustomDefault);
|
||||||
HitActor = Trace(HitLocation, HitNormal, ReferencePosition, MuzzleLoc,,,,TRACEFLAG_Bullet);
|
HitActor = Trace(HitLocation, HitNormal, ReferencePosition, MuzzleLoc,,,,TRACEFLAG_Bullet);
|
||||||
|
SetCollisionType(COLLIDE_NoCollision);
|
||||||
|
|
||||||
if (HitActor == none || KFPawn_Monster(HitActor) == none)
|
if (HitActor == none || KFPawn_Monster(HitActor) == none)
|
||||||
{
|
{
|
||||||
@ -804,6 +813,8 @@ function CheckForTargets()
|
|||||||
|
|
||||||
TurretWeapon.GetMuzzleLocAndRot(MuzzleLoc, MuzzleRot);
|
TurretWeapon.GetMuzzleLocAndRot(MuzzleLoc, MuzzleRot);
|
||||||
|
|
||||||
|
SetCollisionType(COLLIDE_CustomDefault);
|
||||||
|
|
||||||
foreach CollidingActors(class'KFPawn_Monster', CurrentTarget, EffectiveRadius, Location, true,, HitInfo)
|
foreach CollidingActors(class'KFPawn_Monster', CurrentTarget, EffectiveRadius, Location, true,, HitInfo)
|
||||||
{
|
{
|
||||||
// Visible by local player or team
|
// Visible by local player or team
|
||||||
@ -834,6 +845,8 @@ function CheckForTargets()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SetCollisionType(COLLIDE_NoCollision);
|
||||||
|
|
||||||
if (EnemyTarget != none)
|
if (EnemyTarget != none)
|
||||||
{
|
{
|
||||||
SetTurretState(ETS_Combat);
|
SetTurretState(ETS_Combat);
|
||||||
@ -882,14 +895,18 @@ simulated function CheckEnemiesWithinExplosionRadius()
|
|||||||
|
|
||||||
//DrawDebugSphere(CheckExplosionLocation, ExplosiveRadius, 10, 255, 255, 0 );
|
//DrawDebugSphere(CheckExplosionLocation, ExplosiveRadius, 10, 255, 255, 0 );
|
||||||
|
|
||||||
|
SetCollisionType(COLLIDE_CustomDefault);
|
||||||
|
|
||||||
foreach CollidingActors(class'KFPawn_Monster', KFPM, ExplosiveRadius, CheckExplosionLocation, true,,)
|
foreach CollidingActors(class'KFPawn_Monster', KFPM, ExplosiveRadius, CheckExplosionLocation, true,,)
|
||||||
{
|
{
|
||||||
if(KFPM != none && KFPM.IsAliveAndWell())
|
if(KFPM != none && KFPM.IsAliveAndWell())
|
||||||
{
|
{
|
||||||
SetTurretState(ETS_Detonate);
|
SetTurretState(ETS_Detonate);
|
||||||
return;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SetCollisionType(COLLIDE_NoCollision);
|
||||||
}
|
}
|
||||||
|
|
||||||
simulated function StartIdleAnim()
|
simulated function StartIdleAnim()
|
||||||
@ -996,6 +1013,12 @@ simulated function UpdateRotation(float DeltaTime)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
NewRotation = Rotation;
|
||||||
|
NewRotation.Roll = 0.0f;
|
||||||
|
SetRotation(NewRotation);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
simulated function RotateByTime(rotator NewRotation, float Time)
|
simulated function RotateByTime(rotator NewRotation, float Time)
|
||||||
@ -1074,11 +1097,6 @@ simulated function bool CanInteractWithPawnGrapple()
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
simulated function bool CanInteractWithZoneVelocity()
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
function bool CanBeGrabbed(KFPawn GrabbingPawn, optional bool bIgnoreFalling, optional bool bAllowSameTeamGrab)
|
function bool CanBeGrabbed(KFPawn GrabbingPawn, optional bool bIgnoreFalling, optional bool bAllowSameTeamGrab)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
|
@ -22,7 +22,6 @@ enum ETurretState
|
|||||||
};
|
};
|
||||||
|
|
||||||
var SkeletalMeshComponent TurretMesh;
|
var SkeletalMeshComponent TurretMesh;
|
||||||
var Controller InstigatorController;
|
|
||||||
|
|
||||||
/** Speed to rise the drone in Z axis after thrown */
|
/** Speed to rise the drone in Z axis after thrown */
|
||||||
var const float DeployZSpeed;
|
var const float DeployZSpeed;
|
||||||
@ -170,6 +169,8 @@ simulated event PreBeginPlay()
|
|||||||
|
|
||||||
if (Role == ROLE_Authority)
|
if (Role == ROLE_Authority)
|
||||||
{
|
{
|
||||||
|
SetCollisionType(COLLIDE_NoCollision);
|
||||||
|
|
||||||
Weapon = Spawn(WeaponClass, self);
|
Weapon = Spawn(WeaponClass, self);
|
||||||
TurretWeapon = KFWeap_HRG_WarthogWeapon(Weapon);
|
TurretWeapon = KFWeap_HRG_WarthogWeapon(Weapon);
|
||||||
MyKFWeapon = TurretWeapon;
|
MyKFWeapon = TurretWeapon;
|
||||||
@ -396,6 +397,7 @@ simulated state Deploy
|
|||||||
{
|
{
|
||||||
local float CurrentHeight;
|
local float CurrentHeight;
|
||||||
local vector LocationNext;
|
local vector LocationNext;
|
||||||
|
local bool bTraceOk;
|
||||||
|
|
||||||
super.Tick(DeltaTime);
|
super.Tick(DeltaTime);
|
||||||
|
|
||||||
@ -410,7 +412,11 @@ simulated state Deploy
|
|||||||
LocationNext.z += Velocity.z * DeltaTime;
|
LocationNext.z += Velocity.z * DeltaTime;
|
||||||
|
|
||||||
// If we are going to collide stop
|
// If we are going to collide stop
|
||||||
if (!FastTrace(LocationNext, Location, vect(25,25,25)))
|
SetCollisionType(COLLIDE_CustomDefault);
|
||||||
|
bTraceOk = FastTrace(LocationNext, Location, vect(25,25,25));
|
||||||
|
SetCollisionType(COLLIDE_NoCollision);
|
||||||
|
|
||||||
|
if (!bTraceOk)
|
||||||
{
|
{
|
||||||
SetTurretState(ETS_TargetSearch);
|
SetTurretState(ETS_TargetSearch);
|
||||||
return;
|
return;
|
||||||
@ -511,7 +517,9 @@ simulated function bool TargetValidWithGeometry(Actor Target, vector MuzzleLoc,
|
|||||||
local bool bTraderFound;
|
local bool bTraderFound;
|
||||||
local int IteratorTrader;
|
local int IteratorTrader;
|
||||||
|
|
||||||
|
SetCollisionType(COLLIDE_CustomDefault);
|
||||||
HitActor = Trace(HitLocation, HitNormal, ReferencePosition, MuzzleLoc,,,,TRACEFLAG_Bullet);
|
HitActor = Trace(HitLocation, HitNormal, ReferencePosition, MuzzleLoc,,,,TRACEFLAG_Bullet);
|
||||||
|
SetCollisionType(COLLIDE_NoCollision);
|
||||||
|
|
||||||
if (HitActor == none || KFPawn_Monster(HitActor) == none)
|
if (HitActor == none || KFPawn_Monster(HitActor) == none)
|
||||||
{
|
{
|
||||||
@ -909,6 +917,8 @@ function CheckForTargets()
|
|||||||
|
|
||||||
TurretWeapon.GetMuzzleLocAndRot(MuzzleLoc, MuzzleRot);
|
TurretWeapon.GetMuzzleLocAndRot(MuzzleLoc, MuzzleRot);
|
||||||
|
|
||||||
|
SetCollisionType(COLLIDE_CustomDefault);
|
||||||
|
|
||||||
foreach CollidingActors(class'KFPawn_Monster', CurrentTarget, EffectiveRadius, Location, true,, HitInfo)
|
foreach CollidingActors(class'KFPawn_Monster', CurrentTarget, EffectiveRadius, Location, true,, HitInfo)
|
||||||
{
|
{
|
||||||
// Visible by local player or team
|
// Visible by local player or team
|
||||||
@ -939,6 +949,8 @@ function CheckForTargets()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SetCollisionType(COLLIDE_NoCollision);
|
||||||
|
|
||||||
if (EnemyTarget != none)
|
if (EnemyTarget != none)
|
||||||
{
|
{
|
||||||
SetTurretState(ETS_Combat);
|
SetTurretState(ETS_Combat);
|
||||||
@ -987,14 +999,18 @@ simulated function CheckEnemiesWithinExplosionRadius()
|
|||||||
|
|
||||||
//DrawDebugSphere(CheckExplosionLocation, ExplosiveRadius, 10, 255, 255, 0 );
|
//DrawDebugSphere(CheckExplosionLocation, ExplosiveRadius, 10, 255, 255, 0 );
|
||||||
|
|
||||||
|
SetCollisionType(COLLIDE_CustomDefault);
|
||||||
|
|
||||||
foreach CollidingActors(class'KFPawn_Monster', KFPM, ExplosiveRadius, CheckExplosionLocation, true,,)
|
foreach CollidingActors(class'KFPawn_Monster', KFPM, ExplosiveRadius, CheckExplosionLocation, true,,)
|
||||||
{
|
{
|
||||||
if(KFPM != none && KFPM.IsAliveAndWell())
|
if(KFPM != none && KFPM.IsAliveAndWell())
|
||||||
{
|
{
|
||||||
SetTurretState(ETS_Detonate);
|
SetTurretState(ETS_Detonate);
|
||||||
return;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SetCollisionType(COLLIDE_NoCollision);
|
||||||
}
|
}
|
||||||
|
|
||||||
simulated function StartIdleAnim()
|
simulated function StartIdleAnim()
|
||||||
@ -1101,6 +1117,12 @@ simulated function UpdateRotation(float DeltaTime)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
NewRotation = Rotation;
|
||||||
|
NewRotation.Roll = 0.0f;
|
||||||
|
SetRotation(NewRotation);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
simulated function RotateByTime(rotator NewRotation, float Time)
|
simulated function RotateByTime(rotator NewRotation, float Time)
|
||||||
@ -1179,11 +1201,6 @@ simulated function bool CanInteractWithPawnGrapple()
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
simulated function bool CanInteractWithZoneVelocity()
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
function bool CanBeGrabbed(KFPawn GrabbingPawn, optional bool bIgnoreFalling, optional bool bAllowSameTeamGrab)
|
function bool CanBeGrabbed(KFPawn GrabbingPawn, optional bool bIgnoreFalling, optional bool bAllowSameTeamGrab)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
|
@ -580,6 +580,17 @@ simulated function string GetIconPath()
|
|||||||
return "ZED_Patriarch_UI.ZED-VS_Icon_Boss";
|
return "ZED_Patriarch_UI.ZED-VS_Icon_Boss";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
simulated event EndSpecialMove(optional ESpecialMove SpecialMoveToEnd, optional bool bForceNetSync)
|
||||||
|
{
|
||||||
|
// Wait for the anim to finish
|
||||||
|
if ( SpecialMove == SM_RecoverFromRagdoll && SpecialMoveToEnd != SM_RecoverFromRagdoll)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Super.EndSpecialMove(SpecialMoveToEnd, bForceNetSync);
|
||||||
|
}
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
LocalizationKey=KFPawn_ZedBloatKing
|
LocalizationKey=KFPawn_ZedBloatKing
|
||||||
|
@ -230,4 +230,6 @@ defaultproperties
|
|||||||
|
|
||||||
bCanRage=true
|
bCanRage=true
|
||||||
EnragedSoundEvent=AkEvent'WW_ZED_Clot_Alpha.Play_Alpha_Clot_Special_Enrage'
|
EnragedSoundEvent=AkEvent'WW_ZED_Clot_Alpha.Play_Alpha_Clot_Special_Enrage'
|
||||||
|
|
||||||
|
ElitePawnClass.Empty
|
||||||
}
|
}
|
||||||
|
@ -126,4 +126,6 @@ defaultproperties
|
|||||||
MonsterArchPath="ZED_ARCH.ZED_CrawlerKing_Archetype"
|
MonsterArchPath="ZED_ARCH.ZED_CrawlerKing_Archetype"
|
||||||
ControllerClass=class'KFAIController_ZedCrawlerKing'
|
ControllerClass=class'KFAIController_ZedCrawlerKing'
|
||||||
DifficultySettings=class'KFDifficulty_CrawlerKing'
|
DifficultySettings=class'KFDifficulty_CrawlerKing'
|
||||||
|
|
||||||
|
ElitePawnClass.Empty
|
||||||
}
|
}
|
@ -8,6 +8,27 @@
|
|||||||
//=============================================================================
|
//=============================================================================
|
||||||
class KFPawn_ZedGorefastDualBlade extends KFPawn_ZedGorefast;
|
class KFPawn_ZedGorefastDualBlade extends KFPawn_ZedGorefast;
|
||||||
|
|
||||||
|
var protected AKEvent StopWhirlwindEvent;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Whirlwind attack can be parried but the initial sfx is not stopped.
|
||||||
|
As we don't have an event to stop it, it has been assigned to the
|
||||||
|
'hips' bone so it can be stopped.
|
||||||
|
*/
|
||||||
|
function bool NotifyAttackParried(Pawn InstigatedBy, byte InParryStrength)
|
||||||
|
{
|
||||||
|
local bool Result;
|
||||||
|
|
||||||
|
Result = Super.NotifyAttackParried(InstigatedBy, InParryStrength);
|
||||||
|
|
||||||
|
if (StopWhirlwindEvent != none)
|
||||||
|
{
|
||||||
|
PlayAkEvent( StopWhirlwindEvent );
|
||||||
|
}
|
||||||
|
|
||||||
|
return Result;
|
||||||
|
}
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
LocalizationKey=KFPawn_ZedGorefastDualBlade
|
LocalizationKey=KFPawn_ZedGorefastDualBlade
|
||||||
@ -106,6 +127,7 @@ defaultproperties
|
|||||||
// Block Settings
|
// Block Settings
|
||||||
MinBlockFOV=0.1f
|
MinBlockFOV=0.1f
|
||||||
|
|
||||||
|
StopWhirlwindEvent = AkEvent'WW_ZED_GoreFast_2.Stop_Gorefast_2_Whirl';
|
||||||
|
|
||||||
|
ElitePawnClass.Empty
|
||||||
}
|
}
|
@ -1079,7 +1079,7 @@ function CallOutCloakingExpired()
|
|||||||
/** Handle cloaking materials */
|
/** Handle cloaking materials */
|
||||||
simulated function UpdateGameplayMICParams()
|
simulated function UpdateGameplayMICParams()
|
||||||
{
|
{
|
||||||
local int i;
|
local int i, NumRepeats;
|
||||||
local bool bIsSpotted;
|
local bool bIsSpotted;
|
||||||
local bool bWasCloaked;
|
local bool bWasCloaked;
|
||||||
local KFCharacterInfo_Monster MonsterInfo;
|
local KFCharacterInfo_Monster MonsterInfo;
|
||||||
@ -1096,7 +1096,8 @@ simulated function UpdateGameplayMICParams()
|
|||||||
bIsSpotted = (bIsCloakingSpottedByLP || bIsCloakingSpottedByTeam);
|
bIsSpotted = (bIsCloakingSpottedByLP || bIsCloakingSpottedByTeam);
|
||||||
if ((!bIsCloaking || IsImpaired()) && CharacterMICs[0].Parent != MonsterInfo.Skins[0])
|
if ((!bIsCloaking || IsImpaired()) && CharacterMICs[0].Parent != MonsterInfo.Skins[0])
|
||||||
{
|
{
|
||||||
for (i = 0; i < MonsterInfo.Skins.Length; ++i)
|
NumRepeats = Min(CharacterMICs.Length, MonsterInfo.Skins.Length);
|
||||||
|
for (i = 0; i < NumRepeats; ++i)
|
||||||
{
|
{
|
||||||
bWasCloaked = bWasCloaked ||
|
bWasCloaked = bWasCloaked ||
|
||||||
(CharacterMICs[i].Parent == MonsterInfo.CloakedSkins[i]) ||
|
(CharacterMICs[i].Parent == MonsterInfo.CloakedSkins[i]) ||
|
||||||
@ -1126,6 +1127,8 @@ simulated function UpdateGameplayMICParams()
|
|||||||
}
|
}
|
||||||
else if (bIsCloaking && bIsSpotted && CharacterMICs[0].Parent != MonsterInfo.SpottedSkins[0])
|
else if (bIsCloaking && bIsSpotted && CharacterMICs[0].Parent != MonsterInfo.SpottedSkins[0])
|
||||||
{
|
{
|
||||||
|
NumRepeats = Min(CharacterMICs.Length, MonsterInfo.SpottedSkins.Length);
|
||||||
|
|
||||||
for (i = 0; i < MonsterInfo.SpottedSkins.Length; ++i)
|
for (i = 0; i < MonsterInfo.SpottedSkins.Length; ++i)
|
||||||
{
|
{
|
||||||
CharacterMICs[i].SetParent(MonsterInfo.SpottedSkins[i]);
|
CharacterMICs[i].SetParent(MonsterInfo.SpottedSkins[i]);
|
||||||
@ -1148,6 +1151,8 @@ simulated function UpdateGameplayMICParams()
|
|||||||
}
|
}
|
||||||
else if (bIsCloaking && !bIsSpotted && CharacterMICs[0].Parent != MonsterInfo.CloakedSkins[0])
|
else if (bIsCloaking && !bIsSpotted && CharacterMICs[0].Parent != MonsterInfo.CloakedSkins[0])
|
||||||
{
|
{
|
||||||
|
NumRepeats = Min(CharacterMICs.Length, MonsterInfo.CloakedSkins.Length);
|
||||||
|
|
||||||
for (i = 0; i < MonsterInfo.CloakedSkins.Length; ++i)
|
for (i = 0; i < MonsterInfo.CloakedSkins.Length; ++i)
|
||||||
{
|
{
|
||||||
CharacterMICs[i].SetParent(MonsterInfo.CloakedSkins[i]);
|
CharacterMICs[i].SetParent(MonsterInfo.CloakedSkins[i]);
|
||||||
|
@ -35,23 +35,10 @@ function CausePainTo(Actor Other)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
simulated event Touch( Actor Other, PrimitiveComponent OtherComp, vector HitLocation, vector HitNormal )
|
|
||||||
{
|
|
||||||
local KFPawn KFP;
|
|
||||||
|
|
||||||
KFP = KFPawn(Other);
|
|
||||||
|
|
||||||
if (KFP != none && KFP.CanInteractWithZoneVelocity() == false)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Super.Touch(Other, OtherComp, HitLocation, HitNormal);
|
|
||||||
}
|
|
||||||
|
|
||||||
simulated event UnTouch(Actor Other)
|
simulated event UnTouch(Actor Other)
|
||||||
{
|
{
|
||||||
local int RecentHitIdx;
|
local int RecentHitIdx;
|
||||||
|
|
||||||
super.UnTouch(Other);
|
super.UnTouch(Other);
|
||||||
|
|
||||||
RecentHitIdx = RecentUntouchEvents.Find('HitActor', Other);
|
RecentHitIdx = RecentUntouchEvents.Find('HitActor', Other);
|
||||||
|
89
KFGameContent/Classes/KFPickupFactory_Cash.uc
Normal file
89
KFGameContent/Classes/KFPickupFactory_Cash.uc
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
//=============================================================================
|
||||||
|
// KFPickupFactory_Cash
|
||||||
|
//=============================================================================
|
||||||
|
// Pickup that gives some ammo for all weapons in inventory
|
||||||
|
//=============================================================================
|
||||||
|
// Killing Floor 2
|
||||||
|
// Copyright (C) 2023 Tripwire Interactive LLC
|
||||||
|
//=============================================================================
|
||||||
|
|
||||||
|
class KFPickupFactory_Cash extends KFPickupFactory;
|
||||||
|
|
||||||
|
/** Sound to play when picºng up cash */
|
||||||
|
var() AkEvent CashPickupSound;
|
||||||
|
var() int CashAmount;
|
||||||
|
var() StaticMeshComponent CashMeshComponent;
|
||||||
|
|
||||||
|
simulated function InitializePickup()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Bypass PickupFactory implementation. This class doesn't use InventoryType. */
|
||||||
|
simulated event SetInitialState()
|
||||||
|
{
|
||||||
|
super.SetInitialState();
|
||||||
|
|
||||||
|
bScriptInitialized = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** give pickup to player */
|
||||||
|
function GiveTo( Pawn P )
|
||||||
|
{
|
||||||
|
local KFPawn_Human KFPH;
|
||||||
|
local KFPlayerReplicationInfo KFPRI;
|
||||||
|
|
||||||
|
if ( P.PlayerReplicationInfo != none )
|
||||||
|
{
|
||||||
|
KFPH = KFPawn_Human(P);
|
||||||
|
KFPRI = KFPlayerReplicationInfo(P.PlayerReplicationInfo);
|
||||||
|
|
||||||
|
// @todo (?): for now, play "catch dosh" dialog whenever you pick some up
|
||||||
|
if( KFPRI != none && KFPH != none )
|
||||||
|
{
|
||||||
|
KFPH.UpdateDoshCaught( CashAmount, none );
|
||||||
|
}
|
||||||
|
|
||||||
|
if( KFPRI != none )
|
||||||
|
{
|
||||||
|
KFPRI.AddDosh( CashAmount );
|
||||||
|
`AnalyticsLog(("dosh_picked_up", KFPRI, "#"$CashAmount));
|
||||||
|
}
|
||||||
|
|
||||||
|
bForceNetUpdate = true;
|
||||||
|
P.PlaySoundBase(CashPickupSound);
|
||||||
|
}
|
||||||
|
|
||||||
|
SetPickupHidden();
|
||||||
|
GotoState('Disabled');
|
||||||
|
SetCollision(false, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
function bool CurrentPickupIsCash()
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
defaultproperties
|
||||||
|
{
|
||||||
|
CashPickupSound=AkEvent'WW_UI_PlayerCharacter.Play_UI_Pickup_Ammo'
|
||||||
|
|
||||||
|
Begin Object Class=StaticMeshComponent Name=MyStaticMeshComponent
|
||||||
|
StaticMesh=StaticMesh'ENV_Horzine_MESH.crates.ENV_Horzine_Equiptment_Crate_02'
|
||||||
|
bCastDynamicShadow=FALSE
|
||||||
|
CollideActors=FALSE
|
||||||
|
End Object
|
||||||
|
|
||||||
|
CashMeshComponent=MyStaticMeshComponent
|
||||||
|
PickupMesh=MyStaticMeshComponent
|
||||||
|
Components.Add(MyStaticMeshComponent)
|
||||||
|
|
||||||
|
Begin Object NAME=CollisionCylinder
|
||||||
|
CollisionRadius=100.f
|
||||||
|
CollisionHeight=50.f
|
||||||
|
End Object
|
||||||
|
|
||||||
|
bNotBased=TRUE
|
||||||
|
bEnabledAtStart=true
|
||||||
|
bKismetDriven=true
|
||||||
|
}
|
@ -317,6 +317,28 @@ simulated event Touch( Actor Other, PrimitiveComponent OtherComp, vector HitLoca
|
|||||||
{
|
{
|
||||||
local Pawn P;
|
local Pawn P;
|
||||||
|
|
||||||
|
// If touched by ballistic bouncer, explode
|
||||||
|
if (KFProj_HRG_BallisticBouncer(Other) != none)
|
||||||
|
{
|
||||||
|
// Make sure not touching through wall
|
||||||
|
if (`TimeSince(CreationTime) >= 0.1f && FastTrace( Other.Location, Location,, true ))
|
||||||
|
{
|
||||||
|
TriggerExplosion( Location, vect(0,0,1), KFProj_HRG_BallisticBouncer(Other) );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// If touched by mine reconstructor, explode
|
||||||
|
if (KFProj_Mine_Reconstructor(Other) != none)
|
||||||
|
{
|
||||||
|
// Make sure not touching through wall
|
||||||
|
if (`TimeSince(CreationTime) >= 0.1f && FastTrace( Other.Location, Location,, true ))
|
||||||
|
{
|
||||||
|
TriggerExplosion( Location, vect(0,0,1), KFProj_Mine_Reconstructor(Other) );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// If touched by an enemy pawn, explode
|
// If touched by an enemy pawn, explode
|
||||||
P = Pawn( Other );
|
P = Pawn( Other );
|
||||||
if( P != None )
|
if( P != None )
|
||||||
|
@ -36,7 +36,7 @@ defaultproperties
|
|||||||
ProjFlightTemplate=ParticleSystem'WEP_Frost_Shotgun_Axe_EMIT.FX_FrostFang_Tracer_01'
|
ProjFlightTemplate=ParticleSystem'WEP_Frost_Shotgun_Axe_EMIT.FX_FrostFang_Tracer_01'
|
||||||
ProjFlightTemplateZedTime=ParticleSystem'WEP_Frost_Shotgun_Axe_EMIT.FX_FrostFang_Tracer_Zedtime_01'
|
ProjFlightTemplateZedTime=ParticleSystem'WEP_Frost_Shotgun_Axe_EMIT.FX_FrostFang_Tracer_Zedtime_01'
|
||||||
ImpactEffects=KFImpactEffectInfo'WEP_Frost_Shotgun_Axe_ARCH.WEP_FrostFang_Projectile_Impact'
|
ImpactEffects=KFImpactEffectInfo'WEP_Frost_Shotgun_Axe_ARCH.WEP_FrostFang_Projectile_Impact'
|
||||||
oFrozenSound=AkEvent'WW_WEP_SA_CompoundBow.Play_Arrow_Impact_Cryo'
|
oFrozenSound=AkEvent'WW_WEP_FrostFang.Play_FrostFang_Frozen_Impact'
|
||||||
AssociatedPerkClass=class'KFPerk_Support'
|
AssociatedPerkClass=class'KFPerk_Support'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -45,4 +45,13 @@ defaultproperties
|
|||||||
|
|
||||||
AmbientSoundPlayEvent=none
|
AmbientSoundPlayEvent=none
|
||||||
AmbientSoundStopEvent=none
|
AmbientSoundStopEvent=none
|
||||||
|
|
||||||
|
|
||||||
|
bWaitForEffects=false
|
||||||
|
ProjEffectsFadeOutDuration=0.25
|
||||||
|
bSyncToOriginalLocation=true
|
||||||
|
bSyncToThirdPersonMuzzleLocation=true
|
||||||
|
bRotationFollowsVelocity=true
|
||||||
|
bNoReplicationToInstigator=false
|
||||||
|
bUseClientSideHitDetection=true
|
||||||
}
|
}
|
@ -398,6 +398,13 @@ defaultproperties
|
|||||||
DampenFactorParallel=0
|
DampenFactorParallel=0
|
||||||
WallHitDampenFactor=0.5
|
WallHitDampenFactor=0.5
|
||||||
WallHitDampenFactorParallel=0.5
|
WallHitDampenFactorParallel=0.5
|
||||||
|
|
||||||
|
ExtraLineCollisionOffsets.Add((Y=-30))
|
||||||
|
ExtraLineCollisionOffsets.Add((Y=30))
|
||||||
|
ExtraLineCollisionOffsets.Add((Z=-30))
|
||||||
|
ExtraLineCollisionOffsets.Add((Z=30))
|
||||||
|
// Since we're still using an extent cylinder, we need a line at 0
|
||||||
|
ExtraLineCollisionOffsets.Add(())
|
||||||
|
|
||||||
bNetTemporary=False
|
bNetTemporary=False
|
||||||
NetPriority=5
|
NetPriority=5
|
||||||
|
@ -10,6 +10,36 @@
|
|||||||
|
|
||||||
class KFProj_CaulkNBurn_GroundFire extends KFProj_GroundFire;
|
class KFProj_CaulkNBurn_GroundFire extends KFProj_GroundFire;
|
||||||
|
|
||||||
|
simulated protected function PrepareExplosionActor(GameExplosionActor GEA)
|
||||||
|
{
|
||||||
|
local KFExplosionActorLingering KFE_GroundFire;
|
||||||
|
local KFPlayerController KFPC;
|
||||||
|
local KFPerk InstigatorPerk;
|
||||||
|
|
||||||
|
super.PrepareExplosionActor(GEA);
|
||||||
|
|
||||||
|
KFE_GroundFire = KFExplosionActorLingering( GEA );
|
||||||
|
if( KFE_GroundFire != none )
|
||||||
|
{
|
||||||
|
if (Instigator != none && Instigator.Controller != none)
|
||||||
|
{
|
||||||
|
KFPC = KFPlayerController(Instigator.Controller);
|
||||||
|
if (KFPC != none)
|
||||||
|
{
|
||||||
|
InstigatorPerk = KFPC.GetPerk();
|
||||||
|
if (InstigatorPerk != none && InstigatorPerk.IsRangeActive())
|
||||||
|
{
|
||||||
|
KFE_GroundFire.MaxTime = KFE_GroundFire.default.MaxTime * InstigatorPerk.GetRangeGroundFireDurationMod();
|
||||||
|
KFE_GroundFire.FadeOutTime = KFE_GroundFire.MaxTime * 0.25f;
|
||||||
|
|
||||||
|
KFE_GroundFire.LoopingParticleEffect=ParticleSystem'WEP_3P_Molotov_EMIT.FX_Molotov_ground_fire_01';
|
||||||
|
//KFE_GroundFire.LoopingParticleEffect=ParticleSystem'WEP_Flamethrower_EMIT.FX_Ground_fire_Splash_01';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
bWarnAIWhenFired=true
|
bWarnAIWhenFired=true
|
||||||
|
@ -10,6 +10,36 @@
|
|||||||
|
|
||||||
class KFProj_FlameThrower_GroundFire extends KFProj_GroundFire;
|
class KFProj_FlameThrower_GroundFire extends KFProj_GroundFire;
|
||||||
|
|
||||||
|
simulated protected function PrepareExplosionActor(GameExplosionActor GEA)
|
||||||
|
{
|
||||||
|
local KFExplosionActorLingering KFE_GroundFire;
|
||||||
|
local KFPlayerController KFPC;
|
||||||
|
local KFPerk InstigatorPerk;
|
||||||
|
|
||||||
|
super.PrepareExplosionActor(GEA);
|
||||||
|
|
||||||
|
KFE_GroundFire = KFExplosionActorLingering( GEA );
|
||||||
|
if( KFE_GroundFire != none )
|
||||||
|
{
|
||||||
|
if (Instigator != none && Instigator.Controller != none)
|
||||||
|
{
|
||||||
|
KFPC = KFPlayerController(Instigator.Controller);
|
||||||
|
if (KFPC != none)
|
||||||
|
{
|
||||||
|
InstigatorPerk = KFPC.GetPerk();
|
||||||
|
if (InstigatorPerk != none && InstigatorPerk.IsRangeActive())
|
||||||
|
{
|
||||||
|
KFE_GroundFire.MaxTime = KFE_GroundFire.default.MaxTime * InstigatorPerk.GetRangeGroundFireDurationMod();
|
||||||
|
KFE_GroundFire.FadeOutTime = KFE_GroundFire.MaxTime * 0.25f;
|
||||||
|
|
||||||
|
KFE_GroundFire.LoopingParticleEffect=ParticleSystem'WEP_3P_Molotov_EMIT.FX_Molotov_ground_fire_01';
|
||||||
|
//KFE_GroundFire.LoopingParticleEffect=ParticleSystem'WEP_Flamethrower_EMIT.FX_Ground_fire_Splash_01';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
bWarnAIWhenFired=true
|
bWarnAIWhenFired=true
|
||||||
|
@ -54,7 +54,12 @@ simulated state VortexState
|
|||||||
{
|
{
|
||||||
foreach CollidingActors(class'Actor', Victim, VortexRadius, Location, true,, HitInfo)
|
foreach CollidingActors(class'Actor', Victim, VortexRadius, Location, true,, HitInfo)
|
||||||
{
|
{
|
||||||
if (KFPawn_Human(Victim) == none && Victim.CollisionComponent != none && !Victim.bWorldGeometry)
|
if (KFPawn_Human(Victim) == none
|
||||||
|
&& Victim.CollisionComponent != none
|
||||||
|
&& !Victim.bWorldGeometry
|
||||||
|
&& KFPawn_Scripted(Victim) == none
|
||||||
|
&& KFPawn_AutoTurret(Victim) == none
|
||||||
|
&& KFPawn_HRG_Warthog(Victim) == none)
|
||||||
{
|
{
|
||||||
Victim.CollisionComponent.AddRadialImpulse(Location, VortexRadius, VortexImpulseStrength, RIF_Constant, true);
|
Victim.CollisionComponent.AddRadialImpulse(Location, VortexRadius, VortexImpulseStrength, RIF_Constant, true);
|
||||||
}
|
}
|
||||||
|
@ -316,6 +316,9 @@ simulated state ImplodingState
|
|||||||
&& Victim != Instigator
|
&& Victim != Instigator
|
||||||
&& KFP != None
|
&& KFP != None
|
||||||
&& KFPawn_Human(Victim) == none // No player's character
|
&& KFPawn_Human(Victim) == none // No player's character
|
||||||
|
&& KFPawn_Scripted(Victim) == none
|
||||||
|
&& KFPawn_AutoTurret(Victim) == none
|
||||||
|
&& KFPawn_HRG_Warthog(Victim) == none
|
||||||
&& (KFPM == none || VortexTime < VortexDuration*KFPM.GetVortexAttractionModifier()) )
|
&& (KFPM == none || VortexTime < VortexDuration*KFPM.GetVortexAttractionModifier()) )
|
||||||
{
|
{
|
||||||
KFP.GetBoundingCylinder(ColRadius, ColHeight);
|
KFP.GetBoundingCylinder(ColRadius, ColHeight);
|
||||||
|
@ -8,6 +8,36 @@
|
|||||||
//=============================================================================
|
//=============================================================================
|
||||||
class KFProj_MicrowaveGun_GroundFire extends KFProj_GroundFire;
|
class KFProj_MicrowaveGun_GroundFire extends KFProj_GroundFire;
|
||||||
|
|
||||||
|
simulated protected function PrepareExplosionActor(GameExplosionActor GEA)
|
||||||
|
{
|
||||||
|
local KFExplosionActorLingering KFE_GroundFire;
|
||||||
|
local KFPlayerController KFPC;
|
||||||
|
local KFPerk InstigatorPerk;
|
||||||
|
|
||||||
|
super.PrepareExplosionActor(GEA);
|
||||||
|
|
||||||
|
KFE_GroundFire = KFExplosionActorLingering( GEA );
|
||||||
|
if( KFE_GroundFire != none )
|
||||||
|
{
|
||||||
|
if (Instigator != none && Instigator.Controller != none)
|
||||||
|
{
|
||||||
|
KFPC = KFPlayerController(Instigator.Controller);
|
||||||
|
if (KFPC != none)
|
||||||
|
{
|
||||||
|
InstigatorPerk = KFPC.GetPerk();
|
||||||
|
if (InstigatorPerk != none && InstigatorPerk.IsRangeActive())
|
||||||
|
{
|
||||||
|
KFE_GroundFire.MaxTime = KFE_GroundFire.default.MaxTime * InstigatorPerk.GetRangeGroundFireDurationMod();
|
||||||
|
KFE_GroundFire.FadeOutTime = KFE_GroundFire.MaxTime * 0.25f;
|
||||||
|
|
||||||
|
KFE_GroundFire.LoopingParticleEffect=ParticleSystem'WEP_3P_Molotov_EMIT.FX_Molotov_ground_fire_01';
|
||||||
|
//KFE_GroundFire.LoopingParticleEffect=ParticleSystem'WEP_Flamethrower_EMIT.FX_Ground_fire_Splash_01';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
bWarnAIWhenFired=true
|
bWarnAIWhenFired=true
|
||||||
|
@ -337,11 +337,18 @@ simulated function Stick( vector StuckLocation, vector StuckNormal )
|
|||||||
local KFProj_Mine_Reconstructor PukeMine;
|
local KFProj_Mine_Reconstructor PukeMine;
|
||||||
local rotator RandRot;
|
local rotator RandRot;
|
||||||
|
|
||||||
if( Role != ROLE_Authority ) return;
|
if( Role != ROLE_Authority )
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
//we added a scapegoat that fixes the problem of hitwall not calling always in client, so we need to check it in case it comes
|
//we added a scapegoat that fixes the problem of hitwall not calling always in client, so we need to check it in case it comes
|
||||||
//to not call it twice
|
//to not call it twice
|
||||||
if(bSticked == true) return;
|
if(bSticked == true)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
RotationRate = rot(0,0,0);
|
RotationRate = rot(0,0,0);
|
||||||
|
|
||||||
// Modify the collision so it can be detonated by the player
|
// Modify the collision so it can be detonated by the player
|
||||||
@ -351,7 +358,6 @@ simulated function Stick( vector StuckLocation, vector StuckNormal )
|
|||||||
bCollideComplex = false;
|
bCollideComplex = false;
|
||||||
bBounce = false;
|
bBounce = false;
|
||||||
SetPhysics( PHYS_None );
|
SetPhysics( PHYS_None );
|
||||||
SetOwner( none );
|
|
||||||
|
|
||||||
// Optimize for network
|
// Optimize for network
|
||||||
NetUpdateFrequency = 10;
|
NetUpdateFrequency = 10;
|
||||||
@ -410,7 +416,11 @@ reliable client function StickInClient(vector StuckLocation, vector StuckNormal)
|
|||||||
|
|
||||||
//we added a scapegoat that fixes the problem of hitwall not calling always in client, so we need to check it in case it comes
|
//we added a scapegoat that fixes the problem of hitwall not calling always in client, so we need to check it in case it comes
|
||||||
//to not call it twice
|
//to not call it twice
|
||||||
if(bSticked == true) return;
|
if(bSticked == true)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
RotationRate = rot(0,0,0);
|
RotationRate = rot(0,0,0);
|
||||||
SetLocation(StuckLocation);
|
SetLocation(StuckLocation);
|
||||||
// Modify the collision so it can be detonated by the player
|
// Modify the collision so it can be detonated by the player
|
||||||
@ -419,7 +429,6 @@ reliable client function StickInClient(vector StuckLocation, vector StuckNormal)
|
|||||||
CylinderComponent.SetActorCollision( true, false );
|
CylinderComponent.SetActorCollision( true, false );
|
||||||
bCollideComplex = false;
|
bCollideComplex = false;
|
||||||
bBounce = false;
|
bBounce = false;
|
||||||
SetOwner( none );
|
|
||||||
|
|
||||||
// Optimize for network
|
// Optimize for network
|
||||||
NetUpdateFrequency = 0.25f;
|
NetUpdateFrequency = 0.25f;
|
||||||
@ -541,7 +550,6 @@ simulated function bool ValidTouch( Pawn Other )
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
||||||
if(bCantDetonateOnFullHP)
|
if(bCantDetonateOnFullHP)
|
||||||
{
|
{
|
||||||
if(Other.GetTeamNum() == TeamNum && Other.Health >= Other.HealthMax )
|
if(Other.GetTeamNum() == TeamNum && Other.Health >= Other.HealthMax )
|
||||||
@ -558,6 +566,7 @@ simulated function bool ValidTouch( Pawn Other )
|
|||||||
// Make sure not touching through wall
|
// Make sure not touching through wall
|
||||||
return FastTrace( Other.Location, Location,, true );
|
return FastTrace( Other.Location, Location,, true );
|
||||||
}
|
}
|
||||||
|
|
||||||
return FastTrace( Other.Location, Location,, true );
|
return FastTrace( Other.Location, Location,, true );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -566,6 +575,35 @@ simulated event Touch( Actor Other, PrimitiveComponent OtherComp, vector HitLoca
|
|||||||
{
|
{
|
||||||
local Pawn P;
|
local Pawn P;
|
||||||
|
|
||||||
|
// If touched by ballistic bouncer, explode
|
||||||
|
if (KFProj_HRG_BallisticBouncer(Other) != none
|
||||||
|
|| KFProj_BloatPukeMine(Other) != none)
|
||||||
|
{
|
||||||
|
if (KFProj_BloatPukeMine(Other) != none)
|
||||||
|
{
|
||||||
|
// Force Touch, as by itself doesn't detect the Mine..
|
||||||
|
KFProj_BloatPukeMine(Other).Touch(self, none, HitLocation, HitNormal);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (`TimeSince(CreationTime) >= 0.1f)
|
||||||
|
{
|
||||||
|
if ( WorldInfo.NetMode != NM_DedicatedServer )
|
||||||
|
{
|
||||||
|
// Use ImpactEffectManager to handle material based impacts
|
||||||
|
`ImpactEffectManager.PlayImpactEffects(HitLocation, Instigator,, ImpactEffects);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ExplosionTemplate != None && Role == ROLE_Authority)
|
||||||
|
{
|
||||||
|
TriggerExplosion(HitLocation, HitNormal, Other);
|
||||||
|
}
|
||||||
|
|
||||||
|
Shutdown(); // cleanup/destroy projectile
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// If touched by an enemy pawn, explode
|
// If touched by an enemy pawn, explode
|
||||||
P = Pawn( Other );
|
P = Pawn( Other );
|
||||||
if( P != None )
|
if( P != None )
|
||||||
@ -886,9 +924,9 @@ defaultproperties
|
|||||||
|
|
||||||
// Camera Shake
|
// Camera Shake
|
||||||
CamShake=CameraShake'WEP_Mine_Reconstructor_Arch.Camera_Shake'
|
CamShake=CameraShake'WEP_Mine_Reconstructor_Arch.Camera_Shake'
|
||||||
CamShakeInnerRadius=0
|
CamShakeInnerRadius=100
|
||||||
CamShakeOuterRadius=0
|
CamShakeOuterRadius=450
|
||||||
CamShakeFalloff=1.f
|
CamShakeFalloff=1.5f
|
||||||
bOrientCameraShakeTowardsEpicenter=true
|
bOrientCameraShakeTowardsEpicenter=true
|
||||||
End Object
|
End Object
|
||||||
ExplosionTemplate=ExploTemplate0
|
ExplosionTemplate=ExploTemplate0
|
||||||
|
@ -137,4 +137,4 @@ defaultproperties
|
|||||||
RateLimiter=0.1
|
RateLimiter=0.1
|
||||||
bKnockdownZeds=true
|
bKnockdownZeds=true
|
||||||
bExcludeAnyBoss=true
|
bExcludeAnyBoss=true
|
||||||
}
|
}
|
||||||
|
@ -17,7 +17,7 @@ simulated state WeaponSingleFiring
|
|||||||
|
|
||||||
if (WorldInfo.NetMode == NM_Client && bAllowClientAmmoTracking && FireInterval[CurrentFireMode] <= MinFireIntervalToTriggerSync)
|
if (WorldInfo.NetMode == NM_Client && bAllowClientAmmoTracking && FireInterval[CurrentFireMode] <= MinFireIntervalToTriggerSync)
|
||||||
{
|
{
|
||||||
SyncCurrentAmmoCount(CurrentFireMode, AmmoCount[CurrentFireMode]);
|
SyncCurrentAmmoCount(CurrentFireMode, AmmoCount[GetAmmoType(CurrentFireMode)]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -270,18 +270,6 @@ function SetOriginalValuesFromPickup( KFWeapon PickedUpWeapon )
|
|||||||
// charge alerts (beep, light) need current instigator
|
// charge alerts (beep, light) need current instigator
|
||||||
WeaponPawn.Instigator = Instigator;
|
WeaponPawn.Instigator = Instigator;
|
||||||
WeaponPawn.SetOwner(self);
|
WeaponPawn.SetOwner(self);
|
||||||
|
|
||||||
if (Instigator.Controller != none)
|
|
||||||
{
|
|
||||||
if (KFPawn_HRG_Warthog(KFPC.DeployedTurrets[i]) != none)
|
|
||||||
{
|
|
||||||
KFPawn_HRG_Warthog(KFPC.DeployedTurrets[i]).InstigatorController = Instigator.Controller;
|
|
||||||
}
|
|
||||||
else if (KFPawn_Autoturret(KFPC.DeployedTurrets[i]) != none)
|
|
||||||
{
|
|
||||||
KFPawn_Autoturret(KFPC.DeployedTurrets[i]).InstigatorController = Instigator.Controller;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -427,8 +427,8 @@ defaultproperties
|
|||||||
|
|
||||||
DistortTrailParticle = none
|
DistortTrailParticle = none
|
||||||
WhiteTrailParticle = none
|
WhiteTrailParticle = none
|
||||||
BlueTrailParticle = none
|
// BlueTrailParticle = none
|
||||||
RedTrailParticle = none
|
// RedTrailParticle = none
|
||||||
|
|
||||||
FoldedTrailParticleSystem=ParticleSystem'WEP_Scythe_EMIT.FX_Scythe_Custom_R_01'
|
FoldedTrailParticleSystem=ParticleSystem'WEP_Scythe_EMIT.FX_Scythe_Custom_R_01'
|
||||||
UnfoldedTrailParticleSystem=ParticleSystem'WEP_Scythe_EMIT.FX_Scythe_Custom_Unfold_01';
|
UnfoldedTrailParticleSystem=ParticleSystem'WEP_Scythe_EMIT.FX_Scythe_Custom_Unfold_01';
|
||||||
|
@ -11,9 +11,6 @@ class KFWeap_GravityImploder extends KFWeapon;
|
|||||||
|
|
||||||
`define GRAVITYIMPLODER_MIC_LED_INDEX 1
|
`define GRAVITYIMPLODER_MIC_LED_INDEX 1
|
||||||
|
|
||||||
/** Reduction for the amount of damage dealt to the weapon owner (including damage by the explosion) */
|
|
||||||
var float SelfDamageReductionValue;
|
|
||||||
|
|
||||||
/** Weapons material colors for each fire mode. */
|
/** Weapons material colors for each fire mode. */
|
||||||
var LinearColor DefaultFireMaterialColor;
|
var LinearColor DefaultFireMaterialColor;
|
||||||
var LinearColor AltFireMaterialColor;
|
var LinearColor AltFireMaterialColor;
|
||||||
@ -70,17 +67,6 @@ simulated function AltFireMode()
|
|||||||
StartFire(ALTFIRE_FIREMODE);
|
StartFire(ALTFIRE_FIREMODE);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Reduce damage to self
|
|
||||||
function AdjustDamage(out int InDamage, class<DamageType> DamageType, Actor DamageCauser)
|
|
||||||
{
|
|
||||||
super.AdjustDamage(InDamage, DamageType, DamageCauser);
|
|
||||||
|
|
||||||
if (Instigator != none && DamageCauser != none && DamageCauser.Instigator == Instigator)
|
|
||||||
{
|
|
||||||
InDamage *= SelfDamageReductionValue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
// Content
|
// Content
|
||||||
@ -179,9 +165,7 @@ defaultproperties
|
|||||||
bHasFlashlight=false
|
bHasFlashlight=false
|
||||||
|
|
||||||
WeaponFireWaveForm=ForceFeedbackWaveform'FX_ForceFeedback_ARCH.Gunfire.Medium_Recoil'
|
WeaponFireWaveForm=ForceFeedbackWaveform'FX_ForceFeedback_ARCH.Gunfire.Medium_Recoil'
|
||||||
|
|
||||||
SelfDamageReductionValue=0.075f //0.f
|
|
||||||
|
|
||||||
bLastFireWasAlt=false
|
bLastFireWasAlt=false
|
||||||
DefaultFireMaterialColor = (R = 0.965f,G = 0.2972f, B = 0.0f)
|
DefaultFireMaterialColor = (R = 0.965f,G = 0.2972f, B = 0.0f)
|
||||||
AltFireMaterialColor = (R = 0.0f, G = 0.9631f, B = 0.96581f)
|
AltFireMaterialColor = (R = 0.0f, G = 0.9631f, B = 0.96581f)
|
||||||
|
@ -9,8 +9,6 @@
|
|||||||
|
|
||||||
class KFWeap_HRG_Crossboom extends KFWeap_ScopedBase;
|
class KFWeap_HRG_Crossboom extends KFWeap_ScopedBase;
|
||||||
|
|
||||||
/** Reduction for the amount of damage dealt to the weapon owner (including damage by the explosion) */
|
|
||||||
var() float SelfDamageReductionValue;
|
|
||||||
|
|
||||||
/** Return true if this weapon should play the fire last animation for this shoot animation */
|
/** Return true if this weapon should play the fire last animation for this shoot animation */
|
||||||
simulated function bool ShouldPlayFireLast(byte FireModeNum)
|
simulated function bool ShouldPlayFireLast(byte FireModeNum)
|
||||||
@ -49,19 +47,6 @@ simulated function AltFireMode()
|
|||||||
StartFire(ALTFIRE_FIREMODE);
|
StartFire(ALTFIRE_FIREMODE);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
Reduce the damage received and apply it to the shield
|
|
||||||
*/
|
|
||||||
function AdjustDamage(out int InDamage, class<DamageType> DamageType, Actor DamageCauser)
|
|
||||||
{
|
|
||||||
super.AdjustDamage(InDamage, DamageType, DamageCauser);
|
|
||||||
|
|
||||||
if (Instigator != none && DamageCauser.Instigator == Instigator)
|
|
||||||
{
|
|
||||||
InDamage *= SelfDamageReductionValue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
// Inventory
|
// Inventory
|
||||||
@ -186,6 +171,4 @@ defaultproperties
|
|||||||
|
|
||||||
WeaponUpgrades[1]=(Stats=((Stat=EWUS_Damage0, Scale=1.15f), (Stat=EWUS_Damage1, Scale=1.15f), (Stat=EWUS_Weight, Add=1)))
|
WeaponUpgrades[1]=(Stats=((Stat=EWUS_Damage0, Scale=1.15f), (Stat=EWUS_Damage1, Scale=1.15f), (Stat=EWUS_Weight, Add=1)))
|
||||||
WeaponUpgrades[2]=(Stats=((Stat=EWUS_Damage0, Scale=1.3f), (Stat=EWUS_Damage1, Scale=1.3f), (Stat=EWUS_Weight, Add=2)))
|
WeaponUpgrades[2]=(Stats=((Stat=EWUS_Damage0, Scale=1.3f), (Stat=EWUS_Damage1, Scale=1.3f), (Stat=EWUS_Weight, Add=2)))
|
||||||
|
|
||||||
SelfDamageReductionValue = 0.25f;
|
|
||||||
}
|
}
|
@ -48,9 +48,6 @@ var AkComponent IronsightsComponent;
|
|||||||
var AkEvent IronsightsZoomInSound;
|
var AkEvent IronsightsZoomInSound;
|
||||||
var AkEvent IronsightsZoomOutSound;
|
var AkEvent IronsightsZoomOutSound;
|
||||||
|
|
||||||
/** Reduction for the amount of damage dealt to the weapon owner (including damage by the explosion) */
|
|
||||||
var() float SelfDamageReductionValue;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Toggle between DEFAULT and ALTFIRE
|
* Toggle between DEFAULT and ALTFIRE
|
||||||
*/
|
*/
|
||||||
@ -527,19 +524,6 @@ simulated state WeaponBurstFiring
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
Reduce the damage received and apply it to the shield
|
|
||||||
*/
|
|
||||||
function AdjustDamage(out int InDamage, class<DamageType> DamageType, Actor DamageCauser)
|
|
||||||
{
|
|
||||||
super.AdjustDamage(InDamage, DamageType, DamageCauser);
|
|
||||||
|
|
||||||
if (Instigator != none && DamageCauser.Instigator == Instigator)
|
|
||||||
{
|
|
||||||
InDamage *= SelfDamageReductionValue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
ForceReloadTime=0.4f
|
ForceReloadTime=0.4f
|
||||||
@ -680,5 +664,4 @@ defaultproperties
|
|||||||
WeaponUpgrades[1]=(Stats=((Stat=EWUS_Damage0, Scale=1.15f), (Stat=EWUS_Damage1, Scale=1.15f), (Stat=EWUS_Weight, Add=1)))
|
WeaponUpgrades[1]=(Stats=((Stat=EWUS_Damage0, Scale=1.15f), (Stat=EWUS_Damage1, Scale=1.15f), (Stat=EWUS_Weight, Add=1)))
|
||||||
WeaponUpgrades[2]=(Stats=((Stat=EWUS_Damage0, Scale=1.3f), (Stat=EWUS_Damage1, Scale=1.3f), (Stat=EWUS_Weight, Add=2)))
|
WeaponUpgrades[2]=(Stats=((Stat=EWUS_Damage0, Scale=1.3f), (Stat=EWUS_Damage1, Scale=1.3f), (Stat=EWUS_Weight, Add=2)))
|
||||||
|
|
||||||
SelfDamageReductionValue = 0f;
|
|
||||||
}
|
}
|
||||||
|
@ -123,7 +123,7 @@ defaultproperties
|
|||||||
PenetrationPower(ALTFIRE_FIREMODE)=0
|
PenetrationPower(ALTFIRE_FIREMODE)=0
|
||||||
FireInterval(ALTFIRE_FIREMODE)=0.5
|
FireInterval(ALTFIRE_FIREMODE)=0.5
|
||||||
Spread(ALTFIRE_FIREMODE)=0.025
|
Spread(ALTFIRE_FIREMODE)=0.025
|
||||||
AmmoCost(ALTFIRE_FIREMODE)=5 //3
|
AmmoCost(ALTFIRE_FIREMODE)=3 //3
|
||||||
|
|
||||||
// Shotgun
|
// Shotgun
|
||||||
NumPellets(ALTFIRE_FIREMODE)=1
|
NumPellets(ALTFIRE_FIREMODE)=1
|
||||||
|
@ -71,8 +71,6 @@ var const WeaponFireSndInfo BloodSuctionLoopNoAmmoAndBloodBallChargedSound;
|
|||||||
|
|
||||||
var bool bIsSprayDisabled;
|
var bool bIsSprayDisabled;
|
||||||
|
|
||||||
var float SelfDamageReductionValue;
|
|
||||||
|
|
||||||
var float FullChargedTimerInterval;
|
var float FullChargedTimerInterval;
|
||||||
var float ChargePercentage;
|
var float ChargePercentage;
|
||||||
|
|
||||||
@ -1339,7 +1337,6 @@ defaultproperties
|
|||||||
//BLOOD BALL
|
//BLOOD BALL
|
||||||
ChargingSound=(DefaultCue = AkEvent'WW_WEP_HRG_Vampire.Play_WEP_HRG_Vampire_SuckBlood_Loop_3P', FirstPersonCue=AkEvent'WW_WEP_HRG_Vampire.Play_WEP_HRG_Vampire_SuckBlood_Loop_1P')
|
ChargingSound=(DefaultCue = AkEvent'WW_WEP_HRG_Vampire.Play_WEP_HRG_Vampire_SuckBlood_Loop_3P', FirstPersonCue=AkEvent'WW_WEP_HRG_Vampire.Play_WEP_HRG_Vampire_SuckBlood_Loop_1P')
|
||||||
ChargedSound=(DefaultCue = AkEvent'WW_WEP_HRG_Vampire.Play_WEP_HRG_Vampire_SuckBlood_Charged_3P', FirstPersonCue=AkEvent'WW_WEP_HRG_Vampire.Play_WEP_HRG_Vampire_SuckBlood_Charged_1P')
|
ChargedSound=(DefaultCue = AkEvent'WW_WEP_HRG_Vampire.Play_WEP_HRG_Vampire_SuckBlood_Charged_3P', FirstPersonCue=AkEvent'WW_WEP_HRG_Vampire.Play_WEP_HRG_Vampire_SuckBlood_Charged_1P')
|
||||||
SelfDamageReductionValue=0.1f
|
|
||||||
|
|
||||||
//MaxChargeTime=0.6 //0.8
|
//MaxChargeTime=0.6 //0.8
|
||||||
MinDamageWhileChargingThreshold=0.12 //10% of MaxChargeTime
|
MinDamageWhileChargingThreshold=0.12 //10% of MaxChargeTime
|
||||||
|
@ -275,18 +275,6 @@ function SetOriginalValuesFromPickup( KFWeapon PickedUpWeapon )
|
|||||||
// charge alerts (beep, light) need current instigator
|
// charge alerts (beep, light) need current instigator
|
||||||
WeaponPawn.Instigator = Instigator;
|
WeaponPawn.Instigator = Instigator;
|
||||||
WeaponPawn.SetOwner(self);
|
WeaponPawn.SetOwner(self);
|
||||||
|
|
||||||
if (Instigator.Controller != none)
|
|
||||||
{
|
|
||||||
if (KFPawn_HRG_Warthog(KFPC.DeployedTurrets[i]) != none)
|
|
||||||
{
|
|
||||||
KFPawn_HRG_Warthog(KFPC.DeployedTurrets[i]).InstigatorController = Instigator.Controller;
|
|
||||||
}
|
|
||||||
else if (KFPawn_Autoturret(KFPC.DeployedTurrets[i]) != none)
|
|
||||||
{
|
|
||||||
KFPawn_Autoturret(KFPC.DeployedTurrets[i]).InstigatorController = Instigator.Controller;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -32,7 +32,6 @@ var transient bool bIsFullyCharged;
|
|||||||
|
|
||||||
var const WeaponFireSndInfo FullyChargedSound;
|
var const WeaponFireSndInfo FullyChargedSound;
|
||||||
|
|
||||||
var float SelfDamageReductionValue;
|
|
||||||
|
|
||||||
var float FullChargedTimerInterval;
|
var float FullChargedTimerInterval;
|
||||||
|
|
||||||
@ -377,16 +376,6 @@ simulated function int GetChargeFXLevel()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function AdjustDamage(out int InDamage, class<DamageType> DamageType, Actor DamageCauser)
|
|
||||||
{
|
|
||||||
super.AdjustDamage(InDamage, DamageType, DamageCauser);
|
|
||||||
|
|
||||||
if (Instigator != none && DamageCauser != none && DamageCauser.Instigator == Instigator ) //self
|
|
||||||
{
|
|
||||||
InDamage *= SelfDamageReductionValue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// increase the instant hit damage based on the charge level
|
// increase the instant hit damage based on the charge level
|
||||||
simulated function int GetModifiedDamage(byte FireModeNum, optional vector RayDir)
|
simulated function int GetModifiedDamage(byte FireModeNum, optional vector RayDir)
|
||||||
{
|
{
|
||||||
@ -403,7 +392,6 @@ simulated function int GetModifiedDamage(byte FireModeNum, optional vector RayDi
|
|||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
SelfDamageReductionValue=0.1f
|
|
||||||
//Gameplay Props
|
//Gameplay Props
|
||||||
MaxChargeTime=1.0
|
MaxChargeTime=1.0
|
||||||
ValueIncreaseTime=0.2
|
ValueIncreaseTime=0.2
|
||||||
|
@ -32,8 +32,6 @@ var transient bool bIsFullyCharged;
|
|||||||
|
|
||||||
var const WeaponFireSndInfo FullyChargedSound;
|
var const WeaponFireSndInfo FullyChargedSound;
|
||||||
|
|
||||||
var float SelfDamageReductionValue;
|
|
||||||
|
|
||||||
var float FullChargedTimerInterval;
|
var float FullChargedTimerInterval;
|
||||||
var float FXScalingFactorByCharge, ChargePercentage;
|
var float FXScalingFactorByCharge, ChargePercentage;
|
||||||
var float MinScale, MaxScale;
|
var float MinScale, MaxScale;
|
||||||
@ -289,7 +287,7 @@ simulated function BeginFire(Byte FireModeNum)
|
|||||||
|
|
||||||
simulated function StartFire(byte FiremodeNum)
|
simulated function StartFire(byte FiremodeNum)
|
||||||
{
|
{
|
||||||
if (IsTimerActive('RefireCheckTimer') || bBlocked)
|
if (bBlocked)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -308,8 +306,6 @@ simulated function StartFire(byte FiremodeNum)
|
|||||||
{
|
{
|
||||||
bBlocked = false;
|
bBlocked = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
simulated function RefireCheckTimer()
|
simulated function RefireCheckTimer()
|
||||||
@ -513,6 +509,7 @@ simulated state MineReconstructorCharge extends WeaponFiring
|
|||||||
global.Tick(DeltaTime);
|
global.Tick(DeltaTime);
|
||||||
|
|
||||||
if(bIsFullyCharged) return;
|
if(bIsFullyCharged) return;
|
||||||
|
if(PendingFire(ALTFIRE_FIREMODE)) return;
|
||||||
|
|
||||||
// Don't charge unless we're holding down the button
|
// Don't charge unless we're holding down the button
|
||||||
if (PendingFire(CurrentFireMode))
|
if (PendingFire(CurrentFireMode))
|
||||||
@ -803,6 +800,11 @@ simulated function AltFireMode()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (PendingFire(DEFAULT_FIREMODE))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
StartFire(ALTFIRE_FIREMODE);
|
StartFire(ALTFIRE_FIREMODE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -831,11 +833,8 @@ state WeaponSingleFiring
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
SelfDamageReductionValue=0.1f
|
|
||||||
//Gameplay Props
|
//Gameplay Props
|
||||||
MaxChargeTime=1.2
|
MaxChargeTime=1.2
|
||||||
AmmoIncreasePerCharge=1
|
AmmoIncreasePerCharge=1
|
||||||
@ -906,6 +905,7 @@ defaultproperties
|
|||||||
WeaponFireTypes(DEFAULT_FIREMODE)=EWFT_Projectile
|
WeaponFireTypes(DEFAULT_FIREMODE)=EWFT_Projectile
|
||||||
WeaponProjectiles(DEFAULT_FIREMODE)=class'KFProj_Mine_Reconstructor'
|
WeaponProjectiles(DEFAULT_FIREMODE)=class'KFProj_Mine_Reconstructor'
|
||||||
FireInterval(DEFAULT_FIREMODE)=+0.2 //+0.33
|
FireInterval(DEFAULT_FIREMODE)=+0.2 //+0.33
|
||||||
|
Spread(DEFAULT_FIREMODE)=0.0
|
||||||
InstantHitDamage(DEFAULT_FIREMODE)=120
|
InstantHitDamage(DEFAULT_FIREMODE)=120
|
||||||
PenetrationPower(DEFAULT_FIREMODE)=0.0;
|
PenetrationPower(DEFAULT_FIREMODE)=0.0;
|
||||||
InstantHitDamageTypes(DEFAULT_FIREMODE)=class'KFDT_Toxic_MineReconstructorImpact'
|
InstantHitDamageTypes(DEFAULT_FIREMODE)=class'KFDT_Toxic_MineReconstructorImpact'
|
||||||
@ -915,6 +915,7 @@ defaultproperties
|
|||||||
FiringStatesArray(ALTFIRE_FIREMODE)=WeaponSingleFiring
|
FiringStatesArray(ALTFIRE_FIREMODE)=WeaponSingleFiring
|
||||||
WeaponFireTypes(ALTFIRE_FIREMODE)=EWFT_Custom
|
WeaponFireTypes(ALTFIRE_FIREMODE)=EWFT_Custom
|
||||||
FireInterval(ALTFIRE_FIREMODE)=+0.15 //+0.25
|
FireInterval(ALTFIRE_FIREMODE)=+0.15 //+0.25
|
||||||
|
Spread(ALTFIRE_FIREMODE)=0.0
|
||||||
AmmoCost(ALTFIRE_FIREMODE)=0
|
AmmoCost(ALTFIRE_FIREMODE)=0
|
||||||
|
|
||||||
// BASH_FIREMODE
|
// BASH_FIREMODE
|
||||||
|
@ -138,6 +138,7 @@ defaultproperties
|
|||||||
// Fire Effects
|
// Fire Effects
|
||||||
MuzzleFlashTemplate=KFMuzzleFlash'WEP_L85A2_ARCH.Wep_L85A2_MuzzleFlash'
|
MuzzleFlashTemplate=KFMuzzleFlash'WEP_L85A2_ARCH.Wep_L85A2_MuzzleFlash'
|
||||||
WeaponFireSnd(DEFAULT_FIREMODE)=(DefaultCue=AkEvent'WW_ZED_Patriarch.Play_Mini_Gun_LP', FirstPersonCue=AkEvent'WW_ZED_Patriarch.Play_Mini_Gun_LP')
|
WeaponFireSnd(DEFAULT_FIREMODE)=(DefaultCue=AkEvent'WW_ZED_Patriarch.Play_Mini_Gun_LP', FirstPersonCue=AkEvent'WW_ZED_Patriarch.Play_Mini_Gun_LP')
|
||||||
|
WeaponFireSnd(ALTFIRE_FIREMODE) = (DefaultCue=AkEvent'WW_WEP_Stoner.Play_WEP_Stoner_Fire_3P_Single', FirstPersonCue=AkEvent'WW_WEP_Stoner.Play_WEP_Stoner_Fire_3P_Single')
|
||||||
WeaponDryFireSnd(DEFAULT_FIREMODE)=AkEvent'WW_WEP_SA_AK12.Play_WEP_SA_AK12_Handling_DryFire'
|
WeaponDryFireSnd(DEFAULT_FIREMODE)=AkEvent'WW_WEP_SA_AK12.Play_WEP_SA_AK12_Handling_DryFire'
|
||||||
WeaponDryFireSnd(ALTFIRE_FIREMODE)=AkEvent'WW_WEP_SA_AK12.Play_WEP_SA_AK12_Handling_DryFire'
|
WeaponDryFireSnd(ALTFIRE_FIREMODE)=AkEvent'WW_WEP_SA_AK12.Play_WEP_SA_AK12_Handling_DryFire'
|
||||||
|
|
||||||
|
@ -28,9 +28,6 @@ var bool bCannonballConvertedToTimeBomb;
|
|||||||
/** flag indicating that the player released the button and the cannonbal can't be configured as a timed bomb **/
|
/** flag indicating that the player released the button and the cannonbal can't be configured as a timed bomb **/
|
||||||
var bool bForceStandardCannonbal;
|
var bool bForceStandardCannonbal;
|
||||||
|
|
||||||
/** Reduction for the amount of damage dealt to the weapon owner (including damage by the explosion) */
|
|
||||||
var float SelfDamageReductionValue;
|
|
||||||
|
|
||||||
/** Amount of time we hold the fire button on this fire state, used in BlunderbussDeployAndDetonate **/
|
/** Amount of time we hold the fire button on this fire state, used in BlunderbussDeployAndDetonate **/
|
||||||
var transient float FireHoldTime;
|
var transient float FireHoldTime;
|
||||||
|
|
||||||
@ -369,16 +366,6 @@ simulated function HandleProjectileImpact(byte ProjectileFireMode, ImpactInfo Im
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function AdjustDamage(out int InDamage, class<DamageType> DamageType, Actor DamageCauser)
|
|
||||||
{
|
|
||||||
super.AdjustDamage(InDamage, DamageType, DamageCauser);
|
|
||||||
|
|
||||||
if (Instigator != none && DamageCauser != none && DamageCauser.Instigator == Instigator)
|
|
||||||
{
|
|
||||||
InDamage *= SelfDamageReductionValue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
simulated function KFProjectile SpawnAllProjectiles(class<KFProjectile> KFProjClass, vector RealStartLoc, vector AimDir)
|
simulated function KFProjectile SpawnAllProjectiles(class<KFProjectile> KFProjClass, vector RealStartLoc, vector AimDir)
|
||||||
{
|
{
|
||||||
local KFPerk InstigatorPerk;
|
local KFPerk InstigatorPerk;
|
||||||
@ -467,7 +454,6 @@ defaultproperties
|
|||||||
bIsBackupWeapon=false
|
bIsBackupWeapon=false
|
||||||
|
|
||||||
// Gameplay
|
// Gameplay
|
||||||
SelfDamageReductionValue=0.5f //0.75f
|
|
||||||
TimedDetonationThresholdTime=0.01f
|
TimedDetonationThresholdTime=0.01f
|
||||||
|
|
||||||
// FOV
|
// FOV
|
||||||
|
@ -19,9 +19,6 @@ var array<KFProj_Rocket_SealSqueal> DeployedHarpoons;
|
|||||||
/** Same as DeployedHarpoons.Length, but replicated because harpoons are only tracked on server */
|
/** Same as DeployedHarpoons.Length, but replicated because harpoons are only tracked on server */
|
||||||
var int NumDeployedHarpoons;
|
var int NumDeployedHarpoons;
|
||||||
|
|
||||||
/** Reduction for the amount of damage dealt to the weapon owner (including damage by the explosion) */
|
|
||||||
var float SelfDamageReductionValue;
|
|
||||||
|
|
||||||
/** Camera shake when detonating the harpoons */
|
/** Camera shake when detonating the harpoons */
|
||||||
var CameraAnim DetonateCameraAnim;
|
var CameraAnim DetonateCameraAnim;
|
||||||
var float DetonateCameraAnimPlayRate;
|
var float DetonateCameraAnimPlayRate;
|
||||||
@ -81,15 +78,6 @@ simulated function name GetReloadAnimName(bool bTacticalReload)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function AdjustDamage(out int InDamage, class<DamageType> DamageType, Actor DamageCauser)
|
|
||||||
{
|
|
||||||
super.AdjustDamage(InDamage, DamageType, DamageCauser);
|
|
||||||
|
|
||||||
if (Instigator != none && DamageCauser != none && DamageCauser.Instigator == Instigator)
|
|
||||||
{
|
|
||||||
InDamage *= SelfDamageReductionValue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*********************************************************************************************
|
/*********************************************************************************************
|
||||||
* State WeaponDetonating
|
* State WeaponDetonating
|
||||||
@ -338,8 +326,6 @@ defaultproperties
|
|||||||
WeaponUpgrades[1]=(Stats=((Stat=EWUS_Damage0, Scale=1.15f), (Stat=EWUS_Weight, Add=1)))
|
WeaponUpgrades[1]=(Stats=((Stat=EWUS_Damage0, Scale=1.15f), (Stat=EWUS_Weight, Add=1)))
|
||||||
WeaponUpgrades[2]=(Stats=((Stat=EWUS_Damage0, Scale=1.3f), (Stat=EWUS_Weight, Add=2)))
|
WeaponUpgrades[2]=(Stats=((Stat=EWUS_Damage0, Scale=1.3f), (Stat=EWUS_Weight, Add=2)))
|
||||||
|
|
||||||
SelfDamageReductionValue=0.25f
|
|
||||||
|
|
||||||
DetonateCameraAnim=CameraAnim'WEP_1P_Seal_Squeal_ANIM.Shoot_MB500'
|
DetonateCameraAnim=CameraAnim'WEP_1P_Seal_Squeal_ANIM.Shoot_MB500'
|
||||||
DetonateCameraAnimPlayRate=2.0f
|
DetonateCameraAnimPlayRate=2.0f
|
||||||
DetonateCameraAnimScale=0.4f
|
DetonateCameraAnimScale=0.4f
|
||||||
|
@ -15,9 +15,6 @@ var array<KFProj_Rocket_ThermiteBore> DeployedHarpoons;
|
|||||||
/** Same as DeployedHarpoons.Length, but replicated because harpoons are only tracked on server */
|
/** Same as DeployedHarpoons.Length, but replicated because harpoons are only tracked on server */
|
||||||
var int NumDeployedHarpoons;
|
var int NumDeployedHarpoons;
|
||||||
|
|
||||||
/** Reduction for the amount of damage dealt to the weapon owner (including damage by the explosion) */
|
|
||||||
var float SelfDamageReductionValue;
|
|
||||||
|
|
||||||
var(Animations) const editconst name DetonateAnim;
|
var(Animations) const editconst name DetonateAnim;
|
||||||
var(Animations) const editconst name DetonateAnimLast;
|
var(Animations) const editconst name DetonateAnimLast;
|
||||||
var(Animations) const editconst name DetonateAnimIron;
|
var(Animations) const editconst name DetonateAnimIron;
|
||||||
@ -77,16 +74,6 @@ simulated function name GetReloadAnimName(bool bTacticalReload)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function AdjustDamage(out int InDamage, class<DamageType> DamageType, Actor DamageCauser)
|
|
||||||
{
|
|
||||||
super.AdjustDamage(InDamage, DamageType, DamageCauser);
|
|
||||||
|
|
||||||
if (Instigator != none && DamageCauser != none && DamageCauser.Instigator == Instigator)
|
|
||||||
{
|
|
||||||
InDamage *= SelfDamageReductionValue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*********************************************************************************************
|
/*********************************************************************************************
|
||||||
* State WeaponDetonating
|
* State WeaponDetonating
|
||||||
* The weapon is in this state while detonating a charge
|
* The weapon is in this state while detonating a charge
|
||||||
@ -315,8 +302,6 @@ defaultproperties
|
|||||||
|
|
||||||
WeaponUpgrades[1]=(Stats=((Stat=EWUS_Damage0, Scale=1.125f), (Stat=EWUS_Weight, Add=1)))
|
WeaponUpgrades[1]=(Stats=((Stat=EWUS_Damage0, Scale=1.125f), (Stat=EWUS_Weight, Add=1)))
|
||||||
|
|
||||||
SelfDamageReductionValue=0.05f //0.25f
|
|
||||||
|
|
||||||
DetonateAnim=Alt_Fire
|
DetonateAnim=Alt_Fire
|
||||||
DetonateAnimLast=Alt_Fire_Last
|
DetonateAnimLast=Alt_Fire_Last
|
||||||
DetonateAnimIron=Alt_Fire_Iron
|
DetonateAnimIron=Alt_Fire_Iron
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user