From 61c499e8179589c551f83a0e3737367e30e83780 Mon Sep 17 00:00:00 2001 From: xavier Date: Sun, 9 Oct 2011 03:24:55 +0000 Subject: [PATCH] Missing checks to prevent item loss cause by addon containers. --- Scripts/Gumps/HouseGumpAOS.cs | 8 +++ Scripts/Multis/BaseHouse.cs | 109 ++++++++++++++++++++++++++++++++-- 2 files changed, 113 insertions(+), 4 deletions(-) diff --git a/Scripts/Gumps/HouseGumpAOS.cs b/Scripts/Gumps/HouseGumpAOS.cs index 1fd9c4818..17ed6b1ff 100644 --- a/Scripts/Gumps/HouseGumpAOS.cs +++ b/Scripts/Gumps/HouseGumpAOS.cs @@ -1143,6 +1143,14 @@ namespace Server.Gumps // You cannot perform this action while you still have vendors rented out in this house. from.SendGump( new NoticeGump( 1060637, 30720, 1062395, 32512, 320, 180, new NoticeGumpCallback( CustomizeNotice_Callback ), m_House ) ); } + #region Mondain's Legacy + else if ( m_House.HasAddonContainers ) + { + // The house can not be customized when add-on containers such as aquariums, elven furniture containers, vanities, and boiling cauldrons + // are present in the house. Please re-deed the add-on containers before customizing the house. + from.SendGump( new NoticeGump( 1060637, 30720, 1074863, 32512, 320, 180, new NoticeGumpCallback( CustomizeNotice_Callback ), m_House ) ); + } + #endregion else { foundation.BeginCustomize( from ); diff --git a/Scripts/Multis/BaseHouse.cs b/Scripts/Multis/BaseHouse.cs index 3af4c8cfc..3f3ab72d8 100644 --- a/Scripts/Multis/BaseHouse.cs +++ b/Scripts/Multis/BaseHouse.cs @@ -429,6 +429,22 @@ namespace Server.Multis } } + #region Mondain's Legacy + public bool HasAddonContainers + { + get + { + foreach ( Item item in Addons ) + { + if ( item is BaseAddonContainer ) + return true; + } + + return false; + } + } + #endregion + public ArrayList AvailableVendorsFor( Mobile m ) { ArrayList list = new ArrayList(); @@ -545,6 +561,18 @@ namespace Server.Multis if ( deed != null ) { + #region Mondain's Legacy + if ( deed is BaseAddonContainerDeed && addon is BaseAddonContainer ) + { + BaseAddonContainer c = (BaseAddonContainer) addon; + c.DropItemsToGround(); + + ((BaseAddonContainerDeed) deed).Resource = c.Resource; + } + else if ( deed is BaseAddonDeed && addon is BaseAddon ) + ((BaseAddonDeed) deed).Resource = ((BaseAddon) addon).Resource; + #endregion + addon.Delete(); if( retainDeedHue ) @@ -725,8 +753,23 @@ namespace Server.Multis } } - if( deed != null && retainDeedHue ) - deed.Hue = hue; + #region Mondain's Legacy + if ( deed != null ) + { + if ( deed is BaseAddonContainerDeed && item is BaseAddonContainer ) + { + BaseAddonContainer c = (BaseAddonContainer) item; + c.DropItemsToGround(); + + ((BaseAddonContainerDeed) deed).Resource = c.Resource; + } + else if ( deed is BaseAddonDeed && item is BaseAddon ) + ((BaseAddonDeed) deed).Resource = ((BaseAddon) item).Resource; + + if ( retainDeedHue ) + deed.Hue = hue; + } + #endregion relocateItem = deed; item.Delete(); @@ -1431,6 +1474,12 @@ namespace Server.Multis if ( m_LockDowns == null ) return; + #region Mondain's Legacy + if ( i is BaseAddonContainer ) + i.Movable = false; + else + #endregion + i.Movable = !locked; i.IsLockedDown = locked; @@ -1473,7 +1522,7 @@ namespace Server.Multis if ( !IsCoOwner( m ) || !IsActive ) return false; - if ( item.Movable && !IsSecure( item ) ) + if ( item is BaseAddonContainer || item.Movable && !IsSecure( item ) ) { int amt = 1 + item.TotalItems; @@ -1849,7 +1898,8 @@ namespace Server.Multis { m.SendLocalizedMessage( 1010423 ); // You cannot secure this, place it on the ground first. } - else if ( !item.Movable ) + // Mondain's Legacy mod + else if ( !( item is BaseAddonContainer ) && !item.Movable ) { m.SendLocalizedMessage( 1010424 ); // You cannot secure this. } @@ -1935,6 +1985,13 @@ namespace Server.Multis { item.IsLockedDown = false; item.IsSecure = false; + + #region Mondain's Legacy + if ( item is BaseAddonContainer ) + item.Movable = false; + else + #endregion + item.Movable = true; item.SetLastMoved(); item.PublicOverheadMessage( Server.Network.MessageType.Label, 0x3B2, 501656 );//[no longer secure] @@ -3443,6 +3500,17 @@ namespace Server.Multis { if ( m_Release ) { + #region Mondain's legacy + if ( targeted is AddonContainerComponent ) + { + AddonContainerComponent component = (AddonContainerComponent) targeted; + + if ( component.Addon != null ) + m_House.Release( from, component.Addon ); + } + else + #endregion + m_House.Release( from, (Item)targeted ); } else @@ -3459,6 +3527,17 @@ namespace Server.Multis } else { + #region Mondain's legacy + if ( targeted is AddonContainerComponent ) + { + AddonContainerComponent component = (AddonContainerComponent) targeted; + + if ( component.Addon != null ) + m_House.LockDown( from, component.Addon ); + } + else + #endregion + m_House.LockDown( from, (Item)targeted ); } } @@ -3501,6 +3580,17 @@ namespace Server.Multis { if ( m_Release ) { + #region Mondain's legacy + if ( targeted is AddonContainerComponent ) + { + AddonContainerComponent component = (AddonContainerComponent) targeted; + + if ( component.Addon != null ) + m_House.ReleaseSecure( from, component.Addon ); + } + else + #endregion + m_House.ReleaseSecure( from, (Item)targeted ); } else @@ -3512,6 +3602,17 @@ namespace Server.Multis } else { + #region Mondain's legacy + if ( targeted is AddonContainerComponent ) + { + AddonContainerComponent component = (AddonContainerComponent) targeted; + + if ( component.Addon != null ) + m_House.AddSecure( from, component.Addon ); + } + else + #endregion + m_House.AddSecure( from, (Item)targeted ); } }