AvatarsConquest/Scripts/Engines/Guilds/New Guild System/GuildRosterGump.cs

239 lines
No EOL
7 KiB
C#

using System;
using Server;
using Server.Gumps;
using Server.Network;
using Server.Mobiles;
using System.Collections;
using Server.Targets;
using System.Collections.Generic;
namespace Server.Guilds
{
public class GuildRosterGump : BaseGuildListGump<PlayerMobile>
{
#region Comparers
private class NameComparer : IComparer<PlayerMobile>
{
public static readonly IComparer<PlayerMobile> Instance = new NameComparer();
public NameComparer()
{
}
public int Compare( PlayerMobile x, PlayerMobile y )
{
if ( x == null && y == null )
return 0;
else if ( x == null )
return -1;
else if ( y == null )
return 1;
return Insensitive.Compare( x.Name, y.Name );
}
}
private class LastOnComparer : IComparer<PlayerMobile>
{
public static readonly IComparer<PlayerMobile> Instance = new LastOnComparer();
public LastOnComparer()
{
}
public int Compare( PlayerMobile x, PlayerMobile y )
{
if ( x == null && y == null )
return 0;
else if ( x == null )
return -1;
else if ( y == null )
return 1;
NetState aState = x.NetState;
NetState bState = y.NetState;
if ( aState == null && bState == null )
return x.LastOnline.CompareTo( y.LastOnline );
else if ( aState == null )
return 1;
else if ( bState == null )
return -1;
else
return 0;
}
}
private class TitleComparer : IComparer<PlayerMobile>
{
public static readonly IComparer<PlayerMobile> Instance = new TitleComparer();
public TitleComparer()
{
}
public int Compare( PlayerMobile x, PlayerMobile y )
{
if ( x == null && y == null )
return 0;
else if ( x == null )
return -1;
else if ( y == null )
return 1;
return Insensitive.Compare( x.GuildTitle, y.GuildTitle );
}
}
private class RankComparer : IComparer<PlayerMobile>
{
public static readonly IComparer<PlayerMobile> Instance = new RankComparer();
public RankComparer()
{
}
public int Compare( PlayerMobile x, PlayerMobile y )
{
if ( x == null && y == null )
return 0;
else if ( x == null )
return -1;
else if ( y == null )
return 1;
return x.GuildRank.Rank.CompareTo( y.GuildRank.Rank );
}
}
#endregion
private static InfoField<PlayerMobile>[] m_Fields =
new InfoField<PlayerMobile>[]
{
new InfoField<PlayerMobile>( 1062955, 130, GuildRosterGump.NameComparer.Instance ), //Name
new InfoField<PlayerMobile>( 1062956, 80, GuildRosterGump.RankComparer.Instance ), //Rank
new InfoField<PlayerMobile>( 1062952, 80, GuildRosterGump.LastOnComparer.Instance), //Last On
new InfoField<PlayerMobile>( 1062953, 150, GuildRosterGump.TitleComparer.Instance ) //Guild Title
};
public GuildRosterGump( PlayerMobile pm, Guild g ) : this( pm, g, GuildRosterGump.LastOnComparer.Instance, true, "", 0 )
{
}
public GuildRosterGump( PlayerMobile pm, Guild g, IComparer<PlayerMobile> currentComparer, bool ascending, string filter, int startNumber )
: base( pm, g, Utility.SafeConvertList<Mobile, PlayerMobile>( g.Members ), currentComparer, ascending, filter, startNumber, m_Fields )
{
PopulateGump();
}
public override void PopulateGump()
{
base.PopulateGump();
AddHtmlLocalized( 266, 43, 110, 26, 1062974, 0xF, false, false ); // Guild Roster
}
public override void DrawEndingEntry( int itemNumber )
{
AddBackground( 225, 148 + itemNumber * 28, 150, 26, 0x2486 );
AddButton( 230, 153 + itemNumber * 28, 0x845, 0x846, 8, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 255, 151 + itemNumber * 28, 110, 26, 1062992, 0x0, false, false ); // Invite Player
}
protected override TextDefinition[] GetValuesFor( PlayerMobile pm, int aryLength )
{
TextDefinition[] defs = new TextDefinition[aryLength];
string name = String.Format( "{0}{1}", pm.Name, ( player.GuildFealty == pm && player.GuildFealty != guild.Leader ) ? " *" : "" );
if( pm == player )
name = Color( name, 0x006600 );
else if( pm.NetState != null )
name = Color( name, 0x000066 );
defs[0] = name;
defs[1] = pm.GuildRank.Name;
defs[2] = (pm.NetState != null) ? new TextDefinition( 1063015 ): new TextDefinition( pm.LastOnline.ToString( "yyyy-MM-dd" ) );
defs[3] = (pm.GuildTitle == null) ? "" : pm.GuildTitle;
return defs;
}
protected override bool IsFiltered( PlayerMobile pm, string filter )
{
if( pm == null )
return true;
return !Insensitive.Contains( pm.Name, filter );
}
public override Gump GetResentGump( PlayerMobile pm, Guild g, IComparer<PlayerMobile> comparer, bool ascending, string filter, int startNumber )
{
return new GuildRosterGump( pm, g, comparer, ascending, filter, startNumber );
}
public override Gump GetObjectInfoGump( PlayerMobile pm, Guild g, PlayerMobile o )
{
return new GuildMemberInfoGump( pm, g, o, false, false ) ;
}
public override void OnResponse( NetState sender, RelayInfo info )
{
base.OnResponse( sender, info );
PlayerMobile pm = sender.Mobile as PlayerMobile;
if( pm == null || !IsMember( pm, guild ) )
return;
if( info.ButtonID == 8 )
{
if( pm.GuildRank.GetFlag( RankFlags.CanInvitePlayer ) )
{
pm.SendLocalizedMessage( 1063048 ); // Whom do you wish to invite into your guild?
pm.BeginTarget( -1, false, Targeting.TargetFlags.None, new TargetStateCallback( InvitePlayer_Callback ), guild );
}
else
pm.SendLocalizedMessage( 503301 ); // You don't have permission to do that.
}
}
public void InvitePlayer_Callback( Mobile from, object targeted, object state )
{
PlayerMobile pm = from as PlayerMobile;
PlayerMobile targ = targeted as PlayerMobile;
Guild g = state as Guild;
if( pm == null || !IsMember( pm, guild ) || !pm.GuildRank.GetFlag( RankFlags.CanInvitePlayer ) )
{
pm.SendLocalizedMessage( 503301 ); // You don't have permission to do that.
}
else if( targ == null )
{
pm.SendLocalizedMessage( 1063334 ); // That isn't a valid player.
}
else if( !targ.AcceptGuildInvites )
{
pm.SendLocalizedMessage( 1063049, targ.Name ); // ~1_val~ is not accepting guild invitations.
}
else if( g.IsMember( targ ) )
{
pm.SendLocalizedMessage( 1063050, targ.Name ); // ~1_val~ is already a member of your guild!
}
else if( targ.Guild != null )
{
pm.SendLocalizedMessage( 1063051, targ.Name ); // ~1_val~ is already a member of a guild.
}
else if( targ.HasGump( typeof( BaseGuildGump ) ) || targ.HasGump( typeof( CreateGuildGump ) )) //TODO: Check message if CreateGuildGump Open
{
pm.SendLocalizedMessage( 1063052, targ.Name ); // ~1_val~ is currently considering another guild invitation.
}
else
{
pm.SendLocalizedMessage( 1063053, targ.Name ); // You invite ~1_val~ to join your guild.
targ.SendGump( new GuildInvitationRequest( targ, guild, pm ) );
}
}
}
}