/// <summary> /// Gets discovered building data for current location. /// </summary> /// <param name="buildingKey">Building key in current location.</param> /// <param name="discoveredBuildingOut">Building discovery data out.</param> /// <returns>True if building discovered, false if building not discovered.</returns> public bool GetDiscoveredBuilding(int buildingKey, out DiscoveredBuilding discoveredBuildingOut) { discoveredBuildingOut = new DiscoveredBuilding(); // Must have discovered building if (!HasDiscoveredBuilding(buildingKey)) { return(false); } // Get the location discovery for this mapID int mapPixelID = MapsFile.GetMapPixelIDFromLongitudeLatitude((int)CurrentLocation.MapTableData.Longitude, CurrentLocation.MapTableData.Latitude); DiscoveredLocation dl = discoveredLocations[mapPixelID]; if (dl.discoveredBuildings == null) { return(false); } // Get discovery data for building discoveredBuildingOut = dl.discoveredBuildings[buildingKey]; // Check if name should be overridden (owned house / quest site) PlayerEntity playerEntity = GameManager.Instance.PlayerEntity; if (DaggerfallBankManager.IsHouseOwned(buildingKey)) { discoveredBuildingOut.displayName = HardStrings.playerResidence.Replace("%s", playerEntity.Name); } return(true); }
/// <summary> /// Gets building information from current location. /// Does not change discovery state for building. /// </summary> /// <param name="buildingKey">Key of building to query.</param> bool GetBuildingDiscoveryData(int buildingKey, out DiscoveredBuilding buildingDiscoveryData) { buildingDiscoveryData = new DiscoveredBuilding(); // Get building directory for location BuildingDirectory buildingDirectory = GameManager.Instance.StreamingWorld.GetCurrentBuildingDirectory(); if (!buildingDirectory) { return(false); } // Get detailed building data from directory BuildingSummary buildingSummary; if (!buildingDirectory.GetBuildingSummary(buildingKey, out buildingSummary)) { int layoutX, layoutY, recordIndex; BuildingDirectory.ReverseBuildingKey(buildingKey, out layoutX, out layoutY, out recordIndex); Debug.LogFormat("Unable to find expected building key {0} in {1}.{2}", buildingKey, buildingDirectory.LocationData.RegionName, buildingDirectory.LocationData.Name); Debug.LogFormat("LayoutX={0}, LayoutY={1}, RecordIndex={2}", layoutX, layoutY, recordIndex); return(false); } // Resolve name by building type string buildingName; if (RMBLayout.IsResidence(buildingSummary.BuildingType)) { // Residence // TODO: Link to quest system active sites buildingName = HardStrings.residence; } else { // Fixed building name buildingName = BuildingNames.GetName( buildingSummary.NameSeed, buildingSummary.BuildingType, buildingSummary.FactionId, buildingDirectory.LocationData.Name, buildingDirectory.LocationData.RegionName); } // Add to data buildingDiscoveryData.buildingKey = buildingKey; buildingDiscoveryData.displayName = buildingName; buildingDiscoveryData.factionID = buildingSummary.FactionId; buildingDiscoveryData.quality = buildingSummary.Quality; buildingDiscoveryData.buildingType = buildingSummary.BuildingType; return(true); }
/// <summary> /// Gets discovery information from any building in current location. /// Does not change discovery state, simply returns data as if building is always discovered. /// </summary> /// <param name="buildingKey">Building key in current location.</param> /// <param name="discoveredBuildingOut">Discovered building data.</param> /// <returns>True if successful.</returns> public bool GetAnyBuilding(int buildingKey, out DiscoveredBuilding discoveredBuildingOut) { discoveredBuildingOut = new DiscoveredBuilding(); // Must have a location loaded if (!CurrentLocation.Loaded) { return(false); } // Get building discovery data only if (GetBuildingDiscoveryData(buildingKey, out discoveredBuildingOut)) { return(true); } return(false); }
/// <summary> /// Updates discovered building data in current location. /// </summary> /// <param name="discoveredBuilding">Updated data to write back to live discovery database.</param> void UpdateDiscoveredBuilding(DiscoveredBuilding discoveredBuildingIn) { // Must have discovered building if (!HasDiscoveredBuilding(discoveredBuildingIn.buildingKey)) { return; } // Get the location discovery for this mapID int mapPixelID = MapsFile.GetMapPixelIDFromLongitudeLatitude((int)CurrentLocation.MapTableData.Longitude, CurrentLocation.MapTableData.Latitude); DiscoveredLocation dl = discoveredLocations[mapPixelID]; if (dl.discoveredBuildings == null) { return; } // Replace discovery data for building dl.discoveredBuildings.Remove(discoveredBuildingIn.buildingKey); dl.discoveredBuildings.Add(discoveredBuildingIn.buildingKey, discoveredBuildingIn); }
/// <summary> /// Gets discovered building data for current location. /// </summary> /// <param name="buildingKey">Building key in current location.</param> /// <param name="discoveredBuildingOut">Building discovery data out.</param> /// <returns>True if building discovered, false if building not discovered.</returns> public bool GetDiscoveredBuilding(int buildingKey, out DiscoveredBuilding discoveredBuildingOut) { discoveredBuildingOut = new DiscoveredBuilding(); // Must have discovered building if (!HasDiscoveredBuilding(buildingKey)) { return(false); } // Get the location discovery for this mapID int mapPixelID = MapsFile.GetMapPixelIDFromLongitudeLatitude((int)CurrentLocation.MapTableData.Longitude, CurrentLocation.MapTableData.Latitude); DiscoveredLocation dl = discoveredLocations[mapPixelID]; if (dl.discoveredBuildings == null) { return(false); } // Get discovery data for building bool discovered = GetBuildingDiscoveryData(buildingKey, out discoveredBuildingOut); return(true); }
/// <summary> /// Gets discovered building data for current location. /// </summary> /// <param name="buildingKey">Building key in current location.</param> /// <param name="discoveredBuildingOut">Building discovery data out.</param> /// <returns>True if building discovered, false if building not discovered.</returns> public bool GetDiscoveredBuilding(int buildingKey, out DiscoveredBuilding discoveredBuildingOut) { discoveredBuildingOut = new DiscoveredBuilding(); // Must have discovered building if (!HasDiscoveredBuilding(buildingKey)) { return(false); } // Get the location discovery for this mapID int mapID = CurrentLocation.MapTableData.MapId; DiscoveredLocation dl = discoveredLocations[mapID]; if (dl.discoveredBuildings == null) { return(false); } // Get discovery data for building discoveredBuildingOut = dl.discoveredBuildings[buildingKey]; return(true); }
/// <summary> /// Gets building information from current location. /// Does not change discovery state for building. /// </summary> /// <param name="buildingKey">Key of building to query.</param> bool GetBuildingDiscoveryData(int buildingKey, out DiscoveredBuilding buildingDiscoveryData) { buildingDiscoveryData = new DiscoveredBuilding(); // Get building directory for location BuildingDirectory buildingDirectory = GameManager.Instance.StreamingWorld.GetCurrentBuildingDirectory(); if (!buildingDirectory) { return(false); } // Get detailed building data from directory BuildingSummary buildingSummary; if (!buildingDirectory.GetBuildingSummary(buildingKey, out buildingSummary)) { int layoutX, layoutY, recordIndex; BuildingDirectory.ReverseBuildingKey(buildingKey, out layoutX, out layoutY, out recordIndex); Debug.LogFormat("Unable to find expected building key {0} in {1}.{2}", buildingKey, buildingDirectory.LocationData.RegionName, buildingDirectory.LocationData.Name); Debug.LogFormat("LayoutX={0}, LayoutY={1}, RecordIndex={2}", layoutX, layoutY, recordIndex); return(false); } // Resolve name by building type string buildingName; if (RMBLayout.IsResidence(buildingSummary.BuildingType)) { // Residence buildingName = HardStrings.residence; // Link to quest system active sites // note Nystul: do this via TalkManager, this might seem odd at first glance but there is a reason to do so: // get info from TalkManager if pc learned about existence of the building (i.e. its name) // either through dialog ("add dialog" or by dialog-link) or quest (quest did not hide location via "dialog link" command) bool pcLearnedAboutExistence = false; bool receivedDirectionalHints = false; bool locationWasMarkedOnMapByNPC = false; string overrideBuildingName = string.Empty; if (GameManager.Instance.TalkManager.IsBuildingQuestResource(buildingSummary.buildingKey, ref overrideBuildingName, ref pcLearnedAboutExistence, ref receivedDirectionalHints, ref locationWasMarkedOnMapByNPC)) { if (pcLearnedAboutExistence) { buildingName = overrideBuildingName; } } } else { // Fixed building name buildingName = BuildingNames.GetName( buildingSummary.NameSeed, buildingSummary.BuildingType, buildingSummary.FactionId, buildingDirectory.LocationData.Name, buildingDirectory.LocationData.RegionName); } // Add to data buildingDiscoveryData.buildingKey = buildingKey; buildingDiscoveryData.displayName = buildingName; buildingDiscoveryData.factionID = buildingSummary.FactionId; buildingDiscoveryData.quality = buildingSummary.Quality; buildingDiscoveryData.buildingType = buildingSummary.BuildingType; return(true); }