Ejemplo n.º 1
0
        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();
        }
Ejemplo n.º 2
0
        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));
            }
        }