Files
abysmal-isle/Scripts/Items/Consumables/GorgonLens.cs
Unstable Kitsune b918192e4e Overwrite
Complete Overwrite of the Folder with the free shard. ServUO 57.3 has been added.
2023-11-28 23:20:26 -05:00

249 lines
9.3 KiB
C#

using System;
using Server;
using Server.Engines.Craft;
using Server.Gumps;
namespace Server.Items
{
public enum LenseType
{
None,
Enhanced, //From blue medusa scales
Regular, //From grey medusa scales
Limited //From anyother type of scales
}
public class GorgonLense : Item, ICraftable
{
public override int LabelNumber { get { return 1112625; } } // Gorgon Lense
private LenseType m_LenseType;
[CommandProperty(AccessLevel.GameMaster)]
public LenseType LenseType { get { return m_LenseType; } set { m_LenseType = value; InvalidateProperties(); } }
[Constructable]
public GorgonLense() : this(1) { }
[Constructable]
public GorgonLense(int amount)
: base(9905)
{
Stackable = true;
Amount = amount;
}
public override bool WillStack(Mobile from, Item dropped)
{
return dropped is GorgonLense && ((GorgonLense)dropped).LenseType == m_LenseType && base.WillStack(from, dropped);
}
public override void OnAfterDuped(Item newItem)
{
if (newItem is GorgonLense)
((GorgonLense)newItem).LenseType = this.LenseType;
base.OnAfterDuped(newItem);
}
public override void OnDoubleClick(Mobile from)
{
if (IsChildOf(from.Backpack) && m_LenseType > LenseType.None)
{
from.Target = new InternalTarget(this);
from.SendLocalizedMessage(1112596); //Which item do you wish to enhance with Gorgon Lenses?
}
}
public void OnTarget(Mobile from, object targeted)
{
if (targeted is Item)
{
if (!IsChildOf(from.Backpack) || !((Item)targeted).IsChildOf(from.Backpack))
{
from.SendLocalizedMessage(1054107); // This item must be in your backpack.
}
else if (targeted is BaseArmor)
{
BaseArmor armor = (BaseArmor)targeted;
if (armor.Layer == Layer.Neck || armor.Layer == Layer.Helm || armor is BaseShield || (armor.RequiredRace == Race.Gargoyle && armor.Layer== Layer.Earrings))
{
if (armor.GorgonLenseCharges > 0 && armor.GorgonLenseType != LenseType)
from.SendGump(new GorgonLenseWarningGump(this, armor));
else
{
armor.GorgonLenseCharges += Utility.RandomMinMax(28, 40);
armor.GorgonLenseType = LenseType;
from.SendLocalizedMessage(1112595); //You enhance the item with Gorgon Lenses!
Delete();
}
}
else
from.SendLocalizedMessage(1112594); //You cannot place gorgon lenses on this.
}
else if (targeted is BaseJewel)
{
BaseJewel j = (BaseJewel)targeted;
if (j.Layer == Layer.Neck || j.Layer == Layer.Earrings)
{
if (j.GorgonLenseCharges > 0 && j.GorgonLenseType != LenseType)
from.SendGump(new GorgonLenseWarningGump(this, j));
else
{
j.GorgonLenseCharges += Utility.RandomMinMax(28, 40);
j.GorgonLenseType = LenseType;
from.SendLocalizedMessage(1112595); //You enhance the item with Gorgon Lenses!
Delete();
}
}
else
from.SendLocalizedMessage(1112594); //You cannot place gorgon lenses on this.
}
else if (targeted is BaseClothing)
{
BaseClothing c = (BaseClothing)targeted;
if (c.Layer == Layer.Neck || c.Layer == Layer.Helm)
{
if (c.GorgonLenseCharges > 0 && c.GorgonLenseType != LenseType)
from.SendGump(new GorgonLenseWarningGump(this, c));
else
{
c.GorgonLenseCharges += Utility.RandomMinMax(28, 40);
c.GorgonLenseType = LenseType;
from.SendLocalizedMessage(1112595); //You enhance the item with Gorgon Lenses!
Delete();
}
}
else
from.SendLocalizedMessage(1112594); //You cannot place gorgon lenses on this.
}
else
from.SendLocalizedMessage(1112594); //You cannot place gorgon lenses on this.
}
else
from.SendLocalizedMessage(1112594); //You cannot place gorgon lenses on this.
}
private class InternalTarget : Server.Targeting.Target
{
private GorgonLense m_Lense;
public InternalTarget(GorgonLense lense) : base(-1, false, Server.Targeting.TargetFlags.None)
{
m_Lense = lense;
}
protected override void OnTarget(Mobile from, object targeted)
{
m_Lense.OnTarget(from, targeted);
}
}
public int OnCraft(int quality, bool markersMark, Mobile from, CraftSystem system, Type typeRes, ITool tool, CraftItem craftItem, int resHue)
{
switch (resHue)
{
default:
m_LenseType = LenseType.Limited; break;
case 2223:
m_LenseType = LenseType.Regular; break;
case 1266:
m_LenseType = LenseType.Enhanced; break;
}
Hue = resHue;
return quality;
}
public static int TotalCharges(Mobile m)
{
int charges = 0;
m.Items.ForEach(i =>
{
if (i is BaseArmor)
charges += ((BaseArmor)i).GorgonLenseCharges;
else if (i is BaseJewel)
charges += ((BaseJewel)i).GorgonLenseCharges;
else if (i is BaseClothing)
charges += ((BaseClothing)i).GorgonLenseCharges;
});
return charges;
}
public GorgonLense(Serial serial)
: base(serial)
{
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write((int)2); // version
writer.Write((int)m_LenseType);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
if (version >= 2)
m_LenseType = (LenseType)reader.ReadInt();
if (version == 0)
reader.ReadInt();
}
}
public class GorgonLenseWarningGump : BaseConfirmGump
{
public override int TitleNumber { get { return 1112597; } } // Replace active Gorgon Lenses
public override int LabelNumber { get { return 1112598; } } // The remaining charges of the active lenses will be lost. Do you wish to proceed?
private GorgonLense m_Lense;
private Item m_Item;
public GorgonLenseWarningGump(GorgonLense lense, Item item)
{
m_Lense = lense;
m_Item = item;
}
public override void Confirm(Mobile from)
{
if (!m_Lense.IsChildOf(from.Backpack) || !m_Item.IsChildOf(from.Backpack))
{
from.SendLocalizedMessage(1054107); // This item must be in your backpack.
}
else if (m_Item is BaseShield || m_Item.Layer == Layer.Neck || m_Item.Layer == Layer.Earrings || m_Item.Layer == Layer.Helm)
{
if (m_Item is BaseArmor)
{
((BaseArmor)m_Item).GorgonLenseCharges = m_Lense.Amount;
((BaseArmor)m_Item).GorgonLenseType = m_Lense.LenseType;
from.SendLocalizedMessage(1112595); //You enhance the item with Gorgon Lenses!
m_Lense.Delete();
}
else if (m_Item is BaseJewel)
{
((BaseJewel)m_Item).GorgonLenseCharges = m_Lense.Amount;
((BaseJewel)m_Item).GorgonLenseType = m_Lense.LenseType;
from.SendLocalizedMessage(1112595); //You enhance the item with Gorgon Lenses!
m_Lense.Delete();
}
else if (m_Item is BaseClothing)
{
((BaseClothing)m_Item).GorgonLenseCharges = m_Lense.Amount;
((BaseClothing)m_Item).GorgonLenseType = m_Lense.LenseType;
from.SendLocalizedMessage(1112595); //You enhance the item with Gorgon Lenses!
m_Lense.Delete();
}
}
else
from.SendLocalizedMessage(1112594); //You cannot place gorgon lenses on this.
}
}
}