Kod:
using System;
using System.Reflection;
using System.Collections;
using Server.Network;
using Server.Prompts;
using Server.Multis;
using Server.Multis.Deeds;
using Server.Items;
namespace Server.Gumps
{
public class HouseListGump : Gump
{
private BaseHouse m_House;
public HouseListGump( int number, ArrayList list, BaseHouse house, bool accountOf ) : base( 20, 30 )
{
if ( house.Deleted )
return;
m_House = house;
AddPage( 0 );
AddBackground( 0, 0, 420, 430, 5054 );
AddBackground( 10, 10, 400, 410, 3000 );
AddButton( 20, 388, 4005, 4007, 0, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 55, 388, 300, 20, 1011104, false, false ); // Return to previous menu
AddHtmlLocalized( 20, 20, 350, 20, number, false, false );
if ( list != null )
{
for ( int i = 0; i < list.Count; ++i )
{
if ( (i % 16) == 0 )
{
if ( i != 0 )
{
// Next button
AddButton( 370, 20, 4005, 4007, 0, GumpButtonType.Page, (i / 16) + 1 );
}
AddPage( (i / 16) + 1 );
if ( i != 0 )
{
// Previous button
AddButton( 340, 20, 4014, 4016, 0, GumpButtonType.Page, i / 16 );
}
}
Mobile m = (Mobile)list[i];
string name;
if ( m == null || (name = m.Name) == null || (name = name.Trim()).Length <= 0 )
continue;
AddLabel( 55, 55 + ((i % 16) * 20), 0, accountOf && m.Player && m.Account != null ? String.Format( "Account of {0}", name ) : name );
}
}
}
public override void OnResponse( NetState state, RelayInfo info )
{
if ( m_House.Deleted )
return;
Mobile from = state.Mobile;
from.SendGump( new HouseGump( from, m_House ) );
}
}
public class HouseRemoveGump : Gump
{
private BaseHouse m_House;
private ArrayList m_List, m_Copy;
private int m_Number;
private bool m_AccountOf;
public HouseRemoveGump( int number, ArrayList list, BaseHouse house, bool accountOf ) : base( 20, 30 )
{
if ( house.Deleted )
return;
m_House = house;
m_List = list;
m_Number = number;
m_AccountOf = accountOf;
AddPage( 0 );
AddBackground( 0, 0, 420, 430, 5054 );
AddBackground( 10, 10, 400, 410, 3000 );
AddButton( 20, 388, 4005, 4007, 0, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 55, 388, 300, 20, 1011104, false, false ); // Return to previous menu
AddButton( 20, 365, 4005, 4007, 1, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 55, 365, 300, 20, 1011270, false, false ); // Remove now!
AddHtmlLocalized( 20, 20, 350, 20, number, false, false );
if ( list != null )
{
m_Copy = new ArrayList( list );
for ( int i = 0; i < list.Count; ++i )
{
if ( (i % 15) == 0 )
{
if ( i != 0 )
{
// Next button
AddButton( 370, 20, 4005, 4007, 0, GumpButtonType.Page, (i / 15) + 1 );
}
AddPage( (i / 15) + 1 );
if ( i != 0 )
{
// Previous button
AddButton( 340, 20, 4014, 4016, 0, GumpButtonType.Page, i / 15 );
}
}
Mobile m = (Mobile)list[i];
string name;
if ( m == null || (name = m.Name) == null || (name = name.Trim()).Length <= 0 )
continue;
AddCheck( 34, 52 + ((i % 15) * 20), 0xD2, 0xD3, false, i );
AddLabel( 55, 52 + ((i % 15) * 20), 0, accountOf && m.Player && m.Account != null ? String.Format( "Account of {0}", name ) : name );
}
}
}
public override void OnResponse( NetState state, RelayInfo info )
{
if ( m_House.Deleted )
return;
Mobile from = state.Mobile;
if ( m_List != null && info.ButtonID == 1 ) // Remove now
{
int[] switches = info.Switches;
if ( switches.Length > 0 )
{
for ( int i = 0; i < switches.Length; ++i )
{
int index = switches[i];
if ( index >= 0 && index < m_Copy.Count )
m_List.Remove( m_Copy[index] );
}
if ( m_List.Count > 0 )
{
from.CloseGump( typeof( HouseGump ) );
from.CloseGump( typeof( HouseListGump ) );
from.CloseGump( typeof( HouseRemoveGump ) );
from.SendGump( new HouseRemoveGump( m_Number, m_List, m_House, m_AccountOf ) );
return;
}
}
}
from.SendGump( new HouseGump( from, m_House ) );
}
}
public class HouseGump : Gump
{
private BaseHouse m_House;
private ArrayList Wrap( string value )
{
if ( value == null || (value = value.Trim()).Length <= 0 )
return null;
string[] values = value.Split( ' ' );
ArrayList list = new ArrayList();
string current = "";
for ( int i = 0; i < values.Length; ++i )
{
string val = values[i];
string v = current.Length == 0 ? val : current + ' ' + val;
if ( v.Length < 10 )
{
current = v;
}
else if ( v.Length == 10 )
{
list.Add( v );
if ( list.Count == 6 )
return list;
current = "";
}
else if ( val.Length <= 10 )
{
list.Add( current );
if ( list.Count == 6 )
return list;
current = val;
}
else
{
while ( v.Length >= 10 )
{
list.Add( v.Substring( 0, 10 ) );
if ( list.Count == 6 )
return list;
v = v.Substring( 10 );
}
current = v;
}
}
if ( current.Length > 0 )
list.Add( current );
return list;
}
public HouseGump( Mobile from, BaseHouse house ) : base( 20, 30 )
{
if ( house.Deleted )
return;
m_House = house;
from.CloseGump( typeof( HouseGump ) );
from.CloseGump( typeof( HouseListGump ) );
from.CloseGump( typeof( HouseRemoveGump ) );
bool isCombatRestricted = house.IsCombatRestricted( from );
bool isOwner = m_House.IsOwner( from );
bool isCoOwner = isOwner || m_House.IsCoOwner( from );
bool isFriend = isCoOwner || m_House.IsFriend( from );
if ( isCombatRestricted )
isFriend = isCoOwner = isOwner = false;
AddPage( 0 );
if ( isFriend )
{
AddBackground( 0, 0, 420, 430, 5054 );
AddBackground( 10, 10, 400,410, 3000 );
}
AddImage( 130, 0, 100 );
if ( m_House.Sign != null )
{
ArrayList lines = Wrap( m_House.Sign.GetName() );
if ( lines != null )
{
for ( int i = 0, y = (101 - (lines.Count * 14)) / 2; i < lines.Count; ++i, y += 14 )
{
string s = (string)lines[i];
AddLabel( 130 + ((143 - (s.Length * 8)) / 2), y, 0, s );
}
}
}
if ( !isFriend )
return;
AddHtmlLocalized( 55, 103, 75, 20, 1011233, false, false ); // INFO
AddButton( 20, 103, 4005, 4007, 0, GumpButtonType.Page, 1 );
AddHtmlLocalized( 170, 103, 75, 20, 1011234, false, false ); // FRIENDS
AddButton( 135, 103, 4005, 4007, 0, GumpButtonType.Page, 2 );
AddHtmlLocalized( 295, 103, 75, 20, 1011235, false, false ); // OPTIONS
AddButton( 260, 103, 4005, 4007, 0, GumpButtonType.Page, 3 );
AddHtmlLocalized( 295, 390, 75, 20, 1011441, false, false ); // EXIT
AddButton( 260, 390, 4005, 4007, 0, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 55, 390, 200, 20, 1011236, false, false ); // Change this house's name!
AddButton( 20, 390, 4005, 4007, 1, GumpButtonType.Reply, 0 );
// Info page
AddPage( 1 );
AddHtmlLocalized( 20, 135, 100, 20, 1011242, false, false ); // Owned by:
AddHtml( 120, 135, 100, 20, GetOwnerName(), false, false );
AddHtmlLocalized( 20, 170, 275, 20, 1011237, false, false ); // Number of locked down items:
AddHtml( 320, 170, 50, 20, m_House.LockDownCount.ToString(), false, false );
AddHtmlLocalized( 20, 190, 275, 20, 1011238, false, false ); // Maximum locked down items:
AddHtml( 320, 190, 50, 20, m_House.MaxLockDowns.ToString(), false, false );
AddHtmlLocalized( 20, 210, 275, 20, 1011239, false, false ); // Number of secure containers:
AddHtml( 320, 210, 50, 20, m_House.SecureCount.ToString(), false, false );
AddHtmlLocalized( 20, 230, 275, 20, 1011240, false, false ); // Maximum number of secure containers:
AddHtml( 320, 230, 50, 20, m_House.MaxSecures.ToString(), false, false );
AddHtmlLocalized( 20, 260, 400, 20, 1018032, false, false ); // This house is properly placed.
AddHtmlLocalized( 20, 280, 400, 20, 1018035, false, false ); // This house is of modern design.
if ( m_House.Public )
{
// TODO: Validate exact placement
AddHtmlLocalized( 20, 305, 275, 20, 1011241, false, false ); // Number of visits this building has had
AddHtml( 320, 305, 50, 20, m_House.Visits.ToString(), false, false );
}
// Friends page
AddPage( 2 );
AddHtmlLocalized( 45, 130, 150, 20, 1011266, false, false ); // List of co-owners
AddButton( 20, 130, 2714, 2715, 2, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 45, 150, 150, 20, 1011267, false, false ); // Add a co-owner
AddButton( 20, 150, 2714, 2715, 3, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 45, 170, 150, 20, 1018036, false, false ); // Remove a co-owner
AddButton( 20, 170, 2714, 2715, 4, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 45, 190, 150, 20, 1011268, false, false ); // Clear co-owner list
AddButton( 20, 190, 2714, 2715, 5, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 225, 130, 155, 20, 1011243, false, false ); // List of Friends
AddButton( 200, 130, 2714, 2715, 6, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 225, 150, 155, 20, 1011244, false, false ); // Add a Friend
AddButton( 200, 150, 2714, 2715, 7, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 225, 170, 155, 20, 1018037, false, false ); // Remove a Friend
AddButton( 200, 170, 2714, 2715, 8, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 225, 190, 155, 20, 1011245, false, false ); // Clear Friends list
AddButton( 200, 190, 2714, 2715, 9, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 120, 215, 280, 20, 1011258, false, false ); // Ban someone from the house
AddButton( 95, 215, 2714, 2715, 10, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 120, 235, 280, 20, 1011259, false, false ); // Eject someone from the house
AddButton( 95, 235, 2714, 2715, 11, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 120, 255, 280, 20, 1011260, false, false ); // View a list of banned people
AddButton( 95, 255, 2714, 2715, 12, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 120, 275, 280, 20, 1011261, false, false ); // Lift a ban
AddButton( 95, 275, 2714, 2715, 13, GumpButtonType.Reply, 0 );
// Options page
AddPage( 3 );
AddHtmlLocalized( 45, 150, 355, 30, 1011248, false, false ); // Transfer ownership of the house
AddButton( 20, 150, 2714, 2715, 14, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 45, 180, 355, 30, 1011249, false, false ); // Demolish house and get deed back
AddButton( 20, 180, 2714, 2715, 15, GumpButtonType.Reply, 0 );
if ( !m_House.Public )
{
AddHtmlLocalized( 45, 210, 355, 30, 1011247, false, false ); // Change the house locks
AddButton( 20, 210, 2714, 2715, 16, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 45, 240, 350, 90, 1011253, false, false ); // Declare this building to be public. This will make your front door unlockable.
AddButton( 20, 240, 2714, 2715, 17, GumpButtonType.Reply, 0 );
}
else
{
//AddHtmlLocalized( 45, 280, 350, 30, 1011250, false, false ); // Change the sign type
AddHtmlLocalized( 45, 210, 350, 30, 1011250, false, false ); // Change the sign type
AddButton( 20, 210, 2714, 2715, 0, GumpButtonType.Page, 4 );
AddHtmlLocalized( 45, 240, 350, 30, 1011252, false, false ); // Declare this building to be private.
AddButton( 20, 240, 2714, 2715, 17, GumpButtonType.Reply, 0 );
// Change the sign type
AddPage( 4 );
for ( int i = 0; i < 24; ++i )
{
AddRadio( 53 + ((i / 4) * 50), 137 + ((i % 4) * 35), 210, 211, false, i + 1 );
AddItem( 60 + ((i / 4) * 50), 130 + ((i % 4) * 35), 2980 + (i * 2) );
}
AddHtmlLocalized( 200, 305, 129, 20, 1011254, false, false ); // Guild sign choices
AddButton( 350, 305, 252, 253, 0, GumpButtonType.Page, 5 );
AddHtmlLocalized( 200, 340, 355, 30, 1011277, false, false ); // Okay that is fine.
AddButton( 350, 340, 4005, 4007, 18, GumpButtonType.Reply, 0 );
AddPage( 5 );
for ( int i = 0; i < 29; ++i )
{
AddRadio( 53 + ((i / 5) * 50), 137 + ((i % 5) * 35), 210, 211, false, i + 25 );
AddItem( 60 + ((i / 5) * 50), 130 + ((i % 5) * 35), 3028 + (i * 2) );
}
AddHtmlLocalized( 200, 305, 129, 20, 1011255, false, false ); // Shop sign choices
AddButton( 350, 305, 250, 251, 0, GumpButtonType.Page, 4 );
AddHtmlLocalized( 200, 340, 355, 30, 1011277, false, false ); // Okay that is fine.
AddButton( 350, 340, 4005, 4007, 18, GumpButtonType.Reply, 0 );
}
}
private string GetOwnerName()
{
Mobile m = m_House.Owner;
if ( m == null )
return "(unowned)";
string name;
if ( (name = m.Name) == null || (name = name.Trim()).Length <= 0 )
name = "(no name)";
return name;
}
public override void OnResponse( NetState sender, RelayInfo info )
{
if ( m_House.Deleted )
return;
Mobile from = sender.Mobile;
bool isCombatRestricted = m_House.IsCombatRestricted( from );
bool isOwner = m_House.IsOwner( from );
bool isCoOwner = isOwner || m_House.IsCoOwner( from );
bool isFriend = isCoOwner || m_House.IsFriend( from );
if ( isCombatRestricted )
isFriend = isCoOwner = isOwner = false;
if ( !isFriend || !from.Alive )
return;
Item sign = m_House.Sign;
if ( sign == null || from.Map != sign.Map || !from.InRange( sign.GetWorldLocation(), 18 ) )
return;
switch ( info.ButtonID )
{
case 1: // Rename sign
{
from.Prompt = new RenamePrompt( m_House );
from.SendLocalizedMessage( 501302 ); // What dost thou wish the sign to say?
break;
}
case 2: // List of co-owners
{
from.CloseGump( typeof( HouseGump ) );
from.CloseGump( typeof( HouseListGump ) );
from.CloseGump( typeof( HouseRemoveGump ) );
from.SendGump( new HouseListGump( 1011275, m_House.CoOwners, m_House, false ) );
break;
}
case 3: // Add co-owner
{
if ( isOwner )
{
from.SendLocalizedMessage( 501328 ); // Target the person you wish to name a co-owner of your household.
from.Target = new CoOwnerTarget( true, m_House );
}
else
{
from.SendLocalizedMessage( 501327 ); // Only the house owner may add Co-owners.
}
break;
}
case 4: // Remove co-owner
{
if ( isOwner )
{
from.CloseGump( typeof( HouseGump ) );
from.CloseGump( typeof( HouseListGump ) );
from.CloseGump( typeof( HouseRemoveGump ) );
from.SendGump( new HouseRemoveGump( 1011274, m_House.CoOwners, m_House, false ) );
}
else
{
from.SendLocalizedMessage( 501329 ); // Only the house owner may remove co-owners.
}
break;
}
case 5: // Clear co-owners
{
if ( isOwner )
{
if ( m_House.CoOwners != null )
m_House.CoOwners.Clear();
from.SendLocalizedMessage( 501333 ); // All co-owners have been removed from this house.
}
else
{
from.SendLocalizedMessage( 501330 ); // Only the house owner may remove co-owners.
}
break;
}
case 6: // List friends
{
from.CloseGump( typeof( HouseGump ) );
from.CloseGump( typeof( HouseListGump ) );
from.CloseGump( typeof( HouseRemoveGump ) );
from.SendGump( new HouseListGump( 1011273, m_House.Friends, m_House, false ) );
break;
}
case 7: // Add friend
{
if ( isCoOwner )
{
from.SendLocalizedMessage( 501317 ); // Target the person you wish to name a friend of your household.
from.Target = new HouseFriendTarget( true, m_House );
}
else
{
from.SendLocalizedMessage( 501316 ); // Only the house owner may add friends.
}
break;
}
case 8: // Remove friend
{
if ( isCoOwner )
{
from.CloseGump( typeof( HouseGump ) );
from.CloseGump( typeof( HouseListGump ) );
from.CloseGump( typeof( HouseRemoveGump ) );
from.SendGump( new HouseRemoveGump( 1011272, m_House.Friends, m_House, false ) );
}
else
{
from.SendLocalizedMessage( 501318 ); // Only the house owner may remove friends.
}
break;
}
case 9: // Clear friends
{
if ( isCoOwner )
{
if ( m_House.Friends != null )
m_House.Friends.Clear();
from.SendLocalizedMessage( 501332 ); // All friends have been removed from this house.
}
else
{
from.SendLocalizedMessage( 501319 ); // Only the house owner may remove friends.
}
break;
}
case 10: // Ban
{
from.SendLocalizedMessage( 501325 ); // Target the individual to ban from this house.
from.Target = new HouseBanTarget( true, m_House );
break;
}
case 11: // Eject
{
from.SendLocalizedMessage( 501326 ); // Target the individual to eject from this house.
from.Target = new HouseKickTarget( m_House );
break;
}
case 12: // List bans
{
from.CloseGump( typeof( HouseGump ) );
from.CloseGump( typeof( HouseListGump ) );
from.CloseGump( typeof( HouseRemoveGump ) );
from.SendGump( new HouseListGump( 1011271, m_House.Bans, m_House, true ) );
break;
}
case 13: // Remove ban
{
from.CloseGump( typeof( HouseGump ) );
from.CloseGump( typeof( HouseListGump ) );
from.CloseGump( typeof( HouseRemoveGump ) );
from.SendGump( new HouseRemoveGump( 1011269, m_House.Bans, m_House, true ) );
break;
}
case 14: // Transfer ownership
{
if ( isOwner )
{
from.SendLocalizedMessage( 501309 ); // Target the person to whom you wish to give this house.
from.Target = new HouseOwnerTarget( m_House );
}
else
{
from.SendLocalizedMessage( 501310 ); // Only the house owner may do this.
}
break;
}
case 15: // Demolish house
{
if ( isOwner )
{
if ( !Guilds.Guild.NewGuildSystem && m_House.FindGuildstone() != null )
{
from.SendLocalizedMessage( 501389 ); // You cannot redeed a house with a guildstone inside.
}
else
{
from.CloseGump( typeof( HouseDemolishGump ) );
from.SendGump( new HouseDemolishGump( from, m_House ) );
}
}
else
{
from.SendLocalizedMessage( 501320 ); // Only the house owner may do this.
}
break;
}
case 16: // Change locks
{
if ( m_House.Public )
{
from.SendLocalizedMessage( 501669 );// Public houses are always unlocked.
}
else
{
if ( isOwner )
{
m_House.RemoveKeys( from );
m_House.ChangeLocks( from );
from.SendLocalizedMessage( 501306 ); // The locks on your front door have been changed, and new master keys have been placed in your bank and your backpack.
}
else
{
from.SendLocalizedMessage( 501303 ); // Only the house owner may change the house locks.
}
}
break;
}
case 17: // Declare public/private
{
if ( isOwner )
{
if ( m_House.Public && m_House.PlayerVendors.Count > 0 )
{
from.SendLocalizedMessage( 501887 ); // You have vendors working out of this building. It cannot be declared private until there are no vendors in place.
break;
}
m_House.Public = !m_House.Public;
if ( !m_House.Public )
{
m_House.ChangeLocks( from );
from.SendLocalizedMessage( 501888 ); // This house is now private.
from.SendLocalizedMessage( 501306 ); // The locks on your front door have been changed, and new master keys have been placed in your bank and your backpack.
}
else
{
m_House.RemoveKeys( from );
m_House.RemoveLocks();
from.SendLocalizedMessage( 501886 );//This house is now public. Friends of the house my now have vendors working out of this building.
}
}
else
{
from.SendLocalizedMessage( 501307 ); // Only the house owner may do this.
}
break;
}
case 18: // Change type
{
if ( isOwner )
{
if ( m_House.Public && info.Switches.Length > 0 )
{
int index = info.Switches[0] - 1;
if ( index >= 0 && index < 53 )
m_House.ChangeSignType( 2980 + (index * 2) );
}
}
else
{
from.SendLocalizedMessage( 501307 ); // Only the house owner may do this.
}
break;
}
}
}
}
}
namespace Server.Prompts
{
public class RenamePrompt : Prompt
{
private BaseHouse m_House;
public RenamePrompt( BaseHouse house )
{
m_House = house;
}
public override void OnResponse( Mobile from, string text )
{
if ( m_House.IsFriend( from ) )
{
if ( m_House.Sign != null )
m_House.Sign.Name = text;
from.SendMessage( "Sign changed." );
}
}
}
}
using System.Reflection;
using System.Collections;
using Server.Network;
using Server.Prompts;
using Server.Multis;
using Server.Multis.Deeds;
using Server.Items;
namespace Server.Gumps
{
public class HouseListGump : Gump
{
private BaseHouse m_House;
public HouseListGump( int number, ArrayList list, BaseHouse house, bool accountOf ) : base( 20, 30 )
{
if ( house.Deleted )
return;
m_House = house;
AddPage( 0 );
AddBackground( 0, 0, 420, 430, 5054 );
AddBackground( 10, 10, 400, 410, 3000 );
AddButton( 20, 388, 4005, 4007, 0, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 55, 388, 300, 20, 1011104, false, false ); // Return to previous menu
AddHtmlLocalized( 20, 20, 350, 20, number, false, false );
if ( list != null )
{
for ( int i = 0; i < list.Count; ++i )
{
if ( (i % 16) == 0 )
{
if ( i != 0 )
{
// Next button
AddButton( 370, 20, 4005, 4007, 0, GumpButtonType.Page, (i / 16) + 1 );
}
AddPage( (i / 16) + 1 );
if ( i != 0 )
{
// Previous button
AddButton( 340, 20, 4014, 4016, 0, GumpButtonType.Page, i / 16 );
}
}
Mobile m = (Mobile)list[i];
string name;
if ( m == null || (name = m.Name) == null || (name = name.Trim()).Length <= 0 )
continue;
AddLabel( 55, 55 + ((i % 16) * 20), 0, accountOf && m.Player && m.Account != null ? String.Format( "Account of {0}", name ) : name );
}
}
}
public override void OnResponse( NetState state, RelayInfo info )
{
if ( m_House.Deleted )
return;
Mobile from = state.Mobile;
from.SendGump( new HouseGump( from, m_House ) );
}
}
public class HouseRemoveGump : Gump
{
private BaseHouse m_House;
private ArrayList m_List, m_Copy;
private int m_Number;
private bool m_AccountOf;
public HouseRemoveGump( int number, ArrayList list, BaseHouse house, bool accountOf ) : base( 20, 30 )
{
if ( house.Deleted )
return;
m_House = house;
m_List = list;
m_Number = number;
m_AccountOf = accountOf;
AddPage( 0 );
AddBackground( 0, 0, 420, 430, 5054 );
AddBackground( 10, 10, 400, 410, 3000 );
AddButton( 20, 388, 4005, 4007, 0, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 55, 388, 300, 20, 1011104, false, false ); // Return to previous menu
AddButton( 20, 365, 4005, 4007, 1, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 55, 365, 300, 20, 1011270, false, false ); // Remove now!
AddHtmlLocalized( 20, 20, 350, 20, number, false, false );
if ( list != null )
{
m_Copy = new ArrayList( list );
for ( int i = 0; i < list.Count; ++i )
{
if ( (i % 15) == 0 )
{
if ( i != 0 )
{
// Next button
AddButton( 370, 20, 4005, 4007, 0, GumpButtonType.Page, (i / 15) + 1 );
}
AddPage( (i / 15) + 1 );
if ( i != 0 )
{
// Previous button
AddButton( 340, 20, 4014, 4016, 0, GumpButtonType.Page, i / 15 );
}
}
Mobile m = (Mobile)list[i];
string name;
if ( m == null || (name = m.Name) == null || (name = name.Trim()).Length <= 0 )
continue;
AddCheck( 34, 52 + ((i % 15) * 20), 0xD2, 0xD3, false, i );
AddLabel( 55, 52 + ((i % 15) * 20), 0, accountOf && m.Player && m.Account != null ? String.Format( "Account of {0}", name ) : name );
}
}
}
public override void OnResponse( NetState state, RelayInfo info )
{
if ( m_House.Deleted )
return;
Mobile from = state.Mobile;
if ( m_List != null && info.ButtonID == 1 ) // Remove now
{
int[] switches = info.Switches;
if ( switches.Length > 0 )
{
for ( int i = 0; i < switches.Length; ++i )
{
int index = switches[i];
if ( index >= 0 && index < m_Copy.Count )
m_List.Remove( m_Copy[index] );
}
if ( m_List.Count > 0 )
{
from.CloseGump( typeof( HouseGump ) );
from.CloseGump( typeof( HouseListGump ) );
from.CloseGump( typeof( HouseRemoveGump ) );
from.SendGump( new HouseRemoveGump( m_Number, m_List, m_House, m_AccountOf ) );
return;
}
}
}
from.SendGump( new HouseGump( from, m_House ) );
}
}
public class HouseGump : Gump
{
private BaseHouse m_House;
private ArrayList Wrap( string value )
{
if ( value == null || (value = value.Trim()).Length <= 0 )
return null;
string[] values = value.Split( ' ' );
ArrayList list = new ArrayList();
string current = "";
for ( int i = 0; i < values.Length; ++i )
{
string val = values[i];
string v = current.Length == 0 ? val : current + ' ' + val;
if ( v.Length < 10 )
{
current = v;
}
else if ( v.Length == 10 )
{
list.Add( v );
if ( list.Count == 6 )
return list;
current = "";
}
else if ( val.Length <= 10 )
{
list.Add( current );
if ( list.Count == 6 )
return list;
current = val;
}
else
{
while ( v.Length >= 10 )
{
list.Add( v.Substring( 0, 10 ) );
if ( list.Count == 6 )
return list;
v = v.Substring( 10 );
}
current = v;
}
}
if ( current.Length > 0 )
list.Add( current );
return list;
}
public HouseGump( Mobile from, BaseHouse house ) : base( 20, 30 )
{
if ( house.Deleted )
return;
m_House = house;
from.CloseGump( typeof( HouseGump ) );
from.CloseGump( typeof( HouseListGump ) );
from.CloseGump( typeof( HouseRemoveGump ) );
bool isCombatRestricted = house.IsCombatRestricted( from );
bool isOwner = m_House.IsOwner( from );
bool isCoOwner = isOwner || m_House.IsCoOwner( from );
bool isFriend = isCoOwner || m_House.IsFriend( from );
if ( isCombatRestricted )
isFriend = isCoOwner = isOwner = false;
AddPage( 0 );
if ( isFriend )
{
AddBackground( 0, 0, 420, 430, 5054 );
AddBackground( 10, 10, 400,410, 3000 );
}
AddImage( 130, 0, 100 );
if ( m_House.Sign != null )
{
ArrayList lines = Wrap( m_House.Sign.GetName() );
if ( lines != null )
{
for ( int i = 0, y = (101 - (lines.Count * 14)) / 2; i < lines.Count; ++i, y += 14 )
{
string s = (string)lines[i];
AddLabel( 130 + ((143 - (s.Length * 8)) / 2), y, 0, s );
}
}
}
if ( !isFriend )
return;
AddHtmlLocalized( 55, 103, 75, 20, 1011233, false, false ); // INFO
AddButton( 20, 103, 4005, 4007, 0, GumpButtonType.Page, 1 );
AddHtmlLocalized( 170, 103, 75, 20, 1011234, false, false ); // FRIENDS
AddButton( 135, 103, 4005, 4007, 0, GumpButtonType.Page, 2 );
AddHtmlLocalized( 295, 103, 75, 20, 1011235, false, false ); // OPTIONS
AddButton( 260, 103, 4005, 4007, 0, GumpButtonType.Page, 3 );
AddHtmlLocalized( 295, 390, 75, 20, 1011441, false, false ); // EXIT
AddButton( 260, 390, 4005, 4007, 0, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 55, 390, 200, 20, 1011236, false, false ); // Change this house's name!
AddButton( 20, 390, 4005, 4007, 1, GumpButtonType.Reply, 0 );
// Info page
AddPage( 1 );
AddHtmlLocalized( 20, 135, 100, 20, 1011242, false, false ); // Owned by:
AddHtml( 120, 135, 100, 20, GetOwnerName(), false, false );
AddHtmlLocalized( 20, 170, 275, 20, 1011237, false, false ); // Number of locked down items:
AddHtml( 320, 170, 50, 20, m_House.LockDownCount.ToString(), false, false );
AddHtmlLocalized( 20, 190, 275, 20, 1011238, false, false ); // Maximum locked down items:
AddHtml( 320, 190, 50, 20, m_House.MaxLockDowns.ToString(), false, false );
AddHtmlLocalized( 20, 210, 275, 20, 1011239, false, false ); // Number of secure containers:
AddHtml( 320, 210, 50, 20, m_House.SecureCount.ToString(), false, false );
AddHtmlLocalized( 20, 230, 275, 20, 1011240, false, false ); // Maximum number of secure containers:
AddHtml( 320, 230, 50, 20, m_House.MaxSecures.ToString(), false, false );
AddHtmlLocalized( 20, 260, 400, 20, 1018032, false, false ); // This house is properly placed.
AddHtmlLocalized( 20, 280, 400, 20, 1018035, false, false ); // This house is of modern design.
if ( m_House.Public )
{
// TODO: Validate exact placement
AddHtmlLocalized( 20, 305, 275, 20, 1011241, false, false ); // Number of visits this building has had
AddHtml( 320, 305, 50, 20, m_House.Visits.ToString(), false, false );
}
// Friends page
AddPage( 2 );
AddHtmlLocalized( 45, 130, 150, 20, 1011266, false, false ); // List of co-owners
AddButton( 20, 130, 2714, 2715, 2, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 45, 150, 150, 20, 1011267, false, false ); // Add a co-owner
AddButton( 20, 150, 2714, 2715, 3, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 45, 170, 150, 20, 1018036, false, false ); // Remove a co-owner
AddButton( 20, 170, 2714, 2715, 4, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 45, 190, 150, 20, 1011268, false, false ); // Clear co-owner list
AddButton( 20, 190, 2714, 2715, 5, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 225, 130, 155, 20, 1011243, false, false ); // List of Friends
AddButton( 200, 130, 2714, 2715, 6, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 225, 150, 155, 20, 1011244, false, false ); // Add a Friend
AddButton( 200, 150, 2714, 2715, 7, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 225, 170, 155, 20, 1018037, false, false ); // Remove a Friend
AddButton( 200, 170, 2714, 2715, 8, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 225, 190, 155, 20, 1011245, false, false ); // Clear Friends list
AddButton( 200, 190, 2714, 2715, 9, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 120, 215, 280, 20, 1011258, false, false ); // Ban someone from the house
AddButton( 95, 215, 2714, 2715, 10, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 120, 235, 280, 20, 1011259, false, false ); // Eject someone from the house
AddButton( 95, 235, 2714, 2715, 11, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 120, 255, 280, 20, 1011260, false, false ); // View a list of banned people
AddButton( 95, 255, 2714, 2715, 12, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 120, 275, 280, 20, 1011261, false, false ); // Lift a ban
AddButton( 95, 275, 2714, 2715, 13, GumpButtonType.Reply, 0 );
// Options page
AddPage( 3 );
AddHtmlLocalized( 45, 150, 355, 30, 1011248, false, false ); // Transfer ownership of the house
AddButton( 20, 150, 2714, 2715, 14, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 45, 180, 355, 30, 1011249, false, false ); // Demolish house and get deed back
AddButton( 20, 180, 2714, 2715, 15, GumpButtonType.Reply, 0 );
if ( !m_House.Public )
{
AddHtmlLocalized( 45, 210, 355, 30, 1011247, false, false ); // Change the house locks
AddButton( 20, 210, 2714, 2715, 16, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 45, 240, 350, 90, 1011253, false, false ); // Declare this building to be public. This will make your front door unlockable.
AddButton( 20, 240, 2714, 2715, 17, GumpButtonType.Reply, 0 );
}
else
{
//AddHtmlLocalized( 45, 280, 350, 30, 1011250, false, false ); // Change the sign type
AddHtmlLocalized( 45, 210, 350, 30, 1011250, false, false ); // Change the sign type
AddButton( 20, 210, 2714, 2715, 0, GumpButtonType.Page, 4 );
AddHtmlLocalized( 45, 240, 350, 30, 1011252, false, false ); // Declare this building to be private.
AddButton( 20, 240, 2714, 2715, 17, GumpButtonType.Reply, 0 );
// Change the sign type
AddPage( 4 );
for ( int i = 0; i < 24; ++i )
{
AddRadio( 53 + ((i / 4) * 50), 137 + ((i % 4) * 35), 210, 211, false, i + 1 );
AddItem( 60 + ((i / 4) * 50), 130 + ((i % 4) * 35), 2980 + (i * 2) );
}
AddHtmlLocalized( 200, 305, 129, 20, 1011254, false, false ); // Guild sign choices
AddButton( 350, 305, 252, 253, 0, GumpButtonType.Page, 5 );
AddHtmlLocalized( 200, 340, 355, 30, 1011277, false, false ); // Okay that is fine.
AddButton( 350, 340, 4005, 4007, 18, GumpButtonType.Reply, 0 );
AddPage( 5 );
for ( int i = 0; i < 29; ++i )
{
AddRadio( 53 + ((i / 5) * 50), 137 + ((i % 5) * 35), 210, 211, false, i + 25 );
AddItem( 60 + ((i / 5) * 50), 130 + ((i % 5) * 35), 3028 + (i * 2) );
}
AddHtmlLocalized( 200, 305, 129, 20, 1011255, false, false ); // Shop sign choices
AddButton( 350, 305, 250, 251, 0, GumpButtonType.Page, 4 );
AddHtmlLocalized( 200, 340, 355, 30, 1011277, false, false ); // Okay that is fine.
AddButton( 350, 340, 4005, 4007, 18, GumpButtonType.Reply, 0 );
}
}
private string GetOwnerName()
{
Mobile m = m_House.Owner;
if ( m == null )
return "(unowned)";
string name;
if ( (name = m.Name) == null || (name = name.Trim()).Length <= 0 )
name = "(no name)";
return name;
}
public override void OnResponse( NetState sender, RelayInfo info )
{
if ( m_House.Deleted )
return;
Mobile from = sender.Mobile;
bool isCombatRestricted = m_House.IsCombatRestricted( from );
bool isOwner = m_House.IsOwner( from );
bool isCoOwner = isOwner || m_House.IsCoOwner( from );
bool isFriend = isCoOwner || m_House.IsFriend( from );
if ( isCombatRestricted )
isFriend = isCoOwner = isOwner = false;
if ( !isFriend || !from.Alive )
return;
Item sign = m_House.Sign;
if ( sign == null || from.Map != sign.Map || !from.InRange( sign.GetWorldLocation(), 18 ) )
return;
switch ( info.ButtonID )
{
case 1: // Rename sign
{
from.Prompt = new RenamePrompt( m_House );
from.SendLocalizedMessage( 501302 ); // What dost thou wish the sign to say?
break;
}
case 2: // List of co-owners
{
from.CloseGump( typeof( HouseGump ) );
from.CloseGump( typeof( HouseListGump ) );
from.CloseGump( typeof( HouseRemoveGump ) );
from.SendGump( new HouseListGump( 1011275, m_House.CoOwners, m_House, false ) );
break;
}
case 3: // Add co-owner
{
if ( isOwner )
{
from.SendLocalizedMessage( 501328 ); // Target the person you wish to name a co-owner of your household.
from.Target = new CoOwnerTarget( true, m_House );
}
else
{
from.SendLocalizedMessage( 501327 ); // Only the house owner may add Co-owners.
}
break;
}
case 4: // Remove co-owner
{
if ( isOwner )
{
from.CloseGump( typeof( HouseGump ) );
from.CloseGump( typeof( HouseListGump ) );
from.CloseGump( typeof( HouseRemoveGump ) );
from.SendGump( new HouseRemoveGump( 1011274, m_House.CoOwners, m_House, false ) );
}
else
{
from.SendLocalizedMessage( 501329 ); // Only the house owner may remove co-owners.
}
break;
}
case 5: // Clear co-owners
{
if ( isOwner )
{
if ( m_House.CoOwners != null )
m_House.CoOwners.Clear();
from.SendLocalizedMessage( 501333 ); // All co-owners have been removed from this house.
}
else
{
from.SendLocalizedMessage( 501330 ); // Only the house owner may remove co-owners.
}
break;
}
case 6: // List friends
{
from.CloseGump( typeof( HouseGump ) );
from.CloseGump( typeof( HouseListGump ) );
from.CloseGump( typeof( HouseRemoveGump ) );
from.SendGump( new HouseListGump( 1011273, m_House.Friends, m_House, false ) );
break;
}
case 7: // Add friend
{
if ( isCoOwner )
{
from.SendLocalizedMessage( 501317 ); // Target the person you wish to name a friend of your household.
from.Target = new HouseFriendTarget( true, m_House );
}
else
{
from.SendLocalizedMessage( 501316 ); // Only the house owner may add friends.
}
break;
}
case 8: // Remove friend
{
if ( isCoOwner )
{
from.CloseGump( typeof( HouseGump ) );
from.CloseGump( typeof( HouseListGump ) );
from.CloseGump( typeof( HouseRemoveGump ) );
from.SendGump( new HouseRemoveGump( 1011272, m_House.Friends, m_House, false ) );
}
else
{
from.SendLocalizedMessage( 501318 ); // Only the house owner may remove friends.
}
break;
}
case 9: // Clear friends
{
if ( isCoOwner )
{
if ( m_House.Friends != null )
m_House.Friends.Clear();
from.SendLocalizedMessage( 501332 ); // All friends have been removed from this house.
}
else
{
from.SendLocalizedMessage( 501319 ); // Only the house owner may remove friends.
}
break;
}
case 10: // Ban
{
from.SendLocalizedMessage( 501325 ); // Target the individual to ban from this house.
from.Target = new HouseBanTarget( true, m_House );
break;
}
case 11: // Eject
{
from.SendLocalizedMessage( 501326 ); // Target the individual to eject from this house.
from.Target = new HouseKickTarget( m_House );
break;
}
case 12: // List bans
{
from.CloseGump( typeof( HouseGump ) );
from.CloseGump( typeof( HouseListGump ) );
from.CloseGump( typeof( HouseRemoveGump ) );
from.SendGump( new HouseListGump( 1011271, m_House.Bans, m_House, true ) );
break;
}
case 13: // Remove ban
{
from.CloseGump( typeof( HouseGump ) );
from.CloseGump( typeof( HouseListGump ) );
from.CloseGump( typeof( HouseRemoveGump ) );
from.SendGump( new HouseRemoveGump( 1011269, m_House.Bans, m_House, true ) );
break;
}
case 14: // Transfer ownership
{
if ( isOwner )
{
from.SendLocalizedMessage( 501309 ); // Target the person to whom you wish to give this house.
from.Target = new HouseOwnerTarget( m_House );
}
else
{
from.SendLocalizedMessage( 501310 ); // Only the house owner may do this.
}
break;
}
case 15: // Demolish house
{
if ( isOwner )
{
if ( !Guilds.Guild.NewGuildSystem && m_House.FindGuildstone() != null )
{
from.SendLocalizedMessage( 501389 ); // You cannot redeed a house with a guildstone inside.
}
else
{
from.CloseGump( typeof( HouseDemolishGump ) );
from.SendGump( new HouseDemolishGump( from, m_House ) );
}
}
else
{
from.SendLocalizedMessage( 501320 ); // Only the house owner may do this.
}
break;
}
case 16: // Change locks
{
if ( m_House.Public )
{
from.SendLocalizedMessage( 501669 );// Public houses are always unlocked.
}
else
{
if ( isOwner )
{
m_House.RemoveKeys( from );
m_House.ChangeLocks( from );
from.SendLocalizedMessage( 501306 ); // The locks on your front door have been changed, and new master keys have been placed in your bank and your backpack.
}
else
{
from.SendLocalizedMessage( 501303 ); // Only the house owner may change the house locks.
}
}
break;
}
case 17: // Declare public/private
{
if ( isOwner )
{
if ( m_House.Public && m_House.PlayerVendors.Count > 0 )
{
from.SendLocalizedMessage( 501887 ); // You have vendors working out of this building. It cannot be declared private until there are no vendors in place.
break;
}
m_House.Public = !m_House.Public;
if ( !m_House.Public )
{
m_House.ChangeLocks( from );
from.SendLocalizedMessage( 501888 ); // This house is now private.
from.SendLocalizedMessage( 501306 ); // The locks on your front door have been changed, and new master keys have been placed in your bank and your backpack.
}
else
{
m_House.RemoveKeys( from );
m_House.RemoveLocks();
from.SendLocalizedMessage( 501886 );//This house is now public. Friends of the house my now have vendors working out of this building.
}
}
else
{
from.SendLocalizedMessage( 501307 ); // Only the house owner may do this.
}
break;
}
case 18: // Change type
{
if ( isOwner )
{
if ( m_House.Public && info.Switches.Length > 0 )
{
int index = info.Switches[0] - 1;
if ( index >= 0 && index < 53 )
m_House.ChangeSignType( 2980 + (index * 2) );
}
}
else
{
from.SendLocalizedMessage( 501307 ); // Only the house owner may do this.
}
break;
}
}
}
}
}
namespace Server.Prompts
{
public class RenamePrompt : Prompt
{
private BaseHouse m_House;
public RenamePrompt( BaseHouse house )
{
m_House = house;
}
public override void OnResponse( Mobile from, string text )
{
if ( m_House.IsFriend( from ) )
{
if ( m_House.Sign != null )
m_House.Sign.Name = text;
from.SendMessage( "Sign changed." );
}
}
}
}
Yorumlar
Henüz yorum yapılmamıştır.
|
OylamalarOylama :![]()
Üyelerin oylama ortalaması (10 dışında) : Henüz Oylanmamış
Oylar: 0 |
Benzer Sayfalar
| Sayfalar | Yorumlar | Gönderen | Tarih |
| House sistemi | 0 | Mrs.xariyla | 04-03-2012 |
| House Crafting | 0 | aldarson | 26-06-2010 |
| Gump Studio 1.8 | 0 | basic | 27-01-2010 |
| Gump tooltip art is wrong size | 0 | MagLor | 31-10-2009 |
| House Builder r5 | 0 | TheRaskol | 05-09-2009 |







