Exemplo n.º 1
0
        private void DoPurchase()
        {
            var player        = GetPC();
            var data          = _base.GetPlayerTempData(GetPC());
            var style         = _data.Single <BuildingStyle>(x => x.ID == data.BuildingStyleID);
            var dbPlayer      = _data.Get <Player>(player.GlobalID);
            int purchasePrice = style.PurchasePrice + (int)(style.PurchasePrice * (dbPlayer.LeaseRate * 0.01f));

            if (player.Gold < purchasePrice)
            {
                player.SendMessage("You don't have enough credits to purchase that apartment.");
                return;
            }

            PCBase pcApartment = new PCBase
            {
                PlayerID            = player.GlobalID,
                BuildingStyleID     = style.ID,
                PCBaseTypeID        = (int)Enumeration.PCBaseType.Apartment,
                ApartmentBuildingID = data.ApartmentBuildingID,
                CustomName          = string.Empty,
                DateInitialPurchase = DateTime.UtcNow,
                DateRentDue         = DateTime.UtcNow.AddDays(7),
                AreaResref          = style.Resref,
                DateFuelEnds        = DateTime.UtcNow,
                Sector = "AP",
            };

            _data.SubmitDataChange(pcApartment, DatabaseActionType.Insert);

            PCBasePermission permission = new PCBasePermission
            {
                PCBaseID = pcApartment.ID,
                PlayerID = player.GlobalID
            };

            _data.SubmitDataChange(permission, DatabaseActionType.Insert);


            // Grant all base permissions to owner.
            var allPermissions = Enum.GetValues(typeof(BasePermission)).Cast <BasePermission>().ToArray();

            _perm.GrantBasePermissions(player, pcApartment.ID, allPermissions);

            _.TakeGoldFromCreature(purchasePrice, player, TRUE);

            LoadMainPage();
            ClearNavigationStack();
            ChangePage("MainPage", false);
        }
Exemplo n.º 2
0
        public void PurchaseArea(NWPlayer player, NWArea area, string sector)
        {
            if (sector != AreaSector.Northwest && sector != AreaSector.Northeast &&
                sector != AreaSector.Southwest && sector != AreaSector.Southeast)
            {
                throw new ArgumentException(nameof(sector) + " must match one of the valid sector values: NE, NW, SE, SW");
            }

            if (area.Width < 32)
            {
                throw new Exception("Area must be at least 32 tiles wide.");
            }
            if (area.Height < 32)
            {
                throw new Exception("Area must be at least 32 tiles high.");
            }


            var  dbArea        = _data.Single <Area>(x => x.Resref == area.Resref);
            Guid?existingOwner = null;

            switch (sector)
            {
            case AreaSector.Northwest: existingOwner = dbArea.NorthwestOwner; break;

            case AreaSector.Northeast: existingOwner = dbArea.NortheastOwner; break;

            case AreaSector.Southwest: existingOwner = dbArea.SouthwestOwner; break;

            case AreaSector.Southeast: existingOwner = dbArea.SoutheastOwner; break;
            }

            if (existingOwner != null)
            {
                player.SendMessage("Another player already owns that sector.");
                return;
            }

            var dbPlayer      = _data.Get <Player>(player.GlobalID);
            int purchasePrice = dbArea.PurchasePrice + (int)(dbArea.PurchasePrice * (dbPlayer.LeaseRate * 0.01f));

            if (player.Gold < purchasePrice)
            {
                player.SendMessage("You do not have enough credits to purchase that sector.");
                return;
            }

            player.AssignCommand(() => _.TakeGoldFromCreature(purchasePrice, player.Object, TRUE));

            switch (sector)
            {
            case AreaSector.Northwest: dbArea.NorthwestOwner = player.GlobalID; break;

            case AreaSector.Northeast: dbArea.NortheastOwner = player.GlobalID; break;

            case AreaSector.Southwest: dbArea.SouthwestOwner = player.GlobalID; break;

            case AreaSector.Southeast: dbArea.SoutheastOwner = player.GlobalID; break;
            }

            _data.SubmitDataChange(dbArea, DatabaseActionType.Update);

            PCBase pcBase = new PCBase
            {
                AreaResref          = dbArea.Resref,
                PlayerID            = player.GlobalID,
                DateInitialPurchase = DateTime.UtcNow,
                DateRentDue         = DateTime.UtcNow.AddDays(7),
                DateFuelEnds        = DateTime.UtcNow,
                Sector       = sector,
                PCBaseTypeID = (int)Enumeration.PCBaseType.RegularBase,
                CustomName   = string.Empty
            };

            _data.SubmitDataChange(pcBase, DatabaseActionType.Insert);

            PCBasePermission permission = new PCBasePermission
            {
                PCBaseID = pcBase.ID,
                PlayerID = player.GlobalID
            };

            _data.SubmitDataChange(permission, DatabaseActionType.Insert);

            // Grant all base permissions to owner.
            var allPermissions = Enum.GetValues(typeof(BasePermission)).Cast <BasePermission>().ToArray();

            _perm.GrantBasePermissions(player, pcBase.ID, allPermissions);

            player.FloatingText("You purchase " + area.Name + " (" + sector + ") for " + purchasePrice + " credits.");
        }