Example #1
0
        public override void DoAction(NWPlayer player, string pageName, int responseID)
        {
            var        model = GetDialogCustomData <Model>();
            NWLocation location;

            if (responseID == 1) // Create new instance
            {
                var instance = _area.CreateAreaInstance(player, model.AreaResref, string.Empty, model.DestinationTag);
                location = instance.GetLocalLocation("INSTANCE_ENTRANCE");
            }
            else
            {
                var      response = GetResponseByID("MainPage", responseID);
                NWObject member   = (NWObject)response.CustomData;

                if (!member.IsValid)
                {
                    player.SendMessage("Unable to locate party member.");
                    return;
                }

                var area = member.Area;
                location = area.GetLocalLocation("INSTANCE_ENTRANCE");
            }

            _player.SaveLocation(player);

            player.AssignCommand(() =>
            {
                _.ActionJumpToLocation(location);
            });

            EndConversation();
        }
Example #2
0
        private void EnterApartment(int pcBaseID)
        {
            NWPlayer oPC = GetPC();

            var    apartment     = _data.Get <PCBase>(pcBaseID);
            var    structures    = _data.Where <PCBaseStructure>(x => x.PCBaseID == apartment.ID);
            var    buildingStyle = _data.Get <BuildingStyle>(apartment.BuildingStyleID);
            NWArea instance      = GetAreaInstance(pcBaseID);

            if (instance == null)
            {
                string name = oPC.Name + "'s Apartment";
                if (!string.IsNullOrWhiteSpace(apartment.CustomName))
                {
                    name = apartment.CustomName;
                }

                instance = _area.CreateAreaInstance(oPC, buildingStyle.Resref, name, "PLAYER_HOME_ENTRANCE");
                instance.SetLocalInt("PC_BASE_ID", pcBaseID);
                instance.SetLocalInt("BUILDING_TYPE", (int)BuildingType.Apartment);

                foreach (var furniture in structures)
                {
                    _base.SpawnStructure(instance, furniture.ID);
                }
            }

            _base.JumpPCToBuildingInterior(oPC, instance);
        }
Example #3
0
        private void DoPreview()
        {
            NWPlayer player = GetPC();
            var      data   = _base.GetPlayerTempData(GetPC());
            var      style  = _data.Single <BuildingStyle>(x => x.ID == data.BuildingStyleID);
            var      area   = _area.CreateAreaInstance(player, style.Resref, "APARTMENT PREVIEW: " + style.Name, "PLAYER_HOME_ENTRANCE");

            area.SetLocalInt("IS_BUILDING_PREVIEW", TRUE);
            _base.JumpPCToBuildingInterior(player, area);
        }
Example #4
0
        private void DoInteriorPreview()
        {
            var data    = _base.GetPlayerTempData(GetPC());
            int styleID = data.StructureItem.GetLocalInt("STRUCTURE_BUILDING_INTERIOR_ID");
            var style   = _data.Single <BuildingStyle>(x => x.ID == styleID);
            var area    = _area.CreateAreaInstance(GetPC(), style.Resref, "BUILDING PREVIEW: " + style.Name, "PLAYER_HOME_ENTRANCE");

            area.SetLocalInt("IS_BUILDING_PREVIEW", TRUE);
            NWPlayer player = GetPC();

            _base.JumpPCToBuildingInterior(player, area);
        }
        private void DoEnterBuilding()
        {
            NWPlayer    oPC  = GetPC();
            NWPlaceable door = GetDialogTarget().Object;
            string      pcBaseStructureID = door.GetLocalString("PC_BASE_STRUCTURE_ID");

            if (string.IsNullOrWhiteSpace(pcBaseStructureID))
            {
                _.FloatingTextStringOnCreature("ERROR: Door doesn't have a structure ID assigned. Notify an admin about this issue.", oPC.Object, NWScript.FALSE);
                return;
            }
            var  structureID      = new Guid(pcBaseStructureID);
            bool canEnterBuilding = _perm.HasStructurePermission(GetPC(), structureID, StructurePermission.CanEnterBuilding);

            if (!canEnterBuilding)
            {
                oPC.FloatingText("You don't have permission to enter that building.");
                return;
            }

            var    structure     = _data.Single <PCBaseStructure>(x => x.ID == structureID);
            var    pcBase        = _data.Get <PCBase>(structure.PCBaseID);
            var    interiorStyle = _data.Get <BuildingStyle>(structure.InteriorStyleID);
            NWArea instance      = GetAreaInstance(structureID);

            if (instance == null)
            {
                string name = structure.CustomName;
                if (string.IsNullOrWhiteSpace(name))
                {
                    Player owner = _player.GetPlayerEntity(pcBase.PlayerID);
                    name = owner.CharacterName + "'s Building";
                }

                instance = _area.CreateAreaInstance(oPC, interiorStyle.Resref, name, "PLAYER_HOME_ENTRANCE");
                instance.SetLocalString("PC_BASE_STRUCTURE_ID", structureID.ToString());
                instance.SetLocalInt("BUILDING_TYPE", (int)BuildingType.Interior);

                var childStructures = _data.Where <PCBaseStructure>(x => x.ParentPCBaseStructureID == structure.ID);
                foreach (var child in childStructures)
                {
                    _base.SpawnStructure(instance, child.ID);
                }
            }

            _base.JumpPCToBuildingInterior(oPC, instance);
        }
        private void EnterApartment(Guid pcBaseID)
        {
            NWPlayer oPC = GetPC();

            var apartment     = _data.Get <PCBase>(pcBaseID);
            var structures    = _data.Where <PCBaseStructure>(x => x.PCBaseID == apartment.ID);
            var buildingStyle = _data.Get <BuildingStyle>(apartment.BuildingStyleID);
            var owner         = _data.Get <Player>(apartment.PlayerID);
            var permission    = _data.SingleOrDefault <PCBasePermission>(x => x.PlayerID == oPC.GlobalID &&
                                                                         x.PCBaseID == pcBaseID &&
                                                                         !x.IsPublicPermission);

            if (permission == null || !permission.CanEnterBuildings)
            {
                oPC.FloatingText("You do not have permission to enter that apartment.");
                return;
            }

            NWArea instance = GetAreaInstance(pcBaseID);

            if (instance == null)
            {
                string name = owner.CharacterName + "'s Apartment";
                if (!string.IsNullOrWhiteSpace(apartment.CustomName))
                {
                    name = apartment.CustomName;
                }

                instance = _area.CreateAreaInstance(oPC, buildingStyle.Resref, name, "PLAYER_HOME_ENTRANCE");
                instance.SetLocalString("PC_BASE_ID", pcBaseID.ToString());
                instance.SetLocalInt("BUILDING_TYPE", (int)BuildingType.Apartment);

                foreach (var furniture in structures)
                {
                    _base.SpawnStructure(instance, furniture.ID);
                }
            }

            _base.JumpPCToBuildingInterior(oPC, instance);
        }
Example #7
0
        public bool Run(params object[] args)
        {
            NWPlayer oPC = _.GetLastUsedBy();

            if (_.GetIsInCombat(oPC) == TRUE)
            {
                _.SendMessageToPC(oPC, "You are in combat.");
                return(false);
            }

            NWPlaceable self                  = Object.OBJECT_SELF;
            string      destination           = self.GetLocalString("DESTINATION");
            int         visualEffectID        = self.GetLocalInt("VISUAL_EFFECT");
            int         keyItemID             = self.GetLocalInt("KEY_ITEM_ID");
            string      missingKeyItemMessage = self.GetLocalString("MISSING_KEY_ITEM_MESSAGE");
            bool        isInstance            = self.GetLocalInt("INSTANCE") == TRUE;
            bool        personalInstanceOnly  = self.GetLocalInt("PERSONAL_INSTANCE_ONLY") == TRUE;

            if (keyItemID > 0)
            {
                if (!_keyItem.PlayerHasKeyItem(oPC, keyItemID))
                {
                    if (!string.IsNullOrWhiteSpace(missingKeyItemMessage))
                    {
                        oPC.SendMessage(missingKeyItemMessage);
                    }
                    else
                    {
                        oPC.SendMessage("You don't have the necessary key item to access that object.");
                    }

                    return(false);
                }
            }

            if (visualEffectID > 0)
            {
                _.ApplyEffectToObject(DURATION_TYPE_INSTANT, _.EffectVisualEffect(visualEffectID), oPC.Object);
            }

            NWObject   entranceWP = _.GetWaypointByTag(destination);
            NWLocation location   = _.GetLocation(entranceWP);

            if (!entranceWP.IsValid)
            {
                oPC.SendMessage("Cannot locate entrance waypoint. Inform an admin.");
                return(false);
            }

            if (isInstance)
            {
                var members = oPC.PartyMembers.Where(x => x.GetLocalString("ORIGINAL_RESREF") == entranceWP.Area.Resref).ToList();

                // A party member is in an instance of this type already.
                // Prompt player to select which instance to enter.
                if (members.Count >= 1 && !personalInstanceOnly)
                {
                    oPC.SetLocalString("INSTANCE_RESREF", entranceWP.Resref);
                    oPC.SetLocalString("INSTANCE_DESTINATION_TAG", destination);
                    _dialog.StartConversation(oPC, self, "InstanceSelection");
                    return(false);
                }

                // Otherwise no instance exists yet or this instance only allows one player. Make a new one for this player.
                NWArea instance = _area.CreateAreaInstance(oPC, entranceWP.Area.Resref, entranceWP.Area.Name, destination);
                location = instance.GetLocalLocation("INSTANCE_ENTRANCE");
                _player.SaveLocation(oPC);
            }

            oPC.AssignCommand(() =>
            {
                _.ActionJumpToLocation(location);
            });

            return(true);
        }