From f6f945d2e60e3d12be47658aaa18612ff6f52219 Mon Sep 17 00:00:00 2001 From: sunnamed434 Date: Sat, 5 Oct 2024 14:21:35 +0300 Subject: [PATCH 1/5] Add Rocket.AutoInstaller #21 --- .github/workflows/Rocket.AutoInstaller.yaml | 64 ++++++ README.md | 18 ++ .../Installation/GitHubAsset.cs | 21 ++ .../Installation/GitHubRelease.cs | 31 +++ .../Installation/Installer.cs | 190 ++++++++++++++++++ .../Installation/ReleaseEntry.cs | 22 ++ .../Installation/StreamExtensions.cs | 13 ++ Rocket.AutoInstaller/Module.cs | 36 ++++ .../Module/InstallationGuides/Readme_EN.txt | 15 ++ .../Module/InstallationGuides/Readme_RU.txt | 15 ++ .../Module/Rocket.AutoInstaller/English.dat | 2 + .../Rocket.AutoInstaller.module | 11 + .../Module/RuntimeLibs/README.md | 16 ++ .../System.IO.Compression.FileSystem.dll | Bin 0 -> 18432 bytes .../RuntimeLibs/System.IO.Compression.dll | Bin 0 -> 114688 bytes Rocket.AutoInstaller/README.md | 17 ++ .../Rocket.AutoInstaller.csproj | 52 +++++ 17 files changed, 523 insertions(+) create mode 100644 .github/workflows/Rocket.AutoInstaller.yaml create mode 100644 Rocket.AutoInstaller/Installation/GitHubAsset.cs create mode 100644 Rocket.AutoInstaller/Installation/GitHubRelease.cs create mode 100644 Rocket.AutoInstaller/Installation/Installer.cs create mode 100644 Rocket.AutoInstaller/Installation/ReleaseEntry.cs create mode 100644 Rocket.AutoInstaller/Installation/StreamExtensions.cs create mode 100644 Rocket.AutoInstaller/Module.cs create mode 100644 Rocket.AutoInstaller/Module/InstallationGuides/Readme_EN.txt create mode 100644 Rocket.AutoInstaller/Module/InstallationGuides/Readme_RU.txt create mode 100644 Rocket.AutoInstaller/Module/Rocket.AutoInstaller/English.dat create mode 100644 Rocket.AutoInstaller/Module/Rocket.AutoInstaller/Rocket.AutoInstaller.module create mode 100644 Rocket.AutoInstaller/Module/RuntimeLibs/README.md create mode 100644 Rocket.AutoInstaller/Module/RuntimeLibs/System.IO.Compression.FileSystem.dll create mode 100644 Rocket.AutoInstaller/Module/RuntimeLibs/System.IO.Compression.dll create mode 100644 Rocket.AutoInstaller/README.md create mode 100644 Rocket.AutoInstaller/Rocket.AutoInstaller.csproj diff --git a/.github/workflows/Rocket.AutoInstaller.yaml b/.github/workflows/Rocket.AutoInstaller.yaml new file mode 100644 index 0000000..29d64af --- /dev/null +++ b/.github/workflows/Rocket.AutoInstaller.yaml @@ -0,0 +1,64 @@ +name: Rocket.AutoInstaller + +on: + create: + tags: + - "*" + push: + branches: [ master ] + paths: + - '.github/workflows/Rocket.AutoInstaller.yaml' + - 'Rocket.AutoInstaller/**' + pull_request: + paths: + - '.github/workflows/Rocket.AutoInstaller.yaml' + - 'Rocket.AutoInstaller/**' + +jobs: + Build: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - uses: actions/setup-dotnet@v4 + name: Setup .NET + with: + dotnet-version: 8.x + + - name: Build Project + uses: ./.github/actions/project-build + id: project-build + with: + project_path: Rocket.AutoInstaller + nuget_key: ${{ secrets.NUGET_DEPLOY_KEY }} + nuget_push: false + github_token: ${{ secrets.PAT }} + + - name: Install zip + run: sudo apt-get install zip + + - name: Zip artifacts + run: "cd ./Rocket.AutoInstaller/bin/Release/net461/linux-x64/Rocket.AutoInstaller && zip -qq -r ./Rocket.AutoInstaller.zip *" + + - name: Upload build + uses: actions/upload-artifact@v4 + with: + name: Rocket.AutoInstaller.zip + path: "./Rocket.AutoInstaller/bin/Release/net461/linux-x64/Rocket.AutoInstaller/Rocket.AutoInstaller.zip" + if-no-files-found: error + + - name: Create Release + if: github.event_name == 'create' && github.event.ref_type == 'tag' + uses: ncipollo/release-action@v1.14.0 + with: + name: RocketModFix Release v${{ steps.project-build.outputs.version }} + tag: ${{ steps.project-build.outputs.version }} + artifacts: "./Rocket.AutoInstaller/bin/Release/net461/linux-x64/Rocket.AutoInstaller/Rocket.AutoInstaller.Module.zip" + token: ${{ secrets.PAT }} + prerelease: ${{ steps.project-build.outputs.is_prerelease }} + allowUpdates: true + draft: true \ No newline at end of file diff --git a/README.md b/README.md index c6e8e56..2a02286 100644 --- a/README.md +++ b/README.md @@ -22,6 +22,7 @@ You can still use old plugins without any changes/recompilation/updates. - [x] Reset changelog. - [x] For versioning use [SemVer][semver_url]. - [x] Installation guides inside of the Rocket Unturned Module. +- [x] Rocket.AutoInstaller to automaticaly install Rocket. - [x] Keep backward compatibility. - [x] Test with RocketMod plugins that uses old RocketMod libraries, and make sure current changes doesn't break anything. - [x] Test with most used Modules: @@ -53,6 +54,10 @@ After plan is finished -> Add new plans, keep coding, and don't forget to approv ## Installation +Now we have 2 different ways you can install Rocket, either `Standard Way` or `Auto-Installer`, select the one you like more, but we highly recommend to use `Auto-Installer`. + +### Standard Way + 1. **Stop the Server**: If your server is running, stop it. 2. **Remove Old Rocket**: Delete the entire `Rocket.Unturned` folder located in `Modules` (if it exists). 3. **Download the Latest RocketModFix**: Go to the [RocketModFix releases page](https://github.com/RocketModFix/RocketModFix/releases). @@ -60,6 +65,19 @@ After plan is finished -> Add new plans, keep coding, and don't forget to approv 5. **Download the Module**: Click `Rocket.Unturned.Module.zip` to download the latest module. 6. **Final**: Extract the downloaded archive, open the `Rocket.Unturned.Module` folder, and copy the `Rocket.Unturned` folder to `Modules` (copy the folder, not it's content, and if its asks to Replace the existing files then press to replace them). +### Auto-Installer (new way) + +It's same as installing Rocket manually (standard way), however if we make an update you will receive it automatically, so you don't need to remove old Rocket, replace/delete files, etc. + +See more info [here](https://github.com/RocketModFix/RocketModFix/blob/master/Rocket.AutoInstaller/README.md) about it if you're interested how it work and what we're planning to do next with it. + +1. **Stop the Server**: If your server is running, stop it. +2. **Remove Rocket** (if you still have it): Delete the entire `Rocket.Unturned` folder located in `Modules` (if it exists). +3. **Download the Latest Rocket.AutoInstaller**: Go to the [RocketModFix releases page](https://github.com/RocketModFix/RocketModFix/releases). +4. **Access the Assets**: Open the "Assets" section if it's not already expanded. +5. **Download the Rocket.AutoInstaller**: Click `Rocket.AutoInstaller.zip` to download the latest module. +6. **Final**: Extract the downloaded archive, open the `Rocket.AutoInstaller` folder, and copy the `Rocket.AutoInstaller` folder to `Modules` (copy the folder, not it's content, and if its asks to Replace the existing files then press to replace them). + Contact in our discord if you have any problems. Just in case you can also read `Readme_EN.txt` or `Readme_RU.txt` inside of the installed Module. ## Discord diff --git a/Rocket.AutoInstaller/Installation/GitHubAsset.cs b/Rocket.AutoInstaller/Installation/GitHubAsset.cs new file mode 100644 index 0000000..75b7229 --- /dev/null +++ b/Rocket.AutoInstaller/Installation/GitHubAsset.cs @@ -0,0 +1,21 @@ +using Newtonsoft.Json; + +namespace Rocket.AutoInstaller.Installation; + +public class GitHubAsset +{ + [JsonProperty("url")] + public string Url { get; set; } + + [JsonProperty("name")] + public string Name { get; set; } + + [JsonProperty("content_type")] + public string ContentType { get; set; } + + [JsonProperty("size")] + public int Size { get; set; } + + [JsonProperty("browser_download_url")] + public string BrowserDownloadUrl { get; set; } +} \ No newline at end of file diff --git a/Rocket.AutoInstaller/Installation/GitHubRelease.cs b/Rocket.AutoInstaller/Installation/GitHubRelease.cs new file mode 100644 index 0000000..7d38571 --- /dev/null +++ b/Rocket.AutoInstaller/Installation/GitHubRelease.cs @@ -0,0 +1,31 @@ +using System; +using Newtonsoft.Json; + +namespace Rocket.AutoInstaller.Installation; + +public class GitHubRelease +{ + [JsonProperty("url")] + public string Url { get; set; } + + [JsonProperty("tag_name")] + public string TagName { get; set; } + + [JsonProperty("name")] + public string Name { get; set; } + + [JsonProperty("body")] + public string Body { get; set; } + + [JsonProperty("draft")] + public bool Draft { get; set; } + + [JsonProperty("prerelease")] + public bool Prerelease { get; set; } + + [JsonProperty("published_at")] + public DateTime PublishedAt { get; set; } + + [JsonProperty("assets")] + public GitHubAsset[] Assets { get; set; } +} \ No newline at end of file diff --git a/Rocket.AutoInstaller/Installation/Installer.cs b/Rocket.AutoInstaller/Installation/Installer.cs new file mode 100644 index 0000000..482694a --- /dev/null +++ b/Rocket.AutoInstaller/Installation/Installer.cs @@ -0,0 +1,190 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using System.IO.Compression; +using System.Linq; +using System.Reflection; +using Newtonsoft.Json; +using SDG.Framework.Modules; +using SDG.Unturned; +using UnityEngine.Networking; + +namespace Rocket.AutoInstaller.Installation; + +public class Installer +{ + public static IEnumerator Install() + { + var request = UnityWebRequest.Get( + "https://api.github.com/repos/RocketModFix/RocketModFix/releases"); + request.SetRequestHeader("User-Agent", "RocketModFix"); + request.redirectLimit = 5; + + yield return request.SendWebRequest(); + + if (request.result != UnityWebRequest.Result.Success) + { + CommandWindow.LogError($"Installation Failed: An error occured while installing RocketModFix, response code: {request.responseCode}, error: {request.error}"); + yield break; + } + + var responseContent = request.downloadHandler.text; + var releases = JsonConvert.DeserializeObject>(responseContent); + var latestRelease = releases!.FirstOrDefault(); + if (latestRelease == null) + { + CommandWindow.LogError("Installation Failed: No Release Found."); + yield break; + } + if (string.IsNullOrWhiteSpace(latestRelease.TagName)) + { + CommandWindow.LogError("Installation Failed: Release Tag Name doesn't seems to be valid."); + yield break; + } + var moduleAsset = latestRelease.Assets.FirstOrDefault(IsRocketModFixModule); + if (moduleAsset == null) + { + CommandWindow.LogError("Installation Failed: Module not found."); + yield break; + } + + Console.WriteLine("aa: " + moduleAsset.BrowserDownloadUrl); + + CommandWindow.LogWarning($"Preparing to install: " + + $"RocketModFix {latestRelease.TagName} Released: {latestRelease.PublishedAt}"); + + request = UnityWebRequest.Get(moduleAsset.BrowserDownloadUrl); + request.SetRequestHeader("User-Agent", "RocketModFix"); + request.redirectLimit = 5; + yield return request.SendWebRequest(); + + if (request.result != UnityWebRequest.Result.Success) + { + CommandWindow.LogError($"Installation Failed: An error occured while getting raw data of module {moduleAsset.Name}, response code: {request.responseCode}, error: {request.error}"); + yield break; + } + + var rawData = request.downloadHandler.data; + File.WriteAllBytes(@"C:\Users\user\Downloads\Rocket.Unturned.Module\a.zip", rawData); + var releaseEntries = GetReleaseEntries(rawData); + byte[]? rocketModuleData = null; + List rocketLibraries = []; + const string rocketEntryPointFileName = "Rocket.Unturned.dll"; + foreach (var releaseEntry in releaseEntries) + { + if (releaseEntry.Name == rocketEntryPointFileName) + { + rocketModuleData = releaseEntry.Content; + continue; + } + if (releaseEntry.Name != rocketEntryPointFileName && releaseEntry.FileExtension == ".dll") + { + rocketLibraries.Add(releaseEntry.Content); + continue; + } + } + + if (rocketModuleData == null) + { + CommandWindow.LogError($"Installation Failed: {rocketEntryPointFileName} Rocket Entry Point was not found."); + yield break; + } + + foreach (var rocketLibrary in rocketLibraries) + { + Assembly.Load(rocketLibrary); + } + + var rocketModule = Assembly.Load(rocketModuleData); + + var types = GetLoadableTypes(rocketModule); + var moduleType = types.FirstOrDefault( + x => x.IsAbstract == false && typeof(IModuleNexus).IsAssignableFrom(x)); + if (moduleType == null) + { + CommandWindow.LogError("Installation Failed: Rocket Module Type cannot be found!"); + yield break; + } + + try + { + if (Activator.CreateInstance(moduleType) is not IModuleNexus plugin) + { + CommandWindow.LogError("Unable to create UnturnedGuard Module!"); + yield break; + } + + plugin.initialize(); + } + catch (Exception ex) + { + CommandWindow.LogError("An error occured while creating UnturnedGuard Module! \n" + ex); + yield break; + } + + CommandWindow.LogWarning( + $"Successfully installed: RocketModFix v{latestRelease.TagName}"); + } + + private static bool IsRocketModFixModule(GitHubAsset asset) + { + return asset.Name.Equals("Rocket.Unturned.Module.zip", StringComparison.Ordinal); + } + private static List GetReleaseEntries(byte[] assetData) + { + var entries = new List(); + using var memoryStream = new MemoryStream(assetData); + using var zipArchive = new ZipArchive(memoryStream); + foreach (var entry in zipArchive.Entries) + { + try + { + var fileNameWithoutExtension = Path.GetFileNameWithoutExtension(entry.FullName); + var fileExtension = Path.GetExtension(entry.FullName); + var entryDirectoryName = Path.GetDirectoryName(entry.FullName)!; + + using var stream = entry.Open(); + var entryData = stream.CopyToArray(); + + entries.Add(new ReleaseEntry(entry.Name, entry.FullName, fileNameWithoutExtension, fileExtension, + entryDirectoryName, entryData)); + } + catch (Exception ex) + { + CommandWindow.LogError($"Error while collecting info about release entry: {entry.FullName} \n{ex}"); + } + } + return entries; + } + /// + /// Safely returns the set of loadable types from an assembly. + /// Algorithm from StackOverflow answer here: + /// https://stackoverflow.com/questions/7889228/how-to-prevent-reflectiontypeloadexception-when-calling-assembly-gettypes + /// + /// The from which to load types. + /// + /// The set of types from the , or the subset + /// of types that could be loaded if there was any error. + /// + /// + /// Thrown if is . + /// + private static IEnumerable GetLoadableTypes(Assembly assembly) + { + if (assembly == null) + { + throw new ArgumentNullException(nameof(assembly)); + } + + try + { + return assembly.DefinedTypes.Select(x => x.AsType()); + } + catch (ReflectionTypeLoadException ex) + { + CommandWindow.LogError($"An error occured while getting types for assembly: {assembly} \n" + ex); + return ex.Types.Where(x => x is not null); + } + } +} \ No newline at end of file diff --git a/Rocket.AutoInstaller/Installation/ReleaseEntry.cs b/Rocket.AutoInstaller/Installation/ReleaseEntry.cs new file mode 100644 index 0000000..d8a1aa0 --- /dev/null +++ b/Rocket.AutoInstaller/Installation/ReleaseEntry.cs @@ -0,0 +1,22 @@ +namespace Rocket.AutoInstaller.Installation; + +public class ReleaseEntry +{ + public ReleaseEntry(string name, string fullName, string fileNameWithoutExtension, string fileExtension, + string directoryName, byte[] content) + { + Name = name; + FullName = fullName; + FileNameWithoutExtension = fileNameWithoutExtension; + FileExtension = fileExtension; + DirectoryName = directoryName; + Content = content; + } + + public string Name { get; } + public string FullName { get; } + public string FileExtension { get; } + public string FileNameWithoutExtension { get; } + public string DirectoryName { get; set; } + public byte[] Content { get; } +} \ No newline at end of file diff --git a/Rocket.AutoInstaller/Installation/StreamExtensions.cs b/Rocket.AutoInstaller/Installation/StreamExtensions.cs new file mode 100644 index 0000000..bb771f6 --- /dev/null +++ b/Rocket.AutoInstaller/Installation/StreamExtensions.cs @@ -0,0 +1,13 @@ +using System.IO; + +namespace Rocket.AutoInstaller.Installation; + +public static class StreamExtensions +{ + public static byte[] CopyToArray(this Stream source) + { + var memoryStream = new MemoryStream(); + source.CopyTo(memoryStream); + return memoryStream.ToArray(); + } +} \ No newline at end of file diff --git a/Rocket.AutoInstaller/Module.cs b/Rocket.AutoInstaller/Module.cs new file mode 100644 index 0000000..23ee300 --- /dev/null +++ b/Rocket.AutoInstaller/Module.cs @@ -0,0 +1,36 @@ +using JetBrains.Annotations; +using Rocket.AutoInstaller.Installation; +using SDG.Framework.Modules; +using SDG.Unturned; +using UnityEngine; +using UnityObject = UnityEngine.Object; + +namespace Rocket.AutoInstaller; + +/// +/// This is needed to run Coroutines. +/// +public class CoroutineRunner : MonoBehaviour; + +[UsedImplicitly] +public class Module : IModuleNexus +{ + private const string DiscordSupportURL = "https://discord.gg/z6VM7taWeG"; + + public void initialize() + { + var assembly = typeof(Module).Assembly; + var assemblyName = assembly.GetName(); + + CommandWindow.Log($"Loading Rocket.AutoInstaller... {assemblyName.Name} {assemblyName.Version} this could take for a while!"); + CommandWindow.Log($"Discord Support: {DiscordSupportURL}"); + + var instance = new GameObject(); + UnityObject.DontDestroyOnLoad(instance); + var coroutineRunner = instance.AddComponent(); + coroutineRunner.StartCoroutine(Installer.Install()); + } + public void shutdown() + { + } +} \ No newline at end of file diff --git a/Rocket.AutoInstaller/Module/InstallationGuides/Readme_EN.txt b/Rocket.AutoInstaller/Module/InstallationGuides/Readme_EN.txt new file mode 100644 index 0000000..1b2654a --- /dev/null +++ b/Rocket.AutoInstaller/Module/InstallationGuides/Readme_EN.txt @@ -0,0 +1,15 @@ +Rocket.AutoInstaller For Unturned +--------------------------------- + +GitHub: https://github.com/RocketModFix/RocketModFix/Rocket.AutoInstaller + +For latest downloads, visit: https://github.com/RocketModFix/RocketModFix/releases. + +Join our Discord: https://discord.gg/z6VM7taWeG + +Installation +------------ + +Copy the "Rocket.AutoInstaller" folder to /Unturned/Modules (copy the folder, not it's content, and if its asks to Replace the existing files then press to replace them). + +For more, visit: https://github.com/RocketModFix/RocketModFix?tab=readme-ov-file#installation \ No newline at end of file diff --git a/Rocket.AutoInstaller/Module/InstallationGuides/Readme_RU.txt b/Rocket.AutoInstaller/Module/InstallationGuides/Readme_RU.txt new file mode 100644 index 0000000..9520864 --- /dev/null +++ b/Rocket.AutoInstaller/Module/InstallationGuides/Readme_RU.txt @@ -0,0 +1,15 @@ +Rocket.AutoInstaller для Unturned +------------------------- + +GitHub: https://github.com/RocketModFix/RocketModFix/Rocket.AutoInstaller + +Самую новейшую версию можно найти здесь: https://github.com/RocketModFix/RocketModFix/releases. + +Заходите в наш Discord: https://discord.gg/z6VM7taWeG + +Установка +--------- + +Скопируйте "Rocket.AutoInstaller" папку в /Unturned/Modules (скопируйте всю папку а не то что в находится внутри папки и если оно просит вставить с заменой то жмите вставить с заменой). + +Дополнительная информация по установке: https://github.com/RocketModFix/RocketModFix?tab=readme-ov-file#installation \ No newline at end of file diff --git a/Rocket.AutoInstaller/Module/Rocket.AutoInstaller/English.dat b/Rocket.AutoInstaller/Module/Rocket.AutoInstaller/English.dat new file mode 100644 index 0000000..261ac87 --- /dev/null +++ b/Rocket.AutoInstaller/Module/Rocket.AutoInstaller/English.dat @@ -0,0 +1,2 @@ +Name Rocket.AutoInstaller +Description Auto Installer for RocketModFix. \ No newline at end of file diff --git a/Rocket.AutoInstaller/Module/Rocket.AutoInstaller/Rocket.AutoInstaller.module b/Rocket.AutoInstaller/Module/Rocket.AutoInstaller/Rocket.AutoInstaller.module new file mode 100644 index 0000000..82f1cf5 --- /dev/null +++ b/Rocket.AutoInstaller/Module/Rocket.AutoInstaller/Rocket.AutoInstaller.module @@ -0,0 +1,11 @@ +{ + "Name": "Rocket.AutoInstaller", + "Version": "0.0.0.0", + "Assemblies": + [ + { + "Path": "/Rocket.AutoInstaller.dll", + "Role": "Server" + } + ] +} \ No newline at end of file diff --git a/Rocket.AutoInstaller/Module/RuntimeLibs/README.md b/Rocket.AutoInstaller/Module/RuntimeLibs/README.md new file mode 100644 index 0000000..5bb85d8 --- /dev/null +++ b/Rocket.AutoInstaller/Module/RuntimeLibs/README.md @@ -0,0 +1,16 @@ +## Runtime Libraries + +Here we just store the runtime libraries that are used by the Rocket or other plugins. These libraries are not included in the plugin itself, but are required to be present in the Module directory in order for Rocket itself and the other plugins to work correctly. + +## Add/Update Runtime Library + +To add/update a Runtime Library, we provide these options (they're different ways): + +# Option #1 +- Have installed Mono/Unity Editor with the same version as in Unturned. +- To find the necessary library: `Program Files\Mono\lib\mono\gac` or also you can try this place: `Program Files\Mono\lib\mono\4.5\Facades`. + +# Option #2 +- Copy the necessary libraries from [OpenMod](https://github.com/openmod/openmod) runtime libs or release of the module, this way we keep as close as possible same libraries. + +You can also check this [post](https://sunnamed434.github.io/posts/assemblyresolve-and-mono/) to understand things better about libraries, specifically in Unity. \ No newline at end of file diff --git a/Rocket.AutoInstaller/Module/RuntimeLibs/System.IO.Compression.FileSystem.dll b/Rocket.AutoInstaller/Module/RuntimeLibs/System.IO.Compression.FileSystem.dll new file mode 100644 index 0000000000000000000000000000000000000000..59e95a23ba7a55f9df95d1b9a8394079f46880e4 GIT binary patch literal 18432 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þ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 y+NY + + + net461 + $([System.IO.Path]::GetFullPath($(MSBuildProjectDirectory)/../../)) + + + + + + false + + + + + All + + + All + + + + + + + Module\RuntimeLibs\System.IO.Compression.dll + + + + + + + + + + + + + + $(OutDir)Rocket.AutoInstaller/Rocket.AutoInstaller + + + + + + + + + + + + \ No newline at end of file From f4abb7cf6ab279ec0dd2371aec7b18783b95eaa8 Mon Sep 17 00:00:00 2001 From: sunnamed434 Date: Sat, 5 Oct 2024 14:27:11 +0300 Subject: [PATCH 2/5] Remove code used to debug from Rocket.AutoInstaller --- Rocket.AutoInstaller/Installation/Installer.cs | 3 --- 1 file changed, 3 deletions(-) diff --git a/Rocket.AutoInstaller/Installation/Installer.cs b/Rocket.AutoInstaller/Installation/Installer.cs index 482694a..c42225f 100644 --- a/Rocket.AutoInstaller/Installation/Installer.cs +++ b/Rocket.AutoInstaller/Installation/Installer.cs @@ -49,8 +49,6 @@ public static IEnumerator Install() yield break; } - Console.WriteLine("aa: " + moduleAsset.BrowserDownloadUrl); - CommandWindow.LogWarning($"Preparing to install: " + $"RocketModFix {latestRelease.TagName} Released: {latestRelease.PublishedAt}"); @@ -66,7 +64,6 @@ public static IEnumerator Install() } var rawData = request.downloadHandler.data; - File.WriteAllBytes(@"C:\Users\user\Downloads\Rocket.Unturned.Module\a.zip", rawData); var releaseEntries = GetReleaseEntries(rawData); byte[]? rocketModuleData = null; List rocketLibraries = []; From 194d0480e03220092ffe7313c5a040197f572674 Mon Sep 17 00:00:00 2001 From: sunnamed434 Date: Sat, 5 Oct 2024 14:27:28 +0300 Subject: [PATCH 3/5] Update install guides for Rocket and AutoInstaller --- Rocket.AutoInstaller/Module/InstallationGuides/Readme_EN.txt | 2 +- Rocket.AutoInstaller/Module/InstallationGuides/Readme_RU.txt | 2 +- Rocket.Unturned/Module/InstallationGuides/Readme_DE.txt | 2 +- Rocket.Unturned/Module/InstallationGuides/Readme_EN.txt | 2 +- Rocket.Unturned/Module/InstallationGuides/Readme_RU.txt | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Rocket.AutoInstaller/Module/InstallationGuides/Readme_EN.txt b/Rocket.AutoInstaller/Module/InstallationGuides/Readme_EN.txt index 1b2654a..2e0e50e 100644 --- a/Rocket.AutoInstaller/Module/InstallationGuides/Readme_EN.txt +++ b/Rocket.AutoInstaller/Module/InstallationGuides/Readme_EN.txt @@ -12,4 +12,4 @@ Installation Copy the "Rocket.AutoInstaller" folder to /Unturned/Modules (copy the folder, not it's content, and if its asks to Replace the existing files then press to replace them). -For more, visit: https://github.com/RocketModFix/RocketModFix?tab=readme-ov-file#installation \ No newline at end of file +For more, visit: https://github.com/RocketModFix/RocketModFix?tab=readme-ov-file#auto-installer-new-way \ No newline at end of file diff --git a/Rocket.AutoInstaller/Module/InstallationGuides/Readme_RU.txt b/Rocket.AutoInstaller/Module/InstallationGuides/Readme_RU.txt index 9520864..848bafe 100644 --- a/Rocket.AutoInstaller/Module/InstallationGuides/Readme_RU.txt +++ b/Rocket.AutoInstaller/Module/InstallationGuides/Readme_RU.txt @@ -12,4 +12,4 @@ GitHub: https://github.com/RocketModFix/RocketModFix/Rocket.AutoInstaller Скопируйте "Rocket.AutoInstaller" папку в /Unturned/Modules (скопируйте всю папку а не то что в находится внутри папки и если оно просит вставить с заменой то жмите вставить с заменой). -Дополнительная информация по установке: https://github.com/RocketModFix/RocketModFix?tab=readme-ov-file#installation \ No newline at end of file +Дополнительная информация по установке: https://github.com/RocketModFix/RocketModFix?tab=readme-ov-file#auto-installer-new-way \ No newline at end of file diff --git a/Rocket.Unturned/Module/InstallationGuides/Readme_DE.txt b/Rocket.Unturned/Module/InstallationGuides/Readme_DE.txt index b5da944..be329ff 100644 --- a/Rocket.Unturned/Module/InstallationGuides/Readme_DE.txt +++ b/Rocket.Unturned/Module/InstallationGuides/Readme_DE.txt @@ -12,4 +12,4 @@ Installation Copiere den "Rocket.Unturned" Ordner nach /Unturned/Modules (kopiere den Ordner, nicht den Inhalt, und wenn es fragt, ob die vorhandenen Dateien ersetzt werden sollen, dann drücke auf Ersetzen). -Für mehr, besuche: https://github.com/RocketModFix/RocketModFix?tab=readme-ov-file#installation \ No newline at end of file +Für mehr, besuche: https://github.com/RocketModFix/RocketModFix?tab=readme-ov-file#standard-way \ No newline at end of file diff --git a/Rocket.Unturned/Module/InstallationGuides/Readme_EN.txt b/Rocket.Unturned/Module/InstallationGuides/Readme_EN.txt index b2c8625..7ef9b7e 100644 --- a/Rocket.Unturned/Module/InstallationGuides/Readme_EN.txt +++ b/Rocket.Unturned/Module/InstallationGuides/Readme_EN.txt @@ -12,4 +12,4 @@ Installation Copy the "Rocket.Unturned" folder to /Unturned/Modules (copy the folder, not it's content, and if its asks to Replace the existing files then press to replace them). -For more, visit: https://github.com/RocketModFix/RocketModFix?tab=readme-ov-file#installation \ No newline at end of file +For more, visit: https://github.com/RocketModFix/RocketModFix?tab=readme-ov-file#standard-way \ No newline at end of file diff --git a/Rocket.Unturned/Module/InstallationGuides/Readme_RU.txt b/Rocket.Unturned/Module/InstallationGuides/Readme_RU.txt index 8569525..ce06586 100644 --- a/Rocket.Unturned/Module/InstallationGuides/Readme_RU.txt +++ b/Rocket.Unturned/Module/InstallationGuides/Readme_RU.txt @@ -12,4 +12,4 @@ GitHub: https://github.com/RocketModFix/RocketModFix Скопируйте "Rocket.Unturned" папку в /Unturned/Modules (скопируйте всю папку а не то что в находится внутри папки и если оно просит вставить с заменой то жмите вставить с заменой). -Дополнительная информация по установке: https://github.com/RocketModFix/RocketModFix?tab=readme-ov-file#installation \ No newline at end of file +Дополнительная информация по установке: https://github.com/RocketModFix/RocketModFix?tab=readme-ov-file#standard-way \ No newline at end of file From 9821f576e61f29a7712b8c3b4b0e57d536767ae4 Mon Sep 17 00:00:00 2001 From: sunnamed434 Date: Sat, 5 Oct 2024 14:32:16 +0300 Subject: [PATCH 4/5] Fix Auto Installer artifacts cannot be found --- .github/workflows/Rocket.AutoInstaller.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/Rocket.AutoInstaller.yaml b/.github/workflows/Rocket.AutoInstaller.yaml index 29d64af..824ebb7 100644 --- a/.github/workflows/Rocket.AutoInstaller.yaml +++ b/.github/workflows/Rocket.AutoInstaller.yaml @@ -57,7 +57,7 @@ jobs: with: name: RocketModFix Release v${{ steps.project-build.outputs.version }} tag: ${{ steps.project-build.outputs.version }} - artifacts: "./Rocket.AutoInstaller/bin/Release/net461/linux-x64/Rocket.AutoInstaller/Rocket.AutoInstaller.Module.zip" + artifacts: "./Rocket.AutoInstaller/bin/Release/net461/linux-x64/Rocket.AutoInstaller/Rocket.AutoInstaller.zip" token: ${{ secrets.PAT }} prerelease: ${{ steps.project-build.outputs.is_prerelease }} allowUpdates: true From 393379d5f270d7365674f36a926b66e66727d442 Mon Sep 17 00:00:00 2001 From: sunnamed434 Date: Sat, 5 Oct 2024 14:36:33 +0300 Subject: [PATCH 5/5] Add better install guide for AutoInstaller --- Rocket.AutoInstaller/Module/InstallationGuides/Readme_EN.txt | 2 ++ Rocket.AutoInstaller/Module/InstallationGuides/Readme_RU.txt | 2 ++ 2 files changed, 4 insertions(+) diff --git a/Rocket.AutoInstaller/Module/InstallationGuides/Readme_EN.txt b/Rocket.AutoInstaller/Module/InstallationGuides/Readme_EN.txt index 2e0e50e..5087564 100644 --- a/Rocket.AutoInstaller/Module/InstallationGuides/Readme_EN.txt +++ b/Rocket.AutoInstaller/Module/InstallationGuides/Readme_EN.txt @@ -10,6 +10,8 @@ Join our Discord: https://discord.gg/z6VM7taWeG Installation ------------ +Delete "Rocket.Unturned" folder from /Unturned/Modules (if you still have Rocket.Unturned installed) + Copy the "Rocket.AutoInstaller" folder to /Unturned/Modules (copy the folder, not it's content, and if its asks to Replace the existing files then press to replace them). For more, visit: https://github.com/RocketModFix/RocketModFix?tab=readme-ov-file#auto-installer-new-way \ No newline at end of file diff --git a/Rocket.AutoInstaller/Module/InstallationGuides/Readme_RU.txt b/Rocket.AutoInstaller/Module/InstallationGuides/Readme_RU.txt index 848bafe..058ddb6 100644 --- a/Rocket.AutoInstaller/Module/InstallationGuides/Readme_RU.txt +++ b/Rocket.AutoInstaller/Module/InstallationGuides/Readme_RU.txt @@ -10,6 +10,8 @@ GitHub: https://github.com/RocketModFix/RocketModFix/Rocket.AutoInstaller Установка --------- +Удалите "Rocket.Unturned" папку из /Unturned/Modules (если у вас досихпор установлен Rocket.Unturned) + Скопируйте "Rocket.AutoInstaller" папку в /Unturned/Modules (скопируйте всю папку а не то что в находится внутри папки и если оно просит вставить с заменой то жмите вставить с заменой). Дополнительная информация по установке: https://github.com/RocketModFix/RocketModFix?tab=readme-ov-file#auto-installer-new-way \ No newline at end of file