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); }
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."); }