diff --git a/Scripts/Engines/Craft/DefCarpentry.cs b/Scripts/Engines/Craft/DefCarpentry.cs
index d4c397d77..1b3d55fe0 100644
--- a/Scripts/Engines/Craft/DefCarpentry.cs
+++ b/Scripts/Engines/Craft/DefCarpentry.cs
@@ -76,7 +76,7 @@ namespace Server.Engines.Craft
return 1044156; // You create an exceptional quality item and affix your maker's mark.
else if ( quality == 2 )
return 1044155; // You create an exceptional quality item.
- else
+ else
return 1044154; // You create the item.
}
}
@@ -118,15 +118,13 @@ namespace Server.Engines.Craft
SetNeededExpansion( index, Expansion.SE );
}
- if( Core.AOS ) //Duplicate Entries to preserve ordering depending on era
+ if( Core.AOS ) //Duplicate Entries to preserve ordering depending on era
{
index = AddCraft( typeof( FishingPole ), 1044294, 1023519, 68.4, 93.4, typeof( Log ), 1044041, 5, 1044351 ); //This is in the categor of Other during AoS
AddSkill( index, SkillName.Tailoring, 40.0, 45.0 );
AddRes( index, typeof( Cloth ), 1044286, 5, 1044287 );
}
-
-
// Furniture
AddCraft( typeof( FootStool ), 1044291, 1022910, 11.0, 36.0, typeof( Log ), 1044041, 9, 1044351 );
AddCraft( typeof( Stool ), 1044291, 1022602, 11.0, 36.0, typeof( Log ), 1044041, 9, 1044351 );
@@ -159,7 +157,7 @@ namespace Server.Engines.Craft
AddCraft( typeof( WoodenChest ), 1044292, 1023650, 73.6, 98.6, typeof( Log ), 1044041, 20, 1044351 );
AddCraft( typeof( EmptyBookcase ), 1044292, 1022718, 31.5, 56.5, typeof( Log ), 1044041, 25, 1044351 );
AddCraft( typeof( FancyArmoire ), 1044292, 1044312, 84.2, 109.2, typeof( Log ), 1044041, 35, 1044351 );
- AddCraft( typeof( Armoire ), 1044292, 1022643, 84.2, 109.2, typeof( Log ), 1044041, 35, 1044351 );
+ AddCraft( typeof( Armoire ), 1044292, 1022643, 84.2, 109.2, typeof( Log ), 1044041, 35, 1044351 );
if( Core.SE )
{
@@ -186,13 +184,13 @@ namespace Server.Engines.Craft
index = AddCraft( typeof( RedArmoire ), 1044292, 1030328, 90.0, 115.0, typeof( Log ), 1044041, 40, 1044351 );
SetNeededExpansion( index, Expansion.SE );
-
+
index = AddCraft( typeof( ElegantArmoire ), 1044292, 1030330, 90.0, 115.0, typeof( Log ), 1044041, 40, 1044351 );
SetNeededExpansion( index, Expansion.SE );
-
+
index = AddCraft( typeof( MapleArmoire ), 1044292, 1030332, 90.0, 115.0, typeof( Log ), 1044041, 40, 1044351 );
SetNeededExpansion( index, Expansion.SE );
-
+
index = AddCraft( typeof( CherryArmoire ), 1044292, 1030334, 90.0, 115.0, typeof( Log ), 1044041, 40, 1044351 );
SetNeededExpansion( index, Expansion.SE );
}
@@ -207,7 +205,7 @@ namespace Server.Engines.Craft
AddCraft( typeof( GnarledStaff ), 1044295, 1025112, 78.9, 103.9, typeof( Log ), 1044041, 7, 1044351 );
AddCraft( typeof( WoodenShield ), 1044295, 1027034, 52.6, 77.6, typeof( Log ), 1044041, 9, 1044351 );
- if( !Core.AOS ) //Duplicate Entries to preserve ordering depending on era
+ if( !Core.AOS ) //Duplicate Entries to preserve ordering depending on era
{
index = AddCraft( typeof( FishingPole ), 1044295, 1023519, 68.4, 93.4, typeof( Log ), 1044041, 5, 1044351 ); //This is in the categor of Other during AoS
AddSkill( index, SkillName.Tailoring, 40.0, 45.0 );
@@ -222,9 +220,7 @@ namespace Server.Engines.Craft
index = AddCraft( typeof( Fukiya ), 1044295, 1030229, 60.0, 85.0, typeof( Log ), 1044041, 6, 1044351 );
SetNeededExpansion( index, Expansion.SE );
- index = AddCraft( typeof( Tetsubo ), 1044295, 1030225, 85.0, 110.0, typeof( Log ), 1044041, 8, 1044351 );
- AddSkill( index, SkillName.Tinkering, 40.0, 45.0 );
- AddRes( index, typeof( IronIngot ), 1044036, 5, 1044037 );
+ index = AddCraft( typeof( Tetsubo ), 1044295, 1030225, 80.0, 140.3, typeof( Log ), 1044041, 10, 1044351 );
SetNeededExpansion( index, Expansion.SE );
}
@@ -236,22 +232,22 @@ namespace Server.Engines.Craft
index = AddCraft( typeof( Harp ), 1044293, 1023761, 78.9, 103.9, typeof( Log ), 1044041, 35, 1044351 );
AddSkill( index, SkillName.Musicianship, 45.0, 50.0 );
AddRes( index, typeof( Cloth ), 1044286, 15, 1044287 );
-
+
index = AddCraft( typeof( Drums ), 1044293, 1023740, 57.8, 82.8, typeof( Log ), 1044041, 20, 1044351 );
AddSkill( index, SkillName.Musicianship, 45.0, 50.0 );
AddRes( index, typeof( Cloth ), 1044286, 10, 1044287 );
-
+
index = AddCraft( typeof( Lute ), 1044293, 1023763, 68.4, 93.4, typeof( Log ), 1044041, 25, 1044351 );
AddSkill( index, SkillName.Musicianship, 45.0, 50.0 );
AddRes( index, typeof( Cloth ), 1044286, 10, 1044287 );
-
+
index = AddCraft( typeof( Tambourine ), 1044293, 1023741, 57.8, 82.8, typeof( Log ), 1044041, 15, 1044351 );
AddSkill( index, SkillName.Musicianship, 45.0, 50.0 );
AddRes( index, typeof( Cloth ), 1044286, 10, 1044287 );
index = AddCraft( typeof( TambourineTassel ), 1044293, 1044320, 57.8, 82.8, typeof( Log ), 1044041, 15, 1044351 );
AddSkill( index, SkillName.Musicianship, 45.0, 50.0 );
- AddRes( index, typeof( Cloth ), 1044286, 15, 1044287 );
+ AddRes( index, typeof( Cloth ), 1044286, 15, 1044287 );
if( Core.SE )
{
@@ -261,16 +257,16 @@ namespace Server.Engines.Craft
}
// Misc
- index = AddCraft( typeof( SmallBedSouthDeed ), 1044290, 1044321, 94.7, 113.1, typeof( Log ), 1044041, 100, 1044351 );
+ index = AddCraft( typeof( SmallBedSouthDeed ), 1044290, 1044321, 94.7, 119.8, typeof( Log ), 1044041, 100, 1044351 );
AddSkill( index, SkillName.Tailoring, 75.0, 80.0 );
AddRes( index, typeof( Cloth ), 1044286, 100, 1044287 );
- index = AddCraft( typeof( SmallBedEastDeed ), 1044290, 1044322, 94.7, 113.1, typeof( Log ), 1044041, 100, 1044351 );
+ index = AddCraft(typeof(SmallBedEastDeed), 1044290, 1044322, 94.7, 119.8, typeof(Log), 1044041, 100, 1044351);
AddSkill( index, SkillName.Tailoring, 75.0, 80.0 );
AddRes( index, typeof( Cloth ), 1044286, 100, 1044287 );
- index = AddCraft( typeof( LargeBedSouthDeed ), 1044290,1044323, 94.7, 113.1, typeof( Log ), 1044041, 150, 1044351 );
+ index = AddCraft(typeof(LargeBedSouthDeed), 1044290, 1044323, 94.7, 119.8, typeof(Log), 1044041, 150, 1044351);
AddSkill( index, SkillName.Tailoring, 75.0, 80.0 );
AddRes( index, typeof( Cloth ), 1044286, 150, 1044287 );
- index = AddCraft( typeof( LargeBedEastDeed ), 1044290, 1044324, 94.7, 113.1, typeof( Log ), 1044041, 150, 1044351 );
+ index = AddCraft(typeof(LargeBedEastDeed), 1044290, 1044324, 94.7, 119.8, typeof(Log), 1044041, 150, 1044351);
AddSkill( index, SkillName.Tailoring, 75.0, 80.0 );
AddRes( index, typeof( Cloth ), 1044286, 150, 1044287 );
AddCraft( typeof( DartBoardSouthDeed ), 1044290, 1044325, 15.7, 40.7, typeof( Log ), 1044041, 5, 1044351 );
diff --git a/Scripts/Engines/Craft/DefCooking.cs b/Scripts/Engines/Craft/DefCooking.cs
index 34dc442f0..ae9233bab 100644
--- a/Scripts/Engines/Craft/DefCooking.cs
+++ b/Scripts/Engines/Craft/DefCooking.cs
@@ -145,7 +145,7 @@ namespace Server.Engines.Craft
SetNeededExpansion( index, Expansion.SE );
}
- index = AddCraft( typeof( TribalPaint ), 1044496, 1040000, 80.0, 80.0, typeof( SackFlour ), 1044468, 1, 1044253 );
+ index = AddCraft( typeof( TribalPaint ), 1044496, 1040000, Core.ML? 55.0 : 80.0, Core.ML? 105.0 : 80.0, typeof( SackFlour ), 1044468, 1, 1044253 );
AddRes( index, typeof( TribalBerry ), 1046460, 1, 1044253 );
if ( Core.SE )
diff --git a/Scripts/Engines/Quests/Witch Apprentice/Items/HagCauldron.cs b/Scripts/Engines/Quests/Witch Apprentice/Items/HagCauldron.cs
new file mode 100644
index 000000000..d59111946
--- /dev/null
+++ b/Scripts/Engines/Quests/Witch Apprentice/Items/HagCauldron.cs
@@ -0,0 +1,40 @@
+using System;
+using Server;
+
+namespace Server.Items
+{
+ public class HagCauldron : BaseAddon
+ {
+
+ [Constructable]
+ public HagCauldron()
+ {
+ AddonComponent pot;
+ pot = new AddonComponent(2420);
+ AddComponent(pot, 0, 0, 0); //pot w/ support
+
+ AddonComponent fire;
+ fire = new AddonComponent(4012); //fire pit
+ fire.Light = LightType.Circle150;
+ AddComponent(fire, 0, 0, 0);
+ }
+
+ public HagCauldron( 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/Engines/Quests/Witch Apprentice/Items/HagStew.cs b/Scripts/Engines/Quests/Witch Apprentice/Items/HagStew.cs
new file mode 100644
index 000000000..9cea35ae1
--- /dev/null
+++ b/Scripts/Engines/Quests/Witch Apprentice/Items/HagStew.cs
@@ -0,0 +1,76 @@
+using System;
+using Server;
+
+namespace Server.Items
+{
+ public class HagStew : BaseAddon
+ {
+
+ [Constructable]
+ public HagStew()
+ {
+ AddonComponent stew;
+ stew = new AddonComponent(2416);
+ stew.Name = "stew";
+ stew.Visible = true;
+ AddComponent(stew, 0, 0, -7); //stew
+ }
+
+ public override void OnComponentUsed(AddonComponent stew, Mobile from)
+ {
+ if (!from.InRange(GetWorldLocation(), 2))
+ from.SendMessage("You are too far away.");
+ else
+ {
+ {
+ stew.Visible = false;
+
+ BreadLoaf hagstew = new BreadLoaf(); //this decides your fillrate
+ hagstew.Eat(from);
+
+ Timer m_timer = new ShowStew(stew);
+ m_timer.Start();
+ }
+ }
+ }
+
+ public class ShowStew : Timer
+ {
+ private AddonComponent stew;
+
+ public ShowStew(AddonComponent ac) : base(TimeSpan.FromSeconds(30))
+ {
+ stew = ac;
+ Priority = TimerPriority.OneSecond;
+ }
+
+ protected override void OnTick()
+ {
+ if ( stew.Visible == false )
+ {
+ Stop();
+ stew.Visible = true;
+ return;
+ }
+ }
+ }
+
+ public HagStew( 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/Gumps/ConfirmHouseResize.cs b/Scripts/Gumps/ConfirmHouseResize.cs
new file mode 100644
index 000000000..3b4c4a1fb
--- /dev/null
+++ b/Scripts/Gumps/ConfirmHouseResize.cs
@@ -0,0 +1,154 @@
+using System;
+using Server;
+using Server.Items;
+using Server.Multis;
+using Server.Multis.Deeds;
+using Server.Network;
+using Server.Mobiles;
+
+namespace Server.Gumps
+{
+ public class ConfirmHouseResize : Gump
+ {
+ private Mobile m_Mobile;
+ private BaseHouse m_House;
+ private TempNoHousingRegion m_Temp;
+
+ public ConfirmHouseResize( Mobile mobile, BaseHouse house ) : base( 110, 100 )
+ {
+ m_Mobile = mobile;
+ m_House = house;
+
+ mobile.CloseGump( typeof( ConfirmHouseResize ) );
+
+ Closable = false;
+
+ AddPage( 0 );
+
+ AddBackground( 0, 0, 420, 280, 0x13BE );
+ AddImageTiled( 10, 10, 400, 20, 0xA40 );
+ AddAlphaRegion( 10, 10, 400, 20 );
+ AddHtmlLocalized( 10, 10, 400, 20, 1060635, 0x7800, false, false ); //
WARNING
+ AddImageTiled( 10, 40, 400, 200, 0xA40 );
+ AddAlphaRegion( 10, 40, 400, 200 );
+
+ /* You are attempting to resize your house. You will be refunded the house's
+ value directly to your bank box. All items in the house will *remain behind*
+ and can be *freely picked up by anyone*. Once the house is demolished, however,
+ only this account will be able to place on the land for one hour. This *will*
+ circumvent the normal 7-day waiting period (if it applies to you). This action
+ will not un-condemn any other houses on your account. If you have other,
+ grandfathered houses, this action *WILL* condemn them. Are you sure you wish
+ to continue?*/
+ AddHtmlLocalized( 10, 40, 400, 200, 1080196, 0x7F00, false, true );
+
+ AddImageTiled( 10, 250, 400, 20, 0xA40 );
+ AddAlphaRegion( 10, 250, 400, 20 );
+ AddButton( 10, 250, 0xFA5, 0xFA7, 1, GumpButtonType.Reply, 0 );
+ AddButton( 210, 250, 0xFA5, 0xFA7, 0, GumpButtonType.Reply, 0 );
+ AddHtmlLocalized( 40, 250, 170, 20, 1011036, 0x7FFF, false, false ); // OKAY
+ AddHtmlLocalized( 240, 250, 170, 20, 1011012, 0x7FFF, false, false ); // CANCEL
+
+ }
+
+ public override void OnResponse( NetState state, RelayInfo info )
+ {
+ if ( info.ButtonID == 1 && !m_House.Deleted )
+ {
+ if ( m_House.IsOwner( m_Mobile ) )
+ {
+ if ( m_House.MovingCrate != null || m_House.InternalizedVendors.Count > 0 )
+ {
+ m_Mobile.SendLocalizedMessage( 1080455 ); // You can not resize your house at this time. Please remove all items fom the moving crate and try again.
+ return;
+ }
+ else if( !Guilds.Guild.NewGuildSystem && m_House.FindGuildstone() != null )
+ {
+ m_Mobile.SendLocalizedMessage( 501389 ); // You cannot redeed a house with a guildstone inside.
+ return;
+ }
+ /*else if ( m_House.PlayerVendors.Count > 0 )
+ {
+ m_Mobile.SendLocalizedMessage( 503236 ); // You need to collect your vendor's belongings before moving.
+ return;
+ }*/
+ else if ( m_House.HasRentedVendors && m_House.VendorInventories.Count > 0 )
+ {
+ m_Mobile.SendLocalizedMessage( 1062679 ); // You cannot do that that while you still have contract vendors or unclaimed contract vendor inventory in your house.
+ return;
+ }
+ else if ( m_House.HasRentedVendors )
+ {
+ m_Mobile.SendLocalizedMessage( 1062680 ); // You cannot do that that while you still have contract vendors in your house.
+ return;
+ }
+ else if ( m_House.VendorInventories.Count > 0 )
+ {
+ m_Mobile.SendLocalizedMessage( 1062681 ); // You cannot do that that while you still have unclaimed contract vendor inventory in your house.
+ return;
+ }
+
+
+ if ( m_Mobile.AccessLevel >= AccessLevel.GameMaster )
+ {
+ m_Mobile.SendMessage( "You do not get a refund for your house as you are not a player" );
+ m_House.RemoveKeys(m_Mobile);
+ m_House.Delete();
+ }
+ else
+ {
+ Item toGive = null;
+
+ if ( m_House.IsAosRules )
+ {
+ if ( m_House.Price > 0 )
+ toGive = new BankCheck( m_House.Price );
+ else
+ toGive = m_House.GetDeed();
+ }
+ else
+ {
+ toGive = m_House.GetDeed();
+
+ if ( toGive == null && m_House.Price > 0 )
+ toGive = new BankCheck( m_House.Price );
+ }
+
+ if ( toGive != null )
+ {
+ BankBox box = m_Mobile.BankBox;
+
+ if ( box.TryDropItem( m_Mobile, toGive, false ) )
+ {
+ if ( toGive is BankCheck )
+ m_Mobile.SendLocalizedMessage( 1060397, ( (BankCheck)toGive ).Worth.ToString() ); // ~1_AMOUNT~ gold has been deposited into your bank box.
+
+ m_House.RemoveKeys( m_Mobile );
+ new TempNoHousingRegion( m_House, m_Mobile );
+ m_House.Delete();
+ }
+ else
+ {
+ toGive.Delete();
+ m_Mobile.SendLocalizedMessage( 500390 ); // Your bank box is full.
+ }
+ }
+ else
+ {
+ m_Mobile.SendMessage( "Unable to refund house." );
+ }
+ }
+ }
+ else
+ {
+ m_Mobile.SendLocalizedMessage( 501320 ); // Only the house owner may do this.
+ }
+ }
+ else if ( info.ButtonID == 0 )
+ {
+ m_Mobile.CloseGump( typeof( ConfirmHouseResize ) );
+ m_Mobile.SendGump( new HouseGumpAOS( HouseGumpPageAOS.Customize, m_Mobile, m_House ) );
+ }
+ }
+ }
+}
diff --git a/Scripts/Gumps/HouseGumpAOS.cs b/Scripts/Gumps/HouseGumpAOS.cs
index f5c915093..1fd9c4818 100644
--- a/Scripts/Gumps/HouseGumpAOS.cs
+++ b/Scripts/Gumps/HouseGumpAOS.cs
@@ -1220,10 +1220,16 @@ namespace Server.Gumps
{
if ( isOwner && m_House.MovingCrate == null && m_House.InternalizedVendors.Count == 0 )
{
- if( !Guilds.Guild.NewGuildSystem && m_House.FindGuildstone() != null ) {
+ if( !Guilds.Guild.NewGuildSystem && m_House.FindGuildstone() != null )
+ {
from.SendLocalizedMessage( 501389 ); // You cannot redeed a house with a guildstone inside.
}
- else {
+ else if ( Core.ML && from.AccessLevel < AccessLevel.GameMaster && DateTime.Now <= m_House.BuiltOn.AddHours ( 1 ) )
+ {
+ from.SendLocalizedMessage( 1080178 ); // You must wait one hour between each house demolition.
+ }
+ else
+ {
from.CloseGump( typeof( HouseDemolishGump ) );
from.SendGump( new HouseDemolishGump( from, m_House ) );
}
diff --git a/Scripts/Items/Armor/BaseArmor.cs b/Scripts/Items/Armor/BaseArmor.cs
index c66d6ef3e..f2d905916 100644
--- a/Scripts/Items/Armor/BaseArmor.cs
+++ b/Scripts/Items/Armor/BaseArmor.cs
@@ -1614,7 +1614,8 @@ namespace Server.Items
if( Quality == ArmorQuality.Exceptional )
{
- DistributeBonuses( (tool is BaseRunicTool ? 6 : Core.SE ? 15 : 14) ); // Not sure since when, but right now 15 points are added, not 14.
+ if ( !( Core.ML && this is BaseShield )) // Guessed Core.ML removed exceptional resist bonuses from crafted shields
+ DistributeBonuses( (tool is BaseRunicTool ? 6 : Core.SE ? 15 : 14) ); // Not sure since when, but right now 15 points are added, not 14.
if( Core.ML && !(this is BaseShield) )
{
diff --git a/Scripts/Items/Containers/TrapableContainer.cs b/Scripts/Items/Containers/TrapableContainer.cs
index 464e70539..55624fd35 100644
--- a/Scripts/Items/Containers/TrapableContainer.cs
+++ b/Scripts/Items/Containers/TrapableContainer.cs
@@ -207,8 +207,10 @@ namespace Server.Items
Effects.SendLocationParticles( EffectItem.Create( Location, Map, EffectItem.DefaultDuration ), 0x376A, 9, 32, 5022 );
Effects.PlaySound( Location, Map, 0x1F5 );
- if ( !this.TrapOnOpen || !ExecuteTrap( from ) )
- base.DisplayTo( from );
+ if( this.TrapOnOpen )
+ {
+ ExecuteTrap( from );
+ }
}
public override void Open( Mobile from )
diff --git a/Scripts/Items/Games/Dices.cs b/Scripts/Items/Games/Dices.cs
index e8503ff00..0c47b5222 100644
--- a/Scripts/Items/Games/Dices.cs
+++ b/Scripts/Items/Games/Dices.cs
@@ -4,7 +4,7 @@ using Server.Network;
namespace Server.Items
{
- public class Dices : Item
+ public class Dices : Item, ITelekinesisable
{
[Constructable]
public Dices() : base( 0xFA7 )
@@ -21,6 +21,19 @@ namespace Server.Items
if ( !from.InRange( this.GetWorldLocation(), 2 ) )
return;
+ Roll( from );
+ }
+
+ public void OnTelekinesis( Mobile from )
+ {
+ Effects.SendLocationParticles( EffectItem.Create( Location, Map, EffectItem.DefaultDuration ), 0x376A, 9, 32, 5022 );
+ Effects.PlaySound( Location, Map, 0x1F5 );
+
+ Roll( from );
+ }
+
+ public void Roll( Mobile from )
+ {
this.PublicOverheadMessage( MessageType.Regular, 0, false, string.Format( "*{0} rolls {1}, {2}*", from.Name, Utility.Random( 1, 6 ), Utility.Random( 1, 6 ) ) );
}
diff --git a/Scripts/Items/Misc/Corpses/Corpse.cs b/Scripts/Items/Misc/Corpses/Corpse.cs
index d10752499..cd8c19bb2 100644
--- a/Scripts/Items/Misc/Corpses/Corpse.cs
+++ b/Scripts/Items/Misc/Corpses/Corpse.cs
@@ -53,6 +53,11 @@ namespace Server.Items
/// Was the owner criminal when he died?
///
Criminal = 0x00000020,
+
+ ///
+ /// Has this corpse been animated?
+ ///
+ Animated = 0x00000040,
}
public class Corpse : Container, ICarvable
@@ -78,6 +83,9 @@ namespace Server.Items
private HairInfo m_Hair; // This contains the hair of the owner
private FacialHairInfo m_FacialHair; // This contains the facial hair of the owner
+ // For Forensics Evaluation
+ public string m_Forensicist; // Name of the first PlayerMobile who used Forensic Evaluation on the corpse
+
public static readonly TimeSpan MonsterLootRightSacrifice = TimeSpan.FromMinutes( 2.0 );
public static readonly TimeSpan InstancedCorpseTime = TimeSpan.FromMinutes( 3.0 );
@@ -289,6 +297,13 @@ namespace Server.Items
set { SetFlag( CorpseFlag.Channeled, value ); }
}
+ [CommandProperty( AccessLevel.GameMaster )]
+ public bool Animated
+ {
+ get { return GetFlag( CorpseFlag.Animated ); }
+ set { SetFlag( CorpseFlag.Animated, value ); }
+ }
+
[CommandProperty( AccessLevel.GameMaster )]
public AccessLevel AccessLevel
{
diff --git a/Scripts/Items/Skill Items/Tools/BaseRunicTool.cs b/Scripts/Items/Skill Items/Tools/BaseRunicTool.cs
index ba258ffa5..edc554a4b 100644
--- a/Scripts/Items/Skill Items/Tools/BaseRunicTool.cs
+++ b/Scripts/Items/Skill Items/Tools/BaseRunicTool.cs
@@ -268,13 +268,14 @@ namespace Server.Items
AosWeaponAttributes secondary = weapon.WeaponAttributes;
m_Props.SetAll( false );
+ m_Props.Set(0, true); // no lower stat requirements for weapons
if ( weapon is BaseRanged )
m_Props.Set( 2, true ); // ranged weapons cannot be ubws or mageweapon
for ( int i = 0; i < attributeCount; ++i )
{
- int random = GetUniqueRandom( 25 );
+ int random = GetUniqueRandom( 24 );
if ( random == -1 )
break;
@@ -329,15 +330,14 @@ namespace Server.Items
case 13: ApplyAttribute( secondary, min, max, AosWeaponAttribute.HitLowerDefend, 2, 50, 2 ); break;
case 14: ApplyAttribute( secondary, min, max, AosWeaponAttribute.HitLeechMana, 2, 50, 2 ); break;
case 15: ApplyAttribute( secondary, min, max, AosWeaponAttribute.HitLeechStam, 2, 50, 2 ); break;
- case 16: ApplyAttribute( secondary, min, max, AosWeaponAttribute.LowerStatReq, 10, 100, 10 ); break;
- case 17: ApplyAttribute( secondary, min, max, AosWeaponAttribute.ResistPhysicalBonus, 1, 15 ); break;
- case 18: ApplyAttribute( secondary, min, max, AosWeaponAttribute.ResistFireBonus, 1, 15 ); break;
- case 19: ApplyAttribute( secondary, min, max, AosWeaponAttribute.ResistColdBonus, 1, 15 ); break;
- case 20: ApplyAttribute( secondary, min, max, AosWeaponAttribute.ResistPoisonBonus, 1, 15 ); break;
- case 21: ApplyAttribute( secondary, min, max, AosWeaponAttribute.ResistEnergyBonus, 1, 15 ); break;
- case 22: ApplyAttribute( secondary, min, max, AosWeaponAttribute.DurabilityBonus, 10, 100, 10 ); break;
- case 23: weapon.Slayer = GetRandomSlayer(); break;
- case 24: GetElementalDamages( weapon ); break;
+ case 16: ApplyAttribute( secondary, min, max, AosWeaponAttribute.ResistPhysicalBonus, 1, 15 ); break;
+ case 17: ApplyAttribute( secondary, min, max, AosWeaponAttribute.ResistFireBonus, 1, 15 ); break;
+ case 18: ApplyAttribute( secondary, min, max, AosWeaponAttribute.ResistColdBonus, 1, 15 ); break;
+ case 19: ApplyAttribute( secondary, min, max, AosWeaponAttribute.ResistPoisonBonus, 1, 15 ); break;
+ case 20: ApplyAttribute( secondary, min, max, AosWeaponAttribute.ResistEnergyBonus, 1, 15 ); break;
+ case 21: ApplyAttribute( secondary, min, max, AosWeaponAttribute.DurabilityBonus, 10, 100, 10 ); break;
+ case 22: weapon.Slayer = GetRandomSlayer(); break;
+ case 23: GetElementalDamages( weapon ); break;
}
}
}
@@ -473,13 +473,16 @@ namespace Server.Items
int baseCount = ( isShield ? 7 : 20 );
int baseOffset = ( isShield ? 0 : 4 );
- if ( !isShield && armor.MeditationAllowance == ArmorMeditationAllowance.All )
- m_Props.Set( 3, true ); // remove mage armor from possible properties
- if ( armor.Resource >= CraftResource.RegularLeather && armor.Resource <= CraftResource.BarbedLeather )
- {
- m_Props.Set( 0, true ); // remove lower requirements from possible properties for leather armor
- m_Props.Set( 2, true ); // remove durability bonus from possible properties
+ if ( !isShield ) {
+ if (armor.MeditationAllowance == ArmorMeditationAllowance.All ) {
+ m_Props.Set( 3, true ); // remove mage armor from possible properties
+ }
+ m_Props.Set(0, true); // no lower stat requirements for any armor but shields
}
+
+ if ( armor.Resource >= CraftResource.RegularLeather && armor.Resource <= CraftResource.BarbedLeather )
+ m_Props.Set( 2, true ); // remove durability bonus from possible properties
+
if ( armor.RequiredRace == Race.Elf )
m_Props.Set( 7, true ); // elves inherently have night sight and elf only armor doesn't get night sight as a mod
@@ -547,10 +550,11 @@ namespace Server.Items
AosElementAttributes resists = hat.Resistances;
m_Props.SetAll( false );
+ m_Props.Set(0, true); // no lower stat requirements for hats
for ( int i = 0; i < attributeCount; ++i )
{
- int random = GetUniqueRandom( 19 );
+ int random = GetUniqueRandom( 18 );
if ( random == -1 )
break;
@@ -568,14 +572,13 @@ namespace Server.Items
case 8: ApplyAttribute( primary, min, max, AosAttribute.LowerManaCost, 1, 8 ); break;
case 9: ApplyAttribute( primary, min, max, AosAttribute.LowerRegCost, 1, 20 ); break;
case 10: ApplyAttribute( primary, min, max, AosAttribute.Luck, 1, 100 ); break;
- case 11: ApplyAttribute( secondary, min, max, AosArmorAttribute.LowerStatReq, 10, 100, 10 ); break;
- case 12: ApplyAttribute( secondary, min, max, AosArmorAttribute.SelfRepair, 1, 5 ); break;
- case 13: ApplyAttribute( secondary, min, max, AosArmorAttribute.DurabilityBonus, 10, 100, 10 ); break;
- case 14: ApplyAttribute( resists, min, max, AosElementAttribute.Physical, 1, 15 ); break;
- case 15: ApplyAttribute( resists, min, max, AosElementAttribute.Fire, 1, 15 ); break;
- case 16: ApplyAttribute( resists, min, max, AosElementAttribute.Cold, 1, 15 ); break;
- case 17: ApplyAttribute( resists, min, max, AosElementAttribute.Poison, 1, 15 ); break;
- case 18: ApplyAttribute( resists, min, max, AosElementAttribute.Energy, 1, 15 ); break;
+ case 11: ApplyAttribute( secondary, min, max, AosArmorAttribute.SelfRepair, 1, 5 ); break;
+ case 12: ApplyAttribute( secondary, min, max, AosArmorAttribute.DurabilityBonus, 10, 100, 10 ); break;
+ case 13: ApplyAttribute( resists, min, max, AosElementAttribute.Physical, 1, 15 ); break;
+ case 14: ApplyAttribute( resists, min, max, AosElementAttribute.Fire, 1, 15 ); break;
+ case 15: ApplyAttribute( resists, min, max, AosElementAttribute.Cold, 1, 15 ); break;
+ case 16: ApplyAttribute( resists, min, max, AosElementAttribute.Poison, 1, 15 ); break;
+ case 17: ApplyAttribute( resists, min, max, AosElementAttribute.Energy, 1, 15 ); break;
}
}
}
@@ -595,6 +598,7 @@ namespace Server.Items
AosSkillBonuses skills = jewelry.SkillBonuses;
m_Props.SetAll( false );
+ m_Props.Set(0, true); // no lower stat requirements for weapons
for ( int i = 0; i < attributeCount; ++i )
{
@@ -647,6 +651,7 @@ namespace Server.Items
AosSkillBonuses skills = spellbook.SkillBonuses;
m_Props.SetAll( false );
+ m_Props.Set(0, true); // no lower stat requirements for weapons
for ( int i = 0; i < attributeCount; ++i )
{
diff --git a/Scripts/Items/Skill Items/Tools/TinkerTools.cs b/Scripts/Items/Skill Items/Tools/TinkerTools.cs
index 32dad917b..5611b3c52 100644
--- a/Scripts/Items/Skill Items/Tools/TinkerTools.cs
+++ b/Scripts/Items/Skill Items/Tools/TinkerTools.cs
@@ -39,4 +39,42 @@ namespace Server.Items
int version = reader.ReadInt();
}
}
+
+ public class TinkersTools : BaseTool
+ {
+ public override CraftSystem CraftSystem { get { return DefTinkering.CraftSystem; } }
+
+ [Constructable]
+ public TinkersTools()
+ : base(0x1EBC)
+ {
+ Weight = 1.0;
+ }
+
+ [Constructable]
+ public TinkersTools(int uses)
+ : base(uses, 0x1EBC)
+ {
+ Weight = 1.0;
+ }
+
+ public TinkersTools(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/Items/Special/Special Scrolls/PowerScroll.cs b/Scripts/Items/Special/Special Scrolls/PowerScroll.cs
index 3aa3cf5d7..8fa40a528 100644
--- a/Scripts/Items/Special/Special Scrolls/PowerScroll.cs
+++ b/Scripts/Items/Special/Special Scrolls/PowerScroll.cs
@@ -81,15 +81,18 @@ namespace Server.Items
{
if ( _Skills.Count == 0 )
{
- switch ( Core.Expansion )
+ _Skills.AddRange( m_Skills );
+ if (Core.AOS)
{
- 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;
+ _Skills.AddRange( m_AOSSkills );
+ if (Core.SE)
+ {
+ _Skills.AddRange( m_SESkills );
+ if (Core.ML)
+ _Skills.Add( SkillName.Spellweaving );
+ }
}
}
-
return _Skills;
}
}
diff --git a/Scripts/Misc/Poison.cs b/Scripts/Misc/Poison.cs
index 0aabbc675..ebfac0b1f 100644
--- a/Scripts/Misc/Poison.cs
+++ b/Scripts/Misc/Poison.cs
@@ -140,6 +140,9 @@ namespace Server
AOS.Damage( m_Mobile, m_From, damage, 0, 0, 0, 100, 0 );
+ if ( 0.60 <= Utility.RandomDouble() ) // OSI: randomly revealed between first and third damage tick, guessing 60% chance
+ m_Mobile.RevealingAction();
+
if ( (m_Index % m_Poison.m_MessageInterval) == 0 )
m_Mobile.OnPoisoned( m_From, m_Poison, m_Poison );
}
diff --git a/Scripts/Mobiles/AI/BaseAI.cs b/Scripts/Mobiles/AI/BaseAI.cs
index efe5e8c8a..ed40395a9 100644
--- a/Scripts/Mobiles/AI/BaseAI.cs
+++ b/Scripts/Mobiles/AI/BaseAI.cs
@@ -1956,16 +1956,19 @@ namespace Server.Mobiles
delay -= 0.075;
}
- double offset = (double)m_Mobile.Hits / m_Mobile.HitsMax;
+ if ( m_Mobile.ReduceSpeedWithDamage || m_Mobile.IsSubdued )
+ {
+ double offset = (double) m_Mobile.Hits / m_Mobile.HitsMax;
- if( offset < 0.0 )
- offset = 0.0;
- else if( offset > 1.0 )
- offset = 1.0;
+ if ( offset < 0.0 )
+ offset = 0.0;
+ else if ( offset > 1.0 )
+ offset = 1.0;
- offset = 1.0 - offset;
+ offset = 1.0 - offset;
- delay += (offset * 0.8);
+ delay += ( offset * 0.8 );
+ }
if( delay < 0.0 )
delay = 0.0;
diff --git a/Scripts/Mobiles/AI/SpeedInfo.cs b/Scripts/Mobiles/AI/SpeedInfo.cs
index 24d07a3c9..73be69274 100644
--- a/Scripts/Mobiles/AI/SpeedInfo.cs
+++ b/Scripts/Mobiles/AI/SpeedInfo.cs
@@ -125,13 +125,13 @@ namespace Server
{
typeof( Barracoon ), typeof( Mephitis ), typeof( Neira ),
typeof( Rikktor ), typeof( Semidar ), typeof( EnergyVortex ),
- typeof( Beetle ), typeof( Pixie ), typeof( SilverSerpent ),
+ typeof( EliteNinja ), typeof( Pixie ), typeof( SilverSerpent ),
typeof( VorpalBunny ), typeof( FleshRenderer ), typeof( KhaldunRevenant ),
typeof( FactionDragoon ), typeof( FactionKnight ), typeof( FactionPaladin ),
typeof( FactionHenchman ), typeof( FactionMercenary ), typeof( FactionNecromancer ),
typeof( FactionSorceress ), typeof( FactionWizard ), typeof( FactionBerserker ),
typeof( FactionPaladin ), typeof( Leviathan ), typeof( FireBeetle ),
- typeof( FanDancer ), typeof( EliteNinja )
+ typeof( FanDancer )
} ),
/* Medium */
new SpeedInfo( 0.25, 0.5, new Type[]
@@ -206,7 +206,7 @@ namespace Server
typeof( Kappa ), typeof( KazeKemono ), typeof( DeathwatchBeetle ),
typeof( TsukiWolf ), typeof( YomotsuElder ), typeof( YomotsuPriest ),
typeof( YomotsuWarrior ), typeof( RevenantLion ), typeof( Oni ),
- typeof( Gaman ), typeof( Crane )
+ typeof( Gaman ), typeof( Crane ), typeof( Beetle )
} )
};
}
diff --git a/Scripts/Mobiles/Animals/Mounts/Beetle.cs b/Scripts/Mobiles/Animals/Mounts/Beetle.cs
index be2e45cc7..2734899df 100644
--- a/Scripts/Mobiles/Animals/Mounts/Beetle.cs
+++ b/Scripts/Mobiles/Animals/Mounts/Beetle.cs
@@ -11,15 +11,18 @@ namespace Server.Mobiles
[CorpseName( "a giant beetle corpse" )]
public class Beetle : BaseMount
{
+ public virtual double BoostedSpeed{ get{ return 0.1; } }
+
[Constructable]
public Beetle() : this( "a giant beetle" )
{
}
public override bool SubdueBeforeTame{ get{ return true; } } // Must be beaten into submission
+ public override bool ReduceSpeedWithDamage{ get{ return false; } }
[Constructable]
- public Beetle( string name ) : base( name, 0x317, 0x3EBC, AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 )
+ public Beetle( string name ) : base( name, 0x317, 0x3EBC, AIType.AI_Melee, FightMode.Closest, 10, 1, 0.25, 0.5 )
{
SetStr( 300 );
SetDex( 100 );
@@ -86,12 +89,22 @@ namespace Server.Mobiles
public override FoodType FavoriteFood{ get{ return FoodType.Meat; } }
- // TODO: Speed boost when hit by magic.
-
public Beetle( Serial serial ) : base( serial )
{
}
+ public override void OnHarmfulSpell( Mobile from )
+ {
+ if ( !Controlled && ControlMaster == null )
+ CurrentSpeed = BoostedSpeed;
+ }
+
+ public override void OnCombatantChange()
+ {
+ if ( Combatant == null && !Controlled && ControlMaster == null )
+ CurrentSpeed = PassiveSpeed;
+ }
+
#region Pack Animal Methods
public override bool OnBeforeDeath()
{
diff --git a/Scripts/Mobiles/BaseCreature.cs b/Scripts/Mobiles/BaseCreature.cs
index 5ec50f79f..f492f0701 100644
--- a/Scripts/Mobiles/BaseCreature.cs
+++ b/Scripts/Mobiles/BaseCreature.cs
@@ -466,6 +466,8 @@ namespace Server.Mobiles
public virtual bool AllowFemaleTamer{ get{ return true; } }
public virtual bool SubdueBeforeTame{ get{ return false; } }
public virtual bool StatLossAfterTame{ get{ return SubdueBeforeTame; } }
+ public virtual bool ReduceSpeedWithDamage{ get{ return true; } }
+ public virtual bool IsSubdued{ get{ return SubdueBeforeTame && ( Hits < ( HitsMax / 10 ) ); } }
public virtual bool Commandable{ get{ return true; } }
@@ -1301,6 +1303,10 @@ namespace Server.Mobiles
{
}
+ public virtual void OnHarmfulSpell( Mobile from )
+ {
+ }
+
#region Alter[...]Damage From/To
public virtual void AlterDamageScalarFrom( Mobile caster, ref double scalar )
@@ -1341,8 +1347,11 @@ namespace Server.Mobiles
int hides = Hides;
int scales = Scales;
- if ( (feathers == 0 && wool == 0 && meat == 0 && hides == 0 && scales == 0) || Summoned || IsBonded )
+ if ( (feathers == 0 && wool == 0 && meat == 0 && hides == 0 && scales == 0) || Summoned || IsBonded || corpse.Animated )
{
+ if ( corpse.Animated )
+ corpse.SendLocalizedMessageTo( from, 500464 ); // Use this on corpses to carve away meat and hide
+ else
from.SendLocalizedMessage( 500485 ); // You see nothing useful to carve from the corpse.
}
else
@@ -2067,7 +2076,7 @@ namespace Server.Mobiles
}
}
- if ( happier )
+ /* if ( happier )*/ // looks like in OSI pets say they are happier even if they are at maximum loyalty
SayTo( from, 502060 ); // Your pet looks happier.
if ( Body.IsAnimal )
diff --git a/Scripts/Mobiles/Monsters/ML/Misc/Magic/GreaterDragon.cs b/Scripts/Mobiles/Monsters/ML/Misc/Magic/GreaterDragon.cs
index 1fdb06c2a..8b8e2f790 100644
--- a/Scripts/Mobiles/Monsters/ML/Misc/Magic/GreaterDragon.cs
+++ b/Scripts/Mobiles/Monsters/ML/Misc/Magic/GreaterDragon.cs
@@ -42,8 +42,8 @@ namespace Server.Mobiles
SetSkill( SkillName.Tactics, 110.0, 140.0 );
SetSkill( SkillName.Wrestling, 115.0, 145.0 );
- Fame = 55000;
- Karma = -55000;
+ Fame = 22000;
+ Karma = -15000;
VirtualArmor = 60;
diff --git a/Scripts/Mobiles/Monsters/SE/FireBeetle.cs b/Scripts/Mobiles/Monsters/SE/FireBeetle.cs
index 63bc77643..a641e8d15 100644
--- a/Scripts/Mobiles/Monsters/SE/FireBeetle.cs
+++ b/Scripts/Mobiles/Monsters/SE/FireBeetle.cs
@@ -10,6 +10,8 @@ namespace Server.Mobiles
{
public override bool SubdueBeforeTame{ get{ return true; } } // Must be beaten into submission
public override bool StatLossAfterTame{ get{ return true; } }
+ public virtual double BoostedSpeed{ get{ return 0.1; } }
+ public override bool ReduceSpeedWithDamage{ get{ return false; } }
[Constructable]
public FireBeetle() : base( "a fire beetle", 0xA9, 0x3E95, AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 )
@@ -48,6 +50,18 @@ namespace Server.Mobiles
Hue = 0x489;
}
+ public override void OnHarmfulSpell( Mobile from )
+ {
+ if ( !Controlled && ControlMaster == null )
+ CurrentSpeed = BoostedSpeed;
+ }
+
+ public override void OnCombatantChange()
+ {
+ if ( Combatant == null && !Controlled && ControlMaster == null )
+ CurrentSpeed = PassiveSpeed;
+ }
+
public override bool OverrideBondingReqs()
{
return true;
diff --git a/Scripts/Mobiles/PlayerMobile.cs b/Scripts/Mobiles/PlayerMobile.cs
index efd8f6a0a..583bbbf70 100644
--- a/Scripts/Mobiles/PlayerMobile.cs
+++ b/Scripts/Mobiles/PlayerMobile.cs
@@ -2291,9 +2291,6 @@ namespace Server.Mobiles
}
}
- if ( m_InsuranceCost > 0 )
- SendLocalizedMessage( 1060398, m_InsuranceCost.ToString() ); // ~1_AMOUNT~ gold has been withdrawn from your bank box.
-
if ( m_InsuranceAward is PlayerMobile )
{
PlayerMobile pm = (PlayerMobile)m_InsuranceAward;
diff --git a/Scripts/Mobiles/Vendors/SBInfo/SBTinker.cs b/Scripts/Mobiles/Vendors/SBInfo/SBTinker.cs
index aa4c72df4..ae889813d 100644
--- a/Scripts/Mobiles/Vendors/SBInfo/SBTinker.cs
+++ b/Scripts/Mobiles/Vendors/SBInfo/SBTinker.cs
@@ -39,7 +39,7 @@ namespace Server.Mobiles
Add( new GenericBuyInfo( typeof( KeyRing ), 8, 20, 0x1010, 0 ) );
Add( new GenericBuyInfo( typeof( Lockpick ), 12, 20, 0x14FC, 0 ) );
- Add( new GenericBuyInfo( typeof( TinkerTools ), 7, 20, 0x1EB8, 0 ) );
+ Add( new GenericBuyInfo( typeof( TinkersTools ), 7, 20, 0x1EBC, 0 ) );
Add( new GenericBuyInfo( typeof( Board ), 3, 20, 0x1BD7, 0 ) );
Add( new GenericBuyInfo( typeof( IronIngot ), 5, 16, 0x1BF2, 0 ) );
Add( new GenericBuyInfo( typeof( SewingKit ), 3, 20, 0xF9D, 0 ) );
diff --git a/Scripts/Multis/BaseHouse.cs b/Scripts/Multis/BaseHouse.cs
index 2eed1440f..3af4c8cfc 100644
--- a/Scripts/Multis/BaseHouse.cs
+++ b/Scripts/Multis/BaseHouse.cs
@@ -201,7 +201,7 @@ namespace Server.Multis
return;
if ( Core.ML )
- new TempNoHousingRegion( this );
+ new TempNoHousingRegion( this, null );
KillVendors();
Delete();
@@ -3760,17 +3760,43 @@ namespace Server.Multis
public class TempNoHousingRegion : BaseRegion
{
- public TempNoHousingRegion( BaseHouse house )
+ private Mobile m_RegionOwner;
+
+ public TempNoHousingRegion( BaseHouse house, Mobile regionowner )
: base( null, house.Map, Region.DefaultPriority, house.Region.Area )
{
Register();
+ m_RegionOwner = regionowner;
+
Timer.DelayCall( house.RestrictedPlacingTime, Unregister );
}
+ public bool CheckAccount( Mobile mobCheck, Mobile accCheck )
+ {
+ if ( accCheck != null )
+ {
+ Account a = accCheck.Account as Account;
+
+ if ( a != null )
+ {
+ for ( int i = 0; i < a.Length; ++i )
+ {
+ if ( a[i] == mobCheck )
+ return true;
+ }
+ }
+ }
+
+ return false;
+ }
+
public override bool AllowHousing( Mobile from, Point3D p )
{
- return false;
+ if ( from == m_RegionOwner || CheckAccount( from, m_RegionOwner ) )
+ return true;
+ else
+ return false;
}
}
}
\ No newline at end of file
diff --git a/Scripts/Multis/HouseSign.cs b/Scripts/Multis/HouseSign.cs
index 1a3480222..ff1a9872d 100644
--- a/Scripts/Multis/HouseSign.cs
+++ b/Scripts/Multis/HouseSign.cs
@@ -127,8 +127,12 @@ namespace Server.Multis
{
if ( m_Owner.IsFriend( m ) && m.AccessLevel < AccessLevel.GameMaster )
{
- m_Owner.RefreshDecay();
- m.SendLocalizedMessage( 501293 ); // Welcome back to the house, friend!
+ #region Mondain's Legacy
+ if ( ( Core.ML && m_Owner.IsOwner( m ) ) || !Core.ML )
+ m_Owner.RefreshDecay();
+ #endregion
+ if ( !Core.AOS )
+ m.SendLocalizedMessage( 501293 ); // Welcome back to the house, friend!
}
if ( m_Owner.IsAosRules )
diff --git a/Scripts/Regions/HouseRegion.cs b/Scripts/Regions/HouseRegion.cs
index 42746547d..b1c278a0a 100644
--- a/Scripts/Regions/HouseRegion.cs
+++ b/Scripts/Regions/HouseRegion.cs
@@ -222,9 +222,7 @@ namespace Server.Regions
base.OnSpeech( e );
Mobile from = e.Mobile;
-
- if ( !from.Alive || !m_House.IsInside( from ) || !m_House.IsActive )
- return;
+ Item sign = m_House.Sign;
bool isOwner = m_House.IsOwner( from );
bool isCoOwner = isOwner || m_House.IsCoOwner( from );
@@ -232,8 +230,36 @@ namespace Server.Regions
if ( !isFriend )
return;
+
+ if ( !from.Alive )
+ return;
+
+ if ( Core.ML && Insensitive.Equals( e.Speech, "I wish to resize my house" ) )
+ {
+ if ( from.Map != sign.Map || !from.InRange( sign, 0 ) )
+ {
+ from.SendLocalizedMessage( 500295 ); // you are too far away to do that.
+ }
+ else if ( DateTime.Now <= m_House.BuiltOn.AddHours ( 1 ) )
+ {
+ from.SendLocalizedMessage( 1080178 ); // You must wait one hour between each house demolition.
+ }
+ else if ( isOwner )
+ {
+ from.CloseGump( typeof( ConfirmHouseResize ) );
+ from.CloseGump( typeof( HouseGumpAOS ) );
+ from.SendGump( new ConfirmHouseResize( from, m_House ) );
+ }
+ else
+ {
+ from.SendLocalizedMessage( 501320 ); // Only the house owner may do this.
+ }
+ }
+
+ if ( !m_House.IsInside( from ) || !m_House.IsActive )
+ return;
- if ( e.HasKeyword( 0x33 ) ) // remove thyself
+ else if ( e.HasKeyword( 0x33 ) ) // remove thyself
{
if ( isFriend )
{
diff --git a/Scripts/Skills/AnimalTaming.cs b/Scripts/Skills/AnimalTaming.cs
index c08a536ea..d20e15f7e 100644
--- a/Scripts/Skills/AnimalTaming.cs
+++ b/Scripts/Skills/AnimalTaming.cs
@@ -55,6 +55,7 @@ namespace Server.SkillHandlers
public static bool MustBeSubdued( BaseCreature bc )
{
+ if (bc.Owners.Count > 0) { return false; } //Checks to see if the animal has been tamed before
return bc.SubdueBeforeTame && (bc.Hits > (bc.HitsMax / 10));
}
diff --git a/Scripts/Skills/Begging.cs b/Scripts/Skills/Begging.cs
index 9422eb63c..e75e6a597 100644
--- a/Scripts/Skills/Begging.cs
+++ b/Scripts/Skills/Begging.cs
@@ -65,7 +65,7 @@ namespace Server.SkillHandlers
else
number = 500402; // You are too far away to beg from her.
}
- else if ( from.Mounted ) // If we're on a mount, who would give us money?
+ else if (!( Core.ML ) && from.Mounted ) // If we're on a mount, who would give us money? TODO: guessed it's removed since ML
{
number = 500404; // They seem unwilling to give you any money.
}
diff --git a/Scripts/Skills/ForensicEval.cs b/Scripts/Skills/ForensicEval.cs
index 36231b421..933541cf3 100644
--- a/Scripts/Skills/ForensicEval.cs
+++ b/Scripts/Skills/ForensicEval.cs
@@ -20,7 +20,7 @@ namespace Server.SkillHandlers
m.Target = new ForensicTarget();
m.RevealingAction();
- m.SendLocalizedMessage( 500906 ); // What would you like to evaluate?
+ m.SendLocalizedMessage( 501000 ); // Show me the crime.
return TimeSpan.FromSeconds( 1.0 );
}
@@ -53,8 +53,13 @@ namespace Server.SkillHandlers
{
Corpse c = (Corpse)target;
+ if ( c.m_Forensicist != null )
+ from.SendLocalizedMessage( 1042750, c.m_Forensicist ) ; // The forensicist ~1_NAME~ has already discovered that:
+ else
+ c.m_Forensicist = from.Name;
+
if ( ((Body)c.Amount).IsHuman )
- c.LabelTo( from, 1042751, ( c.Killer == null ? "no one" : c.Killer.Name ) );//This person was killed by ~1_KILLER_NAME~
+ from.SendLocalizedMessage( 1042751, ( c.Killer == null ? "no one" : c.Killer.Name ) );//This person was killed by ~1_KILLER_NAME~
if ( c.Looters.Count > 0 )
{
@@ -66,11 +71,11 @@ namespace Server.SkillHandlers
sb.Append( ((Mobile)c.Looters[i]).Name );
}
- c.LabelTo( from, 1042752, sb.ToString() );//This body has been distrubed by ~1_PLAYER_NAMES~
+ from.SendLocalizedMessage( 1042752, sb.ToString() );//This body has been distrubed by ~1_PLAYER_NAMES~
}
else
{
- c.LabelTo( from, 501002 );//The corpse has not be desecrated.
+ from.SendLocalizedMessage( 501002 );//The corpse has not be desecrated.
}
}
else
diff --git a/Scripts/Spells/Base/Spell.cs b/Scripts/Spells/Base/Spell.cs
index 42007bffc..c9155be1e 100644
--- a/Scripts/Spells/Base/Spell.cs
+++ b/Scripts/Spells/Base/Spell.cs
@@ -97,6 +97,12 @@ namespace Server.Spells
contexts.Remove( m );
}
+ public void HarmfulSpell( Mobile m )
+ {
+ if ( m is BaseCreature )
+ ((BaseCreature)m).OnHarmfulSpell( m_Caster );
+ }
+
public Spell( Mobile caster, Item scroll, SpellInfo info )
{
m_Caster = caster;
diff --git a/Scripts/Spells/Base/SpellHelper.cs b/Scripts/Spells/Base/SpellHelper.cs
index 1f292a9be..6ccb18a1c 100644
--- a/Scripts/Spells/Base/SpellHelper.cs
+++ b/Scripts/Spells/Base/SpellHelper.cs
@@ -555,18 +555,19 @@ namespace Server.Spells
new TravelValidator( IsTokunoDungeon ),
new TravelValidator( IsLampRoom ),
new TravelValidator( IsGuardianRoom ),
+ new TravelValidator( IsHeartwood ),
};
private static bool[,] m_Rules = new bool[,]
{
- /*T2A(Fel) Ilshenar Wind(Tram), Wind(Fel), Dungeons(Fel), Solen(Tram), Solen(Fel), CrystalCave(Malas), Gauntlet(Malas), Gauntlet(Ferry), Stronghold, ChampionSpawn, Dungeons(Tokuno[Malas]), LampRoom(Doom), GuardianRoom(Doom) */
-/* Recall From */ { false, true, true, false, false, true, false, false, false, false, true, false, true, false, false },
-/* Recall To */ { false, false, false, false, false, false, false, false, false, false, false, false, false, false, false },
-/* Gate From */ { false, false, false, false, false, false, false, false, false, false, false, false, false, false, false },
-/* Gate To */ { false, false, false, false, false, false, false, false, false, false, false, false, false, false, false },
-/* Mark In */ { false, false, false, false, false, false, false, false, false, false, false, false, false, false, false },
-/* Tele From */ { true, true, true, true, true, true, true, false, true, true, false, true, true, true, true },
-/* Tele To */ { true, true, true, true, true, true, true, false, true, false, false, true, true, true, true },
+ /*T2A(Fel) Ilshenar Wind(Tram), Wind(Fel), Dungeons(Fel), Solen(Tram), Solen(Fel), CrystalCave(Malas), Gauntlet(Malas), Gauntlet(Ferry), Stronghold, ChampionSpawn, Dungeons(Tokuno[Malas]), LampRoom(Doom), GuardianRoom(Doom), Heartwood */
+/* Recall From */ { false, true, true, false, false, true, false, false, false, false, true, false, true, false, false, false },
+/* Recall To */ { false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false },
+/* Gate From */ { false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false },
+/* Gate To */ { false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false },
+/* Mark In */ { false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false },
+/* Tele From */ { true, true, true, true, true, true, true, false, true, true, false, true, true, true, true, false },
+/* Tele To */ { true, true, true, true, true, true, true, false, true, false, false, true, true, true, true, false },
};
public static bool CheckTravel( Mobile caster, TravelCheckType type )
@@ -778,6 +779,13 @@ namespace Server.Spells
return ( x >= 356 && y >= 5 && x < 375 && y < 25 );
}
+ public static bool IsHeartwood( Map map, Point3D loc )
+ {
+ int x = loc.X, y = loc.Y;
+
+ return (map == Map.Trammel || map == Map.Felucca) && (x >= 6911 && y >= 254 && x < 7167 && y < 511);
+ }
+
public static bool IsInvalid( Map map, Point3D loc )
{
if( map == null || map == Map.Internal )
@@ -918,7 +926,12 @@ namespace Server.Spells
}
if( target is BaseCreature && from != null && delay == TimeSpan.Zero )
- ((BaseCreature)target).OnDamagedBySpell( from );
+ {
+ BaseCreature c = (BaseCreature) target;
+
+ c.OnHarmfulSpell( from );
+ c.OnDamagedBySpell( from );
+ }
}
public static void Damage( Spell spell, Mobile target, double damage, int phys, int fire, int cold, int pois, int nrgy )
@@ -979,7 +992,12 @@ namespace Server.Spells
}
if( target is BaseCreature && from != null && delay == TimeSpan.Zero )
- ((BaseCreature)target).OnDamagedBySpell( from );
+ {
+ BaseCreature c = (BaseCreature) target;
+
+ c.OnHarmfulSpell( from );
+ c.OnDamagedBySpell( from );
+ }
}
public static void DoLeech( int damageGiven, Mobile from, Mobile target )
@@ -1097,7 +1115,12 @@ namespace Server.Spells
WeightOverloading.DFA = DFAlgorithm.Standard;
if( m_Target is BaseCreature && m_From != null )
- ((BaseCreature)m_Target).OnDamagedBySpell( m_From );
+ {
+ BaseCreature c = (BaseCreature) m_Target;
+
+ c.OnHarmfulSpell( m_From );
+ c.OnDamagedBySpell( m_From );
+ }
if( m_Spell != null )
m_Spell.RemoveDelayedDamageContext( m_Target );
diff --git a/Scripts/Spells/Chivalry/PaladinSpell.cs b/Scripts/Spells/Chivalry/PaladinSpell.cs
index bd54e641d..df45c9ba6 100644
--- a/Scripts/Spells/Chivalry/PaladinSpell.cs
+++ b/Scripts/Spells/Chivalry/PaladinSpell.cs
@@ -32,12 +32,7 @@ namespace Server.Spells.Chivalry
if ( !base.CheckCast() )
return false;
- if ( Caster.Skills[SkillName.Chivalry].Value < RequiredSkill )
- {
- Caster.SendLocalizedMessage( 1060172, RequiredSkill.ToString( "F1" ) ); // You must have at least ~1_SKILL_REQUIREMENT~ Chivalry to use this ability,
- return false;
- }
- else if ( Caster.TithingPoints < RequiredTithing )
+ if ( Caster.TithingPoints < RequiredTithing )
{
Caster.SendLocalizedMessage( 1060173, RequiredTithing.ToString() ); // You must have at least ~1_TITHE_REQUIREMENT~ Tithing Points to use this ability,
return false;
@@ -60,12 +55,7 @@ namespace Server.Spells.Chivalry
int mana = ScaleMana( RequiredMana );
- if ( Caster.Skills[SkillName.Chivalry].Value < RequiredSkill )
- {
- Caster.SendLocalizedMessage( 1060172, RequiredSkill.ToString( "F1" ) ); // You must have at least ~1_SKILL_REQUIREMENT~ Chivalry to use this ability,
- return false;
- }
- else if ( Caster.TithingPoints < requiredTithing )
+ if ( Caster.TithingPoints < requiredTithing )
{
Caster.SendLocalizedMessage( 1060173, RequiredTithing.ToString() ); // You must have at least ~1_TITHE_REQUIREMENT~ Tithing Points to use this ability,
return false;
diff --git a/Scripts/Spells/Fifth/MindBlast.cs b/Scripts/Spells/Fifth/MindBlast.cs
index 248f6b8eb..c611114e5 100644
--- a/Scripts/Spells/Fifth/MindBlast.cs
+++ b/Scripts/Spells/Fifth/MindBlast.cs
@@ -65,7 +65,7 @@ namespace Server.Spells.Fifth
SpellHelper.CheckReflect( (int)this.Circle, ref from, ref target );
int damage = (int)((Caster.Skills[SkillName.Magery].Value + Caster.Int) / 5);
-
+
if ( damage > 60 )
damage = 60;
@@ -104,8 +104,8 @@ namespace Server.Spells.Fifth
if ( lowestStat > 150 )
lowestStat = 150;
- int damage = (highestStat - lowestStat) / 4;//less damage
-
+ double damage = GetDamageScalar(m)*(highestStat - lowestStat) / 4;//less damage
+
if ( damage > 45 )
damage = 45;
diff --git a/Scripts/Spells/Fifth/Paralyze.cs b/Scripts/Spells/Fifth/Paralyze.cs
index 988fecfdf..7a2251e01 100644
--- a/Scripts/Spells/Fifth/Paralyze.cs
+++ b/Scripts/Spells/Fifth/Paralyze.cs
@@ -78,9 +78,11 @@ namespace Server.Spells.Fifth
}
m.Paralyze( TimeSpan.FromSeconds( duration ) );
-
+
m.PlaySound( 0x204 );
m.FixedEffect( 0x376A, 6, 1 );
+
+ HarmfulSpell( m );
}
FinishSequence();
diff --git a/Scripts/Spells/Fifth/PoisonField.cs b/Scripts/Spells/Fifth/PoisonField.cs
index bcbb8a571..f868c2031 100644
--- a/Scripts/Spells/Fifth/PoisonField.cs
+++ b/Scripts/Spells/Fifth/PoisonField.cs
@@ -187,6 +187,9 @@ namespace Server.Spells.Fifth
if ( m.ApplyPoison( m_Caster, p ) == ApplyPoisonResult.Poisoned )
if ( SpellHelper.CanRevealCaster( m ) )
m_Caster.RevealingAction();
+
+ if ( m is BaseCreature )
+ ( (BaseCreature) m ).OnHarmfulSpell( m_Caster );
}
public override bool OnMoveOver( Mobile m )
diff --git a/Scripts/Spells/First/Clumsy.cs b/Scripts/Spells/First/Clumsy.cs
index 91cb54c81..f2f9500c8 100644
--- a/Scripts/Spells/First/Clumsy.cs
+++ b/Scripts/Spells/First/Clumsy.cs
@@ -51,6 +51,8 @@ namespace Server.Spells.First
TimeSpan length = SpellHelper.GetDuration( Caster, m );
BuffInfo.AddBuff( m, new BuffInfo( BuffIcon.Clumsy, 1075831, length, m, percentage.ToString() ) );
+
+ HarmfulSpell( m );
}
FinishSequence();
diff --git a/Scripts/Spells/First/Feeblemind.cs b/Scripts/Spells/First/Feeblemind.cs
index 91fe3ed54..ae5333483 100644
--- a/Scripts/Spells/First/Feeblemind.cs
+++ b/Scripts/Spells/First/Feeblemind.cs
@@ -51,6 +51,8 @@ namespace Server.Spells.First
TimeSpan length = SpellHelper.GetDuration( Caster, m );
BuffInfo.AddBuff( m, new BuffInfo( BuffIcon.FeebleMind, 1075833, length, m, percentage.ToString() ) );
+
+ HarmfulSpell( m );
}
FinishSequence();
diff --git a/Scripts/Spells/First/Weaken.cs b/Scripts/Spells/First/Weaken.cs
index f451dc479..d8a618280 100644
--- a/Scripts/Spells/First/Weaken.cs
+++ b/Scripts/Spells/First/Weaken.cs
@@ -51,6 +51,8 @@ namespace Server.Spells.First
TimeSpan length = SpellHelper.GetDuration( Caster, m );
BuffInfo.AddBuff( m, new BuffInfo( BuffIcon.Weaken, 1075837, length, m, percentage.ToString() ) );
+
+ HarmfulSpell( m );
}
FinishSequence();
diff --git a/Scripts/Spells/Fourth/Curse.cs b/Scripts/Spells/Fourth/Curse.cs
index 2caf53853..906ba7cd2 100644
--- a/Scripts/Spells/Fourth/Curse.cs
+++ b/Scripts/Spells/Fourth/Curse.cs
@@ -81,7 +81,9 @@ namespace Server.Spells.Fourth
string args = String.Format("{0}\t{1}\t{2}\t{3}\t{4}\t{5}\t{6}", percentage, percentage, percentage, 10, 10, 10, 10);
- BuffInfo.AddBuff(m, new BuffInfo(BuffIcon.Curse, 1075835, 1075836, length, m, args.ToString()));
+ BuffInfo.AddBuff( m, new BuffInfo( BuffIcon.Curse, 1075835, 1075836, length, m, args.ToString() ) );
+
+ HarmfulSpell( m );
}
FinishSequence();
diff --git a/Scripts/Spells/Fourth/FireField.cs b/Scripts/Spells/Fourth/FireField.cs
index 4a71882b6..804c7e3ce 100644
--- a/Scripts/Spells/Fourth/FireField.cs
+++ b/Scripts/Spells/Fourth/FireField.cs
@@ -201,6 +201,9 @@ namespace Server.Spells.Fourth
AOS.Damage( m, m_Caster, damage, 0, 100, 0, 0, 0 );
m.PlaySound( 0x208 );
+
+ if ( m is BaseCreature )
+ ((BaseCreature) m).OnHarmfulSpell( m_Caster );
}
return true;
@@ -278,6 +281,9 @@ namespace Server.Spells.Fourth
AOS.Damage( m, caster, damage, 0, 100, 0, 0, 0 );
m.PlaySound( 0x208 );
+
+ if ( m is BaseCreature )
+ ((BaseCreature) m).OnHarmfulSpell( caster );
}
}
}
diff --git a/Scripts/Spells/Fourth/ManaDrain.cs b/Scripts/Spells/Fourth/ManaDrain.cs
index dd90acf05..8d67e0483 100644
--- a/Scripts/Spells/Fourth/ManaDrain.cs
+++ b/Scripts/Spells/Fourth/ManaDrain.cs
@@ -98,6 +98,8 @@ namespace Server.Spells.Fourth
m.FixedParticles( 0x374A, 10, 15, 5032, EffectLayer.Head );
m.PlaySound( 0x1F8 );
}
+
+ HarmfulSpell( m );
}
FinishSequence();
diff --git a/Scripts/Spells/Necromancy/AnimateDeadSpell.cs b/Scripts/Spells/Necromancy/AnimateDeadSpell.cs
index 5d9ec5356..3044dc92b 100644
--- a/Scripts/Spells/Necromancy/AnimateDeadSpell.cs
+++ b/Scripts/Spells/Necromancy/AnimateDeadSpell.cs
@@ -380,6 +380,7 @@ namespace Server.Spells.Necromancy
corpse.ItemID = Utility.Random( 0xECA, 9 ); // bone graphic
corpse.Hue = 0;
corpse.ProcessDelta();
+ corpse.Animated = true;
Register( caster, summoned );
}
diff --git a/Scripts/Spells/Necromancy/BloodOathSpell.cs b/Scripts/Spells/Necromancy/BloodOathSpell.cs
index f94034bab..15355c10c 100644
--- a/Scripts/Spells/Necromancy/BloodOathSpell.cs
+++ b/Scripts/Spells/Necromancy/BloodOathSpell.cs
@@ -86,7 +86,7 @@ namespace Server.Spells.Necromancy
BuffInfo.AddBuff ( m, new BuffInfo ( BuffIcon.BloodOathCurse, 1075661, duration, m, Caster.Name.ToString () ) );
m_Table[m] = timer;
-
+ HarmfulSpell( m );
}
FinishSequence();
diff --git a/Scripts/Spells/Necromancy/CorpseSkin.cs b/Scripts/Spells/Necromancy/CorpseSkin.cs
index bd5038d2a..b3b2b1495 100644
--- a/Scripts/Spells/Necromancy/CorpseSkin.cs
+++ b/Scripts/Spells/Necromancy/CorpseSkin.cs
@@ -84,6 +84,8 @@ namespace Server.Spells.Necromancy
for ( int i = 0; i < mods.Length; ++i )
m.AddResistanceMod( mods[i] );
+
+ HarmfulSpell( m );
}
FinishSequence();
diff --git a/Scripts/Spells/Necromancy/EvilOmen.cs b/Scripts/Spells/Necromancy/EvilOmen.cs
index c57f46c0b..d09f3476d 100644
--- a/Scripts/Spells/Necromancy/EvilOmen.cs
+++ b/Scripts/Spells/Necromancy/EvilOmen.cs
@@ -68,6 +68,11 @@ namespace Server.Spells.Necromancy
TimeSpan duration = TimeSpan.FromSeconds((Caster.Skills[SkillName.SpiritSpeak].Value / 12) + 1.0);
Timer.DelayCall(duration, new TimerStateCallback(EffectExpire_Callback), m);
+
+ HarmfulSpell( m );
+
+ BuffInfo.AddBuff(m, new BuffInfo(BuffIcon.EvilOmen, 1075647, 1075648, duration, m));
+
}
FinishSequence();
diff --git a/Scripts/Spells/Necromancy/MindRot.cs b/Scripts/Spells/Necromancy/MindRot.cs
index e8dfb5777..e4793bc31 100644
--- a/Scripts/Spells/Necromancy/MindRot.cs
+++ b/Scripts/Spells/Necromancy/MindRot.cs
@@ -60,6 +60,8 @@ namespace Server.Spells.Necromancy
SetMindRotScalar( Caster, m, 1.25, duration );
else
SetMindRotScalar( Caster, m, 2.00, duration );
+
+ HarmfulSpell( m );
}
FinishSequence();
diff --git a/Scripts/Spells/Necromancy/PainSpike.cs b/Scripts/Spells/Necromancy/PainSpike.cs
index 687ec219f..6b887c871 100644
--- a/Scripts/Spells/Necromancy/PainSpike.cs
+++ b/Scripts/Spells/Necromancy/PainSpike.cs
@@ -82,6 +82,7 @@ namespace Server.Spells.Necromancy
Misc.WeightOverloading.DFA = Misc.DFAlgorithm.Standard;
//SpellHelper.Damage( this, m, damage, 100, 0, 0, 0, 0, Misc.DFAlgorithm.PainSpike );
+ HarmfulSpell( m );
}
FinishSequence();
diff --git a/Scripts/Spells/Necromancy/Strangle.cs b/Scripts/Spells/Necromancy/Strangle.cs
index 29cb41666..651272990 100644
--- a/Scripts/Spells/Necromancy/Strangle.cs
+++ b/Scripts/Spells/Necromancy/Strangle.cs
@@ -66,8 +66,47 @@ namespace Server.Spells.Necromancy
m_Table[m] = t;
}
+
+ HarmfulSpell( m );
}
+ //Calculations for the buff bar
+ double spiritlevel = Caster.Skills[SkillName.SpiritSpeak].Value / 10;
+ if (spiritlevel < 4)
+ spiritlevel = 4;
+ int d_MinDamage = 4;
+ int d_MaxDamage = ((int)spiritlevel + 1) * 3;
+ string args = String.Format("{0}\t{1}", d_MinDamage, d_MaxDamage);
+
+ int i_Count = (int)spiritlevel;
+ int i_MaxCount = i_Count;
+ int i_HitDelay = 5;
+ int i_Length = i_HitDelay;
+
+ while (i_Count > 1)
+ {
+ --i_Count;
+ if (i_HitDelay > 1)
+ {
+ if (i_MaxCount < 5)
+ {
+ --i_HitDelay;
+ }
+ else
+ {
+ int delay = (int)(Math.Ceiling((1.0 + (5 * i_Count)) / i_MaxCount));
+
+ if (delay <= 5)
+ i_HitDelay = delay;
+ else
+ i_HitDelay = 5;
+ }
+ }
+ i_Length += i_HitDelay;
+ }
+ TimeSpan t_Duration = TimeSpan.FromSeconds(i_Length);
+ BuffInfo.AddBuff(m, new BuffInfo(BuffIcon.Strangle, 1075794, 1075795, t_Duration, m, args.ToString()));
+
FinishSequence();
}
@@ -171,6 +210,9 @@ namespace Server.Spells.Necromancy
damage *= 1.75;
AOS.Damage( m_Target, m_From, (int)damage, 0, 0, 0, 100, 0 );
+
+ if ( 0.60 <= Utility.RandomDouble() ) // OSI: randomly revealed between first and third damage tick, guessing 60% chance
+ m_Target.RevealingAction();
}
}
}
diff --git a/Scripts/Spells/Seventh/ChainLightning.cs b/Scripts/Spells/Seventh/ChainLightning.cs
index aef6d332f..d94f2fb42 100644
--- a/Scripts/Spells/Seventh/ChainLightning.cs
+++ b/Scripts/Spells/Seventh/ChainLightning.cs
@@ -89,19 +89,19 @@ namespace Server.Spells.Seventh
else if ( !Core.AOS )
damage /= targets.Count;
+ double toDeal;
for ( int i = 0; i < targets.Count; ++i )
{
+ toDeal = damage;
Mobile m = targets[i];
- double toDeal = damage;
-
if ( !Core.AOS && CheckResisted( m ) )
{
toDeal *= 0.5;
m.SendLocalizedMessage( 501783 ); // You feel yourself resisting magical energy.
}
-
+ toDeal *= GetDamageScalar( m );
Caster.DoHarmful( m );
SpellHelper.Damage( this, m, toDeal, 0, 0, 0, 0, 100 );
diff --git a/Scripts/Spells/Seventh/ManaVampire.cs b/Scripts/Spells/Seventh/ManaVampire.cs
index 6dfb6b381..721fdea00 100644
--- a/Scripts/Spells/Seventh/ManaVampire.cs
+++ b/Scripts/Spells/Seventh/ManaVampire.cs
@@ -84,6 +84,8 @@ namespace Server.Spells.Seventh
m.FixedParticles( 0x374A, 10, 15, 5054, EffectLayer.Head );
m.PlaySound( 0x1F9 );
}
+
+ HarmfulSpell( m );
}
FinishSequence();
diff --git a/Scripts/Spells/Seventh/MeteorSwarm.cs b/Scripts/Spells/Seventh/MeteorSwarm.cs
index d13aa8efd..d6258714e 100644
--- a/Scripts/Spells/Seventh/MeteorSwarm.cs
+++ b/Scripts/Spells/Seventh/MeteorSwarm.cs
@@ -87,20 +87,21 @@ namespace Server.Spells.Seventh
damage = (damage * 2) / targets.Count;
else if ( !Core.AOS )
damage /= targets.Count;
-
+
+ double toDeal;
for ( int i = 0; i < targets.Count; ++i )
{
Mobile m = targets[i];
- double toDeal = damage;
+ toDeal = damage;
if ( !Core.AOS && CheckResisted( m ) )
{
- toDeal *= 0.5;
+ damage *= 0.5;
m.SendLocalizedMessage( 501783 ); // You feel yourself resisting magical energy.
}
-
+ toDeal *= GetDamageScalar( m );
Caster.DoHarmful( m );
SpellHelper.Damage( this, m, toDeal, 0, 100, 0, 0, 0 );
diff --git a/Scripts/Spells/Sixth/MassCurse.cs b/Scripts/Spells/Sixth/MassCurse.cs
index 13bc1ad84..5517d287a 100644
--- a/Scripts/Spells/Sixth/MassCurse.cs
+++ b/Scripts/Spells/Sixth/MassCurse.cs
@@ -75,6 +75,8 @@ namespace Server.Spells.Sixth
m.FixedParticles( 0x374A, 10, 15, 5028, EffectLayer.Waist );
m.PlaySound( 0x1FB );
+
+ HarmfulSpell( m );
}
}
diff --git a/Scripts/Spells/Sixth/ParalyzeField.cs b/Scripts/Spells/Sixth/ParalyzeField.cs
index 6798702d7..5faee78c6 100644
--- a/Scripts/Spells/Sixth/ParalyzeField.cs
+++ b/Scripts/Spells/Sixth/ParalyzeField.cs
@@ -188,6 +188,9 @@ namespace Server.Spells.Sixth
m.PlaySound( 0x204 );
m.FixedEffect( 0x376A, 10, 16 );
+
+ if ( m is BaseCreature )
+ ((BaseCreature) m).OnHarmfulSpell( m_Caster );
}
return true;
diff --git a/Scripts/Spells/Third/Poison.cs b/Scripts/Spells/Third/Poison.cs
index cc4415cfa..08e9770c9 100644
--- a/Scripts/Spells/Third/Poison.cs
+++ b/Scripts/Spells/Third/Poison.cs
@@ -93,6 +93,8 @@ namespace Server.Spells.Third
m.FixedParticles( 0x374A, 10, 15, 5021, EffectLayer.Waist );
m.PlaySound( 0x205 );
+
+ HarmfulSpell( m );
}
FinishSequence();
diff --git a/Scripts/Spells/Third/Telekinesis.cs b/Scripts/Spells/Third/Telekinesis.cs
index 4faad9907..b167e46b9 100644
--- a/Scripts/Spells/Third/Telekinesis.cs
+++ b/Scripts/Spells/Third/Telekinesis.cs
@@ -66,7 +66,6 @@ namespace Server.Spells.Third
Effects.SendLocationParticles( EffectItem.Create( item.Location, item.Map, EffectItem.DefaultDuration ), 0x376A, 9, 32, 5022 );
Effects.PlaySound( item.Location, item.Map, 0x1F5 );
- item.DisplayTo( Caster );
item.OnItemUsed( Caster, item );
}
}