Files
abysmal-isle/Scripts/Items/Consumables/StatScroll.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

155 lines
5.5 KiB
C#

using System;
using Server.Mobiles;
namespace Server.Items
{
public class StatCapScroll : SpecialScroll
{
private int m_StatCap = Config.Get("PlayerCaps.TotalStatCap", 225);
public StatCapScroll()
: this(105)
{
}
[Constructable]
public StatCapScroll(int value)
: base(SkillName.Alchemy, value)
{
Hue = 0x481;
}
public StatCapScroll(Serial serial)
: base(serial)
{
}
public override int Message
{
get
{
return 1049469;
}
}/* Using a scroll increases the maximum amount of a specific skill or your maximum statistics.
* When used, the effect is not immediately seen without a gain of points with that skill or statistics.
* You can view your maximum skill values in your skills window.
* You can view your maximum statistic value in your statistics window. */
public override int Title
{
get
{
int level = ((int)Value - (m_StatCap+5)) / 5;
if (level >= 0 && level <= 4 && Value % 5 == 0)
return 1049458 + level; /* Wonderous Scroll (+5 Maximum Stats): OR
* Exalted Scroll (+10 Maximum Stats): OR
* Mythical Scroll (+15 Maximum Stats): OR
* Legendary Scroll (+20 Maximum Stats): OR
* Ultimate Scroll (+25 Maximum Stats): */
return 0;
}
}
public override string DefaultTitle
{
get
{
return String.Format("<basefont color=#FFFFFF>Power Scroll ({0}{1} Maximum Stats):</basefont>", ((int)Value - m_StatCap) >= 0 ? "+" : "", (int)Value - m_StatCap);
}
}
public override void AddNameProperty(ObjectPropertyList list)
{
int level = ((int)Value - (m_StatCap + 5)) / 5;
if (level >= 0 && level <= 4 && (int)Value % 5 == 0)
list.Add(1049463 + level, "#1049476"); /* a wonderous scroll of ~1_type~ (+5 Maximum Stats) OR
* an exalted scroll of ~1_type~ (+10 Maximum Stats) OR
* a mythical scroll of ~1_type~ (+15 Maximum Stats) OR
* a legendary scroll of ~1_type~ (+20 Maximum Stats) OR
* an ultimate scroll of ~1_type~ (+25 Maximum Stats) */
else
list.Add("a scroll of power ({0}{1} Maximum Stats)", (Value - m_StatCap) >= 0 ? "+" : "", Value - m_StatCap);
}
public override void OnSingleClick(Mobile from)
{
int level = ((int)Value - (m_StatCap + 5)) / 5;
if (level >= 0 && level <= 4 && (int)Value % 5 == 0)
base.LabelTo(from, 1049463 + level, "#1049476");
else
base.LabelTo(from, "a scroll of power ({0}{1} Maximum Stats)", (Value - m_StatCap) >= 0 ? "+" : "", Value - m_StatCap);
}
public override bool CanUse(Mobile from)
{
if (!base.CanUse(from))
return false;
int newValue = (int)Value;
if (from is PlayerMobile && ((PlayerMobile)from).HasStatReward)
newValue += 5;
if (from is PlayerMobile && ((PlayerMobile)from).HasValiantStatReward)
newValue += 5;
if (from.StatCap >= newValue)
{
from.SendLocalizedMessage(1049510); // Your stats are too high for this power scroll.
return false;
}
return true;
}
public override void Use(Mobile from)
{
if (!CanUse(from))
return;
from.SendLocalizedMessage(1049512); // You feel a surge of magic as the scroll enhances your powers!
int value = (int)Value;
if (from is PlayerMobile && ((PlayerMobile)from).HasStatReward)
{
value += 5;
}
if (from is PlayerMobile && ((PlayerMobile)from).HasValiantStatReward)
{
value += 5;
}
from.StatCap = value;
Effects.SendLocationParticles(EffectItem.Create(from.Location, from.Map, EffectItem.DefaultDuration), 0, 0, 0, 0, 0, 5060, 0);
Effects.PlaySound(from.Location, from.Map, 0x243);
Effects.SendMovingParticles(new Entity(Serial.Zero, new Point3D(from.X - 6, from.Y - 6, from.Z + 15), from.Map), from, 0x36D4, 7, 0, false, true, 0x497, 0, 9502, 1, 0, (EffectLayer)255, 0x100);
Effects.SendMovingParticles(new Entity(Serial.Zero, new Point3D(from.X - 4, from.Y - 6, from.Z + 15), from.Map), from, 0x36D4, 7, 0, false, true, 0x497, 0, 9502, 1, 0, (EffectLayer)255, 0x100);
Effects.SendMovingParticles(new Entity(Serial.Zero, new Point3D(from.X - 6, from.Y - 4, from.Z + 15), from.Map), from, 0x36D4, 7, 0, false, true, 0x497, 0, 9502, 1, 0, (EffectLayer)255, 0x100);
Effects.SendTargetParticles(from, 0x375A, 35, 90, 0x00, 0x00, 9502, (EffectLayer)255, 0x100);
Delete();
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write((int)0); // version
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = (InheritsItem ? 0 : reader.ReadInt()); //Required for SpecialScroll insertion
LootType = LootType.Cursed;
Insured = false;
}
}
}