Overwrite
Complete Overwrite of the Folder with the free shard. ServUO 57.3 has been added.
This commit is contained in:
523
Scripts/Items/Consumables/ScrollBinderDeed.cs
Normal file
523
Scripts/Items/Consumables/ScrollBinderDeed.cs
Normal file
@@ -0,0 +1,523 @@
|
||||
using Server;
|
||||
using System;
|
||||
using Server.Targeting;
|
||||
using Server.Gumps;
|
||||
using Server.Network;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public enum BinderType
|
||||
{
|
||||
None,
|
||||
StatScroll,
|
||||
PowerScroll,
|
||||
SOT
|
||||
}
|
||||
|
||||
public class ScrollBinderDeed : Item
|
||||
{
|
||||
private BinderType m_BinderType;
|
||||
private SkillName m_Skill;
|
||||
private double m_Value;
|
||||
private int m_Needed;
|
||||
private double m_Has;
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public BinderType BinderType { get { return m_BinderType; } set { m_BinderType = value; InvalidateProperties(); } }
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public SkillName Skill { get { return m_Skill; } set { m_Skill = value; InvalidateProperties(); } }
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public double Value { get { return m_Value; } set { m_Value = value; InvalidateProperties(); } }
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public int Needed { get { return m_Needed; } set { m_Needed = value; InvalidateProperties(); } }
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public double Has { get { return m_Has; } set { m_Has = value; InvalidateProperties(); } }
|
||||
|
||||
public override int LabelNumber { get { return 1113135; } } // Scroll Binder
|
||||
|
||||
[Constructable]
|
||||
public ScrollBinderDeed()
|
||||
: base(0x14F0)
|
||||
{
|
||||
LootType = LootType.Cursed;
|
||||
Hue = 1636;
|
||||
}
|
||||
|
||||
public override void GetProperties(ObjectPropertyList list)
|
||||
{
|
||||
base.GetProperties(list);
|
||||
|
||||
int v = (int)Value;
|
||||
|
||||
switch (BinderType)
|
||||
{
|
||||
case BinderType.None: break;
|
||||
case BinderType.PowerScroll:
|
||||
{
|
||||
string skillName = SkillInfo.Table[(int)Skill].Name;
|
||||
|
||||
list.Add(1113149, string.Format("{0}\t{1}\t{2}\t{3}", v.ToString(), skillName, ((int)Has).ToString(), Needed.ToString())); // ~1_bonus~ ~2_type~: ~3_given~/~4_needed~
|
||||
break;
|
||||
}
|
||||
case BinderType.StatScroll:
|
||||
{
|
||||
list.Add(1113149, string.Format("+{0}\t#{1}\t{2}\t{3}", v - 225, 1049477, ((int)Has).ToString(), Needed.ToString())); // ~1_bonus~ ~2_type~: ~3_given~/~4_needed~
|
||||
break;
|
||||
}
|
||||
case BinderType.SOT:
|
||||
{
|
||||
string value = string.Format("{0:0.##}", Has);
|
||||
string skillName = SkillInfo.Table[(int)Skill].Name;
|
||||
int number;
|
||||
|
||||
if (Needed == 2)
|
||||
number = 1113148; // ~1_type~ transcendence: ~2_given~/2.0
|
||||
else
|
||||
number = 1113620; // ~1_type~ transcendence: ~2_given~/5.0
|
||||
|
||||
list.Add(number, string.Format("{0}\t{1}", skillName, value));
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnDoubleClick(Mobile from)
|
||||
{
|
||||
if (IsChildOf(from.Backpack))
|
||||
{
|
||||
from.Target = new InternalTarget(this);
|
||||
|
||||
int cliloc;
|
||||
switch (BinderType)
|
||||
{
|
||||
default:
|
||||
case BinderType.None:
|
||||
cliloc = 1113141; break; // Target the scroll you wish to bind.
|
||||
case BinderType.PowerScroll:
|
||||
cliloc = 1113138; break; // Target the powerscroll you wish to bind.
|
||||
case BinderType.StatScroll:
|
||||
cliloc = 1113140; break; // Target the stats scroll you wish to bind.
|
||||
case BinderType.SOT:
|
||||
cliloc = 1113139; break; // Target the scroll of transcendence you wish to bind.
|
||||
}
|
||||
|
||||
from.SendLocalizedMessage(cliloc);
|
||||
}
|
||||
}
|
||||
|
||||
public void OnTarget(Mobile from, object targeted)
|
||||
{
|
||||
if (targeted is Item && !((Item)targeted).IsChildOf(from.Backpack))
|
||||
{
|
||||
from.SendLocalizedMessage(1060640); // The item must be in your backpack to use it.
|
||||
return;
|
||||
}
|
||||
|
||||
switch (BinderType)
|
||||
{
|
||||
case BinderType.None:
|
||||
{
|
||||
if (targeted is PowerScroll)
|
||||
{
|
||||
PowerScroll ps = (PowerScroll)targeted;
|
||||
|
||||
if (ps.Value >= 120)
|
||||
{
|
||||
from.SendLocalizedMessage(1113144); // This scroll is already the highest of its type and cannot be bound.
|
||||
return;
|
||||
}
|
||||
|
||||
double value = ps.Value;
|
||||
int needed = 0;
|
||||
|
||||
if (value == 105)
|
||||
needed = 8;
|
||||
else if (value == 110)
|
||||
needed = 12;
|
||||
else if (value == 115)
|
||||
needed = 10;
|
||||
else
|
||||
return;
|
||||
|
||||
Value = value;
|
||||
Needed = needed;
|
||||
Has = 1;
|
||||
Skill = ps.Skill;
|
||||
BinderType = BinderType.PowerScroll;
|
||||
ps.Delete();
|
||||
}
|
||||
else if (targeted is StatCapScroll)
|
||||
{
|
||||
StatCapScroll ss = (StatCapScroll)targeted;
|
||||
|
||||
if (ss.Value >= 250)
|
||||
{
|
||||
from.SendLocalizedMessage(1113144); //This scroll is already the highest of its type and cannot be bound.
|
||||
return;
|
||||
}
|
||||
|
||||
double value = ss.Value;
|
||||
int needed = 0;
|
||||
|
||||
if (value == 230)
|
||||
needed = 6;
|
||||
else if (value == 235)
|
||||
needed = 8;
|
||||
else if (value == 240)
|
||||
needed = 8;
|
||||
else if (value == 245)
|
||||
needed = 5;
|
||||
else
|
||||
return;
|
||||
|
||||
Value = value;
|
||||
Needed = needed;
|
||||
Has = 1;
|
||||
BinderType = BinderType.StatScroll;
|
||||
ss.Delete();
|
||||
}
|
||||
else if (targeted is ScrollOfTranscendence)
|
||||
{
|
||||
ScrollOfTranscendence sot = (ScrollOfTranscendence)targeted;
|
||||
|
||||
if (sot.Value >= 5.0)
|
||||
{
|
||||
from.SendLocalizedMessage(1113144); //This scroll is already the highest of its type and cannot be bound.
|
||||
return;
|
||||
}
|
||||
|
||||
Skill = sot.Skill;
|
||||
BinderType = BinderType.SOT;
|
||||
Needed = 2;
|
||||
Has = sot.Value;
|
||||
sot.Delete();
|
||||
}
|
||||
else
|
||||
{
|
||||
from.SendLocalizedMessage(1113142); // You may only bind powerscrolls, stats scrolls or scrolls of transcendence.
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case BinderType.PowerScroll:
|
||||
{
|
||||
if (targeted is PowerScroll)
|
||||
{
|
||||
PowerScroll ps = (PowerScroll)targeted;
|
||||
|
||||
if (ps.Skill != Skill || ps.Value != Value)
|
||||
{
|
||||
from.SendLocalizedMessage(1113143); // This scroll does not match the type currently being bound.
|
||||
return;
|
||||
}
|
||||
|
||||
Has++;
|
||||
|
||||
if (Has >= Needed)
|
||||
{
|
||||
GiveItem(from, new PowerScroll(Skill, Value + 5));
|
||||
from.SendLocalizedMessage(1113145); // You've completed your binding and received an upgraded version of your scroll!
|
||||
ps.Delete();
|
||||
Delete();
|
||||
}
|
||||
else
|
||||
{
|
||||
ps.Delete();
|
||||
}
|
||||
}
|
||||
else if (targeted is ScrollBinderDeed)
|
||||
{
|
||||
ScrollBinderDeed sb = (ScrollBinderDeed)targeted;
|
||||
|
||||
if (sb == this)
|
||||
return;
|
||||
|
||||
if (sb.BinderType != BinderType || sb.Value != Value || sb.Skill != Skill)
|
||||
{
|
||||
from.SendLocalizedMessage(1113143); // This scroll does not match the type currently being bound.
|
||||
return;
|
||||
}
|
||||
|
||||
Has += sb.Has;
|
||||
|
||||
double rest = Has - Needed;
|
||||
|
||||
if (Has >= Needed)
|
||||
{
|
||||
GiveItem(from, new PowerScroll(Skill, Value + 5));
|
||||
from.SendLocalizedMessage(1113145); // You've completed your binding and received an upgraded version of your scroll!
|
||||
Delete();
|
||||
}
|
||||
|
||||
if (rest > 0)
|
||||
sb.Has = rest;
|
||||
else
|
||||
sb.Delete();
|
||||
}
|
||||
break;
|
||||
}
|
||||
case BinderType.StatScroll:
|
||||
{
|
||||
if (targeted is StatCapScroll)
|
||||
{
|
||||
StatCapScroll ss = (StatCapScroll)targeted;
|
||||
|
||||
if (ss.Value != Value)
|
||||
{
|
||||
from.SendLocalizedMessage(1113143); // This scroll does not match the type currently being bound.
|
||||
return;
|
||||
}
|
||||
|
||||
Has++;
|
||||
|
||||
if (Has >= Needed)
|
||||
{
|
||||
GiveItem(from, new StatCapScroll((int)Value + 5));
|
||||
from.SendLocalizedMessage(1113145); // You've completed your binding and received an upgraded version of your scroll!
|
||||
ss.Delete();
|
||||
Delete();
|
||||
}
|
||||
else
|
||||
{
|
||||
ss.Delete();
|
||||
}
|
||||
}
|
||||
else if (targeted is ScrollBinderDeed)
|
||||
{
|
||||
ScrollBinderDeed sb = (ScrollBinderDeed)targeted;
|
||||
|
||||
if (sb == this)
|
||||
return;
|
||||
|
||||
if (sb.BinderType != BinderType || sb.Value != Value)
|
||||
{
|
||||
from.SendLocalizedMessage(1113143); // This scroll does not match the type currently being bound.
|
||||
return;
|
||||
}
|
||||
|
||||
Has += sb.Has;
|
||||
|
||||
double rest = Has - Needed;
|
||||
|
||||
if (Has >= Needed)
|
||||
{
|
||||
GiveItem(from, new StatCapScroll((int)Value + 5));
|
||||
from.SendLocalizedMessage(1113145); // You've completed your binding and received an upgraded version of your scroll!
|
||||
Delete();
|
||||
}
|
||||
|
||||
if (rest > 0)
|
||||
sb.Has = rest;
|
||||
else
|
||||
sb.Delete();
|
||||
}
|
||||
break;
|
||||
}
|
||||
case BinderType.SOT:
|
||||
{
|
||||
if (targeted is ScrollOfTranscendence)
|
||||
{
|
||||
ScrollOfTranscendence sot = (ScrollOfTranscendence)targeted;
|
||||
|
||||
if (sot.Skill != Skill)
|
||||
{
|
||||
from.SendLocalizedMessage(1113143); // This scroll does not match the type currently being bound.
|
||||
return;
|
||||
}
|
||||
|
||||
if (sot.Value >= 5.0)
|
||||
{
|
||||
from.SendLocalizedMessage(1113144); // This scroll is already the highest of its type and cannot be bound.
|
||||
return;
|
||||
}
|
||||
|
||||
double newValue = sot.Value + Has;
|
||||
|
||||
if (newValue > 2 && Needed == 2)
|
||||
Needed = 5;
|
||||
|
||||
if (newValue == Needed)
|
||||
{
|
||||
GiveItem(from, new ScrollOfTranscendence(Skill, Needed));
|
||||
from.SendLocalizedMessage(1113145); // You've completed your binding and received an upgraded version of your scroll!
|
||||
Delete();
|
||||
}
|
||||
else if (newValue > Needed)
|
||||
{
|
||||
from.SendGump(new BinderWarningGump(newValue, this, sot, Needed));
|
||||
}
|
||||
else
|
||||
{
|
||||
Has += sot.Value;
|
||||
sot.Delete();
|
||||
}
|
||||
}
|
||||
else if (targeted is ScrollBinderDeed)
|
||||
{
|
||||
ScrollBinderDeed sb = (ScrollBinderDeed)targeted;
|
||||
|
||||
if (sb == this)
|
||||
return;
|
||||
|
||||
if (sb.BinderType != BinderType || sb.Skill != Skill)
|
||||
{
|
||||
from.SendLocalizedMessage(1113143); // This scroll does not match the type currently being bound.
|
||||
return;
|
||||
}
|
||||
|
||||
double newValue = sb.Has + Has;
|
||||
|
||||
if (newValue > 2 && Needed == 2)
|
||||
Needed = 5;
|
||||
|
||||
Has = newValue;
|
||||
|
||||
double rest = Has - Needed;
|
||||
|
||||
if (Has >= Needed)
|
||||
{
|
||||
GiveItem(from, new ScrollOfTranscendence(Skill, Needed));
|
||||
from.SendLocalizedMessage(1113145); // You've completed your binding and received an upgraded version of your scroll!
|
||||
Delete();
|
||||
}
|
||||
|
||||
if (rest > 0)
|
||||
{
|
||||
sb.Has = rest;
|
||||
}
|
||||
else
|
||||
{
|
||||
sb.Delete();
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void GiveItem(Mobile from, Item item)
|
||||
{
|
||||
Container pack = from.Backpack;
|
||||
|
||||
if (pack == null || !pack.TryDropItem(from, item, false))
|
||||
item.MoveToWorld(from.Location, from.Map);
|
||||
}
|
||||
|
||||
private class InternalTarget : Target
|
||||
{
|
||||
private ScrollBinderDeed m_Binder;
|
||||
|
||||
public InternalTarget(ScrollBinderDeed binder) : base(-1, false, TargetFlags.None)
|
||||
{
|
||||
m_Binder = binder;
|
||||
}
|
||||
|
||||
protected override void OnTarget(Mobile from, object targeted)
|
||||
{
|
||||
if (m_Binder != null && !m_Binder.Deleted && m_Binder.IsChildOf(from.Backpack))
|
||||
m_Binder.OnTarget(from, targeted);
|
||||
}
|
||||
}
|
||||
|
||||
private class BinderWarningGump : Gump
|
||||
{
|
||||
private readonly double m_Value;
|
||||
private readonly int m_Needed;
|
||||
private ScrollOfTranscendence m_Scroll;
|
||||
private ScrollBinderDeed m_Binder;
|
||||
|
||||
public BinderWarningGump(double value, ScrollBinderDeed binder, ScrollOfTranscendence scroll, int needed)
|
||||
: base(340, 340)
|
||||
{
|
||||
TypeID = 0x236C;
|
||||
|
||||
m_Value = value;
|
||||
m_Needed = needed;
|
||||
m_Scroll = scroll;
|
||||
m_Binder = binder;
|
||||
|
||||
AddPage(0);
|
||||
|
||||
AddBackground(0, 0, 291, 99, 0x13BE);
|
||||
AddImageTiled(5, 6, 280, 20, 0xA40);
|
||||
|
||||
AddHtmlLocalized(9, 8, 280, 20, 1113146, 0x7FFF, false, false); // Binding Scrolls of Transcendence
|
||||
AddImageTiled(5, 31, 280, 40, 0xA40);
|
||||
|
||||
AddHtmlLocalized(9, 35, 272, 40, 1113147, 0x7FFF, false, false); // Binding this SoT will exceed the cap of 5, some points will be lost. Proceed?
|
||||
|
||||
AddButton(215, 73, 0xFB7, 0xFB8, 1, GumpButtonType.Reply, 0);
|
||||
AddHtmlLocalized(250, 75, 65, 20, 1006044, 0x7FFF, false, false); // OK
|
||||
|
||||
AddButton(5, 73, 0xFB1, 0xFB2, 0, GumpButtonType.Reply, 0);
|
||||
AddHtmlLocalized(40, 75, 100, 20, 1060051, 0x7FFF, false, false); // CANCEL
|
||||
}
|
||||
|
||||
public override void OnResponse(NetState sender, RelayInfo info)
|
||||
{
|
||||
Mobile from = sender.Mobile;
|
||||
|
||||
if (info.ButtonID == 1 && m_Scroll != null && m_Binder != null)
|
||||
{
|
||||
m_Binder.GiveItem(from, new ScrollOfTranscendence(m_Scroll.Skill, m_Needed));
|
||||
m_Scroll.Delete();
|
||||
m_Binder.Delete();
|
||||
from.SendLocalizedMessage(1113145); // You've completed your binding and received an upgraded version of your scroll!
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public ScrollBinderDeed(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)2);
|
||||
|
||||
writer.Write((int)m_BinderType);
|
||||
writer.Write((int)m_Skill);
|
||||
writer.Write(m_Value);
|
||||
writer.Write(m_Needed);
|
||||
writer.Write(m_Has);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int v = reader.ReadInt();
|
||||
|
||||
if (v < 2)
|
||||
{
|
||||
m_Skill = (SkillName)reader.ReadInt();
|
||||
m_Value = reader.ReadDouble();
|
||||
m_Needed = (int)reader.ReadDouble();
|
||||
m_Has = reader.ReadDouble();
|
||||
|
||||
switch (reader.ReadInt())
|
||||
{
|
||||
case 0: m_BinderType = BinderType.None; break;
|
||||
case 1: m_BinderType = BinderType.PowerScroll; break;
|
||||
case 2: m_BinderType = BinderType.StatScroll; break;
|
||||
case 3: m_BinderType = BinderType.SOT; break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
m_BinderType = (BinderType)reader.ReadInt();
|
||||
m_Skill = (SkillName)reader.ReadInt();
|
||||
m_Value = reader.ReadDouble();
|
||||
m_Needed = reader.ReadInt();
|
||||
m_Has = reader.ReadDouble();
|
||||
}
|
||||
|
||||
if (Hue != 1636)
|
||||
Hue = 1636;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user