1
0
KF2-Dev-Scripts/KFGame/Classes/KFGFxMenu_DoshVault.uc

311 lines
7.5 KiB
Ucode
Raw Normal View History

2020-12-13 15:01:13 +00:00
//=============================================================================
// KFGFxMenu_DoshVault
//=============================================================================
// Class Description
//=============================================================================
// Killing Floor 2
// Copyright (C) 2015 Tripwire Interactive LLC
// - Zane Gholson 6/27/2017
//=============================================================================
class KFGFxMenu_DoshVault extends KFGFxObject_Menu;
var name PopUpCrateEventName;
var name PileDisappearEventName;
var name DoshVaultSoundThemeName;
var localized string YourDoshString;
var localized string NextRewardString;
var localized string DoshVaultString;
var localized string YourCratesString;
var localized string OpenCratesString;
var localized string CrateUnlockedString;
var localized string DelayedCrateString;
var bool bSeenAllDoshAnimation;
var int ItemID;
var OnlineSubsystem OnlineSub;
var ItemProperties RewardItemDetailsHolder;
var KFPlayerController KFPC;
var bool bPausedForCrate;
function InitializeMenu( KFGfxMoviePlayer_Manager InManager )
{
super.InitializeMenu(InManager);
OnlineSub = class'GameEngine'.static.GetOnlineSubsystem();
InitialRewardItem();
LocalizeContainer();
UpdatePlayerCrateCount();
KFPC = KFPlayerController(GetPC());
InitStart();
}
function InitStart()
{
local KFGameInfo_Entry KFEntry;
if(class'WorldInfo'.static.IsMenuLevel())
{
KFEntry = KFGameInfo_Entry(GetPC().WorldInfo.Game);
KFEntry.InitVault();
if(KFPC.GetLastSeenDoshCount() == KFPC.GetTotalDoshCount())
{
DelayedInit();
}
else
{
SetVisible(false);
}
}
}
//menu will not open correctly due to animation timeline if this is done on init
function DelayedInit()
{
UpdatePlayerDoshMeter();
SetVisible(true);
//UpdatePlayerCrateCount();
}
function OnOpen()
{
super.OnOpen();
bPausedForCrate = false;
bSeenAllDoshAnimation = false;
if ( class'WorldInfo'.static.IsMenuLevel() )
{
Manager.ManagerObject.SetBool("backgroundVisible", false);
}
KFPC.CheckHasViewedDoshVault();
if(KFPC.GetTotalDoshCount() == KFPC.GetLastSeenDoshCount())
{
KFPC.TriggerGlobalEventClass(class'KFSeqEvent_DoshVault', KFPC, DVE_IdleNoDosh);
}
else
{
KFPC.TriggerGlobalEventClass(class'KFSeqEvent_DoshVault', KFPC, DVE_Idle);
}
KFPC.VerifyDoshVaultCrates();
if(!bSeenAllDoshAnimation)
{
InitializeMenu(Manager);
}
}
function OnClose()
{
if (class'WorldInfo'.static.IsMenuLevel())
{
Manager.ManagerObject.SetBool("backgroundVisible", true);
}
AbortSquence();
}
function AbortSquence()
{
KFPC.TriggerGlobalEventClass(class'KFSeqEvent_DoshVault', KFPC, DVE_ABORT);
KFPC.ResetCustomizationCamera();
KFPC.ClearTimer(nameof(DelayedInit));
bPausedForCrate = false; //sanity
}
function LocalizeContainer()
{
local GFxObject LocalizedObject;
LocalizedObject = CreateObject("Object");
LocalizedObject.SetString("yourDosh", YourDoshString);
LocalizedObject.SetString("nextReward", NextRewardString);
LocalizedObject.SetString("nextUnlock", GetNextUnlockName());
LocalizedObject.SetString("titleString", DoshVaultString);
LocalizedObject.SetString("yourCrates", YourCratesString);
LocalizedObject.SetString("openCrate", OpenCratesString);
LocalizedObject.SetString("crateUnlocked", CrateUnlockedString);
LocalizedObject.SetString("iconLocation", "img://"$GetCrateIcon());
LocalizedObject.SetString("crateDelayed", DelayedCrateString);
SetObject("localizedText", LocalizedObject);
}
function InitialRewardItem()
{
local int ItemIndex;
ItemIndex = OnlineSub.ItemPropertiesList.Find('Definition', ItemID);
if( ItemIndex != INDEX_NONE )
{
RewardItemDetailsHolder = OnlineSub.ItemPropertiesList[ItemIndex];
}
}
function UpdatePlayerDoshMeter()
{
local int CurrentTier;
CurrentTier = int(KFPC.GetLastSeenDoshCount() / KFPC.GetDoshVaultTierValue());
//Last seen dosh, total dosh starting tier, amount in tier, crate number
SendDoshInfo(KFPC.GetLastSeenDoshCount(), KFPC.GetTotalDoshCount(), KFPC.GetDoshVaultTierValue() * CurrentTier, KFPC.GetDoshVaultTierValue(), GetCrateCount());
}
function int GetCrateCount()
{
local int CrateCount;
local int i;
if(OnlineSub == none)
{
return INDEX_NONE;
}
for (i = 0; i < OnlineSub.CurrentInventory.length; i++)
{
if(OnlineSub.CurrentInventory[i].Definition == ItemID )
{
CrateCount++;
}
}
return CrateCount;
}
function UpdatePlayerCrateCount()
{
SetInt("storedCratesValue", GetCrateCount());
}
function string GetCrateIcon()
{
//"img://"$TempItemDetailsHolder.IconURL);
return RewardItemDetailsHolder.IconURL;
}
function string GetNextUnlockName()
{
//return crate name
return RewardItemDetailsHolder.Name;
}
function SendDoshInfo(int OldDosh, int NewDosh, int TierBase, int TierLength, int CrateNum)
{
local GFxObject DataObject;
if (OldDosh == INDEX_NONE || NewDosh == INDEX_NONE)
{
Manager.DelayedOpenPopup(ENotification, EDPPID_Misc, class'KFCommon_LocalizedStrings'.default.NoticeString, class'KFCommon_LocalizedStrings'.default.FailedToReachInventoryServerString, class'KFCommon_LocalizedStrings'.default.OKString);
`log("something isn't right. Connection issue may be present. To prevent angry Reddit mobs, just don't animate");
bSeenAllDoshAnimation = true;
return;
}
if (NewDosh < OldDosh)
{
NewDosh = OldDosh;
//Out of sync saves. Players still get their crates.
}
//start particles if not the same
if(OldDosh == NewDosh)
{
`log("no new Vosh!");
bSeenAllDoshAnimation = true;
}
DataObject = CreateObject("Object");
DataObject.SetInt("oldDosh", OldDosh);
DataObject.SetInt("newDosh", NewDosh);
DataObject.SetInt("tierBase", TierBase);
DataObject.SetInt("tierLength", TierLength);
DataObject.SetInt("crateNum", CrateNum);
SetObject("doshData", DataObject);
}
function bool CanCloseVaultMenu()
{
return bSeenAllDoshAnimation;
}
function Callback_UpdateDosh(int NewValue)
{
local KFGameInfo_Entry KFGIE;
KFGIE = KFGameInfo_Entry(GetPC().WorldInfo.Game);
if (KFGIE != none)
{
KFGIE.UpdateDoshPiles(NewValue);
if(bPausedForCrate)
{
KFPC.TriggerGlobalEventClass(class'KFSeqEvent_DoshVault', KFPC, DVE_ResumeFill);
bPausedForCrate = false;
}
}
}
function Callback_FinalAnimationComplete()
{
local KFGameInfo_Entry KFGIE;
KFGIE = KFGameInfo_Entry(GetPC().WorldInfo.Game);
if (KFGIE != none)
{
KFGIE.FinalAnimationPlayed(KFPC);
}
KFPC.TriggerGlobalEventClass(class'KFSeqEvent_DoshVault', KFPC, DVE_FillComplete);
if(KFPC != none)
{
KFPC.MarkDoshVaultSeen();
}
//save last seen amount
bSeenAllDoshAnimation = true;
}
function Callback_DoshAnimationComplete()
{
//unlocked crate
Manager.PlaySoundFromTheme(PopUpCrateEventName, DoshVaultSoundThemeName);
KFPC.CheckUnlockDoshVaultReward();
KFPC.TriggerGlobalEventClass(class'KFSeqEvent_DoshVault', KFPC, DVE_PauseFill);
bPausedForCrate = true;
}
function Callback_AnimationBegin()
{
}
function Callback_OpenCrateClicked()
{
Manager.SelectIDOnOpen = ItemID;
Manager.OpenMenu(UI_Inventory);
}
DefaultProperties
{
DoshVaultSoundThemeName=SoundTheme_DoshVault
PopUpCrateEventName=PopUpCrate
PileDisappearEventName=DoshPileOut
ItemID=5313 //hozine supply crate 12
}