using System;
using Server.Engines.Craft;
using Server.Mobiles;
using Server.Targeting;
using daat99;
namespace Server.Items
{
public abstract class BaseOre : Item
{
protected virtual CraftResource DefaultResource { get { return CraftResource.Iron; } }
private CraftResource m_Resource;
[CommandProperty(AccessLevel.GameMaster)]
public CraftResource Resource
{
get
{
return this.m_Resource;
}
set
{
this.m_Resource = value;
this.InvalidateProperties();
}
}
public abstract BaseIngot GetIngot();
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write((int)1);
writer.Write((int)this.m_Resource);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
switch ( version )
{
case 2:
this.m_Resource = this.DefaultResource;
reader.ReadString();
break;
case 1:
{
this.m_Resource = (CraftResource)reader.ReadInt();
break;
}
case 0:
{
OreInfo info;
switch ( reader.ReadInt() )
{
case 0:
info = OreInfo.Iron;
break;
case 1:
info = OreInfo.DullCopper;
break;
case 2:
info = OreInfo.ShadowIron;
break;
case 3:
info = OreInfo.Copper;
break;
case 4:
info = OreInfo.Bronze;
break;
case 5:
info = OreInfo.Gold;
break;
case 6:
info = OreInfo.Agapite;
break;
case 7:
info = OreInfo.Verite;
break;
case 8:
info = OreInfo.Valorite;
break;
case 9:
info = OreInfo.Blaze;
break;
case 10:
info = OreInfo.Ice;
break;
case 11:
info = OreInfo.Toxic;
break;
case 12:
info = OreInfo.Electrum;
break;
case 13:
info = OreInfo.Platinum;
break;
default:
info = null;
break;
}
this.m_Resource = CraftResources.GetFromOreInfo(info);
break;
}
}
}
private static int RandomSize()
{
double rand = Utility.RandomDouble();
if (rand < 0.12)
return 0x19B7;
else if (rand < 0.18)
return 0x19B8;
else if (rand < 0.25)
return 0x19BA;
else
return 0x19B9;
}
public BaseOre(CraftResource resource)
: this(resource, 1)
{
}
public BaseOre(CraftResource resource, int amount)
: base(RandomSize())
{
this.Stackable = true;
this.Amount = amount;
this.Hue = CraftResources.GetHue(resource);
this.m_Resource = resource;
}
public BaseOre(Serial serial)
: base(serial)
{
}
public override void AddNameProperty(ObjectPropertyList list)
{
if (this.Amount > 1)
list.Add(1050039, "{0}\t#{1}", this.Amount, 1026583);
else
list.Add(1026583);
}
public override void GetProperties(ObjectPropertyList list)
{
base.GetProperties(list);
if (!CraftResources.IsStandard(this.m_Resource))
{
int num = CraftResources.GetLocalizationNumber(this.m_Resource);
if (num > 0)
list.Add(num);
else
list.Add(CraftResources.GetName(this.m_Resource));
}
}
public override int LabelNumber
{
get
{
if (this.m_Resource >= CraftResource.DullCopper && this.m_Resource <= CraftResource.Valorite)
return 1042845 + (int)(this.m_Resource - CraftResource.DullCopper);
return 1042853;
}
}
public override void OnDoubleClick(Mobile from)
{
if (!this.Movable)
return;
if (this.RootParent is BaseCreature)
{
from.SendLocalizedMessage(500447);
}
else if (from.InRange(this.GetWorldLocation(), 2))
{
from.SendLocalizedMessage(501971);
from.Target = new InternalTarget(this, from);
}
else
{
from.SendLocalizedMessage(501976);
}
}
private class InternalTarget : Target
{
private readonly BaseOre m_Ore;
private Mobile player;
public InternalTarget(BaseOre ore, Mobile from)
: base(2, false, TargetFlags.None)
{
player = from;
this.m_Ore = ore;
}
private bool IsForge(object obj)
{
if (Core.ML && obj is Mobile && ((Mobile)obj).IsDeadBondedPet)
return false;
if (obj.GetType().IsDefined(typeof(ForgeAttribute), false))
return true;
if (player != null && player as PlayerMobile != null && OWLTROptionsManager.IsEnabled(OWLTROptionsManager.OPTIONS_ENUM.MULE_FORGE))
{
if (obj is Mule)
{
Mule mule = obj as Mule;
if (mule.ControlMaster != player)
{
player.SendMessage(53, "You don't own that mule!!!");
player.PlaySound(1074);
return false;
}
else
return true;
}
}
int itemID = 0;
if (obj is Item)
itemID = ((Item)obj).ItemID;
else if (obj is StaticTarget)
itemID = ((StaticTarget)obj).ItemID;
return (itemID == 4017 || (itemID >= 6522 && itemID <= 6569));
}
protected override void OnTarget(Mobile from, object targeted)
{
if (this.m_Ore.Deleted)
return;
if (!from.InRange(this.m_Ore.GetWorldLocation(), 2))
{
from.SendLocalizedMessage(501976);
return;
}
#region Combine Ore
if (targeted is BaseOre)
{
BaseOre ore = (BaseOre)targeted;
if (!ore.Movable)
{
return;
}
else if (this.m_Ore == ore)
{
from.SendLocalizedMessage(501972);
from.Target = new InternalTarget(ore, from);
return;
}
else if (ore.Resource != this.m_Ore.Resource)
{
from.SendLocalizedMessage(501979);
return;
}
int worth = ore.Amount;
if (ore.ItemID == 0x19B9)
worth *= 8;
else if (ore.ItemID == 0x19B7)
worth *= 2;
else
worth *= 4;
int sourceWorth = this.m_Ore.Amount;
if (this.m_Ore.ItemID == 0x19B9)
sourceWorth *= 8;
else if (this.m_Ore.ItemID == 0x19B7)
sourceWorth *= 2;
else
sourceWorth *= 4;
worth += sourceWorth;
int plusWeight = 0;
int newID = ore.ItemID;
if (ore.DefaultWeight != this.m_Ore.DefaultWeight)
{
if (ore.ItemID == 0x19B7 || this.m_Ore.ItemID == 0x19B7)
{
newID = 0x19B7;
}
else if (ore.ItemID == 0x19B9)
{
newID = this.m_Ore.ItemID;
plusWeight = ore.Amount * 2;
}
else
{
plusWeight = this.m_Ore.Amount * 2;
}
}
if ((ore.ItemID == 0x19B9 && worth > 120000) || ((ore.ItemID == 0x19B8 || ore.ItemID == 0x19BA) && worth > 60000) || (ore.ItemID == 0x19B7 && worth > 30000))
{
from.SendLocalizedMessage(1062844);
return;
}
else if (ore.RootParent is Mobile && (plusWeight + ((Mobile)ore.RootParent).Backpack.TotalWeight) > ((Mobile)ore.RootParent).Backpack.MaxWeight)
{
from.SendLocalizedMessage(501978);
return;
}
ore.ItemID = newID;
if (ore.ItemID == 0x19B9)
ore.Amount = worth / 8;
else if (ore.ItemID == 0x19B7)
ore.Amount = worth / 2;
else
ore.Amount = worth / 4;
this.m_Ore.Delete();
return;
}
#endregion
if (this.IsForge(targeted))
{
double difficulty;
#region Void Pool Rewards
bool talisman = false;
SmeltersTalisman t = from.FindItemOnLayer(Layer.Talisman) as SmeltersTalisman;
if (t != null && t.Resource == m_Ore.Resource)
talisman = true;
#endregion
switch ( this.m_Ore.Resource )
{
default:
difficulty = 50.0;
break;
case CraftResource.DullCopper:
difficulty = 65.0;
break;
case CraftResource.ShadowIron:
difficulty = 70.0;
break;
case CraftResource.Copper:
difficulty = 75.0;
break;
case CraftResource.Bronze:
difficulty = 80.0;
break;
case CraftResource.Gold:
difficulty = 85.0;
break;
case CraftResource.Agapite:
difficulty = 90.0;
break;
case CraftResource.Verite:
difficulty = 95.0;
break;
case CraftResource.Valorite:
difficulty = 99.0;
break;
case CraftResource.Blaze:
difficulty = 100.0;
break;
case CraftResource.Ice:
difficulty = 105.0;
break;
case CraftResource.Toxic:
difficulty = 110.0;
break;
case CraftResource.Electrum:
difficulty = 115.0;
break;
case CraftResource.Platinum:
difficulty = 119.0;
break;
}
double minSkill = difficulty - 25.0;
double maxSkill = difficulty + 25.0;
if (difficulty > 50.0 && difficulty > from.Skills[SkillName.Mining].Value && !talisman)
{
from.SendLocalizedMessage(501986);
return;
}
if (this.m_Ore.ItemID == 0x19B7 && this.m_Ore.Amount < 2)
{
from.SendLocalizedMessage(501987);
return;
}
if (talisman || from.CheckTargetSkill(SkillName.Mining, targeted, minSkill, maxSkill))
{
int toConsume = this.m_Ore.Amount;
if (toConsume <= 0)
{
from.SendLocalizedMessage(501987);
}
else
{
if (toConsume > 30000)
toConsume = 30000;
int ingotAmount;
if (this.m_Ore.ItemID == 0x19B7)
{
ingotAmount = toConsume / 1;
if (toConsume % 1 != 0)
--toConsume;
}
else if (this.m_Ore.ItemID == 0x19B9)
{
ingotAmount = toConsume * 1;
}
else
{
ingotAmount = toConsume;
}
BaseIngot ingot = this.m_Ore.GetIngot();
ingot.Amount = ingotAmount;
this.m_Ore.Consume(toConsume);
from.AddToBackpack(ingot);
if (talisman && t != null)
{
t.UsesRemaining--;
from.SendLocalizedMessage(1152620);
}
else
from.SendMessage( "You smelt the ore into ingots and add them to your backpack!" );
}
}
else
{
if (this.m_Ore.Amount < 1)
{
if (this.m_Ore.ItemID == 0x19B9)
this.m_Ore.ItemID = 0x19B8;
else
this.m_Ore.ItemID = 0x19B7;
}
else
{
this.m_Ore.Amount /= 1;
}
from.SendLocalizedMessage(501990);
}
}
}
}
}
public class IronOre : BaseOre
{
[Constructable]
public IronOre()
: this(1)
{
}
[Constructable]
public IronOre(int amount)
: base(CraftResource.Iron, amount)
{
Name = "Iron Ore";
}
public IronOre(bool fixedSize)
: this(1)
{
if (fixedSize)
this.ItemID = 0x19B8;
}
public IronOre(Serial serial)
: base(serial)
{
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write((int)0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
public override BaseIngot GetIngot()
{
return new IronIngot();
}
}
public class DullCopperOre : BaseOre
{
protected override CraftResource DefaultResource { get { return CraftResource.DullCopper; } }
[Constructable]
public DullCopperOre()
: this(1)
{
}
[Constructable]
public DullCopperOre(int amount)
: base(CraftResource.DullCopper, amount)
{
Name = "Dull Copper Ore";
}
public DullCopperOre(Serial serial)
: base(serial)
{
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write((int)0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
public override BaseIngot GetIngot()
{
return new DullCopperIngot();
}
}
public class ShadowIronOre : BaseOre
{
protected override CraftResource DefaultResource { get { return CraftResource.ShadowIron; } }
[Constructable]
public ShadowIronOre()
: this(1)
{
}
[Constructable]
public ShadowIronOre(int amount)
: base(CraftResource.ShadowIron, amount)
{
Name = "Shadow Iron Ore";
}
public ShadowIronOre(Serial serial)
: base(serial)
{
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write((int)0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
public override BaseIngot GetIngot()
{
return new ShadowIronIngot();
}
}
public class CopperOre : BaseOre
{
protected override CraftResource DefaultResource { get { return CraftResource.Copper; } }
[Constructable]
public CopperOre()
: this(1)
{
}
[Constructable]
public CopperOre(int amount)
: base(CraftResource.Copper, amount)
{
Name = "Copper Ore";
}
public CopperOre(Serial serial)
: base(serial)
{
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write((int)0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
public override BaseIngot GetIngot()
{
return new CopperIngot();
}
}
public class BronzeOre : BaseOre
{
protected override CraftResource DefaultResource { get { return CraftResource.Bronze; } }
[Constructable]
public BronzeOre()
: this(1)
{
}
[Constructable]
public BronzeOre(int amount)
: base(CraftResource.Bronze, amount)
{
Name = "Bronze Ore";
}
public BronzeOre(Serial serial)
: base(serial)
{
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write((int)0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
public override BaseIngot GetIngot()
{
return new BronzeIngot();
}
}
public class GoldOre : BaseOre
{
protected override CraftResource DefaultResource { get { return CraftResource.Gold; } }
[Constructable]
public GoldOre()
: this(1)
{
}
[Constructable]
public GoldOre(int amount)
: base(CraftResource.Gold, amount)
{
Name = "Golden Ore";
}
public GoldOre(Serial serial)
: base(serial)
{
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write((int)0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
public override BaseIngot GetIngot()
{
return new GoldIngot();
}
}
public class AgapiteOre : BaseOre
{
protected override CraftResource DefaultResource { get { return CraftResource.Agapite; } }
[Constructable]
public AgapiteOre()
: this(1)
{
}
[Constructable]
public AgapiteOre(int amount)
: base(CraftResource.Agapite, amount)
{
Name = "Agapite Ore";
}
public AgapiteOre(Serial serial)
: base(serial)
{
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write((int)0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
public override BaseIngot GetIngot()
{
return new AgapiteIngot();
}
}
public class VeriteOre : BaseOre
{
protected override CraftResource DefaultResource { get { return CraftResource.Verite; } }
[Constructable]
public VeriteOre()
: this(1)
{
}
[Constructable]
public VeriteOre(int amount)
: base(CraftResource.Verite, amount)
{
Name = "Verite Ore";
}
public VeriteOre(Serial serial)
: base(serial)
{
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write((int)0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
public override BaseIngot GetIngot()
{
return new VeriteIngot();
}
}
public class ValoriteOre : BaseOre
{
protected override CraftResource DefaultResource { get { return CraftResource.Valorite; } }
[Constructable]
public ValoriteOre()
: this(1)
{
}
[Constructable]
public ValoriteOre(int amount)
: base(CraftResource.Valorite, amount)
{
Name = "Valorite Ore";
}
public ValoriteOre(Serial serial)
: base(serial)
{
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write((int)0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
public override BaseIngot GetIngot()
{
return new ValoriteIngot();
}
}
public class BlazeOre : BaseOre
{
[Constructable]
public BlazeOre()
: this(1)
{
}
[Constructable]
public BlazeOre(int amount)
: base(CraftResource.Blaze, amount)
{
Name = "Blaze Ore";
}
public BlazeOre(Serial serial)
: base(serial)
{
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write((int)0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
public override BaseIngot GetIngot()
{
return new BlazeIngot();
}
}
public class IceOre : BaseOre
{
[Constructable]
public IceOre()
: this(1)
{
}
[Constructable]
public IceOre(int amount)
: base(CraftResource.Ice, amount)
{
Name = "Ice Ore";
}
public IceOre(Serial serial)
: base(serial)
{
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write((int)0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
public override BaseIngot GetIngot()
{
return new IceIngot();
}
}
public class ToxicOre : BaseOre
{
[Constructable]
public ToxicOre()
: this(1)
{
}
[Constructable]
public ToxicOre(int amount)
: base(CraftResource.Toxic, amount)
{
Name = "Toxic Ore";
}
public ToxicOre(Serial serial)
: base(serial)
{
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write((int)0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
public override BaseIngot GetIngot()
{
return new ToxicIngot();
}
}
public class ElectrumOre : BaseOre
{
[Constructable]
public ElectrumOre()
: this(1)
{
}
[Constructable]
public ElectrumOre(int amount)
: base(CraftResource.Electrum, amount)
{
Name = "Electrum Ore";
}
public ElectrumOre(Serial serial)
: base(serial)
{
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write((int)0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
public override BaseIngot GetIngot()
{
return new ElectrumIngot();
}
}
public class PlatinumOre : BaseOre
{
[Constructable]
public PlatinumOre()
: this(1)
{
}
[Constructable]
public PlatinumOre(int amount)
: base(CraftResource.Platinum, amount)
{
Name = "Platinum Ore";
}
public PlatinumOre(Serial serial)
: base(serial)
{
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write((int)0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
public override BaseIngot GetIngot()
{
return new PlatinumIngot();
}
}
}