148 lines
3.3 KiB
C#
148 lines
3.3 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using Server.Items;
|
|
|
|
namespace Server.Mobiles
|
|
{
|
|
public class GenericSellInfo : IShopSellInfo
|
|
{
|
|
private Dictionary<Type, int> m_Table = new Dictionary<Type, int>();
|
|
private Type[] m_Types;
|
|
|
|
public GenericSellInfo()
|
|
{
|
|
}
|
|
|
|
public void Add( Type type, int price )
|
|
{
|
|
m_Table[type] = price;
|
|
m_Types = null;
|
|
}
|
|
|
|
public int GetSellPriceFor( Item item )
|
|
{
|
|
int price = 0;
|
|
m_Table.TryGetValue( item.GetType(), out price );
|
|
|
|
if ( item is BaseArmor ) {
|
|
BaseArmor armor = (BaseArmor)item;
|
|
|
|
if ( armor.Quality == ArmorQuality.Low )
|
|
price = (int)( price * 0.60 );
|
|
else if ( armor.Quality == ArmorQuality.Exceptional )
|
|
price = (int)( price * 1.25 );
|
|
|
|
price += 100 * (int)armor.Durability;
|
|
|
|
price += 100 * (int)armor.ProtectionLevel;
|
|
|
|
if ( price < 1 )
|
|
price = 1;
|
|
}
|
|
else if ( item is BaseWeapon ) {
|
|
BaseWeapon weapon = (BaseWeapon)item;
|
|
|
|
if ( weapon.Quality == WeaponQuality.Low )
|
|
price = (int)( price * 0.60 );
|
|
else if ( weapon.Quality == WeaponQuality.Exceptional )
|
|
price = (int)( price * 1.25 );
|
|
|
|
price += 100 * (int)weapon.DurabilityLevel;
|
|
|
|
price += 100 * (int)weapon.DamageLevel;
|
|
|
|
if ( price < 1 )
|
|
price = 1;
|
|
}
|
|
else if ( item is BaseJewel ) {
|
|
BaseJewel jewel = (BaseJewel)item;
|
|
|
|
if ( jewel.GemType == GemType.StarSapphire )
|
|
price += 62;
|
|
else if ( jewel.GemType == GemType.Emerald )
|
|
price += 50;
|
|
else if ( jewel.GemType == GemType.Sapphire )
|
|
price += 50;
|
|
else if ( jewel.GemType == GemType.Ruby )
|
|
price += 37;
|
|
else if ( jewel.GemType == GemType.Citrine )
|
|
price += 25;
|
|
else if ( jewel.GemType == GemType.Amethyst )
|
|
price += 50;
|
|
else if ( jewel.GemType == GemType.Tourmaline )
|
|
price += 47;
|
|
else if ( jewel.GemType == GemType.Amber )
|
|
price += 25;
|
|
else if ( jewel.GemType == GemType.Diamond )
|
|
price += 100;
|
|
}
|
|
else if ( item is BaseBeverage ) {
|
|
int price1 = price, price2 = price;
|
|
|
|
if ( item is Pitcher )
|
|
{ price1 = 3; price2 = 5; }
|
|
else if ( item is BeverageBottle )
|
|
{ price1 = 3; price2 = 3; }
|
|
else if ( item is Jug )
|
|
{ price1 = 6; price2 = 6; }
|
|
|
|
BaseBeverage bev = (BaseBeverage)item;
|
|
|
|
if ( bev.IsEmpty || bev.Content == BeverageType.Milk )
|
|
price = price1;
|
|
else
|
|
price = price2;
|
|
}
|
|
|
|
return price;
|
|
}
|
|
|
|
public int GetBuyPriceFor( Item item )
|
|
{
|
|
return (int)( 1.90 * GetSellPriceFor( item ) );
|
|
}
|
|
|
|
public Type[] Types
|
|
{
|
|
get
|
|
{
|
|
if ( m_Types == null )
|
|
{
|
|
m_Types = new Type[m_Table.Keys.Count];
|
|
m_Table.Keys.CopyTo( m_Types, 0 );
|
|
}
|
|
|
|
return m_Types;
|
|
}
|
|
}
|
|
|
|
public string GetNameFor( Item item )
|
|
{
|
|
if ( item.Name != null )
|
|
return item.Name;
|
|
else
|
|
return item.LabelNumber.ToString();
|
|
}
|
|
|
|
public bool IsSellable( Item item )
|
|
{
|
|
//if ( item.Hue != 0 )
|
|
//return false;
|
|
|
|
return IsInList( item.GetType() );
|
|
}
|
|
|
|
public bool IsResellable( Item item )
|
|
{
|
|
//if ( item.Hue != 0 )
|
|
//return false;
|
|
|
|
return IsInList( item.GetType() );
|
|
}
|
|
|
|
public bool IsInList( Type type )
|
|
{
|
|
return m_Table.ContainsKey( type );
|
|
}
|
|
}
|
|
}
|