public static void Impound(Guid playerID, NWItem item) { PCImpoundedItem structureImpoundedItem; // Processing a container, impound it's contents first. if (item.HasInventory) { foreach (NWItem inventoryItem in item.InventoryItems) { structureImpoundedItem = new PCImpoundedItem { DateImpounded = DateTime.UtcNow, PlayerID = playerID, ItemObject = SerializationService.Serialize(inventoryItem), ItemTag = inventoryItem.Tag, ItemResref = inventoryItem.Resref, ItemName = inventoryItem.Name }; DataService.SubmitDataChange(structureImpoundedItem, DatabaseActionType.Insert); } } // Impound parameter item. structureImpoundedItem = new PCImpoundedItem { DateImpounded = DateTime.UtcNow, PlayerID = playerID, ItemObject = SerializationService.Serialize(item), ItemTag = item.Tag, ItemResref = item.Resref, ItemName = item.Name }; DataService.SubmitDataChange(structureImpoundedItem, DatabaseActionType.Insert); }
public static void Impound(Guid playerID, NWItem item) { PCImpoundedItem structureImpoundedItem = new PCImpoundedItem { DateImpounded = DateTime.UtcNow, PlayerID = playerID, ItemObject = SerializationService.Serialize(item), ItemTag = item.Tag, ItemResref = item.Resref, ItemName = item.Name }; DataService.SubmitDataChange(structureImpoundedItem, DatabaseActionType.Insert); }
public void GetByID_OneItem_ReturnsPCImpoundedItem() { // Arrange var id = Guid.NewGuid(); PCImpoundedItem entity = new PCImpoundedItem { ID = id }; // Act MessageHub.Instance.Publish(new OnCacheObjectSet <PCImpoundedItem>(entity)); // Assert Assert.AreNotSame(entity, _cache.GetByID(id)); }
public static void Impound(PCBaseStructureItem pcBaseStructureItem) { var pcBaseStructure = DataService.PCBaseStructure.GetByID(pcBaseStructureItem.PCBaseStructureID); var pcBase = DataService.PCBase.GetByID(pcBaseStructure.PCBaseID); var impoundItem = new PCImpoundedItem { DateImpounded = DateTime.UtcNow, ItemName = pcBaseStructureItem.ItemName, ItemResref = pcBaseStructureItem.ItemResref, ItemObject = pcBaseStructureItem.ItemObject, ItemTag = pcBaseStructureItem.ItemTag, PlayerID = pcBase.PlayerID }; DataService.SubmitDataChange(impoundItem, DatabaseActionType.Insert); }
public void GetByID_TwoItems_ReturnsCorrectObject() { // Arrange var id1 = Guid.NewGuid(); var id2 = Guid.NewGuid(); PCImpoundedItem entity1 = new PCImpoundedItem { ID = id1 }; PCImpoundedItem entity2 = new PCImpoundedItem { ID = id2 }; // Act MessageHub.Instance.Publish(new OnCacheObjectSet <PCImpoundedItem>(entity1)); MessageHub.Instance.Publish(new OnCacheObjectSet <PCImpoundedItem>(entity2)); // Assert Assert.AreNotSame(entity1, _cache.GetByID(id1)); Assert.AreNotSame(entity2, _cache.GetByID(id2)); }
public void GetByID_RemovedItem_ReturnsCorrectObject() { // Arrange var id1 = Guid.NewGuid(); var id2 = Guid.NewGuid(); PCImpoundedItem entity1 = new PCImpoundedItem { ID = id1 }; PCImpoundedItem entity2 = new PCImpoundedItem { ID = id2 }; // Act MessageHub.Instance.Publish(new OnCacheObjectSet <PCImpoundedItem>(entity1)); MessageHub.Instance.Publish(new OnCacheObjectSet <PCImpoundedItem>(entity2)); MessageHub.Instance.Publish(new OnCacheObjectDeleted <PCImpoundedItem>(entity1)); // Assert Assert.Throws <KeyNotFoundException>(() => { _cache.GetByID(id1); }); Assert.AreNotSame(entity2, _cache.GetByID(id2)); }
private void DoRetrieveStructure() { var data = _base.GetPlayerTempData(GetPC()); PCBaseStructure structure = _data.Get <PCBaseStructure>(data.ManipulatingStructure.PCBaseStructureID); BaseStructure baseStructure = _data.Get <BaseStructure>(structure.BaseStructureID); PCBase pcBase = _data.Get <PCBase>(structure.PCBaseID); BaseStructureType structureType = (BaseStructureType)baseStructure.BaseStructureTypeID; var tempStorage = _.GetObjectByTag("TEMP_ITEM_STORAGE"); var pcStructureID = structure.ID; int impoundedCount = 0; var controlTower = _base.GetBaseControlTower(pcBase.ID); int maxShields = _base.CalculateMaxShieldHP(controlTower); if (pcBase.ShieldHP < maxShields && structureType != BaseStructureType.ControlTower) { GetPC().FloatingText("You cannot retrieve any structures because the control tower has less than 100% shields."); return; } bool canRetrieveStructures; if (data.BuildingType == Enumeration.BuildingType.Exterior || data.BuildingType == Enumeration.BuildingType.Apartment) { canRetrieveStructures = _perm.HasBasePermission(GetPC(), data.ManipulatingStructure.PCBaseID, BasePermission.CanRetrieveStructures); } else if (data.BuildingType == Enumeration.BuildingType.Interior) { var structureID = new Guid(data.ManipulatingStructure.Structure.Area.GetLocalString("PC_BASE_STRUCTURE_ID")); canRetrieveStructures = _perm.HasStructurePermission(GetPC(), structureID, StructurePermission.CanRetrieveStructures); } else { throw new Exception("BaseManagementTool -> DoRetrieveStructure: Cannot handle building type " + data.BuildingType); } if (!canRetrieveStructures) { GetPC().FloatingText("You don't have permission to retrieve structures."); return; } if (structureType == BaseStructureType.ControlTower) { var structureCount = _data.GetAll <PCBaseStructure>().Count(x => x.PCBaseID == structure.PCBaseID); if (structureCount > 1) { GetPC().FloatingText("You must remove all structures in this sector before picking up the control tower."); return; } } else if (structureType == BaseStructureType.Building) { var childStructures = _data.Where <PCBaseStructure>(x => x.ParentPCBaseStructureID == structure.ID).ToList(); for (int x = childStructures.Count - 1; x >= 0; x--) { var furniture = childStructures.ElementAt(x); NWItem furnitureItem = _base.ConvertStructureToItem(furniture, tempStorage); _impound.Impound(GetPC().GlobalID, furnitureItem); furnitureItem.Destroy(); _data.SubmitDataChange(furniture, DatabaseActionType.Delete); impoundedCount++; } } _base.ConvertStructureToItem(structure, GetPC()); _data.SubmitDataChange(structure, DatabaseActionType.Delete); data.ManipulatingStructure.Structure.Destroy(); // Impound any fuel that's over the limit. if (structureType == BaseStructureType.StronidiumSilo || structureType == BaseStructureType.FuelSilo) { int maxFuel = _base.CalculateMaxFuel(pcBase.ID); int maxReinforcedFuel = _base.CalculateMaxReinforcedFuel(pcBase.ID); if (pcBase.Fuel > maxFuel) { int returnAmount = pcBase.Fuel - maxFuel; NWItem refund = _.CreateItemOnObject("fuel_cell", tempStorage, returnAmount); pcBase.Fuel = maxFuel; _impound.Impound(pcBase.PlayerID, refund); GetPC().SendMessage("Excess fuel cells have been impounded by the planetary government. The owner of the base will need to retrieve it."); refund.Destroy(); } if (pcBase.ReinforcedFuel > maxReinforcedFuel) { int returnAmount = pcBase.ReinforcedFuel - maxReinforcedFuel; NWItem refund = _.CreateItemOnObject("stronidium", tempStorage, returnAmount); pcBase.ReinforcedFuel = maxReinforcedFuel; _impound.Impound(pcBase.PlayerID, refund); GetPC().SendMessage("Excess stronidium units have been impounded by the planetary government. The owner of the base will need to retrieve it."); refund.Destroy(); } } else if (structureType == BaseStructureType.ResourceSilo) { int maxResources = _base.CalculateResourceCapacity(pcBase.ID); var items = _data.Where <PCBaseStructureItem>(x => x.PCBaseStructureID == controlTower.ID).ToList(); while (items.Count > maxResources) { var item = items.ElementAt(0); var impoundItem = new PCImpoundedItem { PlayerID = pcBase.PlayerID, ItemResref = item.ItemResref, ItemObject = item.ItemObject, DateImpounded = DateTime.UtcNow, ItemName = item.ItemName, ItemTag = item.ItemTag }; _data.SubmitDataChange(impoundItem, DatabaseActionType.Insert); GetPC().SendMessage(item.ItemName + " has been impounded by the planetary government because your base ran out of space to store resources. The owner of the base will need to retrieve it."); _data.SubmitDataChange(item, DatabaseActionType.Delete); } } // Update the cache List <AreaStructure> areaStructures = data.TargetArea.Data["BASE_SERVICE_STRUCTURES"]; var records = areaStructures.Where(x => x.PCBaseStructureID == pcStructureID).ToList(); for (int x = records.Count() - 1; x >= 0; x--) { var record = records[x]; record.ChildStructure?.Destroy(); areaStructures.Remove(record); } EndConversation(); if (impoundedCount > 0) { GetPC().FloatingText(impoundedCount + " item(s) were sent to the planetary impound."); } }