Пример #1
0
        private void HandleConfirmSetNameResponse(int responseID)
        {
            switch (responseID)
            {
            case 1:     // Confirm Description Change
                var data           = BaseService.GetPlayerTempData(GetPC());
                int buildingTypeID = data.TargetArea.GetLocalInt("BUILDING_TYPE");
                Enumeration.BuildingType buildingType = buildingTypeID <= 0 ? Enumeration.BuildingType.Exterior : (Enumeration.BuildingType)buildingTypeID;
                data.BuildingType = buildingType;
                NWPlayer sender = _.GetPCSpeaker();

                if (buildingType == Enumeration.BuildingType.Apartment)
                {
                    // Update the base name.
                    Guid pcBaseID = new Guid(data.TargetArea.GetLocalString("PC_BASE_ID"));
                    var  pcBase   = DataService.PCBase.GetByID(pcBaseID);
                    pcBase.CustomName = GetPC().GetLocalString("NEW_DESCRIPTION_TO_SET");
                    DataService.SubmitDataChange(pcBase, DatabaseActionType.Update);
                    sender.SendMessage("Name is now set to " + pcBase.CustomName);
                }
                else if (buildingType == Enumeration.BuildingType.Interior)
                {
                    // Update the structure name.
                    Guid pcBaseStructureID = new Guid(data.TargetArea.GetLocalString("PC_BASE_STRUCTURE_ID"));
                    var  structure         = DataService.PCBaseStructure.GetByID(pcBaseStructureID);
                    structure.CustomName = GetPC().GetLocalString("NEW_DESCRIPTION_TO_SET");
                    DataService.SubmitDataChange(structure, DatabaseActionType.Update);
                    sender.SendMessage("Name is now set to " + structure.CustomName);
                }
                else if (buildingType == Enumeration.BuildingType.Starship)
                {
                    // Note - starships need to record the name in both the base and the structure entries.
                    Guid pcBaseStructureID = new Guid(data.TargetArea.GetLocalString("PC_BASE_STRUCTURE_ID"));
                    var  structure         = DataService.PCBaseStructure.GetByID(pcBaseStructureID);
                    structure.CustomName = GetPC().GetLocalString("NEW_DESCRIPTION_TO_SET");
                    DataService.SubmitDataChange(structure, DatabaseActionType.Update);

                    var pcBase = DataService.PCBase.GetByID(structure.PCBaseID);
                    pcBase.CustomName = GetPC().GetLocalString("NEW_DESCRIPTION_TO_SET");
                    DataService.SubmitDataChange(pcBase, DatabaseActionType.Update);

                    sender.SendMessage("Name is now set to " + structure.CustomName);
                }

                EndConversation();
                break;
            }
        }
Пример #2
0
        private void LoadMainPage()
        {
            ClearPageResponses("MainPage");
            var    data   = BaseService.GetPlayerTempData(GetPC());
            int    cellX  = (int)(_.GetPositionFromLocation(data.TargetLocation).m_X / 10.0f);
            int    cellY  = (int)(_.GetPositionFromLocation(data.TargetLocation).m_Y / 10.0f);
            string sector = BaseService.GetSectorOfLocation(data.TargetLocation);

            Area dbArea         = DataService.Area.GetByResref(data.TargetArea.Resref);
            bool hasUnclaimed   = false;
            Guid playerID       = GetPC().GlobalID;
            int  buildingTypeID = data.TargetArea.GetLocalInt("BUILDING_TYPE");

            Enumeration.BuildingType buildingType = buildingTypeID <= 0 ? Enumeration.BuildingType.Exterior : (Enumeration.BuildingType)buildingTypeID;
            data.BuildingType = buildingType;
            bool canEditBasePermissions           = false;
            bool canEditBuildingPermissions       = false;
            bool canEditBuildingPublicPermissions = false;
            bool canEditStructures            = false;
            bool canEditPrimaryResidence      = false;
            bool canRemovePrimaryResidence    = false;
            bool canRenameStructure           = false;
            bool canChangeStructureMode       = false;
            bool canEditPublicBasePermissions = false;

            string header = ColorTokenService.Green("Base Management Menu\n\n");

            header += ColorTokenService.Green("Area: ") + data.TargetArea.Name + " (" + cellX + ", " + cellY + ")\n\n";

            // Are we in a starship?
            if (buildingType == Enumeration.BuildingType.Starship)
            {
                Guid pcBaseStructureID = new Guid(data.TargetArea.GetLocalString("PC_BASE_STRUCTURE_ID"));
                var  structure         = DataService.PCBaseStructure.GetByID(pcBaseStructureID);
                var  buildingStyle     = DataService.BuildingStyle.GetByID(Convert.ToInt32(structure.InteriorStyleID));
                int  itemLimit         = buildingStyle.FurnitureLimit + structure.StructureBonus;
                var  childStructures   = DataService.PCBaseStructure.GetAllByParentPCBaseStructureID(structure.ID);
                header += ColorTokenService.Green("Structure Limit: ") + childStructures.Count() + " / " + itemLimit + "\n";
                // Get all child structures contained by this building which improve atmosphere.
                var structures = DataService.PCBaseStructure.GetAllByParentPCBaseStructureID(pcBaseStructureID).Where(x =>
                {
                    var childStructure = DataService.BaseStructure.GetByID(x.BaseStructureID);
                    return(childStructure.HasAtmosphere);
                });

                // Add up the total atmosphere rating, being careful not to go over the cap.
                int bonus = structures.Sum(x => 1 + x.StructureBonus) * 2;
                if (bonus > 150)
                {
                    bonus = 150;
                }
                header += ColorTokenService.Green("Atmosphere Bonus: ") + bonus + "% / " + "150%";
                header += "\n";

                canEditPrimaryResidence          = BasePermissionService.HasStructurePermission(GetPC(), pcBaseStructureID, StructurePermission.CanEditPrimaryResidence);
                canRemovePrimaryResidence        = BasePermissionService.HasStructurePermission(GetPC(), pcBaseStructureID, StructurePermission.CanRemovePrimaryResidence);
                canRenameStructure               = BasePermissionService.HasStructurePermission(GetPC(), pcBaseStructureID, StructurePermission.CanRenameStructures);
                canEditStructures                = BasePermissionService.HasStructurePermission(GetPC(), pcBaseStructureID, StructurePermission.CanPlaceEditStructures);
                canEditBuildingPermissions       = BasePermissionService.HasStructurePermission(GetPC(), pcBaseStructureID, StructurePermission.CanAdjustPermissions);
                canEditBuildingPublicPermissions = BasePermissionService.HasStructurePermission(GetPC(), pcBaseStructureID, StructurePermission.CanAdjustPublicPermissions);
                canChangeStructureMode           = false; // Starships cannot be workshops.
                data.StructureID = pcBaseStructureID;
            }
            // Area is not buildable.
            else if (!dbArea.IsBuildable)
            {
                header += "Land in this area cannot be claimed. However, you can still manage any leases you own from the list below.";
            }
            // Building type is an interior of a building
            else if (buildingType == Enumeration.BuildingType.Interior)
            {
                Guid pcBaseStructureID = new Guid(data.TargetArea.GetLocalString("PC_BASE_STRUCTURE_ID"));
                var  structure         = DataService.PCBaseStructure.GetByID(pcBaseStructureID);
                var  baseStructure     = DataService.BaseStructure.GetByID(structure.BaseStructureID);
                int  itemLimit         = baseStructure.Storage + structure.StructureBonus;
                var  childStructures   = DataService.PCBaseStructure.GetAllByParentPCBaseStructureID(structure.ID);
                header += ColorTokenService.Green("Structure Limit: ") + childStructures.Count() + " / " + itemLimit + "\n";
                // Get all child structures contained by this building which improve atmosphere.
                var structures = DataService.PCBaseStructure.GetAllByParentPCBaseStructureID(pcBaseStructureID).Where(x =>
                {
                    var childStructure = DataService.BaseStructure.GetByID(x.BaseStructureID);
                    return(childStructure.HasAtmosphere);
                });

                // Add up the total atmosphere rating, being careful not to go over the cap.
                int bonus = structures.Sum(x => 1 + x.StructureBonus) * 2;
                if (bonus > 150)
                {
                    bonus = 150;
                }
                header += ColorTokenService.Green("Atmosphere Bonus: ") + bonus + "% / " + "150%";
                header += "\n";
                // The building must be set to the "Residence" mode in order for a primary resident to be selected.
                if (structure.StructureModeID == (int)StructureModeType.Residence)
                {
                    canEditPrimaryResidence   = BasePermissionService.HasStructurePermission(GetPC(), pcBaseStructureID, StructurePermission.CanEditPrimaryResidence);
                    canRemovePrimaryResidence = BasePermissionService.HasStructurePermission(GetPC(), pcBaseStructureID, StructurePermission.CanRemovePrimaryResidence);
                }
                canRenameStructure               = BasePermissionService.HasStructurePermission(GetPC(), pcBaseStructureID, StructurePermission.CanRenameStructures);
                canEditStructures                = BasePermissionService.HasStructurePermission(GetPC(), pcBaseStructureID, StructurePermission.CanPlaceEditStructures);
                canEditBuildingPermissions       = BasePermissionService.HasStructurePermission(GetPC(), pcBaseStructureID, StructurePermission.CanAdjustPermissions);
                canEditBuildingPublicPermissions = BasePermissionService.HasStructurePermission(GetPC(), pcBaseStructureID, StructurePermission.CanAdjustPublicPermissions);
                canChangeStructureMode           = BasePermissionService.HasStructurePermission(GetPC(), pcBaseStructureID, StructurePermission.CanChangeStructureMode);
                data.StructureID = pcBaseStructureID;
            }
            // Building type is an apartment
            // Apartments may only ever be in the "Residence" mode.
            else if (buildingType == Enumeration.BuildingType.Apartment)
            {
                Guid pcBaseID      = new Guid(data.TargetArea.GetLocalString("PC_BASE_ID"));
                var  pcBase        = DataService.PCBase.GetByID(pcBaseID);
                var  buildingStyle = DataService.BuildingStyle.GetByID(Convert.ToInt32(pcBase.BuildingStyleID));
                int  itemLimit     = buildingStyle.FurnitureLimit;
                var  structures    = DataService.PCBaseStructure.GetAllByPCBaseID(pcBase.ID);
                header += ColorTokenService.Green("Structure Limit: ") + structures.Count() + " / " + itemLimit + "\n";
                // Add up the total atmosphere rating, being careful not to go over the cap.
                int bonus = structures.Sum(x => 1 + x.StructureBonus) * 2;
                if (bonus > 150)
                {
                    bonus = 150;
                }
                header                   += ColorTokenService.Green("Atmosphere Bonus: ") + bonus + "% / " + "150%";
                header                   += "\n";
                canEditStructures         = BasePermissionService.HasBasePermission(GetPC(), pcBaseID, BasePermission.CanPlaceEditStructures);
                canEditBasePermissions    = BasePermissionService.HasBasePermission(GetPC(), pcBaseID, BasePermission.CanAdjustPermissions);
                canEditPrimaryResidence   = BasePermissionService.HasBasePermission(GetPC(), pcBaseID, BasePermission.CanEditPrimaryResidence);
                canRemovePrimaryResidence = BasePermissionService.HasBasePermission(GetPC(), pcBaseID, BasePermission.CanRemovePrimaryResidence);
                canRenameStructure        = BasePermissionService.HasBasePermission(GetPC(), pcBaseID, BasePermission.CanRenameStructures);
                data.PCBaseID             = pcBaseID;
            }
            // Building type is an exterior building
            else if (buildingType == Enumeration.BuildingType.Exterior)
            {
                var pcBase = DataService.PCBase.GetByAreaResrefAndSectorOrDefault(data.TargetArea.Resref, sector);

                var northeastOwner = dbArea.NortheastOwner == null ? null : DataService.Player.GetByID((Guid)dbArea.NortheastOwner);
                var northwestOwner = dbArea.NorthwestOwner == null ? null : DataService.Player.GetByID((Guid)dbArea.NorthwestOwner);
                var southeastOwner = dbArea.SoutheastOwner == null ? null : DataService.Player.GetByID((Guid)dbArea.SoutheastOwner);
                var southwestOwner = dbArea.SouthwestOwner == null ? null : DataService.Player.GetByID((Guid)dbArea.SouthwestOwner);

                if (northeastOwner != null)
                {
                    header += ColorTokenService.Green("Northeast Owner: ") + "Claimed";
                    if (dbArea.NortheastOwner == playerID)
                    {
                        header += " (" + northeastOwner.CharacterName + ")";
                    }
                    header += "\n";
                }
                else
                {
                    header      += ColorTokenService.Green("Northeast Owner: ") + "Unclaimed\n";
                    hasUnclaimed = true;
                }

                if (northwestOwner != null)
                {
                    header += ColorTokenService.Green("Northwest Owner: ") + "Claimed";
                    if (dbArea.NorthwestOwner == playerID)
                    {
                        header += " (" + northwestOwner.CharacterName + ")";
                    }
                    header += "\n";
                }
                else
                {
                    header      += ColorTokenService.Green("Northwest Owner: ") + "Unclaimed\n";
                    hasUnclaimed = true;
                }

                if (southeastOwner != null)
                {
                    header += ColorTokenService.Green("Southeast Owner: ") + "Claimed";
                    if (dbArea.SoutheastOwner == playerID)
                    {
                        header += " (" + southeastOwner.CharacterName + ")";
                    }
                    header += "\n";
                }
                else
                {
                    header      += ColorTokenService.Green("Southeast Owner: ") + "Unclaimed\n";
                    hasUnclaimed = true;
                }

                if (southwestOwner != null)
                {
                    header += ColorTokenService.Green("Southwest Owner: ") + "Claimed";
                    if (dbArea.SouthwestOwner == playerID)
                    {
                        header += " (" + southwestOwner.CharacterName + ")";
                    }
                    header += "\n";
                }
                else
                {
                    header      += ColorTokenService.Green("Southwest Owner: ") + "Unclaimed\n";
                    hasUnclaimed = true;
                }

                canEditStructures            = pcBase != null && BasePermissionService.HasBasePermission(GetPC(), pcBase.ID, BasePermission.CanPlaceEditStructures);
                canEditBasePermissions       = pcBase != null && BasePermissionService.HasBasePermission(GetPC(), pcBase.ID, BasePermission.CanAdjustPermissions);
                canEditPublicBasePermissions = pcBase != null && BasePermissionService.HasBasePermission(GetPC(), pcBase.ID, BasePermission.CanAdjustPublicPermissions);
                if (pcBase != null)
                {
                    data.PCBaseID = pcBase.ID;
                }
            }
            else
            {
                throw new Exception("BaseManagementTool -> Cannot locate building type with ID " + buildingTypeID);
            }

            SetPageHeader("MainPage", header);

            bool showManage = DataService.PCBasePermission.GetAllByPlayerID(GetPC().GlobalID).Count(x => x.CanExtendLease) > 0;

            AddResponseToPage("MainPage", "Manage My Leases", showManage);
            AddResponseToPage("MainPage", "Purchase Territory", hasUnclaimed && dbArea.IsBuildable);
            AddResponseToPage("MainPage", "Edit Nearby Structures", canEditStructures);
            AddResponseToPage("MainPage", "Edit Base Permissions", canEditBasePermissions || canEditPublicBasePermissions);
            AddResponseToPage("MainPage", "Edit Building Permissions", canEditBuildingPermissions || canEditBuildingPublicPermissions);
            AddResponseToPage("MainPage", "Edit Primary Residence", canEditPrimaryResidence || canRemovePrimaryResidence);
            AddResponseToPage("MainPage", "Rename Building", canRenameStructure);
            AddResponseToPage("MainPage", "Edit Building Mode", canChangeStructureMode);
        }
Пример #3
0
 public BuildingStyle GetByBaseStructureIDAndBuildingType(int baseStructureID, Enumeration.BuildingType buildingType)
 {
     return((BuildingStyle)All.Single(x => x.BaseStructureID == baseStructureID && x.BuildingTypeID == (int)buildingType).Clone());
 }
Пример #4
0
        private void ColorPageResponses(int responseID)
        {
            DialogPage mainPage  = GetPageByName("MainPage");
            int        lightType = mainPage.CustomData.GetValueOrDefault("LIGHT_TYPE");
            var        response  = GetResponseByID("ColorPage", responseID);

            //Console.WriteLine("Light Type: " + lightType);
            //Console.WriteLine("ResponseID: " + responseID);
            //Console.WriteLine("New Color Index: " + Int32.Parse(response.CustomData.ToString()));

            // Setup placement grid
            NWArea  area = _.GetArea(GetPC());
            Vector3 vPos;

            vPos.X = 0.0f;
            vPos.Y = 0.0f;
            vPos.Z = 0.0f;
            for (int i = 0; i <= area.Height; i++)
            {
                vPos.X = (float)i;
                for (int j = 0; j <= area.Width; j++)
                {
                    vPos.Y = (float)j;

                    Location location = _.Location(area, vPos, 0.0f);

                    //Console.WriteLine("Setting Tile Color: X = " + vPos.X + " Y = " + vPos.Y);
                    switch (lightType)
                    {
                    case 1:     // Change Main Light 1
                        _.SetTileMainLightColor(location, Int32.Parse(response.CustomData.ToString()), _.GetTileMainLight2Color(location));
                        break;

                    case 2:     // Change Main Light 2
                        _.SetTileMainLightColor(location, _.GetTileMainLight1Color(location), Int32.Parse(response.CustomData.ToString()));
                        break;

                    case 3:     // Change Source Light 1
                        _.SetTileSourceLightColor(location, Int32.Parse(response.CustomData.ToString()), _.GetTileSourceLight2Color(location));
                        break;

                    case 4:     // Change Source Light 2
                        _.SetTileSourceLightColor(location, _.GetTileSourceLight1Color(location), Int32.Parse(response.CustomData.ToString()));
                        break;
                    }
                }
            }
            _.RecomputeStaticLighting(area);
            var data           = BaseService.GetPlayerTempData(GetPC());
            int buildingTypeID = data.TargetArea.GetLocalInt("BUILDING_TYPE");

            Enumeration.BuildingType buildingType = buildingTypeID <= 0 ? Enumeration.BuildingType.Exterior : (Enumeration.BuildingType)buildingTypeID;
            data.BuildingType = buildingType;

            if (buildingType == Enumeration.BuildingType.Apartment)
            {
                Guid pcBaseID = new Guid(data.TargetArea.GetLocalString("PC_BASE_ID"));
                var  pcBase   = DataService.PCBase.GetByID(pcBaseID);

                switch (lightType)
                {
                case 1:     // Change Main Light 1
                    pcBase.TileMainLight1Color = Int32.Parse(response.CustomData.ToString());
                    break;

                case 2:     // Change Main Light 2
                    pcBase.TileMainLight2Color = Int32.Parse(response.CustomData.ToString());
                    break;

                case 3:     // Change Source Light 1
                    pcBase.TileSourceLight1Color = Int32.Parse(response.CustomData.ToString());
                    break;

                case 4:     // Change Source Light 2
                    pcBase.TileSourceLight2Color = Int32.Parse(response.CustomData.ToString());
                    break;
                }

                DataService.SubmitDataChange(pcBase, DatabaseActionType.Update);
            }
            else if (buildingType == Enumeration.BuildingType.Interior)
            {
                Guid pcBaseStructureID = new Guid(data.TargetArea.GetLocalString("PC_BASE_STRUCTURE_ID"));
                var  structure         = DataService.PCBaseStructure.GetByID(pcBaseStructureID);

                switch (lightType)
                {
                case 1:     // Change Main Light 1
                    structure.TileMainLight1Color = Int32.Parse(response.CustomData.ToString());
                    break;

                case 2:     // Change Main Light 2
                    structure.TileMainLight2Color = Int32.Parse(response.CustomData.ToString());
                    break;

                case 3:     // Change Source Light 1
                    structure.TileSourceLight1Color = Int32.Parse(response.CustomData.ToString());
                    break;

                case 4:     // Change Source Light 2
                    structure.TileSourceLight2Color = Int32.Parse(response.CustomData.ToString());
                    break;
                }

                DataService.SubmitDataChange(structure, DatabaseActionType.Update);
            }
            else if (buildingType == Enumeration.BuildingType.Starship)
            {
                // Note - starships need to record in both the base and the structure entries.
                Guid pcBaseStructureID = new Guid(data.TargetArea.GetLocalString("PC_BASE_STRUCTURE_ID"));
                var  structure         = DataService.PCBaseStructure.GetByID(pcBaseStructureID);
                var  pcBase            = DataService.PCBase.GetByID(structure.PCBaseID);

                switch (lightType)
                {
                case 1:     // Change Main Light 1
                    structure.TileMainLight1Color = Int32.Parse(response.CustomData.ToString());
                    pcBase.TileMainLight1Color    = Int32.Parse(response.CustomData.ToString());
                    break;

                case 2:     // Change Main Light 2
                    structure.TileMainLight2Color = Int32.Parse(response.CustomData.ToString());
                    pcBase.TileMainLight2Color    = Int32.Parse(response.CustomData.ToString());
                    break;

                case 3:     // Change Source Light 1
                    structure.TileSourceLight1Color = Int32.Parse(response.CustomData.ToString());
                    pcBase.TileSourceLight1Color    = Int32.Parse(response.CustomData.ToString());
                    break;

                case 4:     // Change Source Light 2
                    structure.TileSourceLight2Color = Int32.Parse(response.CustomData.ToString());
                    pcBase.TileSourceLight2Color    = Int32.Parse(response.CustomData.ToString());
                    break;
                }

                DataService.SubmitDataChange(structure, DatabaseActionType.Update);
                DataService.SubmitDataChange(pcBase, DatabaseActionType.Update);
            }

            BuildColorPage(lightType);
        }