Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions windrose.kvp
Original file line number Diff line number Diff line change
@@ -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=
Expand All @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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
Expand All @@ -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.*$
Expand Down
275 changes: 275 additions & 0 deletions windroseconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -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"
}
}
]
6 changes: 6 additions & 0 deletions windrosemetaconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,11 @@
"AutoMap": true,
"Importable": true,
"ConfigType": "json"
},
{
"ConfigFile": "windrose_plus.json",
"AutoMap": true,
"Importable": true,
"ConfigType": "json"
}
]
7 changes: 7 additions & 0 deletions windroseports.json
Original file line number Diff line number Diff line change
Expand Up @@ -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"
}
]
42 changes: 42 additions & 0 deletions windroserundashboard.ps1
Original file line number Diff line number Diff line change
@@ -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
}
Loading