Giter Club home page Giter Club logo

wabbajack's Introduction

Wabbajack

Discord CI Tests GitHub all releases

Wabbajack is an automated Modlist Installer that can reproduce an entire modding setup on another machine without bundling any assets or re-distributing any mods.

Social Links

Supported Games and Mod Manager

Described in this Wiki page.

Installing a Modlist

Described in this Wiki page.

Creating your own Modlist

Described in this Wiki section

FAQ

How does Wabbajack differ from Automaton?

I, halgari, used to be a developer working on Automaton. Sadly development was moving a bit too slowly for my liking, and I realized that a complete rewrite would allow the implementation of some really nice features (like BSA packing). As such I made the decision to strike out on my own and make an app that worked first, and then make it pretty. The end result is an app with a ton of features, and a less than professional UI. But that's my motto when coding "make it work, then make it pretty".

Can I charge for a Wabbajack Modlist I created?

No, as specified in the License, Wabbajack Modlists must be available for free. Any payment in exchange for access to a Wabbajack installer is strictly prohibited. This includes paywalling, "pay for beta access", "pay for current version, previous version is free", or any sort of other quid-pro-quo monetization structure. The Wabbajack team reserves the right to implement software that will prohibit the installation of any lists that are paywalled.

Can I accept donations for my installer?

Absolutely! As long as the act of donating does not entitle the donator to access to the installer. The installer must be free, donations must be a "thank you" - not a purchase of services or content.

For Mod Authors

How does Wabbajack download mods from the Nexus?

Wabbajack uses the official Nexus API to retrieve download links from the Nexus. Mod Managers such as MO2 or Vortex also use this API to download files. Downloading using the API is the same as downloading directly from the website, both will increase your download count and give you donation points.

How can I opt out of having my mod be included in a Modlist?

As explained before:

We use the official Nexus API to retrieve download links from the Nexus.

Everyone who has access to the Nexus can download your mod. The Nexus does not and can not lock out Wabbajack from using the API to download a specific mod based on author preferences.

Will the end user even know they use my mod?

Your mod is exposed in several layers of the user experience when installing a Modlist. Before the installation even starts, the user has access to the manifest of the Modlist. This contains a list of all mods to be installed as well as the authors, version, size, links and more meta data depending on origin.

Wabbajack will start a Slideshow during installation which features all mods to be installed in random order. The Slideshow displays the title, author, main image, description, version and a link to the Nexus page.

After installation the user most likely needs to check the instructions of the Modlist for recommended MCM options. If your mod has an MCM and needs a lot of configuring than your mod will likely be featured in the instructions.

Some Modlists also have an extensive README and we highly encourage new Modlist Authors to add a section about important mods to their README (see Post-Compilation).

What if my mod is not on the Nexus?

You can check all sites we can download from here and we can easily add support for other sites. As long as your mod is publicly accessible and available on the Internet, Wabbajack can probably download it. Even if the site requires a login and does not have an API, we can always just resort to our internal browser and download the mod as if a user would go to the website using Firefox/Chrome and click the download button.

License & Copyright

All original code in Wabbajack is given freely via the GPL3 license. Parts of Wabbajack use libraries that carry their own Open Sources licenses, those parts retain their original copyrights. Selling of Modlist files is strictly forbidden. As is hosting the files behind any sort of paywall. You received this tool free of charge, respect this by giving freely as you were given.

Contributing

Look at the CONTRIBUTING.md file for detailed guidelines.

Thanks to

Our testers and Discord members who encourage development and help test the builds.

wabbajack's People

Contributors

ai-elias avatar cacophony-wj avatar chronophylos avatar cyclonit avatar dependabot-preview[bot] avatar dependabot[bot] avatar drazden avatar erri120 avatar eziothedeadpoet avatar forgottenglory avatar giraldiego avatar halgari avatar ixanza avatar januarysnow avatar jdsmith2816 avatar jonathanfeenstra avatar kylernyhagen avatar livelydismay avatar lordofrhun avatar lostdragonist avatar maelstrom8 avatar modulator-mocker-ellipse8 avatar noggog avatar pandaismyname1 avatar tatetayloroh avatar tbaldrid avatar timboman avatar tr4wzified avatar unnoen avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

wabbajack's Issues

Author Notes and Nexus Mod Pages

Hey there,

as a guide writer, there are two things I would like to see before I make my guide a WJ install:

  1. A popup window both in the beginning and the end of the install process, where I can write my own notes and thoughts and so on, could possibly write something about this specific list, and in the end just a goodbye note or so.

  2. the previously discussed self-paced (click to see next) slideshow of the mods that are being installed, with a button to get to the mod page, if possible a link to the mod authors donations as on their mod page, and a button to instantly endorse the mod.

This would mean that all users read what I have to say about my mod pack and they see all mods and have a low threshold to see their mod page (recognition of the author), donate, and give endorsements. Plus guide authors can put their own donation page at the end.

All in all, this would probably make me switch to MO2 (from Vortex) and WJ, as I see no ethical conflict anymore and the main complaints are met (recognition and financial issues).

Identify the culprit for a link checking error.

Is your feature request related to a problem? Please describe.
When creating an autoinstaller with WJ, sometimes it fails during the link checking process due to an error with the .meta file for a file, however, the log file shows the last mod that was checked successfully but not the mod that caused the error. One can assume that the mod that caused it should be the next in the stack after the last one successful, but sometimes this is not the case and the culprit could have been in a parallel process and threw the error late.

This happens for errors like:
System.Net.Http.HttpRequestException: Response status code does not indicate success: 404 (Not Found).

C:\oss\Wabbajack\Wabbajack\Wabbajack.Common\Utils.cs:line 281
110.91 - Value cannot be null.
Parameter name: source - Can't continue

Describe the solution you'd like
Implement a catch to log what was the mod that actually threw the error.

Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.

Additional context
Add any other context or screenshots about the feature request here.

Support direct links to nonzipped files.

Describe the bug
Wabbajack currently can not handle links pointing directly to ESMs or ESPs.

Additional context
Windows 10, Lexy's Skyrim SE modlist

Solution

slideshow of mods while installing

Is your feature request related to a problem? Please describe.
I get bored while staring to the screen while wabbajack runs, and only being able to watch the progress bars and logs messages.

Describe the solution you'd like
It would be nice if while wabbajack does its thing (installing or downloading), that start showing the short mod notes and images from nexus in like a slideshare presentation. This will work only for mods stored on Nexus. Not synched because some mods donwload/install too fast, but like 5 secs for every mod and then cycles again to the first mod. This way people would have an idea of what it is actually installing

Describe alternatives you've considered
It can be a report to the end, but I probably won't read it because my hype to start playing.

Additional context
Add any other context or screenshots about the feature request here.

Customization of modlists (after we have our initial guides and variations setup)

Is your feature request related to a problem? Please describe.
Lack of modularity or customization (not a time sensitive request) Long-term QoL change.

Describe the solution you'd like
For mods with multiple texture, color, difficulty, etc options, perhaps a more customizable UI for WJ allowing for the end user to choose options for mods within the modlist.

Describe alternatives you've considered
Perhaps allow end user to access parts of the FOMOD that wouldn't break the load order
On nexus sites with several files, the user would normally choose one that best fits their desired image. Perhaps WJ could be customized to access the site and give the end user the option of which preselected file they would like.

Additional context
Again, not an immediate issue by any stretch.

Support for Mator Smash patch profiles

Is your feature request related to a problem?
When compiling a modlist it will fail if you have a patches.json or plugininfo.json in your mator smash profile directory.

Describe the solution you'd like
It would be nice if these files could be processed by wabbajack so they're included when it installs.

Describe alternatives you've considered
I'm going to remove them now, as I don't need them. That's suboptimal.

Additional context
I'm building an update to Lexy.

Only Check for dead Nexus Links Every few Hours

Is your feature request related to a problem? Please describe.
We currently verify that files aren't deleted when we build a modlist, but with large lists it's easy to quickly chew through the ~3000 API a day limit.

Describe the solution you'd like
Lets cache the results from the Nexus and only update them every 12 hours or so. Should we somehow embed all this info in a DB of sorts so we can start better track all the disparate data sources we're collecting? Maybe it's not yet the right time for that, but something to consider.

Not taking in account files inside the data folder of the game

Describe the bug
sometime modlist authors put things directly in the data folder or the game but WJ don't detect that, it only detects files in the root directory of the game.

Additional context
What I did was to create manually a Game Folder Files in the MO2 with only the files I knew WJ won't recreate (to avoid the previous reported bug)

Solution
Leave This blank, it will be filled in by the developers.

No ModOrganizer2.exe found

Describe the bug
Mod Organizer 2 is installed in D:\MO2, while its data is installed separately in D:\MO2-Data
When I tried to create modlist from modlist.txt, I got the error of "No ModOrganizer2.exe found in D:\MO2-Data"

Additional context
Win 10, Skyrim SE

Logs

Solution

Optionally include disabled mods

Is your feature request related to a problem? Please describe.
When creating the installer for Lexy's guide, the SSE-Terrain-Tamriel.esm file is added but disabled (it needs to be disabled for a lot of finishing line steps). This leads to it not being present after the installer has been run.

Describe the solution you'd like
Some way to say that you want this specific disabled mod added as a download, even though it is disabled in the MO2 profile.

FOMOD file support

Is your feature request related to a problem? Please describe.
Some modlists still relly in old mods that used the old FOMOD format, like New Vegas Modlists

Describe the solution you'd like
Include the .FOMOD extension amont the ones supported.

Describe alternatives you've considered
For now, ask to users to change manually the extension of the file from .FOMOD to .7z.

Additional context
I will try to do a pull request if I could add that to the code.

The system cannot find the path specified

Describe the bug
I was going step by step with youtube tutorial. After authorising Wabbajack to use Nexus here is what Wabbajack logged:

  • getting nexus api_key please click authorize if a browser window appears
  • building a list of archives based on the files required
  • at Alphaleonis.Win32.NativeError.ThrowException (... a lot of text followed by next and last log)
  • (3) The system cannot find the path specified: [nexus_link_cache\mod-info-SkyrimSE-6194.json] - Can't continue.

And I'm stuck. I tried reinstalling game (as well as switching from Skyrim SE to regular Skyrim with all DLCs) and MO2 and redownloading Wabbajack but it still does not work and gets stuck at the same point
Additional context
Win 10, games: Skyrim SE and regular Skyrim with all DLCs.
Wabbajack.exe.log

Solution
Leave This blank, it will be filled in by the developers.

CAO generates dummy ESPs that Wabbajack can't handle

Describe the bug
Cathedral Assets Optimizer generates dummy ESPs that only exist to load a BSA. Wabbajack doesn't know what to do with these.

Solution
We can detect if a .bsa exists with the same name, and if the ESP is super small (< 100 bytes) it's safe to assume that the .esp is empty. If those conditions are met we can include the .esp verbatim.

Threading Refactor Discussion

Thought I'd try out making an Issue /w an enhancement tag as a discussion topic, rather than talking about it in the discord. A bit nicer for tracking our thought process on a specific issue as we discuss, and for looking back later.

We've gotten on the topic of potentially refactoring the threading model for processing installation/compilation steps. Namely, we want to try to utilize async/await to avoid deadlock/starvation issues.

Some reference articles:
https://medium.com/rubrikkgroup/understanding-async-avoiding-deadlocks-e41f8f2c6f5d
https://blog.stephencleary.com/2012/07/dont-block-on-async-code.html

Here's my brain dump of my current understanding of the WJ setup, and also possible alternatives to consider, and how they'd look.

Current setup as a baseline:

Set up a work queue collection, which lets consumers pull jobs to do in FIFO
X threads are spun up, based on number of cores
Each thread pulls a job off the queue, and runs it. Any Tasks encountered have .Result run on them to execute them to completion
queue is waited on until it has a new job to give, repeat

Simplified typical usage scenario for discussion:

One Thread/worker is desired/created: Thread T1
One Job needs to be done
Let's say this one Job internally utilizes two threads from the threadpool to achieve its goals.
(many async functions don't need to actually use background threads from the pool to get benefit, but let's say this one does)
The threads from the pool it uses we'll call T2, T3.
Let's also say that T3 is the thread that marks the final task as complete.

new Thread /w Result (current setup):

T1 is a new thread
T1 pulls job off queue
T1 runs job /w .Result
T1 blocks while T2/T3 pool threads do their jobs. T2 finishes its stuff, T3 does as well, and marks the task complete.
T3/T2 are done, and released back to the pool
T1 unblocks with the result
T1 waits for another job from the queue

Task.Run() /w Result:

T1 is a thread from the threadpool
T1 pulls job off queue
T1 runs job /w .Result
T1 blocks while T2/T3 pool threads do their jobs. T2 finishes its stuff, T3 does as well, and marks the task complete.
T3/T2 are done, and released back to the pool
T1 unblocks with the result
T1 waits for another job from the queue

Dangerous
Since the X threads we are starting are now from the threadpool, our .Result calls block threads from that pool. This could help lead to starvation of the pool.

Task.Run() /w await

T1 is a thread from the threadpool
T1 pulls job off queue
T1 runs job /w await
T1 has nothing to do while T2/T3 pool threads do their jobs.
T1 is released back to the pool. Might even start working on some random work
T2 finishes its stuff, T3 does as well, and marks the task complete.
T2 has nothing to do and is released back to the pool
T3 is the thread that completed the task, and there's no assigned scheduler, so it's in charge of the continuation
T3 waits for another job from the queue

This might seem weird at first, as now T3 is the "worker" thread pulling this off the queue, and now T1 is just back in the pool not being used. But this is actually intended, and one of the cool parts of the async/await system. T1 was not doing anything while waiting for T2/T3 to be done, so it was released back to the pool to do any more potential work. When T3 is done, we can either wake up T1 again to finish the work, but why should we? Just do it on T3.. it was going to be put back into the pool anyway. T1 might be busy with something else for all we know.

This is different than when a task is done /w a scheduler assigned as in this scenario:

GUI thread /w await

T1 is the GUI thread. Has a scheduler
T1 pulls job off queue
T1 runs job /w await
T1 has nothing to do while T2/T3 pool threads do their jobs.
T1 is the GUI thread, /w a scheduler, so it goes and starts working on other GUI events on its scheduler queue (updating textboxes, executing button presses, whatever)
T2 finishes its stuff, T3 does as well, and marks the task complete.
T3 is the thread that completed the task, but there's an assigned scheduler, so it puts the continuation work onto the scheduler's queue. T2/T3 are then released to the pool
T1 finishes all the pending GUI updates in its queue, finally gets to the scheduled work continuation, and waits on the queue for another work item

This wouldn't be a setup we'd want, but more just an example of how schedulers interact /w the task system, making any continuation work queue up on them instead of being finished by the background thread.

Rx powered

Less sure on this route, but I'm sure it's possible.. I just haven't done anything similar myself yet.

Saw this article,
https://stackoverflow.com/questions/8558835/rx-extensions-where-is-parallel-foreach
which makes me think it would look something like this:

var jobQueue = new Subject<Func<Task>>();
jobQueue
    .Select(job => Observable.Defer(() => Observable.Start(job, Scheduler.ThreadPoolScheduler)))
    .Merge(5 /* at a time */)
    .Subscribe();

// Put stuff on the queue
jobQueue.OnNext(...);

Might not be right whatsoever, but that's where I'd be starting to test with, and going from there.


I think what we want is the Task.Run() /w await solution, or the Rx solution.

For the Task.Run() /w await solution, what's important isn't that we have X threads that are worker threads that live through the life of the program in charge of that job. What's important is that at any given point in time, up to X pool threads are working on queue items. Or.. if there's nothing on the queue, there will be zero pool threads blocking to wait on the queue.. but rather X tasks currently waiting on the queue to get a new item. If there's a blast of work to be done, those X "wait for next queue item" tasks complete, bringing up X threads from the pool to start doing their stuff.

This is at least my understanding of Task mechanics. I might be wrong in some of the theory, so I'd want to test extensively. Namely.. I'd be interested in the case where there's no work to be done, and now there's a lot, do X threads actually spin back up? Or does 1 thread wake up, /w X continuations to complete all chained together? I'm unsure, so I'd want to test.

Rx solution sounds tempting too. You know I'm an addict.

Interface Not Registered

"When trying to install modpack"

After I've selected my MO location and Download location wabbajack asked me on where my game is installed I selected it and i get an error
"Interface not registered"

Log Report info,

0 - Wabbajack Build - 05d700f
25.15 - at Ookii.Dialogs.Wpf.Interop.IShellItem.GetDisplayName(SIGDN sigdnName, String& ppszName)
at Ookii.Dialogs.Wpf.VistaFolderBrowserDialog.RunDialog(IntPtr owner) in C:\localdev\caioproiete\gh\public\ookii-dialogs-wpf\src\Ookii.Dialogs.Wpf\VistaFolderBrowserDialog.cs:line 179
at Ookii.Dialogs.Wpf.VistaFolderBrowserDialog.ShowDialog(Window owner) in C:\localdev\caioproiete\gh\public\ookii-dialogs-wpf\src\Ookii.Dialogs.Wpf\VistaFolderBrowserDialog.cs:line 157
at Wabbajack.Installer.LocateGameFolder()
at Wabbajack.Installer.Install()
at Wabbajack.AppState.<>c__DisplayClass57_0.b__1()
25.16 - System.ArgumentException: Interface not registered

Failed to find proxy registration for IID: {ADD8BA80-002B-11D0-8F0F-00C04FD7D062}.
at Ookii.Dialogs.Wpf.Interop.IShellItem.GetDisplayName(SIGDN sigdnName, String& ppszName)
at Ookii.Dialogs.Wpf.VistaFolderBrowserDialog.RunDialog(IntPtr owner) in C:\localdev\caioproiete\gh\public\ookii-dialogs-wpf\src\Ookii.Dialogs.Wpf\VistaFolderBrowserDialog.cs:line 179
at Ookii.Dialogs.Wpf.VistaFolderBrowserDialog.ShowDialog(Window owner) in C:\localdev\caioproiete\gh\public\ookii-dialogs-wpf\src\Ookii.Dialogs.Wpf\VistaFolderBrowserDialog.cs:line 157
at Wabbajack.Installer.LocateGameFolder()
at Wabbajack.Installer.Install()
at Wabbajack.AppState.<>c__DisplayClass57_0.b__1()
25.16 - Interface not registered

Failed to find proxy registration for IID: {ADD8BA80-002B-11D0-8F0F-00C04FD7D062}. - Can't continue

Game is SSE

OMOD support

This stuff kinda works and uses the dll, had no success with the exe.
Initial tests worked.

Support Nested Archives

Is your feature request related to a problem? Please describe.
Some mods have archives inside archives, and we could also consider BSAs as an archive type, this would allow us to handle cases where users have unpacked BSAs or installed files from nested archives.

Describe the solution you'd like
We extend the indexer to handle nested archives, then extend the installer to do the same. It'll be tricky as we'll have to extract files to disk temporarily. Some archives, like BSAs are gigabytes in size, so we can't extract them into memory while we work with them, we'll need to write them to disk, extract what we need, then clean them up afterwards.

Roadplan

Is your feature request related to a problem? Please describe.
Currently it appears as if the development direction is geared towards successful compilation and installation of mod-lists that have moderate difficulty.

Describe the solution you'd like
A more long-term plan would be nice to have, either in the form of some notes in the readme or utilizing github's projects feature and having the goals for each future major version.

Describe alternatives you've considered
n/a

Additional context
This by no means is meant to imply that the current focus on getting consistent successful modlist installers is a bad, I just think that it will help if there is a clear direction.

Separate Download Folder

Is your feature request related to a problem? Please describe.
Some users have smaller SSDs but larger HDDs they'd like to keep the downloads in one folder and the rest of the install in another.

Describe the solution you'd like
During compilation we can grab the location of the downloads from MO2. During installation we should have another folder location button/text box for changing the downloads folder.

Possible issue with MO2 files

Describe the bug
Compiler failed to build with the following error. This is a brand new computer and so I likely have the latest version for M02 etc.

Additional context
Windows 10 (brand new install)
Skyrim SE (brand new install)

Logs

1377.91 - zEdit not detected, disabling zEdit routines
1377.91 - Running Compilation Stack
1377.96 - No match for: unins000.dat
1377.96 - No match for: unins000.exe
1378.6 - Adding 0 that were generated by the stack
1378.61 - No match for 2 files
1378.61 -      unins000.dat
1378.62 -      unins000.exe
1378.62 - Exiting due to no way to compile these files

Full file can be found here. https://github.com/ductiletoaster/aetherium/blob/master/Wabbajack.exe

Solution
More a work around but I was able to get past this step by simply removing these two files. Likely need to add them to the "whitelist" of M02 files?

Uncaught error when running Basic.Graphics.And.Fixes.exe, after all files get downloaded

Describe the bug

Wabbajack Build - 912ad75bfa891ba84fb156e1a7964c7db0f119f9
   at System.ThrowHelper.ThrowArgumentException(ExceptionResource resource)
   at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)
   at System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement](IEnumerable`1 source, Func`2 keySelector, Func`2 elementSelector, IEqualityComparer`1 comparer)
   at Wabbajack.Installer.HashArchives()
   at Wabbajack.Installer.Install()
   at Wabbajack.AppState.<>c__DisplayClass56_0.<ExecuteBegin>b__1()
Uncaught error:
Object reference not set to an instance of an object.
:<ExecuteBegin>b__1:0:0
:RunInternal:0:0
:Run:0:0
:Run:0:0
:ThreadStart:0:0

Additional context
Win10 64bit.
Run Basic.Graphics.And.Fixes.exe and set it to check the folder where I have a bunch of files downloaded of nexus. It verified all the files and generated .sha files for them and then produced the above message in the log file and terminated.

Solution

Know what's going to be installed before hand

Is your feature request related to a problem? Please describe.
Since the modlist is embedded in the executable, there is no way to know what is ultimately included.

Describe the solution you'd like
Allow a review of what is going to be downloaded before you click begin (no option to alter, just view).

Non negitive number

Describe the bug
A clear and concise description of what the bug is. Building mod install list. Final log entry: Non negative number required. Parameter name count-Can not continue
I have followed the You tube tutorial. Verified game files. Clean install of Mod organizer. Empty mod and down load folders.

Additional context
Please list your OS (Win 10, Win 7, etc.) and Game type (SSE, FO4, etc.) W10 pro Skyrim SE

SolutionHad to do a totally clean re install of sky rim,still having other issues though.
Leave This blank, it will be filled in by the developers.

We're spamming the wrong nexus endpoint

Describe the bug
When validating links we're calling the download endpoint for the Nexus which makes it look like we're rapidly downloading a lot of files. We should switch to using the info endpoint.

Additional context
We originally used the download endpoint to check if a link was valid because this would throw an error on a missing file. We tried using the file info endpoint, but this would return files that weren't valid to download. Talked to the Nexus devs and they said until something better is implemented we can use a null category value as a flag for a deleted file.

Allow multiple profiles to be created with a modlist

Is your feature request related to a problem? Please describe.
Currently a single profile is all that is created when a wabbajack mod pack is made. For lexy, it would be very convenient to have multiple profiles so all the merges can be made in a quicker way.

Describe the solution you'd like
Allow multiple MO2 profiles to be created using wabbajack.

Describe alternatives you've considered
I've done all of it by hand and it's a million times worse.

Additional context
As mentioned on the discord.

Separating exe from modlist

Just to centralize and discuss ideas about having the modlist as separate file.
Pros :

  • One central binary that everyone can trust and hosted modlists that use that binary
    Cons:
  • Modlists potentially not compatible across versions of the exe, possibly confusing users

Current proposals:

  • Json/XML file with a header field mentioning the version used to create the modlist
  • Script file with a list of instructions to run
  • Others?

I'll edit this if anyone posts any other proposals.

Download speed limiter

Is your feature request related to a problem? Please describe.
You might throttle others on the same connection if you let Wabbajack run for a while downloading huge modlists. There should be a way to limit the download speed.

Describe the solution you'd like
Currently I'm thinking about a checkmark and when checked show a textbox that lets the user enter a maximium speed.

Error when keeping files from a previous autoinstallation?

Describe the bug

I got this error when trying to compile a new modlist for Lexy's:

239.42 - at System.ThrowHelper.ThrowArgumentException(ExceptionResource resource)
at System.Collections.Generic.Dictionary2.Insert(TKey key, TValue value, Boolean add) at System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement](IEnumerable1 source, Func2 keySelector, Func2 elementSelector, IEqualityComparer1 comparer) at System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement](IEnumerable1 source, Func2 keySelector, Func2 elementSelector)
at Wabbajack.Compiler.BuildPatches()
at Wabbajack.Compiler.Compile()
at Wabbajack.AppState.<>c__DisplayClass75_1.b__3()
239.42 - System.ArgumentException: An item with the same key has already been added.
at System.ThrowHelper.ThrowArgumentException(ExceptionResource resource)
at System.Collections.Generic.Dictionary2.Insert(TKey key, TValue value, Boolean add) at System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement](IEnumerable1 source, Func2 keySelector, Func2 elementSelector, IEqualityComparer1 comparer) at System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement](IEnumerable1 source, Func2 keySelector, Func2 elementSelector)
at Wabbajack.Compiler.BuildPatches()
at Wabbajack.Compiler.Compile()
at Wabbajack.AppState.<>c__DisplayClass75_1.b__3()
239.43 - An item with the same key has already been added. - Can't continue

Additional context

I think the bug is because the autoinstaller generates some folders inside the MO2 folder like the "LOOT Config Files" with some files the user has to manually relocate for their installation. If one tries to build a new modlist using the same MO2 folder and let this files, it will get the error.

I solved the error, deleting that folder. Probably it would happen if the user keeps the folder "Game Folder Files".

Solution
Leave This blank, it will be filled in by the developers.

Include merge profiles in installer

Is your feature request related to a problem? Please describe.
I the modlist creator has zEdit installed in his tool folder, the merges.json of the current zEdit profile is not included and the settings.json file has the wrong paths setup.

Describe the solution you'd like
Apply the same workflow as the one applied to modorganizer.ini, ie: copy the files and fix the paths to point to the new installation directory.

Wabbajack does not configure MO2 to use the chosen download folder

Describe the bug
When installing a modlist, if you choose a download folder that is not the default one (ie: mo2/downloads), then WJ will place all the embedded .meta files in the default download folder, ignoring the folder that chosen. Also WJ does not update mo2 to point to the actual downloads.
As a result mo2 will delete all meta that were added to the mo2/downloads folder, because it can't find the corresponding archives.

Additional context
N/A

Logs
N/A

Solution

Personalise installer's look

Is your feature request related to a problem? Please describe.
All installers look identical at the moment.

Describe the solution you'd like
Add the ability to include custom text and or a logo at the installation screen, to personalise each installer. Will make them pop out more and have a more professional feel.
As a good to have but ok if we don't advanced version of the above, allow creating a a complete theme for the installer (altering/translating the text of the all the fields, changing font sizes and colours, etc...)

...has stopped working

Describe the bug
When I start Wabbajack, and select the modpack to install, it pauses a second, then I get a Windows error saying, "Wabbajack has stopped working"

In the log window, there is the following text:
Wabbajack Build - 78b2155
Uncaught error:
Object reference not set to an instance of an object.
d:\a\1\s\Wabbajack.Common\Utils.cs.ExceptionToString:430.36
CacheImage 0.0
QueueRandomSlide 0.0
PreloadSlideShow 0.0
ConfigureForInstall 0.0
< ctor>b__4.0.0
RunInternal 0.0
Run 0.0
Run 0.0
ThreadStart 0.0

Additional context
Windows 7, SP1, 64-bit
I'm trying to install Lexy's Legacy of the Dragonborn into SSE

Logs
My Wabbajack.exe.log file only contains the following:
1.58 - Caching slide for The Companions - Don't be a Milk Drinker at https://staticdelivery.nexusmods.com/mods/1704/images/19490 19490-1535055392-370726483.jpeg

Solution
Leave This blank, it will be filled in by the developers.

PMap causes thread starvation

Describe the bug
Since we have a limited worker pool with the Work queue, and since a thread calling PMap doesn't help with the work queue, it's possible for nested PMap calls to cause thread starvation.

Solution
Rework PMap to have the caller thread help with the work, if the caller thread is a worker thread.

Error not Found 404

Describe the bug
969.28 - System.Net.Http.HttpRequestException: Response status code does not indicate success: 404 (Not Found).
969.29 - Response status code does not indicate success: 404 (Not Found). - Can't continue

I tried a few times, deleting nexus.key_cache and try again, but its not workinge, also note that it redirects to internet explore, but it never loads, so I copy the web adress and paste to chrome, so I can give access.

Additional context
Win 10

Solution

Update friendly behavior

Is your feature request related to a problem? Please describe.
When updating a modlist already installed, you only need to download certain files and some minor/medium adjustments to your already installed mods. But if you try to use the new installer, it will delete all your installation and it will start again.

Describe the solution you'd like
To have a separation between downloading step and installing step, like two buttons, where you choose what process start. This way you won't hurt your installation and you will be able to download the new files.

Describe alternatives you've considered
Also to be able to add a changelog to the installations will help.

Additional context
For the updating purposes, it would be nice to print out what changes would be made if the installation continues, in order to make them manually.

Updating the OMOD extraction method

Since I'm completely reworking everthing in my OMODExtractor repo and working towards a more stable framework, I'm also going to update the method we used inside WJ.

Also: extracting plugins with the method currently doesnt work for some reasons
Just wait for pull request :)

When a mod doesn't exist, offer alternative URL input

Is your feature request related to a problem? Please describe.
When a mod or version of a mod is deleted off Nexus, the AutoInstaller cannot complete and must be recompiled.

Describe the solution you'd like
When a mod cannot be found, offer a popup box to specify a new nexus URL for the newer version of that mod.

Additional context
Perhaps include a warning that it is not guaranteed to work if the update introduces conflicts.

Error: Exiting due to no way to compile these files

Wabbajack hashed every file just fine, no errors. Upon opening it a second time and clicking "Begin" after installing new mods using MO2, it cycles through the MO2 folder, eventually giving the error, "Exiting due to no way to compile these files".

Running Windows 10, game is Fallout 4.

Log file pastebin

I verified I have the latest version of Python installed, .NET runtimes up to date, etc.

7z.exe and 7z.dll

Describe the bug
If you build a WJ installer with those files present, the end-user won't be able to use the installer from the same directory where is doing the installation.

Additional context
Please list your OS (Win 10, Win 7, etc.) and Game type (SSE, FO4, etc.)

Solution
Warn before creating the autoinstaller about the presence of those files and refuse to build the autoinstaller.

ViewModel RaisePropertyChanged patterns

Not really a feature request, but more of a pattern suggestion to make the code more robust and succinct that you guys might find useful.

I noticed that the RaisePropertyChanged calls typically look like this:

public string Mode
{
    get => _mode;
    set
    {
        _mode = value;
        OnPropertyChanged("Mode");
    }
}

I've got two small suggestions to consider:
1) nameof() concepts for when strings need to match a member/function name
So something like

public string Mode
{
    get => _mode;
    set
    {
        _mode = value;
        OnPropertyChanged(nameof(Mode));
    }
}

This is a bit more robust, as now if anyone uses a refactoring tool to rename Mode, the string passed to OnPropertyChanged is powered by the compiler now, and implicitly changed by the refactor. Helps avoid future gotcha magic string bugs.

2) RaiseAndSetIfChanged function might be useful to utilize:

protected void RaiseAndSetIfChanged<T>(
    ref T item,
    T newItem,
    [CallerMemberName] string propertyName = null)
{
    if (EqualityComparer<T>.Default.Equals(item, newItem)) return;
    item = newItem;
    this.RaisePropertyChanged(propertyName);
}

Might put it in some common base class like ViewModel? Either way, would be used to simplify the above code to something like this:

public string Mode
{
    get => _mode;
    set => RaiseAndSetIfChanged(ref _mode, value);
}

Makes my first suggestion kind of moot, haha.

I definitely love refactoring, so I can set up a PR with these suggestions completed.. but I felt like I should pitch the idea and see what you guys thought before spending time on it. Especially since the changes would touch a good amount of existing files I think. 8)

Cannot delete readonly files from staged dir

Describe the bug
The cleanup vfs staged files step fails for files that were readonly inside their archives.

Additional context

1137.19 - Alphaleonis.Win32.Filesystem.DirectoryReadOnlyException: (6009) The specified file is read only: [\\?\E:\lotd\vfs_staged_files\85852608-715b-459d-b080-64be9a9d05ea\Ancient Dwemer Metal 4K\meshes]
   at Alphaleonis.Win32.Filesystem.Directory.DeleteDirectoryCore(KernelTransaction transaction, String pathLp, Boolean ignoreReadOnly, Boolean continueOnNotFound) in C:\Users\jjangli\Documents\GitHub\AlphaFS\AlphaFS\Filesystem\Directory Class\Directory.Delete.cs:line 401
   at Alphaleonis.Win32.Filesystem.Directory.DeleteDirectoryCore(KernelTransaction transaction, FileSystemEntryInfo fsEntryInfo, String path, Boolean recursive, Boolean ignoreReadOnly, Boolean continueOnNotFound, PathFormat pathFormat) in C:\Users\jjangli\Documents\GitHub\AlphaFS\AlphaFS\Filesystem\Directory Class\Directory.Delete.cs:line 322
   at Alphaleonis.Win32.Filesystem.Directory.Delete(String path, Boolean recursive) in C:\Users\jjangli\Documents\GitHub\AlphaFS\AlphaFS\Filesystem\Directory Class\Directory.Delete.cs:line 65
   at VFS.VirtualFileSystem.<>c__DisplayClass13_0.<DeleteDirectory>b__1(String folder) in C:\oss\Wabbajack\Wabbajack\VirtualFileSystem\VirtualFileSystem.cs:line 73

Solution
Manually reset the attributes of all extracted files.

Navigation buttons for the slideshow

Is your feature request related to a problem? Please describe.
No

Describe the solution you'd like
Left and right buttons (< and > maybe?) that allow you to navigate the slideshow

Describe alternatives you've considered
N/A

Additional context
N/A

Won't start

Describe the bug
The program won't start. Tried running it in and outside of the MO2 folder. Tried all compatibility settings. Tried restarting PC. I can see the process starting for 1 second on Task Manager's details tab alongside "WerFault.exe".

Additional context
Windows 10 1903 64bit

Solution
Leave This blank, it will be filled in by the developers.

Offer the ability to start the installation from a specific step

Is your feature request related to a problem? Please describe.
Currently the modlists will run through the entire process by only asking for the game directory.

Describe the solution you'd like
I would like the option to have process stop at each step (checkbox maybe?) and then manually click to continue. This is incase I am using the machine at the same time and want the extraction/installation to run when I want it to.
Steps at which it should stop or wait should be after Download and after extraction.

Describe alternatives you've considered
Currently I shutdown the program when I notice that its near the end, if I need to use the computer for something else at the same time.

Additional context
Not a high priority requirement, just nice to have for people with older/slower machines.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.