using System; using Server.Mobiles; namespace Server.Items { public class StatCapScroll : SpecialScroll { public override int Message => 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 - 230 ) / 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 => $"Power Scroll ({(((int) Value - 225) >= 0 ? "+" : "")}{(int) Value - 225} Maximum Stats):"; public StatCapScroll() : this( 105 ) { } [Constructible] public StatCapScroll( int value ) : base( SkillName.Alchemy, value ) { Hue = 0x481; } public StatCapScroll( Serial serial ) : base( serial ) { } public override void AddNameProperty(ObjectPropertyList list) { int level = ( (int)Value - 230 ) / 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 - 225) >= 0 ? "+" : "", Value - 225 ); } public override void OnSingleClick( Mobile from ) { int level = ( (int)Value - 230 ) / 5; if ( level >= 0 && level <= 4 && (int)Value % 5 == 0 ) LabelTo( from, 1049463 + level, "#1049476" ); else LabelTo( from, "a scroll of power ({0}{1} Maximum Stats)", (Value - 225) >= 0 ? "+" : "", Value - 225 ); } public override bool CanUse( Mobile from ) { if ( !base.CanUse( from ) ) return false; int newValue = (int)Value; if ( from is PlayerMobile mobile && mobile.HasStatReward ) 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! if ( from is PlayerMobile mobile && mobile.HasStatReward ) mobile.StatCap = (int)Value + 5; else from.StatCap = (int)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; } } }