using System;
using Server.Network;
using Server.Prompts;
using Server.Mobiles;
using Server.Misc;
using Server.Items;
using Server.Gumps;
using Server.Targeting;
using Server.Targets;
namespace Server.Items
{
public class LevelUpScroll : Item
{
private int m_Value;
[CommandProperty(AccessLevel.GameMaster)]
public int Value
{
get
{
return m_Value;
}
}
[Constructable]
public LevelUpScroll(int value) : base(0x14F0)
{
Weight = 1.0;
Name = "Item Level Deed";
Hue = 0x64;
LootType = LootType.Cursed;
m_Value = value;
}
public override void AddNameProperty(ObjectPropertyList list)
{
list.Add("an Item Level Deed (+{0} max levels)", m_Value);
}
public override void OnSingleClick(Mobile from)
{
base.LabelTo(from, "an Item Level Deed (+{0} max levels)", m_Value);
}
public LevelUpScroll(Serial serial) : base(serial)
{
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write((int)0); // version
//Version 0
writer.Write((int)m_Value);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
switch (version)
{
case 0:
{
m_Value = reader.ReadInt();
break;
}
}
}
public override void OnDoubleClick(Mobile from)
{
if (!IsChildOf(from.Backpack))
{
from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it.
return;
}
else
{
from.SendMessage("Which item would you like to level up?");
from.Target = new LevelItemTarget(this); // Call our target
}
}
}
public class LevelItemTarget : Target
{
private LevelUpScroll m_Scroll;
public LevelItemTarget(LevelUpScroll scroll) : base(-1, false, TargetFlags.None)
{
this.m_Scroll = scroll;
}
protected override void OnTarget(Mobile from, object target)
{
if (target is Mobile)
{
from.SendMessage("This deed cannot be applied to that!");
}
else if (target is Item)
{
Item item = (Item)target;
if (item.RootParent != from || !item.IsChildOf(from.Backpack)) // Make sure its in their pack or they are wearing it
{
from.SendMessage("The item must be in your pack to level it up.");
}
else
{
if (target is ILevelable)
{
ILevelable b = (ILevelable)target;
if ((b.MaxLevel + m_Scroll.Value) > LevelItems.MaxLevelsCap)
{
from.SendMessage("The level on this item is already too high to use this deed!");
}
else
{
b.MaxLevel += m_Scroll.Value;
from.SendMessage("Your item has leveled up by " + m_Scroll.Value + " levels.");
m_Scroll.Delete();
}
}
if (target is LevelUpScroll)
{
LevelUpScroll c = (LevelUpScroll)target;
c = new LevelUpScroll(m_Scroll.Value + m_Scroll.Value);
from.SendMessage("You combine both Scrolls to create a new one");
from.AddToBackpack(c);
this.Delete();
}
else
{
from.SendMessage("Invalid Target Type. Levelable Weapons, Armor, and Clothing only!");
}
}
}
}
}
}