--> Fixed a bug preventing SoT not being spawned in Malas champion spawns (i.e. Bedlam Crypt) (http://www.uodemise.com/discussion/showthread.php?t=135520) - Added contextual menu entries to add players in party, and kicking them from house (friends can be kicked if in ML environment). Timeout to accept party invite is increased to 30 seconds as per OSI (http://www.uodemise.com/discussion/showthread.php?t=120724) - Runebeetles can be angered during taming attempts (http://www.uodemise.com/discussion/showthread.php?t=137677) - You can cook near forges (http://www.uodemise.com/discussion/showthread.php?t=137731)
224 lines
No EOL
6.6 KiB
C#
224 lines
No EOL
6.6 KiB
C#
using System;
|
|
using Server;
|
|
using Server.Gumps;
|
|
using Server.Network;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
|
|
namespace Server.Items
|
|
{
|
|
public class PowerScroll : SpecialScroll
|
|
{
|
|
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
|
|
{
|
|
double level = ( Value - 105.0 ) / 5.0;
|
|
|
|
if ( level >= 0.0 && level <= 3.0 && Value % 5.0 == 0.0 )
|
|
return 1049635 + (int)level; /* Wonderous Scroll (105 Skill): OR
|
|
* Exalted Scroll (110 Skill): OR
|
|
* Mythical Scroll (115 Skill): OR
|
|
* Legendary Scroll (120 Skill): */
|
|
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
public override string DefaultTitle{ get{ return String.Format( "<basefont color=#FFFFFF>Power Scroll ({0} Skill):</basefont>", Value ); } }
|
|
|
|
private static SkillName[] m_Skills = new SkillName[]
|
|
{
|
|
SkillName.Blacksmith,
|
|
SkillName.Tailoring,
|
|
SkillName.Swords,
|
|
SkillName.Fencing,
|
|
SkillName.Macing,
|
|
SkillName.Archery,
|
|
SkillName.Wrestling,
|
|
SkillName.Parry,
|
|
SkillName.Tactics,
|
|
SkillName.Anatomy,
|
|
SkillName.Healing,
|
|
SkillName.Magery,
|
|
SkillName.Meditation,
|
|
SkillName.EvalInt,
|
|
SkillName.MagicResist,
|
|
SkillName.AnimalTaming,
|
|
SkillName.AnimalLore,
|
|
SkillName.Veterinary,
|
|
SkillName.Musicianship,
|
|
SkillName.Provocation,
|
|
SkillName.Discordance,
|
|
SkillName.Peacemaking
|
|
};
|
|
|
|
private static SkillName[] m_AOSSkills = new SkillName[]
|
|
{
|
|
SkillName.Chivalry,
|
|
SkillName.Focus,
|
|
SkillName.Necromancy,
|
|
SkillName.Stealing,
|
|
SkillName.Stealth,
|
|
SkillName.SpiritSpeak
|
|
};
|
|
|
|
private static SkillName[] m_SESkills = new SkillName[]
|
|
{
|
|
SkillName.Ninjitsu,
|
|
SkillName.Bushido
|
|
};
|
|
|
|
private static List<SkillName> _Skills = new List<SkillName>();
|
|
|
|
public static List<SkillName> Skills
|
|
{
|
|
get
|
|
{
|
|
if ( _Skills.Count == 0 )
|
|
{
|
|
switch ( Core.Expansion )
|
|
{
|
|
case Expansion.ML: _Skills.Add( SkillName.Spellweaving ); goto case Expansion.SE;
|
|
case Expansion.SE: _Skills.AddRange( m_SESkills ); goto case Expansion.AOS;
|
|
case Expansion.AOS: _Skills.AddRange( m_AOSSkills ); goto default;
|
|
default: _Skills.AddRange( m_Skills ); break;
|
|
}
|
|
}
|
|
|
|
return _Skills;
|
|
}
|
|
}
|
|
|
|
public static PowerScroll CreateRandom( int min, int max )
|
|
{
|
|
min /= 5;
|
|
max /= 5;
|
|
|
|
return new PowerScroll( Skills[Utility.Random( Skills.Count )], 100 + ( Utility.RandomMinMax( min, max ) * 5 ) );
|
|
}
|
|
|
|
public static PowerScroll CreateRandomNoCraft( int min, int max )
|
|
{
|
|
min /= 5;
|
|
max /= 5;
|
|
|
|
SkillName skillName;
|
|
|
|
do
|
|
{
|
|
skillName = Skills[Utility.Random( Skills.Count )];
|
|
} while ( skillName == SkillName.Blacksmith || skillName == SkillName.Tailoring );
|
|
|
|
return new PowerScroll( skillName, 100 + (Utility.RandomMinMax( min, max ) * 5));
|
|
}
|
|
|
|
public PowerScroll() : this( SkillName.Alchemy, 0.0 )
|
|
{
|
|
}
|
|
|
|
[Constructable]
|
|
public PowerScroll( SkillName skill, double value ) : base( skill, value )
|
|
{
|
|
Hue = 0x481;
|
|
|
|
if ( Value == 105.0 )
|
|
LootType = LootType.Regular;
|
|
}
|
|
|
|
public PowerScroll( Serial serial ) : base( serial )
|
|
{
|
|
}
|
|
|
|
public override void AddNameProperty( ObjectPropertyList list )
|
|
{
|
|
double level = ( Value - 105.0 ) / 5.0;
|
|
|
|
if ( level >= 0.0 && level <= 3.0 && Value % 5.0 == 0.0 )
|
|
list.Add( 1049639 + (int)level, GetNameLocalized() ); /* a wonderous scroll of ~1_type~ (105 Skill) OR
|
|
* an exalted scroll of ~1_type~ (110 Skill) OR
|
|
* a mythical scroll of ~1_type~ (115 Skill) OR
|
|
* a legendary scroll of ~1_type~ (120 Skill) */
|
|
else
|
|
list.Add( "a power scroll of {0} ({1} Skill)", GetName(), Value );
|
|
}
|
|
|
|
public override void OnSingleClick( Mobile from )
|
|
{
|
|
double level = ( Value - 105.0 ) / 5.0;
|
|
|
|
if ( level >= 0.0 && level <= 3.0 && Value % 5.0 == 0.0 )
|
|
base.LabelTo( from, 1049639 + (int)level, GetNameLocalized() );
|
|
else
|
|
base.LabelTo( from, "a power scroll of {0} ({1} Skill)", GetName(), Value );
|
|
}
|
|
|
|
public override bool CanUse( Mobile from )
|
|
{
|
|
if ( !base.CanUse( from ) )
|
|
return false;
|
|
|
|
Skill skill = from.Skills[Skill];
|
|
|
|
if ( skill == null )
|
|
return false;
|
|
|
|
if ( skill.Cap >= Value )
|
|
{
|
|
from.SendLocalizedMessage( 1049511, GetNameLocalized() ); // Your ~1_type~ is too high for this power scroll.
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
public override void Use( Mobile from )
|
|
{
|
|
if ( !CanUse( from ) )
|
|
return;
|
|
|
|
from.SendLocalizedMessage( 1049513, GetNameLocalized() ); // You feel a surge of magic as the scroll enhances your ~1_type~!
|
|
|
|
from.Skills[Skill].Cap = 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
|
|
|
|
if ( Value == 105.0 )
|
|
{
|
|
LootType = LootType.Regular;
|
|
}
|
|
else
|
|
{
|
|
LootType = LootType.Cursed;
|
|
Insured = false;
|
|
}
|
|
}
|
|
}
|
|
} |