diff --git a/Scripts/Engines/Quests/Core/Items/HornOfRetreat.cs b/Scripts/Engines/Quests/Core/Items/HornOfRetreat.cs index f1bbc87de..7b9e0bba5 100644 --- a/Scripts/Engines/Quests/Core/Items/HornOfRetreat.cs +++ b/Scripts/Engines/Quests/Core/Items/HornOfRetreat.cs @@ -66,11 +66,15 @@ namespace Server.Engines.Quests { SendLocalizedMessageTo( from, 500309 ); // Nothing Happens. } - else if ( m_PlayTimer != null ) + else if( Core.ML && from.Map != Map.Trammel && from.Map != Map.Malas ) + { + from.SendLocalizedMessage( 1076154 ); // You can only use this in Trammel and Malas. + } + else if( m_PlayTimer != null ) { SendLocalizedMessageTo( from, 1042144 ); // This is currently in use. } - else if ( Charges > 0 ) + else if( Charges > 0 ) { from.Animate( 34, 7, 1, true, false, 0 ); from.PlaySound( 0xFF ); diff --git a/Scripts/Engines/VeteranRewards/RewardSystem.cs b/Scripts/Engines/VeteranRewards/RewardSystem.cs index a5f9f068f..9e0f59178 100644 --- a/Scripts/Engines/VeteranRewards/RewardSystem.cs +++ b/Scripts/Engines/VeteranRewards/RewardSystem.cs @@ -260,6 +260,8 @@ namespace Server.Engines.VeteranRewards new RewardEntry( monsterStatues, 1006035, typeof( MonsterStatuette ), MonsterStatuetteType.Ratman ), new RewardEntry( monsterStatues, 1006036, typeof( MonsterStatuette ), MonsterStatuetteType.Skeleton ), new RewardEntry( monsterStatues, 1006037, typeof( MonsterStatuette ), MonsterStatuetteType.Troll ) + //TODO: RedSoulstone + //Need to reorganize this to OSI. } ), new RewardList( RewardInterval, 2, new RewardEntry[] { @@ -318,6 +320,10 @@ namespace Server.Engines.VeteranRewards new RewardEntry( etherealSteeds, 1049748, typeof( EtherealBeetle ) ) /*new RewardEntry( houseAddOns, 0, typeof( AnkhDecoration ) )*/ } ), + //TODO: 6th year player statue MArkers + //TODO: 7th year Decorative CAnnon + //TODO: 8th year Weapon Engraving Tool + //TODO: 9th year Ridable polar bear }; } diff --git a/Scripts/Items/Skill Items/Fishing/FishingPole.cs b/Scripts/Items/Skill Items/Fishing/FishingPole.cs index 6b5550348..779312206 100644 --- a/Scripts/Items/Skill Items/Fishing/FishingPole.cs +++ b/Scripts/Items/Skill Items/Fishing/FishingPole.cs @@ -20,11 +20,6 @@ namespace Server.Items public override void OnDoubleClick( Mobile from ) { Fishing.System.BeginHarvesting( from, this ); - - Item item = from.FindItemOnLayer( Layer.OneHanded ); - - if( item != null ) - from.RemoveItem( item ); } public override void GetContextMenuEntries( Mobile from, List list ) diff --git a/Scripts/Items/Special/SoulStone.cs b/Scripts/Items/Special/SoulStone.cs index d04bb00d9..cf6d4635c 100644 --- a/Scripts/Items/Special/SoulStone.cs +++ b/Scripts/Items/Special/SoulStone.cs @@ -8,6 +8,8 @@ namespace Server.Items { public class SoulStone : Item { + public override int LabelNumber { get { return 1030899; } } // soulstone + private int m_ActiveItemID; private int m_InactiveItemID; @@ -874,4 +876,86 @@ namespace Server.Items public bool ShowUsesRemaining{ get{ return true; } set{} } } + + [Flipable] + public class BlueSoulstone : SoulStone + { + [Constructable] + public BlueSoulstone() + : this( null ) + { + } + + [Constructable] + public BlueSoulstone( string account ) + : base( account, 0x2ADC, 0x2ADD ) + { + + } + + public BlueSoulstone( Serial serial ) + : base( serial ) + { + } + + public void Flip() + { + switch( ItemID ) + { + case 0x2ADC: ItemID = 0x2AEC; break; + case 0x2ADD: ItemID = 0x2AED; break; + case 0x2AEC: ItemID = 0x2ADC; break; + case 0x2AED: ItemID = 0x2ADD; break; + } + } + + 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 = reader.ReadInt(); + } + } + + public class RedSoulstone : SoulStone + { + [Constructable] + public RedSoulstone() + : this( null ) + { + } + + [Constructable] + public RedSoulstone( string account ) + : base( account, 0x32F3, 0x32F4 ) + { + + } + + public RedSoulstone( Serial serial ) + : base( serial ) + { + } + + 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 = reader.ReadInt(); + } + } } \ No newline at end of file diff --git a/Scripts/Misc/RegenRates.cs b/Scripts/Misc/RegenRates.cs index edf7d6a89..74eae28eb 100644 --- a/Scripts/Misc/RegenRates.cs +++ b/Scripts/Misc/RegenRates.cs @@ -16,7 +16,6 @@ namespace Server.Misc Mobile.DefaultHitsRate = TimeSpan.FromSeconds( 11.0 ); Mobile.DefaultStamRate = TimeSpan.FromSeconds( 7.0 ); Mobile.DefaultManaRate = TimeSpan.FromSeconds( 7.0 ); -//TODO: Pub 42 regen limits Mobile.ManaRegenRateHandler = new RegenRateHandler( Mobile_ManaRegenRate ); @@ -68,12 +67,15 @@ namespace Server.Misc points += from.Skills[SkillName.Ninjitsu].Fixed / 300; //TODO: What's the new increased rate? - if( Core.ML && from.Race == Race.Human ) + if( Core.ML && from.Race == Race.Human ) //Is this affected by the cap? points += 2; if ( points < 0 ) points = 0; + if( Core.ML && from is PlayerMobile ) //does racial bonus go before/after? + points = Math.Min ( points, 18 ); + return TimeSpan.FromSeconds( 1.0 / (0.1 * (1 + points)) ); } @@ -86,16 +88,21 @@ namespace Server.Misc int points =(int)(from.Skills[SkillName.Focus].Value * 0.1); - points += AosAttributes.GetValue( from, AosAttribute.RegenStam ); + if( (from is BaseCreature && ((BaseCreature)from).IsParagon) || from is Leviathan ) + points += 40; + + int cappedPoints = AosAttributes.GetValue( from, AosAttribute.RegenStam ); if ( CheckTransform( from, typeof( VampiricEmbraceSpell ) ) ) - points += 15; + cappedPoints += 15; if ( CheckAnimal( from, typeof( Kirin ) ) ) - points += 20; + cappedPoints += 20; - if ( (from is BaseCreature && ((BaseCreature)from).IsParagon) || from is Leviathan ) - points += 40; + if( Core.ML && from is PlayerMobile ) + cappedPoints = Math.Min( cappedPoints, 24 ); + + points += cappedPoints; if ( points < -1 ) points = -1; @@ -129,15 +136,20 @@ namespace Server.Misc double totalPoints = focusPoints + medPoints + (from.Meditating ? (medPoints > 13.0 ? 13.0 : medPoints) : 0.0); - totalPoints += AosAttributes.GetValue( from, AosAttribute.RegenMana ); + if( (from is BaseCreature && ((BaseCreature)from).IsParagon) || from is Leviathan ) + totalPoints += 40; + + int cappedPoints = AosAttributes.GetValue( from, AosAttribute.RegenMana ); if ( CheckTransform( from, typeof( VampiricEmbraceSpell ) ) ) - totalPoints += 3; + cappedPoints += 3; else if ( CheckTransform( from, typeof( LichFormSpell ) ) ) - totalPoints += 13; + cappedPoints += 13; - if ( (from is BaseCreature && ((BaseCreature)from).IsParagon) || from is Leviathan ) - totalPoints += 40; + if( Core.ML && from is PlayerMobile ) + cappedPoints = Math.Min( cappedPoints, 18 ); + + totalPoints += cappedPoints; if ( totalPoints < -1 ) totalPoints = -1; diff --git a/Scripts/Mobiles/Animals/Mounts/Ethereals.cs b/Scripts/Mobiles/Animals/Mounts/Ethereals.cs index 78bbc98d5..f77b1a793 100644 --- a/Scripts/Mobiles/Animals/Mounts/Ethereals.cs +++ b/Scripts/Mobiles/Animals/Mounts/Ethereals.cs @@ -273,6 +273,8 @@ namespace Server.Mobiles } } + public virtual int EtherealHue { get { return 0x4001; } } + public void UnmountMe() { Container bp = m_Rider.Backpack; @@ -281,7 +283,7 @@ namespace Server.Mobiles Layer = Layer.Invalid; Movable = true; - if ( Hue == 0x4001 ) + if( Hue == EtherealHue ) Hue = 0; if ( bp != null ) @@ -310,7 +312,7 @@ namespace Server.Mobiles Movable = false; if ( Hue == 0 ) - Hue = 0x4001; + Hue = EtherealHue; ProcessDelta(); m_Rider.ProcessDelta(); @@ -674,4 +676,36 @@ namespace Server.Mobiles Name = null; } } + + public class ChargerOfTheFallen : EtherealMount + { + public override int LabelNumber { get { return 1074816; } } // Charger of the Fallen Statuette + + [Constructable] + public ChargerOfTheFallen() + : base( 0x2D9C, 0x3E92 ) + { + } + + public override int EtherealHue { get { return 0; } } + + public ChargerOfTheFallen( Serial serial ) + : base( serial ) + { + } + + 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 = reader.ReadInt(); + } + } } \ No newline at end of file diff --git a/Scripts/Mobiles/PlayerMobile.cs b/Scripts/Mobiles/PlayerMobile.cs index b3910ec82..c6d446758 100644 --- a/Scripts/Mobiles/PlayerMobile.cs +++ b/Scripts/Mobiles/PlayerMobile.cs @@ -2769,6 +2769,8 @@ namespace Server.Mobiles BaseHouse.HandleDeletion( this ); } + public override bool NewGuildDisplay { get { return Server.Guilds.Guild.NewGuildSystem; } } + public override void GetProperties( ObjectPropertyList list ) { base.GetProperties( list ); diff --git a/Scripts/Spells/Bushido/Evasion.cs b/Scripts/Spells/Bushido/Evasion.cs index b187f405c..4502668ec 100644 --- a/Scripts/Spells/Bushido/Evasion.cs +++ b/Scripts/Spells/Bushido/Evasion.cs @@ -34,9 +34,9 @@ namespace Server.Spells.Bushido if( weap != null ) { - if( Core.ML && Caster.Skills[weap.Skill].Value < 50 ) + if( Core.ML && Caster.Skills[weap.Skill].Base < 50 ) { - //Does UBW affect this? + //UBW and Mage weapon have no bearing on this, nor do skill items and such. Caster.SendLocalizedMessage( 1076206 ); // Your skill with your equipped weapon must be 50 or higher to use Evasion. return false; } diff --git a/Server/Mobile.cs b/Server/Mobile.cs index 2d2de6049..904f20417 100644 --- a/Server/Mobile.cs +++ b/Server/Mobile.cs @@ -1084,13 +1084,22 @@ namespace Server else title = title.Trim(); - if( title.Length > 0 ) - list.Add( "{0}, {1} Guild{2}", Utility.FixHtml( title ), Utility.FixHtml( guild.Name ), type ); + if( NewGuildDisplay && title.Length > 0 ) + { + list.Add( "{0}, {1}", Utility.FixHtml( title ), Utility.FixHtml( guild.Name ) ); + } else - list.Add( Utility.FixHtml( guild.Name ) ); + { + if( title.Length > 0 ) + list.Add( "{0}, {1} Guild{2}", Utility.FixHtml( title ), Utility.FixHtml( guild.Name ), type ); + else + list.Add( Utility.FixHtml( guild.Name ) ); + } } } + public virtual bool NewGuildDisplay { get { return false; } } + public virtual void GetProperties( ObjectPropertyList list ) { AddNameProperties( list );