From 3b2e41fa30b2f6169d79c4d5f7b84d022fc3740b Mon Sep 17 00:00:00 2001 From: Greelan <53196309+Greelan@users.noreply.github.com> Date: Thu, 23 Apr 2026 14:22:19 +1000 Subject: [PATCH 1/9] Windrose: add Windrose+ option --- windrose.kvp | 12 +- windroseconfig.json | 275 +++++++++++++++++++++++++++++++++++++ windrosemetaconfig.json | 6 + windroseports.json | 7 + windroserundashboard.ps1 | 42 ++++++ windroserundashboard.sh | 44 ++++++ windrosestart.json | 68 +++++++++ windroseupdates.json | 88 ++++++++++++ windrosewindrose_plus.json | 33 +++++ 9 files changed, 569 insertions(+), 6 deletions(-) create mode 100644 windroserundashboard.ps1 create mode 100644 windroserundashboard.sh create mode 100644 windrosestart.json create mode 100644 windrosewindrose_plus.json diff --git a/windrose.kvp b/windrose.kvp index 2d8b9c01f..ee03db443 100644 --- a/windrose.kvp +++ b/windrose.kvp @@ -1,9 +1,9 @@ Meta.DisplayName=Windrose -Meta.Description=Windrose Dedicated Server +Meta.Description=Windrose Dedicated Server with Windrose+ option Meta.OS=Windows, Linux Meta.AarchSupport=Unknown Meta.Arch=x86_64 -Meta.Author=Greelan +Meta.Author=Greelan, DatGuyMcCaully Meta.URL=https://windrosecrew.com/ Meta.DisplayImageSource=url:https://shared.fastly.steamstatic.com/store_item_assets/steam/apps/3041230/7e838d87d787735d5d29d72777c5ee55653dfb2b/header.jpg Meta.EndpointURIFormat= @@ -21,7 +21,7 @@ Meta.Prerequisites=[] Meta.ExtraContainerPackages=[] Meta.ConfigReleaseState=NotSpecified Meta.NoCommercialUsage=False -Meta.ConfigVersion=3 +Meta.ConfigVersion=4 Meta.ReleaseNotes= Meta.BreakingReleaseNotes= Meta.AppConfigId=719703a2-78d0-45fc-86c7-3d548aba1706 @@ -39,7 +39,7 @@ App.WindowsCommandLineArgs= App.CommandLineArgs={{$PlatformArgs}} R5 {{$FormattedArgs}} -stdout -FullStdOutLogOutput App.UseLinuxIOREDIR=False App.AppSettings={} -App.EnvironmentVariables={"SteamAppId":"3041230","WINEPREFIX":"{{$FullRootDir}}.wine","WINEARCH":"win64","WINEDEBUG":"-all"} +App.EnvironmentVariables={"SteamAppId":"3041230","WINEPREFIX":"{{$FullRootDir}}.wine","WINEARCH":"win64","WINEDEBUG":"-all","WINEDLLOVERRIDES":"dwmapi=n,b"} App.CommandLineParameterFormat=-{0}={1} App.CommandLineParameterDelimiter= App.ExitMethod=OS_CLOSE @@ -79,7 +79,7 @@ App.TelnetLoginFormat={0} App.TelnetNewLineType=Default App.TailLogFilePath={{$FullBaseDir}}R5/Saved/Logs/R5.log App.UpdateSources=@IncludeJson[windroseupdates.json] -App.PreStartStages=[] +App.PreStartStages=@IncludeJson[windrosestart.json] App.CommandTriggers={} App.UserActions=[] App.ForceUpdate=False @@ -100,7 +100,7 @@ App.ApplicationReadyMode=RegexMatch App.QuiesceCommand= App.DequiesceCommand= App.QuiesceSettleDelayMilliseconds=5 -Console.FilterMatchRegex=(\e\[(\d+;)*(\d+)?[ABCDHJKfmsu]|\e\[?[?\>\=\da-z]+|ProtonFixes\[\d+\] WARN: Skipping fix execution\. We are probably running a unit test\.) +Console.FilterMatchRegex=\e\[(\d+;)*(\d+)?[ABCDHJKfmsu]|\e\[?[?\>\=\da-z]+ Console.FilterMatchReplacement= Console.ThrowawayMessageRegex=^(WARNING|ERROR): Shader.+$ Console.AppReadyRegex=^\[[\d\.]+-[\d\.]+:\d+\]\[[\d ]+\]LogGlobalStatus: UEngine::LoadMap Load map complete.*$ diff --git a/windroseconfig.json b/windroseconfig.json index d469a9e83..2056077a9 100644 --- a/windroseconfig.json +++ b/windroseconfig.json @@ -137,5 +137,280 @@ "CIS": "CIS", "EU": "EU and NA" } + }, + { + "DisplayName": "Enable RCON", + "Category": "Windrose:stadia_controller", + "Subcategory": "WindrosePlus:extension:2", + "Description": "If set, the Windrose+ RCON will be enabled", + "Keywords": "rcon,dashboard,enable,enabled,rcon.enabled", + "FieldName": "rcon.enabled", + "InputType": "checkbox", + "ParamFieldName": "$.rcon.enabled", + "DefaultValue": "true", + "EnumValues": { + "False": "false", + "True": "true" + } + }, + { + "DisplayName": "RCON Password", + "Category": "Windrose:stadia_controller", + "Subcategory": "WindrosePlus:extension:2", + "Description": "Sets the password for the Windrose+ RCON. This password is also used for the Windrose+ dashboard login. Default is a strong random password. Blank = disabled", + "Keywords": "rcon,dashboard,password,rcon.password", + "FieldName": "rcon.password", + "InputType": "password", + "ParamFieldName": "$.rcon.password", + "DefaultValue": "{{newguid()}}", + "EnumValues": {} + }, + { + "DisplayName": "Enable Server Query", + "Category": "Windrose:stadia_controller", + "Subcategory": "WindrosePlus:extension:2", + "Description": "If set, Windrose+ server query responses will be enabled", + "Keywords": "query,enable,enabled,query.enabled", + "FieldName": "query.enabled", + "InputType": "checkbox", + "ParamFieldName": "$.query.enabled", + "DefaultValue": "true", + "EnumValues": { + "False": "false", + "True": "true" + } + }, + { + "DisplayName": "Server Query Interval", + "Category": "Windrose:stadia_controller", + "Subcategory": "WindrosePlus:extension:2", + "Description": "Sets the interval for server query responses. Lower values provide more frequent updates but increase server load", + "Keywords": "query,interval,server.query.interval_ms", + "FieldName": "query.interval_ms", + "InputType": "number", + "MinValue": "0", + "ParamFieldName": "$.query.interval_ms", + "DefaultValue": "5000", + "Placeholder": "5000", + "Suffix": "milliseconds", + "EnumValues": {} + }, + { + "DisplayName": "Server Admins", + "Category": "Windrose:stadia_controller", + "Subcategory": "WindrosePlus:extension:2", + "Description": "Sets a list of [Steam64 IDs](https://steamid.io/) of server admins. Admins can run all wp.* commands without the Windrose+ RCON", + "Keywords": "rcon,dashboard,admin,steam,ids,admin.steam_ids", + "FieldName": "admin.steam_ids", + "InputType": "list", + "ParamFieldName": "$.admin.steam_ids", + "DefaultValue": "[]", + "Special": "array:text", + "EnumValues": {} + }, + { + "DisplayName": "Unlock All Ships", + "Category": "Windrose:stadia_controller", + "Subcategory": "WindrosePlus:extension:2", + "Description": "If set, all ships will be unlocked", + "Keywords": "features,unlock,all,ships,features.unlock_all_ships", + "FieldName": "features.unlock_all_ships", + "InputType": "checkbox", + "ParamFieldName": "$.features.unlock_all_ships", + "DefaultValue": "false", + "EnumValues": { + "False": "false", + "True": "true" + } + }, + { + "DisplayName": "Unlock All Recipes", + "Category": "Windrose:stadia_controller", + "Subcategory": "WindrosePlus:extension:2", + "Description": "If set, all recipes will be unlocked", + "Keywords": "features,unlock,all,recipes,features.unlock_all_recipes", + "FieldName": "features.unlock_all_recipes", + "InputType": "checkbox", + "ParamFieldName": "$.features.unlock_all_recipes", + "DefaultValue": "false", + "EnumValues": { + "False": "false", + "True": "true" + } + }, + { + "DisplayName": "XP Multiplier", + "Category": "Windrose:stadia_controller", + "Subcategory": "WindrosePlus:extension:2", + "Description": "Sets the experience gain multiplier. 1.0 = default, 2.0 = double XP", + "Keywords": "xp,experience,multiplier.multipliers.xp", + "FieldName": "multipliers.xp", + "InputType": "number", + "MinValue": "0.1", + "MaxValue": "100", + "ParamFieldName": "$.multipliers.xp", + "DefaultValue": "1.0", + "Placeholder": "1.0", + "MultipleOf": "0.000001", + "EnumValues": {} + }, + { + "DisplayName": "Loot Multiplier", + "Category": "Windrose:stadia_controller", + "Subcategory": "WindrosePlus:extension:2", + "Description": "Sets the loot drop rate multiplier. 1.0 = default, 2.0 = double loot", + "Keywords": "loot,drop,multiplier,multipliers.loot", + "FieldName": "multipliers.loot", + "InputType": "number", + "MinValue": "0.1", + "MaxValue": "100", + "ParamFieldName": "$.multipliers.loot", + "DefaultValue": "1.0", + "Placeholder": "1.0", + "MultipleOf": "0.000001", + "EnumValues": {} + }, + { + "DisplayName": "Stack Size Multiplier", + "Category": "Windrose:stadia_controller", + "Subcategory": "WindrosePlus:extension:2", + "Description": "Sets the item stack size multiplier. 5.0 = five times the default stack size", + "Keywords": "stack,size,inventory,multiplier,multipliers.stack_size", + "FieldName": "multipliers.stack_size", + "InputType": "number", + "MinValue": "0.1", + "MaxValue": "100", + "ParamFieldName": "$.multipliers.stack_size", + "DefaultValue": "1.0", + "Placeholder": "1.0", + "MultipleOf": "0.000001", + "EnumValues": {} + }, + { + "DisplayName": "Craft Cost Multiplier", + "Category": "Windrose:stadia_controller", + "Subcategory": "WindrosePlus:extension:2", + "Description": "Sets the crafting resource cost multiplier. 0.5 = half the normal crafting cost", + "Keywords": "crafting,cost,multiplier,multipliers.craft_cost", + "FieldName": "multipliers.craft_cost", + "InputType": "number", + "MinValue": "0.1", + "MaxValue": "100", + "ParamFieldName": "$.multipliers.craft_cost", + "DefaultValue": "1.0", + "Placeholder": "1.0", + "MultipleOf": "0.000001", + "EnumValues": {} + }, + { + "DisplayName": "Crop Speed Multiplier", + "Category": "Windrose:stadia_controller", + "Subcategory": "WindrosePlus:extension:2", + "Description": "Sets the crop growth speed multiplier. 2.0 = crops grow twice as fast", + "Keywords": "farming,crop,speed,multiplier,multipliers.crop_speed", + "FieldName": "multipliers.crop_speed", + "InputType": "number", + "MinValue": "0.1", + "MaxValue": "100", + "ParamFieldName": "$.multipliers.crop_speed", + "DefaultValue": "1.0", + "Placeholder": "1.0", + "MultipleOf": "0.000001", + "EnumValues": {} + }, + { + "DisplayName": "Cooking Speed Multiplier", + "Category": "Windrose:stadia_controller", + "Subcategory": "WindrosePlus:extension:2", + "Description": "Sets the cooking/fermentation/smelting speed multiplier. 2.0 = twice as fast", + "Keywords": "cooking,fermentation,smelting,speed,multiplier,multipliers.cooking_speed", + "FieldName": "multipliers.cooking_speed", + "InputType": "number", + "MinValue": "0.1", + "MaxValue": "100", + "ParamFieldName": "$.multipliers.cooking_speed", + "DefaultValue": "1.0", + "Placeholder": "1.0", + "MultipleOf": "0.000001", + "EnumValues": {} + }, + { + "DisplayName": "Harvest Yield Multiplier", + "Category": "Windrose:stadia_controller", + "Subcategory": "WindrosePlus:extension:2", + "Description": "Sets the amount of resources gathered from harvesting. 2.0 = double yield", + "Keywords": "harvest,yield,resources,multiplier,multipliers.harvest_yield", + "FieldName": "multipliers.harvest_yield", + "InputType": "number", + "MinValue": "0.1", + "MaxValue": "100", + "ParamFieldName": "$.multipliers.harvest_yield", + "DefaultValue": "1.0", + "Placeholder": "1.0", + "MultipleOf": "0.000001", + "EnumValues": {} + }, + { + "DisplayName": "Inventory Size Multiplier", + "Category": "Windrose:stadia_controller", + "Subcategory": "WindrosePlus:extension:2", + "Description": "Player inventory slot count multiplier", + "Keywords": "inventory,size,slots,multiplier,multipliers.inventory_size", + "FieldName": "multipliers.inventory_size", + "InputType": "number", + "MinValue": "0.5", + "MaxValue": "10", + "ParamFieldName": "$.multipliers.inventory_size", + "DefaultValue": "1.0", + "Placeholder": "1.0", + "MultipleOf": "0.000001", + "EnumValues": {} + }, + { + "DisplayName": "Carry Weight Multiplier", + "Category": "Windrose:stadia_controller", + "Subcategory": "WindrosePlus:extension:2", + "Description": "Sets the player carry weight multiplier", + "Keywords": "weight,carry,multiplier,multipliers.weight", + "FieldName": "multipliers.weight", + "InputType": "number", + "MinValue": "0.1", + "MaxValue": "10", + "ParamFieldName": "$.multipliers.weight", + "DefaultValue": "1.0", + "Placeholder": "1.0", + "MultipleOf": "0.000001", + "EnumValues": {} + }, + { + "DisplayName": "Points Per Level Multiplier", + "Category": "Windrose:stadia_controller", + "Subcategory": "WindrosePlus:extension:2", + "Description": "Sets the skill points granted per level up. 2.0 = double points", + "Keywords": "points,level,skill,multiplier,multipliers.points_per_level", + "FieldName": "multipliers.points_per_level", + "InputType": "number", + "MinValue": "1", + "MaxValue": "10", + "ParamFieldName": "$.multipliers.points_per_level", + "DefaultValue": "1.0", + "Placeholder": "1.0", + "MultipleOf": "0.000001", + "EnumValues": {} + }, + { + "DisplayName": "Install Windrose+", + "Category": "Updates", + "Subcategory": "Runtime Configuration:build:3", + "Description": "If set, [Windrose+](https://github.com/humangenome/WindrosePlus) will be installed when the server is updated, and the PAK builder and dashboard run when the server is started. Includes UE4SS experimental build", + "Keywords": "install,windrose+,windrose,plus,InstallWindrosePlus", + "FieldName": "InstallWindrosePlus", + "InputType": "checkbox", + "ParamFieldName": "InstallWindrosePlus", + "DefaultValue": "false", + "EnumValues": { + "False": "false", + "True": "true" + } } ] \ No newline at end of file diff --git a/windrosemetaconfig.json b/windrosemetaconfig.json index 40bbefb3f..f7bfe9119 100644 --- a/windrosemetaconfig.json +++ b/windrosemetaconfig.json @@ -4,5 +4,11 @@ "AutoMap": true, "Importable": true, "ConfigType": "json" + }, + { + "ConfigFile": "windrose_plus.json", + "AutoMap": true, + "Importable": true, + "ConfigType": "json" } ] \ No newline at end of file diff --git a/windroseports.json b/windroseports.json index 05a5d6528..27253a445 100644 --- a/windroseports.json +++ b/windroseports.json @@ -5,5 +5,12 @@ "Ref": "GamePort", "Name": "Game Port", "Description": "Port used for direct connection game traffic" + }, + { + "Protocol": "TCP", + "Port": 8780, + "Ref": "HTTPPort", + "Name": "Windrose+ Dashboard Port", + "Description": "Port used for Windrose+ dashboard and API traffic" } ] \ No newline at end of file diff --git a/windroserundashboard.ps1 b/windroserundashboard.ps1 new file mode 100644 index 000000000..a1fc5fe0f --- /dev/null +++ b/windroserundashboard.ps1 @@ -0,0 +1,42 @@ +# Arguments: [http_port] + +$serverProcess = "$PSScriptRoot\windrose\4129620\R5\Binaries\Win64\WindroseServer-Win64-Shipping.exe" + +# Check if Windrose server starts successfully within 1 minute +# If not, exit +$serverStarted = $false +for ($i = 1; $i -le 60; $i++) { + if (Get-WmiObject Win32_Process | Where-Object {$_.ExecutablePath -eq "$serverProcess"} -ErrorAction SilentlyContinue) { + $serverStarted = $true + break + } + Start-Sleep -Seconds 1 +} +if (-not $serverStarted) { exit 0 } + +# Start the Windrose+ dashboard +$dashboardJob = Start-Job -ScriptBlock { + param($scriptRoot, $port) + & powershell.exe -NoProfile -ExecutionPolicy Bypass -File "$scriptRoot\windrose\4129620\windrose_plus\server\windrose_plus_server.ps1" -Port $port -GameDir "$scriptRoot\windrose\4129620" +} -ArgumentList $PSScriptRoot, $args[0] + +# Exit if dashboard fails to start +Start-Sleep -Seconds 10 +Receive-Job -Id $dashboardJob.Id +if ((Get-Job -Id $dashboardJob.Id).State -ne 'Running') { + Receive-Job -Id $dashboardJob.Id + exit 0 +} + +# Monitor server process and terminate dashboard +# when server terminates +while ($true) { + Receive-Job -Id $dashboardJob.Id + if (-not (Get-WmiObject Win32_Process | Where-Object {$_.ExecutablePath -eq "$serverProcess"} -ErrorAction SilentlyContinue)) { + Stop-Job -Id $dashboardJob.Id + Receive-Job -Id $dashboardJob.Id + Remove-Job -Id $dashboardJob.Id -Force + exit 0 + } + Start-Sleep -Seconds 1 +} diff --git a/windroserundashboard.sh b/windroserundashboard.sh new file mode 100644 index 000000000..e81d55d71 --- /dev/null +++ b/windroserundashboard.sh @@ -0,0 +1,44 @@ +#!/bin/bash + +# Arguments: [http_port] + +scriptDir=$(pwd) +serverProcess="Z:${scriptDir//\//\\}\\windrose\\4129620\\R5\\Binaries\\Win64\\WindroseServer-Win64-Shipping.exe" +export TEMP=${TMPDIR:-/tmp} + +# Check if Windrose server starts successfully within 1 minute +# If not, exit +serverStarted=false +for i in $(seq 1 60); do + serverPid=$(ps aux | grep -F "${serverProcess}" | grep -v grep | awk '{print $2}') + if [[ -n "$serverPid" ]]; then + serverStarted=true + break + fi + sleep 1 +done +if ! $serverStarted; then + exit 0 +fi + +# Start the Windrose+ dashboard +cd ./windrose/4129620 +powershell/pwsh -NoProfile -File "$scriptDir/windrose/4129620/windrose_plus/server/windrose_plus_server.ps1" -Port $1 -GameDir "$scriptDir/windrose/4129620" & +dashboardPid=$! + +# Exit if dashboard fails to start +sleep 10 +if ! kill -0 "$dashboardPid" 2>/dev/null; then + exit 0 +fi + +# Monitor server process and terminate dashboard +# when server terminates or SIGTERM/SIGINT received +trap 'kill $dashboardPid' SIGTERM SIGINT +while true; do + if ! kill -0 "$serverPid" 2>/dev/null; then + kill "$dashboardPid" >/dev/null 2>&1 + exit 0 + fi + sleep 1 +done diff --git a/windrosestart.json b/windrosestart.json new file mode 100644 index 000000000..4e0c4f7bb --- /dev/null +++ b/windrosestart.json @@ -0,0 +1,68 @@ +[ + { + "UpdateStageName": "Windrose+ PAK Rebuild", + "UpdateSourcePlatform": "Windows", + "UpdateSource": "Executable", + "UpdateSourceData": "powershell.exe", + "UpdateSourceArgs": "-NoProfile -ExecutionPolicy Bypass -File \"{{$FullBaseDir}}windrose_plus/tools/WindrosePlus-BuildPak.ps1\" -ServerDir \"{{$FullRootDir}}4129620\"", + "UpdateSourceConditionSetting": "InstallWindrosePlus", + "UpdateSourceConditionValue": "true", + "SkipOnFailure": true + }, + { + "UpdateStageName": "Windrose+ PAK Rebuild", + "UpdateSourcePlatform": "Linux", + "UpdateSource": "Executable", + "UpdateSourceData": "/bin/bash", + "UpdateSourceArgs": "-c \"export TEMP=${TMPDIR-/tmp}; cd \\\"{{$FullBaseDir}}\\\" && powershell/pwsh ./windrose_plus/tools/WindrosePlus-BuildPak.ps1 -ServerDir \\\"{{$FullRootDir}}4129620\\\"\"", + "UpdateSourceConditionSetting": "InstallWindrosePlus", + "UpdateSourceConditionValue": "true", + "SkipOnFailure": true + }, + { + "UpdateStageName": "Dashboard Script Download", + "UpdateSourcePlatform": "Windows", + "UpdateSource": "FetchURL", + "UpdateSourceData": "https://raw.githubusercontent.com/CubeCoders/AMPTemplates/main/windroserundashboard.ps1", + "UpdateSourceArgs": "rundashboard.ps1", + "UpdateSourceTarget": "{{$FullInstanceDir}}", + "OverwriteExistingFiles": true, + "UpdateSourceConditionSetting": "InstallWindrosePlus", + "UpdateSourceConditionValue": "true", + "SkipOnFailure": false + }, + { + "UpdateStageName": "Dashboard Script Download", + "UpdateSourcePlatform": "Linux", + "UpdateSource": "FetchURL", + "UpdateSourceData": "https://raw.githubusercontent.com/CubeCoders/AMPTemplates/main/windroserundashboard.sh", + "UpdateSourceArgs": "rundashboard.sh", + "UpdateSourceTarget": "{{$FullInstanceDir}}", + "OverwriteExistingFiles": true, + "UpdateSourceConditionSetting": "InstallWindrosePlus", + "UpdateSourceConditionValue": "true", + "SkipOnFailure": false + }, + { + "UpdateStageName": "Run Windrose+ Dashboard", + "UpdateSourcePlatform": "Windows", + "UpdateSource": "Executable", + "UpdateSourceData": "powershell.exe", + "UpdateSourceArgs": "-NoProfile -ExecutionPolicy Bypass -File ./rundashboard.ps1 {{$HTTPPort}}", + "UpdateSourceConditionSetting": "InstallWindrosePlus", + "UpdateSourceConditionValue": "true", + "RunInBackground": true, + "SkipOnFailure": true + }, + { + "UpdateStageName": "Run Windrose+ Dashboard", + "UpdateSourcePlatform": "Linux", + "UpdateSource": "Executable", + "UpdateSourceData": "/bin/bash", + "UpdateSourceArgs": "-c \"chmod +x rundashboard.sh; ./rundashboard.sh {{$HTTPPort}} &\"", + "UpdateSourceConditionSetting": "InstallWindrosePlus", + "UpdateSourceConditionValue": "true", + "RunInBackground": true, + "SkipOnFailure": true + } +] \ No newline at end of file diff --git a/windroseupdates.json b/windroseupdates.json index 968b7de1b..68f88e8fd 100644 --- a/windroseupdates.json +++ b/windroseupdates.json @@ -34,5 +34,93 @@ "UpdateSourceData": "/bin/bash", "UpdateSourceArgs": "-c \"rm -rf \\\"{{$FullRootDir}}.wine\\\" >/dev/null 2>&1; WINEPREFIX=\\\"{{$FullRootDir}}.wine\\\" WINEARCH=win64 WINEDEBUG=-all /usr/bin/wineboot --init\"", "SkipOnFailure": false + }, + { + "UpdateStageName": "Windrose+ Download", + "UpdateSourcePlatform": "All", + "UpdateSource": "GithubRelease", + "UpdateSourceArgs": "HumanGenome/WindrosePlus", + "UpdateSourceData": "WindrosePlus.zip", + "UpdateSourceTarget": "{{$FullBaseDir}}", + "UpdateSourceConditionSetting": "InstallWindrosePlus", + "UpdateSourceConditionValue": "true", + "UnzipUpdateSource": true, + "OverwriteExistingFiles": true, + "DeleteAfterExtract": true, + "SkipOnFailure": false + }, + { + "UpdateStageName": "Windrose+ Installation", + "UpdateSourcePlatform": "Windows", + "UpdateSource": "Executable", + "UpdateSourceData": "powershell.exe", + "UpdateSourceArgs": "-NoProfile -ExecutionPolicy Bypass -File \"{{$FullBaseDir}}install.ps1\" -GameDir \"{{$FullRootDir}}4129620\"", + "UpdateSourceConditionSetting": "InstallWindrosePlus", + "UpdateSourceConditionValue": "true", + "SkipOnFailure": false + }, + { + "UpdateStageName": "PowerShell Download", + "UpdateSourcePlatform": "Linux", + "UpdateSource": "Executable", + "UpdateSourceData": "/bin/bash", + "UpdateSourceArgs": "-c \"cd \\\"{{$FullBaseDir}}\\\"; if [[ -x powershell/pwsh ]]; then InstalledVersion=v$(powershell/pwsh -version | sed \\\"s/PowerShell //\\\"); else InstalledVersion=\\\"\\\"; fi; LatestVersion=$(wget -qO- https://api.github.com/repos/PowerShell/PowerShell/releases/latest | jq -r .tag_name); if [[ -z \\\"$LatestVersion\\\" ]]; then echo \\\"Failed to fetch latest PowerShell version\\\" && exit 1; fi; if [[ \\\"$InstalledVersion\\\" == \\\"$LatestVersion\\\" ]]; then echo \\\"PowerShell $LatestVersion already installed. Skipping\\\" && exit 0; fi; rm -rf powershell; mkdir -p powershell; PwshVersion=${LatestVersion#v}; wget -qO powershell.tar.gz \\\"https://github.com/PowerShell/PowerShell/releases/download/$LatestVersion/powershell-$PwshVersion-linux-x64.tar.gz\\\" || { echo \\\"PowerShell download failed. Aborting\\\"; exit 1; }; tar -xzf powershell.tar.gz -C powershell && rm -f powershell.tar.gz && chmod +x powershell/pwsh && echo \\\"PowerShell $LatestVersion downloaded\\\"\"", + "SkipOnFailure": false + }, + { + "UpdateStageName": "Windrose+ Installation", + "UpdateSourcePlatform": "Linux", + "UpdateSource": "Executable", + "UpdateSourceData": "/bin/bash", + "UpdateSourceArgs": "-c \"export TEMP=${TMPDIR-/tmp}; cd \\\"{{$FullBaseDir}}\\\" && powershell/pwsh -NoProfile -File ./install.ps1 -GameDir \\\"{{$FullRootDir}}4129620\\\"\"", + "UpdateSourceConditionSetting": "InstallWindrosePlus", + "UpdateSourceConditionValue": "true", + "SkipOnFailure": true + }, + { + "UpdateStageName": "Repak Download", + "UpdateSourcePlatform": "Linux", + "UpdateSource": "GithubRelease", + "UpdateSourceArgs": "trumank/repak", + "UpdateSourceData": "repak_cli-x86_64-unknown-linux-gnu.tar.xz", + "UpdateSourceTarget": "{{$FullBaseDir}}windrose_plus/tools/bin", + "UpdateSourceConditionSetting": "InstallWindrosePlus", + "UpdateSourceConditionValue": "true", + "OverwriteExistingFiles": true, + "SkipOnFailure": false + }, + { + "UpdateStageName": "Retoc Download", + "UpdateSourcePlatform": "Linux", + "UpdateSource": "GithubRelease", + "UpdateSourceArgs": "trumank/retoc", + "UpdateSourceData": "retoc_cli-x86_64-unknown-linux-gnu.tar.xz", + "UpdateSourceTarget": "{{$FullBaseDir}}windrose_plus/tools/bin", + "UpdateSourceConditionSetting": "InstallWindrosePlus", + "UpdateSourceConditionValue": "true", + "OverwriteExistingFiles": true, + "SkipOnFailure": false + }, + { + "UpdateStageName": "Repak and Retoc Installation", + "UpdateSourcePlatform": "Linux", + "UpdateSource": "Executable", + "UpdateSourceData": "/bin/bash", + "UpdateSourceArgs": "-c \"cd \\\"{{$FullBaseDir}}windrose_plus/tools/bin\\\" && tar -xf repak_cli-x86_64-unknown-linux-gnu.tar.xz --strip-components=1 && tar -xf retoc_cli-x86_64-unknown-linux-gnu.tar.xz --strip-components=1 && chmod +x repak retoc && rm -f repak.exe retoc.exe && mv repak repak.exe && mv retoc retoc.exe && rm -f repak_cli-x86_64-unknown-linux-gnu.tar.xz retoc_cli-x86_64-unknown-linux-gnu.tar.xz\"", + "UpdateSourceConditionSetting": "InstallWindrosePlus", + "UpdateSourceConditionValue": "true", + "SkipOnFailure": false + }, + { + "UpdateStageName": "Default windrose_plus.json Download", + "UpdateSourcePlatform": "All", + "UpdateSource": "FetchURL", + "UpdateSourceData": "https://raw.githubusercontent.com/CubeCoders/AMPTemplates/main/windrosewindrose_plus.json", + "UpdateSourceTarget": "{{$FullBaseDir}}", + "UpdateSourceArgs": "windrose_plus.json", + "OverwriteExistingFiles": false, + "UpdateSourceConditionSetting": "InstallWindrosePlus", + "UpdateSourceConditionValue": "true", + "SkipOnFailure": false } ] \ No newline at end of file diff --git a/windrosewindrose_plus.json b/windrosewindrose_plus.json new file mode 100644 index 000000000..99d07aec6 --- /dev/null +++ b/windrosewindrose_plus.json @@ -0,0 +1,33 @@ +{ + "rcon": { + "enabled": true, + "password": "", + "port": 27320 + }, + "query": { + "enabled": true, + "interval_ms": 5000 + }, + "admin": { + "steam_ids": [] + }, + "features": { + "unlock_all_ships": false, + "unlock_all_recipes": false + }, + "multipliers": { + "xp": 1.0, + "harvest_yield": 1.0, + "inventory_size": 1.0, + "stack_size": 1.0, + "weight": 1.0, + "loot": 1.0, + "points_per_level": 1.0, + "crop_speed": 1.0, + "cooking_speed": 1.0, + "craft_cost": 1.0 + }, + "debug": { + "log_level": "info" + } +} \ No newline at end of file From ca5b1d307f92caf2b1ab93a6c2816530f9ef5f98 Mon Sep 17 00:00:00 2001 From: Greelan <53196309+Greelan@users.noreply.github.com> Date: Fri, 24 Apr 2026 14:09:24 +1000 Subject: [PATCH 2/9] Add dashboard IP binding settings --- windroseconfig.json | 28 ++++++++++++++++++++++++++++ windroserundashboard.ps1 | 6 +++--- windroserundashboard.sh | 2 +- windrosestart.json | 4 ++-- 4 files changed, 34 insertions(+), 6 deletions(-) diff --git a/windroseconfig.json b/windroseconfig.json index 2056077a9..36642c324 100644 --- a/windroseconfig.json +++ b/windroseconfig.json @@ -208,6 +208,34 @@ "Special": "array:text", "EnumValues": {} }, + { + "DisplayName": "Dashboard IP Binding Selection Mode", + "Category": "Windrose:stadia_controller", + "Subcategory": "WindrosePlus:extension:2", + "Description": "Sets whether the IP binding of the Windrose+ dashboard should be automatically set, or whether it should be set to the instance's Application IP Binding or the IP set under Dashboard IP Binding. Note that on Windows the forced binding is 'localhost' only unless the Network Service user has appropriate ACL permissions", + "Keywords": "ip,binding,dashboard", + "FieldName": "HTTPBinding", + "InputType": "enum", + "ParamFieldName": "HTTPBinding", + "DefaultValue": "", + "EnumValues": { + "": "Automatic (default)", + "{{$ApplicationIPBinding}}": "Application IP Binding", + "{{ManualIPBinding}}": "Manual" + } + }, + { + "DisplayName": "Dashboard IP Binding", + "Category": "Windrose:stadia_controller", + "Subcategory": "WindrosePlus:extension:2", + "Description": "Sets the IP binding for the Windrose+ dashboard, if 'Manual' is selected as the Dashboard IP Binding Selection Mode", + "Keywords": "manual,ip,binding,dashboard", + "FieldName": "ManualIPBinding", + "InputType": "text", + "ParamFieldName": "ManualIPBinding", + "DefaultValue": "", + "EnumValues": {} + }, { "DisplayName": "Unlock All Ships", "Category": "Windrose:stadia_controller", diff --git a/windroserundashboard.ps1 b/windroserundashboard.ps1 index a1fc5fe0f..9a602ad6b 100644 --- a/windroserundashboard.ps1 +++ b/windroserundashboard.ps1 @@ -16,9 +16,9 @@ if (-not $serverStarted) { exit 0 } # Start the Windrose+ dashboard $dashboardJob = Start-Job -ScriptBlock { - param($scriptRoot, $port) - & powershell.exe -NoProfile -ExecutionPolicy Bypass -File "$scriptRoot\windrose\4129620\windrose_plus\server\windrose_plus_server.ps1" -Port $port -GameDir "$scriptRoot\windrose\4129620" -} -ArgumentList $PSScriptRoot, $args[0] + param($scriptRoot, $port, $bindIp) + & powershell.exe -NoProfile -ExecutionPolicy Bypass -File "$scriptRoot\windrose\4129620\windrose_plus\server\windrose_plus_server.ps1" -Port $port $(if ($bindIp) { "-BindIp", $bindIp }) -GameDir "$scriptRoot\windrose\4129620" +} -ArgumentList $PSScriptRoot, $args[0], $args[1] # Exit if dashboard fails to start Start-Sleep -Seconds 10 diff --git a/windroserundashboard.sh b/windroserundashboard.sh index e81d55d71..4f78d0da8 100644 --- a/windroserundashboard.sh +++ b/windroserundashboard.sh @@ -23,7 +23,7 @@ fi # Start the Windrose+ dashboard cd ./windrose/4129620 -powershell/pwsh -NoProfile -File "$scriptDir/windrose/4129620/windrose_plus/server/windrose_plus_server.ps1" -Port $1 -GameDir "$scriptDir/windrose/4129620" & +powershell/pwsh -NoProfile -File "$scriptDir/windrose/4129620/windrose_plus/server/windrose_plus_server.ps1" -Port $1 ${2:+-BindIp "$2"} -GameDir "$scriptDir/windrose/4129620" & dashboardPid=$! # Exit if dashboard fails to start diff --git a/windrosestart.json b/windrosestart.json index 4e0c4f7bb..7ef07f308 100644 --- a/windrosestart.json +++ b/windrosestart.json @@ -48,7 +48,7 @@ "UpdateSourcePlatform": "Windows", "UpdateSource": "Executable", "UpdateSourceData": "powershell.exe", - "UpdateSourceArgs": "-NoProfile -ExecutionPolicy Bypass -File ./rundashboard.ps1 {{$HTTPPort}}", + "UpdateSourceArgs": "-NoProfile -ExecutionPolicy Bypass -File ./rundashboard.ps1 {{$HTTPPort}} {{HTTPBinding}}", "UpdateSourceConditionSetting": "InstallWindrosePlus", "UpdateSourceConditionValue": "true", "RunInBackground": true, @@ -59,7 +59,7 @@ "UpdateSourcePlatform": "Linux", "UpdateSource": "Executable", "UpdateSourceData": "/bin/bash", - "UpdateSourceArgs": "-c \"chmod +x rundashboard.sh; ./rundashboard.sh {{$HTTPPort}} &\"", + "UpdateSourceArgs": "-c \"chmod +x rundashboard.sh; ./rundashboard.sh {{$HTTPPort}} {{HTTPBinding}} &\"", "UpdateSourceConditionSetting": "InstallWindrosePlus", "UpdateSourceConditionValue": "true", "RunInBackground": true, From aecf2f0d7b37ee8af1873fb5db776ba7d771f2db Mon Sep 17 00:00:00 2001 From: Greelan <53196309+Greelan@users.noreply.github.com> Date: Fri, 24 Apr 2026 15:30:55 +1000 Subject: [PATCH 3/9] Add CPU optimization settings --- windroseconfig.json | 31 +++++++++++++++++++++++++++++++ windrosewindrose_plus.json | 4 ++++ 2 files changed, 35 insertions(+) diff --git a/windroseconfig.json b/windroseconfig.json index 36642c324..37012b8f0 100644 --- a/windroseconfig.json +++ b/windroseconfig.json @@ -236,6 +236,37 @@ "DefaultValue": "", "EnumValues": {} }, + { + "DisplayName": "Enable CPU Optimization", + "Category": "Windrose:stadia_controller", + "Subcategory": "WindrosePlus:extension:2", + "Description": "If set, idle CPU limiting will be enabled. Update the server after enabling or disabling this setting for the IdleCpuLimiter mod to be installed and loaded. [More information, including known issues](https://github.com/humangenome/WindrosePlus#cpu-optimization)", + "Keywords": "cpu,optimization,limiting,idle,performance,performance.idle_cpu_limiter_enabled", + "FieldName": "performance.idle_cpu_limiter_enabled", + "InputType": "checkbox", + "ParamFieldName": "$.performance.idle_cpu_limiter_enabled", + "DefaultValue": "false", + "EnumValues": { + "False": "false", + "True": "true" + } + }, + { + "DisplayName": "Idle CPU Limit Percentage", + "Category": "Windrose:stadia_controller", + "Subcategory": "WindrosePlus:extension:2", + "Description": "Sets the CPU usage limit percentage for idle CPU limiting, if CPU Optimization is enabled. Recommended to keep at default 2.0% unless there is a reason to increase it, eg if players report slow joins or loading timeouts", + "Keywords": "cpu,optimization,limiting,idle,limit,percentage,performance.idle_cpu_limit_percent", + "FieldName": "performance.idle_cpu_limit_percent", + "InputType": "number", + "MinValue": "0", + "MaxValue": "100", + "ParamFieldName": "$.performance.idle_cpu_limit_percent", + "DefaultValue": "2.0", + "Placeholder": "2.0", + "Suffix": "%", + "EnumValues": {} + }, { "DisplayName": "Unlock All Ships", "Category": "Windrose:stadia_controller", diff --git a/windrosewindrose_plus.json b/windrosewindrose_plus.json index 99d07aec6..69e55086b 100644 --- a/windrosewindrose_plus.json +++ b/windrosewindrose_plus.json @@ -27,6 +27,10 @@ "cooking_speed": 1.0, "craft_cost": 1.0 }, + "performance": { + "idle_cpu_limiter_enabled": false, + "idle_cpu_limit_percent": 2.0 + }, "debug": { "log_level": "info" } From 2c8aa6305c83315e080e8dad5b0334013f57fc2a Mon Sep 17 00:00:00 2001 From: Greelan <53196309+Greelan@users.noreply.github.com> Date: Fri, 24 Apr 2026 15:36:04 +1000 Subject: [PATCH 4/9] Update parameters --- windroserundashboard.ps1 | 2 +- windroserundashboard.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/windroserundashboard.ps1 b/windroserundashboard.ps1 index 9a602ad6b..40c416c01 100644 --- a/windroserundashboard.ps1 +++ b/windroserundashboard.ps1 @@ -1,4 +1,4 @@ -# Arguments: [http_port] +# Arguments: [http_port] (bind_ip) $serverProcess = "$PSScriptRoot\windrose\4129620\R5\Binaries\Win64\WindroseServer-Win64-Shipping.exe" diff --git a/windroserundashboard.sh b/windroserundashboard.sh index 4f78d0da8..3b899a5bd 100644 --- a/windroserundashboard.sh +++ b/windroserundashboard.sh @@ -1,6 +1,6 @@ #!/bin/bash -# Arguments: [http_port] +# Arguments: [http_port] (bind_ip) scriptDir=$(pwd) serverProcess="Z:${scriptDir//\//\\}\\windrose\\4129620\\R5\\Binaries\\Win64\\WindroseServer-Win64-Shipping.exe" From 05c447c89c98160e077fb767e71a5cd3c2e4cddc Mon Sep 17 00:00:00 2001 From: Greelan <53196309+Greelan@users.noreply.github.com> Date: Sat, 25 Apr 2026 08:56:01 +1000 Subject: [PATCH 5/9] Revert "Add CPU optimization settings" This reverts commit de85d1df7ec8044a83e2da00be854a2eaa5c503e. --- windroseconfig.json | 31 ------------------------------- windrosewindrose_plus.json | 4 ---- 2 files changed, 35 deletions(-) diff --git a/windroseconfig.json b/windroseconfig.json index 37012b8f0..36642c324 100644 --- a/windroseconfig.json +++ b/windroseconfig.json @@ -236,37 +236,6 @@ "DefaultValue": "", "EnumValues": {} }, - { - "DisplayName": "Enable CPU Optimization", - "Category": "Windrose:stadia_controller", - "Subcategory": "WindrosePlus:extension:2", - "Description": "If set, idle CPU limiting will be enabled. Update the server after enabling or disabling this setting for the IdleCpuLimiter mod to be installed and loaded. [More information, including known issues](https://github.com/humangenome/WindrosePlus#cpu-optimization)", - "Keywords": "cpu,optimization,limiting,idle,performance,performance.idle_cpu_limiter_enabled", - "FieldName": "performance.idle_cpu_limiter_enabled", - "InputType": "checkbox", - "ParamFieldName": "$.performance.idle_cpu_limiter_enabled", - "DefaultValue": "false", - "EnumValues": { - "False": "false", - "True": "true" - } - }, - { - "DisplayName": "Idle CPU Limit Percentage", - "Category": "Windrose:stadia_controller", - "Subcategory": "WindrosePlus:extension:2", - "Description": "Sets the CPU usage limit percentage for idle CPU limiting, if CPU Optimization is enabled. Recommended to keep at default 2.0% unless there is a reason to increase it, eg if players report slow joins or loading timeouts", - "Keywords": "cpu,optimization,limiting,idle,limit,percentage,performance.idle_cpu_limit_percent", - "FieldName": "performance.idle_cpu_limit_percent", - "InputType": "number", - "MinValue": "0", - "MaxValue": "100", - "ParamFieldName": "$.performance.idle_cpu_limit_percent", - "DefaultValue": "2.0", - "Placeholder": "2.0", - "Suffix": "%", - "EnumValues": {} - }, { "DisplayName": "Unlock All Ships", "Category": "Windrose:stadia_controller", diff --git a/windrosewindrose_plus.json b/windrosewindrose_plus.json index 69e55086b..99d07aec6 100644 --- a/windrosewindrose_plus.json +++ b/windrosewindrose_plus.json @@ -27,10 +27,6 @@ "cooking_speed": 1.0, "craft_cost": 1.0 }, - "performance": { - "idle_cpu_limiter_enabled": false, - "idle_cpu_limit_percent": 2.0 - }, "debug": { "log_level": "info" } From df293cbeb850195b0b1fe34947cf073dbf073e74 Mon Sep 17 00:00:00 2001 From: Greelan <53196309+Greelan@users.noreply.github.com> Date: Mon, 27 Apr 2026 09:39:24 +1000 Subject: [PATCH 6/9] Rename setting to match latest update --- windroseconfig.json | 10 +++++----- windrosewindrose_plus.json | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/windroseconfig.json b/windroseconfig.json index 36642c324..9e6caa839 100644 --- a/windroseconfig.json +++ b/windroseconfig.json @@ -315,16 +315,16 @@ "EnumValues": {} }, { - "DisplayName": "Craft Cost Multiplier", + "DisplayName": "Craft Efficiency Multiplier", "Category": "Windrose:stadia_controller", "Subcategory": "WindrosePlus:extension:2", - "Description": "Sets the crafting resource cost multiplier. 0.5 = half the normal crafting cost", - "Keywords": "crafting,cost,multiplier,multipliers.craft_cost", - "FieldName": "multipliers.craft_cost", + "Description": "Sets the crafting efficiency multiplier. 2.0 = half the normal crafting cost (lower ingredient counts), 0.5 = double the normal crafting cost (higher ingredient counts)", + "Keywords": "crafting,efficiency,multiplier,multipliers.craft_efficiency", + "FieldName": "multipliers.craft_efficiency", "InputType": "number", "MinValue": "0.1", "MaxValue": "100", - "ParamFieldName": "$.multipliers.craft_cost", + "ParamFieldName": "$.multipliers.craft_efficiency", "DefaultValue": "1.0", "Placeholder": "1.0", "MultipleOf": "0.000001", diff --git a/windrosewindrose_plus.json b/windrosewindrose_plus.json index 99d07aec6..c49fad814 100644 --- a/windrosewindrose_plus.json +++ b/windrosewindrose_plus.json @@ -25,7 +25,7 @@ "points_per_level": 1.0, "crop_speed": 1.0, "cooking_speed": 1.0, - "craft_cost": 1.0 + "craft_efficiency": 1.0 }, "debug": { "log_level": "info" From 35200258a1768f940b169bf878ff17a34c88a454 Mon Sep 17 00:00:00 2001 From: Greelan <53196309+Greelan@users.noreply.github.com> Date: Sat, 9 May 2026 19:05:31 +1000 Subject: [PATCH 7/9] Add port note, bump version --- windrose.kvp | 2 +- windroseconfig.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/windrose.kvp b/windrose.kvp index ee03db443..a6157740e 100644 --- a/windrose.kvp +++ b/windrose.kvp @@ -10,7 +10,7 @@ Meta.EndpointURIFormat= Meta.ConfigManifest=windroseconfig.json Meta.MetaConfigManifest=windrosemetaconfig.json Meta.ConfigRoot=windrose.kvp -Meta.MinAMPVersion=2.6.0.0 +Meta.MinAMPVersion=2.7.2.4 Meta.SpecificDockerImage=cubecoders/ampbase:wine-stable Meta.DockerRequired=False Meta.DockerBaseReadOnly=False diff --git a/windroseconfig.json b/windroseconfig.json index 9e6caa839..afb007933 100644 --- a/windroseconfig.json +++ b/windroseconfig.json @@ -430,7 +430,7 @@ "DisplayName": "Install Windrose+", "Category": "Updates", "Subcategory": "Runtime Configuration:build:3", - "Description": "If set, [Windrose+](https://github.com/humangenome/WindrosePlus) will be installed when the server is updated, and the PAK builder and dashboard run when the server is started. Includes UE4SS experimental build", + "Description": "If set, [Windrose+](https://github.com/humangenome/WindrosePlus) will be installed when the server is updated, and the PAK builder and dashboard run when the server is started. Includes UE4SS experimental build. Note: your instance must have a Dashboard Port allocated by AMP", "Keywords": "install,windrose+,windrose,plus,InstallWindrosePlus", "FieldName": "InstallWindrosePlus", "InputType": "checkbox", From 4ca9cf6e40dec2cdc7a3cea5b77fd7c4ead86fd4 Mon Sep 17 00:00:00 2001 From: Greelan <53196309+Greelan@users.noreply.github.com> Date: Sat, 9 May 2026 19:21:34 +1000 Subject: [PATCH 8/9] Add new setting --- windrose.kvp | 2 +- windroseconfig.json | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/windrose.kvp b/windrose.kvp index a6157740e..46c417512 100644 --- a/windrose.kvp +++ b/windrose.kvp @@ -39,7 +39,7 @@ App.WindowsCommandLineArgs= App.CommandLineArgs={{$PlatformArgs}} R5 {{$FormattedArgs}} -stdout -FullStdOutLogOutput App.UseLinuxIOREDIR=False App.AppSettings={} -App.EnvironmentVariables={"SteamAppId":"3041230","WINEPREFIX":"{{$FullRootDir}}.wine","WINEARCH":"win64","WINEDEBUG":"-all","WINEDLLOVERRIDES":"dwmapi=n,b"} +App.EnvironmentVariables={"SteamAppId":"3041230","WINEPREFIX":"{{$FullRootDir}}.wine","WINEARCH":"win64","WINEDEBUG":"-all","WINEDLLOVERRIDES":"dwmapi=n,b","WINDROSEPLUS_DISABLE_MULTIPLIER_PAK":"{{WINDROSEPLUS_DISABLE_MULTIPLIER_PAK}}"} App.CommandLineParameterFormat=-{0}={1} App.CommandLineParameterDelimiter= App.ExitMethod=OS_CLOSE diff --git a/windroseconfig.json b/windroseconfig.json index afb007933..4278d15e7 100644 --- a/windroseconfig.json +++ b/windroseconfig.json @@ -426,6 +426,21 @@ "MultipleOf": "0.000001", "EnumValues": {} }, + { + "DisplayName": "Skip/Remove Multiplier PAK", + "Category": "Windrose:stadia_controller", + "Subcategory": "WindrosePlus:extension:2", + "Description": "If set, the multiplier PAK file generated by Windrose+ will be skipped/removed on server start", + "Keywords": "multiplier,pak,disable,skip,remove,WINDROSEPLUS_DISABLE_MULTIPLIER_PAK", + "FieldName": "WINDROSEPLUS_DISABLE_MULTIPLIER_PAK", + "InputType": "checkbox", + "ParamFieldName": "WINDROSEPLUS_DISABLE_MULTIPLIER_PAK", + "DefaultValue": "0", + "EnumValues": { + "False": "0", + "True": "1" + } + }, { "DisplayName": "Install Windrose+", "Category": "Updates", From 7bd8e345224b5a3e12c8be5f78e7f8dca0ed01ec Mon Sep 17 00:00:00 2001 From: Greelan <53196309+Greelan@users.noreply.github.com> Date: Sat, 9 May 2026 19:42:20 +1000 Subject: [PATCH 9/9] Update windrose.kvp --- windrose.kvp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/windrose.kvp b/windrose.kvp index 46c417512..893d8d251 100644 --- a/windrose.kvp +++ b/windrose.kvp @@ -21,7 +21,7 @@ Meta.Prerequisites=[] Meta.ExtraContainerPackages=[] Meta.ConfigReleaseState=NotSpecified Meta.NoCommercialUsage=False -Meta.ConfigVersion=4 +Meta.ConfigVersion=5 Meta.ReleaseNotes= Meta.BreakingReleaseNotes= Meta.AppConfigId=719703a2-78d0-45fc-86c7-3d548aba1706