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()); }
protected override List <UGCMapMetadata> Parse() { List <UGCMapMetadata> ugcmap = new List <UGCMapMetadata>(); foreach (PackFileEntry entry in Resources.XmlReader.Files) { if (!entry.Name.StartsWith("ugcmap")) { continue; } UGCMapMetadata metadata = new UGCMapMetadata(); string filename = Path.GetFileNameWithoutExtension(entry.Name); metadata.MapId = int.Parse(filename); XmlDocument document = Resources.XmlReader.GetXmlDocument(entry); XmlNodeList nodes = document.SelectNodes("/ugcmap/group"); foreach (XmlNode node in nodes) { UGCMapGroup group = new UGCMapGroup(); group.Id = byte.Parse(node.Attributes["no"].Value); group.Price = int.Parse(node.Attributes["contractPrice"].Value); group.PriceItemCode = int.Parse(node.Attributes["contractPriceItemCode"].Value); group.ExtensionPrice = int.Parse(node.Attributes["extensionPrice"].Value); group.ExtensionPriceItemCode = int.Parse(node.Attributes["extensionPriceItemCode"].Value); group.ContractDate = short.Parse(node.Attributes["ugcHomeContractDate"].Value); group.ExtensionDate = short.Parse(node.Attributes["ugcHomeExtensionDate"].Value); group.HeightLimit = byte.Parse(node.Attributes["heightLimit"].Value); group.BuildingCount = short.Parse(node.Attributes["installableBuildingCount"].Value); if (node.Attributes["returnPlaceID"] != null) { group.ReturnPlaceId = byte.Parse(node.Attributes["returnPlaceID"].Value); } group.Area = short.Parse(node.Attributes["area"].Value); group.SellType = byte.Parse(node.Attributes["sellType"].Value); group.BlockCode = byte.Parse(node.Attributes["blockCode"].Value); group.HouseNumber = short.Parse(node.Attributes["houseNumber"].Value); metadata.Groups.Add(group); } ugcmap.Add(metadata); } return(ugcmap); }
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()); }