using System;
using Addon;
namespace MW3_TextChatMute
{
public class TextChatMute : CPlugin
{
System.Collections.
Generic.
List<Player
> MuteDb
= new System.Collections.
Generic.
List<Player
>(); System.Timers.
Timer Timer
= new System.Timers.
Timer();
// Start the timer and show the server owner that the plugin is loaded
public override void OnServerLoad()
{
Timer.Interval = 10000;
Timer.
Elapsed += new System.Timers.
ElapsedEventHandler( Timer_Elapsed
); Timer.Enabled = true;
Timer.Start();
ServerLog( LogType.LogData, "TextChatMute v1 loaded" );
ServerPrint( "TextChatMute v1 loaded" );
}
// Check every 10 seconds if the player is still ingame, if not then delete him from the database
void Timer_Elapsed( object sender, System.Timers.ElapsedEventArgs e )
{
foreach ( Player player in MuteDb )
if ( !IsStillIngame( player.Client ) )
DeletePlayer( player );
}
// Fix for removing players because I cannot delete them in a foreach loop o_O
void DeletePlayer( Player player )
{
MuteDb.Remove( player );
ServerLog( LogType.LogData, "DEBUG: Removed mutelist for: " + player.Client.Name );
player.Client = null;
player.Muted = null;
player = null;
}
// Check if the player is still ingame
bool IsStillIngame( ServerClient client )
{
foreach ( ServerClient player in GetClients() )
if ( client == player )
return true;
return false;
}
// Add the player to the mute database
public override void OnPlayerConnect( ServerClient Client )
{
MuteDb.
Add( new Player
( Client
) ); ServerLog( LogType.LogData, "DEBUG: Added mutelist for: " + Client.Name );
}
public override ChatType OnSay( string Message, ServerClient Client )
{
// Mute a player
if ( Message.StartsWith( "!mute" ) )
{
if ( Message.Length <= 6 )
TellClient( Client.ClientNum, "^3Usage: !mute [Playername]", true );
else if ( GetClientByName( Message.Substring( 6 ) ) != null )
GetPlayerMute( Client ).AddMute( GetClientByName( Message.Substring( 6 ) ) );
else
TellClient( Client.ClientNum, "^3There was no player found!", true );
return ChatType.ChatContinue;
}
// Unmute a player
else if ( Message.StartsWith( "!unmute" ) )
{
if ( Message.Length <= 6 )
TellClient( Client.ClientNum, "^3Usage: !unmute [Playername]", true );
else if ( GetClientByName( Message.Substring( 6 ) ) != null )
GetPlayerMute( Client ).RemoveMute( GetClientByName( Message.Substring( 6 ) ) );
else
TellClient( Client.ClientNum, "^3There was no player found!", true );
return ChatType.ChatContinue;
}
// Show muted players
else if ( Message.StartsWith( "!mutelist" ) )
{
string s = "^3Muted: ";
foreach ( Player player in MuteDb )
if ( player.Client == Client )
foreach ( ServerClient client in player.Muted )
s += client.Name + ", ";
TellClient( Client.ClientNum, s, true );
return ChatType.ChatContinue;
}
// Show the text to everyone that didn't mute this Client
foreach ( Player player in MuteDb )
if ( !player.IsMuted( Client ) )
TellClient( player.Client.ClientNum, Message, true );
return ChatType.ChatContinue;
}
// Get the 'Player' class for this client
Player GetPlayerMute( ServerClient client )
{
foreach ( Player player in MuteDb )
if ( player.Client == client )
return player;
return null;
}
// Get the 'ServerClient' for this player(name)
ServerClient GetClientByName( string name )
{
foreach ( ServerClient client in GetClients() )
if ( client.Name.StartsWith( name, StringComparison.InvariantCultureIgnoreCase )
|| client.Name.EndsWith( name, StringComparison.InvariantCultureIgnoreCase ) )
return client;
return null;
}
}
public class Player
{
public ServerClient Client;
public System.Collections.
Generic.
List<ServerClient
> Muted
= new System.Collections.
Generic.
List<ServerClient
>(); public Player( ServerClient client ) { Client = client; }
public bool IsMuted( ServerClient client ) { return Muted.Contains( client ); }
public void AddMute( ServerClient client ) { Muted.Add( client ); }
public void RemoveMute( ServerClient client ) { Muted.Remove( client ); }
}
}