using Server;
using Server.Items;
using Server.Spells;
namespace Server
{
public static class Sphere
{
public static string dropStringFormat = "You put the {0} in your pack.";
public static string ComputeName(Item i)
{
if (i is BaseWeapon)
return ComputeName((i as BaseWeapon));
else if (i is BaseArmor)
return ComputeName((i as BaseArmor));
else if (i is BaseClothing)
return ComputeName((i as BaseClothing));
else
return GenericComputeName(i);
}
public static string ComputeName(BaseArmor ba)
{
string name = "";
if (ba.Name == null)
name = ClilocTranslator.GetString(ba.LabelNumber);
else
name = ba.Name;
string resource = "";
//Add spaces to the resources that needs it.
switch (ba.Resource)
{
case CraftResource.DullCopper:
{
resource = "dull copper";
break;
}
default:
{
resource = ba.Resource.ToString();
break;
}
}
if ((ba.ProtectionLevel != ArmorProtectionLevel.Regular) && ba.Resource == CraftResource.Iron)
{//If the armor is magical
name = string.Format("{0} of {1}", name, ClilocTranslator.GetString((1038005 + (int)ba.ProtectionLevel)));
}
else if (ba.Resource != CraftResource.None)
{//If it's crafted by a player
if (ba.Crafter != null)
{
if (ba.Quality == ArmorQuality.Exceptional)
{
if (ba.Resource != CraftResource.Iron)
name = string.Format("{0} {1} {2} crafted by {3}", "exceptional", resource, name, ba.Crafter.Name);
else
name = string.Format("{0} {1} crafted by {2}", "exceptional", name, ba.Crafter.Name);
}
else
{
if (ba.Resource != CraftResource.Iron)
name = string.Format("{0} {1} crafted by {2}", resource, name, ba.Crafter.Name);
else
name = string.Format("{0} crafted by {1}", name, ba.Crafter.Name);
}
}
else if (ba.Resource != CraftResource.Iron)
name = string.Format("{0} {1}", resource, name); ;
}
//TODO: Add durability display?
return name.ToLower();
}
public static string ComputeName(BaseWeapon bw)
{
string name = "";
if (bw.Name == null)
name = ClilocTranslator.GetString(bw.LabelNumber);
else
name = bw.Name;
string resource = "";
//Add spaces to the resources that needs it.
switch (bw.Resource)
{
case CraftResource.DullCopper:
{
resource = "dull copper";
break;
}
default:
{
resource = bw.Resource.ToString();
break;
}
}
if ((bw.DamageLevel != WeaponDamageLevel.Regular || bw.AccuracyLevel != WeaponAccuracyLevel.Regular) && bw.Resource == CraftResource.Iron)
{//If the weapon is accurate or magical
if (bw.DamageLevel != WeaponDamageLevel.Regular && bw.AccuracyLevel != WeaponAccuracyLevel.Regular)
name = string.Format("{0} {1} of {2}", ClilocTranslator.GetString((1038010 + (int)bw.AccuracyLevel)), name, ClilocTranslator.GetString((1038015 + (int)bw.DamageLevel)));
else if (bw.AccuracyLevel != WeaponAccuracyLevel.Regular)
name = string.Format("{0} {1}", ClilocTranslator.GetString((1038010 + (int)bw.AccuracyLevel)), name);
else
name = string.Format("{0} of {1}", name, ClilocTranslator.GetString((1038015 + (int)bw.DamageLevel)));
}
else if (bw.Resource != CraftResource.None)
{//If it's crafted by a player
if (bw.Crafter != null)
{
if (bw.Quality == WeaponQuality.Exceptional)
{
if (bw.Resource != CraftResource.Iron)
name = string.Format("{0} {1} {2} crafted by {3}", "exceptional", resource, name, bw.Crafter.Name);
else
name = string.Format("{0} {1} crafted by {2}", "exceptional", name, bw.Crafter.Name);
}
else
{
if (bw.Resource != CraftResource.Iron)
name = string.Format("{0} {1} crafted by {2}", resource, name, bw.Crafter.Name);
else
name = string.Format("{0} crafted by {1}", name, bw.Crafter.Name);
}
}
else if (bw.Resource != CraftResource.Iron)
name = string.Format("{0} {1}", resource, name);
}
//TODO: Add durability display?
return name.ToLower();
}
public static string ComputeName(BaseClothing bc)
{
string name = "";
if (bc.Name == null)
name = ClilocTranslator.GetString(bc.LabelNumber);
else
name = bc.Name;
string resource = "";
//Add spaces to the resources that needs it.
switch (bc.Resource)
{
default:
{
resource = bc.Resource.ToString();
break;
}
}
if (bc.Crafter != null)
{
if (bc.Quality == ClothingQuality.Exceptional)
{
if (bc.Resource != CraftResource.None)
name = string.Format("{0} {1} {2} crafted by {3}", "exceptional", resource, name, bc.Crafter.Name);
else
name = string.Format("{0} {1} crafted by {2}", "exceptional", name, bc.Crafter.Name);
}
else
{
if (bc.Resource != CraftResource.None)
name = string.Format("{0} {1} crafted by {2}", resource, name, bc.Crafter.Name);
else
name = string.Format("{0} crafted by {1}", name, bc.Crafter.Name);
}
}
else if (bc.Resource != CraftResource.None)
name = string.Format("{0} {1}", resource, name);
//TODO: Add durability display?
return name.ToLower();
}
public static string GenericComputeName(Item i)
{
string name = "";
if (i.Name == null)
name = ClilocTranslator.GetString(i.LabelNumber);
else
name = i.Name;
return name.ToLower();
}
public static bool CanUse(Mobile from, Item toUse)
{
if (from.Frozen)
from.SendAsciiMessage("You are frozen and you cannot do that.");
else if (!toUse.Movable)
from.SendAsciiMessage("You are frozen and you cannot do that.");
else if (!toUse.IsChildOf(from.Backpack) && toUse.Parent != from && !from.InRange(toUse.Location, 4))
from.SendAsciiMessage("You can't reach that.");
else if (!from.InLOS(toUse))
from.SendAsciiMessage("You can't see that.");
else
return toUse.CanEquip(from);
return false;
}
public static bool EquipOnDouble(Mobile from, Item toEquip)
{
Item toDrop;
//Can we use it?
if (!CanUse(from, toEquip))
return false;
//Turn towards the item.
if (toEquip.Parent == null)
SpellHelper.Turn(from, toEquip);
//Is the item equiped already?
if (from.FindItemOnLayer(toEquip.Layer) == toEquip)
return true;
if (toEquip.Layer == Layer.TwoHanded)
{
//Always drop the 2 handed item, if it exists.
toDrop = from.FindItemOnLayer(Layer.TwoHanded);
if (toDrop != null)
{
from.SendAsciiMessage(string.Format(dropStringFormat, ComputeName(toDrop)));
from.AddToBackpack(toDrop);
}
//All non sheild 2handed need all the hand players.
if (!(toEquip is BaseArmor))
{
toDrop = from.FindItemOnLayer(Layer.FirstValid);
if (toDrop != null)
{
from.SendAsciiMessage(string.Format(dropStringFormat, ComputeName(toDrop)));
from.AddToBackpack(toDrop);
}
toDrop = from.FindItemOnLayer(Layer.OneHanded);
if (toDrop != null)
{
from.SendAsciiMessage(string.Format(dropStringFormat, ComputeName(toDrop)));
from.AddToBackpack(toDrop);
}
}
from.EquipItem(toEquip);
from.PlaySound(0x57);
}
else if (toEquip.Layer == Layer.OneHanded)
{
//All non shield 2 hands use both hands.
toDrop = from.FindItemOnLayer(Layer.TwoHanded);
if (!(toDrop is BaseArmor))
{
from.SendAsciiMessage(string.Format(dropStringFormat, ComputeName(toDrop)));
from.AddToBackpack(toDrop);
}
//Drop first valid.
toDrop = from.FindItemOnLayer(Layer.FirstValid);
if (toDrop != null)
{
from.SendAsciiMessage(string.Format(dropStringFormat, ComputeName(toDrop)));
from.AddToBackpack(toDrop);
}
//Drop onehand.
toDrop = from.FindItemOnLayer(Layer.OneHanded);
if (toDrop != null)
{
from.SendAsciiMessage(string.Format(dropStringFormat, ComputeName(toDrop)));
from.AddToBackpack(toDrop);
}
from.EquipItem(toEquip);
from.PlaySound(0x57);
}
else if ( toEquip.Layer == Layer.FirstValid)
{
//Drop first valid.
toDrop = from.FindItemOnLayer(Layer.FirstValid);
if (toDrop != null)
{
from.SendAsciiMessage(string.Format(dropStringFormat, ComputeName(toDrop)));
from.AddToBackpack(toDrop);
}
//Drop onehand.
toDrop = from.FindItemOnLayer(Layer.OneHanded);
if (toDrop != null)
{
from.SendAsciiMessage(string.Format(dropStringFormat, ComputeName(toDrop)));
from.AddToBackpack(toDrop);
}
from.EquipItem(toEquip);
from.PlaySound(0x57);
}
return true;
}
}
}