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