private static void HandleBuyPlot(GameSession session, PacketReader packet) { int groupId = packet.ReadInt(); int housingTemplate = packet.ReadInt(); //TODO: If player already owns a plot, reject UGCMapGroup land = UGCMapMetadataStorage.GetMetadata(session.Player.MapId, (byte)groupId); if (!HandlePlotPayment(session, land.PriceItemCode, land.Price)) { return; } session.Player.PlotMapId = session.Player.MapId; session.Player.HomePlotNumber = land.Id; session.Player.HomeExpiration = DateTimeOffset.UtcNow.ToUnixTimeSeconds() + Environment.TickCount + (land.ContractDate * (24 * 60 * 60)); session.Player.HomeName = session.Player.Name; session.FieldManager.BroadcastPacket(ResponseCubePacket.PurchasePlot(session.Player)); session.FieldManager.BroadcastPacket(ResponseCubePacket.EnablePlotFurnishing(session.Player)); session.Send(ResponseCubePacket.LoadHome(session.FieldPlayer)); session.FieldManager.BroadcastPacket(ResponseCubePacket.NameHome(session.Player), session); session.Send(ResponseCubePacket.CompletePurchase()); }
private static void HandleBuyPlot(GameSession session, PacketReader packet) { int groupId = packet.ReadInt(); int housingTemplate = packet.ReadInt(); //TODO: If player already owns a plot, reject UGCMapGroup land = UGCMapMetadataStorage.GetMetadata(session.Player.MapId, (byte)groupId); if (land == null) { return; } //Check if sale event is active int price = land.Price; GameEvent gameEvent = DatabaseManager.GetSingleGameEvent(GameEventType.UGCMapContractSale); if (gameEvent != null) { int markdown = land.Price * ((gameEvent.UGCMapContractSale.DiscountAmount / 100) / 100); price = land.Price - markdown; } if (!HandlePlotPayment(session, land.PriceItemCode, price)) { return; } session.Player.PlotMapId = session.Player.MapId; session.Player.HomePlotNumber = land.Id; session.Player.HomeExpiration = DateTimeOffset.UtcNow.ToUnixTimeSeconds() + Environment.TickCount + (land.ContractDate * (24 * 60 * 60)); session.Player.HomeName = session.Player.Name; session.FieldManager.BroadcastPacket(ResponseCubePacket.PurchasePlot(session.Player)); session.FieldManager.BroadcastPacket(ResponseCubePacket.EnablePlotFurnishing(session.Player)); session.Send(ResponseCubePacket.LoadHome(session.FieldPlayer)); session.FieldManager.BroadcastPacket(ResponseCubePacket.NameHome(session.Player), session); session.Send(ResponseCubePacket.CompletePurchase()); }
public override void Handle(GameSession session, PacketReader packet) { bool mapIsHome = session.Player.MapId == (int)Map.PrivateResidence; UGCMapMetadata ugcMapMetadata = UGCMapMetadataStorage.GetMetadata(session.Player.MapId); List <byte> plots = new List <byte>(); if (ugcMapMetadata != null) { plots = ugcMapMetadata.Groups.Select(x => x.Id).ToList(); } List <Home> homes; if (mapIsHome) { Home home = GameServer.HomeManager.GetHome(session.Player.VisitingHomeId); if (home == null) { session.Send(ResponseLoadUGCMapPacket.LoadUGCMap(false)); return; } homes = new List <Home>() { home }; session.Send(ResponseLoadUGCMapPacket.LoadUGCMap(mapIsHome, home, session.Player.IsInDecorPlanner)); // Find spawning coords for home int cubePortalId = 50400190; List <Cube> portals = home.FurnishingInventory.Values.Where(x => x.Item != null && x.Item.Id == cubePortalId).ToList(); CoordF coord; CoordF rotation; if (portals.Count > 0) { Cube portal = portals.OrderBy(x => RandomProvider.Get().Next()).Take(1).First(); coord = portal.CoordF; coord.Z += 1; rotation = portal.Rotation; rotation.Z -= 90; } else { byte homeSize = (byte)(home.Size - 1); int x = -1 * Block.BLOCK_SIZE * homeSize; coord = CoordF.From(x, x, 151); rotation = CoordF.From(0, 0, 0); } session.Player.Coord = coord; session.Player.SafeBlock = coord; session.Player.Rotation = rotation; if (session.Player.InstanceId == 0) { session.Player.InstanceId = home.InstanceId; } } else { homes = GameServer.HomeManager.GetPlots(session.Player.MapId); session.Send(ResponseLoadUGCMapPacket.LoadUGCMap(mapIsHome)); } List <Cube> cubes = new List <Cube>(); if (!session.Player.IsInDecorPlanner) { homes.ForEach(h => { int plotNumber = mapIsHome ? 1 : h.PlotNumber; cubes.AddRange(h.FurnishingInventory.Values.Where(x => x.Item.Id != 0 && x.PlotNumber == plotNumber).ToList()); }); } session.Send(SendCubesPacket.LoadPlots(homes, session.Player.MapId)); session.Send(SendCubesPacket.LoadCubes(cubes)); session.Send(SendCubesPacket.LoadAvailablePlots(homes, plots)); session.Send(SendCubesPacket.Expiration(homes.Where(x => x.PlotNumber != 0).ToList())); session.Send("6D 00 12 00 00 00 00 00 00 00 00 00 00 00 00".ToByteArray()); // send ugc }