diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
index 121233f1..e710c2a7 100644
--- a/.github/FUNDING.yml
+++ b/.github/FUNDING.yml
@@ -1,4 +1 @@
-patreon: BeatSaberMods
-ko_fi: N4N8JX7B
-liberapay: Assistant
-custom: ['https://paypal.me/AssistantMoe', 'https://bs.assistant.moe/Donate/']
+custom: ['https://github.com/Assistant/ModAssistant']
diff --git a/.github/workflows/dotnet.yml b/.github/workflows/dotnet.yml
index af1248e4..c3689468 100644
--- a/.github/workflows/dotnet.yml
+++ b/.github/workflows/dotnet.yml
@@ -16,18 +16,18 @@ jobs:
- name: Install dependencies
run: msbuild -t:restore
- name: Build project
- run: msbuild ModAssistant/ModAssistant.csproj /t:Build /p:Configuration=Release
+ run: msbuild VRCMelonAssistant/VRCMelonAssistant.csproj /t:Build /p:Configuration=Release
- name: Cleanup release
shell: bash
run: |
- find "ModAssistant/bin/Release" -type f ! -name "ModAssistant.exe" -delete
- cp "LICENSE" "ModAssistant/bin/Release/LICENSE.ModAssistant.txt"
+ find "VRCMelonAssistant/bin/Release" -type f ! -name "VRCMelonAssistant.exe" -delete
+ cp "LICENSE" "VRCMelonAssistant/bin/Release/LICENSE.VRCMelonAssistant.txt"
- name: Upload Build
if: startsWith(github.ref, 'refs/tags/') == false
uses: actions/upload-artifact@v2
with:
- name: ModAssistant-${{ github.sha }}
- path: ./ModAssistant/bin/Release/
+ name: VRCMelonAssistant-${{ github.sha }}
+ path: ./VRCMelonAssistant/bin/Release/
- name: Extract Release Version
if: startsWith(github.ref, 'refs/tags/')
id: get_version
@@ -39,5 +39,5 @@ jobs:
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
- name: Mod Assistant v${{ steps.get_version.outputs.version }}
- files: ./ModAssistant/bin/Release/ModAssistant.exe
+ name: VRChat Melon Assistant v${{ steps.get_version.outputs.version }}
+ files: ./VRCMelonAssistant/bin/Release/VRCMelonAssistant.exe
diff --git a/ModAssistant/App.config b/ModAssistant/App.config
deleted file mode 100644
index 7a673b8e..00000000
--- a/ModAssistant/App.config
+++ /dev/null
@@ -1,72 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- False
-
-
- True
-
-
- False
-
-
- False
-
-
- False
-
-
-
-
-
-
-
-
- True
-
-
-
-
-
-
-
-
- True
-
-
- False
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/ModAssistant/Classes/External Interfaces/BeatSaver.cs b/ModAssistant/Classes/External Interfaces/BeatSaver.cs
deleted file mode 100644
index 54dfc813..00000000
--- a/ModAssistant/Classes/External Interfaces/BeatSaver.cs
+++ /dev/null
@@ -1,364 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.IO.Compression;
-using System.Net;
-using System.Net.Http.Headers;
-using System.Threading.Tasks;
-using System.Web;
-using System.Windows;
-using static ModAssistant.Http;
-
-namespace ModAssistant.API
-{
- public class BeatSaver
- {
- private const string BeatSaverURLPrefix = "https://beatsaver.com";
- private static readonly string CustomSongsFolder = Path.Combine("Beat Saber_Data", "CustomLevels");
- private const bool BypassDownloadCounter = false;
-
- public static async Task GetFromKey(string Key, bool showNotification = true)
- {
- if (showNotification && App.OCIWindow != "No") OneClickInstaller.Status.Show();
- return await GetMap(Key, "key", showNotification);
- }
-
- public static async Task GetFromHash(string Hash, bool showNotification = true)
- {
- if (showNotification && App.OCIWindow != "No") OneClickInstaller.Status.Show();
- return await GetMap(Hash, "hash", showNotification);
- }
-
- private static async Task GetMap(string id, string type, bool showNotification)
- {
- string urlSegment;
- switch (type)
- {
- case "hash":
- urlSegment = "/api/maps/by-hash/";
- break;
- case "key":
- urlSegment = "/api/maps/detail/";
- break;
- default:
- return null;
- }
-
- BeatSaverMap map = new BeatSaverMap
- {
- Success = false
- };
-
- if (showNotification) Utils.SetMessage($"{string.Format((string)Application.Current.FindResource("OneClick:Installing"), id)}");
- try
- {
- BeatSaverApiResponse beatsaver = await GetResponse(BeatSaverURLPrefix + urlSegment + id);
- if (beatsaver != null && beatsaver.map != null)
- {
- map.response = beatsaver;
- map.Name = await InstallMap(beatsaver.map, showNotification);
- map.Success = true;
- }
- }
- catch (Exception e)
- {
- ModAssistant.Utils.Log($"Failed downloading BeatSaver map: {id} | Error: {e.Message}", "ERROR");
- Utils.SetMessage($"{string.Format((string)Application.Current.FindResource("OneClick:Failed"), (map.Name ?? id))}");
- App.CloseWindowOnFinish = false;
- }
- return map;
- }
-
- private static async Task GetResponse(string url, bool showNotification = true, int retries = 3)
- {
- if (retries == 0)
- {
- ModAssistant.Utils.Log($"Max tries reached: Skipping {url}", "ERROR");
- Utils.SetMessage($"{string.Format((string)Application.Current.FindResource("OneClick:RatelimitSkip"), url)}");
- App.CloseWindowOnFinish = false;
- throw new Exception("Max retries allowed");
- }
-
- BeatSaverApiResponse response = new BeatSaverApiResponse();
- try
- {
- var resp = await HttpClient.GetAsync(url);
- response.statusCode = resp.StatusCode;
- response.ratelimit = GetRatelimit(resp.Headers);
- string body = await resp.Content.ReadAsStringAsync();
-
- if ((int)resp.StatusCode == 429)
- {
- Utils.SetMessage($"{string.Format((string)Application.Current.FindResource("OneClick:RatelimitHit"), response.ratelimit.ResetTime.ToLocalTime())}");
- await response.ratelimit.Wait();
- return await GetResponse(url, showNotification, retries - 1);
- }
-
- if (response.statusCode == HttpStatusCode.OK)
- {
- response.map = JsonSerializer.Deserialize(body);
- return response;
- }
- else
- {
- Utils.SetMessage($"{string.Format((string)Application.Current.FindResource("OneClick:Failed"), url)}");
- App.CloseWindowOnFinish = false;
- return response;
- }
- }
- catch (Exception e)
- {
- if (showNotification)
- {
- MessageBox.Show($"{Application.Current.FindResource("OneClick:MapDownloadFailed")}\n\n" + e);
- }
- return null;
- }
- }
-
- public static async Task InstallMap(BeatSaverApiResponseMap Map, bool showNotification = true)
- {
- string zip = Path.Combine(Utils.BeatSaberPath, CustomSongsFolder, Map.hash) + ".zip";
- string mapName = string.Concat(($"{Map.key} ({Map.metadata.songName} - {Map.metadata.levelAuthorName})")
- .Split(ModAssistant.Utils.Constants.IllegalCharacters));
- string directory = Path.Combine(Utils.BeatSaberPath, CustomSongsFolder, mapName);
-
-#pragma warning disable CS0162 // Unreachable code detected
- if (BypassDownloadCounter)
- {
- await Utils.DownloadAsset(BeatSaverURLPrefix + Map.directDownload, CustomSongsFolder, Map.hash + ".zip", mapName, showNotification, true);
- }
- else
- {
- await Utils.DownloadAsset(BeatSaverURLPrefix + Map.downloadURL, CustomSongsFolder, Map.hash + ".zip", mapName, showNotification, true);
- }
-#pragma warning restore CS0162 // Unreachable code detected
-
- if (File.Exists(zip))
- {
- string mimeType = MimeMapping.GetMimeMapping(zip);
-
- if (!mimeType.StartsWith("application/x-zip"))
- {
- ModAssistant.Utils.Log($"Failed extracting BeatSaver map: {zip} \n| Content: {string.Join("\n", File.ReadAllLines(zip))}", "ERROR");
- throw new Exception("File not a zip.");
- }
-
- try
- {
- using (FileStream stream = new FileStream(zip, FileMode.Open))
- using (ZipArchive archive = new ZipArchive(stream))
- {
- foreach (ZipArchiveEntry file in archive.Entries)
- {
- string fileDirectory = Path.GetDirectoryName(Path.Combine(directory, file.FullName));
- if (!Directory.Exists(fileDirectory))
- {
- Directory.CreateDirectory(fileDirectory);
- }
-
- if (!string.IsNullOrEmpty(file.Name))
- {
- file.ExtractToFile(Path.Combine(directory, file.FullName), true);
- }
- }
- }
- }
- catch (Exception e)
- {
- File.Delete(zip);
- ModAssistant.Utils.Log($"Failed extracting BeatSaver map: {zip} | Error: {e} \n| Content: {string.Join("\n", File.ReadAllLines(zip))}", "ERROR");
- throw new Exception("File extraction failed.");
- }
- File.Delete(zip);
- }
- else
- {
- if (showNotification)
- {
- string line1 = (string)Application.Current.FindResource("OneClick:SongDownload:Failed");
- string line2 = (string)Application.Current.FindResource("OneClick:SongDownload:NetworkIssues");
- string title = (string)Application.Current.FindResource("OneClick:SongDownload:FailedTitle");
- MessageBox.Show($"{line1}\n{line2}", title);
- }
- throw new Exception("Zip file not found.");
- }
- return mapName;
- }
-
- public static BeatSaverRatelimit GetRatelimit(HttpResponseHeaders headers)
- {
- BeatSaverRatelimit ratelimit = new BeatSaverRatelimit();
-
- if (headers.TryGetValues("Rate-Limit-Remaining", out IEnumerable _remaining))
- {
- var Remaining = _remaining.GetEnumerator();
- Remaining.MoveNext();
- ratelimit.Remaining = int.Parse(Remaining.Current);
- Remaining.Dispose();
- }
-
- if (headers.TryGetValues("Rate-Limit-Reset", out IEnumerable _reset))
- {
- var Reset = _reset.GetEnumerator();
- Reset.MoveNext();
- ratelimit.Reset = int.Parse(Reset.Current);
- ratelimit.ResetTime = UnixTimestampToDateTime((long)ratelimit.Reset);
- Reset.Dispose();
- }
-
- if (headers.TryGetValues("Rate-Limit-Total", out IEnumerable _total))
- {
- var Total = _total.GetEnumerator();
- Total.MoveNext();
- ratelimit.Total = int.Parse(Total.Current);
- Total.Dispose();
- }
-
- return ratelimit;
- }
-
- public static DateTime UnixTimestampToDateTime(double unixTime)
- {
- DateTime unixStart = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
- long unixTimeStampInTicks = (long)(unixTime * TimeSpan.TicksPerSecond);
- return new DateTime(unixStart.Ticks + unixTimeStampInTicks, DateTimeKind.Utc);
- }
-
- public static async Task Download(string url, string output, int retries = 3)
- {
- if (retries == 0)
- {
- Utils.SetMessage($"{string.Format((string)Application.Current.FindResource("OneClick:RatelimitSkip"), url)}");
- App.CloseWindowOnFinish = false;
- ModAssistant.Utils.Log($"Max tries reached: Couldn't download {url}", "ERROR");
- throw new Exception("Max retries allowed");
- }
-
- var resp = await HttpClient.GetAsync(url);
-
- if ((int)resp.StatusCode == 429)
- {
- var ratelimit = GetRatelimit(resp.Headers);
- Utils.SetMessage($"{string.Format((string)Application.Current.FindResource("OneClick:RatelimitHit"), ratelimit.ResetTime.ToLocalTime())}");
-
- await ratelimit.Wait();
- await Download(url, output, retries - 1);
- }
-
- using (var stream = await resp.Content.ReadAsStreamAsync())
- using (var fs = new FileStream(output, FileMode.OpenOrCreate, FileAccess.Write))
- {
- await stream.CopyToAsync(fs);
- }
- }
-
-#pragma warning disable IDE1006 // Naming Styles
- public class BeatSaverMap
- {
- public BeatSaverApiResponse response { get; set; }
- public bool Success { get; set; }
- public string Name { get; set; }
- }
-
- public class BeatSaverApiResponse
- {
- public HttpStatusCode statusCode { get; set; }
- public BeatSaverRatelimit ratelimit { get; set; }
- public BeatSaverApiResponseMap map { get; set; }
- }
-
- public class BeatSaverRatelimit
- {
- public int? Remaining { get; set; }
- public int? Total { get; set; }
- public int? Reset { get; set; }
- public DateTime ResetTime { get; set; }
- public async Task Wait()
- {
- await Task.Delay(new TimeSpan(Math.Max(ResetTime.Ticks - DateTime.UtcNow.Ticks, 0)));
- }
- }
-
- public class BeatSaverApiResponseMap
- {
- public Metadata metadata { get; set; }
- public Stats stats { get; set; }
- public string description { get; set; }
- public DateTime? deletedAt { get; set; }
- public string _id { get; set; }
- public string key { get; set; }
- public string name { get; set; }
- public Uploader uploader { get; set; }
- public DateTime uploaded { get; set; }
- public string hash { get; set; }
- public string directDownload { get; set; }
- public string downloadURL { get; set; }
- public string coverURL { get; set; }
-
- public class Difficulties
- {
- public bool easy { get; set; }
- public bool normal { get; set; }
- public bool hard { get; set; }
- public bool expert { get; set; }
- public bool expertPlus { get; set; }
- }
-
- public class Metadata
- {
- public Difficulties difficulties { get; set; }
- public Characteristic[] characteristics { get; set; }
- public double duration { get; set; }
- public string songName { get; set; }
- public string songSubName { get; set; }
- public string songAuthorName { get; set; }
- public string levelAuthorName { get; set; }
- public double bpm { get; set; }
- }
-
- public class Characteristic
- {
- public string name { get; set; }
- public CharacteristicDifficulties difficulties { get; set; }
- }
-
- public class CharacteristicDifficulties
- {
- public Difficulty easy { get; set; }
- public Difficulty normal { get; set; }
- public Difficulty hard { get; set; }
- public Difficulty expert { get; set; }
- public Difficulty expertPlus { get; set; }
- }
-
- public class Difficulty
- {
- public double? duration { get; set; }
- public double? length { get; set; }
- public double bombs { get; set; }
- public double notes { get; set; }
- public double obstacles { get; set; }
- public double njs { get; set; }
- public double njsOffset { get; set; }
- }
-
- public class Stats
- {
- public int downloads { get; set; }
- public int plays { get; set; }
- public int downVotes { get; set; }
- public int upVotes { get; set; }
- public double heat { get; set; }
- public double rating { get; set; }
- }
-
- public class Uploader
- {
- public string _id { get; set; }
- public string username { get; set; }
- }
- }
- }
-}
-#pragma warning restore IDE1006 // Naming Styles
diff --git a/ModAssistant/Classes/External Interfaces/ModelSaber.cs b/ModAssistant/Classes/External Interfaces/ModelSaber.cs
deleted file mode 100644
index f3da0828..00000000
--- a/ModAssistant/Classes/External Interfaces/ModelSaber.cs
+++ /dev/null
@@ -1,34 +0,0 @@
-using System;
-using System.Threading.Tasks;
-
-namespace ModAssistant.API
-{
- class ModelSaber
- {
- private const string ModelSaberURLPrefix = "https://modelsaber.com/files/";
- private const string CustomAvatarsFolder = "CustomAvatars";
- private const string CustomSabersFolder = "CustomSabers";
- private const string CustomPlatformsFolder = "CustomPlatforms";
- private const string CustomBloqsFolder = "CustomNotes";
-
- public static async Task GetModel(Uri uri)
- {
- switch (uri.Host)
- {
- case "avatar":
- await Utils.DownloadAsset(ModelSaberURLPrefix + uri.Host + uri.AbsolutePath, CustomAvatarsFolder);
- break;
- case "saber":
- await Utils.DownloadAsset(ModelSaberURLPrefix + uri.Host + uri.AbsolutePath, CustomSabersFolder);
- break;
- case "platform":
- await Utils.DownloadAsset(ModelSaberURLPrefix + uri.Host + uri.AbsolutePath, CustomPlatformsFolder);
- break;
- case "bloq":
- await Utils.DownloadAsset(ModelSaberURLPrefix + uri.Host + uri.AbsolutePath, CustomBloqsFolder);
- break;
- }
- }
-
- }
-}
diff --git a/ModAssistant/Classes/External Interfaces/Playlists.cs b/ModAssistant/Classes/External Interfaces/Playlists.cs
deleted file mode 100644
index 93f3d5a0..00000000
--- a/ModAssistant/Classes/External Interfaces/Playlists.cs
+++ /dev/null
@@ -1,126 +0,0 @@
-using System;
-using System.IO;
-using System.Linq;
-using System.Threading.Tasks;
-using System.Web;
-using System.Windows;
-using static ModAssistant.Http;
-
-namespace ModAssistant.API
-{
- public class Playlists
- {
- private const string BSaberURLPrefix = "https://bsaber.com/PlaylistAPI/";
- private const string PlaylistsFolder = "Playlists";
- private static readonly string BeatSaberPath = Utils.BeatSaberPath;
-
- public static void CreatePlaylistsFolder()
- {
- string playlistsPath = Path.Combine(BeatSaberPath, PlaylistsFolder);
- Directory.CreateDirectory(playlistsPath);
- }
-
- public static async Task DownloadAll(Uri uri)
- {
- switch (uri.Host)
- {
- case "playlist":
- Uri url = new Uri($"{uri.LocalPath.Trim('/')}");
- string filename = await Get(url);
- await DownloadFrom(filename);
- break;
- }
- }
-
- public static async Task Get(Uri url)
- {
- string filename = HttpUtility.UrlDecode(url.Segments.Last());
- string absolutePath = Path.Combine(BeatSaberPath, PlaylistsFolder, filename);
- try
- {
- CreatePlaylistsFolder();
- await Utils.DownloadAsset(url.ToString(), PlaylistsFolder, filename);
-
- return absolutePath;
- }
- catch
- {
- return null;
- }
- }
-
- public static async Task DownloadFrom(string file)
- {
- CreatePlaylistsFolder();
-
- if (Path.Combine(BeatSaberPath, PlaylistsFolder) != Path.GetDirectoryName(file))
- {
- string destination = Path.Combine(BeatSaberPath, PlaylistsFolder, Path.GetFileName(file));
- File.Copy(file, destination, true);
- }
-
- int Errors = 0;
- int Minimum = 0;
- int Value = 0;
-
- Playlist playlist = JsonSerializer.Deserialize(File.ReadAllText(file));
- int Maximum = playlist.songs.Length;
-
- foreach (Playlist.Song song in playlist.songs)
- {
- API.BeatSaver.BeatSaverMap response = new BeatSaver.BeatSaverMap();
- if (!string.IsNullOrEmpty(song.hash))
- {
- response = await BeatSaver.GetFromHash(song.hash, false);
- }
- else if (!string.IsNullOrEmpty(song.key))
- {
- response = await BeatSaver.GetFromKey(song.key, false);
- }
- Value++;
-
- if (response.Success)
- {
- Utils.SetMessage($"{string.Format((string)Application.Current.FindResource("Options:InstallingPlaylist"), TextProgress(Minimum, Maximum, Value))} {response.Name}");
- }
- else
- {
- Utils.SetMessage($"{string.Format((string)Application.Current.FindResource("Options:FailedPlaylistSong"), song.songName)}");
- ModAssistant.Utils.Log($"Failed installing BeatSaver map: {song.songName} | {song.key} | {song.hash} | ({response?.response?.ratelimit?.Remaining})");
- App.CloseWindowOnFinish = false;
- await Task.Delay(3 * 1000);
- Errors++;
- }
- }
- Utils.SetMessage($"{string.Format((string)Application.Current.FindResource("Options:FinishedPlaylist"), Errors, playlist.playlistTitle)}");
- }
-
- private static string TextProgress(int min, int max, int value)
- {
- if (max == value)
- {
- return $" {string.Concat(Enumerable.Repeat("▒", 10))} [{value}/{max}]";
- }
- int interval = (int)Math.Floor((double)value / (((double)max - (double)min) / (double)10));
- return $" {string.Concat(Enumerable.Repeat("▒", interval))}{string.Concat(Enumerable.Repeat("░", 10 - interval))} [{value}/{max}]";
- }
-
-#pragma warning disable IDE1006 // Naming Styles
- class Playlist
- {
- public string playlistTitle { get; set; }
- public string playlistAuthor { get; set; }
- public string image { get; set; }
- public Song[] songs { get; set; }
-
- public class Song
- {
- public string key { get; set; }
- public string hash { get; set; }
- public string songName { get; set; }
- public string uploader { get; set; }
- }
- }
- }
-}
-#pragma warning restore IDE1006 // Naming Styles
diff --git a/ModAssistant/Classes/External Interfaces/Utils.cs b/ModAssistant/Classes/External Interfaces/Utils.cs
deleted file mode 100644
index e9a0cbf5..00000000
--- a/ModAssistant/Classes/External Interfaces/Utils.cs
+++ /dev/null
@@ -1,79 +0,0 @@
-using System;
-using System.IO;
-using System.Linq;
-using System.Net;
-using System.Threading.Tasks;
-using System.Windows;
-
-namespace ModAssistant.API
-{
- public class Utils
- {
- public static readonly string BeatSaberPath = App.BeatSaberInstallDirectory;
-
- public static void SetMessage(string message)
- {
- if (App.OCIWindow != "No")
- {
- if (App.window == null)
- {
- if (App.OCIWindow == "No") OneClickStatus.Instance = null;
- if (OneClickStatus.Instance == null) return;
-
- OneClickStatus.Instance.MainText = message;
- }
- else
- {
- MainWindow.Instance.MainText = message;
- }
- }
- }
-
- public static async Task DownloadAsset(string link, string folder, bool showNotifcation, string fileName = null)
- {
- await DownloadAsset(link, folder, fileName, null, showNotifcation);
- }
-
- public static async Task DownloadAsset(string link, string folder, string fileName = null, string displayName = null)
- {
- await DownloadAsset(link, folder, fileName, displayName, true);
- }
-
- public static async Task DownloadAsset(string link, string folder, string fileName, string displayName, bool showNotification, bool beatsaver = false)
- {
- if (string.IsNullOrEmpty(BeatSaberPath))
- {
- ModAssistant.Utils.SendNotify((string)Application.Current.FindResource("OneClick:InstallDirNotFound"));
- }
- try
- {
- Directory.CreateDirectory(Path.Combine(BeatSaberPath, folder));
- if (string.IsNullOrEmpty(fileName))
- {
- fileName = WebUtility.UrlDecode(Path.Combine(BeatSaberPath, folder, new Uri(link).Segments.Last()));
- }
- else
- {
- fileName = WebUtility.UrlDecode(Path.Combine(BeatSaberPath, folder, fileName));
- }
- if (string.IsNullOrEmpty(displayName))
- {
- displayName = Path.GetFileNameWithoutExtension(fileName);
- }
-
- if (beatsaver) await BeatSaver.Download(link, fileName);
- else await ModAssistant.Utils.Download(link, fileName);
-
- if (showNotification)
- {
- SetMessage(string.Format((string)Application.Current.FindResource("OneClick:InstalledAsset"), displayName));
- }
- }
- catch
- {
- SetMessage((string)Application.Current.FindResource("OneClick:AssetInstallFailed"));
- App.CloseWindowOnFinish = false;
- }
- }
- }
-}
diff --git a/ModAssistant/Classes/Mod.cs b/ModAssistant/Classes/Mod.cs
deleted file mode 100644
index 5b526fa4..00000000
--- a/ModAssistant/Classes/Mod.cs
+++ /dev/null
@@ -1,53 +0,0 @@
-using System.Collections.Generic;
-using ModAssistant.Pages;
-
-namespace ModAssistant
-{
- public class Mod
- {
- public string name;
- public string version;
- public string gameVersion;
- public string _id;
- public string status;
- public string authorId;
- public string uploadedDate;
- public string updatedDate;
- public Author author;
- public string description;
- public string link;
- public string category;
- public DownloadLink[] downloads;
- public bool required;
- public Dependency[] dependencies;
- public List Dependents = new List();
- public Mods.ModListItem ListItem;
-
- public class Author
- {
- public string _id;
- public string username;
- public string lastLogin;
- }
-
- public class DownloadLink
- {
- public string type;
- public string url;
- public FileHashes[] hashMd5;
- }
-
- public class FileHashes
- {
- public string hash;
- public string file;
- }
-
- public class Dependency
- {
- public string name;
- public string _id;
- public Mod Mod;
- }
- }
-}
diff --git a/ModAssistant/Classes/OneClickInstaller.cs b/ModAssistant/Classes/OneClickInstaller.cs
deleted file mode 100644
index 6ab19d2b..00000000
--- a/ModAssistant/Classes/OneClickInstaller.cs
+++ /dev/null
@@ -1,151 +0,0 @@
-using System;
-using System.Linq;
-using System.Threading.Tasks;
-using System.Windows;
-using Microsoft.Win32;
-
-namespace ModAssistant
-{
- class OneClickInstaller
- {
- private static readonly string[] Protocols = new[] { "modelsaber", "beatsaver", "bsplaylist" };
- public static OneClickStatus Status = new OneClickStatus();
-
- public static async Task InstallAsset(string link)
- {
- Uri uri = new Uri(link);
- if (!Protocols.Contains(uri.Scheme)) return;
-
- switch (uri.Scheme)
- {
- case "modelsaber":
- await ModelSaber(uri);
- break;
- case "beatsaver":
- await BeatSaver(uri);
- break;
- case "bsplaylist":
- await Playlist(uri);
- break;
- }
- if (App.OCIWindow != "No")
- {
- Status.StopRotation();
- API.Utils.SetMessage((string)Application.Current.FindResource("OneClick:Done"));
- }
- if (App.OCIWindow == "Close")
- {
- Application.Current.Shutdown();
- }
- }
-
- private static async Task BeatSaver(Uri uri)
- {
- string Key = uri.Host;
- await API.BeatSaver.GetFromKey(Key);
- }
-
- private static async Task ModelSaber(Uri uri)
- {
- if (App.OCIWindow != "No") Status.Show();
- API.Utils.SetMessage($"{string.Format((string)Application.Current.FindResource("OneClick:Installing"), System.Web.HttpUtility.UrlDecode(uri.Segments.Last()))}");
- await API.ModelSaber.GetModel(uri);
- }
-
- private static async Task Playlist(Uri uri)
- {
- if (App.OCIWindow != "No") Status.Show();
- await API.Playlists.DownloadAll(uri);
- }
-
- public static void Register(string Protocol, bool Background = false, string Description = null)
- {
- if (IsRegistered(Protocol) == true)
- return;
- try
- {
- if (Utils.IsAdmin)
- {
- RegistryKey ProtocolKey = Registry.ClassesRoot.OpenSubKey(Protocol, true);
- if (ProtocolKey == null)
- ProtocolKey = Registry.ClassesRoot.CreateSubKey(Protocol, true);
- RegistryKey CommandKey = ProtocolKey.CreateSubKey(@"shell\open\command", true);
- if (CommandKey == null)
- CommandKey = Registry.ClassesRoot.CreateSubKey(@"shell\open\command", true);
-
- if (ProtocolKey.GetValue("OneClick-Provider", "").ToString() != "ModAssistant")
- {
- if (Description != null)
- {
- ProtocolKey.SetValue("", Description, RegistryValueKind.String);
- }
- ProtocolKey.SetValue("URL Protocol", "", RegistryValueKind.String);
- ProtocolKey.SetValue("OneClick-Provider", "ModAssistant", RegistryValueKind.String);
- CommandKey.SetValue("", $"\"{Utils.ExePath}\" \"--install\" \"%1\"");
- }
-
- Utils.SendNotify(string.Format((string)Application.Current.FindResource("OneClick:ProtocolHandler:Registered"), Protocol));
- }
- else
- {
- Utils.StartAsAdmin($"\"--register\" \"{Protocol}\" \"{Description}\"");
- }
- }
- catch (Exception e)
- {
- MessageBox.Show(e.ToString());
- }
-
- if (Background)
- Application.Current.Shutdown();
- else
- Pages.Options.Instance.UpdateHandlerStatus();
- }
-
- public static void Unregister(string Protocol, bool Background = false)
- {
- if (IsRegistered(Protocol) == false)
- return;
- try
- {
- if (Utils.IsAdmin)
- {
- using (RegistryKey ProtocolKey = Registry.ClassesRoot.OpenSubKey(Protocol, true))
- {
- if (ProtocolKey != null
- && ProtocolKey.GetValue("OneClick-Provider", "").ToString() == "ModAssistant")
- {
- Registry.ClassesRoot.DeleteSubKeyTree(Protocol);
- }
- }
-
- Utils.SendNotify(string.Format((string)Application.Current.FindResource("OneClick:ProtocolHandler:Unregistered"), Protocol));
- }
- else
- {
- Utils.StartAsAdmin($"\"--unregister\" \"{Protocol}\"");
- }
-
- }
- catch (Exception e)
- {
- MessageBox.Show(e.ToString());
- }
-
- if (Background)
- Application.Current.Shutdown();
- else
- Pages.Options.Instance.UpdateHandlerStatus();
- }
-
- public static bool IsRegistered(string Protocol)
- {
- RegistryKey ProtocolKey = Registry.ClassesRoot.OpenSubKey(Protocol);
- if (ProtocolKey != null
- && ProtocolKey.GetValue("OneClick-Provider", "").ToString() == "ModAssistant")
- return true;
- else
- return false;
- }
- }
-}
diff --git a/ModAssistant/Localisation/de.xaml b/ModAssistant/Localisation/de.xaml
deleted file mode 100644
index aadf7fed..00000000
--- a/ModAssistant/Localisation/de.xaml
+++ /dev/null
@@ -1,252 +0,0 @@
-
- i18n:de-DE
-
-
- Der Beat Saber Installationsordner konnte nicht gefunden werden!
- Drücke OK um es erneut zu versuchen, oder Abbrechen um das Programm zu beenden.
- Ungültiges Argument! '{0}' benötigt eine Option.
- Unbekanntes Argument. Beende Mod Assistant.
- Eine nicht behandelte Ausnahme ist aufgetreten
- Ausnahme
-
-
- Mod Assistant
- Intro
- Mods
- Über
- Optionen
- Spiel Version
- Version
- Mod Info
- Installieren/
- Aktualisieren
- Spielversion konnte nicht geladen werden, der Mods Tab wird nicht verfügbar sein.
- Neue Spielversion gefunden!
- Es scheint ein Spiel Update gegeben zu haben.
- Bitte prüfe ob unten links die richtige Version ausgewählt ist!
- Kein Mod ausgewählt!
- {0} hat keine Informationsseite.
-
-
- Intro
- Willkommen bei Mod Assistant
- Bitte lies diese Seite vollständig und aufmerksam!
-
- Durch Nutzung des Programms wird bestätigt, dass folgende Bedingungen gelesen und akzeptiert wurden:
-
-
- Beat Saber
- unterstützt normalerweise keine Mods. Das heißt:
-
-
- Mods
- werden nach jedem Update nicht mehr funktionieren. Dies ist normal, und
- die Schuld liegt nicht bei Beat Games.
-
-
- Mods
- werden Fehler und Leistungsprobleme verursachen. Die Schuld
- liegt nicht bei Beat Games.
-
-
- Mods werden
- kostenlos von Leuten in deren
- Freizeit erstellt. Bitte sei geduldig und verständnisvoll.
-
-
- Bitte gib KEINE schlechten Bewertungen weil die Mods nicht funktionieren. Die Schuld
- liegt nicht bei Beat Games.
- Sie versuchen nicht die Mods zu unterbinden.
-
-
- Wenn ich weiterhin schlecht Bewertungen
- wegen nicht funktionierenden Mods sehe,
-
- Werde ich persönlich die Mods mit einem rostigen Löffel töten
-
-
- Bitte lies den Einsteiger Leitfaden im
-
- Wiki
- .
-
- Annehmen
- Ablehnen
- Programm wird beendet: Du hast den Bedingungen nicht zugestimmt.
- Versionsliste konnte nicht geladen werden
- Mods Tab deaktiviert. Bitte Programm neu starten um es nochmal zu versuchen.
- Du kannst jetzt den Mods Tab benutzen!
-
-
- Mods
- Name
- Installiert
- Neuste
- Beschreibung
- Entfernen
- Entfernen
- Modliste konnte nicht geladen werden
- Prüfe installierte Mods
- Lade Mods
- Laden der Mods abgeschlossen
- Für diese Version von Beat Saber sind keine Mods verfügbar.
- Installiere {0}
- {0} installiert
- Mod Installation abgeschlossen
- Downloadlink für {0} konnte nicht gefunden werden
- {0} entfernen?
- Bist du dir sicher das du {0} entfernen möchtest?
- Dies kann die anderen Mods unbrauchbar machen
- Fehler beim Extrahieren von {0}, neuer Versuch in {1} Sekunden. ({2}/{3})
- Fehler beim Extrahieren von {0} nach {1} Versuchen, wird übersprungen. Dieser Mod funktioniert möglicherweise nicht richtig, also gehe auf eigenes Risiko vor
- Suchen...
- Deinstallieren von BSIPA ist fehlgeschlagen
- BSIPA Installation wurde nicht gefunden, Deinstallation wurde übersprungen.
-
-
- Über
- Über Mod Assistant
- Ich bin Assistant und ich habe Mod Assistant zum Verwalten von Mods nach folgenden Prinzipien erstellt:
- Einfachheit
- Portabilität
- Nur eine Datei
- Verantwortungsbewusster Umgang
-
- Wenn dir das Programm gefällt und du mich unterstützen möchtest, dann besuche meine
-
- Spendenseite
-
- oder mein
-
- Patreon
-
-
- Besonderer Dank ♥
- Spenden
- Kopf tätscheln
- Umarmungen
-
-
- Optionen
- Einstellungen
- Installationsordner
- Ordner wählen
- Ordner öffnen
- Ausgewählte Mods speichern
- Installierte Mods prüfen
- Installierte Mods auswählen
- Installierte Mods neu installieren
- OneClick™ Installation aktivieren
- BeatSaver
- ModelSaber
- Playlists
- Schließe Fenster wenn fertig
- Spiel-Typ
- Steam
- Oculus
- Werkzeuge
- Playlist installieren
- Installiere Playlist: {0}
- Titel fehlgeschlagen: {0}
- [{0} Fehler] Playlist Installation abgeschlossen: {1}
- Zeige OneClick Installations-Fenster
- Ja
- Schließen
- Nein
- Diagnose
- Log öffnen
- AppData öffnen
- BSIPA entfernen
- Mods entfernen
- Design
- Exportieren
- Log wird hochgeladen
- Log URL in die Zwischenablage kopiert!
- Log Hochladen fehlgeschlagen!
- Log Hochladen fehlgeschlagen!
- Log Datei konnte nicht zu Teknik hochgeladen werden, bitte nochmal versuchen oder die Datei manuell senden.
- Lade Liste der Mods
- Suche BSIPA Version
- BSIPA entfernt
- Alle Mods entfernen?
- Bist du dir sicher das du ALLE Mods entfernen möchtest?
- Dies kann nicht rückgängig gemacht werden.
- Alle Mods entfernt
- Aktuelles Design wurde entfernt, gehe zurück zum Standart...
- Designs Ordner nicht gefunden! Versuche die Vorlage zu exportieren...
- AppData Ordner nicht gefunden! Versuche dein Spiel zu starten.
-
-
- Lade Mods
-
-
- Ungültig
- Ungültige Installation erkannt
- Die SPielinstallation ist beschädigt oder anderweitig ungültig
- Dies kann passieren wenn dein Spiel eine Raubkopie ist oder eine Raubkopie über eine legitime Version kopiert wurde
-
- Falls dein Spiel eine Raubkopie ist,
- bitte kaufe das Spiel
-
- HIER
-
- .
-
-
- Wenn dein Spiel
- keine Raubkopie ist, bitte
-
- mach eine saubere Neuinstallation
- .
-
-
- Falls das nicht hilft, frage im
- #pc-help Kanal in der
-
- BSMG
- .
-
- Falls du eine Raubkopie hattest aber das Spiel jetzt gekauft hast
- Ordner auswählen
- Muss Mod Assistant neu gestartet werden wenn eine legitime Version installiert wurde
-
-
- Map Details konnten nicht geladen werden.
- Titel konnte nicht geladen werden.
- Titel konnte nicht geladen werden.
- Möglicherweise gibt es Probleme mit BeatSaver oder deiner Internetverbindung.
- Herunterladen der Titel ZIP fehlgeschlagen
- Beat Saber Installationspfad nicht gefunden.
- Installiert: {0}
- Installation fehlgeschlagen.
- {0} OneClick™ Installation Handler registriert!
- {0} OneClick™ Installation Handler entfernt!
- Installiere: {0}
- Maximale Anzahl an Versuchen erreicht: Überspringe {0}
- Wiederholungs-Limit erreicht. Setze fort in {0}
- Download fehlgeschlagen: {0}
- Abgeschlossen
-
-
- Design nicht gefunden, gehe zurück zum Standard Design...
- Design gesetzt auf: {0}.
- {0} existiert nicht.
- Designvorlage "{0}" in Design Ordner gespeichert.
- Designvorlage existiert bereits!
- Fehler beim Laden der .xaml Datei von Design {0}: {1}
-
-
- Konnte nicht auf Aktualisierungen prüfen.
- Konnte Aktualisierung nicht herunterladen.
-
-
- Mod Assistant
- Beat Saber Installationsordner konnte nicht erkannt werden. Bitte manuell auswählen.
- Mod Assistant muss diese Aufgabe mit Administrator Rechten ausführen. Bitte nochmal versuchen.
- Wähle den Beat Saber Installationsordner aus
- Ordner konnte nicht geöffnet werden: {0}
-
diff --git a/ModAssistant/Localisation/fr.xaml b/ModAssistant/Localisation/fr.xaml
deleted file mode 100644
index 6f962837..00000000
--- a/ModAssistant/Localisation/fr.xaml
+++ /dev/null
@@ -1,258 +0,0 @@
-
- i18n:fr-FR
-
-
- Impossible de trouver le dossier d'installation de Beat Saber !
- Appuyez sur OK pour réessayer, ou Annuler pour fermer l'application.
- Argument invalide ! '{0}' nécessite une option.
- Argument non reconnu. Fermeture de Mod Assistant.
- Une exception non gérée est survenue
- Exception
-
-
- Mod Assistant
- Intro
- Mods
- À propos
- Options
- Version du jeu
- Version
- Info sur le mod
- Installer
- ou Mettre à jour
- Impossible de charger les versions du jeu, l'onglet Mods sera indisponible.
- Nouvelle version du jeu détectée !
- Il semble que le jeu a été mis à jour.
- Veuillez vous assurer que la bonne version soit sélectionnée en bas à gauche !
- Aucun mod sélectionné !
- {0} n'a pas de page informative.
-
-
- Intro
- Bienvenue sur Mod Assistant
- Veuillez lire cette page entièrement et avec attention
-
- En utilisant ce programme, vous attestez que vous avez lu et accepté les modalités suivantes :
-
-
- Beat Saber
- ne supporte
- pas nativement les mods. Cela signifie que :
-
-
- Les mods
- dysfonctionneront à chaque mise à jour. C'est normal, et ce
- n'est
- pas la faute de Beat Games.
-
-
- Les mods
- causeront des bugs et des problèmes de performance. Ce
- n'est
- pas la faute de Beat Games.
-
-
- Les mods sont créés
- gratuitement par des gens sur leur
- temps libre. Veuillez être patient et compréhensif.
-
-
- NE laissez
- PAS de commentaires négatifs parce que les mods ne fonctionnent plus. Ce
- n'est
- pas la faute de Beat Games.
- Ils n'essaient pas de faire disparaître les mods.
-
-
- Si je continue de voir des gens laisser des commentaires négatifs
- parce que les mods ne fonctionnent plus,
-
- J'irai personnellement liquider les mods avec une cuillère rouillée
-
-
- Veuillez lire le Guide du Débutant sur le
-
- Wiki
- .
-
- J'accepte
- Je refuse
- Fermeture de l'application : vous n'avez pas accepté les modalités et conditions.
- Impossible de télécharger la liste des versions
- Onglet Mods désactivé. Veuillez relancer pour réessayer.
- Vous pouvez désormais utiliser l'onglet Mods !
-
-
- Mods
- Nom
- Installé
- Récent
- Description
- Désinstaller
- Désinstaller
- Impossible de charger la liste des mods
- Vérification des mods installés
- Chargement des mods
- Fin : mods chargés
- Aucun mod n'est disponible pour cette version de Beat Saber
- Installation de {0}
- {0} installé
- Fin : mods installés
- Impossible de trouver le lien de téléchargement de {0}
- Désinstaller {0} ?
- Êtes-vous sûr de vouloir supprimer {0} ?
- Cela pourrait faire dysfonctionner d'autres mods installés
- Échec de l'extraction de {0}, nouvelle tentative dans {1} secondes. ({2}/{3})
- Échec de l'extraction de {0} après le maximum de tentatives ({1}), abandon. Ce mod pourrait ne pas fonctionner correctement, continuez à vos propres risques
- Recherche...
- Échec de la désinstallation de BSIPA
- BSIPA installation pas trouvée, opération de désinstallation ignorée.
-
-
- À propos
- À propos de Mod Assistant
- Je suis Assistant, et je réalise Mod Assistant pour l'assistance aux mods, avec quelques principes en tête :
- Simplicité
- Portabilité
- Exécutable unique
- Utilisation responsable
-
- Si vous aimez ce programme et souhaitez me soutenir, veuillez visiter ma
-
- page de don
-
- ou mon
-
- Patreon
-
-
- Remerciements particuliers ♥
- Faire un don
- Caresses-tête
- Câlins
-
-
- Options
- Paramètres
- Dossier d'installation
- Sélectionner un dossier
- Ouvrir le dossier
- Sauvegarder les mods sélectionnés
- Détecter les mods installés
- Sélectionner les mods installés
- Réinstaller les mods installés
- Activer les installations OneClick™
- BeatSaver
- ModelSaber
- Playlists
- Fermer la fenêtre à la fin
- Type du jeu
- Steam
- Oculus
- Outils
- Installer une playlist
- Installation de la playlist : {0}
- Échec de la musique : {0}
- [{0} échecs] Installation de la playlist terminée : {1}
- Afficher la fenêtre de l'installateur OneClick
- Oui
- Fermer
- Non
- Diagnostic
- Ouvrir les logs
- Ouvrir AppData
- Désinstaller BSIPA
- Supprimer tous les mods
- Thème de l'application
- Exporter le modèle
- Envoi des logs
- URL des logs copiée dans le presse-papier !
- L'envoi des logs a échoué
- L'envoi des logs a échoué !
- Impossible d'envoyer le fichier de logs à Teknik, veuillez réessayer ou envoyer le fichier manuellement.
- Récupération de la liste des mods
- Découverte de la version de BSIPA
- BSIPA désinstallé
- Désinstaller les mods ?
- Êtes-vous sûr de vouloir supprimer TOUS les mods ?
- Cela ne peut pas être annulé.
- Tous les mods ont été désinstallés
- Le thème actuel a été supprimé, passage au thème par défaut...
- Dossier Themes non trouvé ! Essayez d'exporter le modèle...
- Dossier AppData non trouvé ! Essayez de lancer votre jeu.
-
-
- Chargement des mods
-
-
- Invalide
- Installation invalide détectée
- Votre installation du jeu est corrompue sinon invalide
- Cela peut survenir si votre copie du jeu est piratée, ou si vous copiez une copie piratée sur votre installation légitime
-
- Si votre copie du jeu est piratée,
- veuillez acheter le jeu
-
- ICI
-
- .
-
-
- Si votre copie du jeu
- n'est
- pas piratée, veuillez
-
- faire une installation propre
- .
-
-
- Si cela n'a pas fonctionné, demandez de l'aide au support dans le canal textuel
- #pc-help dans
-
- BSMG
- .
-
- Si vous utilisiez une version piratée mais avez acheté le jeu depuis
- Sélectionner un dossier
- Vous devez relancer Mod Assistant après avoir choisi l'installation légitime
-
-
- Impossible de récupérer les détails de la map.
- Impossible de télécharger la musique.
- Impossible de télécharger la musique.
- Il pourrait y avoir des problèmes avec BeatSaver ou votre connexion Internet.
- Échec du téléchargement du ZIP de la musique
- Chemin de l'installation de Beat Saber non trouvé.
- Installé : {0}
- Échec de l'installation.
- {0} : gestionnaires d'installation OneClick™ inscrits !
- {0} : gestionnaires d'installation OneClick™ désinscrits !
- Installation de : {0}
- Maximum de tentatives atteint : {0} passé
- Limite atteinte. Reprise dans {0}
- Téléchargement échoué : {0}
- Fait
-
-
- Thème non trouvé, passage au thème par défaut...
- Thème défini sur {0}.
- {0} n'existe pas.
- Modèle du thème "{0}" sauvegardé dans le dossier Themes.
- Le modèle du thème existe déjà !
- Échec du chargement du fichier .xaml pour le thème {0} : {1}
-
-
- Impossible de vérifier les mises à jour.
- Impossible de télécharger la mise à jour.
-
-
- Mod Assistant
- Impossible de détecter le dossier d'installation de Beat Saber. Veuillez le sélectionner manuellement.
- Mod Assistant a besoin de lancer cette tâche en administrateur. Veuillez réessayer.
- Sélectionnez le dossier d'installation de Beat Saber
- Impossible d'ouvrir le dossier : {0}
-
diff --git a/ModAssistant/Localisation/it.xaml b/ModAssistant/Localisation/it.xaml
deleted file mode 100644
index b5667ad5..00000000
--- a/ModAssistant/Localisation/it.xaml
+++ /dev/null
@@ -1,252 +0,0 @@
-
- i18n:it-IT
-
-
- Impossibile trovare la directory d'installazione di Beat Saber
- Premi OK per riprovare, oppure Cancel per chiudere l'applicazione.
- Argomento non valido! '{0}' ha bisogno di un'opzione.
- Argomento non riconosciuto. Chiusura di Mod Assistant.
- Si è appena verificata un'eccezione non gestita
- Eccezione
-
-
- Mod Assistant
- Introduzione
- Mod
- Info
- Opzioni
- Versione del gioco
- Versione
- Info sulla mod
- Installa
- o Aggiorna
- Non è stato possibile caricare le versioni del gioco, il menù Mod non sarà disponibile.
- Rilevata nuova versione del gioco!
- Sembra che ci sia stato un aggiornamento del gioco.
- Per piacere verifica che sia selezionata la versione corretta nel menù in basso a sinistra
- Nessuna mod selezionata!
- {0} non ha una pagina di informazioni.
-
-
- Introduzione
- Benvenuto/a in Mod Assistant
- Ti invitiamo a leggere questa pagina fino alla fine e con cautela
-
- Utilizzando questo programma, attesti di accettare i seguenti termini:
-
-
- Beat Saber
- non supporta nativamente le mod. Ciò significa che:
-
-
- Le mod
- smetteranno di funzionare ad ogni aggiornamento. È assolutamente normale, e
- non è colpa di Beat Games.
-
-
- Le mod
- causeranno bug e problemi di prestazioni. Questa
- non è colpa di Beat Games.
-
-
- Le mod sono fatte
- gratuitamente da sviluppatori nel loro
- tempo libero. Ti invitiamo ad essere paziente e di comprendere la situazione.
-
-
- NON lasciare feedback negativi solo perche le mod smettono di funzionare. Questa
- non è colpa Beat Games.
- Non è loro intenzione "rompere" le mod.
-
-
- Se continuerò a trovare persone che lasciano feedback negativi
- perchè le mod smettono di funzionare,
-
- Mi assicurerò di farle sparire dalla circolazione
-
-
- Ti invitiamo a leggere la guida introduttiva sulla
-
- Wiki
- .
-
- Accetto
- Non accetto
- Chiusura dell'app: Non hai accettato i termini e condizioni.
- Non sono riuscito a scaricare la lista delle versioni
- Menù delle mod disattivato. Ti invitiamo a riprovare riavviando il programma.
- Ora puoi utilizzare il menù Mod!
-
-
- Mod
- Nome
- Versione installata
- Ultima versione
- Descrizione
- Disinstalla
- Disinstalla
- Impossibile caricare la lista delle mod
- Controllo le mod installate
- Carico le mod
- Caricamento delle mod completato
- No mods available for this version of Beat Saber
- Installazione di {0} in corso
- {0} installato
- Installazione delle mod completata
- Impossibile trovare il link di download per {0}
- Vuoi disinstallare {0}?
- Sei sicuro di voler disinstallare {0}?
- Continuando, altre mod potrebbero smettere di funzionare
- Impossibile estrarre {0}, prossimo tentativo in {1} secondi. ({2}/{3})
- Non sono riuscito ad estrarre {0} dopo aver raggiunto il numero massimo di tentativi ({1}), salto questa mod. Questa protrebbe anche non funzionare correttamente, quindi procedi a tuo rischio e pericolo
- Cerca...
- Failed to Uninstall BSIPA
- BSIPA installation not found, uninstall operation skipped.
-
-
- Info
- Info su Mod Assistant
- Ciao, sono Assistant, ed ho creato Mod Assistant per aiutarmi con le mod, con alcuni principi in testa:
- Semplicità d'uso
- Portabilità
- Un solo eseguibile
- Uso responsabile
-
- Se ti piace questo programma, e volessi supportarmi, puoi visitare la mia
-
- pagina delle donazioni
-
- oppure il mio
-
- Patreon
-
-
- Ringraziamenti speciali ♥
- Donazioni
- Carezze
- Abbracci
-
-
- Opzioni
- Impostazioni
- Directory d'Installazione
- Seleziona Cartella
- Apri Cartella
- Salva le Mod Selezionate
- Rileva le Mod Installate
- Seleziona le Mod Installate
- Reinstalla le Mod
- Attiva OneClick™
- BeatSaver
- ModelSaber
- Playlists
- Close window when finished
- Tipo di Installazione
- Steam
- Oculus
- Strumenti
- Installa Playlist
- Installazione Playlist: {0}
- Installazione canzone fallita: {0}
- [{0} fails] Installazione playlist terminata: {1}
- Show OneClick Installer Window
- Yes
- Close
- No
- Diagnostica
- Apri il Log
- Apri AppData
- Disinstalla BSIPA
- Rimuovi Tutte le Mod
- Tema dell'app
- Esporta Template
- Caricamento del Log
- URL del Log copiato negli Appunti!
- Caricamento del Log Fallito
- Caricamento del Log Fallito!
- Non sono riuscito a caricare il Log su Teknik, ti invitiamo a riprovare oppure puoi caricare il file manualmente.
- Prendo la lista delle Mod
- Cerco la versione di BSIPA
- BSIPA Disinstallato
- Disinstallare tutte le Mod?
- Sei sicuro di voler rimuovere TUTTE le mod?
- Questa azione non può essere annullata.
- Tutte le Mod sono state Disinstallate
- Il tema corrente è stato rimosso, torno al principale...
- Cartella del tema non trovata! Prova ad esportare il template...
- Cartella AppData non trovata! Prova ad avviare il gioco.
-
-
- Caricamento delle Mod
-
-
- Non Valida
- Installazione non valida rilevata
- La tua installazione di BeatSaber è corrotta o invalida
- Ciò accade se hai una copia piratata, oppure se hai installato una versione originale senza rimuovere quella piratata
-
- Se la tua copia è piratata,
- ti invitiamo a compare il gioco
-
- QUI
-
- .
-
-
- Se la tua copia del gioco
- non è piratata, ti invitiamo a
-
- reinstallare il gioco
- .
-
-
- Se questo non aiuta, puoi sempre chiedere aiuto nel canale
- #pc-help all'interno del
-
- Server Discord di BSMG
- .
-
- Se avevi la versione piratata, ma hai comprato il gioco
- Seleziona cartella
- Dovrai riavviare Mod Assistant dopo aver cambiato la directory d'Installazione
-
-
- Impossibile estrarre i dettagli della mappa.
- Impossibile scaricare il brano.
- Non sono riuscito a scaricare il brano.
- Ci possono essere problemi con BeatSaver e/o la tua connessione ad Internet.
- Download del file ZIP della mappa fallito
- Directory d'installazione di Beat Saber non trovata.
- Installato: {0}
- Non sono riuscito ad installare la mappa.
- {0} Registrazione dei gestori OneClick™ riuscita!
- {0} De-Regitrazione dei gestori OneClick™ riuscita!
- Installing: {0}
- Max tries reached: Skipping {0}
- Ratelimit hit. Resuming in {0}
- Download failed: {0}
- Done'd
-
-
- Tema non trovato, ritorno al tema predefinito...
- Tema impostato su {0}.
- {0} non esiste.
- Template del tema "{0}" salvato nella cartella Themes.
- Template del tema già esistente!
- Impossibile caricare il file .xaml per il tema {0}: {1}
-
-
- Impossibile controllare gli aggiornamenti.
- Impossibile scaricare l'aggiornamento.
-
-
- Mod Assistant
- Impossibile determinare automaticamente la directory d'installazione di Beat Saber. Ti invitiamo a selezionarla manualmente.
- Mod Assistant ha bisogno di eseguire questa azione come Amministratore. Ti invitiamo a riprovare.
- Seleziona la directory d'installazione di Beat Saber
- Impossibile aprire la seguente cartella: {0}
-
diff --git a/ModAssistant/Localisation/ko.xaml b/ModAssistant/Localisation/ko.xaml
deleted file mode 100644
index 40051927..00000000
--- a/ModAssistant/Localisation/ko.xaml
+++ /dev/null
@@ -1,251 +0,0 @@
-
- i18n:ko-KR
-
-
- 비트세이버 설치 폴더를 찾을 수 없습니다!
- OK를 눌러 재시도하거나, Cancel을 눌러 프로그램을 종료할 수 있습니다.
- 유효하지 않은 인수입니다! '{0}'은 옵션을 필요로 합니다.
- 인식할 수 없는 인수입니다. 모드 어시스턴트를 종료합니다.
- 처리되지 않은 예외가 발생했습니다.
- 예외
-
-
- 모드 어시스턴트
- 인트로
- 모드
- 정보
- 옵션
- 게임 버전
- 버전
- 모드 설명
- 설치
- 또는 업데이트
- 게임 버전을 로드할 수 없었기 때문에 모드 탭이 비활성화됩니다.
- 새로운 게임 버전이 감지되었습니다!
- 게임 업데이트가 있었던 것 같습니다.
- 왼쪽 아래에 선택된 버전이 맞는 버전인지 다시 한번 확인해주세요!
- 아무런 모드도 선택되지 않았습니다!
- {0}는 설명 페이지를 가지고 있지 않습니다.
-
-
- 인트로
- 모드 어시스턴트에 어서오세요
- 이 페이지를 정독해주세요
-
- 이 프로그램을 사용하려면 다음 약관을 읽고 동의해야 합니다:
-
-
- 비트세이버는 공식적으로 모드를
- 지원하지 않습니다.
-
-
- 이것은 모드들이 매 업데이트마다
- 망가진다는 것을 의미합니다. 이것은 일반적이며, Beat Games의 탓이
- 아닙니다.
-
-
- 모드들은 버그와 성능 문제를
- 발생시킵니다. 이것은 Beat Games의 탓이
- 아닙니다.
-
-
- 모드들은
- 무료로 만들어졌으며 모더들의
- 소중한 시간의 결과물입니다. 기다림을 갖고 이해해주세요.
-
-
- 모드가 망가진 것 때문에 게임에 대한 부정적인 의견을 남기지 마세요. 이것은 Beat Games의 탓이
- 아닙니다.
- Beat Games는 모드를 죽이려 하지 않습니다.
-
-
- 만일 사람들이 모드가
- 망가진 것을 이유로 부정적인 의견을 남기는 것이 계속된다면,
-
- 쥐도새도 모르게 모드가 사라질지도 모릅니다.
-
-
-
- 위키
- 에 있는 초보자 가이드를 읽어주세요.
-
- 동의합니다
- 거부합니다
- 어플리케이션을 종료합니다: 당신은 약관에 동의하지 않았습니다.
- 버전 리스트를 다운로드할 수 없었습니다
- 모드 탭이 비활성화되었습니다. 어시스턴트를 재시작해주세요.
- 이제 모드 탭을 사용할 수 있습니다!
-
-
- 모드
- 이름
- 설치 버전
- 최신 버전
- 설명
- 제거
- 제거
- 모드 목록을 불러올 수 없었습니다
- 설치된 모드들을 확인하고 있습니다
- 모드들을 불러오고 있습니다
- 모드들을 불러왔습니다
- 이 비트세이버 버전에선 사용할 수 있는 모드가 없습니다
- Installing {0}
- Installed {0}
- 모드 설치를 마쳤습니다
- {0}를 위한 다운로드 링크를 찾을 수 없었습니다
- {0}를 제거하시겠습니까?
- 정말로 {0}를 제거하시겠습니까?
- 다른 모드를 사용 못하게 만들 수도 있습니다.
- {0}를 추출하는데 실패했습니다. {1}초 안에 재시도합니다. ({2}/{3})
- ({1})회동안 {0}를 추출하는데 실패했습니다. 이 모드가 제대로 작동하지 않을지도 모릅니다
- 검색 중...
- BSIPA 제거에 실패하였습니다
- 설치된 BSIPA 를 찾을 수 없습니다. 제거하지 못했습니다.
-
-
- 정보
- 모드 어시스턴트에 대하여
- I'm Assistant, and I made Mod Assistant for mod assistance, with a few principles in mind:
- Simplicity
- Portability
- Single Executable
- Responsible use
-
- If you enjoy this program and would like to support me, please visit my
-
- donation page
-
- or my
-
- Patreon
-
-
- Special Thanks ♥
- Donate
- Headpats
- Hugs
-
-
- 옵션
- 설정
- 설치 폴더
- 폴더 선택
- 폴더 열기
- 선택된 모드 저장
- 설치된 모드 감지
- 설치된 모드 선택
- 설치된 모드 재설치
- OneClick™ 설치 활성화
- BeatSaver
- ModelSaber
- Playlists
- 완료되면 창 닫기
- 게임 유형
- Steam
- Oculus
- 도구
- 재생목록 설치
- 재생목록 설치 중 : {0}
- 실패한 노래: {0}
- [{0} 실패] 재생목록 설치 완료: {1}
- OneClick™ 설치 윈도우 보기
- 예
- 닫기
- 아니오
- 진단
- 로그 열기
- 앱데이터 열기
- BSIPA 삭제
- 모든 모드 삭제
- 어플리케이션 테마
- 템플릿 추출
- 로그 제출
- 로그 URL이 클립보드에 복사되었습니다!
- 로그 제출에 실패하였습니다
- 로그 제출에 실패하였습니다!
- Teknik에게 로그 파일을 제출하는데에 실패하였습니다. 재시도하거나 수동으로 파일을 보내주세요.
- 모드 목록을 얻는중입니다
- BSIPA 버전을 찾는중입니다
- BSIPA가 제거되었습니다
- 모든 모드를 제거할까요?
- 정말로 모든 모드를 제거할까요?
- 이것은 취소할 수 없습니다.
- 모든 모드가 제거되었습니다
- 현재 테마를 제거중입니다. 원래 테마로 돌아갑니다...
- 테마 폴더를 찾을 수 없습니다! 템플릿으로 내보냅니다...
- AppData 폴더를 찾을 수 없습니다! 게임을 실행해보세요.
-
-
- 모드 로딩중
-
-
- 잘못된 프로그램
- 잘못된 프로그램 설치가 감지되었습니다
- 게임이 손상되었거나 다른 이유로 잘못된 것 같습니다
- 이 오류는 게임이 불법적인 경로로 받아졌거나, 불법적인 경로로 받아진 게임을 당신의 정상적인 게임에 덮어씌워졌을 때에 발생합니다
-
- 만일 당신이 게임을 불법적인 경로로 받았다면,
-
-
- 여기서
-
- 게임을 구매해주세요.
-
-
- 만일 당신의 게임이 불법적인 경로로 받아진게
- 아니라면,
-
- 클린재설치
- 를 해주세요.
-
-
- 만일 그것들이 도움되지 않았다면,
-
- BSMG
- 의
- #pc-help 채널에서 도움을 구하세요.
-
- 만일 불법적인 경로로 받아진 게임을 가지고 있었다가 게임을 구매했다면,
- 폴더를 선택해주세요
- 정상적인 설치 이후 모드 어시스턴트를 재시작할 필요가 있습니다
-
-
- 맵의 세부정보를 얻어올 수 없었습니다.
- 곡을 받아올 수 없었습니다.
- 곡을 받아올 수 없었습니다.
- BeatSaver 또는 당신의 인터넷 연결에 문제가 있는 것 같습니다.
- 노래 ZIP 파일을 받는 데에 실패했습니다.
- 비트세이버 설치 폴더를 찾을 수 없었습니다.
- 설치됨: {0}
- 설치에 실패하였습니다.
- {0} OneClick™ 설치 관리자가 등록되었습니다!
- {0} OneClick™ 설치 관리자가 등록 취소되었습니다!
- 설치중: {0}
- 최대 시도 횟수 도달: {0} 건너뜀
- 요청 제한 도달. {0} 재시도
- 다운로드 실패: {0}
- 완료
-
-
- 테마를 찾을 수 없어, 기본 테마로 돌아갑니다...
- {0} 테마로 설정합니다.
- {0}는 존재하지 않습니다.
- 템플릿 테마 "{0}"가 템플릿 폴더에 저장되었습니다.
- 템플릿 테마가 이미 존재합니다!
- 테마를 위한 .xaml 파일을 불러오지 못했습니다 {0}: {1}
-
-
- 업데이트를 확인할 수 없습니다.
- 업데이트를 다운로드할 수 없습니다.
-
-
- 모드 어시스턴트
- 비트세이버 설치 폴더를 찾을 수 없습니다. 수동으로 선택해주세요.
- 모드 어시스턴트는 이 작업을 관리자 권한으로 실행하는 것을 필요로 합니다. 다시 시도해주세요.
- 비트세이버 설치 폴더를 선택해주세요
- 폴더를 열 수 없습니다: {0}
-
diff --git a/ModAssistant/Localisation/nb.xaml b/ModAssistant/Localisation/nb.xaml
deleted file mode 100644
index 0c7d1a36..00000000
--- a/ModAssistant/Localisation/nb.xaml
+++ /dev/null
@@ -1,255 +0,0 @@
-
- i18n:nb-NO
-
-
- Fant ikke installasjonsmappen til Beat Saber!
- Trykk Ok for å prøve igjen eller Avbryt for å avslutte.
- Feil parameter! '{0}' krever en verdi.
- Ukjent parameter. Lukker Mod Assistant.
- Et uhåndtert unntak har oppstått
- Unntak
-
-
- Mod Assistant
- Intro
- Mods
- Om
- Oppsett
- Spillversjon
- Versjon
- Modinformation
- Installer
- eller oppdater
- Klarte ikke hente spillversjonen, Mod-fanen er derfor ikke tilgjengelig.
- Ny spillversjon er tilgjengelig!
- Spillet ser ut til å ha fått en oppdatering.
- Dobbeltsjekk at rett versjon er valgt nede i venstre hjørnet!
- Ingen mods er valgt!
- {0} Denne mod har ingen informasjonsside.
-
-
- Intro
- Velkommen til Mod Assistant
- Vennligst les hele denne siden nøye.
-
- Ved å benytte dette programmet bekrefter du at du har lest og godkjent følgende vilkår:
-
-
- Beat Saber
- har ikke innebygget støtte for mods.
- Det betyr at:
-
-
- Mods kommer til å
- slutte å fungere etter hver oppdatering. Dette er standard og
- ikke Beat Games sin feil.
-
-
- Mods
- kommer til å
- forårsake feil og ytelseproblemer
- . Dette er
- ikke Beat Games sin feil.
-
-
- Mods utvikles
- gratis av mennesker på deres
- fritid. Vennligst ha tålmodighet og vis forståelse for det.
-
-
- IKKE SKRIV negative anmeldelser på grunn av at mods slutter å fungere. Det er
- ikke Beat Games sin feil.
- De prøver ikke å "drepe" mods.
-
-
- Hvis jeg ser mennesker som skriver negative anmeldelser
- på grunn av at mods slutter å fungere, kommer jeg
-
- personlig til å avlive hele moddingvirksomheten med en rusten skje.
-
-
- Vennligst les guiden på
-
- Wikisiden
- .
-
- Godkjenner
- Nekter
- Lukker programmet: Du godkjente ikke vilkårene.
- Klarte ikke å hente liste med versjoner.
- Mod-fanen er ikke tilgjengelig. Vennligst start på nytt for å prøve igjen.
- Du har nå tilgang til Mod-fanen!
-
-
- Mods
- Navn
- Installert
- Siste
- Beskrivelse
- Avinstallere
- Avinstaller
- Klarte ikke laste mod-listen
- Sjekker installerte mods
- Laster inn Mods
- Mods er lastet
- Ingen mods er tilgjengelig for denne versjonen av Beat Saber
- Installerer {0}
- Installerte {0}
- Mods er installert
- Fant ingen nedlastningslenke for {0}
- Avinstallere {0}?
- Er du sikker på at du vil avinstallere {0}?
- Dette kan forårsake at andre mods slutter å fungere
- Utpakking av {0} feilet, prøver igjen om {1} sekunder. ({2}/{3})
- Utpakking av {0} feilet alle forsøk ({1}), hopper over. Denne moden fungerer muligens ikke, så fortsett på eget ansvar.
- Søk...
- Klarte ikke avinstallere BSIPA
- Fant ingen BSIPA-installasjon, hopper over avinstallering.
-
-
- Om
- Om Mod Assistant
- Jeg er Assistant, og jeg lagde Mod Assistant for mod-assistanse med noen grunnleggende prinsipper:
- Enkelhet
- Portabilitet
- En enkeltstående, kjørbar fil
- Ansvarsfull bruk
-
- Om du liker programmet og vil støtte meg, kan du besøke min
-
- donasjonsside
-
- eller min
-
- Patreon
-
-
- Ekstra takk ♥
- Donere
- Klapp på hodet
- Klem
-
-
- Innstillinger
- Oppsett
- Installationsmappe
- Velg mappe
- Åpne mappe
- Lagre valgte mods
- Sjekk installerte mods
- Velg installerte mods
- Reinstaller installerte mods
- Aktiver OneClick™-installasjoner
- BeatSaver
- ModelSaber
- Spillelister
- Lukk vinduet når det er ferdig
- Spillvariant
- Steam
- Oculus
- Verktøy
- Installer spilleliste
- Installerer spillelisten: {0}
- Mislykket låt: {0}
- [{0} feil] Ferdig med å installere spillelister: {1}
- Vis OneClick installasjonsvindu
- Ja
- Lukk
- Nei
- Diagnostikkverktøy
- Åpne logg
- Åpne AppData
- Avinstallere BSIPA
- Fjern alle mods
- Applikasjonstema
- Eksporter mal
- Laster opp logg
- Logg-URL ble kopiert!
- Opplasting av logg feilet
- Opplasting av logg feilet!
- Klarte ikke laste opp loggen til Teknik, prøv igjen eller last den opp manuelt
- Henter mod-liste
- Leter etter BSIPA-versjon
- BSIPA ble avinstallert
- Avinstallere alle mods?
- Er du sikker på at du vil avinstallere alle mods?
- Du kan ikke angre.
- Alle mods er nå avinstallert.
- Temaet du benytter har blitt slettet, bytter til standardtema...
- Fant ikke temamappen! Prøv å eksportere malen...
- Fant ikke AppData-mappen! Prøv å starte spillet.
-
-
- Laster mods
-
-
- Ugyldig
- Fant en ugyldig installasjon
- Spillinstallasjonen din er brukket eller fungerer ikke av andre årsaker.
- Dette kan skje dersom du har en piratversjon av spillet eller kopiert en priatversjon over din gyldige versjon av spillet.
-
- Hvis du har en piratversjon,
- vennligst kjøp spillet
-
- HER
-
- .
-
-
- Om din kopi av spillet
- ikke er piratkopiert, vennligst
-
- installer spillet på nytt
- .
-
-
- Hvis ingenting hjelper kan du be om hjelp i
- #pc-help -kanalen i
-
- BSMG
- .
-
- Hvis du har spilt med en piratversjon før og kjøpt spillet i senere tid
- Velg mappe
- Du må starte Mod Assistant på nytt etter du har byttet til en legitim installasjon
-
-
- Kunne ikke laste kartdetaljer.
- Kunne ikke laste ned låta.
- Kunne ikke laste ned låta.
- Det kan være problemer med BeatSaver eller din internettoppkobling.
- Klarte ikke laste ned ZIP-filen til låta.
- Fant ikke installasjonsmappen til Beat Saber.
- Installerte: {0}
- Klarte ikke installere.
- {0} OneClick™-installeringshåndterer ble registrert!
- {0} OneClick™-installeringshåndterer ble avregistrert!
- Installerer: {0}
- Maks antall forsøk oppbrukt: hopper over {0}
- For mange forsøk på kort tid. Fortsetter om {0}
- Nedlasting mislykkes: {0}
- Ferdig
-
-
- Fant ikke temaet, går tilbake til standardtema...
- Tema ble installert på {0}.
- {0} eksisterer ikke.
- Temamal "{0}" ble lagret i temamappen.
- Temamalen finnes allerede!
- Klarte ikke laste .xaml-filen for tema {0}: {1}
-
-
- Klarte ikke søke etter oppdateringer.
- Klarte ikke laste ned oppdateringen.
-
-
- Mod Assistant
- Fant ikke installasjonsmappen til Beat Saber. Velg den manuelt.
- Mod Assistant må kjøres med adminrettigheter. Prøv igjen.
- Velg installasjonsmappen til Beat Saber
- Klarte ikke åpne mappen: {0}
-
diff --git a/ModAssistant/Localisation/nl.xaml b/ModAssistant/Localisation/nl.xaml
deleted file mode 100644
index 5af8405d..00000000
--- a/ModAssistant/Localisation/nl.xaml
+++ /dev/null
@@ -1,250 +0,0 @@
-
- i18n:nl-NL
-
-
- Beat Saber installatiemap niet gevonden!
- Klik OK om het opnieuw te proberen of Annuleren om de toepassing af te sluiten.
- Ongeldig argument! '{0}' heeft een optie nodig.
- Niet herkend argument. Mod Assistant sluit af.
- Een onverwachte foutcode is zojuist opgetreden
- Foutcode
-
-
- Mod Assistant
- Introductie
- Mods
- Over
- Opties
- Game Versie
- Versie
- Mod Info
- Installeren
- of Update
- Kan de game versie niet laden, Mods tabblad zal onbeschikbaar zijn.
- Nieuwe Game Versie Gedetecteerd!
- Het lijkt erop dat er een game update is geweest.
- Controleer alstublieft of de correcte versie geselecteerd is linksonder in de hoek
- Geen mod geselecteerd!
- {0} heeft geen info pagina.
-
-
- Introductie
- Welkom bij Mod Assistant
- Lees deze pagina alstublieft volledig en aandachtig door
-
- Door het gebruiken van dit programma verklaar ik de volgende voorwaarden te hebben gelezen en hiermee akkoord te gaan:
-
-
- Beat Saber
- Heeft geen ingebouwde ondersteuning voor mods, dit betekent dat:
-
-
- Mods
- Elke update niet meer werken, dit is normaal en niet de fout van Beat Games.
-
-
- Mods
- zullen bugs en prestatievermindering veroorzaken. Dit is niet een fout van Beat Games.
-
-
- Mods worden
- gratis gemaakt door mensen in hun
- vrije tijd. Wees alstublieft geduldig en begripvol.
-
-
- Laat GEEN negatieve beoordelingen achter op Beat Saber omdat mods niet meer werken. Dit is
- niet de fout van Beat Games.
- Ze proberen niet mods ontoegankelijk te maken.
-
-
- Als ik blijf zien dat mensen negatieve reviews achterlaten
- omdat mods niet meer werken,
-
- zal ik persoonlijk met een roestige lepel mods niet meer laten werken
-
-
- Lees alstublieft de 'Beginners Guide' op de
-
- Wiki
- . (Engels)
-
- Accepteer
- Weiger
- Sluit toepassing af: U accepteerde de voorwaarden niet.
- Kon de versielijst niet downloaden
- Mods tabblad uitgeschakeld. Herstart het programma om het opnieuw te proberen.
- U kunt nu het mods tabblad gebruiken!
-
-
- Mods
- Naam
- Geïnstalleerd
- Recentst
- Beschrijving
- Deïnstalleer
- Deïnstalleer
- Kon de modlijst niet laden
- Geïnstalleerde mods controleren
- Mods Laden
- Klaar met mods laden
- Geen mods beschikbaar voor deze versie van Beat Saber
- {0} wordt geïnstalleerd
- {0} is geïnstalleerd
- Klaar met mods installeren
- Kon de download link voor {0} niet vinden
- {0} deïnstalleren?
- Weet u zeker dat u {0} wil verwijderen?
- Dit zou uw andere mods niet meer kunnen laten werken
- Kon {0} niet uitpakken, probeer opniew over {1} seconden. ({2}/{3})
- Kon {0} niet uitpakken na maximaal aantal pogingen ({1}), deze wordt nu overgeslagen. Deze mod werkt misschien niet goed, dus ga verder op eigen risico
- Zoek...
- BSIPA deïnstallatie mislukt
- BSIPA installatie niet gevonden, deïnstallatie overgeslagen.
-
-
- Over
- Over Mod Assistant
- Ik ben Assistant, en ik heb Mod Assistant gemaakt om te assisteren met mods, met een aantal principes als basis:
- Eenvoud
- Draagbaarheid
- Eén enkel uitvoerbaar bestand
- Verantwoordelijk gebruik
-
- Als u dit programma nuttig vindt en mij graag wil steunen, ga dan naar mijn
-
- donatie pagina
-
- of mijn
-
- Patreon
-
-
- Bijzondere dank ♥
- Doneer
- Aai over je bol
- Knuffels
-
-
- Opties
- Instellingen
- Installatiemap
- Selecteer map
- Open map
- Sla geselecteerde mods op
- Detecteer geïnstalleerde mods
- Selecteer geïnstalleerde mods
- Geïnstalleerde mods herinstalleren
- Activeer OneClick™ Installaties
- BeatSaver
- ModelSaber
- Afspeellijsten
- Venster sluiten na afronding
- Game Type
- Steam
- Oculus
- Hulpmiddelen
- Installeer afspeellijst
- Afspeellijst installeren: {0}
- Mislukt nummer: {0}
- [{0} mislukkingen] Afspeellijst geïnstalleerd: {1}
- Toon OneClick Installatie Scherm
- Ja
- Sluit
- Nee
- Diagnostiek
- Open Logs
- Open AppData
- Deïnstalleer BSIPA
- Verwijder Alle Mods
- Toepassingsthema
- Exporteer sjabloon
- Log aan het uploaden
- Log URL gekopieerd naar klembord!
- Log Upload Mislukt
- Log upload mislukt!
- Kon het log bestand niet uploaden naar Teknik, probeer het alstublieft opnieuw of upload het bestand handmatig.
- Mod Lijst Ophalen
- BSIPA versie vinden
- BSIPA Gedeïnstalleerd
- Deïnstalleer ALLE mods?
- Weet u zeker dat u ALLE mods wil deïnstalleren?
- Dit kan niet ongedaan gemaakt worden.
- Alle mods gedeïnstalleerd
- Huidig thema is verwijderd, terugvallen op standaard...
- Thema map niet gevonden! Probeer het sjabloon te exporteren...
- AppData map niet gevonden! Probeer uw spel te starten.
-
-
- Mods Laden
-
-
- Ongeldig
- Ongeldige Installatie Gedetecteerd
- Uw game installatie is corrupt of ongeldig
- Dit kan gebeuren als u een illegale versie heeft of een illegale versie over de legitieme versie heeft gekopieerd
-
- Als uw game versie illegaal gedownload is,
- koop alstublieft de game
-
- HIER
-
- .
-
-
- Als uw game versie
- niet illegaal gedownload is, doe dan alstublieft
-
- een "schone" installatie
- .
-
-
- Als dat allebei niet helpt, vraag om hulp in het
- #pc-help kanaal in
-
- BSMG
- . (Engels)
-
- Als u een illegaal gedownloade versie van het spel had, maar nu het spel heeft gekocht
- Selecteer map
- Moet u Mod Assistant opnieuw starten na het wisselen naar de legitieme installatie
-
-
- Kon map details niet ophalen.
- Kon het nummer niet downloaden.
- Kon het nummer niet downloaden.
- Er kunnen problemen zijn met BeatSaver of uw internet verbinding.
- Kon de ZIP van het nummer niet downloaden
- Kon het Beat Saber installatiepad niet vinden.
- {0} Geïnstalleerd
- Installatie mislukt.
- {0} OneClick™ Installatie koppeling geregistreerd!
- {0} OneClick™ Installatie koppeling verwijderd!
- {0} wordt geïnstalleerd
- Maximaal aantal pogingen bereikt: {0} wordt overgeslagen
- Snelheidslimiet bereikt. Hervat over {0}
- Download mislukt: {0}
- Voltooid
-
-
- Thema niet gevonden, teruggevallen op standaard thema...
- Thema ingesteld op {0}.
- {0} bestaat niet.
- Themasjabloon "{0}" opgeslagen in de Thema map.
- Themasjabloon bestaat al!
- Laden van .xaml bestand voor {0} mislukt: {1}
-
-
- Kon niet controleren op updates.
- Kon update niet downloaden.
-
-
- Mod Assistant
- Kon uw Beat Saber installatiemap niet vinden. Selecteer deze alstublieft handmatig.
- Mod Assistant moet deze taak als administrator uitvoeren. Probeer het alstublieft opnieuw.
- Selecteer uw Beat Saber installatiemap
- Kan map niet openen: {0}
-
diff --git a/ModAssistant/Localisation/ru.xaml b/ModAssistant/Localisation/ru.xaml
deleted file mode 100644
index 2de26afb..00000000
--- a/ModAssistant/Localisation/ru.xaml
+++ /dev/null
@@ -1,252 +0,0 @@
-
- i18n:ru-RU
-
-
- Не получается найти папку с установленным Beat Saber!
- Нажмите ОК, чтобы попробовать снова или ЗАКРЫТЬ, чтобы закрыть приложение.
- Недопустимый аргумент! '{0}' требуется выбор.
- Нераспознанный аргумент. Закрытие Mod Assistant.
- Произошло необработанное исключениеd
- Исключение
-
-
- Mod Assistant
- Начало
- Модификации
- Информация
- Настройки
- Версия игры
- Версия
- Информация о модификации
- Установить
- или обновить
- Не удаётся загрузить список версий игры, Вкладка с модификациями недоступна.
- Обнаружена новая версия игры!
- Похоже на то, что было обновление игры.
- Пожалуйста, проверьте дважды, что выбрана корректная версия игры в нижнем левом углу!
- Нет выбранных модификаций!
- {0} Не имеет страницы с информацией.
-
-
- Вступление
- Добро пожаловать в Mod Assistant
- Прочитайте эту страницу полностью и внимательно
-
- Используя эту программу, вы прочитали и принимаете эти условия:
-
-
- Beat Saber
- не имеет нативной поддержки модификаций. Это означает:
-
-
- Модификации
- могут прекращать работоспособность каждое обновление. Это нормально, и
- это не вина Beat Games.
-
-
- Модификации
- могут вызывать ошибки и проблемы с производительностью. Это
- не вина Beat Games.
-
-
- Модификации создаются
- бесплатно людьми в их
- свободное время. Пожалуйста, будьте терпиливыми и взаимопонимающими.
-
-
- НЕ оставляйте отрицательные отзывы из-за того, что модификация не работает. Это
- не вина Beat Games.
- Beat Games не пытается уничтожить модификации.
-
-
- Если я увижу людей, которые продолжают оставлять негативные комментарии,
- потому что модификации не работают,
-
- Я лично уничтожу модификации ржавой ложкой
-
-
- Пожалуйста, прочитайте инструкцию для начинающих на
-
- Вики
- .
-
- Я согласен
- Я не согласен
- Приложение закрывается: Вы не приняли пользовательскую политику соглашений.
- Не удаётся получить список версий
- Вкладка с модификациями недоступна. Пожалуйста перезапустите, чтобы попробовать снова.
- Теперь вы можете использовать вкладку с модификациями!
-
-
- Модификации
- Название
- Установленная
- Последняя
- Описание
- Удалить
- Удалить
- Не удается загрузить список модификаций
- Проверка установленных модификаций
- Загрузка модификаций
- Загрузка модификаций окончена
- No mods available for this version of Beat Saber
- Установка {0}
- Установлено {0}
- Установка модификаций окончена.
- Не удаётся получить ссылку на скачивание {0}
- Удаление {0}?
- Вы уверены, что хотите удалить {0}?
- Это может сломать остальные модификации
- Не удалось извлечь {0}, попробуйте снова через {1} секунд. ({2}/{3})
- Не удалось извлечь {0} после попыток ({1}), пропускается. Эта модификация может работать некорректно, используйте на свой страх и риск
- Поиск...
- Failed to Uninstall BSIPA
- BSIPA installation not found, uninstall operation skipped.
-
-
- Информация
- Про Mod Assistant
- Я Ассистент, и я создал Mod Assistant для помощи модификациям с некоторыми личными принципами:
- Простота
- Портативность
- Приложение одним файлом
- Ответственное использование
-
- Если вам нравится программа и вы хотите меня поддержать, пожалуйста, посетите
-
- страницу для пожертвований
-
- или мой
-
- Patreon
-
-
- Отдельное спасибо ♥
- Поддержать
- Погладить
- Обнять
-
-
- Опции
- Настройки
- Папка установки
- Выбрать папку
- Открыть папку
- Сохранить выбранные модификации
- Обнаружение установленных модификаций
- Выбрать установленные модификации
- Переустановить установленные модификации
- Включить OneClick™ установки
- BeatSaver
- ModelSaber
- Плейлисты
- Закрыть окно после окончания установки
- Тип игры
- Steam
- Oculus
- Инструменты
- Установить плейлист
- Установка плейлиста: {0}
- Ошибка с песней: {0}
- [{0} ошибок] Установка плейлиста окончена: {1}
- Показать OneClick окно установок
- Да
- Закрывать
- Нет
- Диагностика
- Открыть логи
- Открыть AppData
- Удалить BSIPA
- Удалить все модификации
- Тема приложения
- Экспортировать шаблон
- Загрузка логов
- Ссылка на лог успешно скопирована!
- Загрузка логов не удалась
- Загрузка логов не удалась!
- Не удаётся загрузить файл с логом на Teknik, пожалуйста, попробуйте снова или отправьте файл вручную.
- Получаем список модификаций
- Поиск BSIPA версии
- BSIPA удалён
- Удалить все модификации?
- Вы уверены, что хотите удалить ВСЕ модификации?
- Это действие нельзя отменить.
- Все модификации удалены!
- Текущая тема была удалена, возвращаемся к стандартной теме...
- Папка с темами не найдена! Пробую экспортировать шаблон...
- Папка AppData не найдена! Попробуйте запустить игру.
-
-
- Загрузка модификаций
-
-
- Недействительно
- Обнаружена недействительная установка
- Ваша установленная игра сломана или недействительная
- Это могло произойти, если у вас нелицензионная копия игры, или вы скопировали нелицензионную копию поверх лицензионной
-
- Если ваша копия игры нелицензионная,
- пожалуйста, купите игру
-
- ТУТ
-
- .
-
-
- Если ваша копия игры
- лицензионная, пожалуйста
-
- переустановите игру заново
- .
-
-
- Если из этого ничего вам не помогает, попросите помощи в
- #pc-help канал в
-
- BSMG
- .
-
- Если вы использовали нелицензионную версию игру, но купили игру
- выберете папку
- Вам будет необходимо перезапустить Mod Assistant после того, как вы выберете папку с лицензионной копией игры
-
-
- Не удаётся получить информацию о карте.
- Не удаётся загрузить песню.
- Не удаётся загрузить песню.
- Возможно это ошибки с BeatSaver или вашим интернет соединением.
- Ошибка с загрузкой песни ZIP
- Установочный путь к Beat Saber не найден.
- Установлено: {0}
- Ошибка установки.
- {0} OneClick™ установки зарегистрированы
- {0} OneClick™ установки не зарегистрированы!
- Установка: {0}
- Достигнуто максимальное кол-во попыток: Пропускаем {0}
- Достигнут лимит. Возобновление через {0}
- Скачивание неудалось: {0}
- Завершено
-
-
- Тема не найдена, возвращаемся к стандартной теме...
- Установлена тема: {0}.
- {0} не существует.
- Шаблон темы "{0}" сохранён в папку с темами.
- Шаблон темы уже существует!
- Не удаётся загрузить .xaml файл для темы {0}: {1}
-
-
- Не удаётся проверить обновления.
- Не удаётся загрузить обновление.
-
-
- Mod Assistant
- Не удаётся обнаружить папку с Beat Saber. Пожалуйста, укажите путь вручную.
- Mod Assistant требует запустить эту задачу с правами администратора. Пожалуйста, попробуйте заново.
- Укажите папку с установленным Beat Saber
- Не удаётся открыть папку: {0}
-
diff --git a/ModAssistant/Localisation/sv.xaml b/ModAssistant/Localisation/sv.xaml
deleted file mode 100644
index 1dd880f1..00000000
--- a/ModAssistant/Localisation/sv.xaml
+++ /dev/null
@@ -1,252 +0,0 @@
-
- i18n:sv-SE
-
-
- Det gick inte att hitta din Beat Saber-installationsmapp!
- Tryck på OK för att försöka igen, eller Cancel för att avsluta applikationen.
- Invalid argument! '{0}' behöver ett alternativ.
- Unrecognized argument. Stänger Mod Assistant.
- Ett oväntat fel har precis inträffat
- Undantag
-
-
- Mod Assistant
- Intro
- Mods
- Om
- Inställningar
- Spelversion
- Version
- Modinformation
- Installera
- eller Uppdatera
- Det gick inte att ladda spelversionerna, Modfliken är ej tillgänglig.
- Ny spelversion tillgänglig!
- Spelet verkar ha uppdaterats.
- Var vänlig dubbelkolla att rätt version är vald i det nedre vänstra hörnet!
- Inga mods valda!
- {0} Denna mod har ingen informationssida.
-
-
- Intro
- Välkommen till Mod Assistant
- Var vänlig läs hela denna sida noggrant.
-
- Genom att använda detta program intygar du att du har läst och godkänt följande villkor:
-
-
- Beat Saber
- Har inte ursprungligt stöd för mods. Vilket betyder att:
-
-
- Mods
- kommer sluta att fungera efter varje uppdatering. Detta är standard, och
- inte Beat Games fel.
-
-
- Mods
- kommer att orsaka buggar och prestandaproblem. Detta är
- inte Beat Games fel.
-
-
- Mods utvecklas
- gratis av människor på deras
- fritid. Var vänlig ha tålamod och visa förståelse för det.
-
-
- LÄMNA INTE negativa recensioner för att mods slutat att fungera. Det är
- inte Beat Games fel.
- De försöker inte "döda" mods.
-
-
- Om jag ser människor lämna negativa recensioner
- för att mods slutat fungera, kommer jag
-
- personligen avliva hela moddingverksamheten med en rostig sked.
-
-
- Var vänlig och läs nybörjarguiden på
-
- Wikisidan
- .
-
- Godkänner
- Nekar
- Stänger applikationen: Du godkände ej villkoren.
- Det gick inte att hämta listan över versioner.
- Modfliken otillgänglig. Var vänlig starta om för att försöka igen.
- Du har nu tillgång till Modfliken!
-
-
- Mods
- Namn
- Installerad
- Senaste
- Beskrivning
- Avinstallera
- Avinstallera
- Det gick inte att ladda modlistan
- Kollar efter installerade mods
- Laddar Mods
- Mods färdigladdade!
- Inga mods tillgängliga för denna Beat Saber-version
- Installerar {0}
- Installerat {0}
- Mods färdiginstallerade!
- Det gick inte att hitta någon nedladdningslänk för {0}
- Avinstallera {0}?
- Är du säker på att du vill ta bort {0}?
- Detta kan leda till att dina andra mods slutar att fungera
- Extrahering misslyckades {0}, försöker igen om {1} sekunder. ({2}/{3})
- Misslyckades med att extrahera {0} efter maxantalet försök ({1}), hoppar över. Denna mod kanske inte fungerar som den ska så fortsätt på egen risk.
- Sök...
- Misslyckades med att avinstallera BSIPA
- BSIPA-installation hittades inte, hoppar över avinstallation.
-
-
- Om
- Om Mod Assistant
- Jag är Assistant, och jag skapade Mod Assistant för just att assistera med mods, med några grundläggande principer i åtanke:
- Enkelhet
- Portabilitet
- En enkel, körbar fil
- Ansvarsfullt användande
-
- Om du gillar programmet och vill stödja mig, besök gärna min
-
- donationssida
-
- eller min
-
- Patreon
-
-
- Särskilt Tack ♥
- Donera
- Klapp på huvudet
- Krama
-
-
- Inställningar
- Alternativ
- Installationsmapp
- Välj Mapp
- Öppna Mapp
- Spara Valda Mods
- Skanna Efter Installerade Mods
- Välj Installerade Mods
- Ominstallera Installerade Mods
- Aktivera OneClick™-Installationer
- BeatSaver
- ModelSaber
- Spellistor
- Stäng fönstret efter nedladdning
- Spelvariant
- Steam
- Oculus
- Verktyg
- Installera spellista
- Installerar spellista: {0}
- Misslyckad låt: {0}
- [{0} fails] Färdig med installation av spellistor: {1}
- Visa OneClick-installationsfönstret
- Ja
- Stäng
- Nej
- Diagnostikverktyg
- Öppna Loggar
- Öppna AppData
- Avinstallera BSIPA
- Radera Alla Mods
- Applikationstema
- Exportera Mall
- Laddar Upp Logg
- Logg-URL kopierad!
- Uppladdning Av Logg Misslyckades
- Uppladdning Av Logg Misslyckades!
- Det gick inte att ladda upp loggfilen till Teknik, var god försök igen eller skicka filen manuellt.
- Hämtar Lista Över Mods
- Letar efter BSIPA-Version
- BSIPA Avinstallerat
- Avinstallera alla mods?
- Är du säker på att du vill radera alla mods?
- Detta går inte att ångra.
- Alla Mods avinstallerade.
- Nuvarande tema borttaget, återställer till standardtemat...
- Det gick inte att hitta temamappen! Testa att exportera mallen...
- Det gick inte att hitta AppData-mappen! Testa att starta spelet.
-
-
- Laddar Mods
-
-
- Ogiltig
- Ogiltig Installation Upptäckt
- Din spelinstallation är korrupt eller på annat sätt ogiltig.
- Detta kan hända om din kopia av spelet är piratkopierad, eller om du klistrat in en piratkopia över din lagliga installation.
-
- Om din kopia av spelet är piratkopierad,
- var vänlig och köp spelet
-
- HÄR
-
- .
-
-
- Om din kopia av spelet
- inte är piratkopierad, var vänlig och
-
- ominstallera från grunden
- .
-
-
- Om inget hjälper, be om hjälp i
- #pc-help -kanalen i
-
- BSMG
- .
-
- Om du brukade spela på en piratkopierad version men sedan dess har köpt spelet.
- Välj Mapp
- Du kommer att behöva starta om Mod Assistant efter att du har bytt till en legitim version.
-
-
- Det gick inte att hämta mapdetaljerna.
- Det gick inte att ladda ned låten.
- Det gick inte att ladda ned låten.
- Det kan vara strul med BeatSaver eller din internetuppkoppling.
- Misslyckades med att ladda ned låtens ZIP-fil.
- Det gick inte att hitta installationsvägen för Beat Saber.
- Installerade: {0}
- Misslyckades med att installera.
- {0} OneClick™-installeringshanterare registrerad!
- {0} OneClick™-installeringshanterare avregistrerad!
- Installerar: {0}
- Maximalt antal försök uppnådda: hoppar över {0}
- Ratelimit nådd. Fortsätter om {0}
- Nedladdning misslyckades: {0}
- Färdig
-
-
- Temat hittades inte, återställer till standardtemat...
- Tema inställt på {0}.
- {0} existerar inte.
- Temamall "{0}" sparad till mappen för teman.
- Temamallen finns redan!
- Misslyckades med att ladda .xaml -filen för tema {0}: {1}
-
-
- Det gick inte att söka efter uppdateringar.
- Det gick inte att ladda ned uppdateringen.
-
-
- Mod Assistant
- Kunde inte hitta din Beat Saber-installationsmapp. Var vänlig välj den manuellt.
- Mod Assistant behöver köra detta med Adminbehörigheter. Var vänlig försök igen.
- Välj din Beat Saber-installationsmapp
- Kan inte öppna mapp: {0}
-
diff --git a/ModAssistant/Localisation/zh.xaml b/ModAssistant/Localisation/zh.xaml
deleted file mode 100644
index f6df35a3..00000000
--- a/ModAssistant/Localisation/zh.xaml
+++ /dev/null
@@ -1,250 +0,0 @@
-
- i18n:zh-Hans
-
-
- 找不到您的Beat Saber安装路径!
- 点确定重试,或点取消关闭软件。
- 无效参数!'{0}'需要一个选项。
- 无法识别的参数。关闭Mod Assistant。
- 刚刚发生了一个未处理的异常
- 例外
-
-
- Mod Assistant
- 简介
- Mod
- 关于
- 选项
- 游戏版本
- 软件版本
- Mod信息
- 安装
- 或更新
- 无法获取游戏版本,Mod选项卡将不可用。
- 检测到新的游戏版本!
- 似乎游戏更新了,
- 请仔细检查左下角是否选择了正确的游戏版本!
- 没有选择Mod!
- {0}没有信息页。
-
-
- 简介
- 欢迎使用Mod Assistant
- 请仔细阅读本页
-
- 通过使用此程序,证明您已阅读并同意以下条款:
-
-
- Beat Saber并不能原生支持Mod。 这意味着:
-
-
- Mod将会在每次游戏更新后无法使用。这很正常,并不是游戏开发商的问题。
-
-
- Mod会导致出现BUG或者性能问题。这也不是游戏开发商的问题。
-
-
- 爱好者在空闲时间用爱发电制作了这些Mod,请保持耐心,等待Mod更新。
-
-
- 请勿由于Mod不可用而发表差评,Beat Games不会封杀Mod。
-
-
- 如果我继续看到因为Mod不可用而留下的差评,我会亲自干掉Mod。
-
- 我们发现 围城 的网站未经作者同意擅自打包贩卖歌曲、模型,并抹黑社区中的成员。
-
- 请各位玩家引以为鉴,不要攻击其他玩家或支持这种行为,谢谢配合。
-
-
- 请务必阅读
-
- 新手入门指南
- 、
-
- 详细教程与问题解答
-
- ,以及
-
- 英文教程
- 。
-
- 同意
- 拒绝
- 关闭软件:您不同意此条款。
- 版本列表加载失败
- 已禁用Mod选项卡,请尝试重新打开软件后多等待一会再操作,或按照简介页面的中文教程解决。
- 你现在可以安装Mod了!
-
-
- Mod
- 名称
- 已安装
- 最新
- 介绍
- 卸载
- 卸载
- Mod列表加载失败
- 正在检查已安装的Mod
- 正在加载Mod列表
- 已加载Mod列表
- 当前版本的游戏暂时没有Mod,请等待Mod更新
- 正在下载安装{0}
- 已安装{0}
- Mod安装完成
- {0}找不到下载地址!
- 卸载{0}?
- 你确定要移除{0}?
- 这可能会导致其他Mod不可用。
- {0}解压失败,将在{1}秒后重试。({2}/{3})
- {0}在重试{1}次后仍然无法解压,将被跳过。注意,这个Mod可能无法使用。
- 搜索...
- BSIPA卸载失败
- 找不到BSIPA,已跳过卸载操作。
-
-
- 关于
- 关于Mod Assistant
- 我是Assistant,为了方便安装MOD,我制作了Mod Assistant。有以下特性:
- 简单易用
- 可移植性
- 单一文件
- 负责任地使用
-
- 如果你喜欢这个项目并且想支持我,请访问我的
-
- 捐助页面
-
- 或我的
-
- Patreon
-
-
- 特别感谢 ♥
- 捐助
- 摸摸头
- 抱抱
-
-
- 选项
- 设置
- 安装路径
- 选择路径
- 打开路径
- 保存选中的Mod
- 检查已安装的Mod
- 选中已安装的Mod
- 重新安装已有Mod
- 设置OneClick™网页一键添加资源
- [歌曲] BeatSaver
- [模型] ModelSaber
- [歌单] Playlists
- 添加完成后关闭窗口
- 游戏平台
- Steam
- Oculus
- 工具
- 将歌单下载进游戏(仅限playlist文件)
- 正在添加歌单:{0}
- 失败歌曲:{0}
- [{0}失败]添加{1}完成
- OneClick窗口显示方式:
- 显示
- 完成后关闭
- 隐藏
- 诊断工具
- 打开日志
- 打开游戏存档
- 卸载BSIPA
- 移除所有Mod
- 软件主题
- 导出模板
- 正在上传日志
- 日志网址已复制到剪贴板!
- 日志上传完成!
- 日志上传失败!
- 无法将日志文件上传到Teknik,请重试或手动发送文件。
- 正在获取Mod列表
- 正在检查BSIPA版本
- 已卸载BSIPA
- 卸载所有Mod?
- 你确定要移除所有Mod?
- 这将无法撤销。
- 已卸载所有Mod
- 当前主题已被删除,恢复为默认...
- 找不到主题文件夹!请尝试导出模板
- 找不到游戏存档路径!请尝试启动游戏后重试。
-
-
- 正在加载Mod...
-
-
- 无效
- 检测到无效的安装
- 您的游戏安装已损坏或无效
- 如果您的游戏是盗版的,或者您使用盗版游戏替换了正版,则可能会发生这种情况。
-
- 如果您的游戏是盗版的,
- 请在
-
- 这里
-
- 购买游戏。
-
-
- 如果您的游戏
- 不是盗版,请
-
- 清洁安装
- 。
-
-
- 如果这些方法没有帮助,请在BSMG的
-
- Discord
- #pc-help频道寻求帮助。
-
- 如果您曾经使用盗版,但之后购买了正版游戏
- 选择路径
- 更改为正版游戏之后,您需要重新启动Mod Assistant
-
-
- 无法获取详情。
- 无法下载歌曲。
- 无法下载歌曲。
- 可能您的互联网连接或BeatSaver存在问题。
- 下载歌曲压缩包失败。
- 找不到Beat Saber安装路径。
- 已添加:{0}
- 添加失败。
- {0} OneClick™ 一键添加处理程序已注册!
- {0} OneClick™ 一键添加处理程序已移除!
- 正在下载:{0}
- 超过重试次数,跳过:{0}
- 下载超时,重试:{0}
- 下载失败:{0}
- 执行完毕
-
-
- 找不到主题,恢复为默认主题...
- 主题设置为{0}.
- {0}不存在
- 模板主题"{0}"保存到主题文件夹。
- 模板主题已存在!
- 无法加载主题的.xaml文件 {0}: {1}
-
-
- 无法检查更新。
- 无法下载更新。
-
-
- Mod Assistant
- 检测不到您的Beat Saber安装路径,请手动选择。
- Mod Assistant需要以管理员身份运行此任务,请重试。
- 选择您的Beat Saber安装路径
- 无法打开路径:{0}
-
diff --git a/ModAssistant/OneClickStatus.xaml b/ModAssistant/OneClickStatus.xaml
deleted file mode 100644
index 088322d5..00000000
--- a/ModAssistant/OneClickStatus.xaml
+++ /dev/null
@@ -1,114 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/ModAssistant/OneClickStatus.xaml.cs b/ModAssistant/OneClickStatus.xaml.cs
deleted file mode 100644
index a562a0a6..00000000
--- a/ModAssistant/OneClickStatus.xaml.cs
+++ /dev/null
@@ -1,71 +0,0 @@
-using System;
-using System.Windows;
-using System.Windows.Data;
-
-namespace ModAssistant
-{
- ///
- /// Interaction logic for OneClickStatus.xaml
- ///
- public partial class OneClickStatus : Window
- {
- public static OneClickStatus Instance;
-
- public string HistoryText
- {
- get
- {
- return HistoryTextBlock.Text;
- }
- set
- {
- Dispatcher.Invoke(new Action(() => { Instance.HistoryTextBlock.Text = value; }));
- }
- }
- public string MainText
- {
- get
- {
- return MainTextBlock.Text;
- }
- set
- {
- Dispatcher.Invoke(new Action(() =>
- {
- Instance.MainTextBlock.Text = value;
- Instance.HistoryTextBlock.Text = string.IsNullOrEmpty(MainText) ? $"{value}" : $"{value}\n{HistoryText}";
- }));
- }
- }
-
- public OneClickStatus()
- {
- InitializeComponent();
- Instance = App.OCIWindow != "No" ? this : null;
- }
-
- public void StopRotation()
- {
- Ring.Style = null;
- }
- }
-
- [ValueConversion(typeof(double), typeof(double))]
- public class DivideDoubleByTwoConverter : IValueConverter
- {
- public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
- {
- if (targetType != typeof(double))
- {
- throw new InvalidOperationException("The target must be a double");
- }
- double d = (double)value;
- return ((double)d) / 2;
- }
-
- public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
- {
- throw new NotSupportedException();
- }
- }
-}
diff --git a/ModAssistant/Pages/Mods.xaml.cs b/ModAssistant/Pages/Mods.xaml.cs
deleted file mode 100644
index 827dc3c3..00000000
--- a/ModAssistant/Pages/Mods.xaml.cs
+++ /dev/null
@@ -1,799 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.IO;
-using System.IO.Compression;
-using System.Threading;
-using System.Threading.Tasks;
-using System.Windows;
-using System.Windows.Controls;
-using System.Windows.Data;
-using System.Windows.Forms;
-using System.Windows.Media.Animation;
-using System.Windows.Navigation;
-using ModAssistant.Libs;
-using static ModAssistant.Http;
-using TextBox = System.Windows.Controls.TextBox;
-
-namespace ModAssistant.Pages
-{
- ///
- /// Interaction logic for Mods.xaml
- ///
- public sealed partial class Mods : Page
- {
- public static Mods Instance = new Mods();
-
- public List DefaultMods = new List() { "SongCore", "ScoreSaber", "BeatSaverDownloader", "BeatSaverVoting", "PlaylistCore", "Survey" };
- public Mod[] ModsList;
- public Mod[] AllModsList;
- public static List InstalledMods = new List();
- public List CategoryNames = new List();
- public CollectionView view;
- public bool PendingChanges;
-
- private readonly SemaphoreSlim _modsLoadSem = new SemaphoreSlim(1, 1);
-
- public List ModList { get; set; }
-
- public Mods()
- {
- InitializeComponent();
- }
-
- private void RefreshModsList()
- {
- if (view != null)
- {
- view.Refresh();
- }
- }
-
- public void RefreshColumns()
- {
- if (MainWindow.Instance.Main.Content != Instance) return;
- double viewWidth = ModsListView.ActualWidth;
- double totalSize = 0;
- GridViewColumn description = null;
-
- if (ModsListView.View is GridView grid)
- {
- foreach (var column in grid.Columns)
- {
- if (column.Header?.ToString() == FindResource("Mods:Header:Description").ToString())
- {
- description = column;
- }
- else
- {
- totalSize += column.ActualWidth;
- }
- if (double.IsNaN(column.Width))
- {
- column.Width = column.ActualWidth;
- column.Width = double.NaN;
- }
- }
- double descriptionNewWidth = viewWidth - totalSize - 35;
- description.Width = descriptionNewWidth > 200 ? descriptionNewWidth : 200;
- }
- }
-
- public async Task LoadMods()
- {
- var versionLoadSuccess = await MainWindow.Instance.VersionLoadStatus.Task;
- if (versionLoadSuccess == false) return;
-
- await _modsLoadSem.WaitAsync();
-
- try
- {
- MainWindow.Instance.InstallButton.IsEnabled = false;
- MainWindow.Instance.GameVersionsBox.IsEnabled = false;
- MainWindow.Instance.InfoButton.IsEnabled = false;
-
- if (ModsList != null)
- {
- Array.Clear(ModsList, 0, ModsList.Length);
- }
-
- if (AllModsList != null)
- {
- Array.Clear(AllModsList, 0, AllModsList.Length);
- }
-
- InstalledMods = new List();
- CategoryNames = new List();
- ModList = new List();
-
- ModsListView.Visibility = Visibility.Hidden;
-
- if (App.CheckInstalledMods)
- {
- MainWindow.Instance.MainText = $"{FindResource("Mods:CheckingInstalledMods")}...";
- await Task.Run(async () => await CheckInstalledMods());
- InstalledColumn.Width = double.NaN;
- UninstallColumn.Width = 70;
- DescriptionColumn.Width = 750;
- }
- else
- {
- InstalledColumn.Width = 0;
- UninstallColumn.Width = 0;
- DescriptionColumn.Width = 800;
- }
-
- MainWindow.Instance.MainText = $"{FindResource("Mods:LoadingMods")}...";
- await Task.Run(async () => await PopulateModsList());
-
- ModsListView.ItemsSource = ModList;
-
- view = (CollectionView)CollectionViewSource.GetDefaultView(ModsListView.ItemsSource);
- PropertyGroupDescription groupDescription = new PropertyGroupDescription("Category");
- view.GroupDescriptions.Add(groupDescription);
-
- this.DataContext = this;
-
- RefreshModsList();
- ModsListView.Visibility = ModList.Count == 0 ? Visibility.Hidden : Visibility.Visible;
- NoModsGrid.Visibility = ModList.Count == 0 ? Visibility.Visible : Visibility.Hidden;
-
- MainWindow.Instance.MainText = $"{FindResource("Mods:FinishedLoadingMods")}.";
- MainWindow.Instance.InstallButton.IsEnabled = ModList.Count != 0;
- MainWindow.Instance.GameVersionsBox.IsEnabled = true;
- }
- finally
- {
- _modsLoadSem.Release();
- }
- }
-
- public async Task CheckInstalledMods()
- {
- await GetAllMods();
-
- GetBSIPAVersion();
- CheckInstallDir("IPA/Pending/Plugins");
- CheckInstallDir("IPA/Pending/Libs");
- CheckInstallDir("Plugins");
- CheckInstallDir("Libs");
- }
-
- public async Task GetAllMods()
- {
- var resp = await HttpClient.GetAsync(Utils.Constants.BeatModsAPIUrl + "mod");
- var body = await resp.Content.ReadAsStringAsync();
- AllModsList = JsonSerializer.Deserialize(body);
- }
-
- private void CheckInstallDir(string directory)
- {
- if (!Directory.Exists(Path.Combine(App.BeatSaberInstallDirectory, directory)))
- {
- return;
- }
-
- foreach (string file in Directory.GetFileSystemEntries(Path.Combine(App.BeatSaberInstallDirectory, directory)))
- {
- if (File.Exists(file) && Path.GetExtension(file) == ".dll" || Path.GetExtension(file) == ".manifest")
- {
- Mod mod = GetModFromHash(Utils.CalculateMD5(file));
- if (mod != null)
- {
- AddDetectedMod(mod);
- }
- }
- }
- }
-
- public void GetBSIPAVersion()
- {
- string InjectorPath = Path.Combine(App.BeatSaberInstallDirectory, "Beat Saber_Data", "Managed", "IPA.Injector.dll");
- if (!File.Exists(InjectorPath)) return;
-
- string InjectorHash = Utils.CalculateMD5(InjectorPath);
- foreach (Mod mod in AllModsList)
- {
- if (mod.name.ToLower() == "bsipa")
- {
- foreach (Mod.DownloadLink download in mod.downloads)
- {
- foreach (Mod.FileHashes fileHash in download.hashMd5)
- {
- if (fileHash.hash == InjectorHash)
- {
- AddDetectedMod(mod);
- }
- }
- }
- }
- }
- }
-
- private void AddDetectedMod(Mod mod)
- {
- if (!InstalledMods.Contains(mod))
- {
- InstalledMods.Add(mod);
- if (App.SelectInstalledMods && !DefaultMods.Contains(mod.name))
- {
- DefaultMods.Add(mod.name);
- }
- }
- }
-
- private Mod GetModFromHash(string hash)
- {
- foreach (Mod mod in AllModsList)
- {
- if (mod.name.ToLower() != "bsipa" && mod.status != "declined")
- {
- foreach (Mod.DownloadLink download in mod.downloads)
- {
- foreach (Mod.FileHashes fileHash in download.hashMd5)
- {
- if (fileHash.hash == hash)
- return mod;
- }
- }
- }
- }
-
- return null;
- }
-
- public async Task PopulateModsList()
- {
- try
- {
- var resp = await HttpClient.GetAsync(Utils.Constants.BeatModsAPIUrl + Utils.Constants.BeatModsModsOptions + "&gameVersion=" + MainWindow.GameVersion);
- var body = await resp.Content.ReadAsStringAsync();
- ModsList = JsonSerializer.Deserialize(body);
- }
- catch (Exception e)
- {
- System.Windows.MessageBox.Show($"{FindResource("Mods:LoadFailed")}.\n\n" + e);
- return;
- }
-
- foreach (Mod mod in ModsList)
- {
- bool preSelected = mod.required;
- if (DefaultMods.Contains(mod.name) || (App.SaveModSelection && App.SavedMods.Contains(mod.name)))
- {
- preSelected = true;
- if (!App.SavedMods.Contains(mod.name))
- {
- App.SavedMods.Add(mod.name);
- }
- }
-
- RegisterDependencies(mod);
-
- ModListItem ListItem = new ModListItem()
- {
- IsSelected = preSelected,
- IsEnabled = !mod.required,
- ModName = mod.name,
- ModVersion = mod.version,
- ModDescription = mod.description.Replace("\r\n", " ").Replace("\n", " "),
- ModInfo = mod,
- Category = mod.category
- };
-
- foreach (Promotion promo in Promotions.ActivePromotions)
- {
- if (mod.name == promo.ModName)
- {
- ListItem.PromotionText = promo.Text;
- ListItem.PromotionLink = promo.Link;
- }
- }
-
- foreach (Mod installedMod in InstalledMods)
- {
- if (mod.name == installedMod.name)
- {
- ListItem.InstalledModInfo = installedMod;
- ListItem.IsInstalled = true;
- ListItem.InstalledVersion = installedMod.version;
- break;
- }
- }
-
- mod.ListItem = ListItem;
-
- ModList.Add(ListItem);
- }
-
- foreach (Mod mod in ModsList)
- {
- ResolveDependencies(mod);
- }
- }
-
- public async void InstallMods()
- {
- MainWindow.Instance.InstallButton.IsEnabled = false;
- string installDirectory = App.BeatSaberInstallDirectory;
-
- foreach (Mod mod in ModsList)
- {
- // Ignore mods that are newer than installed version
- if (mod.ListItem.GetVersionComparison > 0) continue;
-
- // Ignore mods that are on current version if we aren't reinstalling mods
- if (mod.ListItem.GetVersionComparison == 0 && !App.ReinstallInstalledMods) continue;
-
- if (mod.name.ToLower() == "bsipa")
- {
- MainWindow.Instance.MainText = $"{string.Format((string)FindResource("Mods:InstallingMod"), mod.name)}...";
- await Task.Run(async () => await InstallMod(mod, installDirectory));
- MainWindow.Instance.MainText = $"{string.Format((string)FindResource("Mods:InstalledMod"), mod.name)}.";
- if (!File.Exists(Path.Combine(installDirectory, "winhttp.dll")))
- {
- await Task.Run(() =>
- Process.Start(new ProcessStartInfo
- {
- FileName = Path.Combine(installDirectory, "IPA.exe"),
- WorkingDirectory = installDirectory,
- Arguments = "-n"
- }).WaitForExit()
- );
- }
-
- Options.Instance.YeetBSIPA.IsEnabled = true;
- }
- else if (mod.ListItem.IsSelected)
- {
- MainWindow.Instance.MainText = $"{string.Format((string)FindResource("Mods:InstallingMod"), mod.name)}...";
- await Task.Run(async () => await InstallMod(mod, Path.Combine(installDirectory, @"IPA\Pending")));
- MainWindow.Instance.MainText = $"{string.Format((string)FindResource("Mods:InstalledMod"), mod.name)}.";
- }
- }
-
- MainWindow.Instance.MainText = $"{FindResource("Mods:FinishedInstallingMods")}.";
- MainWindow.Instance.InstallButton.IsEnabled = true;
- RefreshModsList();
- }
-
- private async Task InstallMod(Mod mod, string directory)
- {
- string downloadLink = null;
-
- foreach (Mod.DownloadLink link in mod.downloads)
- {
- if (link.type == "universal")
- {
- downloadLink = link.url;
- break;
- }
- else if (link.type.ToLower() == App.BeatSaberInstallType.ToLower())
- {
- downloadLink = link.url;
- break;
- }
- }
-
- if (string.IsNullOrEmpty(downloadLink))
- {
- System.Windows.MessageBox.Show(string.Format((string)FindResource("Mods:ModDownloadLinkMissing"), mod.name));
- return;
- }
-
- using (Stream stream = await DownloadMod(Utils.Constants.BeatModsURL + downloadLink))
- using (ZipArchive archive = new ZipArchive(stream))
- {
- foreach (ZipArchiveEntry file in archive.Entries)
- {
- string fileDirectory = Path.GetDirectoryName(Path.Combine(directory, file.FullName));
- if (!Directory.Exists(fileDirectory))
- {
- Directory.CreateDirectory(fileDirectory);
- }
-
- if (!string.IsNullOrEmpty(file.Name))
- {
- await ExtractFile(file, Path.Combine(directory, file.FullName), 3.0, mod.name, 10);
- }
- }
- }
-
- if (App.CheckInstalledMods)
- {
- mod.ListItem.IsInstalled = true;
- mod.ListItem.InstalledVersion = mod.version;
- mod.ListItem.InstalledModInfo = mod;
- }
- }
-
- private async Task ExtractFile(ZipArchiveEntry file, string path, double seconds, string name, int maxTries, int tryNumber = 0)
- {
- if (tryNumber < maxTries)
- {
- try
- {
- file.ExtractToFile(path, true);
- }
- catch
- {
- MainWindow.Instance.MainText = $"{string.Format((string)FindResource("Mods:FailedExtract"), name, seconds, tryNumber + 1, maxTries)}";
- await Task.Delay((int)(seconds * 1000));
- await ExtractFile(file, path, seconds, name, maxTries, tryNumber + 1);
- }
- }
- else
- {
- System.Windows.MessageBox.Show($"{string.Format((string)FindResource("Mods:FailedExtractMaxReached"), name, maxTries)}.", "Failed to install " + name);
- }
- }
-
- private async Task DownloadMod(string link)
- {
- var resp = await HttpClient.GetAsync(link);
- return await resp.Content.ReadAsStreamAsync();
- }
-
- private void RegisterDependencies(Mod dependent)
- {
- if (dependent.dependencies.Length == 0)
- return;
-
- foreach (Mod mod in ModsList)
- {
- foreach (Mod.Dependency dep in dependent.dependencies)
- {
-
- if (dep.name == mod.name)
- {
- dep.Mod = mod;
- mod.Dependents.Add(dependent);
-
- }
- }
- }
- }
-
- private void ResolveDependencies(Mod dependent)
- {
- if (dependent.ListItem.IsSelected && dependent.dependencies.Length > 0)
- {
- foreach (Mod.Dependency dependency in dependent.dependencies)
- {
- if (dependency.Mod.ListItem.IsEnabled)
- {
- dependency.Mod.ListItem.PreviousState = dependency.Mod.ListItem.IsSelected;
- dependency.Mod.ListItem.IsSelected = true;
- dependency.Mod.ListItem.IsEnabled = false;
- ResolveDependencies(dependency.Mod);
- }
- }
- }
- }
-
- private void UnresolveDependencies(Mod dependent)
- {
- if (!dependent.ListItem.IsSelected && dependent.dependencies.Length > 0)
- {
- foreach (Mod.Dependency dependency in dependent.dependencies)
- {
- if (!dependency.Mod.ListItem.IsEnabled)
- {
- bool needed = false;
- foreach (Mod dep in dependency.Mod.Dependents)
- {
- if (dep.ListItem.IsSelected)
- {
- needed = true;
- break;
- }
- }
- if (!needed && !dependency.Mod.required)
- {
- dependency.Mod.ListItem.IsSelected = dependency.Mod.ListItem.PreviousState;
- dependency.Mod.ListItem.IsEnabled = true;
- UnresolveDependencies(dependency.Mod);
- }
- }
- }
- }
- }
-
- private void ModCheckBox_Checked(object sender, RoutedEventArgs e)
- {
- Mod mod = ((sender as System.Windows.Controls.CheckBox).Tag as Mod);
- mod.ListItem.IsSelected = true;
- ResolveDependencies(mod);
- App.SavedMods.Add(mod.name);
- Properties.Settings.Default.SavedMods = string.Join(",", App.SavedMods.ToArray());
- Properties.Settings.Default.Save();
- RefreshModsList();
- }
-
- private void ModCheckBox_Unchecked(object sender, RoutedEventArgs e)
- {
- Mod mod = ((sender as System.Windows.Controls.CheckBox).Tag as Mod);
- mod.ListItem.IsSelected = false;
- UnresolveDependencies(mod);
- App.SavedMods.Remove(mod.name);
- Properties.Settings.Default.SavedMods = string.Join(",", App.SavedMods.ToArray());
- Properties.Settings.Default.Save();
- RefreshModsList();
- }
-
- public class Category
- {
- public string CategoryName { get; set; }
- public List Mods = new List();
- }
-
- public class ModListItem
- {
- public string ModName { get; set; }
- public string ModVersion { get; set; }
- public string ModDescription { get; set; }
- public bool PreviousState { get; set; }
-
- public bool IsEnabled { get; set; }
- public bool IsSelected { get; set; }
- public Mod ModInfo { get; set; }
- public string Category { get; set; }
-
- public Mod InstalledModInfo { get; set; }
- public bool IsInstalled { get; set; }
- private SemVersion _installedVersion { get; set; }
- public string InstalledVersion
- {
- get
- {
- if (!IsInstalled || _installedVersion == null) return "-";
- return _installedVersion.ToString();
- }
- set
- {
- if (SemVersion.TryParse(value, out SemVersion tempInstalledVersion))
- {
- _installedVersion = tempInstalledVersion;
- }
- else
- {
- _installedVersion = null;
- }
- }
- }
-
- public string GetVersionColor
- {
- get
- {
- if (!IsInstalled) return "Black";
- return _installedVersion >= ModVersion ? "Green" : "Red";
- }
- }
-
- public string GetVersionDecoration
- {
- get
- {
- if (!IsInstalled) return "None";
- return _installedVersion >= ModVersion ? "None" : "Strikethrough";
- }
- }
-
- public int GetVersionComparison
- {
- get
- {
- if (!IsInstalled || _installedVersion < ModVersion) return -1;
- if (_installedVersion > ModVersion) return 1;
- return 0;
- }
- }
-
- public bool CanDelete
- {
- get
- {
- return (!ModInfo.required && IsInstalled);
- }
- }
-
- public string CanSeeDelete
- {
- get
- {
- if (!ModInfo.required && IsInstalled)
- return "Visible";
- else
- return "Hidden";
- }
- }
-
- public string PromotionText { get; set; }
- public string PromotionLink { get; set; }
- public string PromotionMargin
- {
- get
- {
- if (string.IsNullOrEmpty(PromotionText)) return "0";
- return "0,0,5,0";
- }
- }
- }
-
- private void ModsListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
- {
- if ((Mods.ModListItem)Instance.ModsListView.SelectedItem == null)
- {
- MainWindow.Instance.InfoButton.IsEnabled = false;
- }
- else
- {
- MainWindow.Instance.InfoButton.IsEnabled = true;
- }
- }
-
- public void UninstallBSIPA(Mod.DownloadLink links)
- {
- Process.Start(new ProcessStartInfo
- {
- FileName = Path.Combine(App.BeatSaberInstallDirectory, "IPA.exe"),
- WorkingDirectory = App.BeatSaberInstallDirectory,
- Arguments = "--revert -n"
- }).WaitForExit();
-
- foreach (Mod.FileHashes files in links.hashMd5)
- {
- string file = files.file.Replace("IPA/", "").Replace("Data", "Beat Saber_Data");
- if (File.Exists(Path.Combine(App.BeatSaberInstallDirectory, file)))
- File.Delete(Path.Combine(App.BeatSaberInstallDirectory, file));
- }
- Options.Instance.YeetBSIPA.IsEnabled = false;
- }
-
- private void Uninstall_Click(object sender, RoutedEventArgs e)
- {
- Mod mod = ((sender as System.Windows.Controls.Button).Tag as Mod);
-
- string title = string.Format((string)FindResource("Mods:UninstallBox:Title"), mod.name);
- string body1 = string.Format((string)FindResource("Mods:UninstallBox:Body1"), mod.name);
- string body2 = string.Format((string)FindResource("Mods:UninstallBox:Body2"), mod.name);
- var result = System.Windows.Forms.MessageBox.Show($"{body1}\n{body2}", title, MessageBoxButtons.YesNo);
-
- if (result == DialogResult.Yes)
- {
- UninstallModFromList(mod);
- }
- }
-
- private void UninstallModFromList(Mod mod)
- {
- UninstallMod(mod.ListItem.InstalledModInfo);
- mod.ListItem.IsInstalled = false;
- mod.ListItem.InstalledVersion = null;
- if (App.SelectInstalledMods)
- {
- mod.ListItem.IsSelected = false;
- UnresolveDependencies(mod);
- App.SavedMods.Remove(mod.name);
- Properties.Settings.Default.SavedMods = string.Join(",", App.SavedMods.ToArray());
- Properties.Settings.Default.Save();
- RefreshModsList();
- }
- view.Refresh();
- }
-
- public void UninstallMod(Mod mod)
- {
- Mod.DownloadLink links = null;
- foreach (Mod.DownloadLink link in mod.downloads)
- {
- if (link.type.ToLower() == "universal" || link.type.ToLower() == App.BeatSaberInstallType.ToLower())
- {
- links = link;
- break;
- }
- }
- if (mod.name.ToLower() == "bsipa")
- {
- var hasIPAExe = File.Exists(Path.Combine(App.BeatSaberInstallDirectory, "IPA.exe"));
- var hasIPADir = Directory.Exists(Path.Combine(App.BeatSaberInstallDirectory, "IPA"));
-
- if (hasIPADir && hasIPAExe)
- {
- UninstallBSIPA(links);
- }
- else
- {
- var title = (string)FindResource("Mods:UninstallBSIPANotFound:Title");
- var body = (string)FindResource("Mods:UninstallBSIPANotFound:Body");
-
- System.Windows.Forms.MessageBox.Show(body, title, MessageBoxButtons.OK, MessageBoxIcon.Warning);
- }
- }
- foreach (Mod.FileHashes files in links.hashMd5)
- {
- if (File.Exists(Path.Combine(App.BeatSaberInstallDirectory, files.file)))
- File.Delete(Path.Combine(App.BeatSaberInstallDirectory, files.file));
- if (File.Exists(Path.Combine(App.BeatSaberInstallDirectory, "IPA", "Pending", files.file)))
- File.Delete(Path.Combine(App.BeatSaberInstallDirectory, "IPA", "Pending", files.file));
- }
- }
-
- private void Hyperlink_RequestNavigate(object sender, RequestNavigateEventArgs e)
- {
- Process.Start(new ProcessStartInfo(e.Uri.AbsoluteUri));
- e.Handled = true;
- }
-
- private void Page_Loaded(object sender, RoutedEventArgs e)
- {
- RefreshColumns();
- }
-
- private void CopyText(object sender, System.Windows.Input.MouseButtonEventArgs e)
- {
- if (!(sender is TextBlock textBlock)) return;
- var text = textBlock.Text;
-
- // Ensure there's text to be copied
- if (string.IsNullOrWhiteSpace(text)) return;
-
- Utils.SetClipboard(text);
- }
-
- private void SearchButton_Click(object sender, RoutedEventArgs e)
- {
- if (SearchBar.Height == 0)
- {
- SearchBar.Focus();
- Animate(SearchBar, 0, 16, new TimeSpan(0, 0, 0, 0, 300));
- Animate(SearchText, 0, 16, new TimeSpan(0, 0, 0, 0, 300));
- ModsListView.Items.Filter = new Predicate