//============================================================================= // KFLocalMessage_Priority //============================================================================= // Killing Floor 2 // // Base class for important message that renders to the center of the player's HUD // // Copyright (C) 2015 Tripwire Interactive LLC //============================================================================= class KFLocalMessage_Priority extends KFLocalMessage; var localized string WaveStartMessage; var localized string WaveEndMessage; var localized string GetToTraderMessage; var localized string ScavengeMessage; var localized string YouLostMessage; var localized string YouWonMessage; var localized string SquadWipedOutMessage; var localized string SquadWipedOutVIPMessage; var localized string SquadSurvivedMessage; var localized string ObjectiveStartMessage; var localized string ObjectiveWonMessage; var localized string ObjectiveLostMessage; var localized string ObjectiveEndedMessage; var localized string ObjNotEnoughPlayersMessage; var localized string ObjTimeRanOutMessage; var localized string HumansLoseMessage; var localized string HumansWinMessage; var localized string AttackHumanPlayersString; var localized string ZedGroupRegroupingString; var localized string NextRoundBeginString; var localized string PlayerCanChangePerksString; var localized string ZedWaitingForNextRoundString; var localized string LastPlayerStandingString; var localized string NewPerkAssignedMessage; struct SDelayedPriorityMessage { var string InPrimaryMessageString; var string InSecondaryMessageString; var int LifeTime; var byte MessageType; }; enum EGameMessageType { GMT_WaveStart, GMT_WaveEnd, GMT_MatchWon, GMT_MatchLost, GMT_ObjectiveStart, GMT_ObjectiveWon, GMT_ObjectiveLost, GMT_ObjEndPlayerNeeded, GMT_ObjEndTimeLimit, GMT_LevelUp, GMT_TierUnlocked, GMT_Died, GMT_ZedsWin, GMT_HumansWin, GMT_AttackHumanPlayers, GMT_NextRoundBegin, GMT_LastPlayerStanding, GMT_WaveStartWeekly, GMT_WaveStartSpecial, GMT_WaveSBoss, GMT_Null, }; static function ClientReceive( PlayerController P, optional int Switch, optional PlayerReplicationInfo RelatedPRI_1, optional PlayerReplicationInfo RelatedPRI_2, optional Object OptionalObject ) { local string MessageString,SecondaryMessageString, SpecialIconPath; local KFGFxMoviePlayer_HUD myGfxHUD; local KFGameReplicationInfo KFGRI; local TeamInfo TeamInfo; local byte TeamIndex; local KFPlayerController KFPC; local class ReceivedPerkClass; local bool bIsRandomPerkMode; KFPC = KFPlayerController(class'WorldInfo'.static.GetWorldInfo().GetALocalPlayerController()); bIsRandomPerkMode = KFGameReplicationInfo(class'WorldInfo'.static.GetWorldInfo().GRI).IsRandomPerkMode(); TeamIndex = P.PlayerReplicationInfo.GetTeamNum(); if( OptionalObject != none ) { TeamInfo = TeamInfo( OptionalObject ); if( TeamInfo != none ) { TeamIndex = TeamInfo.TeamIndex; } } MessageString = static.GetMessageString( Switch, SecondaryMessageString, TeamIndex ); if (bIsRandomPerkMode) { ReceivedPerkClass = class(OptionalObject); if (ReceivedPerkClass != none) { MessageString = ReceivedPerkClass.default.PerkName; SpecialIconPath = ReceivedPerkClass.static.GetPerkIconPath(); } } if ( MessageString != "" && KFGFxHudWrapper(p.myHUD) != none && ShouldShowPriortyMessage(P, Switch)) { myGfxHUD = KFGFxHudWrapper(p.myHUD).HudMovie; if ( myGfxHUD != None ) { myGfxHUD.DisplayPriorityMessage(MessageString,SecondaryMessageString,static.GetMessageLifeTime(Switch), EGameMessageType(Switch), SpecialIconPath); } else if(KFPC.MyGFxManager != none) //store it off so we can queue it { if (KFPC.MyGFxManager != none) { //queue the message KFPC.MyGFxManager.QueueDelayedPriorityMessage(MessageString, SecondaryMessageString, static.GetMessageLifeTime(Switch), EGameMessageType(Switch)); //return; } } } switch( Switch ) { case GMT_WaveStart: case GMT_WaveStartWeekly: case GMT_WaveStartSpecial: case GMT_WaveSBoss: if(!P.PlayerReplicationInfo.bOnlySpectator && P.PlayerReplicationInfo.bReadyToPlay) { if(KFPC != none && KFPC.LEDEffectsManager != none) { KFPC.LEDEffectsManager.PlayEffectWaveIncoming(); } CloseMenus(); } class'KFMusicStingerHelper'.static.PlayWaveStartStinger( P, Switch ); break; case GMT_WaveEnd: class'KFMusicStingerHelper'.static.PlayWaveCompletedStinger( P ); break; case GMT_MatchWon: KFGRI = KFGameReplicationInfo(P.WorldInfo.GRI); if(KFGRI != none) { KFGRI.bMatchVictory = true; } if(!P.PlayerReplicationInfo.bOnlySpectator && P.PlayerReplicationInfo.GetTeamNum() == 255) { class'KFMusicStingerHelper'.static.PlayMatchLostStinger( P ); } else { class'KFMusicStingerHelper'.static.PlayMatchWonStinger( P ); } if(KFPC != none && KFPC.LEDEffectsManager != none) { KFPC.LEDEffectsManager.PlayEffectShowMatchOutcome(P.PlayerReplicationInfo.GetTeamNum() != 255); } break; case GMT_MatchLost: if(!P.PlayerReplicationInfo.bOnlySpectator && P.PlayerReplicationInfo.GetTeamNum() == 255) { class'KFMusicStingerHelper'.static.PlayMatchWonStinger( P ); } else { class'KFMusicStingerHelper'.static.PlayMatchLostStinger( P ); } if(KFPC != none && KFPC.LEDEffectsManager != none) { KFPC.LEDEffectsManager.PlayEffectShowMatchOutcome(P.PlayerReplicationInfo.GetTeamNum() == 255); } break; case GMT_HumansWin: KFGRI = KFGameReplicationInfo(P.WorldInfo.GRI); if(KFGRI != none) { KFGRI.bMatchVictory = true; } if(P.PlayerReplicationInfo.GetTeamNum() == 255) { class'KFMusicStingerHelper'.static.PlayRoundLostStinger( P ); } else { class'KFMusicStingerHelper'.static.PlayRoundWonStinger( P ); } if(KFPC != none && KFPC.LEDEffectsManager != none) { KFPC.LEDEffectsManager.PlayEffectShowMatchOutcome(P.PlayerReplicationInfo.GetTeamNum() != 255); } break; case GMT_ZedsWin: if(P.PlayerReplicationInfo.GetTeamNum() == 255) { class'KFMusicStingerHelper'.static.PlayRoundWonStinger( P ); } else { class'KFMusicStingerHelper'.static.PlayRoundLostStinger( P ); } if(KFPC != none && KFPC.LEDEffectsManager != none) { KFPC.LEDEffectsManager.PlayEffectShowMatchOutcome(P.PlayerReplicationInfo.GetTeamNum() == 255); } break; // make sure only local player case GMT_LevelUp: class'KFMusicStingerHelper'.static.PlayLevelUpStinger( P ); break; // make sure only local player case GMT_TierUnlocked: class'KFMusicStingerHelper'.static.PlayTierUnlockedStinger( P ); break; case GMT_ObjectiveWon: class'KFMusicStingerHelper'.static.PlayObjectiveWonStinger( P ); break; case GMT_ObjectiveLost: class'KFMusicStingerHelper'.static.PlayObjectiveLostStinger( P ); break; // make sure only local player case GMT_Died: class'KFMusicStingerHelper'.static.PlayPlayerDiedStinger( P ); break; case GMT_LastPlayerStanding: //@TODO: Mark, do we have a stinger or dialog for this? break; }; } static function string GetMessageString(int Switch, optional out String SecondaryString, optional byte TeamIndex) { local KFGameReplicationInfo KFGRI; SecondaryString = ""; switch ( Switch ) { case GMT_HumansWin: SecondaryString = default.HumansWinMessage; if(TeamIndex == 255) { return default.YouLostMessage; } else { return default.YouWonMessage; } case GMT_ZedsWin: SecondaryString = default.HumansLoseMessage; if(TeamIndex == 255) { return default.YouWonMessage; } else { return default.YouLostMessage; } case GMT_WaveStart: case GMT_WaveStartWeekly: case GMT_WaveStartSpecial: case GMT_WaveSBoss: return default.WaveStartMessage; case GMT_WaveEnd: if(TeamIndex == 255) { return default.ZedGroupRegroupingString; } else { if ( KFGameReplicationInfo(class'WorldInfo'.static.GetWorldInfo().GRI).IsRandomPerkMode() ) { SecondaryString = default.NewPerkAssignedMessage; } else { SecondaryString = KFGameReplicationInfo(class'WorldInfo'.static.GetWorldInfo().GRI).bTradersEnabled ? default.GetToTraderMessage : default.ScavengeMessage; } return default.WaveEndMessage; } case GMT_MatchWon: if(class'WorldInfo'.static.GetWorldInfo().NetMode != NM_Standalone) { SecondaryString = default.SquadSurvivedMessage; } return default.YouWonMessage; case GMT_MatchLost: if(class'WorldInfo'.static.GetWorldInfo().NetMode != NM_Standalone) { KFGRI = KFGameReplicationInfo(class'WorldInfo'.static.GetWorldInfo().GRI); if (KFGRI != none && KFGRI.bIsWeeklyMode && KFGRI.CurrentWeeklyIndex == 17) { SecondaryString = default.SquadWipedOutVIPMessage; } else { SecondaryString = default.SquadWipedOutMessage; } } return default.YouLostMessage; case GMT_ObjectiveStart: return default.ObjectiveStartMessage; case GMT_ObjectiveWon: return default.ObjectiveWonMessage; case GMT_ObjectiveLost: return default.ObjectiveLostMessage; case GMT_ObjEndPlayerNeeded: SecondaryString = default.ObjNotEnoughPlayersMessage; return default.ObjectiveEndedMessage; case GMT_ObjEndTimeLimit: SecondaryString = default.ObjTimeRanOutMessage; return default.ObjectiveLostMessage; case GMT_LevelUp: SecondaryString =""; //TODO: Remove this hard coded test message when we add the pop up in. ZG return ""; case GMT_TierUnlocked: SecondaryString =""; //TODO: Remove this hard coded test message when we add the pop up in. ZG return ""; case GMT_AttackHumanPlayers: return default.AttackHumanPlayersString; case GMT_NextRoundBegin: if( TeamIndex == 255 ) { SecondaryString = default.ZedWaitingForNextRoundString; } else { SecondaryString = default.PlayerCanChangePerksString; //open perk menu OpenPerkMenu(); } return default.NextRoundBeginString; case GMT_LastPlayerStanding: return default.LastPlayerStandingString; default: return ""; } } static function bool ShouldShowPriortyMessage(PlayerController P, int Switch) { local PlayerController PC; if (switch == GMT_ObjectiveLost || switch == GMT_ObjectiveWon) { return false; } if(Switch == GMT_LastPlayerStanding) { PC = class'WorldInfo'.static.GetWorldInfo().GetALocalPlayerController(); if(PC != none && (PC.Pawn != none && PC.Pawn.Health > 0) ) { return false; } } return true; } static function CloseMenus() { local KFPlayerController KFPC; KFPC = KFPlayerController(class'WorldInfo'.static.GetWorldInfo().GetALocalPlayerController()); if(KFPC != none && KFPC.MyGfxManager != none) { if(KFPC.MyGfxManager.bMenusOpen) { KFPC.MyGfxManager.CloseMenus(true); } } } static function OpenPerkMenu() { local KFPlayerController KFPC; KFPC = KFPlayerController(class'WorldInfo'.static.GetWorldInfo().GetALocalPlayerController()); if(KFPC != none && KFPC.MyGfxManager != none) { KFPC.MyGfxManager.OpenMenu(UI_Perks, true); } } static function float GetMessageLifeTime(int Switch) { switch ( Switch ) { case GMT_WaveStart: case GMT_WaveStartWeekly: case GMT_WaveStartSpecial: case GMT_WaveSBoss: return 5.f; case GMT_WaveEnd: return 4.f; case GMT_ObjectiveStart: case GMT_ObjectiveWon: case GMT_ObjectiveLost: return 3.f; case GMT_LevelUp: case GMT_TierUnlocked: return 0.01f; case GMT_MatchWon: case GMT_MatchLost: return 0.f; case GMT_AttackHumanPlayers: return 2.f; case GMT_NextRoundBegin: return 5.f; case GMT_LastPlayerStanding: return 1.5f; } return default.LifeTime; } DefaultProperties { }