Example #1
0
        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);
        }
Example #3
0
        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());
        }