// This class is required to replicate player (speaker) names of KF_PlayerDialogue class PlayerDialogueReplicationInfo extends ReplicationInfo; var name DialogueActorName; var int DlgIndex; var PlayerReplicationInfo SpeakerPRI; var private int NumTries; replication { reliable if ( bNetInitial && Role == ROLE_Authority ) DialogueActorName; reliable if ( bNetDirty && Role == ROLE_Authority ) DlgIndex, SpeakerPRI; } simulated function PostNetReceive() { NumTries = 10; // try 10 times to find diealogue, then - give up Timer(); } simulated function Timer() { local KFPlayerController_Story MyPC; local HUD_StoryMode MyHUD; local int HUDDlgIndex; local KF_DialogueSpot NewDlg; SetTimer(0, false); MyPC = KFPlayerController_Story(Level.GetLocalPlayerController()); if ( MyPC == none ) return; MyHUD = HUD_StoryMode(MyPC.MyHUD); if ( MyHUD == none ) return; NewDlg = MyHUD.FindDialogueActor(DialogueActorName); if(NewDlg == none) { log("Warning - could not find Dialogue Actor of name : "@DialogueActorName@" Aborting HUD Render. ", 'PlayerDialogueReplicationInfo'); return; } if(!MyHUD.FindExistingDialogue(NewDlg.Dialogues[DlgIndex].Display.Dialogue_text,HUDDlgIndex)) { // try again later - maybe KFPlayerController_Story.ClientShowStoryDialogue() isn't replicated yet if ( NumTries > 0) { SetTimer(0.1, false); NumTries--; } return; } MyHUD.Dialogues[HUDDlgIndex].Speaker = SpeakerPRI.PlayerName; MyHUD.Dialogues[HUDDlgIndex].Portrait = SpeakerPRI.GetPortrait(); } defaultproperties { NetUpdateFrequency=5.000000 bNetNotify=True }