#W# Reworking Inn rooms.
This commit is contained in:
parent
7104f56ebf
commit
66eafd3451
15 changed files with 918 additions and 576 deletions
115
Scripts/Engines/InnRooms/InnRentalGump.cs
Normal file
115
Scripts/Engines/InnRooms/InnRentalGump.cs
Normal file
|
|
@ -0,0 +1,115 @@
|
|||
using System;
|
||||
using Server;
|
||||
using Server.Gumps;
|
||||
using Server.Mobiles;
|
||||
using Server.Items;
|
||||
using Server.Network;
|
||||
|
||||
namespace Server.Custom.InnRooms
|
||||
{
|
||||
public class InnRentalGump : Gump
|
||||
{
|
||||
private PlayerMobile m_Player;
|
||||
|
||||
public InnRentalGump(PlayerMobile pm) : base(150, 150)
|
||||
{
|
||||
m_Player = pm;
|
||||
|
||||
AddPage(0);
|
||||
|
||||
// Widened the background from 400 to 500
|
||||
AddBackground(0, 0, 500, 300, 9270);
|
||||
|
||||
// Centered the header to match the new 500 width
|
||||
AddHtml(0, 15, 500, 20, "<CENTER><BASEFONT COLOR=#FFFFFF>Inn Room Rentals</BASEFONT></CENTER>", false, false);
|
||||
|
||||
DrawRoomOption(1, "Small Room", InnRoomSize.Small, 60);
|
||||
DrawRoomOption(2, "Medium Room", InnRoomSize.Medium, 120);
|
||||
DrawRoomOption(3, "Large Room", InnRoomSize.Large, 180);
|
||||
}
|
||||
|
||||
private void DrawRoomOption(int buttonId, string title, InnRoomSize size, int yPos)
|
||||
{
|
||||
int available = InnRoomManager.GetAvailableCount(size);
|
||||
int cost = InnRoomManager.GetCost(size);
|
||||
|
||||
int total = 0;
|
||||
foreach (RoomDefinition def in InnRoomManager.Rooms)
|
||||
{
|
||||
if (def.Size == size)
|
||||
total++;
|
||||
}
|
||||
|
||||
// Pushed the text to X: 70 to clear the button
|
||||
AddHtml(70, yPos, 150, 20, $"<BASEFONT COLOR=#FCCA03>{title}</BASEFONT>", false, false);
|
||||
AddHtml(70, yPos + 20, 200, 20, $"<BASEFONT COLOR=#FFFFFF>Cost: {cost} Gold</BASEFONT>", false, false);
|
||||
|
||||
// Pushed the availability count to X: 320 to sit nicely on the right side
|
||||
AddHtml(320, yPos + 10, 150, 20, $"<BASEFONT COLOR=#FFFFFF>{available} / {total} Available</BASEFONT>", false, false);
|
||||
|
||||
if (available > 0)
|
||||
{
|
||||
// Kept the button firmly at X: 25
|
||||
AddButton(25, yPos + 5, 4005, 4007, buttonId, GumpButtonType.Reply, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
AddHtml(25, yPos + 5, 20, 20, "<BASEFONT COLOR=#FF0000>X</BASEFONT>", false, false);
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnResponse(NetState sender, RelayInfo info)
|
||||
{
|
||||
if (info.ButtonID == 0 || m_Player == null) return;
|
||||
|
||||
InnRoomSize selectedSize = InnRoomSize.Small;
|
||||
if (info.ButtonID == 2) selectedSize = InnRoomSize.Medium;
|
||||
if (info.ButtonID == 3) selectedSize = InnRoomSize.Large;
|
||||
|
||||
int slot = InnRoomManager.FindFirstOpenSlot(selectedSize);
|
||||
|
||||
if (slot == -1)
|
||||
{
|
||||
m_Player.SendMessage(33, "Those rooms are currently sold out.");
|
||||
return;
|
||||
}
|
||||
|
||||
int cost = InnRoomManager.GetCost(selectedSize);
|
||||
|
||||
if (Banker.Withdraw(m_Player, cost))
|
||||
{
|
||||
RentRoom(selectedSize, slot);
|
||||
}
|
||||
else if (m_Player.Backpack != null && m_Player.Backpack.ConsumeTotal(typeof(Gold), cost))
|
||||
{
|
||||
RentRoom(selectedSize, slot);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_Player.SendMessage(33, $"You need {cost} gold in your account or backpack to rent that room.");
|
||||
}
|
||||
}
|
||||
|
||||
private void RentRoom(InnRoomSize size, int slot)
|
||||
{
|
||||
m_Player.LastInnLocation = m_Player.Location;
|
||||
m_Player.LastInnMap = m_Player.Map;
|
||||
|
||||
RoomDefinition roomDef = InnRoomManager.Rooms[slot];
|
||||
Point3D voidRoomLoc = roomDef.Location;
|
||||
Map voidRoomMap = roomDef.RoomMap;
|
||||
|
||||
InnRoomHouse newHouse = new InnRoomHouse(m_Player);
|
||||
newHouse.RoomTier = size;
|
||||
newHouse.RoomIndex = slot;
|
||||
newHouse.RentExpires = DateTime.UtcNow + TimeSpan.FromDays(7);
|
||||
|
||||
newHouse.MoveToWorld(new Point3D(voidRoomLoc.X, voidRoomLoc.Y, voidRoomLoc.Z - 20), voidRoomMap);
|
||||
|
||||
m_Player.PlaySound(0x249);
|
||||
m_Player.SendMessage(68, $"You have rented a {size} room.");
|
||||
|
||||
m_Player.MoveToWorld(voidRoomLoc, voidRoomMap);
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue