mirror of
https://github.com/loot/libloot.git
synced 2026-07-27 14:16:01 -07:00
@@ -163,7 +163,7 @@ Visual C++ Redistributable for Visual Studio 2013 (x86)</a>. BOSS can be install
|
||||
<p>Provided that masterlist updating <a href="#settingsUpdateMasterlist">is enabled</a> and that an online masterlist URL <a href="#settingsMasterlistURL">is set</a>, BOSS checks for updates to its masterlist and downloads any that are available. If there are any syntax errors in the latest masterlist (due to human error by its maintainers), the updater rolls back one version at a time until it finds a version that works. If any other errors are encountered, updating is cancelled.
|
||||
|
||||
<p>During the sorting process, BOSS extracts information from each of the plugins installed in the game's Data folder and combines this information with any relevant metadata provided by the masterlist and userlist. It then uses the combined data to build a graph (as in <i>graph theory</i>, not <i>drawing</i>) of all the interactions between all the installed plugins. A topological sort is then carried out on the graph to produce a list of plugins in their optimal load order, according to BOSS's criteria. If a cycle is detected (eg. A depends on B depends on A), then sorting is cancelled as it becomes impossible to generate a load order that satisfies all conditions.
|
||||
<p>If successful, the calculated load order is then displayed in the dialog shown above, which allows the user to edit the load order before it is applied. Multiple plugins may be selected and moved at once. If <q>OK</q> button is clicked, it is then applied, and any edits made are recorded in the userlist for re-application when BOSS next sorts the game's plugins. If the <q>Cancel</q> button is clicked, then the load order and any edits made are discarded.
|
||||
<p>If successful, the calculated load order is then displayed in the dialog shown above, which allows the user to edit the load order before it is applied. Multiple plugins may be selected and moved at once. Plugins which are empty (ie. only contain a header record) are displayed in grey text, and plugins that are not empty and load BSAs are displayed in blue text. If <q>OK</q> button is clicked, it is then applied, and any edits made are recorded in the userlist for re-application when BOSS next sorts the game's plugins. If the <q>Cancel</q> button is clicked, then the load order and any edits made are discarded.
|
||||
<p>BOSS then generates a report and displays it either in a new window or in your default browser, according to the value of the <a href="#settingsViewReports">relevant setting</a>. Any errors encountered during the sorting process will be displayed in this report, including those due to graph cycles, missing dependencies or installed incompatible plugins. If it <a href="#settingsGenerateGraphImage">is enabled</a>, an SVG image of the graph is generated for display in the report. See the next section for more information on the report.
|
||||
<p>BOSS is able to sort plugins ghosted by <abbr title="Wrye Bash, Wrye Flash or Wrye Flash NV">Wrye *ash</abbr>, and can extract Bash Tags and version numbers from plugin descriptions. Provided that they have the <code>Filter</code> Bash Tag present in their description, BOSS can recognise filter patches and so avoid displaying unnecessary error messages for any of their masters that may be missing.
|
||||
<p>While reading very large plugins, such as the game's main master file, BOSS may appear to stop responding: this is not an issue. The time it takes for BOSS to sort your load order depends primarily on the size of the masterlist being used, the total size of the files in your load order, and the number of plugins in your load order. The first run is likely to be longer than subsequent runs as BOSS needs to download the full masterlist, rather than just the changes made by updates. In testing, it was found that sorting ~90 plugins with a total size of ~350 MB and a 5 MB masterlist takes around 15 seconds, though performance will vary with computer hardware.
|
||||
@@ -204,7 +204,7 @@ Visual C++ Redistributable for Visual Studio 2013 (x86)</a>. BOSS can be install
|
||||
<figcaption>BOSS's metadata editor.</figcaption>
|
||||
</figure>
|
||||
<p>BOSS's sorting algorithm uses the contents of plugins to work out where they should load relative to one another. However, this is sometimes not enough for it to produce a correct load order. In such cases, additional metadata can be supplied so that the plugins get sorted correctly. This metadata is supplied to BOSS by two sources: one is the masterlist, which is maintained by the BOSS team, and the other is the userlist, which you can edit as you desire.
|
||||
<p>The metadata editor allows you to manage the metadata stored in your userlist. When opened, it lists all the plugins you have installed, and any that are missing but have existing user-added metadata, in alphabetical order. Clicking on a plugin then opens its metadata for editing, and displays any existing metadata in the fields to the right of the plugin list. These fields are explained in the table below.
|
||||
<p>The metadata editor allows you to manage the metadata stored in your userlist. When opened, it lists all the plugins you have installed, and any that are missing but have existing user-added metadata, in alphabetical order. Plugins that load BSAs are displayed in blue text. Clicking on a plugin then opens its metadata for editing, and displays any existing metadata in the fields to the right of the plugin list. These fields are explained in the table below.
|
||||
<p>The <q>Add …</q>, <q>Edit …</q> and <q>Remove …</q> buttons are used to edit the contents of the list currently visible. The <q>Edit …</q> and <q>Remove …</q> buttons are greyed out if no row is selected or if the selected row is not user-added metadata, but comes from the masterlist or the plugin itself. Metadata that comes from the masterlist or the plugin itself cannot be edited or removed, only added to. This is to prevent users from accidently overriding important metadata.
|
||||
<p>The <q>Copy Metadata As Text</q> copies the selected plugin's current metadata, as it appears in the userlist, to the clipboard. This makes it easier to share your metadata changes with the BOSS team, as they can then paste this text directly into the masterlist, and also avoids any typos being introduced. If posting the text in an online forum that supports BBCode (as most forums do), be sure to wrap it in <code>[code]</code> tags, eg. <code>[code]copied text[/code]</code>, so that the spaces are not removed by the forum software.
|
||||
<p>The <q>Save Changes</q> button will save any user-added metadata to your userlist, including any changes made, then exit the metadata editor. The <q>Cancel</q> button will exit the editor without saving any changes.
|
||||
|
||||
@@ -720,7 +720,9 @@ namespace boss {
|
||||
return issues;
|
||||
}
|
||||
|
||||
bool Plugin::HasBSA(const Game& game) const {
|
||||
bool Plugin::LoadsBSA(const Game& game) const {
|
||||
if (game.Id() != g_game_tes5)
|
||||
return false;
|
||||
//BSAs must start with the plugin basename and have the extension .bsa.
|
||||
for (boost::filesystem::directory_iterator it(game.DataPath()); it != boost::filesystem::directory_iterator(); ++it) {
|
||||
if (boost::filesystem::is_regular_file(it->status()) && boost::iequals(it->path().extension().string(), ".bsa")) {
|
||||
|
||||
@@ -190,7 +190,7 @@ namespace boss {
|
||||
void EvalAllConditions(boss::Game& game, const unsigned int language);
|
||||
bool HasNameOnly() const;
|
||||
bool IsRegexPlugin() const;
|
||||
bool HasBSA(const Game& game) const;
|
||||
bool LoadsBSA(const Game& game) const;
|
||||
|
||||
//Compare name strings.
|
||||
bool operator == (const Plugin& rhs) const;
|
||||
|
||||
+1
-1
@@ -265,7 +265,7 @@ Editor::Editor(wxWindow *parent, const wxString& title, const std::string userli
|
||||
//Fill pluginList with the contents of basePlugins.
|
||||
for (int i=0, max=_basePlugins.size(); i < max; ++i) {
|
||||
pluginList->InsertItem(i, FromUTF8(_basePlugins[i].Name()));
|
||||
if (_basePlugins[i].HasBSA(_game)) {
|
||||
if (_basePlugins[i].LoadsBSA(_game)) {
|
||||
pluginList->SetItemTextColour(i, wxColour(0, 142, 219));
|
||||
}
|
||||
}
|
||||
|
||||
+2
-1
@@ -1117,7 +1117,8 @@ LoadOrderPreview::LoadOrderPreview(wxWindow *parent, const wxString title, const
|
||||
_loadOrder->InsertItem(i, FromUTF8(it->Name()));
|
||||
if (it->FormIDs().empty()) {
|
||||
_loadOrder->SetItemTextColour(i, wxColour(122, 122, 122));
|
||||
} else if (it->HasBSA(_game)) {
|
||||
}
|
||||
else if (it->LoadsBSA(_game)) {
|
||||
_loadOrder->SetItemTextColour(i, wxColour(0, 142, 219));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user