private void DoPlaceStructure() { var data = BaseService.GetPlayerTempData(GetPC()); string canPlaceStructure = BaseService.CanPlaceStructure(GetPC(), data.StructureItem, data.TargetLocation, data.BaseStructureID); var baseStructure = DataService.BaseStructure.GetByID(data.BaseStructureID); if (!string.IsNullOrWhiteSpace(canPlaceStructure)) { GetPC().SendMessage(canPlaceStructure); return; } var position = _.GetPositionFromLocation(data.TargetLocation); int?interiorStyleID = data.StructureItem.GetLocalInt("STRUCTURE_BUILDING_INTERIOR_ID"); int?exteriorStyleID = data.StructureItem.GetLocalInt("STRUCTURE_BUILDING_EXTERIOR_ID"); interiorStyleID = interiorStyleID <= 0 ? null : interiorStyleID; exteriorStyleID = exteriorStyleID <= 0 ? null : exteriorStyleID; var structure = new PCBaseStructure { BaseStructureID = data.BaseStructureID, Durability = DurabilityService.GetDurability(data.StructureItem), LocationOrientation = _.GetFacingFromLocation(data.TargetLocation), LocationX = position.m_X, LocationY = position.m_Y, LocationZ = position.m_Z, PCBaseID = data.PCBaseID, InteriorStyleID = interiorStyleID, ExteriorStyleID = exteriorStyleID, CustomName = string.Empty, ParentPCBaseStructureID = data.ParentStructureID, StructureBonus = data.StructureItem.StructureBonus, StructureModeID = baseStructure.DefaultStructureModeID }; DataService.SubmitDataChange(structure, DatabaseActionType.Insert); // Placing a control tower. Set base shields to 100% if (baseStructure.BaseStructureTypeID == (int)BaseStructureType.ControlTower) { var pcBase = DataService.PCBase.GetByID(data.PCBaseID); pcBase.ShieldHP = BaseService.CalculateMaxShieldHP(structure); DataService.SubmitDataChange(pcBase, DatabaseActionType.Update); } BaseService.SpawnStructure(data.TargetArea, structure.ID); data.StructureItem.Destroy(); EndConversation(); }
public string IsValidTarget(NWCreature user, NWItem item, NWObject target, Location targetLocation) { int structureID = item.GetLocalInt("BASE_STRUCTURE_ID"); // Intercept here to handle control tower upgrades. string upgrade = BaseService.UpgradeControlTower(user, item, target); if (upgrade != "") { return(upgrade); } else if (target.IsValid) { return("You must select an empty location to use that item."); } else { return(BaseService.CanPlaceStructure(user, item, targetLocation, structureID)); } }