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(); }
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); }
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); }
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); }
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); }