rendered paste bodyusing System;
using System.Collections;
using Server.Multis;
using Server.Mobiles;
using Server.Network;
namespace Server.Items
{
[DynamicFliping]
[Flipable(0x9A8, 0xE80)]
public class PetJailBox : LockableContainer
{
private int m_ReleaseFee;
public override int DefaultGumpID { get { return 0x4B; } }
public override int DefaultDropSound { get { return 0x42; } }
[CommandProperty(AccessLevel.GameMaster)]
public int ReleaseFee
{
get {return m_ReleaseFee; }
set { m_ReleaseFee = value; InvalidateProperties(); }
}
public override Rectangle2D Bounds
{
get { return new Rectangle2D(16, 51, 168, 73); }
}
[Constructable]
public PetJailBox() : base(0x9A8)
{
Weight = 3.0; // TODO: Real weight
ReleaseFee = 300000;
}
public PetJailBox(Serial serial) : base(serial)
{
}
public override void OnDoubleClick(Mobile from)
{
if (from.AccessLevel > AccessLevel.Counselor )
Open(from); // GameMaster and higher opens the box
else if (from.AccessLevel > AccessLevel.Player || from.InRange(this.GetWorldLocation(), 2))
Server.Gumps.PetJailGump.OpenJailList(from,this,m_ReleaseFee); // Councelors and Players get a gump with their pets listed
else
from.LocalOverheadMessage(MessageType.Regular, 0x3B2, 1019045); // I can't reach that.
}
public override bool TryDropItem(Mobile from, Item dropped, bool sendFullMessage)
{
if (!(dropped is Xanthos.Evo.ShrinkItem))
{
from.SendMessage("Only shrunken pets may be placed in jail.");
return false;
}
DropItem(dropped);
return true;
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write((int)1); // version
writer.Write((int)m_ReleaseFee);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
switch(version){
case 1:
m_ReleaseFee = reader.ReadInt();
break;
}
}
}
}
namespace Server.Gumps
{
public class PetJailGump : Gump
{
[Description( "Lists all jailed pets within container." )]
public static void OpenJailList( Mobile from, Item box, int Fee )
{
from.SendGump( new PetJailGump( from, box, Fee) );
}
#region declarations
public static bool OldStyle = PropsConfig.OldStyle;
public const int GumpOffsetX = PropsConfig.GumpOffsetX;
public const int GumpOffsetY = PropsConfig.GumpOffsetY;
public const int TextHue = PropsConfig.TextHue;
public const int TextOffsetX = PropsConfig.TextOffsetX;
public const int OffsetGumpID = PropsConfig.OffsetGumpID;
public const int HeaderGumpID = PropsConfig.HeaderGumpID;
public const int EntryGumpID = PropsConfig.EntryGumpID;
public const int BackGumpID = PropsConfig.BackGumpID;
public const int SetGumpID = PropsConfig.SetGumpID;
public const int SetWidth = PropsConfig.SetWidth;
public const int SetOffsetX = PropsConfig.SetOffsetX, SetOffsetY = PropsConfig.SetOffsetY;
public const int SetButtonID1 = PropsConfig.SetButtonID1;
public const int SetButtonID2 = PropsConfig.SetButtonID2;
public const int PrevWidth = PropsConfig.PrevWidth;
public const int PrevOffsetX = PropsConfig.PrevOffsetX, PrevOffsetY = PropsConfig.PrevOffsetY;
public const int PrevButtonID1 = PropsConfig.PrevButtonID1;
public const int PrevButtonID2 = PropsConfig.PrevButtonID2;
public const int NextWidth = PropsConfig.NextWidth;
public const int NextOffsetX = PropsConfig.NextOffsetX, NextOffsetY = PropsConfig.NextOffsetY;
public const int NextButtonID1 = PropsConfig.NextButtonID1;
public const int NextButtonID2 = PropsConfig.NextButtonID2;
public const int OffsetSize = PropsConfig.OffsetSize;
public const int EntryHeight = PropsConfig.EntryHeight;
public const int BorderSize = PropsConfig.BorderSize;
private static bool PrevLabel = false, NextLabel = false;
private const int PrevLabelOffsetX = PrevWidth + 1;
private const int PrevLabelOffsetY = 0;
private const int NextLabelOffsetX = -29;
private const int NextLabelOffsetY = 0;
private const int EntryWidth = 180;
private const int EntryCount = 15;
private const int TotalWidth = OffsetSize + EntryWidth + OffsetSize + SetWidth + OffsetSize;
private const int TotalHeight = OffsetSize + ((EntryHeight + OffsetSize) * (EntryCount + 1));
private const int BackWidth = BorderSize + TotalWidth + BorderSize;
private const int BackHeight = BorderSize + TotalHeight + BorderSize;
private Mobile m_Owner;
private ArrayList m_Mobiles;
private int m_Page;
private int m_fee = 0;
#endregion
public PetJailGump(Mobile owner, Item box, int Fee) : this(owner, BuildList(owner, box), 0, Fee)
{
}
public PetJailGump( Mobile owner, ArrayList list, int page, int Fee) : base( GumpOffsetX, GumpOffsetY )
{
owner.CloseGump( typeof( PetJailGump ) );
m_Owner = owner;
m_Mobiles = list;
m_fee = Fee;
Initialize( page);
}
public static ArrayList BuildList( Mobile owner, Item box )
{
ArrayList list = new ArrayList();
if (box.Items.Count == 0)
return list;
ArrayList itemlist = box.Items;
for ( int i = 0; i < itemlist.Count; ++i )
{
Xanthos.Evo.ShrinkItem m = (Xanthos.Evo.ShrinkItem)itemlist[i];
if ( m != null && m.Visible && m.Owner == owner )
list.Add( m );
}
return list;
}
public void Initialize(int page)
{
m_Page = page;
int count = m_Mobiles.Count - (page * EntryCount);
if ( count < 0 )
count = 0;
else if ( count > EntryCount )
count = EntryCount;
int totalHeight = OffsetSize + ((EntryHeight + OffsetSize) * (count + 1));
AddPage( 0 );
AddBackground( 0, 0, BackWidth, BorderSize + totalHeight + BorderSize, BackGumpID );
AddImageTiled( BorderSize, BorderSize, TotalWidth - (OldStyle ? SetWidth + OffsetSize : 0), totalHeight, OffsetGumpID );
int x = BorderSize + OffsetSize;
int y = BorderSize + OffsetSize;
int emptyWidth = TotalWidth - PrevWidth - NextWidth - (OffsetSize * 4) - (OldStyle ? SetWidth + OffsetSize : 0);
if ( !OldStyle )
AddImageTiled( x - (OldStyle ? OffsetSize : 0), y, emptyWidth + (OldStyle ? OffsetSize * 2 : 0), EntryHeight, EntryGumpID );
AddLabel( x + TextOffsetX, y, TextHue, String.Format( "Page {0} of {1} ({2})", page+1, (m_Mobiles.Count + EntryCount - 1) / EntryCount, m_Mobiles.Count ) );
x += emptyWidth + OffsetSize;
if ( OldStyle )
AddImageTiled( x, y, TotalWidth - (OffsetSize * 3) - SetWidth, EntryHeight, HeaderGumpID );
else
AddImageTiled( x, y, PrevWidth, EntryHeight, HeaderGumpID );
if ( page > 0 )
{
AddButton( x + PrevOffsetX, y + PrevOffsetY, PrevButtonID1, PrevButtonID2, 1, GumpButtonType.Reply, 0 );
if ( PrevLabel )
AddLabel( x + PrevLabelOffsetX, y + PrevLabelOffsetY, TextHue, "Previous" );
}
x += PrevWidth + OffsetSize;
if ( !OldStyle )
AddImageTiled( x, y, NextWidth, EntryHeight, HeaderGumpID );
if ( (page + 1) * EntryCount < m_Mobiles.Count )
{
AddButton( x + NextOffsetX, y + NextOffsetY, NextButtonID1, NextButtonID2, 2, GumpButtonType.Reply, 1 );
if ( NextLabel )
AddLabel( x + NextLabelOffsetX, y + NextLabelOffsetY, TextHue, "Next" );
}
for ( int i = 0, index = page * EntryCount; i < EntryCount && index < m_Mobiles.Count; ++i, ++index )
{
Xanthos.Evo.ShrinkItem m = (Xanthos.Evo.ShrinkItem)m_Mobiles[index];
x = BorderSize + OffsetSize;
y += EntryHeight + OffsetSize;
AddImageTiled( x, y, EntryWidth, EntryHeight, EntryGumpID );
AddLabelCropped(x + TextOffsetX, y, EntryWidth - TextOffsetX, EntryHeight, 0x58, m.Deleted ? "(deleted)" : m.ShrunkenPet.Name);
x += EntryWidth + OffsetSize;
if ( SetGumpID != 0 )
AddImageTiled( x, y, SetWidth, EntryHeight, SetGumpID );
AddButton( x + SetOffsetX, y + SetOffsetY, SetButtonID1, SetButtonID2, i + 3, GumpButtonType.Reply, 0 );
}
}
public override void OnResponse( NetState state, RelayInfo info )
{
Mobile from = state.Mobile;
switch ( info.ButtonID )
{
case 0: // Closed
{
return;
}
case 1: // Previous
{
if ( m_Page > 0 )
from.SendGump( new PetJailGump( from, m_Mobiles, m_Page - 1 , m_fee ) );
break;
}
case 2: // Next
{
if ( (m_Page + 1) * EntryCount < m_Mobiles.Count )
from.SendGump( new PetJailGump( from, m_Mobiles, m_Page + 1, m_fee ) );
break;
}
default:
{
int index = (m_Page * EntryCount) + (info.ButtonID - 3);
if ( index >= 0 && index < m_Mobiles.Count )
{
Xanthos.Evo.ShrinkItem m = (Xanthos.Evo.ShrinkItem)m_Mobiles[index];
if ( m.Deleted )
{
from.SendMessage( "That has been deleted." );
from.SendGump( new PetJailGump( from, m_Mobiles, m_Page, m_fee ) );
}
else if ( m.Visible )
{
if (m.Owner == from)
{
if (from.Backpack.ConsumeTotal(typeof(Gold), m_fee))
{
from.AddToBackpack(m);
return;
}
if (from.BankBox.ConsumeTotal(typeof(Gold), m_fee))
{
from.AddToBackpack(m);
return;
}
from.SendMessage("You cannot afford to release this pet.");
}
else
{
from.SendMessage("That is not your pet.");
}
}
else
{
from.SendMessage( "You cannot see that." );
from.SendGump( new PetJailGump( from, m_Mobiles, m_Page, m_fee ) );
}
}
break;
}
}
}
}
}