From 72562f19707c0b7cba704e3155f8922f908eea8e Mon Sep 17 00:00:00 2001 From: WarrentyExpired Date: Mon, 24 Aug 2026 20:35:58 -0400 Subject: [PATCH] #W# Inn rooms are limited to 1. Also tweaked the weather some. --- Data/Decoration/inndoors.cfg | 1 + Scripts/Items/Houses/InnRooms/InnDoor.cs | 44 ++++++++++++++---------- Scripts/Misc/Weather.cs | 13 +++---- Scripts/Multis/BaseHouse.cs | 6 ++-- 4 files changed, 34 insertions(+), 30 deletions(-) diff --git a/Data/Decoration/inndoors.cfg b/Data/Decoration/inndoors.cfg index 937dba0..ababd2d 100644 --- a/Data/Decoration/inndoors.cfg +++ b/Data/Decoration/inndoors.cfg @@ -1,2 +1,3 @@ #Bastion Inn Vaelen 835 666 0 Vaelen 7147 4075 0 1779 +#Vaelen 835 661 0 Vaelen 7151 4063 0 1775 diff --git a/Scripts/Items/Houses/InnRooms/InnDoor.cs b/Scripts/Items/Houses/InnRooms/InnDoor.cs index dc6887b..1de5987 100644 --- a/Scripts/Items/Houses/InnRooms/InnDoor.cs +++ b/Scripts/Items/Houses/InnRooms/InnDoor.cs @@ -17,12 +17,10 @@ namespace Server.Custom.InnRooms private Point3D m_RoomLocation; private Map m_RoomMap; - // --- NEW VARIABLES --- private bool m_AutoRenew; private int m_RentCost = 5000; private TimeSpan m_RentDuration = TimeSpan.FromDays(7); - // --- PUBLIC PROPERTIES EXPOSED FOR THE GUMP --- [CommandProperty(AccessLevel.GameMaster)] public bool AutoRenew { get { return m_AutoRenew; } set { m_AutoRenew = value; } } @@ -59,6 +57,24 @@ namespace Server.Custom.InnRooms { } + public static bool HasAccountInnRoom(Mobile m) + { + if (m == null || m.Account == null) + return false; + + foreach (Item item in World.Items.Values) + { + if (item is InnDoor) + { + InnDoor door = (InnDoor)item; + + if (door.Renter != null && door.Renter.Account == m.Account) + return true; + } + } + return false; + } + public override void OnDoubleClick(Mobile from) { if (!from.InRange(GetWorldLocation(), 2)) @@ -67,7 +83,6 @@ namespace Server.Custom.InnRooms return; } - // SCENARIO A: The room is VACANT if (m_Renter == null) { if (RoomLocation == Point3D.Zero || RoomMap == null) @@ -75,13 +90,16 @@ namespace Server.Custom.InnRooms from.SendMessage(33, "This door is out of order (No Room Linked)."); return; } - - // Swapped to Banker.Withdraw to support AccountGold out of the gate + if (HasAccountInnRoom(from)) + { + from.SendMessage(33, "You already have an active inn room rental on this account."); + return; + } if (Banker.Withdraw(from, m_RentCost)) { m_Renter = from; m_RentExpires = DateTime.UtcNow + m_RentDuration; - m_AutoRenew = true; // Automatically turn it on for new renters! + m_AutoRenew = true; Name = from.Name + "'s Inn Room"; m_House = new InnRoomHouse(from); @@ -97,19 +115,15 @@ namespace Server.Custom.InnRooms from.SendMessage(33, $"You need {m_RentCost} gold in your bank to rent this room."); } } - // SCENARIO B: The room is RENTED else { - // Check if the rent has expired if (DateTime.UtcNow > m_RentExpires) { - // MAGIC AUTO-RENEW CHECK if (m_AutoRenew && m_Renter != null && Banker.Withdraw(m_Renter, m_RentCost)) { m_RentExpires += m_RentDuration; InvalidateProperties(); - // Let them know it silently renewed behind the scenes if (from == m_Renter) from.SendMessage(68, $"Your auto-renew just processed {m_RentCost} gold from your bank!"); } @@ -136,7 +150,6 @@ namespace Server.Custom.InnRooms { Point3D dest = RoomLocation; - // Scans the void room (up to 12 tiles away from center) to find your physical exit door if (RoomMap != null) { IPooledEnumerable eable = RoomMap.GetItemsInRange(RoomLocation, 12); @@ -144,14 +157,13 @@ namespace Server.Custom.InnRooms { if (item is InnExitDoor) { - dest = item.Location; // Teleports them exactly where you placed the exit! + dest = item.Location; break; } } eable.Free(); } - // Save their exact spot in the tavern so the exit door knows where to return them if (m is PlayerMobile) { PlayerMobile pm = (PlayerMobile)m; @@ -212,14 +224,12 @@ namespace Server.Custom.InnRooms } m_House.Delete(); - // Kick anyone currently inside the room back to the tavern door List insideMobiles = m_House.GetMobiles(); foreach (Mobile m in insideMobiles) { if (m is PlayerMobile) { PlayerMobile pm = (PlayerMobile)m; - // Send them right back to this physical InnDoor in the town pm.MoveToWorld(this.Location, this.Map); pm.LastInnLocation = Point3D.Zero; pm.LastInnMap = null; @@ -252,7 +262,6 @@ namespace Server.Custom.InnRooms public override void Serialize(GenericWriter writer) { base.Serialize(writer); - // Bumped to version 1 to safely save the AutoRenew toggle! writer.Write((int)1); writer.Write(m_AutoRenew); @@ -281,14 +290,12 @@ namespace Server.Custom.InnRooms m_RoomMap = reader.ReadMap(); } - // --- NEW CONTEXT MENU FOR THE GUMP --- public override void GetContextMenuEntries(Mobile from, List list) { base.GetContextMenuEntries(from, list); if (from.Alive && m_Renter == from) { - // Cliloc 1063490 is "Manage" list.Add(new ManageRoomEntry(from, this)); } } @@ -313,7 +320,6 @@ namespace Server.Custom.InnRooms } } - // --- BONUS: DRAG AND DROP RENEWAL --- public override bool OnDragDrop(Mobile from, Item dropped) { if (from == m_Renter && dropped is Gold) diff --git a/Scripts/Misc/Weather.cs b/Scripts/Misc/Weather.cs index c3b898f..a134328 100644 --- a/Scripts/Misc/Weather.cs +++ b/Scripts/Misc/Weather.cs @@ -23,14 +23,9 @@ namespace Server.Misc */ // ice island - AddWeather( -15, 100, 5, new Rectangle2D( 1479, 47, 865, 319 ) ); - - // covetous entrance, around vesper and minoc - //AddWeather( +15, 50, 5, new Rectangle2D( 2425, 725, 250, 250 ) ); - - // despise entrance, north of britain - //AddWeather( +15, 50, 5, new Rectangle2D( 1245, 1045, 250, 250 ) ); - + AddWeather( -15, 75, 10, new Rectangle2D( 1479, 47, 865, 319 ) ); + // desert island + AddWeather( +15, 0, 5, new Rectangle2D(791, 1619, 140, 64 ) ); /* Dynamic weather: * @@ -39,7 +34,7 @@ namespace Server.Misc */ for ( int i = 0; i < 15; ++i ) - AddDynamicWeather( +15, 100, 5, 8, 400, 400, new Rectangle2D( 0, 0, 2344, 1991 ) ); + AddDynamicWeather( +15, 25, 5, 8, 400, 400, new Rectangle2D( 0, 0, 2344, 1991 ) ); } public static List GetWeatherList( Map facet ) diff --git a/Scripts/Multis/BaseHouse.cs b/Scripts/Multis/BaseHouse.cs index 2873891..8d206f1 100644 --- a/Scripts/Multis/BaseHouse.cs +++ b/Scripts/Multis/BaseHouse.cs @@ -3297,8 +3297,10 @@ namespace Server.Multis { for ( int j = 0; j < list.Count; ++j ) { - if ( !list[j].Deleted ) - count++; + BaseHouse h = list[j]; + + if ( !h.Deleted && !(h is Server.Custom.InnRooms.InnRoomHouse) ) + count++; } } }