#W# Initial Commit: Avatars Conquest
This commit is contained in:
commit
5df497787a
7510 changed files with 416048 additions and 0 deletions
548
Scripts/Engines/Chat/Channel.cs
Normal file
548
Scripts/Engines/Chat/Channel.cs
Normal file
|
|
@ -0,0 +1,548 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Server;
|
||||
|
||||
namespace Server.Engines.Chat
|
||||
{
|
||||
public class Channel
|
||||
{
|
||||
private string m_Name;
|
||||
private string m_Password;
|
||||
private List<ChatUser> m_Users, m_Banned, m_Moderators, m_Voices;
|
||||
private bool m_VoiceRestricted;
|
||||
private bool m_AlwaysAvailable;
|
||||
|
||||
public Channel( string name )
|
||||
{
|
||||
m_Name = name;
|
||||
|
||||
m_Users = new List<ChatUser>();
|
||||
m_Banned = new List<ChatUser>();
|
||||
m_Moderators = new List<ChatUser>();
|
||||
m_Voices = new List<ChatUser>();
|
||||
}
|
||||
|
||||
public Channel( string name, string password ) : this( name )
|
||||
{
|
||||
m_Password = password;
|
||||
}
|
||||
|
||||
public string Name
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_Name;
|
||||
}
|
||||
set
|
||||
{
|
||||
SendCommand( ChatCommand.RemoveChannel, m_Name );
|
||||
m_Name = value;
|
||||
SendCommand( ChatCommand.AddChannel, m_Name );
|
||||
SendCommand( ChatCommand.JoinedChannel, m_Name );
|
||||
}
|
||||
}
|
||||
|
||||
public string Password
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_Password;
|
||||
}
|
||||
set
|
||||
{
|
||||
string newValue = null;
|
||||
|
||||
if ( value != null )
|
||||
{
|
||||
newValue = value.Trim();
|
||||
|
||||
if ( String.IsNullOrEmpty( newValue ) )
|
||||
newValue = null;
|
||||
}
|
||||
|
||||
m_Password = newValue;
|
||||
}
|
||||
}
|
||||
|
||||
public bool Contains( ChatUser user )
|
||||
{
|
||||
return m_Users.Contains( user );
|
||||
}
|
||||
|
||||
public bool IsBanned( ChatUser user )
|
||||
{
|
||||
return m_Banned.Contains( user );
|
||||
}
|
||||
|
||||
public bool CanTalk( ChatUser user )
|
||||
{
|
||||
return ( !m_VoiceRestricted || m_Voices.Contains( user ) || m_Moderators.Contains( user ) );
|
||||
}
|
||||
|
||||
public bool IsModerator( ChatUser user )
|
||||
{
|
||||
return m_Moderators.Contains( user );
|
||||
}
|
||||
|
||||
public bool IsVoiced( ChatUser user )
|
||||
{
|
||||
return m_Voices.Contains( user );
|
||||
}
|
||||
|
||||
public bool ValidatePassword( string password )
|
||||
{
|
||||
return ( m_Password == null || Insensitive.Equals( m_Password, password ) );
|
||||
}
|
||||
|
||||
public bool ValidateModerator( ChatUser user )
|
||||
{
|
||||
if ( user != null && !IsModerator( user ) )
|
||||
{
|
||||
user.SendMessage( 29 ); // You must have operator status to do this.
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public bool ValidateAccess( ChatUser from, ChatUser target )
|
||||
{
|
||||
if ( from != null && target != null && from.Mobile.AccessLevel < target.Mobile.AccessLevel )
|
||||
{
|
||||
from.Mobile.SendMessage( "Your access level is too low to do this." );
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public bool AddUser( ChatUser user )
|
||||
{
|
||||
return AddUser( user, null );
|
||||
}
|
||||
|
||||
public bool AddUser( ChatUser user, string password )
|
||||
{
|
||||
if ( Contains( user ) )
|
||||
{
|
||||
user.SendMessage( 46, m_Name ); // You are already in the conference '%1'.
|
||||
return true;
|
||||
}
|
||||
else if ( IsBanned( user ) )
|
||||
{
|
||||
user.SendMessage( 64 ); // You have been banned from this conference.
|
||||
return false;
|
||||
}
|
||||
else if ( !ValidatePassword( password ) )
|
||||
{
|
||||
user.SendMessage( 34 ); // That is not the correct password.
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( user.CurrentChannel != null )
|
||||
user.CurrentChannel.RemoveUser( user ); // Remove them from their current channel first
|
||||
|
||||
ChatSystem.SendCommandTo( user.Mobile, ChatCommand.JoinedChannel, m_Name );
|
||||
|
||||
SendCommand( ChatCommand.AddUserToChannel, user.GetColorCharacter() + user.Username );
|
||||
|
||||
m_Users.Add( user );
|
||||
user.CurrentChannel = this;
|
||||
|
||||
if ( user.Mobile.AccessLevel >= AccessLevel.GameMaster || (!m_AlwaysAvailable && m_Users.Count == 1) )
|
||||
AddModerator( user );
|
||||
|
||||
SendUsersTo( user );
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
public void RemoveUser( ChatUser user )
|
||||
{
|
||||
if ( Contains( user ) )
|
||||
{
|
||||
m_Users.Remove( user );
|
||||
user.CurrentChannel = null;
|
||||
|
||||
if ( m_Moderators.Contains( user ) )
|
||||
m_Moderators.Remove( user );
|
||||
|
||||
if ( m_Voices.Contains( user ) )
|
||||
m_Voices.Remove( user );
|
||||
|
||||
SendCommand( ChatCommand.RemoveUserFromChannel, user, user.Username );
|
||||
ChatSystem.SendCommandTo( user.Mobile, ChatCommand.LeaveChannel );
|
||||
|
||||
if ( m_Users.Count == 0 && !m_AlwaysAvailable )
|
||||
RemoveChannel( this );
|
||||
}
|
||||
}
|
||||
|
||||
public void AdBan( ChatUser user )
|
||||
{
|
||||
AddBan( user, null );
|
||||
}
|
||||
|
||||
public void AddBan( ChatUser user, ChatUser moderator )
|
||||
{
|
||||
if ( !ValidateModerator( moderator ) || !ValidateAccess( moderator, user ) )
|
||||
return;
|
||||
|
||||
if ( !m_Banned.Contains( user ) )
|
||||
m_Banned.Add( user );
|
||||
|
||||
Kick( user, moderator, true );
|
||||
}
|
||||
|
||||
public void RemoveBan( ChatUser user )
|
||||
{
|
||||
if ( m_Banned.Contains( user ) )
|
||||
m_Banned.Remove( user );
|
||||
}
|
||||
|
||||
public void Kick( ChatUser user )
|
||||
{
|
||||
Kick( user, null );
|
||||
}
|
||||
|
||||
public void Kick( ChatUser user, ChatUser moderator )
|
||||
{
|
||||
Kick( user, moderator, false );
|
||||
}
|
||||
|
||||
public void Kick( ChatUser user, ChatUser moderator, bool wasBanned )
|
||||
{
|
||||
if ( !ValidateModerator( moderator ) || !ValidateAccess( moderator, user ) )
|
||||
return;
|
||||
|
||||
if ( Contains( user ) )
|
||||
{
|
||||
if ( moderator != null )
|
||||
{
|
||||
if ( wasBanned )
|
||||
user.SendMessage( 63, moderator.Username ); // %1, a conference moderator, has banned you from the conference.
|
||||
else
|
||||
user.SendMessage( 45, moderator.Username ); // %1, a conference moderator, has kicked you out of the conference.
|
||||
}
|
||||
|
||||
RemoveUser( user );
|
||||
ChatSystem.SendCommandTo( user.Mobile, ChatCommand.AddUserToChannel, user.GetColorCharacter() + user.Username );
|
||||
|
||||
SendMessage( 44, user.Username ) ; // %1 has been kicked out of the conference.
|
||||
}
|
||||
|
||||
if ( wasBanned && moderator != null )
|
||||
moderator.SendMessage( 62, user.Username ); // You are banning %1 from this conference.
|
||||
}
|
||||
|
||||
public bool VoiceRestricted
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_VoiceRestricted;
|
||||
}
|
||||
set
|
||||
{
|
||||
m_VoiceRestricted = value;
|
||||
|
||||
if ( value )
|
||||
SendMessage( 56 ); // From now on, only moderators will have speaking privileges in this conference by default.
|
||||
else
|
||||
SendMessage( 55 ); // From now on, everyone in the conference will have speaking privileges by default.
|
||||
}
|
||||
}
|
||||
|
||||
public bool AlwaysAvailable
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_AlwaysAvailable;
|
||||
}
|
||||
set
|
||||
{
|
||||
m_AlwaysAvailable = value;
|
||||
}
|
||||
}
|
||||
|
||||
public void AddVoiced( ChatUser user )
|
||||
{
|
||||
AddVoiced( user, null );
|
||||
}
|
||||
|
||||
public void AddVoiced( ChatUser user, ChatUser moderator )
|
||||
{
|
||||
if ( !ValidateModerator( moderator ) )
|
||||
return;
|
||||
|
||||
if ( !IsBanned( user ) && !IsModerator( user ) && !IsVoiced( user ) )
|
||||
{
|
||||
m_Voices.Add( user );
|
||||
|
||||
if ( moderator != null )
|
||||
user.SendMessage( 54, moderator.Username ); // %1, a conference moderator, has granted you speaking priviledges in this conference.
|
||||
|
||||
SendMessage( 52, user, user.Username ); // %1 now has speaking privileges in this conference.
|
||||
SendCommand( ChatCommand.AddUserToChannel, user, user.GetColorCharacter() + user.Username );
|
||||
}
|
||||
}
|
||||
|
||||
public void RemoveVoiced( ChatUser user, ChatUser moderator )
|
||||
{
|
||||
if ( !ValidateModerator( moderator ) || !ValidateAccess( moderator, user ) )
|
||||
return;
|
||||
|
||||
if ( !IsModerator( user ) && IsVoiced( user ) )
|
||||
{
|
||||
m_Voices.Remove( user );
|
||||
|
||||
if ( moderator != null )
|
||||
user.SendMessage( 53, moderator.Username ); // %1, a conference moderator, has removed your speaking priviledges for this conference.
|
||||
|
||||
SendMessage( 51, user, user.Username ); // %1 no longer has speaking privileges in this conference.
|
||||
SendCommand( ChatCommand.AddUserToChannel, user, user.GetColorCharacter() + user.Username );
|
||||
}
|
||||
}
|
||||
|
||||
public void AddModerator( ChatUser user )
|
||||
{
|
||||
AddModerator( user, null );
|
||||
}
|
||||
|
||||
public void AddModerator( ChatUser user, ChatUser moderator )
|
||||
{
|
||||
if ( !ValidateModerator( moderator ) )
|
||||
return;
|
||||
|
||||
if ( IsBanned( user ) || IsModerator( user ) )
|
||||
return;
|
||||
|
||||
if ( IsVoiced( user ) )
|
||||
m_Voices.Remove( user );
|
||||
|
||||
m_Moderators.Add( user );
|
||||
|
||||
if ( moderator != null )
|
||||
user.SendMessage( 50, moderator.Username ); // %1 has made you a conference moderator.
|
||||
|
||||
SendMessage( 48, user, user.Username ); // %1 is now a conference moderator.
|
||||
SendCommand( ChatCommand.AddUserToChannel, user.GetColorCharacter() + user.Username );
|
||||
}
|
||||
|
||||
public void RemoveModerator( ChatUser user )
|
||||
{
|
||||
RemoveModerator( user, null );
|
||||
}
|
||||
|
||||
public void RemoveModerator( ChatUser user, ChatUser moderator )
|
||||
{
|
||||
if ( !ValidateModerator( moderator ) || !ValidateAccess( moderator, user ) )
|
||||
return;
|
||||
|
||||
if ( IsModerator( user ) )
|
||||
{
|
||||
m_Moderators.Remove( user );
|
||||
|
||||
if ( moderator != null )
|
||||
user.SendMessage( 49, moderator.Username ); // %1 has removed you from the list of conference moderators.
|
||||
|
||||
SendMessage( 47, user, user.Username ); // %1 is no longer a conference moderator.
|
||||
SendCommand( ChatCommand.AddUserToChannel, user.GetColorCharacter() + user.Username );
|
||||
}
|
||||
}
|
||||
|
||||
public void SendMessage( int number )
|
||||
{
|
||||
SendMessage( number, null, null, null );
|
||||
}
|
||||
|
||||
public void SendMessage( int number, string param1 )
|
||||
{
|
||||
SendMessage( number, null, param1, null );
|
||||
}
|
||||
|
||||
public void SendMessage( int number, string param1, string param2 )
|
||||
{
|
||||
SendMessage( number, null, param1, param2 );
|
||||
}
|
||||
|
||||
public void SendMessage( int number, ChatUser initiator )
|
||||
{
|
||||
SendMessage( number, initiator, null, null );
|
||||
}
|
||||
|
||||
public void SendMessage( int number, ChatUser initiator, string param1 )
|
||||
{
|
||||
SendMessage( number, initiator, param1, null );
|
||||
}
|
||||
|
||||
public void SendMessage( int number, ChatUser initiator, string param1, string param2 )
|
||||
{
|
||||
for ( int i = 0; i < m_Users.Count; ++i )
|
||||
{
|
||||
ChatUser user = m_Users[i];
|
||||
|
||||
if ( user == initiator )
|
||||
continue;
|
||||
|
||||
if ( user.CheckOnline() )
|
||||
user.SendMessage( number, param1, param2 );
|
||||
else if ( !Contains( user ) )
|
||||
--i;
|
||||
}
|
||||
}
|
||||
|
||||
public void SendIgnorableMessage( int number, ChatUser from, string param1, string param2 )
|
||||
{
|
||||
for ( int i = 0; i < m_Users.Count; ++i )
|
||||
{
|
||||
ChatUser user = m_Users[i];
|
||||
|
||||
if ( user.IsIgnored( from ) )
|
||||
continue;
|
||||
|
||||
if ( user.CheckOnline() )
|
||||
user.SendMessage( number, from.Mobile, param1, param2 );
|
||||
else if ( !Contains( user ) )
|
||||
--i;
|
||||
}
|
||||
}
|
||||
|
||||
public void SendCommand( ChatCommand command )
|
||||
{
|
||||
SendCommand( command, null, null, null );
|
||||
}
|
||||
|
||||
public void SendCommand( ChatCommand command, string param1 )
|
||||
{
|
||||
SendCommand( command, null, param1, null );
|
||||
}
|
||||
|
||||
public void SendCommand( ChatCommand command, string param1, string param2 )
|
||||
{
|
||||
SendCommand( command, null, param1, param2 );
|
||||
}
|
||||
|
||||
public void SendCommand( ChatCommand command, ChatUser initiator )
|
||||
{
|
||||
SendCommand( command, initiator, null, null );
|
||||
}
|
||||
|
||||
public void SendCommand( ChatCommand command, ChatUser initiator, string param1 )
|
||||
{
|
||||
SendCommand( command, initiator, param1, null );
|
||||
}
|
||||
|
||||
public void SendCommand( ChatCommand command, ChatUser initiator, string param1, string param2 )
|
||||
{
|
||||
for ( int i = 0; i < m_Users.Count; ++i )
|
||||
{
|
||||
ChatUser user = m_Users[i];
|
||||
|
||||
if ( user == initiator )
|
||||
continue;
|
||||
|
||||
if ( user.CheckOnline() )
|
||||
ChatSystem.SendCommandTo( user.Mobile, command, param1, param2 );
|
||||
else if ( !Contains( user ) )
|
||||
--i;
|
||||
}
|
||||
}
|
||||
|
||||
public void SendUsersTo( ChatUser to )
|
||||
{
|
||||
for ( int i = 0; i < m_Users.Count; ++i )
|
||||
{
|
||||
ChatUser user = m_Users[i];
|
||||
|
||||
ChatSystem.SendCommandTo( to.Mobile, ChatCommand.AddUserToChannel, user.GetColorCharacter() + user.Username );
|
||||
}
|
||||
}
|
||||
|
||||
private static List<Channel> m_Channels = new List<Channel>();
|
||||
|
||||
public static List<Channel> Channels
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_Channels;
|
||||
}
|
||||
}
|
||||
|
||||
public static void SendChannelsTo( ChatUser user )
|
||||
{
|
||||
for ( int i = 0; i < m_Channels.Count; ++i )
|
||||
{
|
||||
Channel channel = m_Channels[i];
|
||||
|
||||
if ( !channel.IsBanned( user ) )
|
||||
ChatSystem.SendCommandTo( user.Mobile, ChatCommand.AddChannel, channel.Name, "0" );
|
||||
}
|
||||
}
|
||||
|
||||
public static Channel AddChannel( string name )
|
||||
{
|
||||
return AddChannel( name, null );
|
||||
}
|
||||
|
||||
public static Channel AddChannel( string name, string password )
|
||||
{
|
||||
Channel channel = FindChannelByName( name );
|
||||
|
||||
if ( channel == null )
|
||||
{
|
||||
channel = new Channel( name, password );
|
||||
m_Channels.Add( channel );
|
||||
}
|
||||
|
||||
ChatUser.GlobalSendCommand( ChatCommand.AddChannel, name, "0" ) ;
|
||||
|
||||
return channel;
|
||||
}
|
||||
|
||||
public static void RemoveChannel( string name )
|
||||
{
|
||||
RemoveChannel( FindChannelByName( name ) );
|
||||
}
|
||||
|
||||
public static void RemoveChannel( Channel channel )
|
||||
{
|
||||
if ( channel == null )
|
||||
return;
|
||||
|
||||
if ( m_Channels.Contains( channel ) && channel.m_Users.Count == 0 )
|
||||
{
|
||||
ChatUser.GlobalSendCommand( ChatCommand.RemoveChannel, channel.Name ) ;
|
||||
|
||||
channel.m_Moderators.Clear();
|
||||
channel.m_Voices.Clear();
|
||||
|
||||
m_Channels.Remove( channel );
|
||||
}
|
||||
}
|
||||
|
||||
public static Channel FindChannelByName( string name )
|
||||
{
|
||||
for ( int i = 0; i < m_Channels.Count; ++i )
|
||||
{
|
||||
Channel channel = m_Channels[i];
|
||||
|
||||
if ( channel.m_Name == name )
|
||||
return channel;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public static void Initialize()
|
||||
{
|
||||
AddStaticChannel( "Newbie Help" );
|
||||
}
|
||||
|
||||
public static void AddStaticChannel( string name )
|
||||
{
|
||||
AddChannel( name ).AlwaysAvailable = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue