The manifests are now read in reverse, ensuring that the expansions/mods scripts are executed before the base game scripts.
This change also add the code to remove the expansions/mods files. Previously, these files were left behind, but now they are properly removed.
The server sets `BaseGame` to null to avoid a circular dependency, but if this is not set then the expansions/mods won't find their scripts
There's probably a better way of doing this, like changing the `Run*Script` functions to receive the game ID, just like the `GameService.Install` already does, but this temporary change fixed the script issue for now
Reduced the amount of data being sent to the client from the API which results in smaller, somewhat faster requests. In a library of ~250 games the requests went from 5.6MB to 3.3MB.
Games now import using the Game type instead of manifest. The manifest is fine for locally caching the game (though who knows, this could change as well), but for providing complex information like dependent games versioning it just doesn't have enough data.
Importing has been changed to provide the "Update Available" title change on games where the main game or mod/expansion has a new version available.
Notes now get populated on import, not just install.
Reworked population of game menu items to include non-primary actions from mods/expansions.
Simplified and fixed certain scripts not running for mods/expansions.
The chunk uploader has been updated with a drag and drop interface as the old UI was always a bit temporary. The import dialog has been updated to support the new UI. Clearing now works and opening the import dialog for a second time does not have the previous file populated.