private void Send_Notification_To_Channel( EChannelID channel_id, EPersistenceID source_player_id, EPersistenceID target_player_id, EChatNotification chat_event, EPersistenceID skip_id )
        {
            string source_player_name = Get_Player_Name_By_Persistence_ID( source_player_id );
            string target_player_name = Get_Player_Name_By_Persistence_ID( target_player_id );

            CChatClientNotificationMessage notification_message = new CChatClientNotificationMessage( channel_id, target_player_name, target_player_id, chat_event, source_player_name );
            Send_Message_To_Channel( channel_id, notification_message, skip_id );
        }
        private void On_Chat_Client_Notification( CChatClientNotificationMessage message )
        {
            CClientChatChannel channel = Get_Channel_By_Channel_ID( message.ChannelID );
            if ( channel == null )
            {
                return;
            }

            switch ( message.ChatEvent )
            {
                case EChatNotification.Channel_Destroyed:
                    CClientResource.Output_Text( EClientTextID.Client_Chat_Channel_Destroyed, Build_Channel_Name_Display_String( channel.ChannelName, channel.ChannelNumber ) );
                    break;

                case EChatNotification.Player_Joined_Channel:
                    if ( channel.AnnounceJoinLeave )
                    {
                        CClientResource.Output_Text( EClientTextID.Client_Chat_Player_Joined_Channel, message.TargetName, Build_Channel_Name_Display_String( channel.ChannelName, channel.ChannelNumber ) );
                    }
                    channel.Add_Player( message.TargetID );
                    break;

                case EChatNotification.Player_Left_Channel:
                    if ( channel.AnnounceJoinLeave )
                    {
                        CClientResource.Output_Text( EClientTextID.Client_Chat_Player_Left_Channel, message.TargetName, Build_Channel_Name_Display_String( channel.ChannelName, channel.ChannelNumber ) );
                    }
                    channel.Remove_Player( message.TargetID );
                    break;

                case EChatNotification.Player_Kicked_From_Channel:
                    CClientResource.Output_Text( EClientTextID.Client_Chat_Player_Kicked_From_Channel,
                                                                 message.TargetName,
                                                                 Build_Channel_Name_Display_String( channel.ChannelName, channel.ChannelNumber ),
                                                                 ( message.SourceName.Length > 0 ) ? message.SourceName : CClientResource.Get_Text( EClientTextID.Client_The_Server ) );

                    channel.Remove_Player( message.TargetID );
                    break;

                case EChatNotification.Player_Gagged:
                    CClientResource.Output_Text( EClientTextID.Client_Chat_Player_Gagged_In_Channel,
                                                                 message.TargetName,
                                                                 Build_Channel_Name_Display_String( channel.ChannelName, channel.ChannelNumber ),
                                                                 message.SourceName );

                    channel.Set_Gag_Status( message.TargetID, true );
                    break;

                case EChatNotification.Player_Ungagged:
                    CClientResource.Output_Text( EClientTextID.Client_Chat_Player_Ungagged_In_Channel,
                                                                 message.TargetName,
                                                                 Build_Channel_Name_Display_String( channel.ChannelName, channel.ChannelNumber ),
                                                                 message.SourceName );

                    channel.Set_Gag_Status( message.TargetID, false );
                    break;

                case EChatNotification.New_Moderator:
                    if ( message.TargetName != null )
                    {
                        CClientResource.Output_Text( EClientTextID.Client_Chat_Channel_New_Moderator,
                                                                     message.TargetName,
                                                                     Build_Channel_Name_Display_String( channel.ChannelName, channel.ChannelNumber ) );
                    }
                    else
                    {
                        CClientResource.Output_Text( EClientTextID.Client_Chat_Channel_Unmoderated,
                                                                     Build_Channel_Name_Display_String( channel.ChannelName, channel.ChannelNumber ) );
                    }

                    channel.Set_Moderator( message.TargetID );
                    break;
            }
        }