Overwrite
Complete Overwrite of the Folder with the free shard. ServUO 57.3 has been added.
This commit is contained in:
110
Scripts/Services/BulkOrders/Books/BOBFilter.cs
Normal file
110
Scripts/Services/BulkOrders/Books/BOBFilter.cs
Normal file
@@ -0,0 +1,110 @@
|
||||
using System;
|
||||
|
||||
namespace Server.Engines.BulkOrders
|
||||
{
|
||||
public class BOBFilter
|
||||
{
|
||||
private int m_Type;
|
||||
private int m_Quality;
|
||||
private int m_Material;
|
||||
private int m_Quantity;
|
||||
|
||||
public BOBFilter()
|
||||
{
|
||||
}
|
||||
|
||||
public BOBFilter(GenericReader reader)
|
||||
{
|
||||
int version = reader.ReadEncodedInt();
|
||||
|
||||
switch ( version )
|
||||
{
|
||||
case 1:
|
||||
{
|
||||
this.m_Type = reader.ReadEncodedInt();
|
||||
this.m_Quality = reader.ReadEncodedInt();
|
||||
this.m_Material = reader.ReadEncodedInt();
|
||||
this.m_Quantity = reader.ReadEncodedInt();
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public bool IsDefault
|
||||
{
|
||||
get
|
||||
{
|
||||
return (this.m_Type == 0 && this.m_Quality == 0 && this.m_Material == 0 && this.m_Quantity == 0);
|
||||
}
|
||||
}
|
||||
public int Type
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.m_Type;
|
||||
}
|
||||
set
|
||||
{
|
||||
this.m_Type = value;
|
||||
}
|
||||
}
|
||||
public int Quality
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.m_Quality;
|
||||
}
|
||||
set
|
||||
{
|
||||
this.m_Quality = value;
|
||||
}
|
||||
}
|
||||
public int Material
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.m_Material;
|
||||
}
|
||||
set
|
||||
{
|
||||
this.m_Material = value;
|
||||
}
|
||||
}
|
||||
public int Quantity
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.m_Quantity;
|
||||
}
|
||||
set
|
||||
{
|
||||
this.m_Quantity = value;
|
||||
}
|
||||
}
|
||||
public void Clear()
|
||||
{
|
||||
this.m_Type = 0;
|
||||
this.m_Quality = 0;
|
||||
this.m_Material = 0;
|
||||
this.m_Quantity = 0;
|
||||
}
|
||||
|
||||
public void Serialize(GenericWriter writer)
|
||||
{
|
||||
if (this.IsDefault)
|
||||
{
|
||||
writer.WriteEncodedInt(0); // version
|
||||
}
|
||||
else
|
||||
{
|
||||
writer.WriteEncodedInt(1); // version
|
||||
|
||||
writer.WriteEncodedInt(this.m_Type);
|
||||
writer.WriteEncodedInt(this.m_Quality);
|
||||
writer.WriteEncodedInt(this.m_Material);
|
||||
writer.WriteEncodedInt(this.m_Quantity);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
316
Scripts/Services/BulkOrders/Books/BOBFilterGump.cs
Normal file
316
Scripts/Services/BulkOrders/Books/BOBFilterGump.cs
Normal file
@@ -0,0 +1,316 @@
|
||||
using System;
|
||||
using Server.Gumps;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Engines.BulkOrders
|
||||
{
|
||||
public class BOBFilterGump : Gump
|
||||
{
|
||||
private static int[,] m_MaterialFilters = new int[,]
|
||||
{
|
||||
{ 1044067, 1 }, // Blacksmithy
|
||||
{ 1062226, 3 }, // Iron
|
||||
{ 1018332, 4 }, // Dull Copper
|
||||
{ 1018333, 5 }, // Shadow Iron
|
||||
{ 1018334, 6 }, // Copper
|
||||
{ 1018335, 7 }, // Bronze
|
||||
|
||||
{ 0, 0 }, // --Blank--
|
||||
{ 1018336, 8 }, // Golden
|
||||
{ 1018337, 9 }, // Agapite
|
||||
{ 1018338, 10 }, // Verite
|
||||
{ 1018339, 11 }, // Valorite
|
||||
{ 0, 0 }, // --Blank--
|
||||
|
||||
{ 1044094, 2 }, // Tailoring
|
||||
{ 1044286, 12 }, // Cloth
|
||||
{ 1062235, 13 }, // Leather
|
||||
{ 1062236, 14 }, // Spined
|
||||
{ 1062237, 15 }, // Horned
|
||||
{ 1062238, 16 } // Barbed
|
||||
};
|
||||
|
||||
private static readonly int[,] m_MaterialFiltersNew = new int[,]
|
||||
{
|
||||
{ 1044067, 1 }, // Blacksmithy
|
||||
{ 1062226, 9 }, // Iron
|
||||
{ 1018332, 10 }, // Dull Copper
|
||||
{ 1018333, 11 }, // Shadow Iron
|
||||
{ 1018334, 12 }, // Copper
|
||||
{ 1018335, 13 }, // Bronze
|
||||
|
||||
{ 0, 0 }, // --Blank--
|
||||
{ 1018336, 14 }, // Golden
|
||||
{ 1018337, 15 }, // Agapite
|
||||
{ 1018338, 16 }, // Verite
|
||||
{ 1018339, 17 }, // Valorite
|
||||
{ 0, 0 }, // --Blank--
|
||||
|
||||
{ 1044094, 2 }, // Tailoring
|
||||
{ 1044286, 18 }, // Cloth
|
||||
{ 1062235, 19 }, // Leather
|
||||
{ 1062236, 20 }, // Spined
|
||||
{ 1062237, 21 }, // Horned
|
||||
{ 1062238, 22 }, // Barbed
|
||||
|
||||
{ 1044097, 3 }, // Tinkering
|
||||
{ 1062226, 23 }, // Iron
|
||||
{ 1018332, 24 }, // Dull Copper
|
||||
{ 1018333, 25 }, // Shadow Iron
|
||||
{ 1018334, 26 }, // Copper
|
||||
{ 1018335, 27 }, // Bronze
|
||||
|
||||
{ 0, 0 }, // --Blank--
|
||||
{ 1018336, 28 }, // Golden
|
||||
{ 1018337, 29 }, // Agapite
|
||||
{ 1018338, 30 }, // Verite
|
||||
{ 1018339, 31 }, // Valorite
|
||||
{ 0, 0 }, // --Blank--
|
||||
|
||||
{ 1044071, 4 }, // Carpentry
|
||||
{ 1079435, 32 }, // Wood
|
||||
{ 1071428, 33 }, // Oak
|
||||
{ 1071429, 34 }, // Ash
|
||||
{ 1071430, 35 }, // Yew
|
||||
{ 0, 0 }, // --Blank--
|
||||
|
||||
{ 0, 0 }, // --Blank--
|
||||
{ 1071431, 36 }, // Bloodwood
|
||||
{ 1071432, 37 }, // Heartwood
|
||||
{ 1071433, 38 }, // Frostwood
|
||||
{ 0, 0 }, // --Blank--
|
||||
{ 0, 0 }, // --Blank--
|
||||
|
||||
{ 1044068, 5 }, // Fletching
|
||||
{ 1079435, 39 }, // Wood
|
||||
{ 1071428, 40 }, // Oak
|
||||
{ 1071429, 41 }, // Ash
|
||||
{ 1071430, 42 }, // Yew
|
||||
{ 0, 0 }, // --Blank--
|
||||
|
||||
{ 0, 0 }, // --Blank--
|
||||
{ 1071431, 43 }, // Bloodwood
|
||||
{ 1071432, 44 }, // Heartwood
|
||||
{ 1071433, 45 }, // Frostwood
|
||||
{ 0, 0 }, // --Blank--
|
||||
{ 0, 0 }, // --Blank--
|
||||
|
||||
{ 1044060, 6 }, // Alchemy
|
||||
{ 0, 0 }, // --Blank--
|
||||
{ 0, 0 }, // --Blank--
|
||||
{ 0, 0 }, // --Blank--
|
||||
{ 0, 0 }, // --Blank--
|
||||
{ 0, 0 }, // --Blank--
|
||||
|
||||
{ 1044083, 7 }, // Inscription
|
||||
{ 0, 0 }, // --Blank--
|
||||
{ 0, 0 }, // --Blank--
|
||||
{ 0, 0 }, // --Blank--
|
||||
{ 0, 0 }, // --Blank--
|
||||
{ 0, 0 }, // --Blank--
|
||||
|
||||
{ 1044073, 8 }, // Cooking
|
||||
{ 0, 0 }, // --Blank--
|
||||
{ 0, 0 }, // --Blank--
|
||||
{ 0, 0 }, // --Blank--
|
||||
{ 0, 0 }, // --Blank--
|
||||
{ 0, 0 }, // --Blank--
|
||||
};
|
||||
|
||||
private static readonly int[,] m_TypeFilters = new int[,]
|
||||
{
|
||||
{ 1062229, 0 }, // All
|
||||
{ 1062224, 1 }, // Small
|
||||
{ 1062225, 2 }// Large
|
||||
};
|
||||
|
||||
private static readonly int[,] m_QualityFilters = new int[,]
|
||||
{
|
||||
{ 1062229, 0 }, // All
|
||||
{ 1011542, 1 }, // Normal
|
||||
{ 1060636, 2 }// Exceptional
|
||||
};
|
||||
|
||||
private static readonly int[,] m_AmountFilters = new int[,]
|
||||
{
|
||||
{ 1062229, 0 }, // All
|
||||
{ 1049706, 1 }, // 10
|
||||
{ 1016007, 2 }, // 15
|
||||
{ 1062239, 3 }// 20
|
||||
};
|
||||
|
||||
private static readonly int[][,] m_Filters = new int[][,]
|
||||
{
|
||||
m_TypeFilters,
|
||||
m_QualityFilters,
|
||||
m_MaterialFilters,
|
||||
m_AmountFilters
|
||||
};
|
||||
|
||||
private static readonly int[][,] m_FiltersNew = new int[][,]
|
||||
{
|
||||
m_TypeFilters,
|
||||
m_QualityFilters,
|
||||
m_MaterialFiltersNew,
|
||||
m_AmountFilters
|
||||
};
|
||||
|
||||
private static readonly int[] m_XOffsets_Type = new int[] { 0, 75, 170 };
|
||||
private static readonly int[] m_XOffsets_Quality = new int[] { 0, 75, 170 };
|
||||
private static readonly int[] m_XOffsets_Amount = new int[] { 0, 75, 180, 275 };
|
||||
private static readonly int[] m_XOffsets_Material = new int[] { 0, 108, 212, 307, 392, 487 };
|
||||
private static readonly int[] m_XWidths_Small = new int[] { 50, 50, 70, 50 };
|
||||
private static readonly int[] m_XWidths_Large = new int[] { 80, 60, 60, 60, 60, 60 };
|
||||
|
||||
private const int LabelColor = 0x7FFF;
|
||||
private readonly PlayerMobile m_From;
|
||||
private readonly BulkOrderBook m_Book;
|
||||
|
||||
public BOBFilterGump(PlayerMobile from, BulkOrderBook book)
|
||||
: base(12, 24)
|
||||
{
|
||||
from.CloseGump(typeof(BOBGump));
|
||||
from.CloseGump(typeof(BOBFilterGump));
|
||||
|
||||
m_From = from;
|
||||
m_Book = book;
|
||||
|
||||
BOBFilter f = (from.UseOwnFilter ? from.BOBFilter : book.Filter);
|
||||
|
||||
AddPage(0);
|
||||
|
||||
AddBackground(10, 10, 600, 695, 5054);
|
||||
|
||||
AddImageTiled(18, 20, 583, 676, 2624);
|
||||
AddAlphaRegion(18, 20, 583, 676);
|
||||
|
||||
AddImage(5, 5, 10460);
|
||||
AddImage(585, 5, 10460);
|
||||
AddImage(5, 690, 10460);
|
||||
AddImage(585, 690, 10460);
|
||||
|
||||
AddHtmlLocalized(270, 32, 200, 32, 1062223, LabelColor, false, false); // Filter Preference
|
||||
|
||||
AddHtmlLocalized(26, 64, 120, 32, 1062228, LabelColor, false, false); // Bulk Order Type
|
||||
AddFilterList(25, 96, m_XOffsets_Type, 40, m_TypeFilters, m_XWidths_Small, f.Type, 0);
|
||||
|
||||
AddHtmlLocalized(320, 64, 50, 32, 1062215, LabelColor, false, false); // Quality
|
||||
AddFilterList(320, 96, m_XOffsets_Quality, 40, m_QualityFilters, m_XWidths_Small, f.Quality, 1);
|
||||
|
||||
AddHtmlLocalized(26, 130, 120, 32, 1062232, LabelColor, false, false); // Material Type
|
||||
AddFilterList(25, 162, m_XOffsets_Material, 35, BulkOrderSystem.NewSystemEnabled ? m_MaterialFiltersNew : m_MaterialFilters, m_XWidths_Large, f.Material, 2);
|
||||
|
||||
AddHtmlLocalized(26, 608, 120, 32, 1062217, LabelColor, false, false); // Amount
|
||||
AddFilterList(25, 640, m_XOffsets_Amount, 40, m_AmountFilters, m_XWidths_Small, f.Quantity, 3);
|
||||
|
||||
AddHtmlLocalized(75, 670, 120, 32, 1062477, (from.UseOwnFilter ? LabelColor : 16927), false, false); // Set Book Filter
|
||||
AddButton(40, 670, 4005, 4007, 1, GumpButtonType.Reply, 0);
|
||||
|
||||
AddHtmlLocalized(235, 670, 120, 32, 1062478, (from.UseOwnFilter ? 16927 : LabelColor), false, false); // Set Your Filter
|
||||
AddButton(200, 670, 4005, 4007, 2, GumpButtonType.Reply, 0);
|
||||
|
||||
AddHtmlLocalized(405, 670, 120, 32, 1062231, LabelColor, false, false); // Clear Filter
|
||||
AddButton(370, 670, 4005, 4007, 3, GumpButtonType.Reply, 0);
|
||||
|
||||
AddHtmlLocalized(540, 670, 50, 32, 1011046, LabelColor, false, false); // APPLY
|
||||
AddButton(505, 670, 4017, 4018, 0, GumpButtonType.Reply, 0);
|
||||
}
|
||||
|
||||
public override void OnResponse(Server.Network.NetState sender, RelayInfo info)
|
||||
{
|
||||
BOBFilter f = (m_From.UseOwnFilter ? m_From.BOBFilter : m_Book.Filter);
|
||||
|
||||
int index = info.ButtonID;
|
||||
|
||||
switch ( index )
|
||||
{
|
||||
case 0: // Apply
|
||||
{
|
||||
m_From.SendGump(new BOBGump(m_From, m_Book));
|
||||
|
||||
break;
|
||||
}
|
||||
case 1: // Set Book Filter
|
||||
{
|
||||
m_From.UseOwnFilter = false;
|
||||
m_From.SendGump(new BOBFilterGump(m_From, m_Book));
|
||||
|
||||
break;
|
||||
}
|
||||
case 2: // Set Your Filter
|
||||
{
|
||||
m_From.UseOwnFilter = true;
|
||||
m_From.SendGump(new BOBFilterGump(m_From, m_Book));
|
||||
|
||||
break;
|
||||
}
|
||||
case 3: // Clear Filter
|
||||
{
|
||||
f.Clear();
|
||||
m_From.SendGump(new BOBFilterGump(m_From, m_Book));
|
||||
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
index -= 4;
|
||||
|
||||
int type = index % 4;
|
||||
index /= 4;
|
||||
|
||||
int[][,] filter = BulkOrderSystem.NewSystemEnabled ? m_FiltersNew : m_Filters;
|
||||
|
||||
if (type >= 0 && type < filter.Length)
|
||||
{
|
||||
int[,] filters = filter[type];
|
||||
|
||||
if (index >= 0 && index < filters.GetLength(0))
|
||||
{
|
||||
if (filters[index, 0] == 0)
|
||||
break;
|
||||
|
||||
switch ( type )
|
||||
{
|
||||
case 0:
|
||||
f.Type = filters[index, 1];
|
||||
break;
|
||||
case 1:
|
||||
f.Quality = filters[index, 1];
|
||||
break;
|
||||
case 2:
|
||||
f.Material = filters[index, 1];
|
||||
break;
|
||||
case 3:
|
||||
f.Quantity = filters[index, 1];
|
||||
break;
|
||||
}
|
||||
|
||||
m_From.SendGump(new BOBFilterGump(m_From, m_Book));
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void AddFilterList(int x, int y, int[] xOffsets, int yOffset, int[,] filters, int[] xWidths, int filterValue, int filterIndex)
|
||||
{
|
||||
for (int i = 0; i < filters.GetLength(0); ++i)
|
||||
{
|
||||
int number = filters[i, 0];
|
||||
|
||||
if (number == 0)
|
||||
continue;
|
||||
|
||||
bool isSelected = (filters[i, 1] == filterValue);
|
||||
|
||||
if (!isSelected && (i % xOffsets.Length) == 0)
|
||||
isSelected = (filterValue == 0);
|
||||
|
||||
AddHtmlLocalized(x + 35 + xOffsets[i % xOffsets.Length], y + ((i / xOffsets.Length) * yOffset), xWidths[i % xOffsets.Length], 32, number, isSelected ? 16927 : LabelColor, false, false);
|
||||
AddButton(x + xOffsets[i % xOffsets.Length], y + ((i / xOffsets.Length) * yOffset), 4005, 4007, 4 + filterIndex + (i * 4), GumpButtonType.Reply, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
848
Scripts/Services/BulkOrders/Books/BOBGump.cs
Normal file
848
Scripts/Services/BulkOrders/Books/BOBGump.cs
Normal file
@@ -0,0 +1,848 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using Server.Gumps;
|
||||
using Server.Items;
|
||||
using Server.Mobiles;
|
||||
using Server.Prompts;
|
||||
|
||||
namespace Server.Engines.BulkOrders
|
||||
{
|
||||
public class BOBGump : Gump
|
||||
{
|
||||
private const int LabelColor = 0x7FFF;
|
||||
private readonly PlayerMobile m_From;
|
||||
private readonly BulkOrderBook m_Book;
|
||||
private readonly ArrayList m_List;
|
||||
private int m_Page;
|
||||
public BOBGump(PlayerMobile from, BulkOrderBook book)
|
||||
: this(from, book, 0, null)
|
||||
{
|
||||
}
|
||||
|
||||
public BOBGump(PlayerMobile from, BulkOrderBook book, int page, ArrayList list)
|
||||
: base(12, 24)
|
||||
{
|
||||
from.CloseGump(typeof(BOBGump));
|
||||
from.CloseGump(typeof(BOBFilterGump));
|
||||
|
||||
m_From = from;
|
||||
m_Book = book;
|
||||
m_Page = page;
|
||||
|
||||
if (list == null)
|
||||
{
|
||||
list = new ArrayList(book.Entries.Count);
|
||||
|
||||
for (int i = 0; i < book.Entries.Count; ++i)
|
||||
{
|
||||
object obj = book.Entries[i];
|
||||
|
||||
if (CheckFilter(obj))
|
||||
list.Add(obj);
|
||||
}
|
||||
}
|
||||
|
||||
m_List = list;
|
||||
|
||||
int index = GetIndexForPage(page);
|
||||
int count = GetCountForIndex(index);
|
||||
|
||||
int tableIndex = 0;
|
||||
|
||||
PlayerVendor pv = book.RootParent as PlayerVendor;
|
||||
|
||||
bool canDrop = book.IsChildOf(from.Backpack);
|
||||
bool canBuy = (pv != null);
|
||||
bool canPrice = (canDrop || canBuy);
|
||||
|
||||
if (canBuy)
|
||||
{
|
||||
VendorItem vi = pv.GetVendorItem(book);
|
||||
|
||||
canBuy = (vi != null && !vi.IsForSale);
|
||||
}
|
||||
|
||||
int width = 600;
|
||||
|
||||
if (!canPrice)
|
||||
width = 516;
|
||||
|
||||
X = (624 - width) / 2;
|
||||
|
||||
AddPage(0);
|
||||
|
||||
AddBackground(10, 10, width, 439, 5054);
|
||||
AddImageTiled(18, 20, width - 17, 420, 2624);
|
||||
|
||||
if (canPrice)
|
||||
{
|
||||
AddImageTiled(573, 64, 24, 352, 200);
|
||||
AddImageTiled(493, 64, 78, 352, 1416);
|
||||
}
|
||||
|
||||
if (canDrop)
|
||||
AddImageTiled(24, 64, 32, 352, 1416);
|
||||
|
||||
AddImageTiled(58, 64, 36, 352, 200);
|
||||
AddImageTiled(96, 64, 133, 352, 1416);
|
||||
AddImageTiled(231, 64, 80, 352, 200);
|
||||
AddImageTiled(313, 64, 100, 352, 1416);
|
||||
AddImageTiled(415, 64, 76, 352, 200);
|
||||
|
||||
for (int i = index; i < (index + count) && i >= 0 && i < list.Count; ++i)
|
||||
{
|
||||
object obj = list[i];
|
||||
|
||||
if (!CheckFilter(obj))
|
||||
continue;
|
||||
|
||||
AddImageTiled(24, 94 + (tableIndex * 32), canPrice ? 573 : 489, 2, 2624);
|
||||
|
||||
if (obj is BOBLargeEntry)
|
||||
tableIndex += ((BOBLargeEntry)obj).Entries.Length;
|
||||
else if (obj is BOBSmallEntry)
|
||||
++tableIndex;
|
||||
}
|
||||
|
||||
AddAlphaRegion(18, 20, width - 17, 420);
|
||||
AddImage(5, 5, 10460);
|
||||
AddImage(width - 15, 5, 10460);
|
||||
AddImage(5, 424, 10460);
|
||||
AddImage(width - 15, 424, 10460);
|
||||
|
||||
AddHtmlLocalized(canPrice ? 266 : 224, 32, 200, 32, 1062220, LabelColor, false, false); // Bulk Order Book
|
||||
AddHtmlLocalized(63, 64, 70, 32, 1062213, LabelColor, false, false); // Type
|
||||
AddHtmlLocalized(147, 64, 70, 32, 1062214, LabelColor, false, false); // Item
|
||||
AddHtmlLocalized(246, 64, 70, 32, 1062215, LabelColor, false, false); // Quality
|
||||
AddHtmlLocalized(336, 64, 70, 32, 1062216, LabelColor, false, false); // Material
|
||||
AddHtmlLocalized(429, 64, 70, 32, 1062217, LabelColor, false, false); // Amount
|
||||
|
||||
AddButton(35, 32, 4005, 4007, 1, GumpButtonType.Reply, 0);
|
||||
AddHtmlLocalized(70, 32, 200, 32, 1062476, LabelColor, false, false); // Set Filter
|
||||
|
||||
BOBFilter f = (from.UseOwnFilter ? from.BOBFilter : book.Filter);
|
||||
|
||||
if (f.IsDefault)
|
||||
AddHtmlLocalized(canPrice ? 470 : 386, 32, 120, 32, 1062475, 16927, false, false); // Using No Filter
|
||||
else if (from.UseOwnFilter)
|
||||
AddHtmlLocalized(canPrice ? 470 : 386, 32, 120, 32, 1062451, 16927, false, false); // Using Your Filter
|
||||
else
|
||||
AddHtmlLocalized(canPrice ? 470 : 386, 32, 120, 32, 1062230, 16927, false, false); // Using Book Filter
|
||||
|
||||
AddButton(375, 416, 4017, 4018, 0, GumpButtonType.Reply, 0);
|
||||
AddHtmlLocalized(410, 416, 120, 20, 1011441, LabelColor, false, false); // EXIT
|
||||
|
||||
if (canDrop)
|
||||
AddHtmlLocalized(26, 64, 50, 32, 1062212, LabelColor, false, false); // Drop
|
||||
|
||||
if (canPrice)
|
||||
{
|
||||
AddHtmlLocalized(516, 64, 200, 32, 1062218, LabelColor, false, false); // Price
|
||||
|
||||
if (canBuy)
|
||||
{
|
||||
AddHtmlLocalized(576, 64, 200, 32, 1062219, LabelColor, false, false); // Buy
|
||||
}
|
||||
else
|
||||
{
|
||||
AddHtmlLocalized(576, 64, 200, 32, 1062227, LabelColor, false, false); // Set
|
||||
|
||||
AddButton(450, 416, 4005, 4007, 4, GumpButtonType.Reply, 0);
|
||||
AddHtml(485, 416, 120, 20, "<BASEFONT COLOR=#FFFFFF>Price all</FONT>", false, false);
|
||||
}
|
||||
}
|
||||
|
||||
tableIndex = 0;
|
||||
|
||||
if (page > 0)
|
||||
{
|
||||
AddButton(75, 416, 4014, 4016, 2, GumpButtonType.Reply, 0);
|
||||
AddHtmlLocalized(110, 416, 150, 20, 1011067, LabelColor, false, false); // Previous page
|
||||
}
|
||||
|
||||
if (GetIndexForPage(page + 1) < list.Count)
|
||||
{
|
||||
AddButton(225, 416, 4005, 4007, 3, GumpButtonType.Reply, 0);
|
||||
AddHtmlLocalized(260, 416, 150, 20, 1011066, LabelColor, false, false); // Next page
|
||||
}
|
||||
|
||||
for (int i = index; i < (index + count) && i >= 0 && i < list.Count; ++i)
|
||||
{
|
||||
object obj = list[i];
|
||||
|
||||
if (!CheckFilter(obj))
|
||||
continue;
|
||||
|
||||
if (obj is BOBLargeEntry)
|
||||
{
|
||||
BOBLargeEntry e = (BOBLargeEntry)obj;
|
||||
|
||||
int y = 96 + (tableIndex * 32);
|
||||
|
||||
if (canDrop)
|
||||
AddButton(35, y + 2, 5602, 5606, 5 + (i * 2), GumpButtonType.Reply, 0);
|
||||
|
||||
if (canDrop || (canBuy && e.Price > 0))
|
||||
{
|
||||
AddButton(579, y + 2, 2117, 2118, 6 + (i * 2), GumpButtonType.Reply, 0);
|
||||
AddLabel(495, y, 1152, e.Price.ToString());
|
||||
}
|
||||
|
||||
AddHtmlLocalized(61, y, 50, 32, 1062225, LabelColor, false, false); // Large
|
||||
|
||||
for (int j = 0; j < e.Entries.Length; ++j)
|
||||
{
|
||||
BOBLargeSubEntry sub = e.Entries[j];
|
||||
|
||||
AddHtmlLocalized(103, y, 130, 32, sub.Number, LabelColor, false, false);
|
||||
|
||||
if (e.RequireExceptional)
|
||||
AddHtmlLocalized(235, y, 80, 20, 1060636, LabelColor, false, false); // exceptional
|
||||
else
|
||||
AddHtmlLocalized(235, y, 80, 20, 1011542, LabelColor, false, false); // normal
|
||||
|
||||
object name = GetMaterialName(e.Material, e.DeedType, sub.ItemType);
|
||||
|
||||
if (name is int)
|
||||
AddHtmlLocalized(316, y, 100, 20, (int)name, LabelColor, false, false);
|
||||
else if (name is string)
|
||||
AddLabel(316, y, 1152, (string)name);
|
||||
|
||||
AddLabel(421, y, 1152, String.Format("{0} / {1}", sub.AmountCur, e.AmountMax));
|
||||
|
||||
++tableIndex;
|
||||
y += 32;
|
||||
}
|
||||
}
|
||||
else if (obj is BOBSmallEntry)
|
||||
{
|
||||
BOBSmallEntry e = (BOBSmallEntry)obj;
|
||||
|
||||
int y = 96 + (tableIndex++ * 32);
|
||||
|
||||
if (canDrop)
|
||||
AddButton(35, y + 2, 5602, 5606, 5 + (i * 2), GumpButtonType.Reply, 0);
|
||||
|
||||
if (canDrop || (canBuy && e.Price > 0))
|
||||
{
|
||||
AddButton(579, y + 2, 2117, 2118, 6 + (i * 2), GumpButtonType.Reply, 0);
|
||||
AddLabel(495, y, 1152, e.Price.ToString());
|
||||
}
|
||||
|
||||
AddHtmlLocalized(61, y, 50, 32, 1062224, LabelColor, false, false); // Small
|
||||
|
||||
AddHtmlLocalized(103, y, 130, 32, e.Number, LabelColor, false, false);
|
||||
|
||||
if (e.RequireExceptional)
|
||||
AddHtmlLocalized(235, y, 80, 20, 1060636, LabelColor, false, false); // exceptional
|
||||
else
|
||||
AddHtmlLocalized(235, y, 80, 20, 1011542, LabelColor, false, false); // normal
|
||||
|
||||
object name = GetMaterialName(e.Material, e.DeedType, e.ItemType);
|
||||
|
||||
if (name is int)
|
||||
AddHtmlLocalized(316, y, 100, 20, (int)name, LabelColor, false, false);
|
||||
else if (name is string)
|
||||
AddLabel(316, y, 1152, (string)name);
|
||||
|
||||
AddLabel(421, y, 1152, String.Format("{0} / {1}", e.AmountCur, e.AmountMax));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public Item Reconstruct(object obj)
|
||||
{
|
||||
Item item = null;
|
||||
|
||||
if (obj is BOBLargeEntry)
|
||||
item = ((BOBLargeEntry)obj).Reconstruct();
|
||||
else if (obj is BOBSmallEntry)
|
||||
item = ((BOBSmallEntry)obj).Reconstruct();
|
||||
|
||||
return item;
|
||||
}
|
||||
|
||||
public bool CheckFilter(object obj)
|
||||
{
|
||||
if (obj is BOBLargeEntry)
|
||||
{
|
||||
BOBLargeEntry e = (BOBLargeEntry)obj;
|
||||
|
||||
return CheckFilter(e.Material, e.AmountMax, true, e.RequireExceptional, e.DeedType, (e.Entries.Length > 0 ? e.Entries[0].ItemType : null));
|
||||
}
|
||||
else if (obj is BOBSmallEntry)
|
||||
{
|
||||
BOBSmallEntry e = (BOBSmallEntry)obj;
|
||||
|
||||
return CheckFilter(e.Material, e.AmountMax, false, e.RequireExceptional, e.DeedType, e.ItemType);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public bool CheckFilter(BulkMaterialType mat, int amountMax, bool isLarge, bool reqExc, BODType deedType, Type itemType)
|
||||
{
|
||||
BOBFilter f = (m_From.UseOwnFilter ? m_From.BOBFilter : m_Book.Filter);
|
||||
|
||||
if (f.IsDefault)
|
||||
return true;
|
||||
|
||||
if (f.Quality == 1 && reqExc)
|
||||
return false;
|
||||
else if (f.Quality == 2 && !reqExc)
|
||||
return false;
|
||||
|
||||
if (f.Quantity == 1 && amountMax != 10)
|
||||
return false;
|
||||
else if (f.Quantity == 2 && amountMax != 15)
|
||||
return false;
|
||||
else if (f.Quantity == 3 && amountMax != 20)
|
||||
return false;
|
||||
|
||||
if (f.Type == 1 && isLarge)
|
||||
return false;
|
||||
else if (f.Type == 2 && !isLarge)
|
||||
return false;
|
||||
|
||||
if (BulkOrderSystem.NewSystemEnabled)
|
||||
{
|
||||
switch (f.Material)
|
||||
{
|
||||
default:
|
||||
case 0:
|
||||
return true;
|
||||
case 1:
|
||||
return deedType == BODType.Smith;
|
||||
case 2:
|
||||
return deedType == BODType.Tailor;
|
||||
case 3:
|
||||
return deedType == BODType.Tinkering;
|
||||
case 4:
|
||||
return deedType == BODType.Carpentry;
|
||||
case 5:
|
||||
return deedType == BODType.Fletching;
|
||||
case 6:
|
||||
return deedType == BODType.Alchemy;
|
||||
case 7:
|
||||
return deedType == BODType.Inscription;
|
||||
case 8:
|
||||
return deedType == BODType.Cooking;
|
||||
case 9:
|
||||
return (mat == BulkMaterialType.None && deedType == BODType.Smith);
|
||||
case 10:
|
||||
return (mat == BulkMaterialType.DullCopper && deedType == BODType.Smith);
|
||||
case 11:
|
||||
return (mat == BulkMaterialType.ShadowIron && deedType == BODType.Smith);
|
||||
case 12:
|
||||
return (mat == BulkMaterialType.Copper && deedType == BODType.Smith);
|
||||
case 13:
|
||||
return (mat == BulkMaterialType.Bronze && deedType == BODType.Smith);
|
||||
case 14:
|
||||
return (mat == BulkMaterialType.Gold && deedType == BODType.Smith);
|
||||
case 15:
|
||||
return (mat == BulkMaterialType.Agapite && deedType == BODType.Smith);
|
||||
case 16:
|
||||
return (mat == BulkMaterialType.Verite && deedType == BODType.Smith);
|
||||
case 17:
|
||||
return (mat == BulkMaterialType.Valorite && deedType == BODType.Smith);
|
||||
|
||||
case 18:
|
||||
return (mat == BulkMaterialType.None && BGTClassifier.Classify(deedType, itemType) == BulkGenericType.Cloth);
|
||||
case 19:
|
||||
return (mat == BulkMaterialType.None && BGTClassifier.Classify(deedType, itemType) == BulkGenericType.Leather);
|
||||
case 20:
|
||||
return (mat == BulkMaterialType.Spined && BGTClassifier.Classify(deedType, itemType) == BulkGenericType.Leather);
|
||||
case 21:
|
||||
return (mat == BulkMaterialType.Horned && BGTClassifier.Classify(deedType, itemType) == BulkGenericType.Leather);
|
||||
case 22:
|
||||
return (mat == BulkMaterialType.Barbed && BGTClassifier.Classify(deedType, itemType) == BulkGenericType.Leather);
|
||||
|
||||
case 23: // Tinkering
|
||||
return (mat == BulkMaterialType.None && deedType == BODType.Tinkering);
|
||||
case 24:
|
||||
return (mat == BulkMaterialType.DullCopper && deedType == BODType.Tinkering);
|
||||
case 25:
|
||||
return (mat == BulkMaterialType.ShadowIron && deedType == BODType.Tinkering);
|
||||
case 26:
|
||||
return (mat == BulkMaterialType.Copper && deedType == BODType.Tinkering);
|
||||
case 27:
|
||||
return (mat == BulkMaterialType.Bronze && deedType == BODType.Tinkering);
|
||||
case 28:
|
||||
return (mat == BulkMaterialType.Gold && deedType == BODType.Tinkering);
|
||||
case 29:
|
||||
return (mat == BulkMaterialType.Agapite && deedType == BODType.Tinkering);
|
||||
case 30:
|
||||
return (mat == BulkMaterialType.Verite && deedType == BODType.Tinkering);
|
||||
case 31:
|
||||
return (mat == BulkMaterialType.Valorite && deedType == BODType.Tinkering);
|
||||
|
||||
case 32: // Carpentry
|
||||
return (mat == BulkMaterialType.None && deedType == BODType.Carpentry);
|
||||
case 33:
|
||||
return (mat == BulkMaterialType.OakWood && deedType == BODType.Carpentry);
|
||||
case 34:
|
||||
return (mat == BulkMaterialType.AshWood && deedType == BODType.Carpentry);
|
||||
case 35:
|
||||
return (mat == BulkMaterialType.YewWood && deedType == BODType.Carpentry);
|
||||
case 36:
|
||||
return (mat == BulkMaterialType.Bloodwood && deedType == BODType.Carpentry);
|
||||
case 37:
|
||||
return (mat == BulkMaterialType.Heartwood && deedType == BODType.Carpentry);
|
||||
case 38:
|
||||
return (mat == BulkMaterialType.Frostwood && deedType == BODType.Carpentry);
|
||||
|
||||
case 39: // Fletching
|
||||
return (mat == BulkMaterialType.None && deedType == BODType.Fletching);
|
||||
case 40:
|
||||
return (mat == BulkMaterialType.OakWood && deedType == BODType.Fletching);
|
||||
case 41:
|
||||
return (mat == BulkMaterialType.AshWood && deedType == BODType.Fletching);
|
||||
case 42:
|
||||
return (mat == BulkMaterialType.YewWood && deedType == BODType.Fletching);
|
||||
case 43:
|
||||
return (mat == BulkMaterialType.Bloodwood && deedType == BODType.Fletching);
|
||||
case 44:
|
||||
return (mat == BulkMaterialType.Heartwood && deedType == BODType.Fletching);
|
||||
case 45:
|
||||
return (mat == BulkMaterialType.Frostwood && deedType == BODType.Fletching);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (f.Material)
|
||||
{
|
||||
default:
|
||||
case 0: return true;
|
||||
case 1: return (deedType == BODType.Smith);
|
||||
case 2: return (deedType == BODType.Tailor);
|
||||
|
||||
case 3: return (mat == BulkMaterialType.None && BGTClassifier.Classify(deedType, itemType) == BulkGenericType.Iron);
|
||||
case 4: return (mat == BulkMaterialType.DullCopper);
|
||||
case 5: return (mat == BulkMaterialType.ShadowIron);
|
||||
case 6: return (mat == BulkMaterialType.Copper);
|
||||
case 7: return (mat == BulkMaterialType.Bronze);
|
||||
case 8: return (mat == BulkMaterialType.Gold);
|
||||
case 9: return (mat == BulkMaterialType.Agapite);
|
||||
case 10: return (mat == BulkMaterialType.Verite);
|
||||
case 11: return (mat == BulkMaterialType.Valorite);
|
||||
|
||||
case 12: return (mat == BulkMaterialType.None && BGTClassifier.Classify(deedType, itemType) == BulkGenericType.Cloth);
|
||||
case 13: return (mat == BulkMaterialType.None && BGTClassifier.Classify(deedType, itemType) == BulkGenericType.Leather);
|
||||
case 14: return (mat == BulkMaterialType.Spined);
|
||||
case 15: return (mat == BulkMaterialType.Horned);
|
||||
case 16: return (mat == BulkMaterialType.Barbed);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public int GetIndexForPage(int page)
|
||||
{
|
||||
int index = 0;
|
||||
|
||||
while (page-- > 0)
|
||||
index += GetCountForIndex(index);
|
||||
|
||||
return index;
|
||||
}
|
||||
|
||||
public int GetCountForIndex(int index)
|
||||
{
|
||||
int slots = 0;
|
||||
int count = 0;
|
||||
|
||||
ArrayList list = m_List;
|
||||
|
||||
for (int i = index; i >= 0 && i < list.Count; ++i)
|
||||
{
|
||||
object obj = list[i];
|
||||
|
||||
if (CheckFilter(obj))
|
||||
{
|
||||
int add;
|
||||
|
||||
if (obj is BOBLargeEntry)
|
||||
add = ((BOBLargeEntry)obj).Entries.Length;
|
||||
else
|
||||
add = 1;
|
||||
|
||||
if ((slots + add) > 10)
|
||||
break;
|
||||
|
||||
slots += add;
|
||||
}
|
||||
|
||||
++count;
|
||||
}
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
public int GetPageForIndex(int index, int sizeDropped)
|
||||
{
|
||||
if (index <= 0)
|
||||
return 0;
|
||||
|
||||
int count = 0;
|
||||
int add = 0;
|
||||
int page = 0;
|
||||
ArrayList list = m_List;
|
||||
int i;
|
||||
object obj;
|
||||
|
||||
for (i = 0; (i < index) && (i < list.Count); i++)
|
||||
{
|
||||
obj = list[i];
|
||||
if (CheckFilter(obj))
|
||||
{
|
||||
if (obj is BOBLargeEntry)
|
||||
add = ((BOBLargeEntry)obj).Entries.Length;
|
||||
else
|
||||
add = 1;
|
||||
count += add;
|
||||
if (count > 10)
|
||||
{
|
||||
page++;
|
||||
count = add;
|
||||
}
|
||||
}
|
||||
}
|
||||
/* now we are on the page of the bod preceeding the dropped one.
|
||||
* next step: checking whether we have to remain where we are.
|
||||
* The counter i needs to be incremented as the bod to this very moment
|
||||
* has not yet been removed from m_List */
|
||||
i++;
|
||||
|
||||
/* if, for instance, a big bod of size 6 has been removed, smaller bods
|
||||
* might fall back into this page. Depending on their sizes, the page eeds
|
||||
* to be adjusted accordingly. This is done now.
|
||||
*/
|
||||
if (count + sizeDropped > 10)
|
||||
{
|
||||
while ((i < list.Count) && (count <= 10))
|
||||
{
|
||||
obj = list[i];
|
||||
if (CheckFilter(obj))
|
||||
{
|
||||
if (obj is BOBLargeEntry)
|
||||
count += ((BOBLargeEntry)obj).Entries.Length;
|
||||
else
|
||||
count += 1;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
if (count > 10)
|
||||
page++;
|
||||
}
|
||||
return page;
|
||||
}
|
||||
|
||||
public object GetMaterialName(BulkMaterialType mat, BODType type, Type itemType)
|
||||
{
|
||||
switch ( type )
|
||||
{
|
||||
case BODType.Tinkering:
|
||||
case BODType.Smith:
|
||||
{
|
||||
if (type == BODType.Tinkering && mat == BulkMaterialType.None && BGTClassifier.Classify(type, itemType) == BulkGenericType.Wood)
|
||||
{
|
||||
return 1079435;
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (mat)
|
||||
{
|
||||
case BulkMaterialType.None:
|
||||
return 1062226;
|
||||
case BulkMaterialType.DullCopper:
|
||||
return 1018332;
|
||||
case BulkMaterialType.ShadowIron:
|
||||
return 1018333;
|
||||
case BulkMaterialType.Copper:
|
||||
return 1018334;
|
||||
case BulkMaterialType.Bronze:
|
||||
return 1018335;
|
||||
case BulkMaterialType.Gold:
|
||||
return 1018336;
|
||||
case BulkMaterialType.Agapite:
|
||||
return 1018337;
|
||||
case BulkMaterialType.Verite:
|
||||
return 1018338;
|
||||
case BulkMaterialType.Valorite:
|
||||
return 1018339;
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case BODType.Tailor:
|
||||
{
|
||||
switch ( mat )
|
||||
{
|
||||
case BulkMaterialType.None:
|
||||
{
|
||||
if (itemType.IsSubclassOf(typeof(BaseArmor)) || itemType.IsSubclassOf(typeof(BaseShoes)))
|
||||
return 1062235;
|
||||
|
||||
return 1044286;
|
||||
}
|
||||
case BulkMaterialType.Spined:
|
||||
return 1062236;
|
||||
case BulkMaterialType.Horned:
|
||||
return 1062237;
|
||||
case BulkMaterialType.Barbed:
|
||||
return 1062238;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case BODType.Carpentry:
|
||||
case BODType.Fletching:
|
||||
{
|
||||
if (mat == BulkMaterialType.None)
|
||||
return 1079435;
|
||||
|
||||
switch (mat)
|
||||
{
|
||||
default:
|
||||
case BulkMaterialType.OakWood: return 1071428;
|
||||
case BulkMaterialType.AshWood: return 1071429;
|
||||
case BulkMaterialType.YewWood: return 1071430;
|
||||
case BulkMaterialType.Heartwood: return 1071432;
|
||||
case BulkMaterialType.Bloodwood: return 1071431;
|
||||
case BulkMaterialType.Frostwood: return 1071433;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return "";
|
||||
}
|
||||
|
||||
public override void OnResponse(Server.Network.NetState sender, RelayInfo info)
|
||||
{
|
||||
int index = info.ButtonID;
|
||||
|
||||
switch ( index )
|
||||
{
|
||||
case 0: // EXIT
|
||||
{
|
||||
break;
|
||||
}
|
||||
case 1: // Set Filter
|
||||
{
|
||||
m_From.SendGump(new BOBFilterGump(m_From, m_Book));
|
||||
|
||||
break;
|
||||
}
|
||||
case 2: // Previous page
|
||||
{
|
||||
if (m_Page > 0)
|
||||
m_From.SendGump(new BOBGump(m_From, m_Book, m_Page - 1, m_List));
|
||||
|
||||
return;
|
||||
}
|
||||
case 3: // Next page
|
||||
{
|
||||
if (GetIndexForPage(m_Page + 1) < m_List.Count)
|
||||
m_From.SendGump(new BOBGump(m_From, m_Book, m_Page + 1, m_List));
|
||||
|
||||
break;
|
||||
}
|
||||
case 4: // Price all
|
||||
{
|
||||
if (m_Book.IsChildOf(m_From.Backpack))
|
||||
{
|
||||
m_From.Prompt = new SetPricePrompt(m_Book, null, m_Page, m_List);
|
||||
m_From.SendMessage("Type in a price for all deeds in the book:");
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
bool canDrop = m_Book.IsChildOf(m_From.Backpack);
|
||||
bool canPrice = canDrop || (m_Book.RootParent is PlayerVendor);
|
||||
|
||||
index -= 5;
|
||||
|
||||
int type = index % 2;
|
||||
index /= 2;
|
||||
|
||||
if (index < 0 || index >= m_List.Count)
|
||||
break;
|
||||
|
||||
object obj = m_List[index];
|
||||
|
||||
if (!m_Book.Entries.Contains(obj))
|
||||
{
|
||||
m_From.SendLocalizedMessage(1062382); // The deed selected is not available.
|
||||
break;
|
||||
}
|
||||
|
||||
if (type == 0) // Drop
|
||||
{
|
||||
if (m_Book.IsChildOf(m_From.Backpack))
|
||||
{
|
||||
Item item = Reconstruct(obj);
|
||||
|
||||
if (item != null)
|
||||
{
|
||||
Container pack = m_From.Backpack;
|
||||
if ((pack == null) || ((pack != null) && (!pack.CheckHold(m_From, item, true, true, 0, item.PileWeight + item.TotalWeight))))
|
||||
{
|
||||
m_From.SendLocalizedMessage(503204); // You do not have room in your backpack for this
|
||||
m_From.SendGump(new BOBGump(m_From, m_Book, m_Page, null));
|
||||
}
|
||||
else
|
||||
{
|
||||
if (m_Book.IsChildOf(m_From.Backpack))
|
||||
{
|
||||
int sizeOfDroppedBod;
|
||||
if (obj is BOBLargeEntry)
|
||||
sizeOfDroppedBod = ((BOBLargeEntry)obj).Entries.Length;
|
||||
else
|
||||
sizeOfDroppedBod = 1;
|
||||
|
||||
m_From.AddToBackpack(item);
|
||||
m_From.SendLocalizedMessage(1045152); // The bulk order deed has been placed in your backpack.
|
||||
m_Book.Entries.Remove(obj);
|
||||
m_Book.InvalidateProperties();
|
||||
|
||||
if (m_Book.Entries.Count / 5 < m_Book.ItemCount)
|
||||
{
|
||||
m_Book.ItemCount--;
|
||||
m_Book.InvalidateItems();
|
||||
}
|
||||
|
||||
if (m_Book.Entries.Count > 0)
|
||||
{
|
||||
m_Page = GetPageForIndex(index, sizeOfDroppedBod);
|
||||
m_From.SendGump(new BOBGump(m_From, m_Book, m_Page, null));
|
||||
}
|
||||
else
|
||||
m_From.SendLocalizedMessage(1062381); // The book is empty.
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
m_From.SendMessage("Internal error. The bulk order deed could not be reconstructed.");
|
||||
}
|
||||
}
|
||||
}
|
||||
else // Set Price | Buy
|
||||
{
|
||||
if (m_Book.IsChildOf(m_From.Backpack))
|
||||
{
|
||||
m_From.Prompt = new SetPricePrompt(m_Book, obj, m_Page, m_List);
|
||||
m_From.SendLocalizedMessage(1062383); // Type in a price for the deed:
|
||||
}
|
||||
else if (m_Book.RootParent is PlayerVendor)
|
||||
{
|
||||
PlayerVendor pv = (PlayerVendor)m_Book.RootParent;
|
||||
VendorItem vi = pv.GetVendorItem(m_Book);
|
||||
|
||||
if (vi != null && !vi.IsForSale)
|
||||
{
|
||||
int sizeOfDroppedBod;
|
||||
int price = 0;
|
||||
if (obj is BOBLargeEntry)
|
||||
{
|
||||
price = ((BOBLargeEntry)obj).Price;
|
||||
sizeOfDroppedBod = ((BOBLargeEntry)obj).Entries.Length;
|
||||
}
|
||||
else
|
||||
{
|
||||
price = ((BOBSmallEntry)obj).Price;
|
||||
sizeOfDroppedBod = 1;
|
||||
}
|
||||
if (price == 0)
|
||||
m_From.SendLocalizedMessage(1062382); // The deed selected is not available.
|
||||
else
|
||||
{
|
||||
if (m_Book.Entries.Count > 0)
|
||||
{
|
||||
m_Page = GetPageForIndex(index, sizeOfDroppedBod);
|
||||
m_From.SendGump(new BODBuyGump(m_From, m_Book, obj, m_Page, price));
|
||||
}
|
||||
else
|
||||
m_From.SendLocalizedMessage(1062381); // The book is emptz
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private class SetPricePrompt : Prompt
|
||||
{
|
||||
public override int MessageCliloc { get { return 1062383; } }
|
||||
private readonly BulkOrderBook m_Book;
|
||||
private readonly object m_Object;
|
||||
private readonly int m_Page;
|
||||
private readonly ArrayList m_List;
|
||||
public SetPricePrompt(BulkOrderBook book, object obj, int page, ArrayList list)
|
||||
{
|
||||
m_Book = book;
|
||||
m_Object = obj;
|
||||
m_Page = page;
|
||||
m_List = list;
|
||||
}
|
||||
|
||||
public override void OnResponse(Mobile from, string text)
|
||||
{
|
||||
if (m_Object != null && !m_Book.Entries.Contains(m_Object))
|
||||
{
|
||||
from.SendLocalizedMessage(1062382); // The deed selected is not available.
|
||||
return;
|
||||
}
|
||||
|
||||
int price = Utility.ToInt32(text);
|
||||
|
||||
if (price < 0 || price > 250000000)
|
||||
{
|
||||
from.SendLocalizedMessage(1062390); // The price you requested is outrageous!
|
||||
}
|
||||
else if (m_Object == null)
|
||||
{
|
||||
for (int i = 0; i < m_List.Count; ++i)
|
||||
{
|
||||
object obj = m_List[i];
|
||||
|
||||
if (!m_Book.Entries.Contains(obj))
|
||||
continue;
|
||||
|
||||
if (obj is BOBLargeEntry)
|
||||
((BOBLargeEntry)obj).Price = price;
|
||||
else if (obj is BOBSmallEntry)
|
||||
((BOBSmallEntry)obj).Price = price;
|
||||
}
|
||||
|
||||
from.SendMessage("Deed prices set.");
|
||||
|
||||
if (from is PlayerMobile)
|
||||
from.SendGump(new BOBGump((PlayerMobile)from, m_Book, m_Page, m_List));
|
||||
}
|
||||
else if (m_Object is BOBLargeEntry)
|
||||
{
|
||||
((BOBLargeEntry)m_Object).Price = price;
|
||||
|
||||
from.SendLocalizedMessage(1062384); // Deed price set.
|
||||
|
||||
if (from is PlayerMobile)
|
||||
from.SendGump(new BOBGump((PlayerMobile)from, m_Book, m_Page, m_List));
|
||||
}
|
||||
else if (m_Object is BOBSmallEntry)
|
||||
{
|
||||
((BOBSmallEntry)m_Object).Price = price;
|
||||
|
||||
from.SendLocalizedMessage(1062384); // Deed price set.
|
||||
|
||||
if (from is PlayerMobile)
|
||||
from.SendGump(new BOBGump((PlayerMobile)from, m_Book, m_Page, m_List));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
179
Scripts/Services/BulkOrders/Books/BOBLargeEntry.cs
Normal file
179
Scripts/Services/BulkOrders/Books/BOBLargeEntry.cs
Normal file
@@ -0,0 +1,179 @@
|
||||
using System;
|
||||
using Server.Items;
|
||||
|
||||
namespace Server.Engines.BulkOrders
|
||||
{
|
||||
public class BOBLargeEntry
|
||||
{
|
||||
private readonly bool m_RequireExceptional;
|
||||
private readonly BODType m_DeedType;
|
||||
private readonly BulkMaterialType m_Material;
|
||||
private readonly int m_AmountMax;
|
||||
private readonly BOBLargeSubEntry[] m_Entries;
|
||||
private int m_Price;
|
||||
|
||||
private GemType m_GemType;
|
||||
|
||||
public BOBLargeEntry(LargeBOD bod)
|
||||
{
|
||||
m_RequireExceptional = bod.RequireExceptional;
|
||||
|
||||
m_DeedType = bod.BODType;
|
||||
|
||||
m_Material = bod.Material;
|
||||
m_AmountMax = bod.AmountMax;
|
||||
|
||||
m_Entries = new BOBLargeSubEntry[bod.Entries.Length];
|
||||
|
||||
for (int i = 0; i < m_Entries.Length; ++i)
|
||||
m_Entries[i] = new BOBLargeSubEntry(bod.Entries[i]);
|
||||
|
||||
if (bod is LargeTinkerBOD)
|
||||
{
|
||||
m_GemType = ((LargeTinkerBOD)bod).GemType;
|
||||
}
|
||||
}
|
||||
|
||||
public BOBLargeEntry(GenericReader reader)
|
||||
{
|
||||
int version = reader.ReadEncodedInt();
|
||||
|
||||
switch ( version )
|
||||
{
|
||||
case 1:
|
||||
{
|
||||
m_GemType = (GemType)reader.ReadInt();
|
||||
goto case 0;
|
||||
}
|
||||
case 0:
|
||||
{
|
||||
m_RequireExceptional = reader.ReadBool();
|
||||
|
||||
m_DeedType = (BODType)reader.ReadEncodedInt();
|
||||
|
||||
m_Material = (BulkMaterialType)reader.ReadEncodedInt();
|
||||
m_AmountMax = reader.ReadEncodedInt();
|
||||
m_Price = reader.ReadEncodedInt();
|
||||
|
||||
m_Entries = new BOBLargeSubEntry[reader.ReadEncodedInt()];
|
||||
|
||||
for (int i = 0; i < m_Entries.Length; ++i)
|
||||
m_Entries[i] = new BOBLargeSubEntry(reader);
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public bool RequireExceptional
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_RequireExceptional;
|
||||
}
|
||||
}
|
||||
public BODType DeedType
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_DeedType;
|
||||
}
|
||||
}
|
||||
public BulkMaterialType Material
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_Material;
|
||||
}
|
||||
}
|
||||
public int AmountMax
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_AmountMax;
|
||||
}
|
||||
}
|
||||
public int Price
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_Price;
|
||||
}
|
||||
set
|
||||
{
|
||||
m_Price = value;
|
||||
}
|
||||
}
|
||||
public GemType GemType
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_GemType;
|
||||
}
|
||||
set
|
||||
{
|
||||
m_GemType = value;
|
||||
}
|
||||
}
|
||||
public BOBLargeSubEntry[] Entries
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_Entries;
|
||||
}
|
||||
}
|
||||
public Item Reconstruct()
|
||||
{
|
||||
LargeBOD bod = null;
|
||||
|
||||
switch (m_DeedType)
|
||||
{
|
||||
case BODType.Smith: bod = new LargeSmithBOD(m_AmountMax, m_RequireExceptional, m_Material, ReconstructEntries()); break;
|
||||
case BODType.Tailor: bod = new LargeTailorBOD(m_AmountMax, m_RequireExceptional, m_Material, ReconstructEntries()); break;
|
||||
case BODType.Inscription: bod = new LargeInscriptionBOD(m_AmountMax, m_RequireExceptional, m_Material, ReconstructEntries()); break;
|
||||
case BODType.Alchemy: bod = new LargeAlchemyBOD(m_AmountMax, m_RequireExceptional, m_Material, ReconstructEntries()); break;
|
||||
case BODType.Carpentry: bod = new LargeCarpentryBOD(m_AmountMax, m_RequireExceptional, m_Material, ReconstructEntries()); break;
|
||||
case BODType.Fletching: bod = new LargeFletchingBOD(m_AmountMax, m_RequireExceptional, m_Material, ReconstructEntries()); break;
|
||||
case BODType.Tinkering: bod = new LargeTinkerBOD(m_AmountMax, m_RequireExceptional, m_Material, ReconstructEntries(), m_GemType); break;
|
||||
case BODType.Cooking: bod = new LargeCookingBOD(m_AmountMax, m_RequireExceptional, m_Material, ReconstructEntries()); break;
|
||||
}
|
||||
|
||||
for (int i = 0; bod != null && i < bod.Entries.Length; ++i)
|
||||
bod.Entries[i].Owner = bod;
|
||||
|
||||
return bod;
|
||||
}
|
||||
|
||||
public void Serialize(GenericWriter writer)
|
||||
{
|
||||
writer.WriteEncodedInt(1); // version
|
||||
|
||||
writer.Write((int)m_GemType);
|
||||
|
||||
writer.Write((bool)m_RequireExceptional);
|
||||
|
||||
writer.WriteEncodedInt((int)m_DeedType);
|
||||
writer.WriteEncodedInt((int)m_Material);
|
||||
writer.WriteEncodedInt((int)m_AmountMax);
|
||||
writer.WriteEncodedInt((int)m_Price);
|
||||
|
||||
writer.WriteEncodedInt((int)m_Entries.Length);
|
||||
|
||||
for (int i = 0; i < m_Entries.Length; ++i)
|
||||
m_Entries[i].Serialize(writer);
|
||||
}
|
||||
|
||||
private LargeBulkEntry[] ReconstructEntries()
|
||||
{
|
||||
LargeBulkEntry[] entries = new LargeBulkEntry[m_Entries.Length];
|
||||
|
||||
for (int i = 0; i < m_Entries.Length; ++i)
|
||||
{
|
||||
entries[i] = new LargeBulkEntry(null, new SmallBulkEntry(m_Entries[i].ItemType, m_Entries[i].Number, m_Entries[i].Graphic, m_Entries[i].Hue));
|
||||
entries[i].Amount = m_Entries[i].AmountCur;
|
||||
}
|
||||
|
||||
return entries;
|
||||
}
|
||||
}
|
||||
}
|
||||
97
Scripts/Services/BulkOrders/Books/BOBLargeSubEntry.cs
Normal file
97
Scripts/Services/BulkOrders/Books/BOBLargeSubEntry.cs
Normal file
@@ -0,0 +1,97 @@
|
||||
using System;
|
||||
|
||||
namespace Server.Engines.BulkOrders
|
||||
{
|
||||
public class BOBLargeSubEntry
|
||||
{
|
||||
private readonly Type m_ItemType;
|
||||
private readonly int m_AmountCur;
|
||||
private readonly int m_Number;
|
||||
private readonly int m_Graphic;
|
||||
private readonly int m_Hue;
|
||||
|
||||
public BOBLargeSubEntry(LargeBulkEntry lbe)
|
||||
{
|
||||
m_ItemType = lbe.Details.Type;
|
||||
m_AmountCur = lbe.Amount;
|
||||
m_Number = lbe.Details.Number;
|
||||
m_Graphic = lbe.Details.Graphic;
|
||||
m_Hue = lbe.Details.Hue;
|
||||
}
|
||||
|
||||
public BOBLargeSubEntry(GenericReader reader)
|
||||
{
|
||||
int version = reader.ReadEncodedInt();
|
||||
|
||||
switch ( version )
|
||||
{
|
||||
case 1:
|
||||
{
|
||||
m_Hue = reader.ReadEncodedInt();
|
||||
goto case 0;
|
||||
}
|
||||
case 0:
|
||||
{
|
||||
string type = reader.ReadString();
|
||||
|
||||
if (type != null)
|
||||
m_ItemType = ScriptCompiler.FindTypeByFullName(type);
|
||||
|
||||
m_AmountCur = reader.ReadEncodedInt();
|
||||
m_Number = reader.ReadEncodedInt();
|
||||
m_Graphic = reader.ReadEncodedInt();
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public Type ItemType
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_ItemType;
|
||||
}
|
||||
}
|
||||
public int AmountCur
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_AmountCur;
|
||||
}
|
||||
}
|
||||
public int Number
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_Number;
|
||||
}
|
||||
}
|
||||
public int Graphic
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_Graphic;
|
||||
}
|
||||
}
|
||||
public int Hue
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_Hue;
|
||||
}
|
||||
}
|
||||
public void Serialize(GenericWriter writer)
|
||||
{
|
||||
writer.WriteEncodedInt(1); // version
|
||||
|
||||
writer.WriteEncodedInt((int)m_Hue);
|
||||
|
||||
writer.Write(m_ItemType == null ? null : m_ItemType.FullName);
|
||||
|
||||
writer.WriteEncodedInt((int)m_AmountCur);
|
||||
writer.WriteEncodedInt((int)m_Number);
|
||||
writer.WriteEncodedInt((int)m_Graphic);
|
||||
}
|
||||
}
|
||||
}
|
||||
201
Scripts/Services/BulkOrders/Books/BOBSmallEntry.cs
Normal file
201
Scripts/Services/BulkOrders/Books/BOBSmallEntry.cs
Normal file
@@ -0,0 +1,201 @@
|
||||
using System;
|
||||
using Server.Items;
|
||||
|
||||
namespace Server.Engines.BulkOrders
|
||||
{
|
||||
public class BOBSmallEntry
|
||||
{
|
||||
private readonly Type m_ItemType;
|
||||
private readonly bool m_RequireExceptional;
|
||||
private readonly BODType m_DeedType;
|
||||
private readonly BulkMaterialType m_Material;
|
||||
private readonly int m_AmountCur;
|
||||
private readonly int m_AmountMax;
|
||||
private readonly int m_Number;
|
||||
private readonly int m_Graphic;
|
||||
private readonly int m_Hue;
|
||||
private readonly GemType m_GemType;
|
||||
|
||||
private int m_Price;
|
||||
|
||||
public BOBSmallEntry(SmallBOD bod)
|
||||
{
|
||||
m_ItemType = bod.Type;
|
||||
m_RequireExceptional = bod.RequireExceptional;
|
||||
|
||||
m_DeedType = bod.BODType;
|
||||
|
||||
m_Material = bod.Material;
|
||||
m_AmountCur = bod.AmountCur;
|
||||
m_AmountMax = bod.AmountMax;
|
||||
m_Number = bod.Number;
|
||||
m_Graphic = bod.Graphic;
|
||||
m_Hue = bod.GraphicHue;
|
||||
|
||||
if (bod is SmallTinkerBOD)
|
||||
{
|
||||
m_GemType = ((SmallTinkerBOD)bod).GemType;
|
||||
}
|
||||
}
|
||||
|
||||
public BOBSmallEntry(GenericReader reader)
|
||||
{
|
||||
int version = reader.ReadEncodedInt();
|
||||
|
||||
switch ( version )
|
||||
{
|
||||
case 2:
|
||||
{
|
||||
m_GemType = (GemType)reader.ReadInt();
|
||||
goto case 1;
|
||||
}
|
||||
case 1:
|
||||
{
|
||||
m_Hue = reader.ReadInt();
|
||||
goto case 0;
|
||||
}
|
||||
case 0:
|
||||
{
|
||||
string type = reader.ReadString();
|
||||
|
||||
if (type != null)
|
||||
m_ItemType = ScriptCompiler.FindTypeByFullName(type);
|
||||
|
||||
m_RequireExceptional = reader.ReadBool();
|
||||
|
||||
m_DeedType = (BODType)reader.ReadEncodedInt();
|
||||
|
||||
m_Material = (BulkMaterialType)reader.ReadEncodedInt();
|
||||
m_AmountCur = reader.ReadEncodedInt();
|
||||
m_AmountMax = reader.ReadEncodedInt();
|
||||
m_Number = reader.ReadEncodedInt();
|
||||
m_Graphic = reader.ReadEncodedInt();
|
||||
m_Price = reader.ReadEncodedInt();
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public Type ItemType
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_ItemType;
|
||||
}
|
||||
}
|
||||
public bool RequireExceptional
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_RequireExceptional;
|
||||
}
|
||||
}
|
||||
public BODType DeedType
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_DeedType;
|
||||
}
|
||||
}
|
||||
public BulkMaterialType Material
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_Material;
|
||||
}
|
||||
}
|
||||
public int AmountCur
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_AmountCur;
|
||||
}
|
||||
}
|
||||
public int AmountMax
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_AmountMax;
|
||||
}
|
||||
}
|
||||
public int Number
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_Number;
|
||||
}
|
||||
}
|
||||
public int Graphic
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_Graphic;
|
||||
}
|
||||
}
|
||||
public int Hue
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_Hue;
|
||||
}
|
||||
}
|
||||
public GemType GemType
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_GemType;
|
||||
}
|
||||
}
|
||||
public int Price
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_Price;
|
||||
}
|
||||
set
|
||||
{
|
||||
m_Price = value;
|
||||
}
|
||||
}
|
||||
public Item Reconstruct()
|
||||
{
|
||||
SmallBOD bod = null;
|
||||
|
||||
switch (m_DeedType)
|
||||
{
|
||||
case BODType.Smith: bod = new SmallSmithBOD(m_AmountCur, m_AmountMax, m_ItemType, m_Number, m_Graphic, m_RequireExceptional, m_Material, m_Hue); break;
|
||||
case BODType.Tailor: bod = new SmallTailorBOD(m_AmountCur, m_AmountMax, m_ItemType, m_Number, m_Graphic, m_RequireExceptional, m_Material, m_Hue); break;
|
||||
case BODType.Inscription: bod = new SmallInscriptionBOD(m_AmountCur, m_AmountMax, m_ItemType, m_Number, m_Graphic, m_RequireExceptional, m_Material, m_Hue); break;
|
||||
case BODType.Alchemy: bod = new SmallAlchemyBOD(m_AmountCur, m_AmountMax, m_ItemType, m_Number, m_Graphic, m_RequireExceptional, m_Material, m_Hue); break;
|
||||
case BODType.Carpentry: bod = new SmallCarpentryBOD(m_AmountCur, m_AmountMax, m_ItemType, m_Number, m_Graphic, m_RequireExceptional, m_Material, m_Hue); break;
|
||||
case BODType.Fletching: bod = new SmallFletchingBOD(m_AmountCur, m_AmountMax, m_ItemType, m_Number, m_Graphic, m_RequireExceptional, m_Material, m_Hue); break;
|
||||
case BODType.Tinkering: bod = new SmallTinkerBOD(m_AmountCur, m_AmountMax, m_ItemType, m_Number, m_Graphic, m_RequireExceptional, m_Material, m_Hue, m_GemType); break;
|
||||
case BODType.Cooking: bod = new SmallCookingBOD(m_AmountCur, m_AmountMax, m_ItemType, m_Number, m_Graphic, m_RequireExceptional, m_Material, m_Hue); break;
|
||||
}
|
||||
|
||||
return bod;
|
||||
}
|
||||
|
||||
public void Serialize(GenericWriter writer)
|
||||
{
|
||||
writer.WriteEncodedInt(2); // version
|
||||
|
||||
writer.Write((int)m_GemType);
|
||||
|
||||
writer.Write(m_Hue);
|
||||
|
||||
writer.Write(m_ItemType == null ? null : m_ItemType.FullName);
|
||||
|
||||
writer.Write((bool)m_RequireExceptional);
|
||||
|
||||
writer.WriteEncodedInt((int)m_DeedType);
|
||||
writer.WriteEncodedInt((int)m_Material);
|
||||
writer.WriteEncodedInt((int)m_AmountCur);
|
||||
writer.WriteEncodedInt((int)m_AmountMax);
|
||||
writer.WriteEncodedInt((int)m_Number);
|
||||
writer.WriteEncodedInt((int)m_Graphic);
|
||||
writer.WriteEncodedInt((int)m_Price);
|
||||
}
|
||||
}
|
||||
}
|
||||
137
Scripts/Services/BulkOrders/Books/BODBuyGump.cs
Normal file
137
Scripts/Services/BulkOrders/Books/BODBuyGump.cs
Normal file
@@ -0,0 +1,137 @@
|
||||
using System;
|
||||
using Server.Gumps;
|
||||
using Server.Items;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Engines.BulkOrders
|
||||
{
|
||||
public class BODBuyGump : Gump
|
||||
{
|
||||
private readonly PlayerMobile m_From;
|
||||
private readonly BulkOrderBook m_Book;
|
||||
private readonly object m_Object;
|
||||
private readonly int m_Price;
|
||||
private readonly int m_Page;
|
||||
public BODBuyGump(PlayerMobile from, BulkOrderBook book, object obj, int page, int price)
|
||||
: base(100, 200)
|
||||
{
|
||||
this.m_From = from;
|
||||
this.m_Book = book;
|
||||
this.m_Object = obj;
|
||||
this.m_Price = price;
|
||||
this.m_Page = page;
|
||||
|
||||
this.AddPage(0);
|
||||
|
||||
this.AddBackground(100, 10, 300, 150, 5054);
|
||||
|
||||
this.AddHtmlLocalized(125, 20, 250, 24, 1019070, false, false); // You have agreed to purchase:
|
||||
this.AddHtmlLocalized(125, 45, 250, 24, 1045151, false, false); // a bulk order deed
|
||||
|
||||
this.AddHtmlLocalized(125, 70, 250, 24, 1019071, false, false); // for the amount of:
|
||||
this.AddLabel(125, 95, 0, price.ToString());
|
||||
|
||||
this.AddButton(250, 130, 4005, 4007, 1, GumpButtonType.Reply, 0);
|
||||
this.AddHtmlLocalized(282, 130, 100, 24, 1011012, false, false); // CANCEL
|
||||
|
||||
this.AddButton(120, 130, 4005, 4007, 2, GumpButtonType.Reply, 0);
|
||||
this.AddHtmlLocalized(152, 130, 100, 24, 1011036, false, false); // OKAY
|
||||
}
|
||||
|
||||
public override void OnResponse(Server.Network.NetState sender, RelayInfo info)
|
||||
{
|
||||
if (info.ButtonID == 2)
|
||||
{
|
||||
PlayerVendor pv = this.m_Book.RootParent as PlayerVendor;
|
||||
|
||||
if (this.m_Book.Entries.Contains(this.m_Object) && pv != null)
|
||||
{
|
||||
int price = 0;
|
||||
|
||||
VendorItem vi = pv.GetVendorItem(this.m_Book);
|
||||
|
||||
if (vi != null && !vi.IsForSale)
|
||||
{
|
||||
if (this.m_Object is BOBLargeEntry)
|
||||
price = ((BOBLargeEntry)this.m_Object).Price;
|
||||
else if (this.m_Object is BOBSmallEntry)
|
||||
price = ((BOBSmallEntry)this.m_Object).Price;
|
||||
}
|
||||
|
||||
if (price != this.m_Price)
|
||||
{
|
||||
pv.SayTo(this.m_From, "The price has been been changed. If you like, you may offer to purchase the item again.");
|
||||
}
|
||||
else if (price == 0)
|
||||
{
|
||||
pv.SayTo(this.m_From, 1062382); // The deed selected is not available.
|
||||
}
|
||||
else
|
||||
{
|
||||
Item item = null;
|
||||
|
||||
if (this.m_Object is BOBLargeEntry)
|
||||
item = ((BOBLargeEntry)this.m_Object).Reconstruct();
|
||||
else if (this.m_Object is BOBSmallEntry)
|
||||
item = ((BOBSmallEntry)this.m_Object).Reconstruct();
|
||||
|
||||
if (item == null)
|
||||
{
|
||||
this.m_From.SendMessage("Internal error. The bulk order deed could not be reconstructed.");
|
||||
}
|
||||
else
|
||||
{
|
||||
pv.Say(this.m_From.Name);
|
||||
|
||||
Container pack = this.m_From.Backpack;
|
||||
|
||||
if ((pack == null) || ((pack != null) && (!pack.CheckHold(this.m_From, item, true, true, 0, item.PileWeight + item.TotalWeight))))
|
||||
{
|
||||
pv.SayTo(this.m_From, 503204); // You do not have room in your backpack for this
|
||||
this.m_From.SendGump(new BOBGump(this.m_From, this.m_Book, this.m_Page, null));
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((pack != null && pack.ConsumeTotal(typeof(Gold), price)) || Banker.Withdraw(this.m_From, price))
|
||||
{
|
||||
this.m_Book.Entries.Remove(this.m_Object);
|
||||
this.m_Book.InvalidateProperties();
|
||||
pv.HoldGold += price;
|
||||
this.m_From.AddToBackpack(item);
|
||||
this.m_From.SendLocalizedMessage(1045152); // The bulk order deed has been placed in your backpack.
|
||||
|
||||
if (this.m_Book.Entries.Count / 5 < this.m_Book.ItemCount)
|
||||
{
|
||||
this.m_Book.ItemCount--;
|
||||
this.m_Book.InvalidateItems();
|
||||
}
|
||||
|
||||
if (this.m_Book.Entries.Count > 0)
|
||||
this.m_From.SendGump(new BOBGump(this.m_From, this.m_Book, this.m_Page, null));
|
||||
else
|
||||
this.m_From.SendLocalizedMessage(1062381); // The book is empty.
|
||||
}
|
||||
else
|
||||
{
|
||||
pv.SayTo(this.m_From, 503205); // You cannot afford this item.
|
||||
item.Delete();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (pv == null)
|
||||
this.m_From.SendLocalizedMessage(1062382); // The deed selected is not available.
|
||||
else
|
||||
pv.SayTo(this.m_From, 1062382); // The deed selected is not available.
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
this.m_From.SendLocalizedMessage(503207); // Cancelled purchase.
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
16
Scripts/Services/BulkOrders/Books/BODType.cs
Normal file
16
Scripts/Services/BulkOrders/Books/BODType.cs
Normal file
@@ -0,0 +1,16 @@
|
||||
using System;
|
||||
|
||||
namespace Server.Engines.BulkOrders
|
||||
{
|
||||
public enum BODType
|
||||
{
|
||||
Smith,
|
||||
Tailor,
|
||||
Alchemy,
|
||||
Inscription,
|
||||
Tinkering,
|
||||
Fletching,
|
||||
Carpentry,
|
||||
Cooking
|
||||
}
|
||||
}
|
||||
358
Scripts/Services/BulkOrders/Books/BulkOrderBook.cs
Normal file
358
Scripts/Services/BulkOrders/Books/BulkOrderBook.cs
Normal file
@@ -0,0 +1,358 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using Server.ContextMenus;
|
||||
using Server.Gumps;
|
||||
using Server.Items;
|
||||
using Server.Mobiles;
|
||||
using Server.Multis;
|
||||
using Server.Prompts;
|
||||
|
||||
namespace Server.Engines.BulkOrders
|
||||
{
|
||||
public class BulkOrderBook : Item, ISecurable
|
||||
{
|
||||
private ArrayList m_Entries;
|
||||
private BOBFilter m_Filter;
|
||||
private string m_BookName;
|
||||
private SecureLevel m_Level;
|
||||
private int m_ItemCount;
|
||||
[Constructable]
|
||||
public BulkOrderBook()
|
||||
: base(0x2259)
|
||||
{
|
||||
this.Weight = 1.0;
|
||||
this.LootType = LootType.Blessed;
|
||||
|
||||
this.m_Entries = new ArrayList();
|
||||
this.m_Filter = new BOBFilter();
|
||||
|
||||
this.m_Level = SecureLevel.CoOwners;
|
||||
}
|
||||
|
||||
public BulkOrderBook(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public string BookName
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.m_BookName;
|
||||
}
|
||||
set
|
||||
{
|
||||
this.m_BookName = value;
|
||||
this.InvalidateProperties();
|
||||
}
|
||||
}
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public SecureLevel Level
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.m_Level;
|
||||
}
|
||||
set
|
||||
{
|
||||
this.m_Level = value;
|
||||
}
|
||||
}
|
||||
public ArrayList Entries
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.m_Entries;
|
||||
}
|
||||
}
|
||||
public BOBFilter Filter
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.m_Filter;
|
||||
}
|
||||
}
|
||||
public int ItemCount
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.m_ItemCount;
|
||||
}
|
||||
set
|
||||
{
|
||||
this.m_ItemCount = value;
|
||||
}
|
||||
}
|
||||
public override void OnDoubleClick(Mobile from)
|
||||
{
|
||||
if (!from.InRange(this.GetWorldLocation(), 2))
|
||||
from.LocalOverheadMessage(Network.MessageType.Regular, 0x3B2, 1019045); // I can't reach that.
|
||||
else if (this.m_Entries.Count == 0)
|
||||
from.SendLocalizedMessage(1062381); // The book is empty.
|
||||
else if (from is PlayerMobile)
|
||||
from.SendGump(new BOBGump((PlayerMobile)from, this));
|
||||
}
|
||||
|
||||
public override void OnDoubleClickSecureTrade(Mobile from)
|
||||
{
|
||||
if (!from.InRange(this.GetWorldLocation(), 2))
|
||||
{
|
||||
from.SendLocalizedMessage(500446); // That is too far away.
|
||||
}
|
||||
else if (this.m_Entries.Count == 0)
|
||||
{
|
||||
from.SendLocalizedMessage(1062381); // The book is empty.
|
||||
}
|
||||
else
|
||||
{
|
||||
from.SendGump(new BOBGump((PlayerMobile)from, this));
|
||||
|
||||
SecureTradeContainer cont = this.GetSecureTradeCont();
|
||||
|
||||
if (cont != null)
|
||||
{
|
||||
SecureTrade trade = cont.Trade;
|
||||
|
||||
if (trade != null && trade.From.Mobile == from)
|
||||
trade.To.Mobile.SendGump(new BOBGump((PlayerMobile)(trade.To.Mobile), this));
|
||||
else if (trade != null && trade.To.Mobile == from)
|
||||
trade.From.Mobile.SendGump(new BOBGump((PlayerMobile)(trade.From.Mobile), this));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public override bool OnDragDrop(Mobile from, Item dropped)
|
||||
{
|
||||
if (dropped is LargeBOD || dropped is SmallBOD)
|
||||
{
|
||||
if (!this.IsChildOf(from.Backpack))
|
||||
{
|
||||
from.SendLocalizedMessage(1062385); // You must have the book in your backpack to add deeds to it.
|
||||
return false;
|
||||
}
|
||||
else if (!from.Backpack.CheckHold(from, dropped, true, true))
|
||||
return false;
|
||||
else if (this.m_Entries.Count < 500)
|
||||
{
|
||||
if (dropped is LargeBOD)
|
||||
this.m_Entries.Add(new BOBLargeEntry((LargeBOD)dropped));
|
||||
else if (dropped is SmallBOD) // Sanity
|
||||
this.m_Entries.Add(new BOBSmallEntry((SmallBOD)dropped));
|
||||
|
||||
this.InvalidateProperties();
|
||||
|
||||
if (this.m_Entries.Count / 5 > this.m_ItemCount)
|
||||
{
|
||||
this.m_ItemCount++;
|
||||
this.InvalidateItems();
|
||||
}
|
||||
|
||||
from.SendSound(0x42, this.GetWorldLocation());
|
||||
from.SendLocalizedMessage(1062386); // Deed added to book.
|
||||
|
||||
if (from is PlayerMobile)
|
||||
from.SendGump(new BOBGump((PlayerMobile)from, this));
|
||||
|
||||
dropped.Delete();
|
||||
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
from.SendLocalizedMessage(1062387); // The book is full of deeds.
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
from.SendLocalizedMessage(1062388); // That is not a bulk order deed.
|
||||
return false;
|
||||
}
|
||||
|
||||
public override int GetTotal(TotalType type)
|
||||
{
|
||||
int total = base.GetTotal(type);
|
||||
|
||||
if (type == TotalType.Items)
|
||||
total = this.m_ItemCount;
|
||||
|
||||
return total;
|
||||
}
|
||||
|
||||
public void InvalidateItems()
|
||||
{
|
||||
if (this.RootParent is Mobile)
|
||||
{
|
||||
Mobile m = (Mobile)this.RootParent;
|
||||
|
||||
m.UpdateTotals();
|
||||
this.InvalidateContainers(this.Parent);
|
||||
}
|
||||
}
|
||||
|
||||
public void InvalidateContainers(object parent)
|
||||
{
|
||||
if (parent != null && parent is Container)
|
||||
{
|
||||
Container c = (Container)parent;
|
||||
|
||||
c.InvalidateProperties();
|
||||
this.InvalidateContainers(c.Parent);
|
||||
}
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write((int)2); // version
|
||||
|
||||
writer.Write((int)this.m_ItemCount);
|
||||
|
||||
writer.Write((int)this.m_Level);
|
||||
|
||||
writer.Write(this.m_BookName);
|
||||
|
||||
this.m_Filter.Serialize(writer);
|
||||
|
||||
writer.WriteEncodedInt((int)this.m_Entries.Count);
|
||||
|
||||
for (int i = 0; i < this.m_Entries.Count; ++i)
|
||||
{
|
||||
object obj = this.m_Entries[i];
|
||||
|
||||
if (obj is BOBLargeEntry)
|
||||
{
|
||||
writer.WriteEncodedInt(0);
|
||||
((BOBLargeEntry)obj).Serialize(writer);
|
||||
}
|
||||
else if (obj is BOBSmallEntry)
|
||||
{
|
||||
writer.WriteEncodedInt(1);
|
||||
((BOBSmallEntry)obj).Serialize(writer);
|
||||
}
|
||||
else
|
||||
{
|
||||
writer.WriteEncodedInt(-1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
|
||||
switch ( version )
|
||||
{
|
||||
case 2:
|
||||
{
|
||||
this.m_ItemCount = reader.ReadInt();
|
||||
goto case 1;
|
||||
}
|
||||
case 1:
|
||||
{
|
||||
this.m_Level = (SecureLevel)reader.ReadInt();
|
||||
goto case 0;
|
||||
}
|
||||
case 0:
|
||||
{
|
||||
this.m_BookName = reader.ReadString();
|
||||
|
||||
this.m_Filter = new BOBFilter(reader);
|
||||
|
||||
int count = reader.ReadEncodedInt();
|
||||
|
||||
this.m_Entries = new ArrayList(count);
|
||||
|
||||
for (int i = 0; i < count; ++i)
|
||||
{
|
||||
int v = reader.ReadEncodedInt();
|
||||
|
||||
switch ( v )
|
||||
{
|
||||
case 0:
|
||||
this.m_Entries.Add(new BOBLargeEntry(reader));
|
||||
break;
|
||||
case 1:
|
||||
this.m_Entries.Add(new BOBSmallEntry(reader));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public override void GetProperties(ObjectPropertyList list)
|
||||
{
|
||||
base.GetProperties(list);
|
||||
|
||||
list.Add(1062344, this.m_Entries.Count.ToString()); // Deeds in book: ~1_val~
|
||||
|
||||
if (this.m_BookName != null && this.m_BookName.Length > 0)
|
||||
list.Add(1062481, this.m_BookName); // Book Name: ~1_val~
|
||||
}
|
||||
|
||||
public override void GetContextMenuEntries(Mobile from, List<ContextMenuEntry> list)
|
||||
{
|
||||
base.GetContextMenuEntries(from, list);
|
||||
|
||||
if (from.CheckAlive() && this.IsChildOf(from.Backpack))
|
||||
list.Add(new NameBookEntry(from, this));
|
||||
|
||||
SetSecureLevelEntry.AddTo(from, this, list);
|
||||
}
|
||||
|
||||
private class NameBookEntry : ContextMenuEntry
|
||||
{
|
||||
private readonly Mobile m_From;
|
||||
private readonly BulkOrderBook m_Book;
|
||||
public NameBookEntry(Mobile from, BulkOrderBook book)
|
||||
: base(6216)
|
||||
{
|
||||
this.m_From = from;
|
||||
this.m_Book = book;
|
||||
}
|
||||
|
||||
public override void OnClick()
|
||||
{
|
||||
if (this.m_From.CheckAlive() && this.m_Book.IsChildOf(this.m_From.Backpack))
|
||||
{
|
||||
this.m_From.Prompt = new NameBookPrompt(this.m_Book);
|
||||
this.m_From.SendLocalizedMessage(1062479); // Type in the new name of the book:
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private class NameBookPrompt : Prompt
|
||||
{
|
||||
public override int MessageCliloc { get { return 1062479; } }
|
||||
private readonly BulkOrderBook m_Book;
|
||||
public NameBookPrompt(BulkOrderBook book)
|
||||
{
|
||||
this.m_Book = book;
|
||||
}
|
||||
|
||||
public override void OnResponse(Mobile from, string text)
|
||||
{
|
||||
if (text.Length > 40)
|
||||
text = text.Substring(0, 40);
|
||||
|
||||
if (from.CheckAlive() && this.m_Book.IsChildOf(from.Backpack))
|
||||
{
|
||||
this.m_Book.BookName = Utility.FixHtml(text.Trim());
|
||||
|
||||
from.SendLocalizedMessage(1062480); // The bulk order book's name has been changed.
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnCancel(Mobile from)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user